From 11da16405b06550f7fbb9797b3c8566f5ac526fa Mon Sep 17 00:00:00 2001 From: Lizhenqi <1011496894@qq.com> Date: Fri, 9 Jul 2021 01:23:15 +0800 Subject: [PATCH] Lizhenqi --- linux-0.11-lab/0.gdb | 5 + linux-0.11-lab/0/README | 6 + .../0/Source-Insight/Linux-0.11.IAB | Bin 0 -> 102400 bytes .../0/Source-Insight/Linux-0.11.IAD | Bin 0 -> 1328 bytes .../0/Source-Insight/Linux-0.11.IMB | Bin 0 -> 81920 bytes .../0/Source-Insight/Linux-0.11.IMD | Bin 0 -> 1128 bytes .../0/Source-Insight/Linux-0.11.PFI | Bin 0 -> 412 bytes linux-0.11-lab/0/Source-Insight/Linux-0.11.PO | Bin 0 -> 776 bytes linux-0.11-lab/0/Source-Insight/Linux-0.11.PR | Bin 0 -> 32648 bytes .../0/Source-Insight/Linux-0.11.PRI | Bin 0 -> 208984 bytes linux-0.11-lab/0/Source-Insight/Linux-0.11.PS | Bin 0 -> 623496 bytes .../0/Source-Insight/Linux-0.11.SearchResults | 2 + .../0/Source-Insight/Linux-0.11.WK3 | Bin 0 -> 8851 bytes linux-0.11-lab/0/linux/Image | Bin 0 -> 131556 bytes linux-0.11-lab/0/linux/Image.bkp | Bin 0 -> 131556 bytes linux-0.11-lab/0/linux/Makefile | 125 ++ linux-0.11-lab/0/linux/System.map | 576 +++++++++ linux-0.11-lab/0/linux/System.map.2 | 1075 ++++++++++++++++ linux-0.11-lab/0/linux/boot/bootsect | Bin 0 -> 544 bytes linux-0.11-lab/0/linux/boot/bootsect.o | Bin 0 -> 923 bytes linux-0.11-lab/0/linux/boot/bootsect.s | 260 ++++ linux-0.11-lab/0/linux/boot/head.o | Bin 0 -> 27012 bytes linux-0.11-lab/0/linux/boot/head.s | 240 ++++ linux-0.11-lab/0/linux/boot/setup | Bin 0 -> 344 bytes linux-0.11-lab/0/linux/boot/setup.o | Bin 0 -> 596 bytes linux-0.11-lab/0/linux/boot/setup.s | 231 ++++ linux-0.11-lab/0/linux/fs/Makefile | 101 ++ linux-0.11-lab/0/linux/fs/bitmap.c | 168 +++ linux-0.11-lab/0/linux/fs/bitmap.o | Bin 0 -> 10280 bytes linux-0.11-lab/0/linux/fs/block_dev.c | 73 ++ linux-0.11-lab/0/linux/fs/block_dev.o | Bin 0 -> 7296 bytes linux-0.11-lab/0/linux/fs/buffer.c | 384 ++++++ linux-0.11-lab/0/linux/fs/buffer.o | Bin 0 -> 13348 bytes linux-0.11-lab/0/linux/fs/char_dev.c | 104 ++ linux-0.11-lab/0/linux/fs/char_dev.o | Bin 0 -> 8288 bytes linux-0.11-lab/0/linux/fs/exec.c | 359 ++++++ linux-0.11-lab/0/linux/fs/exec.o | Bin 0 -> 14936 bytes linux-0.11-lab/0/linux/fs/fcntl.c | 75 ++ linux-0.11-lab/0/linux/fs/fcntl.o | Bin 0 -> 6748 bytes linux-0.11-lab/0/linux/fs/file_dev.c | 90 ++ linux-0.11-lab/0/linux/fs/file_dev.o | Bin 0 -> 7828 bytes linux-0.11-lab/0/linux/fs/file_table.c | 9 + linux-0.11-lab/0/linux/fs/file_table.o | Bin 0 -> 2644 bytes linux-0.11-lab/0/linux/fs/fs.o | Bin 0 -> 142937 bytes linux-0.11-lab/0/linux/fs/inode.c | 340 ++++++ linux-0.11-lab/0/linux/fs/inode.o | Bin 0 -> 14072 bytes linux-0.11-lab/0/linux/fs/ioctl.c | 46 + linux-0.11-lab/0/linux/fs/ioctl.o | Bin 0 -> 5828 bytes linux-0.11-lab/0/linux/fs/namei.c | 783 ++++++++++++ linux-0.11-lab/0/linux/fs/namei.o | Bin 0 -> 20756 bytes linux-0.11-lab/0/linux/fs/open.c | 208 ++++ linux-0.11-lab/0/linux/fs/open.o | Bin 0 -> 11184 bytes linux-0.11-lab/0/linux/fs/pipe.c | 111 ++ linux-0.11-lab/0/linux/fs/pipe.o | Bin 0 -> 8104 bytes linux-0.11-lab/0/linux/fs/read_write.c | 103 ++ linux-0.11-lab/0/linux/fs/read_write.o | Bin 0 -> 7520 bytes linux-0.11-lab/0/linux/fs/select.c | 10 + linux-0.11-lab/0/linux/fs/select.o | Bin 0 -> 1776 bytes linux-0.11-lab/0/linux/fs/stat.c | 66 + linux-0.11-lab/0/linux/fs/stat.o | Bin 0 -> 7212 bytes linux-0.11-lab/0/linux/fs/super.c | 282 +++++ linux-0.11-lab/0/linux/fs/super.o | Bin 0 -> 12284 bytes linux-0.11-lab/0/linux/fs/truncate.c | 65 + linux-0.11-lab/0/linux/fs/truncate.o | Bin 0 -> 6848 bytes linux-0.11-lab/0/linux/include/a.out.h | 220 ++++ linux-0.11-lab/0/linux/include/asm/io.h | 24 + linux-0.11-lab/0/linux/include/asm/memory.h | 15 + linux-0.11-lab/0/linux/include/asm/segment.h | 65 + linux-0.11-lab/0/linux/include/asm/system.h | 66 + linux-0.11-lab/0/linux/include/const.h | 15 + linux-0.11-lab/0/linux/include/ctype.h | 34 + linux-0.11-lab/0/linux/include/errno.h | 60 + linux-0.11-lab/0/linux/include/fcntl.h | 55 + linux-0.11-lab/0/linux/include/linux/config.h | 48 + linux-0.11-lab/0/linux/include/linux/fdreg.h | 71 ++ linux-0.11-lab/0/linux/include/linux/fs.h | 202 +++ linux-0.11-lab/0/linux/include/linux/hdreg.h | 65 + linux-0.11-lab/0/linux/include/linux/head.h | 20 + linux-0.11-lab/0/linux/include/linux/kernel.h | 22 + linux-0.11-lab/0/linux/include/linux/mm.h | 10 + linux-0.11-lab/0/linux/include/linux/sched.h | 239 ++++ linux-0.11-lab/0/linux/include/linux/sys.h | 111 ++ linux-0.11-lab/0/linux/include/linux/tty.h | 77 ++ linux-0.11-lab/0/linux/include/signal.h | 68 ++ linux-0.11-lab/0/linux/include/stdarg.h | 28 + linux-0.11-lab/0/linux/include/stddef.h | 19 + linux-0.11-lab/0/linux/include/string.h | 405 ++++++ linux-0.11-lab/0/linux/include/sys/stat.h | 60 + linux-0.11-lab/0/linux/include/sys/times.h | 15 + linux-0.11-lab/0/linux/include/sys/types.h | 46 + linux-0.11-lab/0/linux/include/sys/utsname.h | 16 + linux-0.11-lab/0/linux/include/sys/wait.h | 23 + linux-0.11-lab/0/linux/include/termios.h | 228 ++++ linux-0.11-lab/0/linux/include/time.h | 42 + linux-0.11-lab/0/linux/include/unistd.h | 269 ++++ linux-0.11-lab/0/linux/include/utime.h | 13 + linux-0.11-lab/0/linux/init/main.c | 210 ++++ linux-0.11-lab/0/linux/init/main.o | Bin 0 -> 9040 bytes linux-0.11-lab/0/linux/kernel/Makefile | 83 ++ linux-0.11-lab/0/linux/kernel/asm.o | Bin 0 -> 1740 bytes linux-0.11-lab/0/linux/kernel/asm.s | 146 +++ .../0/linux/kernel/blk_drv/Makefile | 58 + linux-0.11-lab/0/linux/kernel/blk_drv/blk.h | 140 +++ .../0/linux/kernel/blk_drv/blk_drv.a | Bin 0 -> 52212 bytes .../0/linux/kernel/blk_drv/floppy.c | 463 +++++++ .../0/linux/kernel/blk_drv/floppy.o | Bin 0 -> 16612 bytes linux-0.11-lab/0/linux/kernel/blk_drv/hd.c | 351 ++++++ linux-0.11-lab/0/linux/kernel/blk_drv/hd.o | Bin 0 -> 15520 bytes .../0/linux/kernel/blk_drv/ll_rw_blk.c | 165 +++ .../0/linux/kernel/blk_drv/ll_rw_blk.o | Bin 0 -> 8740 bytes .../0/linux/kernel/blk_drv/ramdisk.c | 126 ++ .../0/linux/kernel/blk_drv/ramdisk.o | Bin 0 -> 10664 bytes .../0/linux/kernel/chr_drv/Makefile | 68 ++ .../0/linux/kernel/chr_drv/chr_drv.a | Bin 0 -> 68902 bytes .../0/linux/kernel/chr_drv/console.c | 710 +++++++++++ .../0/linux/kernel/chr_drv/console.o | Bin 0 -> 20896 bytes .../0/linux/kernel/chr_drv/keyboard.2.o | Bin 0 -> 6024 bytes .../0/linux/kernel/chr_drv/keyboard.2.s | 466 +++++++ .../0/linux/kernel/chr_drv/keyboard.S | 588 +++++++++ linux-0.11-lab/0/linux/kernel/chr_drv/rs_io.o | Bin 0 -> 1320 bytes linux-0.11-lab/0/linux/kernel/chr_drv/rs_io.s | 147 +++ .../0/linux/kernel/chr_drv/serial.c | 59 + .../0/linux/kernel/chr_drv/serial.o | Bin 0 -> 6752 bytes .../0/linux/kernel/chr_drv/tty_io.c | 349 ++++++ .../0/linux/kernel/chr_drv/tty_io.o | Bin 0 -> 22504 bytes .../0/linux/kernel/chr_drv/tty_ioctl.c | 204 ++++ .../0/linux/kernel/chr_drv/tty_ioctl.o | Bin 0 -> 10648 bytes linux-0.11-lab/0/linux/kernel/exit.c | 197 +++ linux-0.11-lab/0/linux/kernel/exit.o | Bin 0 -> 11164 bytes linux-0.11-lab/0/linux/kernel/fork.c | 148 +++ linux-0.11-lab/0/linux/kernel/fork.o | Bin 0 -> 9640 bytes linux-0.11-lab/0/linux/kernel/kernel.o | Bin 0 -> 84086 bytes linux-0.11-lab/0/linux/kernel/math/Makefile | 43 + linux-0.11-lab/0/linux/kernel/math/math.a | Bin 0 -> 6628 bytes .../0/linux/kernel/math/math_emulate.c | 42 + .../0/linux/kernel/math/math_emulate.o | Bin 0 -> 6464 bytes linux-0.11-lab/0/linux/kernel/mktime.c | 58 + linux-0.11-lab/0/linux/kernel/mktime.o | Bin 0 -> 2872 bytes linux-0.11-lab/0/linux/kernel/panic.c | 24 + linux-0.11-lab/0/linux/kernel/panic.o | Bin 0 -> 5424 bytes linux-0.11-lab/0/linux/kernel/printk.c | 41 + linux-0.11-lab/0/linux/kernel/printk.o | Bin 0 -> 2424 bytes linux-0.11-lab/0/linux/kernel/sched.c | 412 +++++++ linux-0.11-lab/0/linux/kernel/sched.o | Bin 0 -> 22732 bytes linux-0.11-lab/0/linux/kernel/signal.c | 129 ++ linux-0.11-lab/0/linux/kernel/signal.o | Bin 0 -> 8960 bytes linux-0.11-lab/0/linux/kernel/sys.c | 292 +++++ linux-0.11-lab/0/linux/kernel/sys.o | Bin 0 -> 13088 bytes linux-0.11-lab/0/linux/kernel/system_call.o | Bin 0 -> 2520 bytes linux-0.11-lab/0/linux/kernel/system_call.s | 285 +++++ linux-0.11-lab/0/linux/kernel/traps.c | 208 ++++ linux-0.11-lab/0/linux/kernel/traps.o | Bin 0 -> 12972 bytes linux-0.11-lab/0/linux/kernel/vsprintf.c | 233 ++++ linux-0.11-lab/0/linux/kernel/vsprintf.o | Bin 0 -> 6156 bytes linux-0.11-lab/0/linux/lib/Makefile | 73 ++ linux-0.11-lab/0/linux/lib/_exit.c | 13 + linux-0.11-lab/0/linux/lib/_exit.o | Bin 0 -> 1992 bytes linux-0.11-lab/0/linux/lib/close.c | 10 + linux-0.11-lab/0/linux/lib/close.o | Bin 0 -> 2224 bytes linux-0.11-lab/0/linux/lib/ctype.c | 35 + linux-0.11-lab/0/linux/lib/ctype.o | Bin 0 -> 1908 bytes linux-0.11-lab/0/linux/lib/dup.c | 10 + linux-0.11-lab/0/linux/lib/dup.o | Bin 0 -> 2200 bytes linux-0.11-lab/0/linux/lib/errno.c | 7 + linux-0.11-lab/0/linux/lib/errno.o | Bin 0 -> 1472 bytes linux-0.11-lab/0/linux/lib/execve.c | 10 + linux-0.11-lab/0/linux/lib/execve.o | Bin 0 -> 2340 bytes linux-0.11-lab/0/linux/lib/lib.a | Bin 0 -> 34170 bytes linux-0.11-lab/0/linux/lib/malloc.c | 232 ++++ linux-0.11-lab/0/linux/lib/malloc.o | Bin 0 -> 4880 bytes linux-0.11-lab/0/linux/lib/open.c | 25 + linux-0.11-lab/0/linux/lib/open.o | Bin 0 -> 2368 bytes linux-0.11-lab/0/linux/lib/setsid.c | 10 + linux-0.11-lab/0/linux/lib/setsid.o | Bin 0 -> 2244 bytes linux-0.11-lab/0/linux/lib/string.c | 14 + linux-0.11-lab/0/linux/lib/string.o | Bin 0 -> 6380 bytes linux-0.11-lab/0/linux/lib/wait.c | 16 + linux-0.11-lab/0/linux/lib/wait.o | Bin 0 -> 2584 bytes linux-0.11-lab/0/linux/lib/write.c | 10 + linux-0.11-lab/0/linux/lib/write.o | Bin 0 -> 2376 bytes linux-0.11-lab/0/linux/mm/Makefile | 38 + linux-0.11-lab/0/linux/mm/memory.c | 431 +++++++ linux-0.11-lab/0/linux/mm/memory.o | Bin 0 -> 12924 bytes linux-0.11-lab/0/linux/mm/mm.o | Bin 0 -> 13048 bytes linux-0.11-lab/0/linux/mm/page.o | Bin 0 -> 640 bytes linux-0.11-lab/0/linux/mm/page.s | 40 + linux-0.11-lab/0/linux/tools/build | Bin 0 -> 15144 bytes linux-0.11-lab/0/linux/tools/build.c | 171 +++ linux-0.11-lab/0/linux/tools/system | Bin 0 -> 286057 bytes linux-0.11-lab/4/README | 6 + .../4/Source-Insight/Linux-0.11.IAB | Bin 0 -> 102400 bytes .../4/Source-Insight/Linux-0.11.IAD | Bin 0 -> 1328 bytes .../4/Source-Insight/Linux-0.11.IMB | Bin 0 -> 81920 bytes .../4/Source-Insight/Linux-0.11.IMD | Bin 0 -> 1128 bytes .../4/Source-Insight/Linux-0.11.PFI | Bin 0 -> 412 bytes linux-0.11-lab/4/Source-Insight/Linux-0.11.PO | Bin 0 -> 776 bytes linux-0.11-lab/4/Source-Insight/Linux-0.11.PR | Bin 0 -> 32648 bytes .../4/Source-Insight/Linux-0.11.PRI | Bin 0 -> 208984 bytes linux-0.11-lab/4/Source-Insight/Linux-0.11.PS | Bin 0 -> 623496 bytes .../4/Source-Insight/Linux-0.11.SearchResults | 2 + .../4/Source-Insight/Linux-0.11.WK3 | Bin 0 -> 8851 bytes linux-0.11-lab/4/linux/Image | Bin 0 -> 137604 bytes linux-0.11-lab/4/linux/Image.bkp | Bin 0 -> 131556 bytes linux-0.11-lab/4/linux/Makefile | 125 ++ linux-0.11-lab/4/linux/System.map | 593 +++++++++ linux-0.11-lab/4/linux/System.map.2 | 1087 +++++++++++++++++ linux-0.11-lab/4/linux/boot/bootsect | Bin 0 -> 544 bytes linux-0.11-lab/4/linux/boot/bootsect.o | Bin 0 -> 923 bytes linux-0.11-lab/4/linux/boot/bootsect.s | 260 ++++ linux-0.11-lab/4/linux/boot/head.o | Bin 0 -> 27012 bytes linux-0.11-lab/4/linux/boot/head.s | 240 ++++ linux-0.11-lab/4/linux/boot/setup | Bin 0 -> 344 bytes linux-0.11-lab/4/linux/boot/setup.o | Bin 0 -> 596 bytes linux-0.11-lab/4/linux/boot/setup.s | 231 ++++ linux-0.11-lab/4/linux/fs/Makefile | 101 ++ linux-0.11-lab/4/linux/fs/bitmap.c | 168 +++ linux-0.11-lab/4/linux/fs/bitmap.o | Bin 0 -> 10280 bytes linux-0.11-lab/4/linux/fs/block_dev.c | 73 ++ linux-0.11-lab/4/linux/fs/block_dev.o | Bin 0 -> 7296 bytes linux-0.11-lab/4/linux/fs/buffer.c | 384 ++++++ linux-0.11-lab/4/linux/fs/buffer.o | Bin 0 -> 13348 bytes linux-0.11-lab/4/linux/fs/char_dev.c | 104 ++ linux-0.11-lab/4/linux/fs/char_dev.o | Bin 0 -> 8288 bytes linux-0.11-lab/4/linux/fs/exec.c | 545 +++++++++ linux-0.11-lab/4/linux/fs/exec.o | Bin 0 -> 19240 bytes linux-0.11-lab/4/linux/fs/fcntl.c | 75 ++ linux-0.11-lab/4/linux/fs/fcntl.o | Bin 0 -> 6748 bytes linux-0.11-lab/4/linux/fs/file_dev.c | 125 ++ linux-0.11-lab/4/linux/fs/file_dev.o | Bin 0 -> 8624 bytes linux-0.11-lab/4/linux/fs/file_table.c | 9 + linux-0.11-lab/4/linux/fs/file_table.o | Bin 0 -> 2644 bytes linux-0.11-lab/4/linux/fs/fs.o | Bin 0 -> 153208 bytes linux-0.11-lab/4/linux/fs/inode.c | 340 ++++++ linux-0.11-lab/4/linux/fs/inode.o | Bin 0 -> 14068 bytes linux-0.11-lab/4/linux/fs/ioctl.c | 46 + linux-0.11-lab/4/linux/fs/ioctl.o | Bin 0 -> 5828 bytes linux-0.11-lab/4/linux/fs/namei.c | 783 ++++++++++++ linux-0.11-lab/4/linux/fs/namei.o | Bin 0 -> 20756 bytes linux-0.11-lab/4/linux/fs/open.c | 281 +++++ linux-0.11-lab/4/linux/fs/open.o | Bin 0 -> 14656 bytes linux-0.11-lab/4/linux/fs/pipe.c | 152 +++ linux-0.11-lab/4/linux/fs/pipe.o | Bin 0 -> 8972 bytes linux-0.11-lab/4/linux/fs/read_write.c | 129 ++ linux-0.11-lab/4/linux/fs/read_write.o | Bin 0 -> 8476 bytes linux-0.11-lab/4/linux/fs/select.c | 10 + linux-0.11-lab/4/linux/fs/select.o | Bin 0 -> 1776 bytes linux-0.11-lab/4/linux/fs/stat.c | 66 + linux-0.11-lab/4/linux/fs/stat.o | Bin 0 -> 7212 bytes linux-0.11-lab/4/linux/fs/super.c | 282 +++++ linux-0.11-lab/4/linux/fs/super.o | Bin 0 -> 12284 bytes linux-0.11-lab/4/linux/fs/truncate.c | 65 + linux-0.11-lab/4/linux/fs/truncate.o | Bin 0 -> 6848 bytes linux-0.11-lab/4/linux/include/a.out.h | 220 ++++ linux-0.11-lab/4/linux/include/asm/io.h | 24 + linux-0.11-lab/4/linux/include/asm/memory.h | 15 + linux-0.11-lab/4/linux/include/asm/segment.h | 65 + linux-0.11-lab/4/linux/include/asm/system.h | 66 + linux-0.11-lab/4/linux/include/const.h | 15 + linux-0.11-lab/4/linux/include/ctype.h | 34 + linux-0.11-lab/4/linux/include/errno.h | 60 + linux-0.11-lab/4/linux/include/fcntl.h | 55 + linux-0.11-lab/4/linux/include/linux/config.h | 48 + linux-0.11-lab/4/linux/include/linux/fdreg.h | 71 ++ linux-0.11-lab/4/linux/include/linux/fs.h | 202 +++ linux-0.11-lab/4/linux/include/linux/hdreg.h | 65 + linux-0.11-lab/4/linux/include/linux/head.h | 20 + linux-0.11-lab/4/linux/include/linux/kernel.h | 22 + linux-0.11-lab/4/linux/include/linux/mm.h | 10 + linux-0.11-lab/4/linux/include/linux/sched.h | 239 ++++ linux-0.11-lab/4/linux/include/linux/sys.h | 119 ++ linux-0.11-lab/4/linux/include/linux/tty.h | 77 ++ linux-0.11-lab/4/linux/include/signal.h | 68 ++ linux-0.11-lab/4/linux/include/stdarg.h | 28 + linux-0.11-lab/4/linux/include/stddef.h | 19 + linux-0.11-lab/4/linux/include/string.h | 405 ++++++ linux-0.11-lab/4/linux/include/sys/stat.h | 65 + linux-0.11-lab/4/linux/include/sys/times.h | 15 + linux-0.11-lab/4/linux/include/sys/types.h | 46 + linux-0.11-lab/4/linux/include/sys/utsname.h | 16 + linux-0.11-lab/4/linux/include/sys/wait.h | 23 + linux-0.11-lab/4/linux/include/termios.h | 228 ++++ linux-0.11-lab/4/linux/include/time.h | 42 + linux-0.11-lab/4/linux/include/unistd.h | 277 +++++ linux-0.11-lab/4/linux/include/utime.h | 13 + linux-0.11-lab/4/linux/init/main.c | 216 ++++ linux-0.11-lab/4/linux/init/main.o | Bin 0 -> 12208 bytes linux-0.11-lab/4/linux/kernel/Makefile | 83 ++ linux-0.11-lab/4/linux/kernel/asm.o | Bin 0 -> 1740 bytes linux-0.11-lab/4/linux/kernel/asm.s | 146 +++ .../4/linux/kernel/blk_drv/Makefile | 58 + linux-0.11-lab/4/linux/kernel/blk_drv/blk.h | 140 +++ .../4/linux/kernel/blk_drv/blk_drv.a | Bin 0 -> 52212 bytes .../4/linux/kernel/blk_drv/floppy.c | 463 +++++++ .../4/linux/kernel/blk_drv/floppy.o | Bin 0 -> 16612 bytes linux-0.11-lab/4/linux/kernel/blk_drv/hd.c | 351 ++++++ linux-0.11-lab/4/linux/kernel/blk_drv/hd.o | Bin 0 -> 15520 bytes .../4/linux/kernel/blk_drv/ll_rw_blk.c | 165 +++ .../4/linux/kernel/blk_drv/ll_rw_blk.o | Bin 0 -> 8740 bytes .../4/linux/kernel/blk_drv/ramdisk.c | 126 ++ .../4/linux/kernel/blk_drv/ramdisk.o | Bin 0 -> 10664 bytes .../4/linux/kernel/chr_drv/Makefile | 68 ++ .../4/linux/kernel/chr_drv/chr_drv.a | Bin 0 -> 68902 bytes .../4/linux/kernel/chr_drv/console.c | 710 +++++++++++ .../4/linux/kernel/chr_drv/console.o | Bin 0 -> 20896 bytes .../4/linux/kernel/chr_drv/keyboard.2.o | Bin 0 -> 6024 bytes .../4/linux/kernel/chr_drv/keyboard.2.s | 466 +++++++ .../4/linux/kernel/chr_drv/keyboard.S | 588 +++++++++ linux-0.11-lab/4/linux/kernel/chr_drv/rs_io.o | Bin 0 -> 1320 bytes linux-0.11-lab/4/linux/kernel/chr_drv/rs_io.s | 147 +++ .../4/linux/kernel/chr_drv/serial.c | 59 + .../4/linux/kernel/chr_drv/serial.o | Bin 0 -> 6752 bytes .../4/linux/kernel/chr_drv/tty_io.c | 349 ++++++ .../4/linux/kernel/chr_drv/tty_io.o | Bin 0 -> 22504 bytes .../4/linux/kernel/chr_drv/tty_ioctl.c | 204 ++++ .../4/linux/kernel/chr_drv/tty_ioctl.o | Bin 0 -> 10648 bytes linux-0.11-lab/4/linux/kernel/exit.c | 197 +++ linux-0.11-lab/4/linux/kernel/exit.o | Bin 0 -> 11164 bytes linux-0.11-lab/4/linux/kernel/fork.c | 148 +++ linux-0.11-lab/4/linux/kernel/fork.o | Bin 0 -> 9640 bytes linux-0.11-lab/4/linux/kernel/kernel.o | Bin 0 -> 84704 bytes linux-0.11-lab/4/linux/kernel/math/Makefile | 43 + linux-0.11-lab/4/linux/kernel/math/math.a | Bin 0 -> 6628 bytes .../4/linux/kernel/math/math_emulate.c | 42 + .../4/linux/kernel/math/math_emulate.o | Bin 0 -> 6464 bytes linux-0.11-lab/4/linux/kernel/mktime.c | 58 + linux-0.11-lab/4/linux/kernel/mktime.o | Bin 0 -> 2872 bytes linux-0.11-lab/4/linux/kernel/panic.c | 24 + linux-0.11-lab/4/linux/kernel/panic.o | Bin 0 -> 5424 bytes linux-0.11-lab/4/linux/kernel/printk.c | 41 + linux-0.11-lab/4/linux/kernel/printk.o | Bin 0 -> 2424 bytes linux-0.11-lab/4/linux/kernel/sched.c | 418 +++++++ linux-0.11-lab/4/linux/kernel/sched.o | Bin 0 -> 23272 bytes linux-0.11-lab/4/linux/kernel/signal.c | 129 ++ linux-0.11-lab/4/linux/kernel/signal.o | Bin 0 -> 8960 bytes linux-0.11-lab/4/linux/kernel/sys.c | 292 +++++ linux-0.11-lab/4/linux/kernel/sys.o | Bin 0 -> 13088 bytes linux-0.11-lab/4/linux/kernel/system_call.o | Bin 0 -> 2640 bytes linux-0.11-lab/4/linux/kernel/system_call.s | 298 +++++ linux-0.11-lab/4/linux/kernel/traps.c | 208 ++++ linux-0.11-lab/4/linux/kernel/traps.o | Bin 0 -> 12972 bytes linux-0.11-lab/4/linux/kernel/vsprintf.c | 233 ++++ linux-0.11-lab/4/linux/kernel/vsprintf.o | Bin 0 -> 6156 bytes linux-0.11-lab/4/linux/lib/Makefile | 73 ++ linux-0.11-lab/4/linux/lib/_exit.c | 13 + linux-0.11-lab/4/linux/lib/_exit.o | Bin 0 -> 1988 bytes linux-0.11-lab/4/linux/lib/close.c | 10 + linux-0.11-lab/4/linux/lib/close.o | Bin 0 -> 2220 bytes linux-0.11-lab/4/linux/lib/ctype.c | 35 + linux-0.11-lab/4/linux/lib/ctype.o | Bin 0 -> 1908 bytes linux-0.11-lab/4/linux/lib/dup.c | 10 + linux-0.11-lab/4/linux/lib/dup.o | Bin 0 -> 2200 bytes linux-0.11-lab/4/linux/lib/errno.c | 7 + linux-0.11-lab/4/linux/lib/errno.o | Bin 0 -> 1472 bytes linux-0.11-lab/4/linux/lib/execve.c | 10 + linux-0.11-lab/4/linux/lib/execve.o | Bin 0 -> 2336 bytes linux-0.11-lab/4/linux/lib/lib.a | Bin 0 -> 34150 bytes linux-0.11-lab/4/linux/lib/malloc.c | 232 ++++ linux-0.11-lab/4/linux/lib/malloc.o | Bin 0 -> 4880 bytes linux-0.11-lab/4/linux/lib/open.c | 25 + linux-0.11-lab/4/linux/lib/open.o | Bin 0 -> 2364 bytes linux-0.11-lab/4/linux/lib/setsid.c | 10 + linux-0.11-lab/4/linux/lib/setsid.o | Bin 0 -> 2244 bytes linux-0.11-lab/4/linux/lib/string.c | 14 + linux-0.11-lab/4/linux/lib/string.o | Bin 0 -> 6380 bytes linux-0.11-lab/4/linux/lib/wait.c | 16 + linux-0.11-lab/4/linux/lib/wait.o | Bin 0 -> 2580 bytes linux-0.11-lab/4/linux/lib/write.c | 10 + linux-0.11-lab/4/linux/lib/write.o | Bin 0 -> 2376 bytes linux-0.11-lab/4/linux/mm/Makefile | 38 + linux-0.11-lab/4/linux/mm/memory.c | 466 +++++++ linux-0.11-lab/4/linux/mm/memory.o | Bin 0 -> 13812 bytes linux-0.11-lab/4/linux/mm/mm.o | Bin 0 -> 13933 bytes linux-0.11-lab/4/linux/mm/page.o | Bin 0 -> 640 bytes linux-0.11-lab/4/linux/mm/page.s | 40 + linux-0.11-lab/4/linux/tools/build | Bin 0 -> 15144 bytes linux-0.11-lab/4/linux/tools/build.c | 171 +++ linux-0.11-lab/4/linux/tools/system | Bin 0 -> 297648 bytes linux-0.11-lab/ModifyCur.sh | 5 + linux-0.11-lab/b/Makefile | 27 + linux-0.11-lab/b/README | 19 + linux-0.11-lab/b/a.out | Bin 0 -> 7399 bytes linux-0.11-lab/b/clone.c | 66 + linux-0.11-lab/b/echo.c | 12 + linux-0.11-lab/b/execve.c | 21 + linux-0.11-lab/b/execve2.c | 24 + linux-0.11-lab/b/execve2.patch | 41 + linux-0.11-lab/b/getcwd.c | 39 + linux-0.11-lab/b/getdents.c | 42 + linux-0.11-lab/b/mmap.c | 62 + linux-0.11-lab/b/munmap.c | 70 ++ linux-0.11-lab/b/mytest.c | 121 ++ linux-0.11-lab/b/new.h | 30 + linux-0.11-lab/b/oscomp_syscalls.md | 109 ++ linux-0.11-lab/b/pipe.c | 44 + linux-0.11-lab/b/sleep.c | 38 + linux-0.11-lab/b/unistd.h | 277 +++++ linux-0.11-lab/bochsout.txt | 314 +++++ linux-0.11-lab/conf/0.11-gdbstub.bxrc | 33 + linux-0.11-lab/conf/0.11.bxrc | 31 + linux-0.11-lab/cur/README | 6 + .../cur/Source-Insight/Linux-0.11.IAB | Bin 0 -> 102400 bytes .../cur/Source-Insight/Linux-0.11.IAD | Bin 0 -> 1328 bytes .../cur/Source-Insight/Linux-0.11.IMB | Bin 0 -> 81920 bytes .../cur/Source-Insight/Linux-0.11.IMD | Bin 0 -> 1128 bytes .../cur/Source-Insight/Linux-0.11.PFI | Bin 0 -> 412 bytes .../cur/Source-Insight/Linux-0.11.PO | Bin 0 -> 776 bytes .../cur/Source-Insight/Linux-0.11.PR | Bin 0 -> 32648 bytes .../cur/Source-Insight/Linux-0.11.PRI | Bin 0 -> 208984 bytes .../cur/Source-Insight/Linux-0.11.PS | Bin 0 -> 623496 bytes .../Source-Insight/Linux-0.11.SearchResults | 2 + .../cur/Source-Insight/Linux-0.11.WK3 | Bin 0 -> 8851 bytes linux-0.11-lab/cur/linux/Image | Bin 0 -> 137604 bytes linux-0.11-lab/cur/linux/Image.bkp | Bin 0 -> 131556 bytes linux-0.11-lab/cur/linux/Makefile | 125 ++ linux-0.11-lab/cur/linux/System.map | 593 +++++++++ linux-0.11-lab/cur/linux/System.map.2 | 1087 +++++++++++++++++ linux-0.11-lab/cur/linux/boot/bootsect | Bin 0 -> 544 bytes linux-0.11-lab/cur/linux/boot/bootsect.o | Bin 0 -> 923 bytes linux-0.11-lab/cur/linux/boot/bootsect.s | 260 ++++ linux-0.11-lab/cur/linux/boot/head.o | Bin 0 -> 27012 bytes linux-0.11-lab/cur/linux/boot/head.s | 240 ++++ linux-0.11-lab/cur/linux/boot/setup | Bin 0 -> 344 bytes linux-0.11-lab/cur/linux/boot/setup.o | Bin 0 -> 596 bytes linux-0.11-lab/cur/linux/boot/setup.s | 231 ++++ linux-0.11-lab/cur/linux/fs/Makefile | 101 ++ linux-0.11-lab/cur/linux/fs/bitmap.c | 168 +++ linux-0.11-lab/cur/linux/fs/bitmap.o | Bin 0 -> 10280 bytes linux-0.11-lab/cur/linux/fs/block_dev.c | 73 ++ linux-0.11-lab/cur/linux/fs/block_dev.o | Bin 0 -> 7296 bytes linux-0.11-lab/cur/linux/fs/buffer.c | 384 ++++++ linux-0.11-lab/cur/linux/fs/buffer.o | Bin 0 -> 13348 bytes linux-0.11-lab/cur/linux/fs/char_dev.c | 104 ++ linux-0.11-lab/cur/linux/fs/char_dev.o | Bin 0 -> 8288 bytes linux-0.11-lab/cur/linux/fs/exec.c | 545 +++++++++ linux-0.11-lab/cur/linux/fs/exec.o | Bin 0 -> 19240 bytes linux-0.11-lab/cur/linux/fs/fcntl.c | 75 ++ linux-0.11-lab/cur/linux/fs/fcntl.o | Bin 0 -> 6748 bytes linux-0.11-lab/cur/linux/fs/file_dev.c | 125 ++ linux-0.11-lab/cur/linux/fs/file_dev.o | Bin 0 -> 8624 bytes linux-0.11-lab/cur/linux/fs/file_table.c | 9 + linux-0.11-lab/cur/linux/fs/file_table.o | Bin 0 -> 2644 bytes linux-0.11-lab/cur/linux/fs/fs.o | Bin 0 -> 153208 bytes linux-0.11-lab/cur/linux/fs/inode.c | 340 ++++++ linux-0.11-lab/cur/linux/fs/inode.o | Bin 0 -> 14068 bytes linux-0.11-lab/cur/linux/fs/ioctl.c | 46 + linux-0.11-lab/cur/linux/fs/ioctl.o | Bin 0 -> 5828 bytes linux-0.11-lab/cur/linux/fs/namei.c | 783 ++++++++++++ linux-0.11-lab/cur/linux/fs/namei.o | Bin 0 -> 20756 bytes linux-0.11-lab/cur/linux/fs/open.c | 281 +++++ linux-0.11-lab/cur/linux/fs/open.o | Bin 0 -> 14656 bytes linux-0.11-lab/cur/linux/fs/pipe.c | 152 +++ linux-0.11-lab/cur/linux/fs/pipe.o | Bin 0 -> 8972 bytes linux-0.11-lab/cur/linux/fs/read_write.c | 129 ++ linux-0.11-lab/cur/linux/fs/read_write.o | Bin 0 -> 8476 bytes linux-0.11-lab/cur/linux/fs/select.c | 10 + linux-0.11-lab/cur/linux/fs/select.o | Bin 0 -> 1776 bytes linux-0.11-lab/cur/linux/fs/stat.c | 66 + linux-0.11-lab/cur/linux/fs/stat.o | Bin 0 -> 7212 bytes linux-0.11-lab/cur/linux/fs/super.c | 282 +++++ linux-0.11-lab/cur/linux/fs/super.o | Bin 0 -> 12284 bytes linux-0.11-lab/cur/linux/fs/truncate.c | 65 + linux-0.11-lab/cur/linux/fs/truncate.o | Bin 0 -> 6848 bytes linux-0.11-lab/cur/linux/include/a.out.h | 220 ++++ linux-0.11-lab/cur/linux/include/asm/io.h | 24 + linux-0.11-lab/cur/linux/include/asm/memory.h | 15 + .../cur/linux/include/asm/segment.h | 65 + linux-0.11-lab/cur/linux/include/asm/system.h | 66 + linux-0.11-lab/cur/linux/include/const.h | 15 + linux-0.11-lab/cur/linux/include/ctype.h | 34 + linux-0.11-lab/cur/linux/include/errno.h | 60 + linux-0.11-lab/cur/linux/include/fcntl.h | 55 + .../cur/linux/include/linux/config.h | 48 + .../cur/linux/include/linux/fdreg.h | 71 ++ linux-0.11-lab/cur/linux/include/linux/fs.h | 202 +++ .../cur/linux/include/linux/hdreg.h | 65 + linux-0.11-lab/cur/linux/include/linux/head.h | 20 + .../cur/linux/include/linux/kernel.h | 22 + linux-0.11-lab/cur/linux/include/linux/mm.h | 10 + .../cur/linux/include/linux/sched.h | 239 ++++ linux-0.11-lab/cur/linux/include/linux/sys.h | 119 ++ linux-0.11-lab/cur/linux/include/linux/tty.h | 77 ++ linux-0.11-lab/cur/linux/include/signal.h | 68 ++ linux-0.11-lab/cur/linux/include/stdarg.h | 28 + linux-0.11-lab/cur/linux/include/stddef.h | 19 + linux-0.11-lab/cur/linux/include/string.h | 405 ++++++ linux-0.11-lab/cur/linux/include/sys/stat.h | 65 + linux-0.11-lab/cur/linux/include/sys/times.h | 15 + linux-0.11-lab/cur/linux/include/sys/types.h | 46 + .../cur/linux/include/sys/utsname.h | 16 + linux-0.11-lab/cur/linux/include/sys/wait.h | 23 + linux-0.11-lab/cur/linux/include/termios.h | 228 ++++ linux-0.11-lab/cur/linux/include/time.h | 42 + linux-0.11-lab/cur/linux/include/unistd.h | 277 +++++ linux-0.11-lab/cur/linux/include/utime.h | 13 + linux-0.11-lab/cur/linux/init/main.c | 216 ++++ linux-0.11-lab/cur/linux/init/main.o | Bin 0 -> 12208 bytes linux-0.11-lab/cur/linux/kernel/Makefile | 83 ++ linux-0.11-lab/cur/linux/kernel/asm.o | Bin 0 -> 1740 bytes linux-0.11-lab/cur/linux/kernel/asm.s | 146 +++ .../cur/linux/kernel/blk_drv/Makefile | 58 + linux-0.11-lab/cur/linux/kernel/blk_drv/blk.h | 140 +++ .../cur/linux/kernel/blk_drv/blk_drv.a | Bin 0 -> 52212 bytes .../cur/linux/kernel/blk_drv/floppy.c | 463 +++++++ .../cur/linux/kernel/blk_drv/floppy.o | Bin 0 -> 16612 bytes linux-0.11-lab/cur/linux/kernel/blk_drv/hd.c | 351 ++++++ linux-0.11-lab/cur/linux/kernel/blk_drv/hd.o | Bin 0 -> 15520 bytes .../cur/linux/kernel/blk_drv/ll_rw_blk.c | 165 +++ .../cur/linux/kernel/blk_drv/ll_rw_blk.o | Bin 0 -> 8740 bytes .../cur/linux/kernel/blk_drv/ramdisk.c | 126 ++ .../cur/linux/kernel/blk_drv/ramdisk.o | Bin 0 -> 10664 bytes .../cur/linux/kernel/chr_drv/Makefile | 68 ++ .../cur/linux/kernel/chr_drv/chr_drv.a | Bin 0 -> 68902 bytes .../cur/linux/kernel/chr_drv/console.c | 710 +++++++++++ .../cur/linux/kernel/chr_drv/console.o | Bin 0 -> 20896 bytes .../cur/linux/kernel/chr_drv/keyboard.2.o | Bin 0 -> 6024 bytes .../cur/linux/kernel/chr_drv/keyboard.2.s | 466 +++++++ .../cur/linux/kernel/chr_drv/keyboard.S | 588 +++++++++ .../cur/linux/kernel/chr_drv/rs_io.o | Bin 0 -> 1320 bytes .../cur/linux/kernel/chr_drv/rs_io.s | 147 +++ .../cur/linux/kernel/chr_drv/serial.c | 59 + .../cur/linux/kernel/chr_drv/serial.o | Bin 0 -> 6752 bytes .../cur/linux/kernel/chr_drv/tty_io.c | 349 ++++++ .../cur/linux/kernel/chr_drv/tty_io.o | Bin 0 -> 22504 bytes .../cur/linux/kernel/chr_drv/tty_ioctl.c | 204 ++++ .../cur/linux/kernel/chr_drv/tty_ioctl.o | Bin 0 -> 10648 bytes linux-0.11-lab/cur/linux/kernel/exit.c | 197 +++ linux-0.11-lab/cur/linux/kernel/exit.o | Bin 0 -> 11164 bytes linux-0.11-lab/cur/linux/kernel/fork.c | 148 +++ linux-0.11-lab/cur/linux/kernel/fork.o | Bin 0 -> 9640 bytes linux-0.11-lab/cur/linux/kernel/kernel.o | Bin 0 -> 84704 bytes linux-0.11-lab/cur/linux/kernel/math/Makefile | 43 + linux-0.11-lab/cur/linux/kernel/math/math.a | Bin 0 -> 6628 bytes .../cur/linux/kernel/math/math_emulate.c | 42 + .../cur/linux/kernel/math/math_emulate.o | Bin 0 -> 6464 bytes linux-0.11-lab/cur/linux/kernel/mktime.c | 58 + linux-0.11-lab/cur/linux/kernel/mktime.o | Bin 0 -> 2872 bytes linux-0.11-lab/cur/linux/kernel/panic.c | 24 + linux-0.11-lab/cur/linux/kernel/panic.o | Bin 0 -> 5424 bytes linux-0.11-lab/cur/linux/kernel/printk.c | 41 + linux-0.11-lab/cur/linux/kernel/printk.o | Bin 0 -> 2424 bytes linux-0.11-lab/cur/linux/kernel/sched.c | 418 +++++++ linux-0.11-lab/cur/linux/kernel/sched.o | Bin 0 -> 23272 bytes linux-0.11-lab/cur/linux/kernel/signal.c | 129 ++ linux-0.11-lab/cur/linux/kernel/signal.o | Bin 0 -> 8960 bytes linux-0.11-lab/cur/linux/kernel/sys.c | 292 +++++ linux-0.11-lab/cur/linux/kernel/sys.o | Bin 0 -> 13088 bytes linux-0.11-lab/cur/linux/kernel/system_call.o | Bin 0 -> 2640 bytes linux-0.11-lab/cur/linux/kernel/system_call.s | 298 +++++ linux-0.11-lab/cur/linux/kernel/traps.c | 208 ++++ linux-0.11-lab/cur/linux/kernel/traps.o | Bin 0 -> 12972 bytes linux-0.11-lab/cur/linux/kernel/vsprintf.c | 233 ++++ linux-0.11-lab/cur/linux/kernel/vsprintf.o | Bin 0 -> 6156 bytes linux-0.11-lab/cur/linux/lib/Makefile | 73 ++ linux-0.11-lab/cur/linux/lib/_exit.c | 13 + linux-0.11-lab/cur/linux/lib/_exit.o | Bin 0 -> 1988 bytes linux-0.11-lab/cur/linux/lib/close.c | 10 + linux-0.11-lab/cur/linux/lib/close.o | Bin 0 -> 2220 bytes linux-0.11-lab/cur/linux/lib/ctype.c | 35 + linux-0.11-lab/cur/linux/lib/ctype.o | Bin 0 -> 1908 bytes linux-0.11-lab/cur/linux/lib/dup.c | 10 + linux-0.11-lab/cur/linux/lib/dup.o | Bin 0 -> 2200 bytes linux-0.11-lab/cur/linux/lib/errno.c | 7 + linux-0.11-lab/cur/linux/lib/errno.o | Bin 0 -> 1472 bytes linux-0.11-lab/cur/linux/lib/execve.c | 10 + linux-0.11-lab/cur/linux/lib/execve.o | Bin 0 -> 2336 bytes linux-0.11-lab/cur/linux/lib/lib.a | Bin 0 -> 34150 bytes linux-0.11-lab/cur/linux/lib/malloc.c | 232 ++++ linux-0.11-lab/cur/linux/lib/malloc.o | Bin 0 -> 4880 bytes linux-0.11-lab/cur/linux/lib/open.c | 25 + linux-0.11-lab/cur/linux/lib/open.o | Bin 0 -> 2364 bytes linux-0.11-lab/cur/linux/lib/setsid.c | 10 + linux-0.11-lab/cur/linux/lib/setsid.o | Bin 0 -> 2244 bytes linux-0.11-lab/cur/linux/lib/string.c | 14 + linux-0.11-lab/cur/linux/lib/string.o | Bin 0 -> 6380 bytes linux-0.11-lab/cur/linux/lib/wait.c | 16 + linux-0.11-lab/cur/linux/lib/wait.o | Bin 0 -> 2580 bytes linux-0.11-lab/cur/linux/lib/write.c | 10 + linux-0.11-lab/cur/linux/lib/write.o | Bin 0 -> 2376 bytes linux-0.11-lab/cur/linux/mm/Makefile | 38 + linux-0.11-lab/cur/linux/mm/memory.c | 466 +++++++ linux-0.11-lab/cur/linux/mm/memory.o | Bin 0 -> 13812 bytes linux-0.11-lab/cur/linux/mm/mm.o | Bin 0 -> 13933 bytes linux-0.11-lab/cur/linux/mm/page.o | Bin 0 -> 640 bytes linux-0.11-lab/cur/linux/mm/page.s | 40 + linux-0.11-lab/cur/linux/tools/build | Bin 0 -> 15144 bytes linux-0.11-lab/cur/linux/tools/build.c | 171 +++ linux-0.11-lab/cur/linux/tools/system | Bin 0 -> 297648 bytes linux-0.11-lab/images/rootimage-0.11 | Bin 0 -> 10485760 bytes .../images/rootimage-0.11.lock | 0 linux-0.11-lab/mygdb | 3 + linux-0.11-lab/run | 3 + linux-0.11-lab/rundbg | 2 + linux-0.11-lab/rungdb | 3 + linux-0.11-lab/runtest | 3 + 594 files changed, 50785 insertions(+) create mode 100644 linux-0.11-lab/0.gdb create mode 100644 linux-0.11-lab/0/README create mode 100644 linux-0.11-lab/0/Source-Insight/Linux-0.11.IAB create mode 100644 linux-0.11-lab/0/Source-Insight/Linux-0.11.IAD create mode 100644 linux-0.11-lab/0/Source-Insight/Linux-0.11.IMB create mode 100644 linux-0.11-lab/0/Source-Insight/Linux-0.11.IMD create mode 100644 linux-0.11-lab/0/Source-Insight/Linux-0.11.PFI create mode 100644 linux-0.11-lab/0/Source-Insight/Linux-0.11.PO create mode 100644 linux-0.11-lab/0/Source-Insight/Linux-0.11.PR create mode 100644 linux-0.11-lab/0/Source-Insight/Linux-0.11.PRI create mode 100644 linux-0.11-lab/0/Source-Insight/Linux-0.11.PS create mode 100644 linux-0.11-lab/0/Source-Insight/Linux-0.11.SearchResults create mode 100644 linux-0.11-lab/0/Source-Insight/Linux-0.11.WK3 create mode 100644 linux-0.11-lab/0/linux/Image create mode 100644 linux-0.11-lab/0/linux/Image.bkp create mode 100644 linux-0.11-lab/0/linux/Makefile create mode 100644 linux-0.11-lab/0/linux/System.map create mode 100644 linux-0.11-lab/0/linux/System.map.2 create mode 100644 linux-0.11-lab/0/linux/boot/bootsect create mode 100644 linux-0.11-lab/0/linux/boot/bootsect.o create mode 100644 linux-0.11-lab/0/linux/boot/bootsect.s create mode 100644 linux-0.11-lab/0/linux/boot/head.o create mode 100644 linux-0.11-lab/0/linux/boot/head.s create mode 100644 linux-0.11-lab/0/linux/boot/setup create mode 100644 linux-0.11-lab/0/linux/boot/setup.o create mode 100644 linux-0.11-lab/0/linux/boot/setup.s create mode 100644 linux-0.11-lab/0/linux/fs/Makefile create mode 100644 linux-0.11-lab/0/linux/fs/bitmap.c create mode 100644 linux-0.11-lab/0/linux/fs/bitmap.o create mode 100644 linux-0.11-lab/0/linux/fs/block_dev.c create mode 100644 linux-0.11-lab/0/linux/fs/block_dev.o create mode 100644 linux-0.11-lab/0/linux/fs/buffer.c create mode 100644 linux-0.11-lab/0/linux/fs/buffer.o create mode 100644 linux-0.11-lab/0/linux/fs/char_dev.c create mode 100644 linux-0.11-lab/0/linux/fs/char_dev.o create mode 100644 linux-0.11-lab/0/linux/fs/exec.c create mode 100644 linux-0.11-lab/0/linux/fs/exec.o create mode 100644 linux-0.11-lab/0/linux/fs/fcntl.c create mode 100644 linux-0.11-lab/0/linux/fs/fcntl.o create mode 100644 linux-0.11-lab/0/linux/fs/file_dev.c create mode 100644 linux-0.11-lab/0/linux/fs/file_dev.o create mode 100644 linux-0.11-lab/0/linux/fs/file_table.c create mode 100644 linux-0.11-lab/0/linux/fs/file_table.o create mode 100644 linux-0.11-lab/0/linux/fs/fs.o create mode 100644 linux-0.11-lab/0/linux/fs/inode.c create mode 100644 linux-0.11-lab/0/linux/fs/inode.o create mode 100644 linux-0.11-lab/0/linux/fs/ioctl.c create mode 100644 linux-0.11-lab/0/linux/fs/ioctl.o create mode 100644 linux-0.11-lab/0/linux/fs/namei.c create mode 100644 linux-0.11-lab/0/linux/fs/namei.o create mode 100644 linux-0.11-lab/0/linux/fs/open.c create mode 100644 linux-0.11-lab/0/linux/fs/open.o create mode 100644 linux-0.11-lab/0/linux/fs/pipe.c create mode 100644 linux-0.11-lab/0/linux/fs/pipe.o create mode 100644 linux-0.11-lab/0/linux/fs/read_write.c create mode 100644 linux-0.11-lab/0/linux/fs/read_write.o create mode 100644 linux-0.11-lab/0/linux/fs/select.c create mode 100644 linux-0.11-lab/0/linux/fs/select.o create mode 100644 linux-0.11-lab/0/linux/fs/stat.c create mode 100644 linux-0.11-lab/0/linux/fs/stat.o create mode 100644 linux-0.11-lab/0/linux/fs/super.c create mode 100644 linux-0.11-lab/0/linux/fs/super.o create mode 100644 linux-0.11-lab/0/linux/fs/truncate.c create mode 100644 linux-0.11-lab/0/linux/fs/truncate.o create mode 100644 linux-0.11-lab/0/linux/include/a.out.h create mode 100644 linux-0.11-lab/0/linux/include/asm/io.h create mode 100644 linux-0.11-lab/0/linux/include/asm/memory.h create mode 100644 linux-0.11-lab/0/linux/include/asm/segment.h create mode 100644 linux-0.11-lab/0/linux/include/asm/system.h create mode 100644 linux-0.11-lab/0/linux/include/const.h create mode 100644 linux-0.11-lab/0/linux/include/ctype.h create mode 100644 linux-0.11-lab/0/linux/include/errno.h create mode 100644 linux-0.11-lab/0/linux/include/fcntl.h create mode 100644 linux-0.11-lab/0/linux/include/linux/config.h create mode 100644 linux-0.11-lab/0/linux/include/linux/fdreg.h create mode 100644 linux-0.11-lab/0/linux/include/linux/fs.h create mode 100644 linux-0.11-lab/0/linux/include/linux/hdreg.h create mode 100644 linux-0.11-lab/0/linux/include/linux/head.h create mode 100644 linux-0.11-lab/0/linux/include/linux/kernel.h create mode 100644 linux-0.11-lab/0/linux/include/linux/mm.h create mode 100644 linux-0.11-lab/0/linux/include/linux/sched.h create mode 100644 linux-0.11-lab/0/linux/include/linux/sys.h create mode 100644 linux-0.11-lab/0/linux/include/linux/tty.h create mode 100644 linux-0.11-lab/0/linux/include/signal.h create mode 100644 linux-0.11-lab/0/linux/include/stdarg.h create mode 100644 linux-0.11-lab/0/linux/include/stddef.h create mode 100644 linux-0.11-lab/0/linux/include/string.h create mode 100644 linux-0.11-lab/0/linux/include/sys/stat.h create mode 100644 linux-0.11-lab/0/linux/include/sys/times.h create mode 100644 linux-0.11-lab/0/linux/include/sys/types.h create mode 100644 linux-0.11-lab/0/linux/include/sys/utsname.h create mode 100644 linux-0.11-lab/0/linux/include/sys/wait.h create mode 100644 linux-0.11-lab/0/linux/include/termios.h create mode 100644 linux-0.11-lab/0/linux/include/time.h create mode 100644 linux-0.11-lab/0/linux/include/unistd.h create mode 100644 linux-0.11-lab/0/linux/include/utime.h create mode 100644 linux-0.11-lab/0/linux/init/main.c create mode 100644 linux-0.11-lab/0/linux/init/main.o create mode 100644 linux-0.11-lab/0/linux/kernel/Makefile create mode 100644 linux-0.11-lab/0/linux/kernel/asm.o create mode 100644 linux-0.11-lab/0/linux/kernel/asm.s create mode 100644 linux-0.11-lab/0/linux/kernel/blk_drv/Makefile create mode 100644 linux-0.11-lab/0/linux/kernel/blk_drv/blk.h create mode 100644 linux-0.11-lab/0/linux/kernel/blk_drv/blk_drv.a create mode 100644 linux-0.11-lab/0/linux/kernel/blk_drv/floppy.c create mode 100644 linux-0.11-lab/0/linux/kernel/blk_drv/floppy.o create mode 100644 linux-0.11-lab/0/linux/kernel/blk_drv/hd.c create mode 100644 linux-0.11-lab/0/linux/kernel/blk_drv/hd.o create mode 100644 linux-0.11-lab/0/linux/kernel/blk_drv/ll_rw_blk.c create mode 100644 linux-0.11-lab/0/linux/kernel/blk_drv/ll_rw_blk.o create mode 100644 linux-0.11-lab/0/linux/kernel/blk_drv/ramdisk.c create mode 100644 linux-0.11-lab/0/linux/kernel/blk_drv/ramdisk.o create mode 100644 linux-0.11-lab/0/linux/kernel/chr_drv/Makefile create mode 100644 linux-0.11-lab/0/linux/kernel/chr_drv/chr_drv.a create mode 100644 linux-0.11-lab/0/linux/kernel/chr_drv/console.c create mode 100644 linux-0.11-lab/0/linux/kernel/chr_drv/console.o create mode 100644 linux-0.11-lab/0/linux/kernel/chr_drv/keyboard.2.o create mode 100644 linux-0.11-lab/0/linux/kernel/chr_drv/keyboard.2.s create mode 100644 linux-0.11-lab/0/linux/kernel/chr_drv/keyboard.S create mode 100644 linux-0.11-lab/0/linux/kernel/chr_drv/rs_io.o create mode 100644 linux-0.11-lab/0/linux/kernel/chr_drv/rs_io.s create mode 100644 linux-0.11-lab/0/linux/kernel/chr_drv/serial.c create mode 100644 linux-0.11-lab/0/linux/kernel/chr_drv/serial.o create mode 100644 linux-0.11-lab/0/linux/kernel/chr_drv/tty_io.c create mode 100644 linux-0.11-lab/0/linux/kernel/chr_drv/tty_io.o create mode 100644 linux-0.11-lab/0/linux/kernel/chr_drv/tty_ioctl.c create mode 100644 linux-0.11-lab/0/linux/kernel/chr_drv/tty_ioctl.o create mode 100644 linux-0.11-lab/0/linux/kernel/exit.c create mode 100644 linux-0.11-lab/0/linux/kernel/exit.o create mode 100644 linux-0.11-lab/0/linux/kernel/fork.c create mode 100644 linux-0.11-lab/0/linux/kernel/fork.o create mode 100644 linux-0.11-lab/0/linux/kernel/kernel.o create mode 100644 linux-0.11-lab/0/linux/kernel/math/Makefile create mode 100644 linux-0.11-lab/0/linux/kernel/math/math.a create mode 100644 linux-0.11-lab/0/linux/kernel/math/math_emulate.c create mode 100644 linux-0.11-lab/0/linux/kernel/math/math_emulate.o create mode 100644 linux-0.11-lab/0/linux/kernel/mktime.c create mode 100644 linux-0.11-lab/0/linux/kernel/mktime.o create mode 100644 linux-0.11-lab/0/linux/kernel/panic.c create mode 100644 linux-0.11-lab/0/linux/kernel/panic.o create mode 100644 linux-0.11-lab/0/linux/kernel/printk.c create mode 100644 linux-0.11-lab/0/linux/kernel/printk.o create mode 100644 linux-0.11-lab/0/linux/kernel/sched.c create mode 100644 linux-0.11-lab/0/linux/kernel/sched.o create mode 100644 linux-0.11-lab/0/linux/kernel/signal.c create mode 100644 linux-0.11-lab/0/linux/kernel/signal.o create mode 100644 linux-0.11-lab/0/linux/kernel/sys.c create mode 100644 linux-0.11-lab/0/linux/kernel/sys.o create mode 100644 linux-0.11-lab/0/linux/kernel/system_call.o create mode 100644 linux-0.11-lab/0/linux/kernel/system_call.s create mode 100644 linux-0.11-lab/0/linux/kernel/traps.c create mode 100644 linux-0.11-lab/0/linux/kernel/traps.o create mode 100644 linux-0.11-lab/0/linux/kernel/vsprintf.c create mode 100644 linux-0.11-lab/0/linux/kernel/vsprintf.o create mode 100644 linux-0.11-lab/0/linux/lib/Makefile create mode 100644 linux-0.11-lab/0/linux/lib/_exit.c create mode 100644 linux-0.11-lab/0/linux/lib/_exit.o create mode 100644 linux-0.11-lab/0/linux/lib/close.c create mode 100644 linux-0.11-lab/0/linux/lib/close.o create mode 100644 linux-0.11-lab/0/linux/lib/ctype.c create mode 100644 linux-0.11-lab/0/linux/lib/ctype.o create mode 100644 linux-0.11-lab/0/linux/lib/dup.c create mode 100644 linux-0.11-lab/0/linux/lib/dup.o create mode 100644 linux-0.11-lab/0/linux/lib/errno.c create mode 100644 linux-0.11-lab/0/linux/lib/errno.o create mode 100644 linux-0.11-lab/0/linux/lib/execve.c create mode 100644 linux-0.11-lab/0/linux/lib/execve.o create mode 100644 linux-0.11-lab/0/linux/lib/lib.a create mode 100644 linux-0.11-lab/0/linux/lib/malloc.c create mode 100644 linux-0.11-lab/0/linux/lib/malloc.o create mode 100644 linux-0.11-lab/0/linux/lib/open.c create mode 100644 linux-0.11-lab/0/linux/lib/open.o create mode 100644 linux-0.11-lab/0/linux/lib/setsid.c create mode 100644 linux-0.11-lab/0/linux/lib/setsid.o create mode 100644 linux-0.11-lab/0/linux/lib/string.c create mode 100644 linux-0.11-lab/0/linux/lib/string.o create mode 100644 linux-0.11-lab/0/linux/lib/wait.c create mode 100644 linux-0.11-lab/0/linux/lib/wait.o create mode 100644 linux-0.11-lab/0/linux/lib/write.c create mode 100644 linux-0.11-lab/0/linux/lib/write.o create mode 100644 linux-0.11-lab/0/linux/mm/Makefile create mode 100644 linux-0.11-lab/0/linux/mm/memory.c create mode 100644 linux-0.11-lab/0/linux/mm/memory.o create mode 100644 linux-0.11-lab/0/linux/mm/mm.o create mode 100644 linux-0.11-lab/0/linux/mm/page.o create mode 100644 linux-0.11-lab/0/linux/mm/page.s create mode 100644 linux-0.11-lab/0/linux/tools/build create mode 100644 linux-0.11-lab/0/linux/tools/build.c create mode 100644 linux-0.11-lab/0/linux/tools/system create mode 100644 linux-0.11-lab/4/README create mode 100644 linux-0.11-lab/4/Source-Insight/Linux-0.11.IAB create mode 100644 linux-0.11-lab/4/Source-Insight/Linux-0.11.IAD create mode 100644 linux-0.11-lab/4/Source-Insight/Linux-0.11.IMB create mode 100644 linux-0.11-lab/4/Source-Insight/Linux-0.11.IMD create mode 100644 linux-0.11-lab/4/Source-Insight/Linux-0.11.PFI create mode 100644 linux-0.11-lab/4/Source-Insight/Linux-0.11.PO create mode 100644 linux-0.11-lab/4/Source-Insight/Linux-0.11.PR create mode 100644 linux-0.11-lab/4/Source-Insight/Linux-0.11.PRI create mode 100644 linux-0.11-lab/4/Source-Insight/Linux-0.11.PS create mode 100644 linux-0.11-lab/4/Source-Insight/Linux-0.11.SearchResults create mode 100644 linux-0.11-lab/4/Source-Insight/Linux-0.11.WK3 create mode 100644 linux-0.11-lab/4/linux/Image create mode 100644 linux-0.11-lab/4/linux/Image.bkp create mode 100644 linux-0.11-lab/4/linux/Makefile create mode 100644 linux-0.11-lab/4/linux/System.map create mode 100644 linux-0.11-lab/4/linux/System.map.2 create mode 100644 linux-0.11-lab/4/linux/boot/bootsect create mode 100644 linux-0.11-lab/4/linux/boot/bootsect.o create mode 100644 linux-0.11-lab/4/linux/boot/bootsect.s create mode 100644 linux-0.11-lab/4/linux/boot/head.o create mode 100644 linux-0.11-lab/4/linux/boot/head.s create mode 100644 linux-0.11-lab/4/linux/boot/setup create mode 100644 linux-0.11-lab/4/linux/boot/setup.o create mode 100644 linux-0.11-lab/4/linux/boot/setup.s create mode 100644 linux-0.11-lab/4/linux/fs/Makefile create mode 100644 linux-0.11-lab/4/linux/fs/bitmap.c create mode 100644 linux-0.11-lab/4/linux/fs/bitmap.o create mode 100644 linux-0.11-lab/4/linux/fs/block_dev.c create mode 100644 linux-0.11-lab/4/linux/fs/block_dev.o create mode 100644 linux-0.11-lab/4/linux/fs/buffer.c create mode 100644 linux-0.11-lab/4/linux/fs/buffer.o create mode 100644 linux-0.11-lab/4/linux/fs/char_dev.c create mode 100644 linux-0.11-lab/4/linux/fs/char_dev.o create mode 100644 linux-0.11-lab/4/linux/fs/exec.c create mode 100644 linux-0.11-lab/4/linux/fs/exec.o create mode 100644 linux-0.11-lab/4/linux/fs/fcntl.c create mode 100644 linux-0.11-lab/4/linux/fs/fcntl.o create mode 100644 linux-0.11-lab/4/linux/fs/file_dev.c create mode 100644 linux-0.11-lab/4/linux/fs/file_dev.o create mode 100644 linux-0.11-lab/4/linux/fs/file_table.c create mode 100644 linux-0.11-lab/4/linux/fs/file_table.o create mode 100644 linux-0.11-lab/4/linux/fs/fs.o create mode 100644 linux-0.11-lab/4/linux/fs/inode.c create mode 100644 linux-0.11-lab/4/linux/fs/inode.o create mode 100644 linux-0.11-lab/4/linux/fs/ioctl.c create mode 100644 linux-0.11-lab/4/linux/fs/ioctl.o create mode 100644 linux-0.11-lab/4/linux/fs/namei.c create mode 100644 linux-0.11-lab/4/linux/fs/namei.o create mode 100644 linux-0.11-lab/4/linux/fs/open.c create mode 100644 linux-0.11-lab/4/linux/fs/open.o create mode 100644 linux-0.11-lab/4/linux/fs/pipe.c create mode 100644 linux-0.11-lab/4/linux/fs/pipe.o create mode 100644 linux-0.11-lab/4/linux/fs/read_write.c create mode 100644 linux-0.11-lab/4/linux/fs/read_write.o create mode 100644 linux-0.11-lab/4/linux/fs/select.c create mode 100644 linux-0.11-lab/4/linux/fs/select.o create mode 100644 linux-0.11-lab/4/linux/fs/stat.c create mode 100644 linux-0.11-lab/4/linux/fs/stat.o create mode 100644 linux-0.11-lab/4/linux/fs/super.c create mode 100644 linux-0.11-lab/4/linux/fs/super.o create mode 100644 linux-0.11-lab/4/linux/fs/truncate.c create mode 100644 linux-0.11-lab/4/linux/fs/truncate.o create mode 100644 linux-0.11-lab/4/linux/include/a.out.h create mode 100644 linux-0.11-lab/4/linux/include/asm/io.h create mode 100644 linux-0.11-lab/4/linux/include/asm/memory.h create mode 100644 linux-0.11-lab/4/linux/include/asm/segment.h create mode 100644 linux-0.11-lab/4/linux/include/asm/system.h create mode 100644 linux-0.11-lab/4/linux/include/const.h create mode 100644 linux-0.11-lab/4/linux/include/ctype.h create mode 100644 linux-0.11-lab/4/linux/include/errno.h create mode 100644 linux-0.11-lab/4/linux/include/fcntl.h create mode 100644 linux-0.11-lab/4/linux/include/linux/config.h create mode 100644 linux-0.11-lab/4/linux/include/linux/fdreg.h create mode 100644 linux-0.11-lab/4/linux/include/linux/fs.h create mode 100644 linux-0.11-lab/4/linux/include/linux/hdreg.h create mode 100644 linux-0.11-lab/4/linux/include/linux/head.h create mode 100644 linux-0.11-lab/4/linux/include/linux/kernel.h create mode 100644 linux-0.11-lab/4/linux/include/linux/mm.h create mode 100644 linux-0.11-lab/4/linux/include/linux/sched.h create mode 100644 linux-0.11-lab/4/linux/include/linux/sys.h create mode 100644 linux-0.11-lab/4/linux/include/linux/tty.h create mode 100644 linux-0.11-lab/4/linux/include/signal.h create mode 100644 linux-0.11-lab/4/linux/include/stdarg.h create mode 100644 linux-0.11-lab/4/linux/include/stddef.h create mode 100644 linux-0.11-lab/4/linux/include/string.h create mode 100644 linux-0.11-lab/4/linux/include/sys/stat.h create mode 100644 linux-0.11-lab/4/linux/include/sys/times.h create mode 100644 linux-0.11-lab/4/linux/include/sys/types.h create mode 100644 linux-0.11-lab/4/linux/include/sys/utsname.h create mode 100644 linux-0.11-lab/4/linux/include/sys/wait.h create mode 100644 linux-0.11-lab/4/linux/include/termios.h create mode 100644 linux-0.11-lab/4/linux/include/time.h create mode 100644 linux-0.11-lab/4/linux/include/unistd.h create mode 100644 linux-0.11-lab/4/linux/include/utime.h create mode 100644 linux-0.11-lab/4/linux/init/main.c create mode 100644 linux-0.11-lab/4/linux/init/main.o create mode 100644 linux-0.11-lab/4/linux/kernel/Makefile create mode 100644 linux-0.11-lab/4/linux/kernel/asm.o create mode 100644 linux-0.11-lab/4/linux/kernel/asm.s create mode 100644 linux-0.11-lab/4/linux/kernel/blk_drv/Makefile create mode 100644 linux-0.11-lab/4/linux/kernel/blk_drv/blk.h create mode 100644 linux-0.11-lab/4/linux/kernel/blk_drv/blk_drv.a create mode 100644 linux-0.11-lab/4/linux/kernel/blk_drv/floppy.c create mode 100644 linux-0.11-lab/4/linux/kernel/blk_drv/floppy.o create mode 100644 linux-0.11-lab/4/linux/kernel/blk_drv/hd.c create mode 100644 linux-0.11-lab/4/linux/kernel/blk_drv/hd.o create mode 100644 linux-0.11-lab/4/linux/kernel/blk_drv/ll_rw_blk.c create mode 100644 linux-0.11-lab/4/linux/kernel/blk_drv/ll_rw_blk.o create mode 100644 linux-0.11-lab/4/linux/kernel/blk_drv/ramdisk.c create mode 100644 linux-0.11-lab/4/linux/kernel/blk_drv/ramdisk.o create mode 100644 linux-0.11-lab/4/linux/kernel/chr_drv/Makefile create mode 100644 linux-0.11-lab/4/linux/kernel/chr_drv/chr_drv.a create mode 100644 linux-0.11-lab/4/linux/kernel/chr_drv/console.c create mode 100644 linux-0.11-lab/4/linux/kernel/chr_drv/console.o create mode 100644 linux-0.11-lab/4/linux/kernel/chr_drv/keyboard.2.o create mode 100644 linux-0.11-lab/4/linux/kernel/chr_drv/keyboard.2.s create mode 100644 linux-0.11-lab/4/linux/kernel/chr_drv/keyboard.S create mode 100644 linux-0.11-lab/4/linux/kernel/chr_drv/rs_io.o create mode 100644 linux-0.11-lab/4/linux/kernel/chr_drv/rs_io.s create mode 100644 linux-0.11-lab/4/linux/kernel/chr_drv/serial.c create mode 100644 linux-0.11-lab/4/linux/kernel/chr_drv/serial.o create mode 100644 linux-0.11-lab/4/linux/kernel/chr_drv/tty_io.c create mode 100644 linux-0.11-lab/4/linux/kernel/chr_drv/tty_io.o create mode 100644 linux-0.11-lab/4/linux/kernel/chr_drv/tty_ioctl.c create mode 100644 linux-0.11-lab/4/linux/kernel/chr_drv/tty_ioctl.o create mode 100644 linux-0.11-lab/4/linux/kernel/exit.c create mode 100644 linux-0.11-lab/4/linux/kernel/exit.o create mode 100644 linux-0.11-lab/4/linux/kernel/fork.c create mode 100644 linux-0.11-lab/4/linux/kernel/fork.o create mode 100644 linux-0.11-lab/4/linux/kernel/kernel.o create mode 100644 linux-0.11-lab/4/linux/kernel/math/Makefile create mode 100644 linux-0.11-lab/4/linux/kernel/math/math.a create mode 100644 linux-0.11-lab/4/linux/kernel/math/math_emulate.c create mode 100644 linux-0.11-lab/4/linux/kernel/math/math_emulate.o create mode 100644 linux-0.11-lab/4/linux/kernel/mktime.c create mode 100644 linux-0.11-lab/4/linux/kernel/mktime.o create mode 100644 linux-0.11-lab/4/linux/kernel/panic.c create mode 100644 linux-0.11-lab/4/linux/kernel/panic.o create mode 100644 linux-0.11-lab/4/linux/kernel/printk.c create mode 100644 linux-0.11-lab/4/linux/kernel/printk.o create mode 100644 linux-0.11-lab/4/linux/kernel/sched.c create mode 100644 linux-0.11-lab/4/linux/kernel/sched.o create mode 100644 linux-0.11-lab/4/linux/kernel/signal.c create mode 100644 linux-0.11-lab/4/linux/kernel/signal.o create mode 100644 linux-0.11-lab/4/linux/kernel/sys.c create mode 100644 linux-0.11-lab/4/linux/kernel/sys.o create mode 100644 linux-0.11-lab/4/linux/kernel/system_call.o create mode 100644 linux-0.11-lab/4/linux/kernel/system_call.s create mode 100644 linux-0.11-lab/4/linux/kernel/traps.c create mode 100644 linux-0.11-lab/4/linux/kernel/traps.o create mode 100644 linux-0.11-lab/4/linux/kernel/vsprintf.c create mode 100644 linux-0.11-lab/4/linux/kernel/vsprintf.o create mode 100644 linux-0.11-lab/4/linux/lib/Makefile create mode 100644 linux-0.11-lab/4/linux/lib/_exit.c create mode 100644 linux-0.11-lab/4/linux/lib/_exit.o create mode 100644 linux-0.11-lab/4/linux/lib/close.c create mode 100644 linux-0.11-lab/4/linux/lib/close.o create mode 100644 linux-0.11-lab/4/linux/lib/ctype.c create mode 100644 linux-0.11-lab/4/linux/lib/ctype.o create mode 100644 linux-0.11-lab/4/linux/lib/dup.c create mode 100644 linux-0.11-lab/4/linux/lib/dup.o create mode 100644 linux-0.11-lab/4/linux/lib/errno.c create mode 100644 linux-0.11-lab/4/linux/lib/errno.o create mode 100644 linux-0.11-lab/4/linux/lib/execve.c create mode 100644 linux-0.11-lab/4/linux/lib/execve.o create mode 100644 linux-0.11-lab/4/linux/lib/lib.a create mode 100644 linux-0.11-lab/4/linux/lib/malloc.c create mode 100644 linux-0.11-lab/4/linux/lib/malloc.o create mode 100644 linux-0.11-lab/4/linux/lib/open.c create mode 100644 linux-0.11-lab/4/linux/lib/open.o create mode 100644 linux-0.11-lab/4/linux/lib/setsid.c create mode 100644 linux-0.11-lab/4/linux/lib/setsid.o create mode 100644 linux-0.11-lab/4/linux/lib/string.c create mode 100644 linux-0.11-lab/4/linux/lib/string.o create mode 100644 linux-0.11-lab/4/linux/lib/wait.c create mode 100644 linux-0.11-lab/4/linux/lib/wait.o create mode 100644 linux-0.11-lab/4/linux/lib/write.c create mode 100644 linux-0.11-lab/4/linux/lib/write.o create mode 100644 linux-0.11-lab/4/linux/mm/Makefile create mode 100644 linux-0.11-lab/4/linux/mm/memory.c create mode 100644 linux-0.11-lab/4/linux/mm/memory.o create mode 100644 linux-0.11-lab/4/linux/mm/mm.o create mode 100644 linux-0.11-lab/4/linux/mm/page.o create mode 100644 linux-0.11-lab/4/linux/mm/page.s create mode 100644 linux-0.11-lab/4/linux/tools/build create mode 100644 linux-0.11-lab/4/linux/tools/build.c create mode 100644 linux-0.11-lab/4/linux/tools/system create mode 100644 linux-0.11-lab/ModifyCur.sh create mode 100644 linux-0.11-lab/b/Makefile create mode 100644 linux-0.11-lab/b/README create mode 100644 linux-0.11-lab/b/a.out create mode 100644 linux-0.11-lab/b/clone.c create mode 100644 linux-0.11-lab/b/echo.c create mode 100644 linux-0.11-lab/b/execve.c create mode 100644 linux-0.11-lab/b/execve2.c create mode 100644 linux-0.11-lab/b/execve2.patch create mode 100644 linux-0.11-lab/b/getcwd.c create mode 100644 linux-0.11-lab/b/getdents.c create mode 100644 linux-0.11-lab/b/mmap.c create mode 100644 linux-0.11-lab/b/munmap.c create mode 100644 linux-0.11-lab/b/mytest.c create mode 100644 linux-0.11-lab/b/new.h create mode 100644 linux-0.11-lab/b/oscomp_syscalls.md create mode 100644 linux-0.11-lab/b/pipe.c create mode 100644 linux-0.11-lab/b/sleep.c create mode 100644 linux-0.11-lab/b/unistd.h create mode 100644 linux-0.11-lab/bochsout.txt create mode 100644 linux-0.11-lab/conf/0.11-gdbstub.bxrc create mode 100644 linux-0.11-lab/conf/0.11.bxrc create mode 100644 linux-0.11-lab/cur/README create mode 100644 linux-0.11-lab/cur/Source-Insight/Linux-0.11.IAB create mode 100644 linux-0.11-lab/cur/Source-Insight/Linux-0.11.IAD create mode 100644 linux-0.11-lab/cur/Source-Insight/Linux-0.11.IMB create mode 100644 linux-0.11-lab/cur/Source-Insight/Linux-0.11.IMD create mode 100644 linux-0.11-lab/cur/Source-Insight/Linux-0.11.PFI create mode 100644 linux-0.11-lab/cur/Source-Insight/Linux-0.11.PO create mode 100644 linux-0.11-lab/cur/Source-Insight/Linux-0.11.PR create mode 100644 linux-0.11-lab/cur/Source-Insight/Linux-0.11.PRI create mode 100644 linux-0.11-lab/cur/Source-Insight/Linux-0.11.PS create mode 100644 linux-0.11-lab/cur/Source-Insight/Linux-0.11.SearchResults create mode 100644 linux-0.11-lab/cur/Source-Insight/Linux-0.11.WK3 create mode 100644 linux-0.11-lab/cur/linux/Image create mode 100644 linux-0.11-lab/cur/linux/Image.bkp create mode 100644 linux-0.11-lab/cur/linux/Makefile create mode 100644 linux-0.11-lab/cur/linux/System.map create mode 100644 linux-0.11-lab/cur/linux/System.map.2 create mode 100644 linux-0.11-lab/cur/linux/boot/bootsect create mode 100644 linux-0.11-lab/cur/linux/boot/bootsect.o create mode 100644 linux-0.11-lab/cur/linux/boot/bootsect.s create mode 100644 linux-0.11-lab/cur/linux/boot/head.o create mode 100644 linux-0.11-lab/cur/linux/boot/head.s create mode 100644 linux-0.11-lab/cur/linux/boot/setup create mode 100644 linux-0.11-lab/cur/linux/boot/setup.o create mode 100644 linux-0.11-lab/cur/linux/boot/setup.s create mode 100644 linux-0.11-lab/cur/linux/fs/Makefile create mode 100644 linux-0.11-lab/cur/linux/fs/bitmap.c create mode 100644 linux-0.11-lab/cur/linux/fs/bitmap.o create mode 100644 linux-0.11-lab/cur/linux/fs/block_dev.c create mode 100644 linux-0.11-lab/cur/linux/fs/block_dev.o create mode 100644 linux-0.11-lab/cur/linux/fs/buffer.c create mode 100644 linux-0.11-lab/cur/linux/fs/buffer.o create mode 100644 linux-0.11-lab/cur/linux/fs/char_dev.c create mode 100644 linux-0.11-lab/cur/linux/fs/char_dev.o create mode 100644 linux-0.11-lab/cur/linux/fs/exec.c create mode 100644 linux-0.11-lab/cur/linux/fs/exec.o create mode 100644 linux-0.11-lab/cur/linux/fs/fcntl.c create mode 100644 linux-0.11-lab/cur/linux/fs/fcntl.o create mode 100644 linux-0.11-lab/cur/linux/fs/file_dev.c create mode 100644 linux-0.11-lab/cur/linux/fs/file_dev.o create mode 100644 linux-0.11-lab/cur/linux/fs/file_table.c create mode 100644 linux-0.11-lab/cur/linux/fs/file_table.o create mode 100644 linux-0.11-lab/cur/linux/fs/fs.o create mode 100644 linux-0.11-lab/cur/linux/fs/inode.c create mode 100644 linux-0.11-lab/cur/linux/fs/inode.o create mode 100644 linux-0.11-lab/cur/linux/fs/ioctl.c create mode 100644 linux-0.11-lab/cur/linux/fs/ioctl.o create mode 100644 linux-0.11-lab/cur/linux/fs/namei.c create mode 100644 linux-0.11-lab/cur/linux/fs/namei.o create mode 100644 linux-0.11-lab/cur/linux/fs/open.c create mode 100644 linux-0.11-lab/cur/linux/fs/open.o create mode 100644 linux-0.11-lab/cur/linux/fs/pipe.c create mode 100644 linux-0.11-lab/cur/linux/fs/pipe.o create mode 100644 linux-0.11-lab/cur/linux/fs/read_write.c create mode 100644 linux-0.11-lab/cur/linux/fs/read_write.o create mode 100644 linux-0.11-lab/cur/linux/fs/select.c create mode 100644 linux-0.11-lab/cur/linux/fs/select.o create mode 100644 linux-0.11-lab/cur/linux/fs/stat.c create mode 100644 linux-0.11-lab/cur/linux/fs/stat.o create mode 100644 linux-0.11-lab/cur/linux/fs/super.c create mode 100644 linux-0.11-lab/cur/linux/fs/super.o create mode 100644 linux-0.11-lab/cur/linux/fs/truncate.c create mode 100644 linux-0.11-lab/cur/linux/fs/truncate.o create mode 100644 linux-0.11-lab/cur/linux/include/a.out.h create mode 100644 linux-0.11-lab/cur/linux/include/asm/io.h create mode 100644 linux-0.11-lab/cur/linux/include/asm/memory.h create mode 100644 linux-0.11-lab/cur/linux/include/asm/segment.h create mode 100644 linux-0.11-lab/cur/linux/include/asm/system.h create mode 100644 linux-0.11-lab/cur/linux/include/const.h create mode 100644 linux-0.11-lab/cur/linux/include/ctype.h create mode 100644 linux-0.11-lab/cur/linux/include/errno.h create mode 100644 linux-0.11-lab/cur/linux/include/fcntl.h create mode 100644 linux-0.11-lab/cur/linux/include/linux/config.h create mode 100644 linux-0.11-lab/cur/linux/include/linux/fdreg.h create mode 100644 linux-0.11-lab/cur/linux/include/linux/fs.h create mode 100644 linux-0.11-lab/cur/linux/include/linux/hdreg.h create mode 100644 linux-0.11-lab/cur/linux/include/linux/head.h create mode 100644 linux-0.11-lab/cur/linux/include/linux/kernel.h create mode 100644 linux-0.11-lab/cur/linux/include/linux/mm.h create mode 100644 linux-0.11-lab/cur/linux/include/linux/sched.h create mode 100644 linux-0.11-lab/cur/linux/include/linux/sys.h create mode 100644 linux-0.11-lab/cur/linux/include/linux/tty.h create mode 100644 linux-0.11-lab/cur/linux/include/signal.h create mode 100644 linux-0.11-lab/cur/linux/include/stdarg.h create mode 100644 linux-0.11-lab/cur/linux/include/stddef.h create mode 100644 linux-0.11-lab/cur/linux/include/string.h create mode 100644 linux-0.11-lab/cur/linux/include/sys/stat.h create mode 100644 linux-0.11-lab/cur/linux/include/sys/times.h create mode 100644 linux-0.11-lab/cur/linux/include/sys/types.h create mode 100644 linux-0.11-lab/cur/linux/include/sys/utsname.h create mode 100644 linux-0.11-lab/cur/linux/include/sys/wait.h create mode 100644 linux-0.11-lab/cur/linux/include/termios.h create mode 100644 linux-0.11-lab/cur/linux/include/time.h create mode 100644 linux-0.11-lab/cur/linux/include/unistd.h create mode 100644 linux-0.11-lab/cur/linux/include/utime.h create mode 100644 linux-0.11-lab/cur/linux/init/main.c create mode 100644 linux-0.11-lab/cur/linux/init/main.o create mode 100644 linux-0.11-lab/cur/linux/kernel/Makefile create mode 100644 linux-0.11-lab/cur/linux/kernel/asm.o create mode 100644 linux-0.11-lab/cur/linux/kernel/asm.s create mode 100644 linux-0.11-lab/cur/linux/kernel/blk_drv/Makefile create mode 100644 linux-0.11-lab/cur/linux/kernel/blk_drv/blk.h create mode 100644 linux-0.11-lab/cur/linux/kernel/blk_drv/blk_drv.a create mode 100644 linux-0.11-lab/cur/linux/kernel/blk_drv/floppy.c create mode 100644 linux-0.11-lab/cur/linux/kernel/blk_drv/floppy.o create mode 100644 linux-0.11-lab/cur/linux/kernel/blk_drv/hd.c create mode 100644 linux-0.11-lab/cur/linux/kernel/blk_drv/hd.o create mode 100644 linux-0.11-lab/cur/linux/kernel/blk_drv/ll_rw_blk.c create mode 100644 linux-0.11-lab/cur/linux/kernel/blk_drv/ll_rw_blk.o create mode 100644 linux-0.11-lab/cur/linux/kernel/blk_drv/ramdisk.c create mode 100644 linux-0.11-lab/cur/linux/kernel/blk_drv/ramdisk.o create mode 100644 linux-0.11-lab/cur/linux/kernel/chr_drv/Makefile create mode 100644 linux-0.11-lab/cur/linux/kernel/chr_drv/chr_drv.a create mode 100644 linux-0.11-lab/cur/linux/kernel/chr_drv/console.c create mode 100644 linux-0.11-lab/cur/linux/kernel/chr_drv/console.o create mode 100644 linux-0.11-lab/cur/linux/kernel/chr_drv/keyboard.2.o create mode 100644 linux-0.11-lab/cur/linux/kernel/chr_drv/keyboard.2.s create mode 100644 linux-0.11-lab/cur/linux/kernel/chr_drv/keyboard.S create mode 100644 linux-0.11-lab/cur/linux/kernel/chr_drv/rs_io.o create mode 100644 linux-0.11-lab/cur/linux/kernel/chr_drv/rs_io.s create mode 100644 linux-0.11-lab/cur/linux/kernel/chr_drv/serial.c create mode 100644 linux-0.11-lab/cur/linux/kernel/chr_drv/serial.o create mode 100644 linux-0.11-lab/cur/linux/kernel/chr_drv/tty_io.c create mode 100644 linux-0.11-lab/cur/linux/kernel/chr_drv/tty_io.o create mode 100644 linux-0.11-lab/cur/linux/kernel/chr_drv/tty_ioctl.c create mode 100644 linux-0.11-lab/cur/linux/kernel/chr_drv/tty_ioctl.o create mode 100644 linux-0.11-lab/cur/linux/kernel/exit.c create mode 100644 linux-0.11-lab/cur/linux/kernel/exit.o create mode 100644 linux-0.11-lab/cur/linux/kernel/fork.c create mode 100644 linux-0.11-lab/cur/linux/kernel/fork.o create mode 100644 linux-0.11-lab/cur/linux/kernel/kernel.o create mode 100644 linux-0.11-lab/cur/linux/kernel/math/Makefile create mode 100644 linux-0.11-lab/cur/linux/kernel/math/math.a create mode 100644 linux-0.11-lab/cur/linux/kernel/math/math_emulate.c create mode 100644 linux-0.11-lab/cur/linux/kernel/math/math_emulate.o create mode 100644 linux-0.11-lab/cur/linux/kernel/mktime.c create mode 100644 linux-0.11-lab/cur/linux/kernel/mktime.o create mode 100644 linux-0.11-lab/cur/linux/kernel/panic.c create mode 100644 linux-0.11-lab/cur/linux/kernel/panic.o create mode 100644 linux-0.11-lab/cur/linux/kernel/printk.c create mode 100644 linux-0.11-lab/cur/linux/kernel/printk.o create mode 100644 linux-0.11-lab/cur/linux/kernel/sched.c create mode 100644 linux-0.11-lab/cur/linux/kernel/sched.o create mode 100644 linux-0.11-lab/cur/linux/kernel/signal.c create mode 100644 linux-0.11-lab/cur/linux/kernel/signal.o create mode 100644 linux-0.11-lab/cur/linux/kernel/sys.c create mode 100644 linux-0.11-lab/cur/linux/kernel/sys.o create mode 100644 linux-0.11-lab/cur/linux/kernel/system_call.o create mode 100644 linux-0.11-lab/cur/linux/kernel/system_call.s create mode 100644 linux-0.11-lab/cur/linux/kernel/traps.c create mode 100644 linux-0.11-lab/cur/linux/kernel/traps.o create mode 100644 linux-0.11-lab/cur/linux/kernel/vsprintf.c create mode 100644 linux-0.11-lab/cur/linux/kernel/vsprintf.o create mode 100644 linux-0.11-lab/cur/linux/lib/Makefile create mode 100644 linux-0.11-lab/cur/linux/lib/_exit.c create mode 100644 linux-0.11-lab/cur/linux/lib/_exit.o create mode 100644 linux-0.11-lab/cur/linux/lib/close.c create mode 100644 linux-0.11-lab/cur/linux/lib/close.o create mode 100644 linux-0.11-lab/cur/linux/lib/ctype.c create mode 100644 linux-0.11-lab/cur/linux/lib/ctype.o create mode 100644 linux-0.11-lab/cur/linux/lib/dup.c create mode 100644 linux-0.11-lab/cur/linux/lib/dup.o create mode 100644 linux-0.11-lab/cur/linux/lib/errno.c create mode 100644 linux-0.11-lab/cur/linux/lib/errno.o create mode 100644 linux-0.11-lab/cur/linux/lib/execve.c create mode 100644 linux-0.11-lab/cur/linux/lib/execve.o create mode 100644 linux-0.11-lab/cur/linux/lib/lib.a create mode 100644 linux-0.11-lab/cur/linux/lib/malloc.c create mode 100644 linux-0.11-lab/cur/linux/lib/malloc.o create mode 100644 linux-0.11-lab/cur/linux/lib/open.c create mode 100644 linux-0.11-lab/cur/linux/lib/open.o create mode 100644 linux-0.11-lab/cur/linux/lib/setsid.c create mode 100644 linux-0.11-lab/cur/linux/lib/setsid.o create mode 100644 linux-0.11-lab/cur/linux/lib/string.c create mode 100644 linux-0.11-lab/cur/linux/lib/string.o create mode 100644 linux-0.11-lab/cur/linux/lib/wait.c create mode 100644 linux-0.11-lab/cur/linux/lib/wait.o create mode 100644 linux-0.11-lab/cur/linux/lib/write.c create mode 100644 linux-0.11-lab/cur/linux/lib/write.o create mode 100644 linux-0.11-lab/cur/linux/mm/Makefile create mode 100644 linux-0.11-lab/cur/linux/mm/memory.c create mode 100644 linux-0.11-lab/cur/linux/mm/memory.o create mode 100644 linux-0.11-lab/cur/linux/mm/mm.o create mode 100644 linux-0.11-lab/cur/linux/mm/page.o create mode 100644 linux-0.11-lab/cur/linux/mm/page.s create mode 100644 linux-0.11-lab/cur/linux/tools/build create mode 100644 linux-0.11-lab/cur/linux/tools/build.c create mode 100644 linux-0.11-lab/cur/linux/tools/system create mode 100644 linux-0.11-lab/images/rootimage-0.11 rename Linux-0.11-lab => linux-0.11-lab/images/rootimage-0.11.lock (100%) create mode 100644 linux-0.11-lab/mygdb create mode 100644 linux-0.11-lab/run create mode 100644 linux-0.11-lab/rundbg create mode 100644 linux-0.11-lab/rungdb create mode 100644 linux-0.11-lab/runtest diff --git a/linux-0.11-lab/0.gdb b/linux-0.11-lab/0.gdb new file mode 100644 index 0000000..6c2dbf1 --- /dev/null +++ b/linux-0.11-lab/0.gdb @@ -0,0 +1,5 @@ +target remote localhost:1234 +handle SIGSEGV nostop noprint ignore +b main +display current->pid +c diff --git a/linux-0.11-lab/0/README b/linux-0.11-lab/0/README new file mode 100644 index 0000000..2e56a37 --- /dev/null +++ b/linux-0.11-lab/0/README @@ -0,0 +1,6 @@ +revision history: + +版本0: 这是oldlinux.org网站上的linux-0.11-lab.rar中的版本。可能是赵博士在原始0.11版本的基础上修改而成。我做了如下改动: + a) 对一些Makefile做了修改,生成调试信息; + b) 将其移植到ubuntu和debian下,主要修改的地方用 "by wyj"标注。 + diff --git a/linux-0.11-lab/0/Source-Insight/Linux-0.11.IAB b/linux-0.11-lab/0/Source-Insight/Linux-0.11.IAB new file mode 100644 index 0000000000000000000000000000000000000000..27c23b6e1f3379c54bfea8c6c805c76fa235fa7c GIT binary patch literal 102400 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 X+E}E5VH>Ng(M~HVI#}YIPA>QZN3SCK literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/Source-Insight/Linux-0.11.PO b/linux-0.11-lab/0/Source-Insight/Linux-0.11.PO new file mode 100644 index 0000000000000000000000000000000000000000..de8db453c6bceca6363a1974df88a64caed7c9e8 GIT binary patch literal 776 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 >LdwT?$NcJnp;7Il?Z10x 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 ZnP<(9Ox^sRyj^ZyQ^(&fr!Q^I{{xPUk!%0} literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/Source-Insight/Linux-0.11.PS b/linux-0.11-lab/0/Source-Insight/Linux-0.11.PS new file mode 100644 index 0000000000000000000000000000000000000000..2c515c4dd3f2da9176ef09bd338843664bd433cf GIT binary patch literal 623496 zcmeFa2Y4h&ea1b?Y18f9!5s&8y_dNhIC40xG`p+2U1^cD7qHEo!tAa%tt6z;?d<^u zgE2W7FgS9617M78axx~`#yDe~vyHQHz&Y`~zn&_ou8gGaQWf7k&-eWw^}I8q>F(dW z^Y5za>gw)udn%PDR&MIJd{?Ey^uJ&G+SlG)`TyhpD-QgRe(&DeU~TN!WbIIbFHJt# z>1-{(&6#@5`npm6u|>ezS--zNv&HAO^KV%Dv;bJUH1!+RW|Bucj|Ew~rfSnGE6w?0 zKf(zH3MB(%so)o{IR1$3v^j` zn%8IuYtK}zzR*}c6PuIeb!u{1;o~(L$a-q(#9Wfii*3neWt-03us8a)wM7`w~{6W^1Os|uh^&y7Bt}}8d7g{FVtr1 zD@lrhyuO0X`g)(9<27o1EmIEkEYuboC+o|aJ$l%@w5+RI1FWd^wG69#ZJb$3QEOEy zwtlj#q#CSfNcq~iP+KK`QiOIh^8AF0e5DkJ6{Sui%J{k`-?rMHGqtd|0QU2mi-_`w zpS!gr>+7PPQwQ!6t4WdoPIucnt=C|oAvw^W#8JU0_ou$>?-M0i zR~pOrH)o9ec#f9mvM%d2tSI|2L@CzMBZCJ=hMF@*eze<_&4Kf@d{|LiZ|*wk)S*eW}4ht*>Rufxet|aCmr}FBmr-sl~xbev$*v(uA+5W#x6N zY+H{Ki}lrI4atG-(b~}1kt14S{IHys^%YtLKBCswGC3gD;latl_@G+iMVjEWtS{DU zSkVwx3bwM_ZiIa)g~nt+oHfcsxnIUTIjbl9I2m z!-`r~Ubjkn;L&2SzPhX-`Kmg0WHd!1ON^G&vc4S;HKEqmGWpsws_yJWJF-`c3C?S! zbA04sY`L zvj4K2)K~cWOilQRhWMI#KlVCtSzldN_QQ#c2fn}-fv?)OCaQ_rua?uY{-k)oLanc5 zwyh@X{w=;$*uQVkY;aoE_vKGm`}7)CG@La}gWx8Q^}U7_4QIVW zbH|UHwMf_359u|&qM@vlgK6^hF&^ui4J#VLs(qM=$uv!u$}NVKb}QxU(=_2LYFT;R zDs7j?ip7=#E-Q5yk?{cV7D4%nuXi6w(j=@{&L@ZiU!SB2EVLDUeZ07=uP$qduc`|s zQ|-i9PRsg2<11=?EmLo)-(@n@e(V#Cr%#rW1C(Lp0BTuz-74D_zq|F-WewRcz}LGH z^=Dbmr-~O}smbvXZAD+7A};Hz%NpYAPPMgVY;|-veqW*Gyj8sTdXFZ2MO)EV%75!C zjFy$-bVSAjZ*CE$E|9Hh>H^D2YXe{DCuld?ioOnt&H4%}7NVhb!QDrznmc}2PRsg6 ztpZlm`dX$gP`#y{*8}lEwZtJ!a9Y;q>NTur5bId7u8h1Kby?Y-U`0b%`;HDCtkxz* zo{=C8SftB3YFN=$V?OK}4 z`U`puD;mPuwOm`8n$^q+;;@$Kvi^o%!-|Hm_K0;x+m~jK9vta+SwFAWu%aQX1Ism? zUogEmzp#2ri-;PO`7Z0{^cq$)gms7Q)J{-!Sx#FHkiW2^>*cF?Q?gl57o=o8s+GfO zS)Z=gu%hd%dWSc+h}5hwxvcb@f`zWL7O%Hb`a15h-ep+Pb=HoS@O8pt{bs|8uCsO) zX6=4Py7nu-wVMNsEh7iebyoAHWV6WISu^wXspZ=ATw}9OhW*cS@|zR1Te^%|R@mDM zZd;wST=e-A0qY%FFv{{_1q)@oIg#;DkhOgw6=|hHn|dSGkbai|lLKnR-pf~v8J6=I zW}!QzI}b1Xz3ril=9XHj3f;#t~Ux%2o;J$G606;||7nux3f zYsYN;zI>(x4>c`wBUYyzDC}$d%5(zC<|6O$SQ$@%uV_dPG`Fp}g~i#rmazTk&08kT zXeLF#RbU(Ie??9kyW8sckLJWECJ(3sInmlZ!@MfYhUvJ%@? z%6z5U!DXG-Ygo|`U;7s7rz2JcI)}`bM(domQFNOaFVci+Z(uE2C0~z=$mZ)|J;zrx z#MhMN>j^QrtoR8l>a<@Am#=MenlVvOd%LXk!@!E#GD}*V^;w!RQDDPHthTSX3~S1A z02^FZ`r_~v4awKM9Ee!P_T*c-U=)_q?$NzO@9ooso~6k~tCRzjrM4V+g`VRp8sclp za)7$jWyMceQOa2&E3<7SEC&|E;iXKF{}E+aQm?YfV>oSe=R6VT=K=o{_?OjV9XIs4WND^}HzS?wQr)WnD$Bwp@SqYCY~% zl;Auq6ckqaFt89MXNkOBP|(+Y!&o~`EfY8H*Wz5(YxNo|)RqHfSi5Wc58s~Ts*mfO z)>k;~WLdlQUeO%r89FvTt`m2dC3ZZZ1;S}rzy2{JeW+j#3>enhaP^MZtk3aS>4yOe z4e@nAj3Yx;og6ngu0=$R=W1!LuLt!SRh_C&o97u77f#qZ$8(*356(RE*2ryO{VxU8=(Ye@N;(pSs*o#MsU+ce=Ty6$W1lmo95m-W?UZ8cvl z=NrU}uM?W^6eyR1*wYp~FD*7m}z19c63jM(?uzIHY0O65(4 z^}D5PTO5-)%jnrs8%6hFdRLbki@K9ZioHWTeY1dU4#0}9=p~wnti& zEvr(ooR*b7qkc{3dJgDC!F=r<8Lf?t4_C)EOYHa_EfCJ{my!clXySMQYFWW7dVH&W ztUJ(jP^(g z)dYoeAoV!S2ZdsNz0hExa1;49Rxn??r&o_3PjhRK%3Ho@@perQYO<^k*K=6W5Z3Pc^77*Hisp_VKd41M zsL8T&<^il|2y17uyFyedKP09HHCfh+^c+^y?iZBFf&K-ZAX}elr118K#q^*i%X)#H z!;0?KM3iCeZh|&vjQsc`THb@2EGy^k!HR~k_MD!YYs@X2(CpFU9a`dpnk?(1^c+?+ zqJ<3iG7$o{lvik{CL5jnbBoBwy(K=^>^)+D7o5jvvTC=jt`a$r z@?5hY7n{p^gJDI*m`54b4ix}qw&?N`TB6I!Z*Ow}kBO{|uQMm75;a}&>*uOv#`iqRk5t0lUuuCGrqYs*UbnsOZc`!->kM%~q zCSTEz9B5n8jEUj{TCSS|l>4xvd0S9gsvKBaT+u8^;)7bM%j)Lqm1d1uiG1yhR%89& zulpg7mAVyQ(U2S%Xx6c(m*?Vi!FJ_mmJ3E=bK*~DylVWmN@e)?F)#}(! zd8}@}X8IqImB@h}YOF?mA)hhw!>6@8*Vnyzjjw1(4)o}5oTJq=cQ~~Bv7Zwg#|3^_ z6RfE1*XDK60P`Ft@Ry7Qwf%_Uh*wtMn*Sbm;w)Xmqt1F1R7hL3Dpom0yvRyO>^_WnVh{=61p z^YwsO^;bdr%%WA!7QU`S$};N<;&E9I8dfx9+e(?Qzu>Ww1NzHzA(IkW317SN%cteD zMSu83Ez$MWWewTq?r5A!)|>H59;=%J^cfRn^0hxN2Xr0a6ZPiI+kEU6f%j z%7Lqt0JH~DF|I`iiLpgc4)i3uVs&%-{}nOVasWoKP{t4tS&4jYo6cuR^6;x#>PD>e z#S&Qw)|6$|uZhKFy+(fOuY$H(ne|1F)y;vc^gkji;cLq45&gPYTwkv>zM^*9DpL;7 z9++Q=QwHEu`&x^Co%1*I_bZjJNvT^=%c`e^_X|??5wZRMhFEMl0HZ9;S@%hatV9kB zG!Gi7ieZ)t+A=FEkppcfLbqyhzom;uLrf%bf?KZbM^Q#dz zSN!`DIR8jWIl#WsE~D00y)0h7CLE&&=O2j0`U)!+qPG2-mD#rDG-IOpLoL^3UDaz? zQR{1&eC-(;J9@V+o1)pHhvocJEtwp6lt8GLUq-~NxaV4DN5 z!iMfKE6h;d+#=Yv+8c{od@B6kf1+9cSku>IwS5^Gi!aF9k)pz4{R+!zSufIiV4(w= zh+B9l$U2Z;w>;LUH}aB^ZO!;I37mf^C12m6i8di>%U3-uoUbXz5yAOou~=VW#6mRp zQ<{}1vr_iE{JB^*VhuUQnX)hAFFe+F={3HhA#Inw{Ce>7b8)ZoB^ZVE)aJm&dJk6A z=Bw(0!rNB&iF!kqQDcrM(Z9$3x|PabX^C+Dy_9W>{lx2x+A>Qo3vXK~`v>6sYq3~g z=`X-nl(EHxd@bDnnz9`D8?m^o_zEj}r6wXP!J4uh_*=1T#45%-q=kL$Ual|Ir=mBr zbB@2$qsvO)2EL*;)GjE@nzGFLihx{JH(x`_tX(PxYA2^wPSzSz)AM!vb%V9T*)Oo1 zU)9nm2RM$*egWEw<-k9P%a#L-)gcGa5MNW41OF%{mlZ!@MQ_wZWM%R-;r`Y?iDe_! zkTR>2T;&TU2+R4eS~mImB2D;;_G%({U34ENWe$+1|11`puP&<{?~>{NIWW3Oun&{6 zF8CL%dm~oHz7QD?n7c*f$6@jU>-fSJ9}W7q<@^uLO%A+J6If^~=D@#+%jST~dXC;F zG9C*0nlcCeT^Jj&?txK}@lcSpKVqH5YTdA$*4KUdCs?Shx5~7&_s%V>)R!CTgKsR> zbQNG-2iRR*>E~^0XXjNa|Eam*{BJ4w`X){IiJq;=Myrf@`Y!=lUtz>o^huhCtVF#f zU+`KS2U#UlCm85Uop9? z_z5d|i6$Z|kpn4@7jW#&WxY$UVMX)pzo~`y3(j)#HNQp3_R>{rUyn6T0g|te(gZ7N z^Od@`Xuc-R0hL#9*nD+aFBT(_mB@ko+8)Oa9H@>@%Gk) zKgOAO%syk@Z8<<67CC^1iLLl~j^VYe_zLSDv$Cv2zV;s+8mb+t4yL$DrRB6az9l z(7dtYvda3>9%ekvr1(mkb;;;@rl?Ni3v3Z=Tb#QStA6!Yho28Oyp|O#n4Ny@!tDWA z@AFp@>GgR6+lci7vyQApzNQ=leZI%~RPo^}nwP6m)wP9vZA+B^;&_C|>b760Yl%{< z3C9y&unB8O+ogSOw)q7UJU((0R>o-&Wqj>FHT5hm^tHIyXwDq*k#U3Ww&m^@gyd`g zDfJE}V!dz^*1g7)GQOs~&*?=T>#gF`TlxO1Enmy9cI9nB^CcsT{rxW%Aa%h-nqWn3 z9n0&YZI`wweK=82Z|xI|Z4bDt>?0Bx4*+iw)Ui8`=wje^rD?rbPRn|+c)&ufuVvcW zU1A*@-{MOJ{`(T+>19%KAkzdZYFT;RDmieeV63k&TGo&p7?`L|9y?l_s18j=?}WFU zmh~FLidtXGWNY{uZ@D=vrNgb;_~%IvqwUl}8&- zE$d_TANE~P)mQ6L(AS=s<boZQQZ{cj_Acz&cXS`uCG)%Scrz?YmaQ@a$otvBRsh0$8ydttdEi6 z>oYa++oSG2H^&vX3d(_$`-X5{XLv0uSg>AV;Ib0?hJ7^Cz8DdDAAWA;)9emrt8-7+-GQ zgf*m3lQQexQ}t8vNZI0>VYjO%h?#e<)1+28-EVkTcN z*TlAkw&J$+L~+_}3r4-nSu-h-waB*hB!O+j`skdr9BayL>&ct2K0bgo<+k;dO<3*t zfigMJ*W9)im(Q3lx=nG%lG)#XSj=o&w`yXX3+irLtyy5&Htv|p>@wB-PddYQBClM-2pd`;PY<+_<0v4*r? zQ;sD&=&{};AN5v#pD5c;C@p-PJ7qa=$YXVLpw-&iBb%^>wzZe1BJRdIZEc&YV`8Qp z*r$oMHrk5i!0qC+~=+FV3dB41P1v3Ck=Bi4{UqLk&pU7N68lDk^Y*OcYJ z-J7tsS~>8HO;|(P+Px|S;@#!c{IEuBuGYj%Il%t5p5|)H0mc;;y&in(wZ^ZhjoU|NkANd;Xj)4Zih~=CSGx@qllb+_< ziurnv;B3CStXG@wla)bBq9A(U5cc`=;ylr9@@H3CCAhKiuAAMeW`L`w96MKsO1- zkaSNkHX4bpT7A-EWs|^H)E?U?!`eHebB<%(6haK0m0>+LW6rRilH%)0`3WbQGn&s8 z^)>am5YIBaus+M=0D7L`6m#J|_#L{!{?h!^8C`~AWyXHbNP4e0UDkUID;jdH*??tD zFt&K!W1TmwXb5W``5LjEb!+7^9?Ci7sO%9 z*PqsNuu$q*qD;QFFC-ZF+Qg_VipgdDgkeRkuVq*}Vs;c8Mk`AmE5E(|@*D{1A84P6 z?W?Vk);+a3@Q32WPjrW-wcrbE5qZ5evocqUcx~m5wbovxvMdHT8&b;G?~pR~8Fg8U zZd)ny70wmIYgzR&XU(KUR-!KG!q?mK*`hpje3lP??XyQ6wXo#;pwc6Cm zsrdT@!pVRCRmazV(0llbTGleG6)>l?mv>Zs81C#@2#AnM_uA`&B{JKAu zwN>)<0fD)!y9_J3&e|IJ`W%my9ME5$3&Ht%n5>BtZoOqa{Z;{zudkI-Z=u##)><@Q zQ`cM16PL|b81 zpX^&%U+IU@Uj+>*v)Yy(Vs+FPFA3eC=DDpH0vbM0<2GSML+Y)R z_lx^ZkJa^ckNL66)CG3iN>Rt!-~YSB%(lh2BDN{32DfSU+KaFM-GvW|VDm^NY!DF^o6TR$_sIJG>>9gXVC%d1P#PLW&Vw7x!0p5iNNeWkq3 z-$XYFa-eZVA!=FkHSh(t2v|Euj}DG+@ww1{zu9BG zMGFE8r42*m#}A9LE~M+&{%((zLnvUO>ve(NDahKrxIA|v>J^IxVuF2aHwPF60T#N> zYTlG=7UaP0v2hJ}x?^OxI;PQ2hocTC`d*LqD#5^thUCCm4r}$`U~TZO&Awf^|9zjw zdW~j>6^+5VKO*b*d#u+QRx}3dP(;=r@K~=itY`@99w!G5kBnAhChS{0R>qN%184}V zyKNmA8?I_G(c(dm_0d`~tmt-Gj}9J;%KBE1^-9BvhOl<$IS?^P#bM)Z9_!`$2fm`= ztasbRN7c7`tn6pQiiWVJJa$ZfOx<{L+aR0 z-Gg&wi|-Wr?;rM9Z`XogMMGG7mg_4^iwn{AyW7^T>RGA$h+%z~l>M#!QrfLn^)!#7 z$2e2&bCav@Fubr1>$(1NwcD2RwQ&DH%CThc6qw73pRl4==8je>SqawO@#@6UvC)aB zm4M-}oOT~(Qt!ixT3@^QEN^ZRlmi3G*T&+q4#ccR8UV+cFU|N-F}P*chxEEr|3X9d zx7wHI?4qNnyKnezkM&Dh1N(+(2y4&E)P42YG`+pFTTc0RyjpRHUlP?^(XZjAJMQJm|31(JiTC-zg=ysWNVA~36J%i`p-U1 zXb5Z9%8dGj))v3*Cms160h^1#KiAi1>22x+G=#NBthIW)I<`sKe0;CRN*S)VDriW1 zpns*_AYE4$BNeY}rF^CGK97}aR#Il6?(wanbwSP=weQ8&NR`U_J=S}~2`d`H+NJxP zHtL!=L43et9nm`URs{{ofgasAlGCCRpjJNUv5p#6)NWg4`d{O-+ETt*@4Mx|M|Exq zj8>ce=nG-?7Lm7IjIV0IMDljMF8HwL>wCpYU0`($uOMqjG{&_xuRZyQ$9hQr0SgVu z*FE>m&DIxd_2sFRcms3{?MFS<{e~5_V@mP4Xb$Xbvg*>h@oR*Sd8|(}SZIi^yVqIs zyEOAPV+H5GxZ4)>D>;CMu%6XqU06L;n^~M+J+%;V2mGfzR>lm#iiWTnUt#4iXGGFU zg>#==U!QDP(Gb@DrmstpZ)PHz<~e09t9x&|5Y}CWRhQJ%B|c8%>xlL6Nzd0?wP11p z4Jij)*88UBwUl`ADUWqfi-r~52J6b)19jct?sPm*E$P!9EB7pb6%EM&ldp|4OYs|9 zpYd3qU|7)*)?LlRaFcf*t=5JP^6SKl&w8xf>l$BC+sZA|@3Pxr)v>stc%+re=RDS% z4J#Uf^+-(CpYd34GOTC_tD6Hyh6iJ!R({rFy}_`eA*^lpN5y-{!hX(UJ!n|bkZr3i zN$*e-`SY8wKHPk(GHt^C{l^X*sE*gFqr+zIcw*~Ulxw}w+bR59Lvo;(Yo<(0rnqEE zvd7wQ zSkVyHzLDB^_299?DF$i%ipSbxSkVyHog=yz=Va~R$Z&1{2nTZ_#;lSN@eF9efCC67-DOb-ox=TuwVQsHPZC*D4%%kfo?W*mTuPJljHyvMLrC*qz z8>K8DZsDN?a^SZ-R=3Qu?bkA_YG>v9g@^clk>j^LR_wD=NIB46i{EawU-@@DR<zP zx>sw!SF{y<{WHf`mo?DW6U$ReC!?FH1zOI(FutCx_wW^MMPL8i@zrGw^mTsmbbVQ0 zHF{XizcRksJ}tBref>+vSC=)=*QI5hz8Bq8EzolQjq#OwR!{S`K`Z+D*N(3)YpAcQ z3o}W4wVZ!veC1dnzM`$@>)$%Qx~ze|t}IQ>)b&-Phvocx<15Dq@D*)EU%%q`>aqs< zy1KNKrhK)W|7d(Y&-jYAqObqp`0BET_}V+Sa(}9ZmgW4a@s++TJHTG7{ka(s1J zY0DBB4}5_wg8kU`+Tkre75;C_Y4;5oy$2R*eJyiLzP)xd9A=9-|JitIS+{$mG) zO25m$8(yC^qInZ4l92$yx<%#t# z-LCUAEHA8XIS|NtaBzgPY2rtR$IAWe*tXCR)~@RQ!Qlh(Iay+-$Lbz02xL7rad#Tl zE|2wMtp;Dw5Z3PM(4mpTX^zQud#qotO<1OU?Wqn|2Zs++q(qM%kM$O<0bkJ&UpuSA zV^IeaJKwn1W4+n1q9Lr^)#_a%6O+yw;yvy2ST8ZGXc+5(!DENhu=abbnPEjkSi7nR zlGR%S9_zJ+6%At@8J!&0%n4$L$LjXKhOl;5M@H|6J4AQwTkrH(uhf4i2hb4Kj_SzR z+QK70+2ygi{jVXc@^wOkbt6+Y7q{DEy+Uu}D;manMCz{XzuuNj>meLRzbd^p{&)>GdUu-R8;|f< zA8%OE5LULW$^B{ew=VEl_Ze0+m^D%3<&hri<%SgvVeP}$>XD<93Hk^g<*`1&u%aQX zlv$H0K*e*R$9lD4MMGG-s-t(MYHeTSvAW0P!&r}2$I}$AmCR#3+xUtGvc^9lPAtSe zkM$oOTNGRj6ZWcDXB;d#rm6D;mPu ztxJEVDhRIdSg$v%Xb5Xpbz*$zkY-L0S9+}HY8~VN8p7IBoxE#uf0`o(kM>xvF|23^ zYghHIRJ*a2t31|A4J#VL+OL}~Eu5&=bjL6)Vf)d(c14`^<8U{NnPZx7(L|d7B@b-0 zlNehBWmezJ;%vP(t*er4@!^1fbIkA><1MUj)dUtw9|6(D*C@!^pR>--ol0=(#{Meak+0Wn!b-VCl=3xaP2=nJo3PTKL6l)ldEdwzJl3~~jnqWNm`54b z&LmePYjWJ^v9kTcirVTYE3s|$HR|^_YFs``3y2&yZNf@_29cFu-7&Mcbf&h_(778Y zR`R*G_pqzN(W_?IGT>=qrp!8}i9T)AEnm9|mRX%s%O_?uZ;GINeT+C!%L*2(^brtQ z314BoFP|&^!!6?6i1lW(x-zVN$CnpR)$Y|bD&w<0)?;1JD)1HMSQn9%@U>&U&a6q| zaUSclwH8>>kTR>Adt4rmu~q%wulsn9b=k0@*4HxSYxm;u<9TkLleS($B1b!!4+ZMXhtglQC zq-+m7#bc#dgcY^NQ?oL@CcA2muAl3%y1w>^mnh?F*UaK-%(FP#*Y^6>>#QL$Q^y|F zMBk8AJbK9MOb(>Hf9!sb zm9A5KMH#bAlwsXDvs~AO_G^u)>G>E}R_D}H;_*0Fk8>EH`&5%dqF zZodvY`3fUg=uL(#D^X^p+_tLXbXji^AFSveO+=X-=&Uc?mukP@fXC|k`lKdmB`f2r zSeMLvvE`u0>iYUHv$8V2rfj<$@>pG8>DMH(627*tq;ggF)$mvu>qNeyXK5nJ_}VwC zn-|<)pSiEzoOipA7hd`1wME$NswQUY*pF#?w^3f(XqA2L+r???*iQ=%U(t}ZOUg3q zusB`Tj~iCh)>~Pbe4Re2In%@ukM*au8hk}V%7KphT(XU8)MF)IVMQ5JL}Vp=O<5O= zd90rno6Xl9fGWzA1F)tt_Nd3|=BsVHWF>rUuiu}4zZ4Ho_gFuvmEbEHvTry*;i}ui zEH5tKs6|ALagTLcps=Dg_LT6|VYSUPyO?e3gvWZ1VMT3}VeP8dPRz~PIpgZ2$NCv9 z9!xZ3+Y;+)D%NA0uxk6yqf9x_dwfp4np3ADH3tkqQ||Cs-SX8YTvj4qQ|`y!>9KxV zUx6GzLwxO;ThIYn&72_a@>oBib-;@5HR~&r11a0ucYCZqV_4CUKFySUZ_n^pKV?|a z5Y}DXKXytt2-3C5>dSF!+i&t%f7P&}Hp-N*-OKex?0W-Qj&Jr@KdXO`uV~1&)w6O^ zN8}fh^cR1N$ND+LiiWVJ?9Y0p$Lf}^SBRI$N|diVj||>b8yr7aJ34qU_9^Ig|HbZa zaa@xeKtsmn^y&VFwVCXt z@Ae-$))rwo?Y6}^X5@m^wGXnvZ4vYpf1|ELa#$?gn!rLs%7LD|KPz6k_VTNmz)z+* zzXb$ioZ6BmIIw>QZ>hb^MuJ)%Zjfs+kV2VM82kMYo8RS%SuHKD;iSA?zneu ze!jL+Us;)3j4?pNJ#J_@?=?Aatr+QZL+!qyo;JTg{$%3^wyl(HZF1mQP7W}J5MR-d zzPFy``g}d&h|-R=9u?i++;A=!U)gV=jg8tI(9^Id#U9tMUe6IKpOXA#!^=W2xWmr4n{rvyu%RYM(Rx#!wExc`|+%K@6 zHpEO0X#YCT0o1k!T4}#vMVvNYT~@nomGL$He!+VC)pFive0{0$)2d$PQM8@apLf5f z*)hP+RmWEtDF@Jyc2@2y?U(!;ZvSCdUMn@1V>zE|e0`GMrX7IVeC3lx&oSwcuY5j5 z;Ol9}*QaVF_=>h#9eckxT~_yA;vwy)dnzEnp0gu(qfsnDf zDeJB0c&x6kA^k3Sy|px@9s>O^k;CSytqW*plLM$N2dKC5H_=TZ?;oHqkg_g#p~vd_YU{16 zL|a>R!IB2R>YK)o7kR9&*DA;X)P~x$CH4y%Q;pix>}-M-%(r{2uCHA4jmS!{4m9fO z&pJNUI2q?&CY@^|Ti45gmx`G(Yg`li1E|}dRkW?0y5HqH#A)lTNimWGXh@lra@%@| zI9*o!gcaqwwM14T2fCskgjwI;!cV4`i}{GS=+C5XMR#ekQ8WiqABTCF$pOoXuds$3 zhe>&C!*b#+tlK@d(KWle6!Xwwms1Yd9C)?7Wm{rjz)rU9qPL3g8|s`>KA$3BeWl3( z%SsNwd%amP5 zz-ycwa9Kn4w|dxz(e|~)*DCSv_43tney8#E(OL@St5v(uqP})(jNWXF6O8PN9mUtz zIljWk&y9xon)heP*PEPmZ13s%UZ3TBqw)0;Etv8EUH??^GOJ7HNXIN+-S3I7uXlWf z5ns{k%m=d)B09>HEb@-vwnjtf<=_D0;jg<=ApK zzgL{7&l=Ls>O7TX7@3@_RK8D~8?jOr5LuZVh*-AfD|a3&=Yu8(+;bz{9QYcEu|?1( z>_}K<@!S7^lLIbmX4s^Kx2=@zthb1BBUXDoqB5+#wF5(=lZTUBqtbHPZHu4UPQAug z_HFYw&FhVX9OyqVTpK!^<}&MVHNU@Q%?uVA!rFCwesShr&72_KW?0`LrOcvlu*XqW zsecvrwQIhX?21JA`F6t#tJ`*gnaGbH7AyzE8tG_JbKUOa4~o-ey-i6Ptk-J6u%aQX-Sf4^nWcIxyoW63hdtJ-^aeSkaI&ORNX0lWADrDPQ5Vtds??qT66Stl6W- zyF6C@h7}EDok*3hKjyJ=i~wKJZLlWE z*Y|j=+r2-G$^rSBCSQNtW966@zM>(%_8QhZHGk~*36FKV_YRe>$3_!vTR-WsULiB^ z6%FxKtapwlVtud2dbwdmLs&Z(my%sj^L>W(gHq}$j&H(&EZA3h+?jaX?H5?Kk>zOkBaczi_nHp^#?`d~S2+hx1QV|&GV^k{W7 zMWgUT=J&U(yW|AO#5#Oru%^l&MZIPF22k38{CKdUA*_9{ z-Z?%pnV>!JX~$Ps@dH*ggjId;!{gP1N&4VFuw!8UeX#s^_ySV#XJSXxtElIpZT)MdPd6m(hy8{+i>f%X+CXrHrqA z*4KrYjy9KNIlp9lb@vTh(br#he05nFuS;Yl@^z>2HGU~jsaVe6G`_n1S*_^nZ#cfX ztQ_AUvJ$>_PfXrW8%|JZiNkW*{n%|EGlI1`lwdEmQu!_8sb!UidD{gIskd@p4-IPW z`0?8wD`PX;G@&7^z4$sZI+PXetkhMoqQR_*`d$9mW4+R_qQR_p9@X6O<4-(R_6_hA4P?Ek zwm-?HRryno)gAvD%sP~0)2jTL$9l8z6%Aok`Fc~T^7YFe>rI9g4Q5SLX8pOxdaYqa zgIOo4hctWi_zREq2Cac@3k_!-P14x@OOMqZuN}gwy5OeTooUK}zw%gbG`^yNtT)#Z zwYC4+W97O@u`eOaewczo^O0bLwsFhJu;{z#EpOO zShqU{dWZ3q<8iSQ_8&dg?T&%o+nAfVccs=?ti|u#{3pZu&r;iFW!vKSr*Dhcsj297 z9oiH3!GG28`m9&yq?JlmqVKJb`$W}rzuQ?e^ERbt?W#!Y=a>ACc)PV+#t+axgm!AO z(TUkxM1E`|;r$KibNd(LE39X00t==5BDzZW+A+O)yg66=$A1;4%Zi_{qJw62Sqavz znUhn?D`v*X@^2pNUM(M1l;a#k8DC@HOT0Ux$Li**@-&Y!`I@pW`0q_v$z7rhYkyuB zoL-)5)SEMJ^RYLtO`8j`rVVP|!WxdtzvAVwA zZrmy3Ysz}7V-r^HEl*@+a$qi>CCNjl#|j_Y78M*B za_%xYkoQ|?MX24jz-*Nq*x}@W%i3x=uv45Hv4-S8v#s5jnx3ymPXo3oJ5fgQyYri) z*4MoLDwwZ3rl)4r?Y6}Ij+eEJ?MC}ruUd2ax2!{2@Ly_z(dyc|3bOXhES@?wwGgQ{ zYi;fMlRYL^;f3{nO<#9glN8cwwx?S%&o-DXib4iTx~;JRo2% zS`Ks`UtT+3M+=!K921Ld~LDqqp)#c^- zLZdbue;|qFwE60`32na8mMzM<)3VO$9(R$8t#i%qZ&@j4un@JZWwxy~*2ePG%)MGj z#CVv;dRohd6%AqSm9MqssYtyp5B;JK_gHDx!-_ilv4wM>57w2X`V0->$Z?*>%2o_3 z8p66$_YgiltAiWQUahZ0=rHW*ylm|opKn+%kPhkHw+fVTWN4nJ_LF>pErRxI%042t zsYe)ISl=!tuu$7}5p&_|X?6{dkK9q+;!6eo+j2h2_)7T%E9%x;MUTa`Q8_0He0`+j ztIKMA%~&^IV2dCJx|@eKxAz-2AgetWLWhnPPSl(8Z|AY2 z(>f*|TULA&^%9@A8VOo@)tWf03$hoUTiqC621Q#rN&dsdP47lh1&gC`V5M) zp1n47ggx2q7}N;KZxV|{}_VYCWn9tC~1y1t&x2Nb1PS0bMn-9*SAuku)3Uv2+DIo7!cA~abX!u6+DZ^CM~tum}# ziT1T1zQ$v9bKpGlmCCU8sIaOxW=^iV5%1Zx9;=%J>~|4mSi2JR3p6QoP4!J!GxMP` zthPOn;)39|ys~xdr1<(Zp?Mu3&D#YnP`=(EU*WW@v^Bs&L;79%=1!ejTy0F(64YKd z8rH{1hs1ZICj3O*{n*0&uS<(*E?h4j{JhEVT2_38)sA<`^t@;t+i~C2JReUHH;Z#4 z*1cwh8Co!3dyfp>Ha1>MayGB!wE23a!9r~g(Dp9M+OK2Bwd(lz*f=G1+_=U3{+4yS z*CQH$b-a4?@JKZ}>|;IFTV(}5HyYyWfC_=7)kbalOq?#*j@F(vQjVj?H_M=Ei1ml8gjj29gACKKg(N9l$TEsr_1^oEfrSO?#D_C z_hoeJ&LEA|l_+ffLZ0ZcepVlV6}9^?WmpH6>oZgHbJHny53HxQ9Jt!Bq9J|odmUDD z>V}pS9&Kx*#&!KM`3k3Hos+3BqVBd;w0zy2v&QKg;2XBBl}44yQ#{r?#K`q%&=A%g zx<~tbqJzgz^;ie<@6tTCAf%nuwX6$g(MU@WPxDx>(K=*let(#de3h?ajghI%FWa`Z zg{yuttox-y`u7V3N?m}4 zk!=eN@l}2BE35PI61FQp+a-st3>nsgQhfcQrgMzie9b?J*;@qtuPN(T{2VsCuzpDs zSg7^2OudydU#sHWh&3c%Q?>^VY{Kf4uZ7z#JC;w!+^{rEpHitA)>FG}{fFLWKMS=v zkbkmZzIM}3xR|6#SUF^J)w0r>0}FM0ZN8a9Z~VZv)wxoy-@EZgw)LM8kM&wD4OY~a z19{#S^mP}k5wpNOwsD)sda;=J?XBu*GYYcy=d5Wu;BNO=?-LnVXh;t9HZS&9pKX4_ zsE>y|)-zf`CIN z@zk>J*IMuuwXLx-{aIqAi!n(&-D4#WU_}F2Z%P8Hg^qiy!+H-^G?4XX&6*@8Jl3k# z0xKHAy1Q{|$!u1&DP4vjCiJAodeX3>cH6pz74ikP2-*WFj~N~FSXadZ78+D$B$LT*R4aDw?kstS;2=*HGO?ozpk+OPFtK|GRDNj=PnL<+OFdJu(qLQPr*M zfw@}*+t#_Kr{)^9#RUr*^BT*~FrHf02gCyw8nkWY=WU#-pW5Pk75#U|8pV2l=B$`+ z(E={l#5JDKPE9u23;NnWvp8F?&Ci{RHI&Q(Nb&QVjkmCJEmg44t2GhIg~I!>{j*bz zsYI;bB2Jg}O0mI;hOq8jsGqLo-cC=g)U}X^@l21^_0=ASDdTI-ntL0cwdS$9zJ{=- z9IJbe$I3QE4xqNjBP)@wI~V6?Q{}*v$Li)l$T6dwHBk;sd#r8_gs`?H7>}W!IFA{R z)y)AsCbAMaup_SvmX;T1>MQg!Z8v%=PhDGtEw9dqneuhWncTYIERuMOppI>yi9z`F zS43S<7bgnq0Zm|`?9UQe318c1)3F{Gr^{Lu8>}dGEs>RA?Wj*D%h(ehD>(owYRlJ> ztjW%ZIq9*w`>~AOC$dt$&Lm@<+k`bFUpwlvbNLrc@bD~;mEYdx0Oc2vmGX5qnXmVH ztZojRpOcnj?XIW0>GizF>Xun{{A)R1=aQ8Jr#4{?*|ys2>B`pykJT+-ZF``cuPe#6 ztwoP@NI7b^t?L8wwWGe0EC-f6RySWS4Pb3MZe~g#&-Pev(>m}Kb&hQm-ZyMNo-SXP zJythggSM>`=~!1h)*<67`gl!5R-!IQc}%|Hv5tt196-A?5z@jr(7CXoQyEaxjs4t!kyAz#r)noqS-4!q3C0hjeU!*Z#RSqawe zJO`$duv*Snn;iIr)TtexM#?!Z%92gQ0{R3!^ zVdMH4`4=#+HxgL;rkj?gxD^|IewX2;>}M|t3sJitn~x_d=xfikMiJ>udCeX@-Xu}vb+{S{o%iG0i+k`Hw^))Neem!gEWPRpd)mN9UyFSkKiB&ui7u$#Gpnt#-6JUdxYlm<4T9ET=689;fAz1E_6l zmpKm8r`Bst_c2-KytUq8_(fqfUmTABC%<2LZI^C?f^tg|f^8+Ra#8$kxh_i_>N004l6#NWS*Y)fVRG7Vcfq{ITOFJl4Ck z0$9;NUz3f@_(_lTm|;Z&SsQbSN`m)#talhzG=#NluC|(L+j^hJI%!zZkbLc)t38lv zRO$OY*1HWW8p67BwzjgmR9{ZfD70n3C&YY(_+F=p>p-I+Gez(>@4xk~d{jlC2-O~Jff7D}rvtdO;%GbV?+CtvYikz#! ze#~S2PQ!|Z_}VL0w*LgEm5+O@uQ#k{2-=YrqX>r=R;6Cwyg@*Vl)?_Cfeo~w+>#AWz z16h;pZ+*&RJ#ARgy_$$J`-a`e)9u52+GA~qjT}HjeC;}3OLj;3&v>l&8&=e|vI z@;=fwSM9d-Hp7aZt%|eqs7Mwq0 zczxE8@r3>MzGlad>)XZ+%lUcZ>yK*j{M=|O_QC(0@_xv}}AuThZ5_cYJkOFEO5EC4BAY0C$R=Sg}~nUoyUaQt#m_>iXI$l@D*zgr~bD(HlkotJRFFQHlvR)}(A}ir* zSM9(=?NB~j^asmn+XEaUz*n@_tc~aSo96XK!hS*biF#vt{@#r~vaR=j)p+{rCI>#E zrNN52_D!>F9-l<+SkxqZV}|`E?7@at(>eirluqBeSgXP{=a4N^~2%;3vI=G{S7ByUDn4NAF~oU zkTPF?Q=A*IULU}k=fKk3Qa!<;PRnWY^+Vz#2hj5jYngoQBVY3)24?1n^4sS3|6P-> zpVhKqMcsTYTF0i$0sQV!1($BtpHz9HwTK=Td95h zJ;zs{(Mu%!gN0MB(+H(Gp$$_WJ%XUquZD)}aMYpY# z_q=A?`a>rNV1y0L`>~{%ruGcr0h9Dle|zE;a=%h$*1U06};Ynk@zK;B|W z&=?TU9~)0C>st*g`Y=sInZCEqIo;v1Ia~C{KQXL-X7cs@S_8hKt+>DSr%t}QtQQ++ zvJz$1z{o^xqFTLuaR1?|nLV0V&ObN4K3q%2SJdV!uZxxgsjprCWye>S^&Bx084mz& z5tIW1Bef%gM{5&@$KqbofmK^hyKP;r_rOA}ucgX?`T3e|4wK>(zRF)1PygEFz()-$ z>TX*_+XL;>CpBl9z|X&Qa=>NH%POrlE3s|0FP}~Ws-^ywI5%Ro?bkA_UHN^a)8Jap zzco1^t~_5+o3G?=;c{R~A5IkHz~4AIkZC=zp`6c2WIXWZ7C|}CbwmvU26-k3%lQ@K z>pramEVLDU{X553mo>!Ke%<+gp;232Tx>*l)^ghN^=FN*s9R@HrzzIhr@@G%8SNhHjNXP74atEn z&N-#POAz+=?=t&aKdE)Vin_-YU0L#@zk>ZkQNUsYPYRhc!xK) z2>M@p#0o7Z_ikA{cx`ThZ4?IKH~9dyR=1$`{xo)_pxx9UR`` z!vX)coR2cTK0(U>3vESTAL;n&vWEMb_W{$5eYlyF%<4KADIajGzPFok8ulLAT)cRVcKdTGYLCu^XE;gQ8 z)(f-_SkVyH-tn=q$=Y!Bjs&cic&wi@tf*~kml;>wWYwN*0@h1C)=Ld58sh7Y{N8q^ z>m@SpWghDf8dmg?W?f}`9Y}ViFO73GtWS{ACVY;jbB*>G)-q$Bx>nMScgeRY!wc(6 zG_h@=A;&hl#hU6m`&Z(p!}@B&iiRBDN_h>nM|-Rpa$18dfy097uM}zw15LZ!@fDNWP}L=HCq->x&F48p4|L zntwNXtS>aIXh;sEyyo9c9_w=rD;nZ!%4`1J?6E%2u%aQX@^yK(wzx2VMhl1>kMUSv zrR7s*p&>b-@-@|P!pbck>&p!*8pxV#Y|djn)>jx-G^9NsU%Bq1=8hka^H{$_s~`u^ z5Z08}sC>M~`h3HRhHP6Y_hD>1+wOC}-LRsM&_t9u&OMMHG}JkV2SXEgfIc9cE4Vn!jmYZzQy}_crEc?p1xTsLPcuE-jr= z6}HjGOTYhA2nF4m{1t0hje^^UbpoIndi!UR{_;ardoC#d7X9zP?+0 z_=>tYP;}c$eJpO!@zrI$T)ae9!q*;J12K~{Culxc&SB&0d-OKGqOIubkmIY%dRg=9 zl=8Lf&he4Ss+lpeSWa7JQLo}F8d7g{=d6Q~DVvL{8c!`NeXg*gA*=(>NO%2#10E}N z7p!Oy>-5wt7a*9^?U%HOZAbgs-GA2GE%-XDC4W^@k5RjAKLU$RqGQM`qoS8SXMVC==x~x|lR+Q_~5T#g?oz1QL?|Q7RulBk*Wmr>Q z>+7h;>iTNStTL=^bIso(#pBaG)<>HhK*g9x8P=|amHJGC?f>h2*Kv>a8pDc)Y+G$n zS^-~=RQHARSY2Of7Z7E9?U1d_x#B-gdaQ1~hWOe)yF7QFE?mC4vfbLX`CU8K_Ds?}^tU_}?^H1raAnT4i2O9O|W!YC0M^=ydbQ%$ zUf*n3XQad8yGB!oQCk<}+gL$gJ7yZm+JtOV-(q-Sy;c)g=tY`{GGiT5wqKtq&W%_@ zj>V;H6V^6iwcA!1U%Td$ohDzoXA@S&l@euGJJU4@D^r`W_BT;Wv38wanpr$$W{fP; zo3Prtpp38GDzg?NUahu$?MlS!+ts|7hvmZuG%@xOwdJdxR(gt-SyL;CTy3_mX2ogS z10N9=Sg7??+gRbgjEvg@nS`_oJ*dC`zPjj{Vv1Qt?y}GUg zO@bBkJ!1-Wz$wAmy5I>~IQfd&J)JUjY=84yh$JnT1#!Bpk2kDn2y1VCZROhNxaN-? zmecymxDk9sLypDu9~r!>RvjN7OK=^MCG-1R)_sN*4Potu_0X{9jvvqVSTEKp@D&YV z?c&-VX;3T69_x*U6>T-v6_52Xh84B_gk3m|*;_<@Ja%buS(ky<5yLG$9PsakVZC2E ztofg;iSiV+zJl3NkhMb>&C$n`1l!cA;kB$_!D^2gWvsa%Ys!1s+$YYBSUG-7WIPmP z?IZ{Ie1bT=3F}_7z6>qM+Mnm^>E*db-OL?Ntf$WvGdb`yP2?-uiurm*oVG525erf3 zE+XThpsy+O^#O5i#LD;_BIBVTYs!3m&L*sOpSuiekIpWbUrbTDu6t^8V8~dA+P;jP zdS295T{A@kiDHc+V%y1Eq!3h|XL8lD{+Hfk`$sLSo)%^uSgy}Z&Cg9QCm5>vtsd*; z1`A!UV~ex)=d2Np)v9eg-($U0|6nsht*>QrAU128bA;su9&090_6JbQn$s672fB2P zpHw&E`!}~oQ@d&b|s8lTHcNky)LX6}qx}LA%FX(H^I+k+v#g4Bq zf`y*1iO5Ry5%sN{Sy5+3Bi8A>JMxxEj#06kuQt9O(A#%wLiN^K6!taoJ*{5i_9XP{tmwIBRauD~=v56nAN@|pO^}y)tcUbAtf<|# z%J|wpb83-GJFMIrzxVCs9_wv}6}A1^Wmr=lFL;H=I$~JS9!*3U)|7R@D>q>kV;-eg zm&{BF!ibCd6y1osK{K>`- zu%^scIA3dcVSTs3Lanc5a-cu&#)!9H(7tw-Zlz*5Z4T_xZ_VBqYRgx>EbMFV;QsMR zI=1tf;y%D=rz^GS>kJlZ`(3(OWx;&y*}s1{5o+c2=J$se*6sEc_w7G6ad&NEa&VF_ z7&qSFv0kXfV<8&iYwz&*(-Waq-srJ%jv1_I2y0JuXed<3RK?Y zv9d3KuV@(SxGu1rBwZ_S_E_n6hZPNC)e)od>cQF}%^y3y+he7Cf)x#6?LIVI8#*!^ z8#71(hH2Sg$v%Xb5Zn$mnqO zt~4#JANE+cJLXB_v&L^v)Y$$JkM$bkD;nZ!-_q1_W3Dk5@p3sLX~sJY>-(fv>aCkK zv0b6I?~U;U`38q>67*&CPV4UM>K>Tgh8NbyXrdfIX}=JZUqx9{o)7ab zak{LG(}WcbVeP3e%+?Z}fBvH$>yr#C8p7HO>&Ya;vnucQSf5~6(Gb>tSQ$~exU40_ zjUV$^pQy!?184|q%5m`T@mOy$tY`>p%5lX%?yeRILfbD;Mlwn1K+5;2S z>g{QoS(W$8SGQmL0>g@iu=Y-l-+n`)cGd?x)@uzb8p68c&XLjD@W|l7(XolDmJu^P z=&{m%VcSAOSo>i;FgAW9K_~o&Jl4w$D;mPu3+u?}Nc`TcO69{I>*ae7s zXym}%u~|Rvu|C?cq9Lq#IdDgHJOOIur##k64J#VL+DE=7y7uEIJl0DLD;mPuf9JTm ziqllGKkczT(y*c-tOK+4m6=3m9NM=(36Cj!-CKP{+@SaU{wrVML;o&${}Bi}6N=fv#hK$jTv-(HHxx!LF@K_5}- zeEqCo$OV^`oV7WiF_3LVSvyY5Ha7V>+xnN~w5)9V)LW=CPP4GDy$6RUb&zv7dSgI5 zKVv+#tlK@dk+UW`aQL$xEB%@HiiVW0J@~5oUTgN~@pB&QwvQXaI+@^rk-quoJ=X0W zi|eUzKh`8e9V$QXvGV)dDI^Cv=F*h|U+`Gna)2=e1pRPD%dFnR>B@m$@L0Edd@E;7 zR1W;2$4Y%l4xk}9(1Wju%7I_%IKxe+VlABn6CYb|aPJghR9Gw@(Je_PD>dQj7lQQ9#!ik{Qop7`9IUw3j~L~#7v zsM97ao&yQ5ul*%)x~%vLD|(G4A}f&t-7`9wH^DjbaQwz5tQ?CWvJ$K*$L#;6$9kLC z@D*jBi;x!2frRD2Z+Wb44$!YjWF=U4G;^R9FKyTB0-LM9CuYil*J{$!HPzERTBR=d z9l=p|SyplYW{z(VSqWcL-goDB#kmn{NDk~iQE$}hrww{04Z9Md@T`hH; z^N&mpd`ipRrwO(FF8Qk3^2bddz7gl{{JxU|pA!vOsJ8z+q%Bbn{DC-K*3XCzR@Cmp zlws|kpITuYQG}mA_sMOS7DRVSN3n-o8;2>iSx= zE=YaPz&~|-g%MxTptg2iwrb`C@n_<6S^q`rfE8s70a0e#N|~=;-h?$IUsGNy;mp*p*FYDDbZi zr+ocOvt9kIl=Af|O)#Q4qm(FmU5C`=z+V|&%gVL|tKGJ;677MM`!IhkPM4MaL0D1i zYpaw4f8(*b%FDeFR+|nHNLvXHg*`+ z{FqmZ`1((duP*DAE#PbWT8qC@v7G;Ie7#Kmog+rn`bt(5&DYfZum9}$dZifoxzSeZ zfBhG6x~%Sf&1_xJDs}9?daV5R_=<+)Yx~Ny$@2K}Zyqc6wuBW8$${ASXm59}qi28r z{}MB8Le4E=n?h|4=xOr{!T>asGv zkjVaD^tEH{%Gm-joZZIPC(2a%2T|)QPPa-stKISSDPq)L1r4cVQ;y5%5U0!fRKtqu zUwKFi?;EDv=kD}a`R(6=*oB#GG zWf+0aMYpY#*Mo<%N1Ui-g$-6)4rF?s1EZUS=^vP`Ep76lZT!n}_8VW>kHt@`EV`9^ z?Q?u}_qpx)v6%%%Hwk?0)C~huC9LJ#X?z8x-SD{iTJ-o<>U{8o97wcrS=x%ntQjGQ8a$UuutogO; zb8q9IcCMZ6q%zd7K0=D0Tz3FJ(fqfU5=FCCt!)saDj9}$HK}1%f zt)24zvFD0&Bi3tj(vqyR_4~|h(dA(tt31q86V<=+kQUyDX+J(|=87*5_gMMuZ4PkU zh{#H?b{?ObU&`l-|8SnidXZKED{AY4GQM`6O3>kAzV`VZYo_;MMcLMfGOT?KMrcxZ zHRp}_Xt%2i1q2)WEwG|?%s%a{Rw=VC5T~uTTvm?F6IqFTO<86=Qk)yHUYwJbWKCFR zJ!%tHJ5IBVubs!2>vi)TV~cHLWnyNu202Q;qP9K2>!SSwZTIWLi2~M(#EJT>LHjWH zT3bm%YdJ45zET$8BdWLZfVt>COvmE%v&?MK1wZ#WzPhZ=er(}7wsU3ffqHbx<^nGk z=SHkthl0pTlv&-Ubl;uDnS8$350>*XF_W)sPvii~@fd;}D7tN>^pzaA)X4#tHKgs* zwKTObm&VqL<-Ef9%Dw=;qITb~jISNK>A7Z268L(#akjBBIA9zA z;~c;kXA_+H{!dNSY+ae1?JiY)zj=S^`LAZCr=NM}t+!%#H+BD-nJlc1^J42)iSa86 zH-=xogR|E##?P8wPbKQ)1HT{A-w>z#~W_^04jREpMtf(IY zrTYb$@6Ua?7Xv=)Io63qg|gK*b;RzKUak=5YOLJL1S=}A4o)o|Tga5P9@~ZWVnbSu zb^U#f=IqRg`lQyD+TD|h^XWA_ltYRu|_LN)DCoJE!zIXr#Fasn|^V|F)33hV+GDi_hB;jx#7Il z#(-lbUSYk`f)*9>K)-xycS|nUiE}m9?J=y&^SOozYu5*?o5Y7-QRX=?y`^;DaQM*N z(R!vha6Tm#hylhj>C2+tx{UT0&~x34_P_?qsx^AEDGHZ=F2s#;8k~=l!uoD)u%dcu z#c=i-25Zi9qTsyA^1}LFZD65}Ra!a**3Zq=o5#~#Dq)@RoM2>*^JW3T`g(1QWucB$ zf0iD1$-QR(@q%*k3L}0+uh51S75q9lKY4G4+W{DkCy3K$eWRX*6?J`Xy`^*v^fiy0 z&&~1h#DLZJt2ZZKnsvQd0j&o2Oq!mIp9h>zZxQo0IfHf}eHYY?z3I==V??>*^-1D% z@d_g`fL^N&D=NgmhWW{(jf9Ptv4Lw00}qaKhxO~7dhSMTsNZ%e+uzFV*G-;ZVZ^WK zE!wc6f?spyfz9Gvjg|RMtf;`6^W4ZS0qeZj@GI)<)C#OQ+k{&KRxaQTD;m?z%9&rc z1+0F&UT7U#RPgJF8UvG=?z^)+V7*6t_!ZSl#-yd|g5iXHEqnNmxN_z4>zR55R@9r5 zZ$H`D>%0F!n{cB&cPCZN<)34+Q%-~PR_Qh&T&<09BD5Flt#QliSn(^Y*K5Oy3Ndi1 zId^Afv6-;$G7x%joGu2KFNPI$Z5Mr&(lIcgHBY$~=fLPTYTgf7EYxcgmS!D>wcgA! zYqU#F^I1P=SejV3F450qFcG-Eueyu6hu2~G9 z?y$F$7Pdd7TGJQ9kf2Z)5btUpAIWZ8wTs+8J=9j$XSEa$L8lxtntRk zm+|KvmX{dtS!oksW{r7C*0GF!b(}5+eAWxvsA_ZfmGGSa`8j}as&&(|@ zEpb8BBt!5I__j|DSg*9KXiU8|d}KNcC(us`SRZRy(HPc&91aCk_SAs&GCfBOpuNC4 z+PQK|t@bp_Iw>W;encBhm_ds3e$@)h+`M({f%L9+sM^cQ?n4C3~e7&}#sMU_z-+$4@>)XUQ zrVVAygR`>hwHYgJxt$U#{+#pT^&R?r{E9}kT{5mMpBJakia%jRAEgZ|D#UBfwK)p` z>pR5;E2@`_NlUj0hnxBOFwUn<0gGFWjdXYU` zQNgdH)LWTy>@&o<8tX$NST`8XV@vh)P3;b+^DFB{hym2az;!V5}AXT{>N;*GF-wO9O_sNVoBD44E{97*8~1s_TqK7o&yVYb%9EA#MRp{_kpWn6n;p>co0E|w@(>_osy zeu5PxA7GVOmnIK4+Pfuxd}hGv=hqm&YJJwsRHhSRo)xg(AaCGTG$vlhTpq}9|4~jPH=kuko(syBw6J43#(tk?kfx)RGX$M|( zXlHOf*Yd*pL~UT9QDrMfVigPaJaPK0{&k?8U#sMSQ_b}UTpXmWyd0;C*C&e~zoKVq z!}N7Z$H0(bZLvoZ8ymR1^EofDzyB+w#K2EzqrHt9Mk!Wy+-2}kj+Q{10e`;G^1}Ml z+VCst;#Dt~Zf6Y~%5}HnTJ1#w@mW7%S%w70V_5q&{;FNG*y{sU zVgOb&X3j|c*yUWypx+R%-fvk^*XPz-N|!C27q@&wH%7rQ;*{+}0@@)y z`YW_qP(9VLQ*rhhMqSW1m99?^9uCeo2?~XkehXOWW3*vK1;6%9=VN`dIDJ;?S6I<& zwP8gC*8avM;giMQ60q|7!-~56T2x{^lxvx0?X3YTaSAKScrjK~W6kE*w*{=eUr#Zl zRavL9vA(?v>qDYgr)TYM$>kjZs~-br$FXMf>pKHhKL*Z;U>$1A%uQyRm48>j>gU&M zB3Szyv)S^%ySuQ)l&!u-zPjK&0jpmZ#ME2;jaIg@_1=KhFIzG3D%NZ<@V<1BD+9Sbe{q zWmzlvwUy7W-xIL<@fzdT4XqQc`joC$tMiVR?RQNj-y5*{dEh#GkfK5ijJ5kP&1Rwt z(ya4(C$63C`UU5Sk9I4nud!kjxHXJE%!qtC#ai7p-dpzNA#)d~_Pb$Z`+k8P)Kl*f z6Kw)ChBf!Kz&|V~cwv2?7;z!$)@A7B(m5;Vc-BV*vKp)NYbDlu^+hw;N4v1PdBaMq zM>B!yV?Wk~HD)YhXz6f$`OsVz;ExBa@3--a#>{PuZP~kZTYdk&OAt%P&fDB zI@wm&NX?z)u)_IC8v}2ZM=sKavhKxM*=v2}j)5QbVgN>dZuDFWT2!cGM~K&Yo;3tN zCQhIAUE+fkrG1F$Ev4H7rx;f9KsyH7pOEJ9#{<^4>tkU>V_5qZnrXnk%cuNAz{)j0 zVMSy5hB@yG@sk0oAFnst?^aZZfzjn7v#m^Z!A}LO{<#n_e$AO*KM}C{e!V`zuS3g= znX-V^HU+GH9*CLe-YC{QS)f+?nSk{j@+D;pjmZPU(~I@S{pqhgz)$RQ>(7b#p#IOf zMX;g|(uT1PzI2;#D&IZWXuJHZI9;32XN_6!GA6$+w8OxB&y#%^GFN$Se~RP$l=bVp zoO+I4LiJR~%C-rIxpsXc&p;9W{CUr>FzTOSy}^RF=p7Xwz`uf#4^RA9|HmhnpgtMAvCahIHJmtPK87i|onddZlybPNpS=@uG} zUkO;BVOi0b_CSBe>+Jt(z`A5v(HK_p>+z+O4K4TUuH=AE>nZB3Z)>BTLRa2Ze!X_? z{Q7Hxa`hIBa;agB$*(zc)~}0mHP)D%HEP!Erz>Fn=InAgPv$s3V`JcMJx8uW{TL|S zcFBBynBVYX07hZ}b?w)pLe6TRx3SWKJ=w90A#-(C!N?rv=d53u_@#Y?`ePYo+b;ci zh6Y5_E>oZN{K_aVenn&2+BwHvep8%2EB=HPjTv{zS;ziX!0P+;Eb(G`OX)gxgfaNZ zLvxMxu1Oz%J78sM0>7eejR4Eb0W@Y^M$UHD=f&x>o@rUpn0D4iVjyWf%POq4 zInF<@F>teR6feV15hr z=eNukc;K%8=YOyc@7jAOZv8(mCV1it0qZ6DO#F&ER@P~hWgXhRX!rY)cW;xa^gmzp?a!g zW!ta1uI_Zgr8%AB^9N<>%bs6hV7*juV4*I*R;dd%SXRll{hcqG=8wM!STEDZ z!ivVQjw~HpPSYc3f4_mw6&q@`zqG7hl~NacO5531{Wf9g{F-@gY-M=J?wwBlCSd(_eKdYWy_{9LF38#6`brm8*LKlcO0$l& zj_7vR=}OmdXXVw(@BeoKB3|#3Q|XPN>!r@hwh43hx&Kz2t}cL)7(iJEjTIIAx-LuY zYA|YF6Q|F5k7Y&4U09VE*s!d-?Pv{w35E9VC-pdF?qJ#e2*>%aHU`cUBXt()$3U;- z*ROjq0HgjHR{DonQ6UC$j=%oBIDOU&EGrt52Q;^#b#F%hVN+gz?QJ12Z_K6Np0g+3crG^TI3;dpa)xlzBb(VU%0;n+TJPX60AR{v8<*%}lm zR8#bmAn1=@0QoG;#XJ;ODZj0wsQ6j|3jQU>#!JMMPtg=kjAs7mQwus)={1i zr)Co~=j(8OncG~v!e07Z2wh4s^|_`F7ta5(G2mE@U-bs(*Mc|m-oWJl2U<{eH~BKUf=BsEgMs z1)f~Ps0#+?7Z)07jL7)6B)VhuX8bk%IwCpBn&ZT`uI%GiVw8Fo!>`8KXcseOtG;`8eP@?9oy1FHUcABz zr`w|9l?lW8{_%S&oHqed5}0)V`csrD=M&#Y}&G=zFXI!FngwbaQXE#F^}n^zgzp&lr(}qq)68$9{<@5TlB|7) zjiXPOSaY7Y@!)`!IE59BIVURTy0^0eRzC*Tix;cn*MWt}`CL(OcEI`}vEf&g z{sC50C|kp@X1d1qL%Ohf<5{Kiz_7*#a$SJnpmvi!hgnvXF*vLWYtEeYsDSk>%ZkRFbDA?}J-Q1kV+2@HA-|3+ z={ozF%2pAuQvUVNXDuu%>c$7E9@8K5#|A>c^{VyHv@qIosNg z4OpLS{ffH&R#7DeGL8>i*@e~hV=J*{93Qx<3v0~yKws;Sevv$Ob-+5Q!%()+n7Uw? z>klOB6;PL6-1*|J9(badsbl|28~p;*#en|onSQ~w;&gTF-@>I0jqz*Fv5f1)>9hWg zWkvOpu_`$$XB~Te!1{Nh!>?#e9Xl{Po$dayHw3I-v#h9_Gpgd(oPC%Z1JX^tdjpVl-BTHRl-7;{#UmDrF13+>q94MTPdj2-jB5 zG@kW@fb}clgB5jcmnwc8)cs+mj%epZ*4Lp}$*r5kOucopwo|RTHX(;CI|e^ouj|S= zb-HWGjr!_lak_fz799b|Oi&w^4hym1%Y3l2=pG3PDYe)?1#I{Xa zySy*^K&!1_qbipH=GQV+~(=R`Kpx$APRw#~Bc zk&<7pkW=~nQP8&-%5f&>k3DTxu*NT=25d+&R7t;_}s##Y}$PC(v814z%B5 z9?PzM%v~4k6{l+t?6-bJd#x_mCr+RB4$F%6T3v8^zVo|N z>p{zk#?%D^+)CUllPUi^5U`R5^v~pjOYDJ)3OOt1*xSK?)%U9#*RE1;qjqP&>c_yf5iyXnJ#bgR>if0V+5>k7tiE5}T8AoSYm~XTOzU&*30QBp zc>s0eSyfoamKx3Z*;Z?IaluB=$;m+bOgHl(u70hHnYPP?+PLlj>W>qaJtrz>&Z5oo z6mhz?3ykDflnpB?bJGa#%u1j_S3z1{Ub5rSG3pK+LPk+S-)gi(Ozq7 z9|~B%U|G?)w)SjOKT8&y3Ru5rSy9Gdu`2DXob7?>fc49k6^+RQ!@4e6rm47EBVeWc zQ?^j9qk|O{>H@AymZ>>Vn+aI`7>Mb^42w0FUk?YYzF!|^yjsn#qtpfSN0Y7288ss- zZ4j5QnqsEy^4ki4T~>RsE|?XkYrA|-ti&tYYjwfB;`CX6&$6PuRu>!%SbyKLqPrQXWfFIWgzeZO)&8mtOy&hdf8 zfR&u3eigBjYZbrRdP^tp@Qa+hjnrJP zZzZ=rTg=p3?~*^Sw(8egW!L89?!&ai>FTZb*cd>2t=?J|r_cI+%Zm0|y>%>L{eWdf zx;!qy>+Yl z+P7Kt>#bf{^Yk2Xx_WDu9Unk@t=@XBIDOW=mKE)_dh2-s>pshh#?@Q-#@?PEu-EuB zXrpdL{rp;bo;zbd7S7j-6LqY_0IV@Fkh7ijI&u1}%oW0l#^iya*?P9sWUmic89{^< zr5?i+x23O7m~&kF4FM~^y^DdEK6lQ0Exa*c_5B)?2TY%P>PWIacVFj9?<=wTRxwky zZq@c6t9~9R-RI7n2i`1Bmj_@a2GE#(LC!qz7IFHl%p1ds#^eDT1Ih*ZfCSd(teNVvpOnn#pipG?!{$u(4`rd%mkAax7W%>nEN1BU^%fT-g_g}v~;C}xP zikbGn-P&jmpnlovmG;2<#p&7uFcJf3uk{N)AWon4$(9w3iPv_1om*@*^Z^NMpmR6C z70wUY82AN!{%P9Km>B4r$(FLrZ~r}B48TYXpfUM%Ky|^A_RV46D^8#Fmvj(VQFkxK zD*df?3^W^)Y0`iwR>q1Q=SOS|{ES}Zw|A;Pjg@T^=4`uA{=d(Q0T}Ts8q+t-xsK?= z;#`e2CSJ|C5S)8#evOlV*l0#o+MnY%f7r&rEA%w&0MyR|W!qWnX4;>dZ(goNGuv9A=oAdfEZV40X0)OW;y8a=%*4Ri+VCgp*Rf?|U}$nG9jF+5~F{}ThK zo;KDi_0~@a$Y;f$u%a>7rpuXMe==ZwsAWZ6*{b5#VT}^!3WA>sSp67?Ij4UR&@|JV z^40_G69KCq12J{M`g(oW_~waC6L+V-P9?t zv=8fkUG=L30_!hGVI9*(8yod=)^{jyYZ$Eklg-0xye;}=I6rB5VdYzZg^p^&s+6sq zZS9{Gr_YK%VMX2AoT5q{oAFvSKi7rzJn>>h1=gJNu|FTMZV(%OMH$<~s>HzH(&WPI zRC~V^kA0mI-Y!?f>@SJ=27Nf?ia13btNtu~-N$vAaw`mQ{-QWh$BJKJJ%=~QiV87c z#xhzb781JFF!10w9jl)Q^xGRV8ICWohLN*$eV57U`qJ!DV~sbLe0j*+*}nZ|7}Kx#bXP}#$E;C*{1?l{OSC9y?tL%#jm+8J|LD~>%#iz2-X40mfbJ4{CdFZ$3RS5 zd!RM@%tR^R|9sU?cVQ(SuqyFt@@u-3rFzMYs;!i(&xskf?b

gTMo^M<*{ia#Sx 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"s":""); diff --git a/linux-0.11-lab/0/Source-Insight/Linux-0.11.WK3 b/linux-0.11-lab/0/Source-Insight/Linux-0.11.WK3 new file mode 100644 index 0000000000000000000000000000000000000000..83b8a91bcf60093c431c8bf17f52b9cdc811bb72 GIT binary patch literal 8851 zcmeHNU1%It6u!xtnA*~$Xr-XiX~mKsXS%y>wTU7LiNV&UjmC=9Tf^+^Bs*kwCd^Nh zNHH%WJ_tr%)Hh!O;vWHv7Hr6aFTp&hPb#}85ivdp6{-&+7{4=fr9)zRgG?RtEm05vc5+GbvNT<&w* z<)&fz<8oTbWMos#@iZT>eMi&fW0q?S7d(FA>iI1m%3F5%YvsY`|HEoNyN$6Q?_z8j zAd%4K;Pc=~;B{aMXuCT&9q`+s8XUhs|4A%n*B-{cM$aO64&&dwkFhJ@jbwRl^3?Km zayiyBIT>pRb>;k8ag5E`*snUC;Tg6id1}to+5Q)J^Yg0wVwZg8tkTL`n$b+l?Pr4n z+AT_J%zQ#ZlkJAniukVJ1g#6y4t$bcjC zR@lD;z7DSPI9l z-cPH|97$!<=~O12KG5C4PrI~*ecZQn-eYTiQMWu->|IM@@469JO4uQ;cxHB*jel7R zGKNXmd_?5F!nrOm=@hwPAP4;ea4$FuyaS!yq{$Cq9_UB^ESTPoX$*}&4Yq)fp*Mk_ z1;~Fl_%(q1Q?y@!PUHUsXkOAg!EXZO^E~(xPy;*;(D=*frym7SgEcjRqc`?f|0pqO z>HFYZ9|p|=^H^)=juQI^CF24x473B^!a)Og8vGD^JPM}Lu>iaU&|AJolR&Z|G5Ji# z^`8k`M+-Z7&bGba;Od&ExQei9scdCfhR4IlrcGEJsBF=vj_5;%si(#8wl#(;S-x^% zu_>yy2^NFLIIp7qmTvOcgRi)Uh4H~EjibfUuQ-zCjqDxRenDuPpV^!!WcB6ZRv#w1$ zi!SR);i-4io;=$&DeQ)sS2W~YkieA0QR2>wm)JZ&`F2F$==&vh@tHE)hc+cS$@Y*~ z{itJD-pEeT+~#=`gJX{2=}n?1UVNj8XtHR+emL)32q%0B{eQ9m=Svid9Z=Bb7QMLj7RH!n^7ZcDFEkY#pO2pW3A8 L(|=0vYl{BA4o;%1 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/Image b/linux-0.11-lab/0/linux/Image new file mode 100644 index 0000000000000000000000000000000000000000..9869a43badb77318312737429c1972e920db1e68 GIT binary patch literal 131556 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 Cri=yv literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/Image.bkp b/linux-0.11-lab/0/linux/Image.bkp new file mode 100644 index 0000000000000000000000000000000000000000..9869a43badb77318312737429c1972e920db1e68 GIT binary patch literal 131556 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

6)D{%45iSNSq&64CS|7De&pK!a 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 GefK}=>%zGJ literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/README b/linux-0.11-lab/4/README new file mode 100644 index 0000000..2e56a37 --- /dev/null +++ b/linux-0.11-lab/4/README @@ -0,0 +1,6 @@ +revision history: + +版本0: 这是oldlinux.org网站上的linux-0.11-lab.rar中的版本。可能是赵博士在原始0.11版本的基础上修改而成。我做了如下改动: + a) 对一些Makefile做了修改,生成调试信息; + b) 将其移植到ubuntu和debian下,主要修改的地方用 "by wyj"标注。 + diff --git a/linux-0.11-lab/4/Source-Insight/Linux-0.11.IAB b/linux-0.11-lab/4/Source-Insight/Linux-0.11.IAB new file mode 100644 index 0000000000000000000000000000000000000000..27c23b6e1f3379c54bfea8c6c805c76fa235fa7c GIT binary patch literal 102400 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 X+E}E5VH>Ng(M~HVI#}YIPA>QZN3SCK literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/Source-Insight/Linux-0.11.PO b/linux-0.11-lab/4/Source-Insight/Linux-0.11.PO new file mode 100644 index 0000000000000000000000000000000000000000..de8db453c6bceca6363a1974df88a64caed7c9e8 GIT binary patch literal 776 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 >LdwT?$NcJnp;7Il?Z10x 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 ZnP<(9Ox^sRyj^ZyQ^(&fr!Q^I{{xPUk!%0} literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/Source-Insight/Linux-0.11.PS b/linux-0.11-lab/4/Source-Insight/Linux-0.11.PS new file mode 100644 index 0000000000000000000000000000000000000000..2c515c4dd3f2da9176ef09bd338843664bd433cf GIT binary patch literal 623496 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

gTMo^M<*{ia#Sx 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"s":""); diff --git a/linux-0.11-lab/4/Source-Insight/Linux-0.11.WK3 b/linux-0.11-lab/4/Source-Insight/Linux-0.11.WK3 new file mode 100644 index 0000000000000000000000000000000000000000..83b8a91bcf60093c431c8bf17f52b9cdc811bb72 GIT binary patch literal 8851 zcmeHNU1%It6u!xtnA*~$Xr-XiX~mKsXS%y>wTU7LiNV&UjmC=9Tf^+^Bs*kwCd^Nh zNHH%WJ_tr%)Hh!O;vWHv7Hr6aFTp&hPb#}85ivdp6{-&+7{4=fr9)zRgG?RtEm05vc5+GbvNT<&w* z<)&fz<8oTbWMos#@iZT>eMi&fW0q?S7d(FA>iI1m%3F5%YvsY`|HEoNyN$6Q?_z8j zAd%4K;Pc=~;B{aMXuCT&9q`+s8XUhs|4A%n*B-{cM$aO64&&dwkFhJ@jbwRl^3?Km zayiyBIT>pRb>;k8ag5E`*snUC;Tg6id1}to+5Q)J^Yg0wVwZg8tkTL`n$b+l?Pr4n z+AT_J%zQ#ZlkJAniukVJ1g#6y4t$bcjC zR@lD;z7DSPI9l z-cPH|97$!<=~O12KG5C4PrI~*ecZQn-eYTiQMWu->|IM@@469JO4uQ;cxHB*jel7R zGKNXmd_?5F!nrOm=@hwPAP4;ea4$FuyaS!yq{$Cq9_UB^ESTPoX$*}&4Yq)fp*Mk_ z1;~Fl_%(q1Q?y@!PUHUsXkOAg!EXZO^E~(xPy;*;(D=*frym7SgEcjRqc`?f|0pqO z>HFYZ9|p|=^H^)=juQI^CF24x473B^!a)Og8vGD^JPM}Lu>iaU&|AJolR&Z|G5Ji# z^`8k`M+-Z7&bGba;Od&ExQei9scdCfhR4IlrcGEJsBF=vj_5;%si(#8wl#(;S-x^% zu_>yy2^NFLIIp7qmTvOcgRi)Uh4H~EjibfUuQ-zCjqDxRenDuPpV^!!WcB6ZRv#w1$ zi!SR);i-4io;=$&DeQ)sS2W~YkieA0QR2>wm)JZ&`F2F$==&vh@tHE)hc+cS$@Y*~ z{itJD-pEeT+~#=`gJX{2=}n?1UVNj8XtHR+emL)32q%0B{eQ9m=Svid9Z=Bb7QMLj7RH!n^7ZcDFEkY#pO2pW3A8 L(|=0vYl{BA4o;%1 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/Image b/linux-0.11-lab/4/linux/Image new file mode 100644 index 0000000000000000000000000000000000000000..8ffede23b83ea2dc10c43f12baca0e48e07900b7 GIT binary patch literal 137604 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

oByxYn50vl)+>wqiVb~R@IYk5^sk4*s7jSCg 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 C9%`5X literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/Image.bkp b/linux-0.11-lab/4/linux/Image.bkp new file mode 100644 index 0000000000000000000000000000000000000000..9869a43badb77318312737429c1972e920db1e68 GIT binary patch literal 131556 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

O!1>*+yNQ@-$a9x=0yJXJ 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 Y`I56}gjI7ZH}}mm /dev/null 2>&1 diff --git a/linux-0.11-lab/b/README b/linux-0.11-lab/b/README new file mode 100644 index 0000000..859a3a6 --- /dev/null +++ b/linux-0.11-lab/b/README @@ -0,0 +1,19 @@ +1.新的系统调用号定义在../include/unistd.h中。 + +2.为了在Linux 0.11中顺利进行make,需要在bochs虚拟机中对硬盘作一些调整,如下: +cd /bin +mv sh sh.old +ln bash sh + +3.编译 +编译所有文件: + make + +编译某个文件,如: + make execve2 + +4.测试 +make test + +4.清除中间文件 +make clean \ No newline at end of file diff --git a/linux-0.11-lab/b/a.out b/linux-0.11-lab/b/a.out new file mode 100644 index 0000000000000000000000000000000000000000..e0ff438349b0f6ac5a4910d86da6228af7c9e480 GIT binary patch literal 7399 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/b/clone.c b/linux-0.11-lab/b/clone.c new file mode 100644 index 0000000..a2cd72c --- /dev/null +++ b/linux-0.11-lab/b/clone.c @@ -0,0 +1,66 @@ +/* + * 测试成功时输出: + * "clone success." + * 测试失败时输出: + * "clone error." + */ +#define __LIBRARY__ +#include +#include +#include +#include +#include +#include +#include "new.h" + +int clone(int (*fn)(void *), void *child_stack, ...) +{ + register int res; + va_list arg; + + va_start(arg,child_stack); + __asm__("int $0x80" + :"=a" (res) + :"0" (__NR_open),"b" (fn),"c" (child_stack), + "d" (va_arg(arg,int))); + if (res>=0) + return res; + errno = -res; + return -1; +} + +size_t stack[1024] = {0}; +static int child_pid; +int g_shared = 0; + +static int child_func(void * arg){ + g_shared = 1; + printf(" Child says hello.\n"); + return 0; +} + +void test_clone(void){ + int wstatus, ret; + child_pid = clone(child_func, stack+1024, SIGCHLD|CLONE_VM); + assert(child_pid != -1); + + if (child_pid == 0){ + exit(0); + } + printf("child pid: %d\n", child_pid); + + ret = wait(&wstatus); + if(ret == child_pid) { + if (g_shared == 1) { + printf("clone success.\n"); + } + } + else { + printf("clone error.\n"); + } +} + +int main(void){ + test_clone(); + return 0; +} diff --git a/linux-0.11-lab/b/echo.c b/linux-0.11-lab/b/echo.c new file mode 100644 index 0000000..23670e5 --- /dev/null +++ b/linux-0.11-lab/b/echo.c @@ -0,0 +1,12 @@ +#include +#include +#include + +int main(int argc, char **argv) +{ + if (argc == 1) + return EXIT_FAILURE; + + write(1, argv[1], strlen(argv[1])); + return EXIT_SUCCESS; +} diff --git a/linux-0.11-lab/b/execve.c b/linux-0.11-lab/b/execve.c new file mode 100644 index 0000000..ee04556 --- /dev/null +++ b/linux-0.11-lab/b/execve.c @@ -0,0 +1,21 @@ +/* + * 测试成功则输出: + * "I am test_echo." + * 测试失败则输出: + * "execve error." + */ +#include +#include +#include + +void test_execve(void){ + char *argv[] = {"./echo", "I am test_echo.\n", NULL}; + char *env[] = {NULL}; + execve("./echo", argv, env); + printf("execve error.\n"); +} + +int main(void){ + test_execve(); + return 0; +} diff --git a/linux-0.11-lab/b/execve2.c b/linux-0.11-lab/b/execve2.c new file mode 100644 index 0000000..31dc08c --- /dev/null +++ b/linux-0.11-lab/b/execve2.c @@ -0,0 +1,24 @@ +/* + * 测试成功则输出: + * "I am test_echo." + * 测试失败则输出: + * "execve2 error." + */ +#define __LIBRARY__ +#include +#include +#include + +_syscall3(int,execve2,const char *,file,char **,argv,char **,envp) + +void test_execve2(void){ + char *argv[] = {"echo", "I am test_echo.\n", NULL}; + char *env[] = {NULL}; + execve2("echo", argv, env); + printf("execve2 error.\n"); +} + +int main(void){ + test_execve2(); + return 0; +} diff --git a/linux-0.11-lab/b/execve2.patch b/linux-0.11-lab/b/execve2.patch new file mode 100644 index 0000000..7d99d4f --- /dev/null +++ b/linux-0.11-lab/b/execve2.patch @@ -0,0 +1,41 @@ +diff -Naur 0/linux/init/main.c 4/linux/init/main.c +--- 0/linux/init/main.c 2016-08-08 09:40:13.000000000 +0800 ++++ 4/linux/init/main.c 2021-07-06 14:16:56.000000000 +0800 +@@ -208,3 +208,9 @@ + } + _exit(0); /* NOTE! _exit, not exit() */ + } ++ ++void print_nr(int sid) ++{ ++ if (sid > 86) ++ printk(" --syscall: sid=%d, pid=%d\n", sid, current->pid); ++} +diff -Naur 0/linux/kernel/system_call.s 4/linux/kernel/system_call.s +--- 0/linux/kernel/system_call.s 2015-09-03 20:21:09.000000000 +0800 ++++ 4/linux/kernel/system_call.s 2021-07-06 14:18:56.000000000 +0800 +@@ -91,6 +91,11 @@ + mov %dx,%es + movl $0x17,%edx # fs points to local data space + mov %dx,%fs ++ ++ pushl %eax #by wyj ++ call print_nr ++ popl %eax ++ + call sys_call_table(,%eax,4) + pushl %eax + movl current,%eax +diff -Naur 0/linux/mm/memory.c 4/linux/mm/memory.c +--- 0/linux/mm/memory.c 2015-09-04 15:24:20.000000000 +0800 ++++ 4/linux/mm/memory.c 2021-07-06 14:21:45.000000000 +0800 +@@ -370,6 +370,9 @@ + unsigned long page; + int block,i; + ++ if (current->pid > 5) ++ printk(" --do_no_page: address=%x, pid=%d\n", address, current->pid); ++ + address &= 0xfffff000; + tmp = address - current->start_code; + if (!current->executable || tmp >= current->end_data) { diff --git a/linux-0.11-lab/b/getcwd.c b/linux-0.11-lab/b/getcwd.c new file mode 100644 index 0000000..4d01263 --- /dev/null +++ b/linux-0.11-lab/b/getcwd.c @@ -0,0 +1,39 @@ +/* + * 测试通过时输出: + * "getcwd OK." + * 测试失败时输出: + * "getcwd ERROR." + */ +#define __LIBRARY__ +#include +#include +#include +#include + +char * getcwd(char * buf, size_t size) +{ + long __res; + __asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_getcwd),"b" ((long)(buf)),"c" ((long)(size))); \ + if (__res > 0) + return (char *) __res; + errno = -__res; + return NULL; +} + +void test_getcwd(void){ + char *cwd = NULL; + char buf[128] = {0}; + cwd = getcwd(buf, 128); + if(cwd != NULL) { + printf("current dir: %s\n", buf); + printf("getcwd OK.\n"); + } + else printf("getcwd ERROR.\n"); +} + +int main(void){ + test_getcwd(); + return 0; +} diff --git a/linux-0.11-lab/b/getdents.c b/linux-0.11-lab/b/getdents.c new file mode 100644 index 0000000..0dd9737 --- /dev/null +++ b/linux-0.11-lab/b/getdents.c @@ -0,0 +1,42 @@ +/* + * 成功测试时的输出: + * "getdents success." + */ +#define __LIBRARY__ +#include +#include +#include +#include +#include +#include +#include "new.h" + +_syscall3(int,getdents,int,fd,struct linux_dirent *,dirp,unsigned long,len) + +char buf[700]; +void test_getdents(void){ + int fd, nread, bpos, times = 0; + struct linux_dirent *dirp, *tmp; + dirp = (struct linux_dirent *)buf; + fd = open(".", O_RDONLY); + printf("open fd: %d\n", fd); + + nread = getdents(fd, dirp, 512); + printf("getdents fd: %d\n", nread); + assert(nread != -1); + for(bpos = 0; bpos < nread && times < 20;++times){ + tmp = (struct linux_dirent *)(buf + bpos); + printf( "%s\t", tmp->d_name); + bpos += tmp->d_reclen; + + } + printf("\n"); + + printf("getdents success.\n"); + close(fd); +} + +int main(void){ + test_getdents(); + return 0; +} diff --git a/linux-0.11-lab/b/mmap.c b/linux-0.11-lab/b/mmap.c new file mode 100644 index 0000000..5ac36eb --- /dev/null +++ b/linux-0.11-lab/b/mmap.c @@ -0,0 +1,62 @@ +/* + * 测试成功时输出: + * " Hello, mmap success." + * 测试失败时输出: + * "mmap error." + */ +#define __LIBRARY__ +#include +#include +#include +#include +#include +#include +#include +#include +#include "new.h" + +_syscall2(int,munmap,void *,addr,size_t,length) + +void *mmap(void *addr, size_t length, ...) +{ + register int res; + va_list arg; + + va_start(arg,length); + __asm__("int $0x80" + :"=a" (res) + :"0" (__NR_open),"b" (addr),"c" (length), + "d" (va_arg(arg,int))); + if (res>=0) + return (void *)res; + errno = -res; + return (void *)-1; +} + +static struct stat kst; +void test_mmap(void){ + char *array; + const char *str = " Hello, mmap success."; + int fd; + + fd = open("test_mmap.txt", O_RDWR | O_CREAT, S_IRUSR|S_IWUSR); + write(fd, str, strlen(str)); + fstat(fd, &kst); + printf("file len: %d\n", (int)kst.st_size); + array = mmap(NULL, kst.st_size, PROT_WRITE | PROT_READ, MAP_FILE | MAP_SHARED, fd, 0); + printf("mmap addr: %x\n", (unsigned int)array); + + if (array == MAP_FAILED) { + printf("mmap error.\n"); + }else{ + printf("mmap content: %s\n", array); + munmap(array, kst.st_size); + } + + close(fd); +} + +int main(void){ + test_mmap(); + return 0; +} diff --git a/linux-0.11-lab/b/munmap.c b/linux-0.11-lab/b/munmap.c new file mode 100644 index 0000000..ddda571 --- /dev/null +++ b/linux-0.11-lab/b/munmap.c @@ -0,0 +1,70 @@ +/* + * 测试成功时输出: + * "munmap success." + * 测试失败时输出: + * "munmap error." + */ +#define __LIBRARY__ +#include +#include +#include +#include +#include +#include +#include +#include +#include "new.h" + +_syscall2(int,munmap,void *,addr,size_t,length) + +void *mmap(void *addr, size_t length, ...) +{ + register int res; + va_list arg; + + va_start(arg,length); + __asm__("int $0x80" + :"=a" (res) + :"0" (__NR_open),"b" (addr),"c" (length), + "d" (va_arg(arg,int))); + if (res>=0) + return (void *)res; + errno = -res; + return (void *)-1; +} + +static struct stat kst; +void test_unmmap(void){ + char *array; + const char *str = " Hello, mmap success."; + int fd, ret; + + fd = open("test_mmap.txt", O_RDWR | O_CREAT, S_IRUSR|S_IWUSR); + write(fd, str, strlen(str)); + fstat(fd, &kst); + printf("file len: %d\n", (int)kst.st_size); + array = mmap(NULL, kst.st_size, PROT_WRITE | PROT_READ, MAP_FILE | MAP_SHARED, fd, 0); + printf("mmap addr: %x\n", (unsigned int)array); + + if (array == MAP_FAILED) { + printf("mmap error.\n"); + }else{ + printf("mmap content: %s\n", array); + + ret = munmap(array, kst.st_size); + printf("munmap return: %d\n", ret); + + if (ret == 0) { + printf("munmap success.\n"); + } else { + printf("munmap error.\n"); + } + } + + close(fd); +} + +int main(void){ + test_unmmap(); + return 0; +} diff --git a/linux-0.11-lab/b/mytest.c b/linux-0.11-lab/b/mytest.c new file mode 100644 index 0000000..923a27e --- /dev/null +++ b/linux-0.11-lab/b/mytest.c @@ -0,0 +1,121 @@ +#include +#include +#include +#include +#include +#include + +#define BUF_MAX 4096 +#define CWD_BUF_SIZE 512 + + +int my_strlen(const char* Src){ + int len = 0; + int i = 0; + for(; Src[i]; ++i){ + ++len; + } + return len; +} + +void my_strcat(char* src, const char* dst){ + int len = my_strlen(src); + int i; + for(i = len; dst[i - len]; ++i){ + src[i] = dst[i - len]; + } + src[i] = '\0'; +} +int get_subentry(const char* dir, char* cwdbuf, char** subentry){ + int i, num_file = 0, read_num; + int fd = open(dir, O_RDONLY); + if(fd == -1){ + return -1; + } + for(i = 0; i < CWD_BUF_SIZE; ++i){ + cwdbuf[i] = '\0'; + } + read_num = read(fd, cwdbuf, CWD_BUF_SIZE); + if(read_num == -1){ + return -1; + } + close(fd); + for(i = 0; i < CWD_BUF_SIZE; ){ + if((cwdbuf[i] == '.') || (cwdbuf[i] >= 'a' && cwdbuf[i] <= 'z') || (cwdbuf[i] >= 'A' && cwdbuf[i] <= 'Z')){ + subentry[num_file++] = cwdbuf + i; + while(i + +struct linux_dirent { + long d_ino; + off_t d_off; + unsigned short d_reclen; + char d_name[14]; +}; + +/* Return value of `mmap' in case of an error. */ +#define MAP_FAILED ((void *) -1) + +#define PROT_READ 0x1 /* page can be read */ +#define PROT_WRITE 0x2 /* page can be written */ +#define PROT_EXEC 0x4 /* page can be executed */ +#define PROT_SEM 0x8 /* page may be used for atomic ops */ +#define PROT_NONE 0x0 /* page can not be accessed */ + +/* compatibility flags */ +#define MAP_FILE 0 + +#define MAP_SHARED 0x01 /* Share changes */ +#define MAP_PRIVATE 0x02 /* Changes are private */ + +#define CLONE_VM 0x00000100 /* set if VM shared between processes */ + +#endif diff --git a/linux-0.11-lab/b/oscomp_syscalls.md b/linux-0.11-lab/b/oscomp_syscalls.md new file mode 100644 index 0000000..3455e8e --- /dev/null +++ b/linux-0.11-lab/b/oscomp_syscalls.md @@ -0,0 +1,109 @@ +# 系统调用的说明以及调用方式 +系统调用号存放在eax寄存器中, 参数一般不超过3个,分别储存在ebx、ecx、edx寄存器中。 +返回值保存在eax中。 + +主要参考了Linux 5.10 syscalls,详细请参见:https://man7.org/linux/man-pages/man2/syscalls.2.html ;也可以在实验用的Ubuntu虚拟机中用man命令查看,如man getdents。 + +## 系统调用execve2 +``` +#define __NR_execve2 87 +int execve2(const char *path, char * argv[], char * envp[]); +``` +* 功能:以立即加载方式执行一个指定的程序。此系统调用结束后,进程运行时不应再发生代码段和数据段中的缺页故障。 +* 输入: + - path: 待执行程序路径名称, + - argv: 程序的参数, + - envp: 环境变量的数组指针 +* 返回值:成功不返回,失败返回-1; + +## 系统调用getdents +``` +#define __NR_getdents 88 +int getdents(unsigned int fd, struct linux_dirent *dirp, unsigned int count); +``` +* 功能:获取目录的目录项。 +* 输入: + - fd:所要读取目录的文件描述符。 + - dirp:一个缓存区,用于保存所读取目录的信息。缓存区的结构如下: +``` + struct linux_dirent { + long d_ino; + off_t d_off; + unsigned short d_reclen; + char d_name[]; +}; +``` + - count:dirp的大小。 +* 返回值:成功执行,返回读取的字节数。当到目录结尾,则返回0。失败,则返回-1。 + +## 系统调用pipe2 +``` +#define __NR_pipe2 89 +int pipe2(int fd[2], int flags); +``` +* 功能:创建管道; +* 输入: + - fd[2]: 用于保存2个文件描述符。其中,fd[0]为管道的读出端,fd[1]为管道的写入端。 + - flags: 标志;如果为0,则pipe2的行为与系统调用pipe相同。 +*返回值:成功执行,返回0。失败,返回-1。 + +## 系统调用sleep +``` +#define __NR_sleep 90 +int sleep(unsigned int seconds); +``` +* 功能:执行进程睡眠; +* 输入:睡眠的时间间隔; + - seconds: 秒 +* 返回值:成功返回0,失败返回-1; + +## 系统调用getcwd +``` +#define __NR_getcwd 91 +long getcwd(char * buf, size_t size); +``` +* 功能:获取当前工作目录; +* 输入: + - char *buf:一块缓存区,用于保存当前工作目录的字符串。当buf设为NULL,由系统来分配缓存区。 + - size:buf缓存区的大小。 +* 返回值:成功执行,则返回当前工作目录的字符串的指针。失败,则返回NULL。 + +## 系统调用mmap +``` +#define __NR_mmap 92 +long mmap(void *start, size_t len, int prot, int flags, + int fd, off_t off); +``` +* 功能:将文件或设备映射到内存中; +* 输入: + - start: 映射起始位置 + - len: 长度 + - prot: 映射的内存保护方式,可取:PROT_EXEC, PROT_READ, PROT_WRITE, PROT_NONE + - flags: 映射是否与其他进程共享的标志,可取:MAP_FILE, MAP_SHARED, MAP_PRIVATE + - fd: 文件句柄 + - off: 文件偏移量 +* 返回值:成功返回已映射区域的指针,失败返回-1; + +## 系统调用munmap +``` +#define __NR_munmap 93 +int munmap(void * start, size_t len); +``` +* 功能:将文件或设备取消映射到内存中; +* 输入: + - start: 映射的指定地址 + - len: 区间长度 +* 返回值:成功返回0,失败返回-1; + +## 系统调用clone +``` +#define __NR_clone 94 +int clone(int (*fn)(void *), void *child_stack, int flags, void *arg); +``` +* 功能:创建一个子进程; +* 输入: + - fn: 子进程的主函数 + - child_stack: 指定新进程的栈,可为0。 + - flags: 创建的标志,如SIGCHLD、CLONE_VM,其中CLONE_VM表示子进程共享父进程的地址空间(除栈以外)。 + - arg: 主函数的参数 +* 返回值:成功则返回子进程的线程ID,失败返回-1; diff --git a/linux-0.11-lab/b/pipe.c b/linux-0.11-lab/b/pipe.c new file mode 100644 index 0000000..67ba669 --- /dev/null +++ b/linux-0.11-lab/b/pipe.c @@ -0,0 +1,44 @@ +/* + * 成功测试时的输出: + * " Write to pipe successfully." + */ +#define __LIBRARY__ +#include +#include +#include +#include +#include + +_syscall2(int,pipe2,int *,pipefd,int,flags) + +static int fd[2]; + +void test_pipe(void){ + int cpid; + char buf[128] = {0}; + const char *data = " Write to pipe successfully.\n"; + + int ret = pipe2(fd, 0); + assert(ret != -1); + + cpid = fork(); + printf("cpid: %d\n", cpid); + if(cpid > 0){ + close(fd[1]); + while(read(fd[0], buf, 1) > 0) + write(STDOUT_FILENO, buf, 1); + write(STDOUT_FILENO, "\n", 1); + close(fd[0]); + wait(NULL); + }else{ + close(fd[0]); + write(fd[1], data, strlen(data)); + close(fd[1]); + exit(0); + } +} + +int main(void){ + test_pipe(); + return 0; +} diff --git a/linux-0.11-lab/b/sleep.c b/linux-0.11-lab/b/sleep.c new file mode 100644 index 0000000..8e27cb9 --- /dev/null +++ b/linux-0.11-lab/b/sleep.c @@ -0,0 +1,38 @@ +/* + * 测试通过时的输出: + * "sleep success." + * 测试失败时的输出: + * "sleep error." + */ +#define __LIBRARY__ +#include +#include +#include +#include + +_syscall1(unsigned int,sleep,unsigned int,seconds) + +void test_sleep() { + time_t time1, time2; + int ret; + time(&time1); + assert(time1 >= 0); + ret = sleep(1); + assert(ret == 0); + time(&time2); + assert(time2 >= 0); + if(ret == 10){ + printf("OK\n"); + } + if(time2 - time1 >= 1){ + printf("time passwd: %d\n", time2-time1); + printf("sleep success.\n"); + }else{ + printf("sleep error.\n"); + } +} + +int main(void) { + test_sleep(); + return 0; +} diff --git a/linux-0.11-lab/b/unistd.h b/linux-0.11-lab/b/unistd.h new file mode 100644 index 0000000..3f0fa89 --- /dev/null +++ b/linux-0.11-lab/b/unistd.h @@ -0,0 +1,277 @@ +#ifndef _UNISTD_H +#define _UNISTD_H + +/* ok, this may be a joke, but I'm working on it */ +#define _POSIX_VERSION 198808L + +#define _POSIX_CHOWN_RESTRICTED /* only root can do a chown (I think..) */ +#define _POSIX_NO_TRUNC /* no pathname truncation (but see in kernel) */ +#define _POSIX_VDISABLE '\0' /* character to disable things like ^C */ +/*#define _POSIX_SAVED_IDS */ /* we'll get to this yet */ +/*#define _POSIX_JOB_CONTROL */ /* we aren't there quite yet. Soon hopefully */ + +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#define STDERR_FILENO 2 + +#ifndef NULL +#define NULL ((void *)0) +#endif + +/* access */ +#define F_OK 0 +#define X_OK 1 +#define W_OK 2 +#define R_OK 4 + +/* lseek */ +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + +/* _SC stands for System Configuration. We don't use them much */ +#define _SC_ARG_MAX 1 +#define _SC_CHILD_MAX 2 +#define _SC_CLOCKS_PER_SEC 3 +#define _SC_NGROUPS_MAX 4 +#define _SC_OPEN_MAX 5 +#define _SC_JOB_CONTROL 6 +#define _SC_SAVED_IDS 7 +#define _SC_VERSION 8 + +/* more (possibly) configurable things - now pathnames */ +#define _PC_LINK_MAX 1 +#define _PC_MAX_CANON 2 +#define _PC_MAX_INPUT 3 +#define _PC_NAME_MAX 4 +#define _PC_PATH_MAX 5 +#define _PC_PIPE_BUF 6 +#define _PC_NO_TRUNC 7 +#define _PC_VDISABLE 8 +#define _PC_CHOWN_RESTRICTED 9 + +#include +#include +#include +#include + +#ifdef __LIBRARY__ + +#define __NR_setup 0 /* used only by init, to get system going */ +#define __NR_exit 1 +#define __NR_fork 2 +#define __NR_read 3 +#define __NR_write 4 +#define __NR_open 5 +#define __NR_close 6 +#define __NR_waitpid 7 +#define __NR_creat 8 +#define __NR_link 9 +#define __NR_unlink 10 +#define __NR_execve 11 +#define __NR_chdir 12 +#define __NR_time 13 +#define __NR_mknod 14 +#define __NR_chmod 15 +#define __NR_chown 16 +#define __NR_break 17 +#define __NR_stat 18 +#define __NR_lseek 19 +#define __NR_getpid 20 +#define __NR_mount 21 +#define __NR_umount 22 +#define __NR_setuid 23 +#define __NR_getuid 24 +#define __NR_stime 25 +#define __NR_ptrace 26 +#define __NR_alarm 27 +#define __NR_fstat 28 +#define __NR_pause 29 +#define __NR_utime 30 +#define __NR_stty 31 +#define __NR_gtty 32 +#define __NR_access 33 +#define __NR_nice 34 +#define __NR_ftime 35 +#define __NR_sync 36 +#define __NR_kill 37 +#define __NR_rename 38 +#define __NR_mkdir 39 +#define __NR_rmdir 40 +#define __NR_dup 41 +#define __NR_pipe 42 +#define __NR_times 43 +#define __NR_prof 44 +#define __NR_brk 45 +#define __NR_setgid 46 +#define __NR_getgid 47 +#define __NR_signal 48 +#define __NR_geteuid 49 +#define __NR_getegid 50 +#define __NR_acct 51 +#define __NR_phys 52 +#define __NR_lock 53 +#define __NR_ioctl 54 +#define __NR_fcntl 55 +#define __NR_mpx 56 +#define __NR_setpgid 57 +#define __NR_ulimit 58 +#define __NR_uname 59 +#define __NR_umask 60 +#define __NR_chroot 61 +#define __NR_ustat 62 +#define __NR_dup2 63 +#define __NR_getppid 64 +#define __NR_getpgrp 65 +#define __NR_setsid 66 +#define __NR_sigaction 67 +#define __NR_sgetmask 68 +#define __NR_ssetmask 69 +#define __NR_setreuid 70 +#define __NR_setregid 71 +#define __NR_sigsuspend 72 +#define __NR_sigpending 73 +#define __NR_sethostname 74 +#define __NR_setrlimit 75 +#define __NR_getrlimit 76 +#define __NR_getrusage 77 +#define __NR_gettimeofday 78 +#define __NR_settimeofday 79 +#define __NR_getgroups 80 +#define __NR_setgroups 81 +#define __NR_select 82 +#define __NR_symlink 83 +#define __NR_lstat 84 +#define __NR_readlink 85 +#define __NR_uselib 86 +#define __NR_execve2 87 +#define __NR_getdents 88 +#define __NR_pipe2 89 +#define __NR_sleep 90 +#define __NR_getcwd 91 +#define __NR_mmap 92 +#define __NR_munmap 93 +#define __NR_clone 94 +#define _syscall0(type,name) \ +type name(void) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name)); \ +if (__res >= 0) \ + return (type) __res; \ +errno = -__res; \ +return -1; \ +} + +#define _syscall1(type,name,atype,a) \ +type name(atype a) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(a))); \ +if (__res >= 0) \ + return (type) __res; \ +errno = -__res; \ +return -1; \ +} + +#define _syscall2(type,name,atype,a,btype,b) \ +type name(atype a,btype b) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(a)),"c" ((long)(b))); \ +if (__res >= 0) \ + return (type) __res; \ +errno = -__res; \ +return -1; \ +} + +#define _syscall3(type,name,atype,a,btype,b,ctype,c) \ +type name(atype a,btype b,ctype c) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(a)),"c" ((long)(b)),"d" ((long)(c))); \ +if (__res>=0) \ + return (type) __res; \ +errno=-__res; \ +return -1; \ +} + +#endif /* __LIBRARY__ */ + +extern int errno; + +int access(const char * filename, mode_t mode); +int acct(const char * filename); +int alarm(int sec); +int brk(void * end_data_segment); +void * sbrk(ptrdiff_t increment); +int chdir(const char * filename); +int chmod(const char * filename, mode_t mode); +int chown(const char * filename, uid_t owner, gid_t group); +int chroot(const char * filename); +int close(int fildes); +int creat(const char * filename, mode_t mode); +int dup(int fildes); +int execve(const char * filename, char ** argv, char ** envp); +int execv(const char * pathname, char ** argv); +int execvp(const char * file, char ** argv); +int execl(const char * pathname, char * arg0, ...); +int execlp(const char * file, char * arg0, ...); +int execle(const char * pathname, char * arg0, ...); +volatile void exit(int status); +volatile void _exit(int status); +int fcntl(int fildes, int cmd, ...); +int fork(void); +int getpid(void); +int getuid(void); +int geteuid(void); +int getgid(void); +int getegid(void); +int ioctl(int fildes, int cmd, ...); +int kill(pid_t pid, int signal); +int link(const char * filename1, const char * filename2); +int lseek(int fildes, off_t offset, int origin); +int mknod(const char * filename, mode_t mode, dev_t dev); +int mount(const char * specialfile, const char * dir, int rwflag); +int nice(int val); +int open(const char * filename, int flag, ...); +int pause(void); +int pipe(int * fildes); +int read(int fildes, char * buf, off_t count); +int setpgrp(void); +int setpgid(pid_t pid,pid_t pgid); +int setuid(uid_t uid); +int setgid(gid_t gid); +void (*signal(int sig, void (*fn)(int)))(int); +int stat(const char * filename, struct stat * stat_buf); +int fstat(int fildes, struct stat * stat_buf); +int stime(time_t * tptr); +int sync(void); +time_t time(time_t * tloc); +time_t times(struct tms * tbuf); +int ulimit(int cmd, long limit); +mode_t umask(mode_t mask); +int umount(const char * specialfile); +int uname(struct utsname * name); +int unlink(const char * filename); +int ustat(dev_t dev, struct ustat * ubuf); +int utime(const char * filename, struct utimbuf * times); +pid_t waitpid(pid_t pid,int * wait_stat,int options); +pid_t wait(int * wait_stat); +int write(int fildes, const char * buf, off_t count); +int dup2(int oldfd, int newfd); +int getppid(void); +pid_t getpgrp(void); +pid_t setsid(void); + +#define __always_inline inline __attribute__((always_inline)) + +#endif diff --git a/linux-0.11-lab/bochsout.txt b/linux-0.11-lab/bochsout.txt new file mode 100644 index 0000000..98e5d48 --- /dev/null +++ b/linux-0.11-lab/bochsout.txt @@ -0,0 +1,314 @@ +00000000000i[ ] Bochs x86 Emulator 2.6.9 +00000000000i[ ] Built from SVN snapshot on April 9, 2017 +00000000000i[ ] Compiled on Apr 24 2020 at 16:28:27 +00000000000i[ ] System configuration +00000000000i[ ] processors: 1 (cores=1, HT threads=1) +00000000000i[ ] A20 line support: yes +00000000000i[ ] IPS is set to 15000000 +00000000000i[ ] CPU configuration +00000000000i[ ] SMP support: no +00000000000i[ ] level: 6 +00000000000i[ ] APIC support: xapic +00000000000i[ ] FPU support: yes +00000000000i[ ] MMX support: yes +00000000000i[ ] 3dnow! support: no +00000000000i[ ] SEP support: yes +00000000000i[ ] SIMD support: sse2 +00000000000i[ ] XSAVE support: no +00000000000i[ ] AES support: no +00000000000i[ ] SHA support: no +00000000000i[ ] MOVBE support: no +00000000000i[ ] ADX support: no +00000000000i[ ] x86-64 support: no +00000000000i[ ] MWAIT support: yes +00000000000i[ ] Optimization configuration +00000000000i[ ] RepeatSpeedups support: no +00000000000i[ ] Fast function calls: no +00000000000i[ ] Handlers Chaining speedups: no +00000000000i[ ] Devices configuration +00000000000i[ ] PCI support: i440FX i430FX +00000000000i[ ] Networking: no +00000000000i[ ] Sound support: no +00000000000i[ ] USB support: no +00000000000i[ ] VGA extension support: vbe +00000000000i[MEM0 ] allocated memory at 0xb58b7008. after alignment, vector=0xb58b8000 +00000000000i[MEM0 ] 16.00MB +00000000000i[MEM0 ] mem block size = 0x00020000, blocks=128 +00000000000i[MEM0 ] rom at 0xfffe0000/131072 ('/usr/local/share/bochs/BIOS-bochs-latest') +00000000000i[STIMER] using 'slowdown' timer synchronization method +00000000000i[PLUGIN] init_dev of 'pci' plugin device by virtual method +00000000000i[DEV ] i440FX PMC present at device 0, function 0 +00000000000i[PLUGIN] init_dev of 'pci2isa' plugin device by virtual method +00000000000i[DEV ] PIIX3 PCI-to-ISA bridge present at device 1, function 0 +00000000000i[PLUGIN] init_dev of 'cmos' plugin device by virtual method +00000000000i[CMOS ] Using local time for initial clock +00000000000i[CMOS ] Setting initial clock to: Thu Jul 8 16:27:23 2021 (time0=1625758043) +00000000000i[PLUGIN] init_dev of 'dma' plugin device by virtual method +00000000000i[DMA ] channel 4 used by cascade +00000000000i[PLUGIN] init_dev of 'pic' plugin device by virtual method +00000000000i[PLUGIN] init_dev of 'pit' plugin device by virtual method +00000000000i[PLUGIN] init_dev of 'vga' plugin device by virtual method +00000000000i[MEM0 ] Register memory access handlers: 0x0000000a0000 - 0x0000000bffff +00000000000i[VGA ] interval=66666, mode=realtime +00000000000i[MEM0 ] Register memory access handlers: 0x0000e0000000 - 0x0000e0ffffff +00000000000i[BXVGA ] VBE Bochs Display Extension Enabled +00000000000i[XGUI ] test_alloc_colors: 16 colors available out of 16 colors tried +00000000000i[XGUI ] font 8 wide x 16 high, display depth = 24 +00000000000i[MEM0 ] rom at 0xc0000/41472 ('/usr/local/share/bochs/VGABIOS-lgpl-latest') +00000000000i[PLUGIN] init_dev of 'floppy' plugin device by virtual method +00000000000i[DMA ] channel 2 used by Floppy Drive +00000000000i[FLOPPY] fd0: 'cur/linux/Image' ro=0, h=2,t=80,spt=18 +00000000000i[IMG ] redolog : Standard Header : magic='Bochs Virtual HD Image', type='Redolog', subtype='Volatile', version = 2.0 +00000000000i[IMG ] redolog : Specific Header : #entries=512, bitmap size=1, exent size = 4096 disk size = 1474560 +00000000000i[IMG ] 'vvfat' disk opened: directory is 'b/', redolog is 'b//vvfat.dir.SVRF2m' +00000000000i[FLOPPY] fd1: 'vvfat:b/' ro=0, h=2,t=80,spt=18 +00000000000i[FLOPPY] Using boot sequence floppy, none, none +00000000000i[FLOPPY] Floppy boot signature check is enabled +00000000000i[PLUGIN] init_dev of 'acpi' plugin device by virtual method +00000000000i[DEV ] ACPI Controller present at device 1, function 3 +00000000000i[PLUGIN] init_dev of 'ioapic' plugin device by virtual method +00000000000i[IOAPIC] initializing I/O APIC +00000000000i[MEM0 ] Register memory access handlers: 0x0000fec00000 - 0x0000fec00fff +00000000000i[IOAPIC] IOAPIC enabled (base address = 0xfec00000) +00000000000i[PLUGIN] init_dev of 'keyboard' plugin device by virtual method +00000000000i[KBD ] will paste characters every 400 keyboard ticks +00000000000i[PLUGIN] init_dev of 'harddrv' plugin device by virtual method +00000000000i[HD ] HD on ata0-0: 'images/rootimage-0.11', 'flat' mode +00000000000i[IMG ] hd_size: 10485760 +00000000000i[HD ] ata0-0: using specified geometry: CHS=512/2/20 +00000000000i[HD ] translation on ata0-0 set to 'none' +00000000000i[PLUGIN] init_dev of 'pci_ide' plugin device by virtual method +00000000000i[DEV ] PIIX3 PCI IDE controller present at device 1, function 1 +00000000000i[PLUGIN] init_dev of 'unmapped' plugin device by virtual method +00000000000i[PLUGIN] init_dev of 'biosdev' plugin device by virtual method +00000000000i[PLUGIN] init_dev of 'speaker' plugin device by virtual method +00000000000e[PCSPK ] Failed to open /dev/console: 权限不够 +00000000000e[PCSPK ] Deactivating beep on console +00000000000i[PLUGIN] init_dev of 'extfpuirq' plugin device by virtual method +00000000000i[PLUGIN] init_dev of 'parallel' plugin device by virtual method +00000000000i[PAR ] parallel port 1 at 0x0378 irq 7 +00000000000i[PLUGIN] init_dev of 'serial' plugin device by virtual method +00000000000i[SER ] com1 at 0x03f8 irq 4 (mode: null) +00000000000i[PLUGIN] register state of 'pci' plugin device by virtual method +00000000000i[PLUGIN] register state of 'pci2isa' plugin device by virtual method +00000000000i[PLUGIN] register state of 'cmos' plugin device by virtual method +00000000000i[PLUGIN] register state of 'dma' plugin device by virtual method +00000000000i[PLUGIN] register state of 'pic' plugin device by virtual method +00000000000i[PLUGIN] register state of 'pit' plugin device by virtual method +00000000000i[PLUGIN] register state of 'vga' plugin device by virtual method +00000000000i[PLUGIN] register state of 'floppy' plugin device by virtual method +00000000000i[PLUGIN] register state of 'unmapped' plugin device by virtual method +00000000000i[PLUGIN] register state of 'biosdev' plugin device by virtual method +00000000000i[PLUGIN] register state of 'speaker' plugin device by virtual method +00000000000i[PLUGIN] register state of 'extfpuirq' plugin device by virtual method +00000000000i[PLUGIN] register state of 'parallel' plugin device by virtual method +00000000000i[PLUGIN] register state of 'serial' plugin device by virtual method +00000000000i[PLUGIN] register state of 'acpi' plugin device by virtual method +00000000000i[PLUGIN] register state of 'ioapic' plugin device by virtual method +00000000000i[PLUGIN] register state of 'keyboard' plugin device by virtual method +00000000000i[PLUGIN] register state of 'harddrv' plugin device by virtual method +00000000000i[PLUGIN] register state of 'pci_ide' plugin device by virtual method +00000000000i[SYS ] bx_pc_system_c::Reset(HARDWARE) called +00000000000i[CPU0 ] cpu hardware reset +00000000000i[APIC0 ] allocate APIC id=0 (MMIO enabled) to 0x0000fee00000 +00000000000i[CPU0 ] CPUID[0x00000000]: 00000005 756e6547 6c65746e 49656e69 +00000000000i[CPU0 ] CPUID[0x00000001]: 00000633 00010800 00000008 1fcbfbff +00000000000i[CPU0 ] CPUID[0x00000002]: 00410601 00000000 00000000 00000000 +00000000000i[CPU0 ] CPUID[0x00000003]: 00000000 00000000 00000000 00000000 +00000000000i[CPU0 ] CPUID[0x00000004]: 00000000 00000000 00000000 00000000 +00000000000i[CPU0 ] CPUID[0x00000005]: 00000040 00000040 00000003 00000020 +00000000000i[CPU0 ] CPUID[0x80000000]: 80000008 00000000 00000000 00000000 +00000000000i[CPU0 ] CPUID[0x80000001]: 00000000 00000000 00000000 00000000 +00000000000i[CPU0 ] CPUID[0x80000002]: 20202020 20202020 20202020 6e492020 +00000000000i[CPU0 ] CPUID[0x80000003]: 286c6574 50202952 69746e65 52286d75 +00000000000i[CPU0 ] CPUID[0x80000004]: 20342029 20555043 20202020 00202020 +00000000000i[CPU0 ] CPUID[0x80000005]: 01ff01ff 01ff01ff 40020140 40020140 +00000000000i[CPU0 ] CPUID[0x80000006]: 00000000 42004200 02008140 00000000 +00000000000i[CPU0 ] CPUID[0x80000007]: 00000000 00000000 00000000 00000000 +00000000000i[CPU0 ] CPUID[0x80000008]: 00002028 00000000 00000000 00000000 +00000000000i[PLUGIN] reset of 'pci' plugin device by virtual method +00000000000i[PLUGIN] reset of 'pci2isa' plugin device by virtual method +00000000000i[PLUGIN] reset of 'cmos' plugin device by virtual method +00000000000i[PLUGIN] reset of 'dma' plugin device by virtual method +00000000000i[PLUGIN] reset of 'pic' plugin device by virtual method +00000000000i[PLUGIN] reset of 'pit' plugin device by virtual method +00000000000i[PLUGIN] reset of 'vga' plugin device by virtual method +00000000000i[PLUGIN] reset of 'floppy' plugin device by virtual method +00000000000i[PLUGIN] reset of 'acpi' plugin device by virtual method +00000000000i[PLUGIN] reset of 'ioapic' plugin device by virtual method +00000000000i[PLUGIN] reset of 'keyboard' plugin device by virtual method +00000000000i[PLUGIN] reset of 'harddrv' plugin device by virtual method +00000000000i[PLUGIN] reset of 'pci_ide' plugin device by virtual method +00000000000i[PLUGIN] reset of 'unmapped' plugin device by virtual method +00000000000i[PLUGIN] reset of 'biosdev' plugin device by virtual method +00000000000i[PLUGIN] reset of 'speaker' plugin device by virtual method +00000000000i[PLUGIN] reset of 'extfpuirq' plugin device by virtual method +00000000000i[PLUGIN] reset of 'parallel' plugin device by virtual method +00000000000i[PLUGIN] reset of 'serial' plugin device by virtual method +00000004661i[BIOS ] $Revision: 11761 $ $Date: 2013-08-02 17:59:49 +0200 (Fr, 02. Aug 2013) $ +00000322571i[KBD ] reset-disable command received +00000330815i[BIOS ] Starting rombios32 +00000331249i[BIOS ] Shutdown flag 0 +00000331845i[BIOS ] ram_size=0x01000000 +00000332266i[BIOS ] ram_end=16MB +00000481479i[BIOS ] Found 1 cpu(s) +00000495676i[BIOS ] bios_table_addr: 0x000fa468 end=0x000fcc00 +00000823473i[PCI ] i440FX PMC write to PAM register 59 (TLB Flush) +00000999990i[XGUI ] charmap update. Font is 9 x 16 +00001151400i[P2ISA ] PCI IRQ routing: PIRQA# set to 0x0b +00001151419i[P2ISA ] PCI IRQ routing: PIRQB# set to 0x09 +00001151438i[P2ISA ] PCI IRQ routing: PIRQC# set to 0x0b +00001151457i[P2ISA ] PCI IRQ routing: PIRQD# set to 0x09 +00001151467i[P2ISA ] write: ELCR2 = 0x0a +00001152233i[BIOS ] PIIX3/PIIX4 init: elcr=00 0a +00001159906i[BIOS ] PCI: bus=0 devfn=0x00: vendor_id=0x8086 device_id=0x1237 class=0x0600 +00001162176i[BIOS ] PCI: bus=0 devfn=0x08: vendor_id=0x8086 device_id=0x7000 class=0x0601 +00001164285i[BIOS ] PCI: bus=0 devfn=0x09: vendor_id=0x8086 device_id=0x7010 class=0x0101 +00001164514i[PIDE ] new BM-DMA address: 0xc000 +00001165131i[BIOS ] region 4: 0x0000c000 +00001167156i[BIOS ] PCI: bus=0 devfn=0x0b: vendor_id=0x8086 device_id=0x7113 class=0x0680 +00001167389i[ACPI ] new irq line = 11 +00001167401i[ACPI ] new irq line = 9 +00001167430i[ACPI ] new PM base address: 0xb000 +00001167444i[ACPI ] new SM base address: 0xb100 +00001167472i[PCI ] setting SMRAM control register to 0x4a +00001331563i[CPU0 ] Enter to System Management Mode +00001331574i[CPU0 ] RSM: Resuming from System Management Mode +00001495592i[PCI ] setting SMRAM control register to 0x0a +00001510485i[BIOS ] MP table addr=0x000fa540 MPC table addr=0x000fa470 size=0xc8 +00001512241i[BIOS ] SMBIOS table addr=0x000fa550 +00001514423i[BIOS ] ACPI tables: RSDP addr=0x000fa670 ACPI DATA addr=0x00ff0000 size=0xf72 +00001517597i[BIOS ] Firmware waking vector 0xff00cc +00001519395i[PCI ] i440FX PMC write to PAM register 59 (TLB Flush) +00001520123i[BIOS ] bios_table_cur_addr: 0x000fa694 +00001647740i[VBIOS ] VGABios $Id: vgabios.c,v 1.76 2013/02/10 08:07:03 vruppert Exp $ +00001647811i[BXVGA ] VBE known Display Interface b0c0 +00001647843i[BXVGA ] VBE known Display Interface b0c5 +00001650768i[VBIOS ] VBE Bios $Id: vbe.c,v 1.64 2011/07/19 18:25:05 vruppert Exp $ +00001675935i[XGUI ] charmap update. Font is 9 x 16 +00001995095i[BIOS ] ata0-0: PCHS=512/2/20 translation=none LCHS=512/2/20 +00002355840i[XGUI ] charmap update. Font is 9 x 16 +00005872002i[BIOS ] IDE time out +00051753881i[BIOS ] Booting from 0000:7c00 +00096289196i[FLOPPY] partial read() on floppy image returns 388/512 +00096455861i[FLOPPY] read() on floppy image returns 0 +00096623572i[FLOPPY] read() on floppy image returns 0 +00096790237i[FLOPPY] read() on floppy image returns 0 +00096956902i[FLOPPY] read() on floppy image returns 0 +00097123567i[FLOPPY] read() on floppy image returns 0 +00097290232i[FLOPPY] read() on floppy image returns 0 +00097456897i[FLOPPY] read() on floppy image returns 0 +00097623562i[FLOPPY] read() on floppy image returns 0 +00097790227i[FLOPPY] read() on floppy image returns 0 +00097956892i[FLOPPY] read() on floppy image returns 0 +00098123557i[FLOPPY] read() on floppy image returns 0 +00098290222i[FLOPPY] read() on floppy image returns 0 +00098456887i[FLOPPY] read() on floppy image returns 0 +00098623552i[FLOPPY] read() on floppy image returns 0 +00098790217i[FLOPPY] read() on floppy image returns 0 +00098956882i[FLOPPY] read() on floppy image returns 0 +00099123547i[FLOPPY] read() on floppy image returns 0 +00099290212i[FLOPPY] read() on floppy image returns 0 +00099456877i[FLOPPY] read() on floppy image returns 0 +00099624590i[FLOPPY] read() on floppy image returns 0 +00099791255i[FLOPPY] read() on floppy image returns 0 +00099957920i[FLOPPY] read() on floppy image returns 0 +00100124585i[FLOPPY] read() on floppy image returns 0 +00100291250i[FLOPPY] read() on floppy image returns 0 +00100457915i[FLOPPY] read() on floppy image returns 0 +00100624580i[FLOPPY] read() on floppy image returns 0 +00100791245i[FLOPPY] read() on floppy image returns 0 +00100957910i[FLOPPY] read() on floppy image returns 0 +00101124575i[FLOPPY] read() on floppy image returns 0 +00101291240i[FLOPPY] read() on floppy image returns 0 +00101457905i[FLOPPY] read() on floppy image returns 0 +00101624570i[FLOPPY] read() on floppy image returns 0 +00101791235i[FLOPPY] read() on floppy image returns 0 +00101957900i[FLOPPY] read() on floppy image returns 0 +00102124565i[FLOPPY] read() on floppy image returns 0 +00102291230i[FLOPPY] read() on floppy image returns 0 +00102457895i[FLOPPY] read() on floppy image returns 0 +00102625611i[FLOPPY] read() on floppy image returns 0 +00102792276i[FLOPPY] read() on floppy image returns 0 +00102958941i[FLOPPY] read() on floppy image returns 0 +00103125606i[FLOPPY] read() on floppy image returns 0 +00103292271i[FLOPPY] read() on floppy image returns 0 +00103458936i[FLOPPY] read() on floppy image returns 0 +00103625601i[FLOPPY] read() on floppy image returns 0 +00103792266i[FLOPPY] read() on floppy image returns 0 +00103958931i[FLOPPY] read() on floppy image returns 0 +00104125596i[FLOPPY] read() on floppy image returns 0 +00104292261i[FLOPPY] read() on floppy image returns 0 +00104458926i[FLOPPY] read() on floppy image returns 0 +00104625591i[FLOPPY] read() on floppy image returns 0 +00104792256i[FLOPPY] read() on floppy image returns 0 +00104958921i[FLOPPY] read() on floppy image returns 0 +00105125586i[FLOPPY] read() on floppy image returns 0 +00105292251i[FLOPPY] read() on floppy image returns 0 +00105458916i[FLOPPY] read() on floppy image returns 0 +00105626633i[FLOPPY] read() on floppy image returns 0 +00105793298i[FLOPPY] read() on floppy image returns 0 +00105959963i[FLOPPY] read() on floppy image returns 0 +00106126628i[FLOPPY] read() on floppy image returns 0 +00106293293i[FLOPPY] read() on floppy image returns 0 +00106459958i[FLOPPY] read() on floppy image returns 0 +00106626623i[FLOPPY] read() on floppy image returns 0 +00106793288i[FLOPPY] read() on floppy image returns 0 +00106959953i[FLOPPY] read() on floppy image returns 0 +00107126618i[FLOPPY] read() on floppy image returns 0 +00107293283i[FLOPPY] read() on floppy image returns 0 +00107459948i[FLOPPY] read() on floppy image returns 0 +00107626613i[FLOPPY] read() on floppy image returns 0 +00107793278i[FLOPPY] read() on floppy image returns 0 +00107959943i[FLOPPY] read() on floppy image returns 0 +00108126608i[FLOPPY] read() on floppy image returns 0 +00108293273i[FLOPPY] read() on floppy image returns 0 +00108459938i[FLOPPY] read() on floppy image returns 0 +00108627650i[FLOPPY] read() on floppy image returns 0 +00108794315i[FLOPPY] read() on floppy image returns 0 +00108960980i[FLOPPY] read() on floppy image returns 0 +00109127645i[FLOPPY] read() on floppy image returns 0 +00109294310i[FLOPPY] read() on floppy image returns 0 +00109460975i[FLOPPY] read() on floppy image returns 0 +00109627640i[FLOPPY] read() on floppy image returns 0 +00109794305i[FLOPPY] read() on floppy image returns 0 +00109960970i[FLOPPY] read() on floppy image returns 0 +00110127635i[FLOPPY] read() on floppy image returns 0 +00110294300i[FLOPPY] read() on floppy image returns 0 +00110460965i[FLOPPY] read() on floppy image returns 0 +00110627630i[FLOPPY] read() on floppy image returns 0 +00110794295i[FLOPPY] read() on floppy image returns 0 +00110960960i[FLOPPY] read() on floppy image returns 0 +00111127625i[FLOPPY] read() on floppy image returns 0 +00111294290i[FLOPPY] read() on floppy image returns 0 +00111460955i[FLOPPY] read() on floppy image returns 0 +00111628672i[FLOPPY] read() on floppy image returns 0 +00111795337i[FLOPPY] read() on floppy image returns 0 +00111962002i[FLOPPY] read() on floppy image returns 0 +00112128667i[FLOPPY] read() on floppy image returns 0 +00112295332i[FLOPPY] read() on floppy image returns 0 +00112461997i[FLOPPY] read() on floppy image returns 0 +00112628662i[FLOPPY] read() on floppy image returns 0 +00112795327i[FLOPPY] read() on floppy image returns 0 +00112961992i[FLOPPY] read() on floppy image returns 0 +00113128657i[FLOPPY] read() on floppy image returns 0 +00113295322i[FLOPPY] read() on floppy image returns 0 +00113461987i[FLOPPY] read() on floppy image returns 0 +00113628652i[FLOPPY] read() on floppy image returns 0 +00113795317i[FLOPPY] read() on floppy image returns 0 +00113961982i[FLOPPY] read() on floppy image returns 0 +00114128647i[FLOPPY] read() on floppy image returns 0 +00114295312i[FLOPPY] read() on floppy image returns 0 +00114461977i[FLOPPY] read() on floppy image returns 0 +00114629697i[FLOPPY] read() on floppy image returns 0 +00114796362i[FLOPPY] read() on floppy image returns 0 +00114963027i[FLOPPY] read() on floppy image returns 0 +00115129692i[FLOPPY] read() on floppy image returns 0 +00115296357i[FLOPPY] read() on floppy image returns 0 +00115463022i[FLOPPY] read() on floppy image returns 0 +00115629687i[FLOPPY] read() on floppy image returns 0 +00115796352i[FLOPPY] read() on floppy image returns 0 +00115963017i[FLOPPY] read() on floppy image returns 0 +00116129682i[FLOPPY] read() on floppy image returns 0 +00116296347i[FLOPPY] read() on floppy image returns 0 +00116467321i[BIOS ] int13_harddisk: function 15, unmapped device for ELDL=81 diff --git a/linux-0.11-lab/conf/0.11-gdbstub.bxrc b/linux-0.11-lab/conf/0.11-gdbstub.bxrc new file mode 100644 index 0000000..e923c0e --- /dev/null +++ b/linux-0.11-lab/conf/0.11-gdbstub.bxrc @@ -0,0 +1,33 @@ +gdbstub: enabled=1, port=1234, text_base=0, data_base=0, bss_base=0 + +megs: 16 + +romimage: file=$BXSHARE/BIOS-bochs-latest + +# with the LGPL BIOS, X windows can be used +vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest + +boot: floppy + +floppya: type=1_44 +floppya: 1_44="cur/linux/Image", status=inserted + +floppyb: type=1_44 +floppyb: 1_44=vvfat:"b/", status=inserted + +ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 +ata0-master: type=disk, path="images/rootimage-0.11", mode=flat, cylinders=512, heads=2, spt=20 + +log: bochsout.txt +panic: action=ask +error: action=report +info: action=report +debug: action=ignore + +pci: enabled=1, chipset=i440fx +vga: extension=vbe, update_freq=15 +keyboard: serial_delay=250, paste_delay=100000 +cpu: ips=15000000 +clock: sync=slowdown +mouse: enabled=0 + diff --git a/linux-0.11-lab/conf/0.11.bxrc b/linux-0.11-lab/conf/0.11.bxrc new file mode 100644 index 0000000..b18d62d --- /dev/null +++ b/linux-0.11-lab/conf/0.11.bxrc @@ -0,0 +1,31 @@ +megs: 16 + +romimage: file=$BXSHARE/BIOS-bochs-latest + +# with the LGPL BIOS, X windows can be used +vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest + +boot: floppy + +floppya: type=1_44 +floppya: 1_44="cur/linux/Image", status=inserted + +floppyb: type=1_44 +floppyb: 1_44=vvfat:"b/", status=inserted + +ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14 +ata0-master: type=disk, path="images/rootimage-0.11", mode=flat, cylinders=512, heads=2, spt=20 + +log: bochsout.txt +panic: action=ask +error: action=report +info: action=report +debug: action=ignore + +pci: enabled=1, chipset=i440fx +vga: extension=vbe, update_freq=15 +keyboard: serial_delay=250, paste_delay=100000 +cpu: ips=15000000 +clock: sync=slowdown +mouse: enabled=0 + diff --git a/linux-0.11-lab/cur/README b/linux-0.11-lab/cur/README new file mode 100644 index 0000000..2e56a37 --- /dev/null +++ b/linux-0.11-lab/cur/README @@ -0,0 +1,6 @@ +revision history: + +版本0: 这是oldlinux.org网站上的linux-0.11-lab.rar中的版本。可能是赵博士在原始0.11版本的基础上修改而成。我做了如下改动: + a) 对一些Makefile做了修改,生成调试信息; + b) 将其移植到ubuntu和debian下,主要修改的地方用 "by wyj"标注。 + diff --git a/linux-0.11-lab/cur/Source-Insight/Linux-0.11.IAB b/linux-0.11-lab/cur/Source-Insight/Linux-0.11.IAB new file mode 100644 index 0000000000000000000000000000000000000000..27c23b6e1f3379c54bfea8c6c805c76fa235fa7c GIT binary patch literal 102400 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 X+E}E5VH>Ng(M~HVI#}YIPA>QZN3SCK literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/Source-Insight/Linux-0.11.PO b/linux-0.11-lab/cur/Source-Insight/Linux-0.11.PO new file mode 100644 index 0000000000000000000000000000000000000000..de8db453c6bceca6363a1974df88a64caed7c9e8 GIT binary patch literal 776 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 >LdwT?$NcJnp;7Il?Z10x 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 ZnP<(9Ox^sRyj^ZyQ^(&fr!Q^I{{xPUk!%0} literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/Source-Insight/Linux-0.11.PS b/linux-0.11-lab/cur/Source-Insight/Linux-0.11.PS new file mode 100644 index 0000000000000000000000000000000000000000..2c515c4dd3f2da9176ef09bd338843664bd433cf GIT binary patch literal 623496 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

gTMo^M<*{ia#Sx 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"s":""); diff --git a/linux-0.11-lab/cur/Source-Insight/Linux-0.11.WK3 b/linux-0.11-lab/cur/Source-Insight/Linux-0.11.WK3 new file mode 100644 index 0000000000000000000000000000000000000000..83b8a91bcf60093c431c8bf17f52b9cdc811bb72 GIT binary patch literal 8851 zcmeHNU1%It6u!xtnA*~$Xr-XiX~mKsXS%y>wTU7LiNV&UjmC=9Tf^+^Bs*kwCd^Nh zNHH%WJ_tr%)Hh!O;vWHv7Hr6aFTp&hPb#}85ivdp6{-&+7{4=fr9)zRgG?RtEm05vc5+GbvNT<&w* z<)&fz<8oTbWMos#@iZT>eMi&fW0q?S7d(FA>iI1m%3F5%YvsY`|HEoNyN$6Q?_z8j zAd%4K;Pc=~;B{aMXuCT&9q`+s8XUhs|4A%n*B-{cM$aO64&&dwkFhJ@jbwRl^3?Km zayiyBIT>pRb>;k8ag5E`*snUC;Tg6id1}to+5Q)J^Yg0wVwZg8tkTL`n$b+l?Pr4n z+AT_J%zQ#ZlkJAniukVJ1g#6y4t$bcjC zR@lD;z7DSPI9l z-cPH|97$!<=~O12KG5C4PrI~*ecZQn-eYTiQMWu->|IM@@469JO4uQ;cxHB*jel7R zGKNXmd_?5F!nrOm=@hwPAP4;ea4$FuyaS!yq{$Cq9_UB^ESTPoX$*}&4Yq)fp*Mk_ z1;~Fl_%(q1Q?y@!PUHUsXkOAg!EXZO^E~(xPy;*;(D=*frym7SgEcjRqc`?f|0pqO z>HFYZ9|p|=^H^)=juQI^CF24x473B^!a)Og8vGD^JPM}Lu>iaU&|AJolR&Z|G5Ji# z^`8k`M+-Z7&bGba;Od&ExQei9scdCfhR4IlrcGEJsBF=vj_5;%si(#8wl#(;S-x^% zu_>yy2^NFLIIp7qmTvOcgRi)Uh4H~EjibfUuQ-zCjqDxRenDuPpV^!!WcB6ZRv#w1$ zi!SR);i-4io;=$&DeQ)sS2W~YkieA0QR2>wm)JZ&`F2F$==&vh@tHE)hc+cS$@Y*~ z{itJD-pEeT+~#=`gJX{2=}n?1UVNj8XtHR+emL)32q%0B{eQ9m=Svid9Z=Bb7QMLj7RH!n^7ZcDFEkY#pO2pW3A8 L(|=0vYl{BA4o;%1 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/Image b/linux-0.11-lab/cur/linux/Image new file mode 100644 index 0000000000000000000000000000000000000000..8ffede23b83ea2dc10c43f12baca0e48e07900b7 GIT binary patch literal 137604 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

oByxYn50vl)+>wqiVb~R@IYk5^sk4*s7jSCg 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 C9%`5X literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/Image.bkp b/linux-0.11-lab/cur/linux/Image.bkp new file mode 100644 index 0000000000000000000000000000000000000000..9869a43badb77318312737429c1972e920db1e68 GIT binary patch literal 131556 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

O!1>*+yNQ@-$a9x=0yJXJ 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 Y`I56}gjI7ZH}}mm#A`F5e5X`s~C^k}Dr>UOy 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%0A&D2aI4wdy!*DG}r9@R)V!3Yr{2V`t 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%0AHc~~BPLR}R` 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

  • 2K}=8^5-a|4NMg5qH`~srV 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�djGPeA!xL`#p(6A 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≈a<(5X$FYhrF9MQh6%UPL!uLw5Qv$5*-#- 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

    BefIzIl=H+^IRR5 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%0AWn=z-Rm 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̾#oC1qob`!2ePSR2%r33-|$CG<`{bTX2zA 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%0A3<0(Jm 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Μ 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 %!IYFqyA}NewvleZFi3 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

  • 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

    y`{(+7!+DwHV9e3mHAFWNsopknQ`Ia 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 ESp`!L)>_e?c!Dh=`6bi8`j^* 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

    ?#l9S=Rk1Mg!g#&gAtqME6_nkqD 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%0DdcEVe0T8B8B}rjJi~m@WJ>Z%i9Cn?`Ic3 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 z zw%FC->C`Re+5<%Xh@m!Zz}L3`??GQZu5 zepQ|wo~A1%+ET=cjU-=It!{6Ti~8hMo+sKmEg@m)9F@#>+7-u<1G2}YO7l?FzJFxL!Vt2Y2y2^>~ww4MMJNNtRrRI1QytX-!FdsDZ1Mo z+&@3@J^Z%e&j$Hh)Ny}aeAQI-b)PkkM@DarLA+L98sAnU_$uW` z^`-Fg>i61RrmTn_uH!-GQ^(Ffb=+kKRI`he`Ni{5L+3>0a9ORP%eP~1PBlyK!5-N0t5)WpumEu2Txnx+Shk+`;4~nN6k2P{OmdNX3d>< z)G;wKbIx%ykDnc#MMRvQ#eHo9y^SK$(c@gWb^4UDx@T9zwrY4m zHSDW~msi89tKnZ&!yBvNN2=lHs^QnG;diRx53Au*)o^n)+~wf1{E5|YziRkr)$pil z_?l{XPBm<+hRdtr<<;;#)$oJW@DtVWi`8&_HT+IB{MTwYv(eu+v#V!GXZMWo>MJUh z>mmGdbyX{C)^YRZ96N8$obdsC)a+al#rnKB`o5`Rl&f=YuGe~XHmy0LT&KOQ?Z?b5 z;zb7K+B$mc+A8DpEp2V@xwwdQ{P-v?R_Rf5a<$JXR(nxi8K<+Sh;_{PS;x%sIzotYTTpNH4f8nn{4b|NjKedG)DB7H5X(&C6T++m?1UE^2f&&u*RGT%LXE zNi&v?pFQK4=2^3gW7(XhJ>EA{-PU@2$)4 zV)9$(xIMoq9;ys6@V z2>V9ZBSK#7&1J}tb=_I`Q}eRi^vLCz93kUpIk{|ER@OV~m37D){c>4y`Rnr2E5F0c z8$fdT(kJVe_09UEd-|k9E>F6oPcHY=2x*(k`icl~w|3!}>nrV!i!dcZdZbsbqg+?% zoG#5(sFyM8oF-ZSdYE<3dSxARo!7%$mR#msj;w1vOpjdVT%L5Phq+DUa_6$8MLo=Q zmnLbK+g3eHm$XR3tZO~Y;#%U6zsc$yb(iAhkZISiMGU{c>ax-mC%Q%@=?U!*fugoXwmT9xhEF;UxcsW1QWf?gyr)M4+ zC-cm7nSWiE%rnc(yfR(Ba=c#tI**K(d1e`zwytBHcb1#;a(ce%y5;;VGxM%3>M}E* ztW)it=`(Jo$@H0L&dWOFE8}JzGM`MF`DDJeS?!wnU=Y8mR0AQM%JMQ^mQj~i*Eh?n{p&i%q$2OktFBk= zlzC;Ey6#zK=AF~)@-m;g&UL-AjEtA*>blqU$^7biWt^;A&dWS9ZswQeWZJr%+PSWO z4m0k^eCoPqewj93S;x#b^QqT!=AY$e+Kij|WSlG`^T@I@UB<81eWuAg@>Q3e@p68q z$$aYN%6u|@?NfW#9+^+3%QRVTT~^koUiKI*>XUIZUFMzT)Sh*^dO31l=9y(>oXjWl z&$?vVeC2Xxep&B~m(#QCjGtxK%ad_3zkFr>Syr7_y?%0f#;g77ax=e-pYbyPOqY3O zee#uMWSug7#>w<`Jz{ite&$^-Prclk@5trK_?bt}&-}6uwQ1&=dE~NXK3PuIEz7U- zsOymR$vE|LXWH5~<7S$CWnNiE=9Sa4>`a^Uv)s%t(`9{Xj~Fe=%{((*yta zJTmVSB4qn*dW1tFWVUeCEGn&$3N9RpC56u zjd(Q)S%hpiWm_s8(<|$g z^~m~VowBZ3zXcJRBV?M4m+3Q2=9TF)-^}Z<2x&PZLau|f$Tn8GWScANl=aB^Wu3CF zS--4z)-_GjF@4iCtj+qmot|?mpLtR`O_sWa-HRR%JrA)EZ1eOzg(}mE?*HL zw~uKNavR9Db+#+hJ==fx#aH0>ZHlmBbPPu~ty<7LY24W8R=25XRfGi*nj_S!E32Bt z#r#zlUOM7S)%st8v_SQFve2-ih;Z-nb3 z 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 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+!2fKA4g>%I000E}TQ4v|A!NXS0RsjM7%*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@ 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@ 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@ 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@ 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 QV8DO@0|pEjFks*Y0zWW-Y5)KL literal 0 HcmV?d00001 diff --git a/Linux-0.11-lab b/linux-0.11-lab/images/rootimage-0.11.lock similarity index 100% rename from Linux-0.11-lab rename to linux-0.11-lab/images/rootimage-0.11.lock diff --git a/linux-0.11-lab/mygdb b/linux-0.11-lab/mygdb new file mode 100644 index 0000000..ddffed8 --- /dev/null +++ b/linux-0.11-lab/mygdb @@ -0,0 +1,3 @@ +#!/bin/sh +cd cur/linux +gdb tools/system -x ../../0.gdb diff --git a/linux-0.11-lab/run b/linux-0.11-lab/run new file mode 100644 index 0000000..c59d08e --- /dev/null +++ b/linux-0.11-lab/run @@ -0,0 +1,3 @@ +#!/bin/sh +bochs -q -f conf/0.11.bxrc + diff --git a/linux-0.11-lab/rundbg b/linux-0.11-lab/rundbg new file mode 100644 index 0000000..8bc9255 --- /dev/null +++ b/linux-0.11-lab/rundbg @@ -0,0 +1,2 @@ +#!/bin/sh +bochsdbg -q -f conf/0.11.bxrc diff --git a/linux-0.11-lab/rungdb b/linux-0.11-lab/rungdb new file mode 100644 index 0000000..1beffab --- /dev/null +++ b/linux-0.11-lab/rungdb @@ -0,0 +1,3 @@ +#!/bin/sh +bochs -q -f conf/0.11-gdbstub.bxrc + diff --git a/linux-0.11-lab/runtest b/linux-0.11-lab/runtest new file mode 100644 index 0000000..c8b3059 --- /dev/null +++ b/linux-0.11-lab/runtest @@ -0,0 +1,3 @@ +#!/bin/sh +bochs-term -q -f conf/0.11.bxrc +

  • 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 Cri=yv literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/Makefile b/linux-0.11-lab/cur/linux/Makefile new file mode 100644 index 0000000..ecbcf30 --- /dev/null +++ b/linux-0.11-lab/cur/linux/Makefile @@ -0,0 +1,125 @@ +# +# if you want the ram-disk device, define this to be the +# size in blocks. +# +RAMDISK = #-DRAMDISK=512 + +AS86 =as86 -0 -a +LD86 =ld86 -0 + +AS =as +LD =ld +LDFLAGS =-m elf_i386 -Ttext 0 -e startup_32 -Map=System.map.2 -N +CC =gcc -march=i386 $(RAMDISK) +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -fno-stack-protector -mcld +CPP =cpp -nostdinc -Iinclude + +# +# ROOT_DEV specifies the default root-device when making the image. +# This can be either FLOPPY, /dev/xxxx or empty, in which case the +# default of /dev/hd6 is used by 'build'. +# +ROOT_DEV= + +ARCHIVES=kernel/kernel.o mm/mm.o fs/fs.o +DRIVERS =kernel/blk_drv/blk_drv.a kernel/chr_drv/chr_drv.a +MATH =kernel/math/math.a +LIBS =lib/lib.a + +.c.s: + $(CC) $(CFLAGS) \ + -nostdinc -Iinclude -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -nostdinc -Iinclude -c -o $*.o $< + +all: Image + +Image: boot/bootsect boot/setup tools/system tools/build + cp -f tools/system system.tmp + strip system.tmp + tools/build boot/bootsect boot/setup system.tmp $(ROOT_DEV) > Image + rm -f system.tmp + sync + +disk: Image + dd bs=8192 if=Image of=/dev/PS0 + +tools/build: tools/build.c + $(CC) $(CFLAGS) \ + -o tools/build tools/build.c + +boot/head.o: boot/head.s + +tools/system: boot/head.o init/main.o \ + $(ARCHIVES) $(DRIVERS) $(MATH) $(LIBS) + $(LD) $(LDFLAGS) boot/head.o init/main.o \ + $(ARCHIVES) \ + $(DRIVERS) \ + $(MATH) \ + $(LIBS) \ + -o tools/system + nm tools/system | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw]\)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort >System.map + +kernel/math/math.a: FORCE + (cd kernel/math; make) + +kernel/blk_drv/blk_drv.a: FORCE + (cd kernel/blk_drv; make) + +kernel/chr_drv/chr_drv.a: FORCE + (cd kernel/chr_drv; make) + +kernel/kernel.o: FORCE + (cd kernel; make) + +mm/mm.o: FORCE + (cd mm; make) + +fs/fs.o: FORCE + (cd fs; make) + +lib/lib.a: FORCE + (cd lib; make) + +FORCE: + +boot/setup: boot/setup.s + $(AS86) -o boot/setup.o boot/setup.s + $(LD86) -s -o boot/setup boot/setup.o + +boot/bootsect: boot/bootsect.s + $(AS86) -o boot/bootsect.o boot/bootsect.s + $(LD86) -s -o boot/bootsect boot/bootsect.o + +tmp.s: boot/bootsect.s tools/system + (echo -n "SYSSIZE = (";ls -l tools/system | grep system \ + | cut -c25-31 | tr '\012' ' '; echo "+ 15 ) / 16") > tmp.s + cat boot/bootsect.s >> tmp.s + +clean: + rm -f Image System.map tmp_make core System.map.2 + rm -f boot/bootsect boot/setup + rm -f init/*.o tools/system tools/build boot/*.o + (cd mm;make clean) + (cd fs;make clean) + (cd kernel;make clean) + (cd lib;make clean) + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in init/*.c;do echo -n "init/";$(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + (cd fs; make dep) + (cd kernel; make dep) + (cd mm; make dep) + +### Dependencies: +init/main.o : init/main.c include/unistd.h include/sys/stat.h \ + include/sys/types.h include/sys/times.h include/sys/utsname.h \ + include/utime.h include/time.h include/linux/tty.h include/termios.h \ + include/linux/sched.h include/linux/head.h include/linux/fs.h \ + include/linux/mm.h include/signal.h include/asm/system.h include/asm/io.h \ + include/stddef.h include/stdarg.h include/fcntl.h diff --git a/linux-0.11-lab/cur/linux/System.map b/linux-0.11-lab/cur/linux/System.map new file mode 100644 index 0000000..5cda5be --- /dev/null +++ b/linux-0.11-lab/cur/linux/System.map @@ -0,0 +1,593 @@ +00000000 T pg_dir +00000000 T startup_32 +0000005a t check_x87 +00000073 t setup_idt +00000090 t rp_sidt +000000a3 t setup_gdt +00001000 t pg0 +00002000 t pg1 +00003000 t pg2 +00004000 t pg3 +00005000 T tmp_floppy_area +00005412 t L6 +00005414 t int_msg +00005428 t ignore_int +00005450 t setup_paging +000054ae t idt_descr +000054b6 t gdt_descr +000054c0 T idt +00005cc0 T gdt +000064c0 T fork +000064ef T pause +0000651e T setup +00006555 T sync +00006584 t time_init +00006799 T main +0000690c t printf +0000695b T init +00006bd3 T print_nr +00006c04 T show_task +00006c89 T show_stat +00006ccf T math_state_restore +00006d2d T schedule +00006edf T sys_pause +00006ef5 T sleep_on +00006f54 T interruptible_sleep_on +0000700f T ticks_to_floppy_on +000070da T floppy_on +00007109 T floppy_off +00007119 T do_floppy_timer +00007311 T do_timer +00007400 T sys_alarm +0000747f T sys_getpid +0000748b T sys_getppid +00007497 T sys_getuid +000074a6 T sys_geteuid +000074b6 T sys_getgid +000074c6 T sys_getegid +000074d5 T sys_nice +00007500 T sched_init +0000768d T sys_sleep +000076c0 t bad_sys_call +000076c8 t reschedule +000076d4 T system_call +0000770f t ret_from_sys_call +00007758 T coprocessor_error +0000777a T device_not_available +000077b4 T timer_interrupt +000077ec T sys_execve +000077fc T sys_execve2 +0000780c T sys_fork +00007824 T hd_interrupt +00007860 T floppy_interrupt +00007896 T parallel_interrupt +0000789d t _get_base +000078cf t die +00007ab1 T do_double_fault +00007ad4 T do_general_protection +00007af7 T do_divide_error +00007b1a T do_int3 +00007be2 T do_nmi +00007c05 T do_debug +00007c28 T do_overflow +00007c4b T do_bounds +00007c6e T do_invalid_op +00007c91 T do_device_not_available +00007cb4 T do_coprocessor_segment_overrun +00007cd7 T do_invalid_TSS +00007cfa T do_segment_not_present +00007d1d T do_stack_segment +00007d40 T do_coprocessor_error +00007d74 T do_reserved +00007d97 T trap_init +0000807b T divide_error +00008080 t no_error_code +000080b0 T debug +000080b7 T nmi +000080be T int3 +000080c5 T overflow +000080cc T bounds +000080d3 T invalid_op +000080da T coprocessor_segment_overrun +000080e1 T reserved +000080e8 T irq13 +000080fd T double_fault +00008102 t error_code +00008134 T invalid_TSS +0000813b T segment_not_present +00008142 T stack_segment +00008149 T general_protection +00008150 t _get_base +00008182 T verify_area +000081e9 T copy_mem +00008343 T copy_process +000087f0 T find_empty_process +00008884 T panic +000088bf T printk +00008910 t skip_atoi +0000896b t number +00008bdc T vsprintf +00009068 t get_fs_long +0000907e t put_fs_byte +00009096 t put_fs_long +000090a2 T sys_ftime +000090a8 T sys_break +000090ae T sys_ptrace +000090b4 T sys_stty +000090ba T sys_gtty +000090c0 T sys_rename +000090c6 T sys_prof +000090cc T sys_setregid +00009185 T sys_setgid +0000921c T sys_acct +00009222 T sys_phys +00009228 T sys_lock +0000922e T sys_mpx +00009234 T sys_ulimit +0000923a T sys_time +00009296 T sys_setreuid +00009378 T sys_setuid +0000940d T sys_stime +00009463 T sys_times +00009503 T sys_brk +00009545 T sys_setpgid +0000961e T sys_getpgrp +0000962a T sys_setsid +000096a4 T sys_getgroups +000096aa T sys_setgroups +000096b0 T sys_uname +00009719 T sys_sethostname +0000971f T sys_getrlimit +00009725 T sys_setrlimit +0000972b T sys_getrusage +00009731 T sys_gettimeofday +00009737 T sys_settimeofday +0000973d T sys_umask +00009770 t _get_base +000097a2 t put_fs_long +000097ae T release +00009812 t send_sig +00009891 t kill_session +000098eb T sys_kill +00009a9b t tell_father +00009b25 T do_exit +00009d59 T sys_exit +00009d72 T sys_waitpid +00009f98 t get_fs_byte +00009fa6 t put_fs_byte +00009fbe t put_fs_long +00009fca T sys_sgetmask +00009fd6 T sys_ssetmask +0000a002 T sys_sigpending +0000a008 T sys_sigsuspend +0000a00e t save_old +0000a061 t get_new +0000a0a1 T sys_signal +0000a125 T sys_sigaction +0000a22f T do_signal +0000a41b T kernel_mktime +0000a560 t oom +0000a57f T get_free_page +0000a5bb T free_page +0000a62a T free_page_tables +0000a729 T copy_page_tables +0000a8aa T put_page +0000a996 T un_wp_page +0000aa4e T do_wp_page +0000aad9 T get_empty_page +0000ab19 t try_to_share +0000acab t share_page +0000ad5f T do_no_page +0000aef4 T load_all +0000b056 T mem_init +0000b0ca T calc_mem +0000b1bf T page_fault +0000b1f6 t get_fs_long +0000b20c t put_fs_byte +0000b224 t put_fs_long +0000b230 T sys_ustat +0000b236 T sys_utime +0000b2e3 T sys_access +0000b3bf T sys_chdir +0000b433 T sys_chroot +0000b4a7 T sys_chmod +0000b541 T sys_chown +0000b5bc T sys_open +0000b85f T sys_creat +0000b882 T sys_close +0000b951 t get_subentry +0000baa4 t my_strlen +0000bad9 T sys_getdents +0000bc92 T sys_getcwd +0000bc98 T sys_mmap +0000bc9e T sys_munmap +0000bca4 T sys_clone +0000bcaa T sys_lseek +0000bdc1 T sys_read +0000bfb4 T my_sys_read +0000c1a7 T sys_write +0000c355 t lock_inode +0000c382 t unlock_inode +0000c3a0 T invalidate_inodes +0000c40f T sync_inodes +0000c466 t _bmap +0000c852 T bmap +0000c875 T create_block +0000c898 T iput +0000ca07 T get_empty_inode +0000cb5c T get_pipe_inode +0000cbd1 T iget +0000cd96 t read_inode +0000cfcc T sys_sync +0000d02f T sync_dev +0000d128 T invalidate_buffers +0000d19a T check_disk_change +0000d244 t remove_from_queues +0000d33b t insert_into_queues +0000d400 t find_buffer +0000d468 T get_hash_table +0000d4ea T getblk +0000d688 T brelse +0000d6d1 T bread +0000d756 T bread_page +0000d878 T breada +0000d96d T buffer_init +0000da9c t lock_super +0000dac9 t free_super +0000db0e T get_super +0000db7d T put_super +0000dc50 t read_super +0000df93 T sys_umount +0000e0f4 T sys_mount +0000e265 T mount_root +0000e473 t get_fs_byte +0000e481 t put_fs_byte +0000e499 T block_write +0000e5eb T block_read +0000e716 t get_fs_byte +0000e724 t put_fs_byte +0000e73c t rw_ttyx +0000e784 t rw_tty +0000e7d4 t rw_ram +0000e7da t rw_mem +0000e7e0 t rw_kmem +0000e7e6 t rw_port +0000e880 t rw_memory +0000e956 T rw_char +0000e9c0 t get_fs_byte +0000e9ce t put_fs_byte +0000e9e6 T file_read +0000eb91 T my_file_read +0000ed1c T file_write +0000ef16 t put_fs_byte +0000ef2e t cp_stat +0000f005 T sys_stat +0000f04f T sys_lstat +0000f06a T sys_fstat +0000f0c7 T sys_readlink +0000f0cd t _get_base +0000f0ff t get_fs_byte +0000f10d t get_fs_long +0000f123 t put_fs_byte +0000f13b t put_fs_long +0000f147 t get_fs +0000f15b t get_ds +0000f16f t set_fs +0000f176 T sys_uselib +0000f17c t create_tables +0000f2c7 t count +0000f306 t copy_strings +0000f4c2 t change_ldt +0000f645 T do_execve +000100c7 T do_execve2 +00010b55 t get_fs_byte +00010b63 t put_fs_byte +00010b7b t put_fs_long +00010b87 T read_pipe +00010e5c T sys_pipe +0001105e T sys_pipe2 +00011260 t get_fs_byte +0001126e t permission +0001130f t match +00011377 t find_entry +000117d1 t get_dir +000119be t dir_namei +00011a3d T namei +00011b53 T open_namei +00011ea6 T sys_mknod +000120d6 T sys_mkdir +00012487 t empty_dir +00012665 T sys_rmdir +000129bd T sys_unlink +00012c5e T sys_symlink +00012c64 T sys_link +00012ebe T free_block +00013030 T new_block +000131d4 T free_inode +0001333b T new_inode +00013515 t dupfd +000135ef T sys_dup2 +00013616 T sys_dup +00013631 T sys_fcntl +00013770 T sys_ioctl +00013841 t free_ind +000138e0 t free_dind +0001397f T truncate +00013ab4 T sys_select +00013aba t lock_buffer +00013ae7 t unlock_buffer +00013cd9 t make_request +00013e7d T ll_rw_block +00013ed6 T blk_dev_init +00013f24 t unlock_buffer +00013f59 t end_request +0001400a T floppy_deselect +00014041 T floppy_change +000140c7 t setup_DMA +0001417d t output_byte +000141f3 t result +000142b0 t bad_flp_intr +0001430f t rw_interrupt +000143fe T setup_rw_floppy +000144bf t seek_interrupt +00014518 t transfer +0001464d t recal_interrupt +00014697 T unexpected_floppy_interrupt +000146dc t recalibrate_floppy +0001473e t reset_interrupt +00014783 t reset_floppy +00014800 t floppy_on_interrupt +0001486b t do_fd_request +00014a6f T floppy_init +00014ac1 t unlock_buffer +00014af6 t end_request +00014b95 T sys_setup +00014f48 t controller_ready +00014fdc t hd_out +000150c9 t drive_busy +0001512f t reset_controller +000151ac t reset_hd +00015244 T unexpected_hd_interrupt +00015257 t bad_rw_intr +00015295 t read_intr +000153bb t recal_intr +000153d5 t do_hd_request +000156d6 T hd_init +00015750 t unlock_buffer +00015785 t end_request +00015824 t do_rd_request +0001595a T rd_init +000159b0 T rd_load +00015c5c t get_fs_byte +00015c6a t put_fs_byte +00015c82 T tty_init +00015c93 T tty_intr +00015d07 t sleep_if_empty +00015d3f t sleep_if_full +00015db3 T copy_to_cooked +0001636e T tty_read +000166dc T tty_write +000168ee T do_tty_interrupt +00016916 T chr_dev_init +00016917 t gotoxy +00016965 t set_origin +000169cb t scrup +00016bbb t scrdown +00016cb2 t lf +00016ce8 t ri +00016d1e t cr +00016d3f t del +00016d71 t csi_J +00016e02 t csi_K +00016eb4 T csi_m +00016f1b t set_cursor +00016f81 t respond +00016fd9 t insert_char +0001703c t insert_line +00017080 t delete_char +000170de t delete_line +00017122 t csi_at +00017160 t csi_L +0001719e t csi_P +000171dc t csi_M +0001721a t save_cur +0001722f t restore_cur +0001724e T con_write +000178dc T con_init +00017b13 T sysbeepstop +00017b3c t sysbeep +00017b9a t mode +00017b9b t leds +00017b9c t e0 +00017b9d T keyboard_interrupt +00017bc6 t e0_e1 +00017bf1 t set_e0 +00017bfa t set_e1 +00017c03 t put_queue +00017c3c t ctrl +00017c54 t unctrl +00017c58 t unalt +00017c6e t lshift +00017c76 t unlshift +00017c7e t rshift +00017c86 t unrshift +00017c8e t caps +00017cb0 t set_leds +00017cc6 t uncaps +00017cce t scroll +00017cd7 t num +00017ce0 t cursor +00017d00 t cur2 +00017d29 t cur +00017d35 t ok_cur +00017d43 t num_table +00017d50 t cur_table +00017d5d t func +00017d7a t ok_func +00017d8d t end_func +00017d8e t func_table +00017dbe t key_map +00017e1f t shift_map +00017ee1 t do_self +00017f49 t none +00017f4a t minus +00017f5f t key_table +0001835f t kb_wait +00018368 t reboot +0001837a t die +0001837c t init +000183f1 T rs_init +00018474 T rs_write +000184c4 T rs1_interrupt +000184cc T rs2_interrupt +000184d1 t rs_int +000184e8 t rep_int +00018505 t end +00018513 t jmp_table +00018524 t modem_status +0001852c t line_status +00018534 t read_char +000185bb t get_fs_byte +000185c9 t get_fs_long +000185df t put_fs_byte +000185f7 t put_fs_long +00018603 t change_speed +00018681 t flush +00018693 t send_break +00018694 t get_termios +000186f0 t set_termios +00018740 t get_termio +00018808 t set_termio +000188cc T tty_ioctl +00018bca t get_fs_byte +00018bd8 T math_emulate +00018cbb T math_error +00018cdb T _exit +00018ceb T open +00018d34 T close +00018da8 T dup +00018ddf T setsid +00018e0e T execve +00018eab T strcpy +00018ec7 T strncpy +00018eec T strcat +00018f17 T strncat +00018f4c T strcmp +00018f73 T strncmp +00018fa1 T strchr +00018fce T strrchr +00018ffd T strspn +0001903a T strcspn +00019077 T strpbrk +000190ae T strstr +000190e7 T strlen +0001910a T strtok +0001918d T memcpy +000191ad T memmove +00019201 T memcmp +0001922b T memchr +00019263 T memset +0001d2c8 d envp_rc +0001d2dc d envp +0001d300 D sys_call_table +0001d47c D NR_syscalls +0001d480 d init_task +0001e480 D current +0001e4a0 D task +0001e5a0 D stack_start +0001e5a8 D current_DOR +0001e5c0 d thisname.1955 +0001e600 d month +0001e640 d last_inode.1940 +0001e644 D start_buffer +0001e660 d crw_table +0001e680 d ioctl_table +0001e6a0 d floppy_type +0001e760 d cur_spec1 +0001e764 d cur_rate +0001e768 d floppy +0001e76c d current_track +0001e770 d callable.1844 +0001e780 D tty_table +00020ca0 D table_list +00020cc0 d quotient +00020ce0 D _ctype +00020de1 B __bss_start +00020de1 D _edata +00020e00 b printbuf +00021200 b memory_end +00021204 b buffer_memory_end +00021208 b main_memory_start +00021220 B jiffies +00021224 B startup_time +00021228 B last_task_used_math +0002123c b mon_timer +0002124c b moff_timer +00021260 b timer_list +00021560 b next_timer +00021564 B last_pid +00021580 b buf +00021980 b HIGH_MEMORY +000219a0 b mem_map +000228a0 B inode_table +00022fa0 B nr_buffers +00022fa4 b free_list +00022fa8 b buffer_wait +00022fac B ROOT_DEV +00022fe0 B blk_dev +00023018 B do_floppy +0002301c B selected +00023024 b recalibrate +00023028 b reset +0002302c b seek +00023030 b reply_buffer +00023037 b current_drive +00023038 b sector +00023039 b head +0002303a b track +0002303b b seek_track +0002303c b command +00023040 B do_hd +00023060 B hd_info +00023090 b recalibrate +00023094 b reset +00023098 b NR_HD +000230a0 b hd +000230f0 B rd_length +000230f4 b cr_flag.1923 +00023100 B beepcount +00023104 b video_type +00023108 b video_num_columns +0002310c b video_size_row +00023110 b video_num_lines +00023114 b video_page +00023118 b video_mem_start +0002311c b video_mem_end +00023120 b video_port_reg +00023122 b video_port_val +00023124 b video_erase_char +00023128 b origin +0002312c b scr_end +00023130 b pos +00023134 b x +00023138 b y +0002313c b top +00023140 b bottom +00023144 b state +00023148 b npar +00023160 b par +000231a0 b ques +000231a4 b saved_x +000231a8 b saved_y +000231c0 B drive_info +000231e0 B user_stack +000241e0 B hash_table +000246c0 B super_block +00024a20 B file_table +00024e20 B request +000252a0 B rd_start +000252a4 B _ctmp +000252a8 B errno +000252ac B ___strtok +000252b0 B end +000252b0 B _end diff --git a/linux-0.11-lab/cur/linux/System.map.2 b/linux-0.11-lab/cur/linux/System.map.2 new file mode 100644 index 0000000..c14c595 --- /dev/null +++ b/linux-0.11-lab/cur/linux/System.map.2 @@ -0,0 +1,1087 @@ +Archive member included to satisfy reference by file (symbol) + +kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + fs/fs.o (ll_rw_block) +kernel/blk_drv/blk_drv.a(floppy.o) + kernel/kernel.o (do_floppy) +kernel/blk_drv/blk_drv.a(hd.o) + kernel/kernel.o (do_hd) +kernel/blk_drv/blk_drv.a(ramdisk.o) + kernel/blk_drv/blk_drv.a(hd.o) (rd_load) +kernel/chr_drv/chr_drv.a(tty_io.o) + kernel/kernel.o (tty_table) +kernel/chr_drv/chr_drv.a(console.o) + kernel/chr_drv/chr_drv.a(tty_io.o) (con_write) +kernel/chr_drv/chr_drv.a(keyboard.2.o) + kernel/chr_drv/chr_drv.a(console.o) (keyboard_interrupt) +kernel/chr_drv/chr_drv.a(serial.o) + kernel/chr_drv/chr_drv.a(tty_io.o) (rs_init) +kernel/chr_drv/chr_drv.a(rs_io.o) + kernel/chr_drv/chr_drv.a(serial.o) (rs1_interrupt) +kernel/chr_drv/chr_drv.a(tty_ioctl.o) + fs/fs.o (tty_ioctl) +kernel/math/math.a(math_emulate.o) + kernel/kernel.o (math_emulate) +lib/lib.a(ctype.o) kernel/chr_drv/chr_drv.a(tty_io.o) (_ctmp) +lib/lib.a(_exit.o) init/main.o (_exit) +lib/lib.a(open.o) init/main.o (open) +lib/lib.a(close.o) init/main.o (close) +lib/lib.a(errno.o) init/main.o (errno) +lib/lib.a(write.o) init/main.o (write) +lib/lib.a(dup.o) init/main.o (dup) +lib/lib.a(setsid.o) init/main.o (setsid) +lib/lib.a(execve.o) init/main.o (execve) +lib/lib.a(wait.o) init/main.o (wait) +lib/lib.a(string.o) fs/fs.o (strncpy) + +分配公共符号 +公共符号 大小 文件 + +errno 0x4 lib/lib.a(errno.o) +hash_table 0x4cc fs/fs.o +___strtok 0x4 lib/lib.a(string.o) +rd_start 0x4 kernel/blk_drv/blk_drv.a(ramdisk.o) +request 0x480 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) +user_stack 0x1000 kernel/kernel.o +_ctmp 0x1 lib/lib.a(ctype.o) +super_block 0x360 fs/fs.o +drive_info 0x20 init/main.o +file_table 0x400 fs/fs.o + +Discarded input sections + + .note.GNU-stack + 0x0000000000000000 0x0 init/main.o + .note.GNU-stack + 0x0000000000000000 0x0 kernel/kernel.o + .note.GNU-stack + 0x0000000000000000 0x0 mm/mm.o + .note.GNU-stack + 0x0000000000000000 0x0 fs/fs.o + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(floppy.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(hd.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(ramdisk.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(tty_io.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(console.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(serial.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/math/math.a(math_emulate.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(ctype.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(_exit.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(open.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(close.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(errno.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(write.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(dup.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(setsid.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(execve.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(wait.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(string.o) + +内存配置 + +名称 来源 长度 属性 +*default* 0x0000000000000000 0xffffffffffffffff + +Linker script and memory map + +段 .text 的地址设置为 0x0 +LOAD boot/head.o +LOAD init/main.o +LOAD kernel/kernel.o +LOAD mm/mm.o +LOAD fs/fs.o +LOAD kernel/blk_drv/blk_drv.a +LOAD kernel/chr_drv/chr_drv.a +LOAD kernel/math/math.a +LOAD lib/lib.a + 0x0000000008048000 PROVIDE (__executable_start, 0x8048000) + 0x0000000008048074 . = (0x8048000 + SIZEOF_HEADERS) + +.interp + *(.interp) + +.note.gnu.build-id + *(.note.gnu.build-id) + +.hash + *(.hash) + +.gnu.hash + *(.gnu.hash) + +.dynsym + *(.dynsym) + +.dynstr + *(.dynstr) + +.gnu.version + *(.gnu.version) + +.gnu.version_d + *(.gnu.version_d) + +.gnu.version_r + *(.gnu.version_r) + +.rel.init + *(.rel.init) + +.rel.text 0x0000000008048074 0x0 + *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) + .rel.text 0x0000000000000000 0x0 boot/head.o + +.rel.fini + *(.rel.fini) + +.rel.rodata + *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) + +.rel.data.rel.ro + *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) + +.rel.data 0x0000000008048074 0x0 + *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) + .rel.data 0x0000000000000000 0x0 boot/head.o + +.rel.tdata + *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) + +.rel.tbss + *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) + +.rel.ctors + *(.rel.ctors) + +.rel.dtors + *(.rel.dtors) + +.rel.got + *(.rel.got) + +.rel.bss + *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) + +.rel.ifunc + *(.rel.ifunc) + +.rel.plt 0x0000000008048074 0x0 + *(.rel.plt) + 0x0000000008048074 PROVIDE (__rel_iplt_start, .) + *(.rel.iplt) + .rel.iplt 0x0000000000000000 0x0 boot/head.o + 0x0000000008048074 PROVIDE (__rel_iplt_end, .) + +.init + *(SORT(.init)) + +.plt 0x0000000008048080 0x0 + *(.plt) + *(.iplt) + .iplt 0x0000000000000000 0x0 boot/head.o + +.text 0x0000000000000000 0x19287 + *(.text.unlikely .text.*_unlikely .text.unlikely.*) + *(.text.exit .text.exit.*) + *(.text.startup .text.startup.*) + *(.text.hot .text.hot.*) + *(.text .stub .text.* .gnu.linkonce.t.*) + .text 0x0000000000000000 0x64c0 boot/head.o + 0x0000000000000000 startup_32 + 0x0000000000000000 pg_dir + 0x0000000000005000 tmp_floppy_area + 0x00000000000054c0 idt + 0x0000000000005cc0 gdt + .text 0x00000000000064c0 0x744 init/main.o + 0x00000000000064c0 fork + 0x00000000000064ef pause + 0x000000000000651e setup + 0x0000000000006555 sync + 0x0000000000006799 main + 0x000000000000695b init + 0x0000000000006bd3 print_nr + .text 0x0000000000006c04 0x395c kernel/kernel.o + 0x0000000000006c04 show_task + 0x0000000000006c89 show_stat + 0x0000000000006ccf math_state_restore + 0x0000000000006d2d schedule + 0x0000000000006edf sys_pause + 0x0000000000006ef5 sleep_on + 0x0000000000006f54 interruptible_sleep_on + 0x0000000000006fe7 wake_up + 0x000000000000700f ticks_to_floppy_on + 0x00000000000070da floppy_on + 0x0000000000007109 floppy_off + 0x0000000000007119 do_floppy_timer + 0x00000000000071ed add_timer + 0x0000000000007311 do_timer + 0x0000000000007400 sys_alarm + 0x000000000000747f sys_getpid + 0x000000000000748b sys_getppid + 0x0000000000007497 sys_getuid + 0x00000000000074a6 sys_geteuid + 0x00000000000074b6 sys_getgid + 0x00000000000074c6 sys_getegid + 0x00000000000074d5 sys_nice + 0x0000000000007500 sched_init + 0x000000000000768d sys_sleep + 0x00000000000076d4 system_call + 0x0000000000007758 coprocessor_error + 0x000000000000777a device_not_available + 0x00000000000077b4 timer_interrupt + 0x00000000000077ec sys_execve + 0x00000000000077fc sys_execve2 + 0x000000000000780c sys_fork + 0x0000000000007824 hd_interrupt + 0x0000000000007860 floppy_interrupt + 0x0000000000007896 parallel_interrupt + 0x0000000000007ab1 do_double_fault + 0x0000000000007ad4 do_general_protection + 0x0000000000007af7 do_divide_error + 0x0000000000007b1a do_int3 + 0x0000000000007be2 do_nmi + 0x0000000000007c05 do_debug + 0x0000000000007c28 do_overflow + 0x0000000000007c4b do_bounds + 0x0000000000007c6e do_invalid_op + 0x0000000000007c91 do_device_not_available + 0x0000000000007cb4 do_coprocessor_segment_overrun + 0x0000000000007cd7 do_invalid_TSS + 0x0000000000007cfa do_segment_not_present + 0x0000000000007d1d do_stack_segment + 0x0000000000007d40 do_coprocessor_error + 0x0000000000007d74 do_reserved + 0x0000000000007d97 trap_init + 0x000000000000807b divide_error + 0x00000000000080b0 debug + 0x00000000000080b7 nmi + 0x00000000000080be int3 + 0x00000000000080c5 overflow + 0x00000000000080cc bounds + 0x00000000000080d3 invalid_op + 0x00000000000080da coprocessor_segment_overrun + 0x00000000000080e1 reserved + 0x00000000000080e8 irq13 + 0x00000000000080fd double_fault + 0x0000000000008134 invalid_TSS + 0x000000000000813b segment_not_present + 0x0000000000008142 stack_segment + 0x0000000000008149 general_protection + 0x0000000000008182 verify_area + 0x00000000000081e9 copy_mem + 0x0000000000008343 copy_process + 0x00000000000087f0 find_empty_process + 0x0000000000008884 panic + 0x00000000000088bf printk + 0x0000000000008bdc vsprintf + 0x00000000000090a2 sys_ftime + 0x00000000000090a8 sys_break + 0x00000000000090ae sys_ptrace + 0x00000000000090b4 sys_stty + 0x00000000000090ba sys_gtty + 0x00000000000090c0 sys_rename + 0x00000000000090c6 sys_prof + 0x00000000000090cc sys_setregid + 0x0000000000009185 sys_setgid + 0x000000000000921c sys_acct + 0x0000000000009222 sys_phys + 0x0000000000009228 sys_lock + 0x000000000000922e sys_mpx + 0x0000000000009234 sys_ulimit + 0x000000000000923a sys_time + 0x0000000000009296 sys_setreuid + 0x0000000000009378 sys_setuid + 0x000000000000940d sys_stime + 0x0000000000009463 sys_times + 0x0000000000009503 sys_brk + 0x0000000000009545 sys_setpgid + 0x000000000000961e sys_getpgrp + 0x000000000000962a sys_setsid + 0x00000000000096a4 sys_getgroups + 0x00000000000096aa sys_setgroups + 0x00000000000096b0 sys_uname + 0x0000000000009719 sys_sethostname + 0x000000000000971f sys_getrlimit + 0x0000000000009725 sys_setrlimit + 0x000000000000972b sys_getrusage + 0x0000000000009731 sys_gettimeofday + 0x0000000000009737 sys_settimeofday + 0x000000000000973d sys_umask + 0x00000000000097ae release + 0x00000000000098eb sys_kill + 0x0000000000009b25 do_exit + 0x0000000000009d59 sys_exit + 0x0000000000009d72 sys_waitpid + 0x0000000000009fca sys_sgetmask + 0x0000000000009fd6 sys_ssetmask + 0x000000000000a002 sys_sigpending + 0x000000000000a008 sys_sigsuspend + 0x000000000000a0a1 sys_signal + 0x000000000000a125 sys_sigaction + 0x000000000000a22f do_signal + 0x000000000000a41b kernel_mktime + .text 0x000000000000a560 0xc96 mm/mm.o + 0x000000000000a57f get_free_page + 0x000000000000a5bb free_page + 0x000000000000a62a free_page_tables + 0x000000000000a729 copy_page_tables + 0x000000000000a8aa put_page + 0x000000000000a996 un_wp_page + 0x000000000000aa4e do_wp_page + 0x000000000000aa80 write_verify + 0x000000000000aad9 get_empty_page + 0x000000000000ad5f do_no_page + 0x000000000000aef4 load_all + 0x000000000000b056 mem_init + 0x000000000000b0ca calc_mem + 0x000000000000b1bf page_fault + .text 0x000000000000b1f6 0x88c4 fs/fs.o + 0x000000000000b230 sys_ustat + 0x000000000000b236 sys_utime + 0x000000000000b2e3 sys_access + 0x000000000000b3bf sys_chdir + 0x000000000000b433 sys_chroot + 0x000000000000b4a7 sys_chmod + 0x000000000000b541 sys_chown + 0x000000000000b5bc sys_open + 0x000000000000b85f sys_creat + 0x000000000000b882 sys_close + 0x000000000000bad9 sys_getdents + 0x000000000000bc92 sys_getcwd + 0x000000000000bc98 sys_mmap + 0x000000000000bc9e sys_munmap + 0x000000000000bca4 sys_clone + 0x000000000000bcaa sys_lseek + 0x000000000000bdc1 sys_read + 0x000000000000bfb4 my_sys_read + 0x000000000000c1a7 sys_write + 0x000000000000c3a0 invalidate_inodes + 0x000000000000c40f sync_inodes + 0x000000000000c852 bmap + 0x000000000000c875 create_block + 0x000000000000c898 iput + 0x000000000000ca07 get_empty_inode + 0x000000000000cb5c get_pipe_inode + 0x000000000000cbd1 iget + 0x000000000000cfcc sys_sync + 0x000000000000d02f sync_dev + 0x000000000000d128 invalidate_buffers + 0x000000000000d19a check_disk_change + 0x000000000000d468 get_hash_table + 0x000000000000d4ea getblk + 0x000000000000d688 brelse + 0x000000000000d6d1 bread + 0x000000000000d756 bread_page + 0x000000000000d878 breada + 0x000000000000d96d buffer_init + 0x000000000000db0e get_super + 0x000000000000db7d put_super + 0x000000000000df93 sys_umount + 0x000000000000e0f4 sys_mount + 0x000000000000e265 mount_root + 0x000000000000e499 block_write + 0x000000000000e5eb block_read + 0x000000000000e956 rw_char + 0x000000000000e9e6 file_read + 0x000000000000eb91 my_file_read + 0x000000000000ed1c file_write + 0x000000000000f005 sys_stat + 0x000000000000f04f sys_lstat + 0x000000000000f06a sys_fstat + 0x000000000000f0c7 sys_readlink + 0x000000000000f176 sys_uselib + 0x000000000000f645 do_execve + 0x00000000000100c7 do_execve2 + 0x0000000000010b87 read_pipe + 0x0000000000010cdd write_pipe + 0x0000000000010e5c sys_pipe + 0x000000000001105e sys_pipe2 + 0x0000000000011a3d namei + 0x0000000000011b53 open_namei + 0x0000000000011ea6 sys_mknod + 0x00000000000120d6 sys_mkdir + 0x0000000000012665 sys_rmdir + 0x00000000000129bd sys_unlink + 0x0000000000012c5e sys_symlink + 0x0000000000012c64 sys_link + 0x0000000000012ebe free_block + 0x0000000000013030 new_block + 0x00000000000131d4 free_inode + 0x000000000001333b new_inode + 0x00000000000135ef sys_dup2 + 0x0000000000013616 sys_dup + 0x0000000000013631 sys_fcntl + 0x0000000000013770 sys_ioctl + 0x000000000001397f truncate + 0x0000000000013ab4 sys_select + .text 0x0000000000013aba 0x46a kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x0000000000013e7d ll_rw_block + 0x0000000000013ed6 blk_dev_init + .text 0x0000000000013f24 0xb9d kernel/blk_drv/blk_drv.a(floppy.o) + 0x000000000001400a floppy_deselect + 0x0000000000014041 floppy_change + 0x00000000000143fe setup_rw_floppy + 0x0000000000014697 unexpected_floppy_interrupt + 0x0000000000014a6f floppy_init + .text 0x0000000000014ac1 0xc8f kernel/blk_drv/blk_drv.a(hd.o) + 0x0000000000014b95 sys_setup + 0x0000000000015244 unexpected_hd_interrupt + 0x00000000000156d6 hd_init + .text 0x0000000000015750 0x50c kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x000000000001595a rd_init + 0x00000000000159b0 rd_load + .text 0x0000000000015c5c 0xcbb kernel/chr_drv/chr_drv.a(tty_io.o) + 0x0000000000015c82 tty_init + 0x0000000000015c93 tty_intr + 0x0000000000015da0 wait_for_keypress + 0x0000000000015db3 copy_to_cooked + 0x000000000001636e tty_read + 0x00000000000166dc tty_write + 0x00000000000168ee do_tty_interrupt + 0x0000000000016916 chr_dev_init + .text 0x0000000000016917 0x1283 kernel/chr_drv/chr_drv.a(console.o) + 0x0000000000016eb4 csi_m + 0x000000000001724e con_write + 0x00000000000178dc con_init + 0x0000000000017b13 sysbeepstop + .text 0x0000000000017b9a 0x7e2 kernel/chr_drv/chr_drv.a(keyboard.2.o) + 0x0000000000017b9d keyboard_interrupt + .text 0x000000000001837c 0x145 kernel/chr_drv/chr_drv.a(serial.o) + 0x00000000000183f1 rs_init + 0x0000000000018474 rs_write + *fill* 0x00000000000184c1 0x3 + .text 0x00000000000184c4 0xf7 kernel/chr_drv/chr_drv.a(rs_io.o) + 0x00000000000184c4 rs1_interrupt + 0x00000000000184cc rs2_interrupt + .text 0x00000000000185bb 0x60f kernel/chr_drv/chr_drv.a(tty_ioctl.o) + 0x00000000000188cc tty_ioctl + .text 0x0000000000018bca 0x111 kernel/math/math.a(math_emulate.o) + 0x0000000000018bd8 math_emulate + 0x0000000000018cbb math_error + .text 0x0000000000018cdb 0x0 lib/lib.a(ctype.o) + .text 0x0000000000018cdb 0x10 lib/lib.a(_exit.o) + 0x0000000000018cdb _exit + .text 0x0000000000018ceb 0x49 lib/lib.a(open.o) + 0x0000000000018ceb open + .text 0x0000000000018d34 0x37 lib/lib.a(close.o) + 0x0000000000018d34 close + .text 0x0000000000018d6b 0x0 lib/lib.a(errno.o) + .text 0x0000000000018d6b 0x3d lib/lib.a(write.o) + 0x0000000000018d6b write + .text 0x0000000000018da8 0x37 lib/lib.a(dup.o) + 0x0000000000018da8 dup + .text 0x0000000000018ddf 0x2f lib/lib.a(setsid.o) + 0x0000000000018ddf setsid + .text 0x0000000000018e0e 0x3d lib/lib.a(execve.o) + 0x0000000000018e0e execve + .text 0x0000000000018e4b 0x60 lib/lib.a(wait.o) + 0x0000000000018e4b waitpid + 0x0000000000018e88 wait + .text 0x0000000000018eab 0x3dc lib/lib.a(string.o) + 0x0000000000018eab strcpy + 0x0000000000018ec7 strncpy + 0x0000000000018eec strcat + 0x0000000000018f17 strncat + 0x0000000000018f4c strcmp + 0x0000000000018f73 strncmp + 0x0000000000018fa1 strchr + 0x0000000000018fce strrchr + 0x0000000000018ffd strspn + 0x000000000001903a strcspn + 0x0000000000019077 strpbrk + 0x00000000000190ae strstr + 0x00000000000190e7 strlen + 0x000000000001910a strtok + 0x000000000001918d memcpy + 0x00000000000191ad memmove + 0x0000000000019201 memcmp + 0x000000000001922b memchr + 0x0000000000019263 memset + *(.gnu.warning) + +.fini + *(SORT(.fini)) + 0x0000000000019287 PROVIDE (__etext, .) + 0x0000000000019287 PROVIDE (_etext, .) + 0x0000000000019287 PROVIDE (etext, .) + +.rodata 0x0000000000019288 0x140e + *(.rodata .rodata.* .gnu.linkonce.r.*) + .rodata 0x0000000000019288 0xc9 init/main.o + *fill* 0x0000000000019351 0x3 + .rodata 0x0000000000019354 0x438 kernel/kernel.o + .rodata 0x000000000001978c 0x1b5 mm/mm.o + *fill* 0x0000000000019941 0x3 + .rodata 0x0000000000019944 0x62c fs/fs.o + .rodata 0x0000000000019f70 0x7a kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + *fill* 0x0000000000019fea 0x2 + .rodata 0x0000000000019fec 0x133 kernel/blk_drv/blk_drv.a(floppy.o) + *fill* 0x000000000001a11f 0x1 + .rodata 0x000000000001a120 0x19b kernel/blk_drv/blk_drv.a(hd.o) + *fill* 0x000000000001a2bb 0x1 + .rodata 0x000000000001a2bc 0x188 kernel/blk_drv/blk_drv.a(ramdisk.o) + .rodata 0x000000000001a444 0x17d kernel/chr_drv/chr_drv.a(console.o) + *fill* 0x000000000001a5c1 0x3 + .rodata 0x000000000001a5c4 0x80 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .rodata 0x000000000001a644 0x52 kernel/math/math.a(math_emulate.o) + +.rodata1 + *(.rodata1) + +.eh_frame_hdr + *(.eh_frame_hdr) + +.eh_frame 0x000000000001a698 0x2c20 + *(.eh_frame) + .eh_frame 0x000000000001a698 0x108 init/main.o + .eh_frame 0x000000000001a7a0 0xb1c kernel/kernel.o + 0xc0c (size before relaxing) + .eh_frame 0x000000000001b2bc 0x1b0 mm/mm.o + 0x1c8 (size before relaxing) + .eh_frame 0x000000000001b46c 0xf40 fs/fs.o + 0x10d8 (size before relaxing) + .eh_frame 0x000000000001c3ac 0x98 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0xb0 (size before relaxing) + .eh_frame 0x000000000001c444 0x23c kernel/blk_drv/blk_drv.a(floppy.o) + 0x254 (size before relaxing) + .eh_frame 0x000000000001c680 0x1e8 kernel/blk_drv/blk_drv.a(hd.o) + 0x200 (size before relaxing) + .eh_frame 0x000000000001c868 0xac kernel/blk_drv/blk_drv.a(ramdisk.o) + 0xc4 (size before relaxing) + .eh_frame 0x000000000001c914 0x12c kernel/chr_drv/chr_drv.a(tty_io.o) + 0x144 (size before relaxing) + .eh_frame 0x000000000001ca40 0x2c0 kernel/chr_drv/chr_drv.a(console.o) + 0x2d8 (size before relaxing) + .eh_frame 0x000000000001cd00 0x54 kernel/chr_drv/chr_drv.a(serial.o) + 0x6c (size before relaxing) + .eh_frame 0x000000000001cd54 0x148 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + 0x160 (size before relaxing) + .eh_frame 0x000000000001ce9c 0x5c kernel/math/math.a(math_emulate.o) + 0x74 (size before relaxing) + .eh_frame 0x000000000001cef8 0x1c lib/lib.a(_exit.o) + 0x34 (size before relaxing) + .eh_frame 0x000000000001cf14 0x24 lib/lib.a(open.o) + 0x3c (size before relaxing) + .eh_frame 0x000000000001cf38 0x20 lib/lib.a(close.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001cf58 0x20 lib/lib.a(write.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001cf78 0x20 lib/lib.a(dup.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001cf98 0x18 lib/lib.a(setsid.o) + 0x30 (size before relaxing) + .eh_frame 0x000000000001cfb0 0x20 lib/lib.a(execve.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001cfd0 0x38 lib/lib.a(wait.o) + 0x50 (size before relaxing) + .eh_frame 0x000000000001d008 0x2b0 lib/lib.a(string.o) + 0x2c8 (size before relaxing) + +.gcc_except_table + *(.gcc_except_table .gcc_except_table.*) + +.exception_ranges + *(.exception_ranges .exception_ranges*) + 0x000000000001d2b8 . = . + +.eh_frame + *(.eh_frame) + +.gcc_except_table + *(.gcc_except_table .gcc_except_table.*) + +.exception_ranges + *(.exception_ranges .exception_ranges*) + +.tdata + *(.tdata .tdata.* .gnu.linkonce.td.*) + +.tbss + *(.tbss .tbss.* .gnu.linkonce.tb.*) + *(.tcommon) + +.preinit_array 0x000000000001d2b8 0x0 + 0x000000000001d2b8 PROVIDE (__preinit_array_start, .) + *(.preinit_array) + 0x000000000001d2b8 PROVIDE (__preinit_array_end, .) + +.init_array 0x000000000001d2b8 0x0 + 0x000000000001d2b8 PROVIDE (__init_array_start, .) + *(SORT(.init_array.*) SORT(.ctors.*)) + *(.init_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .ctors) + 0x000000000001d2b8 PROVIDE (__init_array_end, .) + +.fini_array 0x000000000001d2b8 0x0 + 0x000000000001d2b8 PROVIDE (__fini_array_start, .) + *(SORT(.fini_array.*) SORT(.dtors.*)) + *(.fini_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .dtors) + 0x000000000001d2b8 PROVIDE (__fini_array_end, .) + +.ctors + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + +.dtors + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + +.jcr + *(.jcr) + +.data.rel.ro + *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) + *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) + +.dynamic + *(.dynamic) + +.got + *(.got) + *(.igot) + +.got.plt 0x000000000001d2b8 0x0 + *(.got.plt) + *(.igot.plt) + .igot.plt 0x0000000000000000 0x0 boot/head.o + +.data 0x000000000001d2c0 0x3b21 + *(.data .data.* .gnu.linkonce.d.*) + .data 0x000000000001d2c0 0x0 boot/head.o + .data 0x000000000001d2c0 0x28 init/main.o + *fill* 0x000000000001d2e8 0x18 + .data 0x000000000001d300 0x1330 kernel/kernel.o + 0x000000000001d300 sys_call_table + 0x000000000001d47c NR_syscalls + 0x000000000001e480 current + 0x000000000001e4a0 task + 0x000000000001e5a0 stack_start + 0x000000000001e5a8 current_DOR + .data 0x000000000001e630 0x0 mm/mm.o + *fill* 0x000000000001e630 0x10 + .data 0x000000000001e640 0x60 fs/fs.o + 0x000000000001e644 start_buffer + .data 0x000000000001e6a0 0x0 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .data 0x000000000001e6a0 0xcd kernel/blk_drv/blk_drv.a(floppy.o) + *fill* 0x000000000001e76d 0x3 + .data 0x000000000001e770 0x4 kernel/blk_drv/blk_drv.a(hd.o) + .data 0x000000000001e774 0x0 kernel/blk_drv/blk_drv.a(ramdisk.o) + *fill* 0x000000000001e774 0xc + .data 0x000000000001e780 0x2538 kernel/chr_drv/chr_drv.a(tty_io.o) + 0x000000000001e780 tty_table + 0x0000000000020ca0 table_list + .data 0x0000000000020cb8 0x1 kernel/chr_drv/chr_drv.a(console.o) + .data 0x0000000000020cb9 0x0 kernel/chr_drv/chr_drv.a(keyboard.2.o) + .data 0x0000000000020cb9 0x0 kernel/chr_drv/chr_drv.a(serial.o) + .data 0x0000000000020cb9 0x0 kernel/chr_drv/chr_drv.a(rs_io.o) + *fill* 0x0000000000020cb9 0x7 + .data 0x0000000000020cc0 0x20 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .data 0x0000000000020ce0 0x0 kernel/math/math.a(math_emulate.o) + .data 0x0000000000020ce0 0x101 lib/lib.a(ctype.o) + 0x0000000000020ce0 _ctype + .data 0x0000000000020de1 0x0 lib/lib.a(_exit.o) + .data 0x0000000000020de1 0x0 lib/lib.a(open.o) + .data 0x0000000000020de1 0x0 lib/lib.a(close.o) + .data 0x0000000000020de1 0x0 lib/lib.a(errno.o) + .data 0x0000000000020de1 0x0 lib/lib.a(write.o) + .data 0x0000000000020de1 0x0 lib/lib.a(dup.o) + .data 0x0000000000020de1 0x0 lib/lib.a(setsid.o) + .data 0x0000000000020de1 0x0 lib/lib.a(execve.o) + .data 0x0000000000020de1 0x0 lib/lib.a(wait.o) + .data 0x0000000000020de1 0x0 lib/lib.a(string.o) + +.data1 + *(.data1) + 0x0000000000020de1 _edata = . + 0x0000000000020de1 PROVIDE (edata, .) + 0x0000000000020de1 . = . + 0x0000000000020de1 __bss_start = . + +.bss 0x0000000000020e00 0x44b0 + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + .bss 0x0000000000020e00 0x0 boot/head.o + .bss 0x0000000000020e00 0x40c init/main.o + *fill* 0x000000000002120c 0x14 + .bss 0x0000000000021220 0x760 kernel/kernel.o + 0x0000000000021220 jiffies + 0x0000000000021224 startup_time + 0x0000000000021228 last_task_used_math + 0x0000000000021564 last_pid + .bss 0x0000000000021980 0xf20 mm/mm.o + .bss 0x00000000000228a0 0x710 fs/fs.o + 0x00000000000228a0 inode_table + 0x0000000000022fa0 nr_buffers + 0x0000000000022fac ROOT_DEV + *fill* 0x0000000000022fb0 0x10 + .bss 0x0000000000022fc0 0x58 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x0000000000022fc0 wait_for_request + 0x0000000000022fe0 blk_dev + .bss 0x0000000000023018 0x25 kernel/blk_drv/blk_drv.a(floppy.o) + 0x0000000000023018 do_floppy + 0x000000000002301c selected + 0x0000000000023020 wait_on_floppy_select + *fill* 0x000000000002303d 0x3 + .bss 0x0000000000023040 0xb0 kernel/blk_drv/blk_drv.a(hd.o) + 0x0000000000023040 do_hd + 0x0000000000023060 hd_info + .bss 0x00000000000230f0 0x4 kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x00000000000230f0 rd_length + .bss 0x00000000000230f4 0x4 kernel/chr_drv/chr_drv.a(tty_io.o) + *fill* 0x00000000000230f8 0x8 + .bss 0x0000000000023100 0xac kernel/chr_drv/chr_drv.a(console.o) + 0x0000000000023100 beepcount + .bss 0x00000000000231ac 0x0 kernel/chr_drv/chr_drv.a(keyboard.2.o) + .bss 0x00000000000231ac 0x0 kernel/chr_drv/chr_drv.a(serial.o) + .bss 0x00000000000231ac 0x0 kernel/chr_drv/chr_drv.a(rs_io.o) + .bss 0x00000000000231ac 0x0 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .bss 0x00000000000231ac 0x0 kernel/math/math.a(math_emulate.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(ctype.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(_exit.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(open.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(close.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(errno.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(write.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(dup.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(setsid.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(execve.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(wait.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(string.o) + *(COMMON) + *fill* 0x00000000000231ac 0x14 + COMMON 0x00000000000231c0 0x20 init/main.o + 0x00000000000231c0 drive_info + COMMON 0x00000000000231e0 0x1000 kernel/kernel.o + 0x00000000000231e0 user_stack + COMMON 0x00000000000241e0 0xc40 fs/fs.o + 0x00000000000241e0 hash_table + 0x00000000000246c0 super_block + 0x0000000000024a20 file_table + COMMON 0x0000000000024e20 0x480 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x0000000000024e20 request + COMMON 0x00000000000252a0 0x4 kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x00000000000252a0 rd_start + COMMON 0x00000000000252a4 0x1 lib/lib.a(ctype.o) + 0x00000000000252a4 _ctmp + *fill* 0x00000000000252a5 0x3 + COMMON 0x00000000000252a8 0x4 lib/lib.a(errno.o) + 0x00000000000252a8 errno + COMMON 0x00000000000252ac 0x4 lib/lib.a(string.o) + 0x00000000000252ac ___strtok + 0x00000000000252b0 . = ALIGN ((. != 0x0)?0x4:0x1) + 0x00000000000252b0 . = ALIGN (0x4) + 0x00000000000252b0 . = SEGMENT_START ("ldata-segment", .) + 0x00000000000252b0 . = ALIGN (0x4) + 0x00000000000252b0 _end = . + 0x00000000000252b0 PROVIDE (end, .) + +.stab + *(.stab) + +.stabstr + *(.stabstr) + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x0000000000000000 0x29 + *(.comment) + .comment 0x0000000000000000 0x29 init/main.o + 0x2a (size before relaxing) + .comment 0x0000000000000000 0x1a4 kernel/kernel.o + .comment 0x0000000000000000 0x2a mm/mm.o + .comment 0x0000000000000000 0x2f4 fs/fs.o + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(floppy.o) + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(hd.o) + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(ramdisk.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(tty_io.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(console.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(serial.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .comment 0x0000000000000000 0x2a kernel/math/math.a(math_emulate.o) + .comment 0x0000000000000000 0x2a lib/lib.a(ctype.o) + .comment 0x0000000000000000 0x2a lib/lib.a(_exit.o) + .comment 0x0000000000000000 0x2a lib/lib.a(open.o) + .comment 0x0000000000000000 0x2a lib/lib.a(close.o) + .comment 0x0000000000000000 0x2a lib/lib.a(errno.o) + .comment 0x0000000000000000 0x2a lib/lib.a(write.o) + .comment 0x0000000000000000 0x2a lib/lib.a(dup.o) + .comment 0x0000000000000000 0x2a lib/lib.a(setsid.o) + .comment 0x0000000000000000 0x2a lib/lib.a(execve.o) + .comment 0x0000000000000000 0x2a lib/lib.a(wait.o) + .comment 0x0000000000000000 0x2a lib/lib.a(string.o) + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x0000000000000000 0x628 + *(.debug_aranges) + .debug_aranges + 0x0000000000000000 0x20 init/main.o + .debug_aranges + 0x0000000000000020 0x140 kernel/kernel.o + .debug_aranges + 0x0000000000000160 0x20 mm/mm.o + .debug_aranges + 0x0000000000000180 0x238 fs/fs.o + .debug_aranges + 0x00000000000003b8 0x20 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_aranges + 0x00000000000003d8 0x20 kernel/blk_drv/blk_drv.a(floppy.o) + .debug_aranges + 0x00000000000003f8 0x20 kernel/blk_drv/blk_drv.a(hd.o) + .debug_aranges + 0x0000000000000418 0x20 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_aranges + 0x0000000000000438 0x20 kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_aranges + 0x0000000000000458 0x20 kernel/chr_drv/chr_drv.a(console.o) + .debug_aranges + 0x0000000000000478 0x20 kernel/chr_drv/chr_drv.a(serial.o) + .debug_aranges + 0x0000000000000498 0x20 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_aranges + 0x00000000000004b8 0x20 kernel/math/math.a(math_emulate.o) + .debug_aranges + 0x00000000000004d8 0x18 lib/lib.a(ctype.o) + .debug_aranges + 0x00000000000004f0 0x20 lib/lib.a(_exit.o) + .debug_aranges + 0x0000000000000510 0x20 lib/lib.a(open.o) + .debug_aranges + 0x0000000000000530 0x20 lib/lib.a(close.o) + .debug_aranges + 0x0000000000000550 0x18 lib/lib.a(errno.o) + .debug_aranges + 0x0000000000000568 0x20 lib/lib.a(write.o) + .debug_aranges + 0x0000000000000588 0x20 lib/lib.a(dup.o) + .debug_aranges + 0x00000000000005a8 0x20 lib/lib.a(setsid.o) + .debug_aranges + 0x00000000000005c8 0x20 lib/lib.a(execve.o) + .debug_aranges + 0x00000000000005e8 0x20 lib/lib.a(wait.o) + .debug_aranges + 0x0000000000000608 0x20 lib/lib.a(string.o) + +.debug_pubnames + *(.debug_pubnames) + +.debug_info 0x0000000000000000 0x17acb + *(.debug_info .gnu.linkonce.wi.*) + .debug_info 0x0000000000000000 0xb73 init/main.o + .debug_info 0x0000000000000b73 0x4ce0 kernel/kernel.o + .debug_info 0x0000000000005853 0xba8 mm/mm.o + .debug_info 0x00000000000063fb 0xa971 fs/fs.o + .debug_info 0x0000000000010d6c 0x932 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_info 0x000000000001169e 0xc9f kernel/blk_drv/blk_drv.a(floppy.o) + .debug_info 0x000000000001233d 0xd5f kernel/blk_drv/blk_drv.a(hd.o) + .debug_info 0x000000000001309c 0xad5 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_info 0x0000000000013b71 0xacd kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_info 0x000000000001463e 0xdb0 kernel/chr_drv/chr_drv.a(console.o) + .debug_info 0x00000000000153ee 0x85c kernel/chr_drv/chr_drv.a(serial.o) + .debug_info 0x0000000000015c4a 0xb47 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_info 0x0000000000016791 0x7b5 kernel/math/math.a(math_emulate.o) + .debug_info 0x0000000000016f46 0x66 lib/lib.a(ctype.o) + .debug_info 0x0000000000016fac 0x77 lib/lib.a(_exit.o) + .debug_info 0x0000000000017023 0xd0 lib/lib.a(open.o) + .debug_info 0x00000000000170f3 0x97 lib/lib.a(close.o) + .debug_info 0x000000000001718a 0x36 lib/lib.a(errno.o) + .debug_info 0x00000000000171c0 0xc9 lib/lib.a(write.o) + .debug_info 0x0000000000017289 0x97 lib/lib.a(dup.o) + .debug_info 0x0000000000017320 0x95 lib/lib.a(setsid.o) + .debug_info 0x00000000000173b5 0xcb lib/lib.a(execve.o) + .debug_info 0x0000000000017480 0xed lib/lib.a(wait.o) + .debug_info 0x000000000001756d 0x55e lib/lib.a(string.o) + +.debug_abbrev 0x0000000000000000 0x450e + *(.debug_abbrev) + .debug_abbrev 0x0000000000000000 0x237 init/main.o + .debug_abbrev 0x0000000000000237 0xf7f kernel/kernel.o + .debug_abbrev 0x00000000000011b6 0x20b mm/mm.o + .debug_abbrev 0x00000000000013c1 0x1ac6 fs/fs.o + .debug_abbrev 0x0000000000002e87 0x169 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_abbrev 0x0000000000002ff0 0x27d kernel/blk_drv/blk_drv.a(floppy.o) + .debug_abbrev 0x000000000000326d 0x23c kernel/blk_drv/blk_drv.a(hd.o) + .debug_abbrev 0x00000000000034a9 0x1a8 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_abbrev 0x0000000000003651 0x279 kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_abbrev 0x00000000000038ca 0x26b kernel/chr_drv/chr_drv.a(console.o) + .debug_abbrev 0x0000000000003b35 0x175 kernel/chr_drv/chr_drv.a(serial.o) + .debug_abbrev 0x0000000000003caa 0x18d kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_abbrev 0x0000000000003e37 0x163 kernel/math/math.a(math_emulate.o) + .debug_abbrev 0x0000000000003f9a 0x3e lib/lib.a(ctype.o) + .debug_abbrev 0x0000000000003fd8 0x51 lib/lib.a(_exit.o) + .debug_abbrev 0x0000000000004029 0x97 lib/lib.a(open.o) + .debug_abbrev 0x00000000000040c0 0x75 lib/lib.a(close.o) + .debug_abbrev 0x0000000000004135 0x2c lib/lib.a(errno.o) + .debug_abbrev 0x0000000000004161 0xa1 lib/lib.a(write.o) + .debug_abbrev 0x0000000000004202 0x75 lib/lib.a(dup.o) + .debug_abbrev 0x0000000000004277 0x73 lib/lib.a(setsid.o) + .debug_abbrev 0x00000000000042ea 0x85 lib/lib.a(execve.o) + .debug_abbrev 0x000000000000436f 0xb6 lib/lib.a(wait.o) + .debug_abbrev 0x0000000000004425 0xe9 lib/lib.a(string.o) + +.debug_line 0x0000000000000000 0x4934 + *(.debug_line .debug_line.* .debug_line_end) + .debug_line 0x0000000000000000 0x1e5 init/main.o + .debug_line 0x00000000000001e5 0xe8d kernel/kernel.o + .debug_line 0x0000000000001072 0x2b4 mm/mm.o + .debug_line 0x0000000000001326 0x1f66 fs/fs.o + .debug_line 0x000000000000328c 0x197 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_line 0x0000000000003423 0x24c kernel/blk_drv/blk_drv.a(floppy.o) + .debug_line 0x000000000000366f 0x2bf kernel/blk_drv/blk_drv.a(hd.o) + .debug_line 0x000000000000392e 0x160 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_line 0x0000000000003a8e 0x33b kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_line 0x0000000000003dc9 0x3ab kernel/chr_drv/chr_drv.a(console.o) + .debug_line 0x0000000000004174 0xd9 kernel/chr_drv/chr_drv.a(serial.o) + .debug_line 0x000000000000424d 0x1db kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_line 0x0000000000004428 0xe1 kernel/math/math.a(math_emulate.o) + .debug_line 0x0000000000004509 0x28 lib/lib.a(ctype.o) + .debug_line 0x0000000000004531 0x39 lib/lib.a(_exit.o) + .debug_line 0x000000000000456a 0x62 lib/lib.a(open.o) + .debug_line 0x00000000000045cc 0x5c lib/lib.a(close.o) + .debug_line 0x0000000000004628 0x28 lib/lib.a(errno.o) + .debug_line 0x0000000000004650 0x76 lib/lib.a(write.o) + .debug_line 0x00000000000046c6 0x5a lib/lib.a(dup.o) + .debug_line 0x0000000000004720 0x77 lib/lib.a(setsid.o) + .debug_line 0x0000000000004797 0x5d lib/lib.a(execve.o) + .debug_line 0x00000000000047f4 0x7a lib/lib.a(wait.o) + .debug_line 0x000000000000486e 0xc6 lib/lib.a(string.o) + +.debug_frame + *(.debug_frame) + +.debug_str 0x0000000000000000 0x21ee + *(.debug_str) + .debug_str 0x0000000000000000 0x3ba init/main.o + 0x462 (size before relaxing) + .debug_str 0x00000000000003ba 0x900 kernel/kernel.o + 0x233a (size before relaxing) + .debug_str 0x0000000000000cba 0x18c mm/mm.o + 0x4e7 (size before relaxing) + .debug_str 0x0000000000000e46 0x9fa fs/fs.o + 0x4b39 (size before relaxing) + .debug_str 0x0000000000001840 0xf0 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x491 (size before relaxing) + .debug_str 0x0000000000001930 0x1cf kernel/blk_drv/blk_drv.a(floppy.o) + 0x673 (size before relaxing) + .debug_str 0x0000000000001aff 0x15e kernel/blk_drv/blk_drv.a(hd.o) + 0x5e8 (size before relaxing) + .debug_str 0x0000000000001c5d 0x43 kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x58a (size before relaxing) + .debug_str 0x0000000000001ca0 0xfb kernel/chr_drv/chr_drv.a(tty_io.o) + 0x4e3 (size before relaxing) + .debug_str 0x0000000000001d9b 0x1b9 kernel/chr_drv/chr_drv.a(console.o) + 0x5b7 (size before relaxing) + .debug_str 0x0000000000001f54 0x1a kernel/chr_drv/chr_drv.a(serial.o) + 0x3fc (size before relaxing) + .debug_str 0x0000000000001f6e 0x8b kernel/chr_drv/chr_drv.a(tty_ioctl.o) + 0x4a7 (size before relaxing) + .debug_str 0x0000000000001ff9 0x70 kernel/math/math.a(math_emulate.o) + 0x392 (size before relaxing) + .debug_str 0x0000000000002069 0x8d lib/lib.a(ctype.o) + 0xb6 (size before relaxing) + .debug_str 0x00000000000020f6 0x33 lib/lib.a(_exit.o) + 0xe0 (size before relaxing) + .debug_str 0x0000000000000000 0x33 lib/lib.a(open.o) + 0xf0 (size before relaxing) + .debug_str 0x0000000000002129 0x8 lib/lib.a(close.o) + 0xe2 (size before relaxing) + .debug_str 0x0000000000002131 0x8 lib/lib.a(errno.o) + 0x93 (size before relaxing) + .debug_str 0x0000000000000000 0x8 lib/lib.a(write.o) + 0xee (size before relaxing) + .debug_str 0x0000000000002139 0x6 lib/lib.a(dup.o) + 0xda (size before relaxing) + .debug_str 0x000000000000213f 0x9 lib/lib.a(setsid.o) + 0xea (size before relaxing) + .debug_str 0x0000000000002148 0x9 lib/lib.a(execve.o) + 0xf3 (size before relaxing) + .debug_str 0x0000000000002151 0x11 lib/lib.a(wait.o) + 0x100 (size before relaxing) + .debug_str 0x0000000000002162 0x8c lib/lib.a(string.o) + 0x147 (size before relaxing) + +.debug_loc + *(.debug_loc) + +.debug_macinfo + *(.debug_macinfo) + +.debug_weaknames + *(.debug_weaknames) + +.debug_funcnames + *(.debug_funcnames) + +.debug_typenames + *(.debug_typenames) + +.debug_varnames + *(.debug_varnames) + +.debug_pubtypes + *(.debug_pubtypes) + +.debug_ranges 0x0000000000000000 0x18 + *(.debug_ranges) + .debug_ranges 0x0000000000000000 0x18 init/main.o + +.debug_macro + *(.debug_macro) + +.gnu.attributes + *(.gnu.attributes) + +/DISCARD/ + *(.note.GNU-stack) + *(.gnu_debuglink) + *(.gnu.lto_*) +OUTPUT(tools/system elf32-i386) diff --git a/linux-0.11-lab/cur/linux/boot/bootsect b/linux-0.11-lab/cur/linux/boot/bootsect new file mode 100644 index 0000000000000000000000000000000000000000..4fbb8f823afe23687f1887d48deeb19fdcf83049 GIT binary patch literal 544 zcmZQ%7GP0e00JfufdrZ$>>UT#`)=%Dn9z4%Cj+DAH_iW_m%fre~uHUSwNXN9*i=ymehGJ;Ln!ff#WtiVnQ zhTZH8d+ix_Fbba)*ufysci@E)!;7N~dJF$B+A=VditBaD0d;UNHUH)>;o2bsq=ibD zUjNfu{D<)s1B1c@RhzFW-(_8 zyWs)N8wX!-zAym_G6SXbtl4ZCONDkYGHA2SVkl+#&o+l)@hk?z1B+)cfHa*h-qdq| z733tt+pm`g1P2Cni_Kx^=9|Ib*m1R6Y!*YuwM`6-j~E!Y0DW7;8WkBGaTw@dps&vg zgE+6x1nv67yn*3e)L{k&UM`>f#FWgubcN!|;*!){1wB1IUM^lPq<|j0Og84wRRH+h BgWdoD literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/boot/bootsect.o b/linux-0.11-lab/cur/linux/boot/bootsect.o new file mode 100644 index 0000000000000000000000000000000000000000..e35422ec017a165928bfcbec5f9f0363b4a9e75c GIT binary patch literal 923 zcmYjPe@GKy7=FH+PB$=@gOrLGSb;@HGl?KZQ#V8qHK&qRjLn^EOg*`~_2a*bAQEj2 z`bR7R8DjO1Ax5YD;D!W64T2~X>5mFT9P~#*1c~eYW`BB3fn$y+MeVjqc)FB7D{5ZwQc zlnx;W9UDX^enV$llvLXoyfYO9Z}$=84ic;$V`O7tS=LmkPeZ`p+0`EKHzCjy2sHQl zw}lpeD-uHysXwTY5sDOw1Y=|-4_TXAn>%^rd%=iw84Yc11;O9ydW>fq~$ltjP-a7_y>584mLI>~!sq4M`D5Ly@qm@(>AWA%vwU zr%{<_+X|nde;^cvTBwf1Bxp*gFV1T;>8i$^g?NcKSG5q0@!xcE+`au;IbOSyoY+a~ z{!PR`f4ixx+SO^8CCMcNsiZj%R`aVSzcIBg=v7dW8hevmN}95U=#^i zr)no|09j{lb(WIStn(?vkzMq|I|{AlEXVU%$9xr@m*6E`j|&EKW*r6`Npr0hYp)?r zZZZ#$s1!#JP?cts3OD|gYj$Hl#R^TxZHehkwhp*b#dJ@BG4oNrJhA0o88bcbDr`}l zq`HQqR(%{jBbm%s8(UUwT8Z1NS<0;0*6J{lvGC1C@wAnkO^FJFf$S6TC5rM^{XXi` zL>k>@nq232gLmrem|4t+bg$&5+XH7iM)#1fVRRQc{Pnj!5uJed*5_GV{{}WkC!rMg z_MAVrNM}JOl67*Dd*89})A9sAdKZB*dkfv2*ih7^UQ;z`&?SnZugqR%-#z8CTDl%r F<1c(7E-?TA literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/boot/bootsect.s b/linux-0.11-lab/cur/linux/boot/bootsect.s new file mode 100644 index 0000000..711f103 --- /dev/null +++ b/linux-0.11-lab/cur/linux/boot/bootsect.s @@ -0,0 +1,260 @@ +! +! SYS_SIZE is the number of clicks (16 bytes) to be loaded. +! 0x3000 is 0x30000 bytes = 196kB, more than enough for current +! versions of linux +! +SYSSIZE = 0x3000 +! +! bootsect.s (C) 1991 Linus Torvalds +! +! bootsect.s is loaded at 0x7c00 by the bios-startup routines, and moves +! iself out of the way to address 0x90000, and jumps there. +! +! It then loads 'setup' directly after itself (0x90200), and the system +! at 0x10000, using BIOS interrupts. +! +! NOTE! currently system is at most 8*65536 bytes long. This should be no +! problem, even in the future. I want to keep it simple. This 512 kB +! kernel size should be enough, especially as this doesn't contain the +! buffer cache as in minix +! +! The loader has been made as simple as possible, and continuos +! read errors will result in a unbreakable loop. Reboot by hand. It +! loads pretty fast by getting whole sectors at a time whenever possible. + +.globl begtext, begdata, begbss, endtext, enddata, endbss +.text +begtext: +.data +begdata: +.bss +begbss: +.text + +SETUPLEN = 4 ! nr of setup-sectors +BOOTSEG = 0x07c0 ! original address of boot-sector +INITSEG = 0x9000 ! we move boot here - out of the way +SETUPSEG = 0x9020 ! setup starts here +SYSSEG = 0x1000 ! system loaded at 0x10000 (65536). +ENDSEG = SYSSEG + SYSSIZE ! where to stop loading + +! ROOT_DEV: 0x000 - same type of floppy as boot. +! 0x301 - first partition on first drive etc +ROOT_DEV = 0x306 + +entry start +start: + mov ax,#BOOTSEG + mov ds,ax + mov ax,#INITSEG + mov es,ax + mov cx,#256 + sub si,si + sub di,di + rep + movw + jmpi go,INITSEG +go: mov ax,cs + mov ds,ax + mov es,ax +! put stack at 0x9ff00. + mov ss,ax + mov sp,#0xFF00 ! arbitrary value >>512 + +! load the setup-sectors directly after the bootblock. +! Note that 'es' is already set up. + +load_setup: + mov dx,#0x0000 ! drive 0, head 0 + mov cx,#0x0002 ! sector 2, track 0 + mov bx,#0x0200 ! address = 512, in INITSEG + mov ax,#0x0200+SETUPLEN ! service 2, nr of sectors + int 0x13 ! read it + jnc ok_load_setup ! ok - continue + mov dx,#0x0000 + mov ax,#0x0000 ! reset the diskette + int 0x13 + j load_setup + +ok_load_setup: + +! Get disk drive parameters, specifically nr of sectors/track + + mov dl,#0x00 + mov ax,#0x0800 ! AH=8 is get drive parameters + int 0x13 + mov ch,#0x00 + seg cs + mov sectors,cx + mov ax,#INITSEG + mov es,ax + +! Print some inane message + + mov ah,#0x03 ! read cursor pos + xor bh,bh + int 0x10 + + mov cx,#24 + mov bx,#0x0007 ! page 0, attribute 7 (normal) + mov bp,#msg1 + mov ax,#0x1301 ! write string, move cursor + int 0x10 + +! ok, we've written the message, now +! we want to load the system (at 0x10000) + + mov ax,#SYSSEG + mov es,ax ! segment of 0x010000 + call read_it + call kill_motor + +! After that we check which root-device to use. If the device is +! defined (!= 0), nothing is done and the given device is used. +! Otherwise, either /dev/PS0 (2,28) or /dev/at0 (2,8), depending +! on the number of sectors that the BIOS reports currently. + + seg cs + mov ax,root_dev + cmp ax,#0 + jne root_defined + seg cs + mov bx,sectors + mov ax,#0x0208 ! /dev/ps0 - 1.2Mb + cmp bx,#15 + je root_defined + mov ax,#0x021c ! /dev/PS0 - 1.44Mb + cmp bx,#18 + je root_defined +undef_root: + jmp undef_root +root_defined: + seg cs + mov root_dev,ax + +! after that (everyting loaded), we jump to +! the setup-routine loaded directly after +! the bootblock: + + jmpi 0,SETUPSEG + +! This routine loads the system at address 0x10000, making sure +! no 64kB boundaries are crossed. We try to load it as fast as +! possible, loading whole tracks whenever we can. +! +! in: es - starting address segment (normally 0x1000) +! +sread: .word 1+SETUPLEN ! sectors read of current track +head: .word 0 ! current head +track: .word 0 ! current track + +read_it: + mov ax,es + test ax,#0x0fff +die: jne die ! es must be at 64kB boundary + xor bx,bx ! bx is starting address within segment +rp_read: + mov ax,es + cmp ax,#ENDSEG ! have we loaded all yet? + jb ok1_read + ret +ok1_read: + seg cs + mov ax,sectors + sub ax,sread + mov cx,ax + shl cx,#9 + add cx,bx + jnc ok2_read + je ok2_read + xor ax,ax + sub ax,bx + shr ax,#9 +ok2_read: + call read_track + mov cx,ax + add ax,sread + seg cs + cmp ax,sectors + jne ok3_read + mov ax,#1 + sub ax,head + jne ok4_read + inc track +ok4_read: + mov head,ax + xor ax,ax +ok3_read: + mov sread,ax + shl cx,#9 + add bx,cx + jnc rp_read + mov ax,es + add ax,#0x1000 + mov es,ax + xor bx,bx + jmp rp_read + +read_track: + push ax + push bx + push cx + push dx + mov dx,track + mov cx,sread + inc cx + mov ch,dl + mov dx,head + mov dh,dl + mov dl,#0 + and dx,#0x0100 + mov ah,#2 + int 0x13 + jc bad_rt + pop dx + pop cx + pop bx + pop ax + ret +bad_rt: mov ax,#0 + mov dx,#0 + int 0x13 + pop dx + pop cx + pop bx + pop ax + jmp read_track + +/* + * This procedure turns off the floppy drive motor, so + * that we enter the kernel in a known state, and + * don't have to worry about it later. + */ +kill_motor: + push dx + mov dx,#0x3f2 + mov al,#0 + outb + pop dx + ret + +sectors: + .word 0 + +msg1: + .byte 13,10 + .ascii "Loading system ..." + .byte 13,10,13,10 + +.org 508 +root_dev: + .word ROOT_DEV +boot_flag: + .word 0xAA55 + +.text +endtext: +.data +enddata: +.bss +endbss: diff --git a/linux-0.11-lab/cur/linux/boot/head.o b/linux-0.11-lab/cur/linux/boot/head.o new file mode 100644 index 0000000000000000000000000000000000000000..a4c55649c84336692e2f017e7d3b9dc5fd3082ba GIT binary patch literal 27012 zcmeI5O=ule7>2)-rn#v$OwS%uL!8 z6a%qn7P*Sc3jRisn&iB4& z&iUrdGdG*FIOn4m54>cIk-Qk$Ah(^!ke}VzorWRlmW`=8*Nf1++Dw|)n=8(lL2X<) zq}4H0_qtn3hEHg(eMrzN@gL4WGWd|l-26`+&h}(Q)Bb+)4UucVe)-Gw{Sx<}!~D%I z+*?{aEZ2TpTI?Ts6R8Drs4QHmT#)ACbDHqHPI#fPaIkZJx%=grzZ~<#59qk$nEtaG zwGRskkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@{I3YSFZx$|7#nQXbmBLjzwysojfuwek;Xv15&K~{ z6T}bn$jEE2Z|!ovS+gN%tq)^XR$HyssPk=M+o88dFJpht^U^0$N=mKOKTj>|UZ7II z4x`H(J5>#+>Q=Qw)n--0B9~TQ#eSfLn=SeK)YI5gR6e{_N}TOiv2kb*y3Aqg&{f?# zRHRiv)sBntlbK~r0wh2JBtQZrur3L-9K81NMAG<0vMw3$rAdGUNPq-LVBHWXMn|V& zZ%m3&9A>eWtI(e;#{O(9#j+QBQXGq-`^K^jJ@x#QE<0i`Vp6sSL02)fJdSHqsHM(blD3iP(3Pv78q7&_8 zM*5-k_?fI2(eEHwXv&I_5`-Qfll%P;pXV0YUx3zAW3po86$m{&CikN%^o7%6cM$*qTtc_Ysx=5yrWmz#Y0Wq@1&%*1%SXPY8K_u4qV*JPI(}(IbjC`7P zOl$R@sT#=|)qkDIv{wK99Ukv?m%n(Im&lK20=Hg{t*Sze*ZlDbcXsa{@hVv2a|5sH zyZGms^dqTP8`GihV(m}Dz>RbuF1PGQ!HL`fm@lJ4uYeu7y6z=u@~z6cI{M&Nu>=k<<%P!gh--%^>djmB1Ic# zG~x&OiAMa0zq0GKeRF1UbBAE`q28r)_-9Aob|_S NJgpJWKc}%z4Mb on a 4Mb machine). + * + * NOTE! Although all physical memory should be identity + * mapped by this routine, only the kernel page functions + * use the >1Mb addresses directly. All "normal" functions + * use just the lower 1Mb, or the local data space, which + * will be mapped to some other place - mm keeps track of + * that. + * + * For those with more memory than 16 Mb - tough luck. I've + * not got it, why should you :-) The source is here. Change + * it. (Seriously - it shouldn't be too difficult. Mostly + * change some constants etc. I left it at 16Mb, as my machine + * even cannot be extended past that (ok, but it was cheap :-) + * I've tried to show which constants to change by having + * some kind of marker at them (search for "16Mb"), but I + * won't guarantee that's all :-( ) + */ +.align 4 +setup_paging: + movl $1024*5,%ecx /* 5 pages - pg_dir+4 page tables */ + xorl %eax,%eax + xorl %edi,%edi /* pg_dir is at 0x000 */ + cld;rep;stosl + movl $pg0+7,pg_dir /* set present bit/user r/w */ + movl $pg1+7,pg_dir+4 /* --------- " " --------- */ + movl $pg2+7,pg_dir+8 /* --------- " " --------- */ + movl $pg3+7,pg_dir+12 /* --------- " " --------- */ + movl $pg3+4092,%edi + movl $0xfff007,%eax /* 16Mb - 4096 + 7 (r/w user,p) */ + std +1: stosl /* fill pages backwards - more efficient :-) */ + subl $0x1000,%eax + jge 1b + xorl %eax,%eax /* pg_dir is at 0x0000 */ + movl %eax,%cr3 /* cr3 - page directory start */ + movl %cr0,%eax + orl $0x80000000,%eax + movl %eax,%cr0 /* set paging (PG) bit */ + cld /* by wyj */ + ret /* this also flushes prefetch-queue */ + +.align 4 +.word 0 +idt_descr: + .word 256*8-1 # idt contains 256 entries + .long idt +.align 4 +.word 0 +gdt_descr: + .word 256*8-1 # so does gdt (not that that's any + .long gdt # magic number, but it works for me :^) + + .align 8 +idt: .fill 256,8,0 # idt is uninitialized + +gdt: .quad 0x0000000000000000 /* NULL descriptor */ + .quad 0x00c09a0000000fff /* 16Mb */ + .quad 0x00c0920000000fff /* 16Mb */ + .quad 0x0000000000000000 /* TEMPORARY - don't use */ + .fill 252,8,0 /* space for LDT's and TSS's etc */ diff --git a/linux-0.11-lab/cur/linux/boot/setup b/linux-0.11-lab/cur/linux/boot/setup new file mode 100644 index 0000000000000000000000000000000000000000..0e70f4846819f560fb2e22a8eb1e7186c7956ab0 GIT binary patch literal 344 zcmZQ%7GP0eU|_Id1QJNVq7lN`!7!ok#ujFS|7Qg{#TXd2bet7k%*3#TAIOzsVOY$@ zutjLIz*&LC91NXuTnwFjJPbP+82WA;HDh4}X+5yNfnlcr!{;SXQ3*l_<@!izwL4T8@UUNgLAc(wpUZcuop2&OfjEda<7{%Xg;=gL$t<~Tutazx3hbYqSrLZVca%ibUp9b?$HkVw;4TnF?Rz@46w`UObliF2LrIX1l zD$%Xa$Sgt^u2&7@|GQ@O1M(N{a&->*XRca94ek$5^Qt@KbHx4WGu-r2)9WkibQgy407%ZoGynhq literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/boot/setup.s b/linux-0.11-lab/cur/linux/boot/setup.s new file mode 100644 index 0000000..2329d00 --- /dev/null +++ b/linux-0.11-lab/cur/linux/boot/setup.s @@ -0,0 +1,231 @@ +! +! setup.s (C) 1991 Linus Torvalds +! +! setup.s is responsible for getting the system data from the BIOS, +! and putting them into the appropriate places in system memory. +! both setup.s and system has been loaded by the bootblock. +! +! This code asks the bios for memory/disk/other parameters, and +! puts them in a "safe" place: 0x90000-0x901FF, ie where the +! boot-block used to be. It is then up to the protected mode +! system to read them from there before the area is overwritten +! for buffer-blocks. +! + +! NOTE! These had better be the same as in bootsect.s! + +INITSEG = 0x9000 ! we move boot here - out of the way +SYSSEG = 0x1000 ! system loaded at 0x10000 (65536). +SETUPSEG = 0x9020 ! this is the current segment + +.globl begtext, begdata, begbss, endtext, enddata, endbss +.text +begtext: +.data +begdata: +.bss +begbss: +.text + +entry start +start: + +! ok, the read went well so we get current cursor position and save it for +! posterity. + + mov ax,#INITSEG ! this is done in bootsect already, but... + mov ds,ax + mov ah,#0x03 ! read cursor pos + xor bh,bh + int 0x10 ! save it in known place, con_init fetches + mov [0],dx ! it from 0x90000. + +! Get memory size (extended mem, kB) + + mov ah,#0x88 + int 0x15 + mov [2],ax + +! Get video-card data: + + mov ah,#0x0f + int 0x10 + mov [4],bx ! bh = display page + mov [6],ax ! al = video mode, ah = window width + +! check for EGA/VGA and some config parameters + + mov ah,#0x12 + mov bl,#0x10 + int 0x10 + mov [8],ax + mov [10],bx + mov [12],cx + +! Get hd0 data + + mov ax,#0x0000 + mov ds,ax + lds si,[4*0x41] + mov ax,#INITSEG + mov es,ax + mov di,#0x0080 + mov cx,#0x10 + rep + movsb + +! Get hd1 data + + mov ax,#0x0000 + mov ds,ax + lds si,[4*0x46] + mov ax,#INITSEG + mov es,ax + mov di,#0x0090 + mov cx,#0x10 + rep + movsb + +! Check that there IS a hd1 :-) + + mov ax,#0x01500 + mov dl,#0x81 + int 0x13 + jc no_disk1 + cmp ah,#3 + je is_disk1 +no_disk1: + mov ax,#INITSEG + mov es,ax + mov di,#0x0090 + mov cx,#0x10 + mov ax,#0x00 + rep + stosb +is_disk1: + +! now we want to move to protected mode ... + + cli ! no interrupts allowed ! + +! first we move the system to it's rightful place + + mov ax,#0x0000 + cld ! 'direction'=0, movs moves forward +do_move: + mov es,ax ! destination segment + add ax,#0x1000 + cmp ax,#0x9000 + jz end_move + mov ds,ax ! source segment + sub di,di + sub si,si + mov cx,#0x8000 + rep + movsw + jmp do_move + +! then we load the segment descriptors + +end_move: + mov ax,#SETUPSEG ! right, forgot this at first. didn't work :-) + mov ds,ax + lidt idt_48 ! load idt with 0,0 + lgdt gdt_48 ! load gdt with whatever appropriate + +! that was painless, now we enable A20 + + call empty_8042 + mov al,#0xD1 ! command write + out #0x64,al + call empty_8042 + mov al,#0xDF ! A20 on + out #0x60,al + call empty_8042 + +! well, that went ok, I hope. Now we have to reprogram the interrupts :-( +! we put them right after the intel-reserved hardware interrupts, at +! int 0x20-0x2F. There they won't mess up anything. Sadly IBM really +! messed this up with the original PC, and they haven't been able to +! rectify it afterwards. Thus the bios puts interrupts at 0x08-0x0f, +! which is used for the internal hardware interrupts as well. We just +! have to reprogram the 8259's, and it isn't fun. + + mov al,#0x11 ! initialization sequence + out #0x20,al ! send it to 8259A-1 + .word 0x00eb,0x00eb ! jmp $+2, jmp $+2 + out #0xA0,al ! and to 8259A-2 + .word 0x00eb,0x00eb + mov al,#0x20 ! start of hardware int's (0x20) + out #0x21,al + .word 0x00eb,0x00eb + mov al,#0x28 ! start of hardware int's 2 (0x28) + out #0xA1,al + .word 0x00eb,0x00eb + mov al,#0x04 ! 8259-1 is master + out #0x21,al + .word 0x00eb,0x00eb + mov al,#0x02 ! 8259-2 is slave + out #0xA1,al + .word 0x00eb,0x00eb + mov al,#0x01 ! 8086 mode for both + out #0x21,al + .word 0x00eb,0x00eb + out #0xA1,al + .word 0x00eb,0x00eb + mov al,#0xFF ! mask off all interrupts for now + out #0x21,al + .word 0x00eb,0x00eb + out #0xA1,al + +! well, that certainly wasn't fun :-(. Hopefully it works, and we don't +! need no steenking BIOS anyway (except for the initial loading :-). +! The BIOS-routine wants lots of unnecessary data, and it's less +! "interesting" anyway. This is how REAL programmers do it. +! +! Well, now's the time to actually move into protected mode. To make +! things as simple as possible, we do no register set-up or anything, +! we let the gnu-compiled 32-bit programs do that. We just jump to +! absolute address 0x00000, in 32-bit protected mode. + + mov ax,#0x0001 ! protected mode (PE) bit + lmsw ax ! This is it! + jmpi 0,8 ! jmp offset 0 of segment 8 (cs) + +! This routine checks that the keyboard command queue is empty +! No timeout is used - if this hangs there is something wrong with +! the machine, and we probably couldn't proceed anyway. +empty_8042: + .word 0x00eb,0x00eb + in al,#0x64 ! 8042 status port + test al,#2 ! is input buffer full? + jnz empty_8042 ! yes - loop + ret + +gdt: + .word 0,0,0,0 ! dummy + + .word 0x07FF ! 8Mb - limit=2047 (2048*4096=8Mb) + .word 0x0000 ! base address=0 + .word 0x9A00 ! code read/exec + .word 0x00C0 ! granularity=4096, 386 + + .word 0x07FF ! 8Mb - limit=2047 (2048*4096=8Mb) + .word 0x0000 ! base address=0 + .word 0x9200 ! data read/write + .word 0x00C0 ! granularity=4096, 386 + +idt_48: + .word 0 ! idt limit=0 + .word 0,0 ! idt base=0L + +gdt_48: + .word 0x800 ! gdt limit=2048, 256 GDT entries + .word 512+gdt,0x9 ! gdt base = 0X9xxxx + +.text +endtext: +.data +enddata: +.bss +endbss: diff --git a/linux-0.11-lab/cur/linux/fs/Makefile b/linux-0.11-lab/cur/linux/fs/Makefile new file mode 100644 index 0000000..970acd4 --- /dev/null +++ b/linux-0.11-lab/cur/linux/fs/Makefile @@ -0,0 +1,101 @@ +AR =ar +AS =as +LD =ld +LDFLAGS =-s -x +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -finline-functions -nostdinc -fno-stack-protector -I../include +CPP =gcc -E -nostdinc -I../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< +.s.o: + $(AS) -o $*.o $< + +OBJS= open.o read_write.o inode.o file_table.o buffer.o super.o \ + block_dev.o char_dev.o file_dev.o stat.o exec.o pipe.o namei.o \ + bitmap.o fcntl.o ioctl.o truncate.o select.o + +fs.o: $(OBJS) + $(LD) -r -o fs.o $(OBJS) + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +bitmap.o : bitmap.c ../include/string.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h +block_dev.o : block_dev.c ../include/errno.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h ../include/asm/system.h +buffer.o : buffer.c ../include/stdarg.h ../include/linux/config.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/sys/types.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/system.h ../include/asm/io.h +char_dev.o : char_dev.c ../include/errno.h ../include/sys/types.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h ../include/asm/io.h +exec.o : exec.c ../include/errno.h ../include/string.h \ + ../include/sys/stat.h ../include/sys/types.h ../include/a.out.h \ + ../include/linux/fs.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h +fcntl.o : fcntl.c ../include/string.h ../include/errno.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/sys/types.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/segment.h ../include/fcntl.h \ + ../include/sys/stat.h +file_dev.o : file_dev.c ../include/errno.h ../include/fcntl.h \ + ../include/sys/types.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/segment.h +file_table.o : file_table.c ../include/linux/fs.h ../include/sys/types.h +inode.o : inode.c ../include/string.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/system.h +ioctl.o : ioctl.c ../include/string.h ../include/errno.h \ + ../include/sys/stat.h ../include/sys/types.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \ + ../include/signal.h +namei.o : namei.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/linux/kernel.h ../include/asm/segment.h \ + ../include/string.h ../include/fcntl.h ../include/errno.h \ + ../include/const.h ../include/sys/stat.h +open.o : open.c ../include/string.h ../include/errno.h ../include/fcntl.h \ + ../include/sys/types.h ../include/utime.h ../include/sys/stat.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/tty.h \ + ../include/termios.h ../include/linux/kernel.h ../include/asm/segment.h +pipe.o : pipe.c ../include/signal.h ../include/sys/types.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/linux/mm.h ../include/asm/segment.h +read_write.o : read_write.c ../include/sys/stat.h ../include/sys/types.h \ + ../include/errno.h ../include/linux/kernel.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \ + ../include/signal.h ../include/asm/segment.h +stat.o : stat.c ../include/errno.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/linux/fs.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/segment.h +super.o : super.c ../include/linux/config.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/system.h ../include/errno.h ../include/sys/stat.h +truncate.o : truncate.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/sys/stat.h diff --git a/linux-0.11-lab/cur/linux/fs/bitmap.c b/linux-0.11-lab/cur/linux/fs/bitmap.c new file mode 100644 index 0000000..73951a8 --- /dev/null +++ b/linux-0.11-lab/cur/linux/fs/bitmap.c @@ -0,0 +1,168 @@ +/* + * linux/fs/bitmap.c + * + * (C) 1991 Linus Torvalds + */ + +/* bitmap.c contains the code that handles the inode and block bitmaps */ +#include + +#include +#include + +#define clear_block(addr) \ +__asm__ __volatile__ ("cld\n\t" \ + "rep\n\t" \ + "stosl" \ + ::"a" (0),"c" (BLOCK_SIZE/4),"D" ((long) (addr))) + +#define set_bit(nr,addr) ({\ +register int res __asm__("ax"); \ +__asm__ __volatile__("btsl %2,%3\n\tsetb %%al": \ +"=a" (res):"0" (0),"r" (nr),"m" (*(addr))); \ +res;}) + +#define clear_bit(nr,addr) ({\ +register int res __asm__("ax"); \ +__asm__ __volatile__("btrl %2,%3\n\tsetnb %%al": \ +"=a" (res):"0" (0),"r" (nr),"m" (*(addr))); \ +res;}) + +#define find_first_zero(addr) ({ \ +int __res; \ +__asm__ __volatile__ ("cld\n" \ + "1:\tlodsl\n\t" \ + "notl %%eax\n\t" \ + "bsfl %%eax,%%edx\n\t" \ + "je 2f\n\t" \ + "addl %%edx,%%ecx\n\t" \ + "jmp 3f\n" \ + "2:\taddl $32,%%ecx\n\t" \ + "cmpl $8192,%%ecx\n\t" \ + "jl 1b\n" \ + "3:" \ + :"=c" (__res):"c" (0),"S" (addr)); \ +__res;}) + +void free_block(int dev, int block) +{ + struct super_block * sb; + struct buffer_head * bh; + + if (!(sb = get_super(dev))) + panic("trying to free block on nonexistent device"); + if (block < sb->s_firstdatazone || block >= sb->s_nzones) + panic("trying to free block not in datazone"); + bh = get_hash_table(dev,block); + if (bh) { + if (bh->b_count != 1) { + printk("trying to free block (%04x:%d), count=%d\n", + dev,block,bh->b_count); + return; + } + bh->b_dirt=0; + bh->b_uptodate=0; + brelse(bh); + } + block -= sb->s_firstdatazone - 1 ; + if (clear_bit(block&8191,sb->s_zmap[block/8192]->b_data)) { + printk("block (%04x:%d) ",dev,block+sb->s_firstdatazone-1); + panic("free_block: bit already cleared"); + } + sb->s_zmap[block/8192]->b_dirt = 1; +} + +int new_block(int dev) +{ + struct buffer_head * bh; + struct super_block * sb; + int i,j; + + if (!(sb = get_super(dev))) + panic("trying to get new block from nonexistant device"); + j = 8192; + for (i=0 ; i<8 ; i++) + if (bh=sb->s_zmap[i]) + if ((j=find_first_zero(bh->b_data))<8192) + break; + if (i>=8 || !bh || j>=8192) + return 0; + if (set_bit(j,bh->b_data)) + panic("new_block: bit already set"); + bh->b_dirt = 1; + j += i*8192 + sb->s_firstdatazone-1; + if (j >= sb->s_nzones) + return 0; + if (!(bh=getblk(dev,j))) + panic("new_block: cannot get block"); + if (bh->b_count != 1) + panic("new block: count is != 1"); + clear_block(bh->b_data); + bh->b_uptodate = 1; + bh->b_dirt = 1; + brelse(bh); + return j; +} + +void free_inode(struct m_inode * inode) +{ + struct super_block * sb; + struct buffer_head * bh; + + if (!inode) + return; + if (!inode->i_dev) { + memset(inode,0,sizeof(*inode)); + return; + } + if (inode->i_count>1) { + printk("trying to free inode with count=%d\n",inode->i_count); + panic("free_inode"); + } + if (inode->i_nlinks) + panic("trying to free inode with links"); + if (!(sb = get_super(inode->i_dev))) + panic("trying to free inode on nonexistent device"); + if (inode->i_num < 1 || inode->i_num > sb->s_ninodes) + panic("trying to free inode 0 or nonexistant inode"); + if (!(bh=sb->s_imap[inode->i_num>>13])) + panic("nonexistent imap in superblock"); + if (clear_bit(inode->i_num&8191,bh->b_data)) + printk("free_inode: bit already cleared.\n\r"); + bh->b_dirt = 1; + memset(inode,0,sizeof(*inode)); +} + +struct m_inode * new_inode(int dev) +{ + struct m_inode * inode; + struct super_block * sb; + struct buffer_head * bh; + int i,j; + + if (!(inode=get_empty_inode())) + return NULL; + if (!(sb = get_super(dev))) + panic("new_inode with unknown device"); + j = 8192; + for (i=0 ; i<8 ; i++) + if (bh=sb->s_imap[i]) + if ((j=find_first_zero(bh->b_data))<8192) + break; + if (!bh || j >= 8192 || j+i*8192 > sb->s_ninodes) { + iput(inode); + return NULL; + } + if (set_bit(j,bh->b_data)) + panic("new_inode: bit already set"); + bh->b_dirt = 1; + inode->i_count=1; + inode->i_nlinks=1; + inode->i_dev=dev; + inode->i_uid=current->euid; + inode->i_gid=current->egid; + inode->i_dirt=1; + inode->i_num = j + i*8192; + inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; + return inode; +} diff --git a/linux-0.11-lab/cur/linux/fs/bitmap.o b/linux-0.11-lab/cur/linux/fs/bitmap.o new file mode 100644 index 0000000000000000000000000000000000000000..501d3c5e3fb1a044792589a0bdde55cbb41cfaa2 GIT binary patch literal 10280 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 J@|j5fe*vQQ&y@fG literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/fs/block_dev.c b/linux-0.11-lab/cur/linux/fs/block_dev.c new file mode 100644 index 0000000..a50ae3f --- /dev/null +++ b/linux-0.11-lab/cur/linux/fs/block_dev.c @@ -0,0 +1,73 @@ +/* + * linux/fs/block_dev.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +#include +#include +#include +#include + +int block_write(int dev, long * pos, char * buf, int count) +{ + int block = *pos >> BLOCK_SIZE_BITS; + int offset = *pos & (BLOCK_SIZE-1); + int chars; + int written = 0; + struct buffer_head * bh; + register char * p; + + while (count>0) { + chars = BLOCK_SIZE - offset; + if (chars > count) + chars=count; + if (chars == BLOCK_SIZE) + bh = getblk(dev,block); + else + bh = breada(dev,block,block+1,block+2,-1); + block++; + if (!bh) + return written?written:-EIO; + p = offset + bh->b_data; + offset = 0; + *pos += chars; + written += chars; + count -= chars; + while (chars-->0) + *(p++) = get_fs_byte(buf++); + bh->b_dirt = 1; + brelse(bh); + } + return written; +} + +int block_read(int dev, unsigned long * pos, char * buf, int count) +{ + int block = *pos >> BLOCK_SIZE_BITS; + int offset = *pos & (BLOCK_SIZE-1); + int chars; + int read = 0; + struct buffer_head * bh; + register char * p; + + while (count>0) { + chars = BLOCK_SIZE-offset; + if (chars > count) + chars = count; + if (!(bh = breada(dev,block,block+1,block+2,-1))) + return read?read:-EIO; + block++; + p = offset + bh->b_data; + offset = 0; + *pos += chars; + read += chars; + count -= chars; + while (chars-->0) + put_fs_byte(*(p++),buf++); + brelse(bh); + } + return read; +} diff --git a/linux-0.11-lab/cur/linux/fs/block_dev.o b/linux-0.11-lab/cur/linux/fs/block_dev.o new file mode 100644 index 0000000000000000000000000000000000000000..e5e9334ce9a4697061730271c4c9d92fcf4aa105 GIT binary patch literal 7296 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 + +#include +#include +#include +#include +#include + +extern void put_super(int dev); +extern void invalidate_inodes(int dev); + +extern int end; +struct buffer_head * start_buffer = (struct buffer_head *) &end; +struct buffer_head * hash_table[NR_HASH]; +static struct buffer_head * free_list; +static struct task_struct * buffer_wait = NULL; +int NR_BUFFERS = 0; + +static inline void wait_on_buffer(struct buffer_head * bh) +{ + cli(); + while (bh->b_lock) + sleep_on(&bh->b_wait); + sti(); +} + +int sys_sync(void) +{ + int i; + struct buffer_head * bh; + + sync_inodes(); /* write out inodes into buffers */ + bh = start_buffer; + for (i=0 ; ib_dirt) + ll_rw_block(WRITE,bh); + } + return 0; +} + +int sync_dev(int dev) +{ + int i; + struct buffer_head * bh; + + bh = start_buffer; + for (i=0 ; ib_dev != dev) + continue; + wait_on_buffer(bh); + if (bh->b_dev == dev && bh->b_dirt) + ll_rw_block(WRITE,bh); + } + sync_inodes(); + bh = start_buffer; + for (i=0 ; ib_dev != dev) + continue; + wait_on_buffer(bh); + if (bh->b_dev == dev && bh->b_dirt) + ll_rw_block(WRITE,bh); + } + return 0; +} + +void inline invalidate_buffers(int dev) +{ + int i; + struct buffer_head * bh; + + bh = start_buffer; + for (i=0 ; ib_dev != dev) + continue; + wait_on_buffer(bh); + if (bh->b_dev == dev) + bh->b_uptodate = bh->b_dirt = 0; + } +} + +/* + * This routine checks whether a floppy has been changed, and + * invalidates all buffer-cache-entries in that case. This + * is a relatively slow routine, so we have to try to minimize using + * it. Thus it is called only upon a 'mount' or 'open'. This + * is the best way of combining speed and utility, I think. + * People changing diskettes in the middle of an operation deserve + * to loose :-) + * + * NOTE! Although currently this is only for floppies, the idea is + * that any additional removable block-device will use this routine, + * and that mount/open needn't know that floppies/whatever are + * special. + */ +void check_disk_change(int dev) +{ + int i; + + if (MAJOR(dev) != 2) + return; + if (!floppy_change(dev & 0x03)) + return; + for (i=0 ; ib_next) + bh->b_next->b_prev = bh->b_prev; + if (bh->b_prev) + bh->b_prev->b_next = bh->b_next; + if (hash(bh->b_dev,bh->b_blocknr) == bh) + hash(bh->b_dev,bh->b_blocknr) = bh->b_next; +/* remove from free list */ + if (!(bh->b_prev_free) || !(bh->b_next_free)) + panic("Free block list corrupted"); + bh->b_prev_free->b_next_free = bh->b_next_free; + bh->b_next_free->b_prev_free = bh->b_prev_free; + if (free_list == bh) + free_list = bh->b_next_free; +} + +static inline void insert_into_queues(struct buffer_head * bh) +{ +/* put at end of free list */ + bh->b_next_free = free_list; + bh->b_prev_free = free_list->b_prev_free; + free_list->b_prev_free->b_next_free = bh; + free_list->b_prev_free = bh; +/* put the buffer in new hash-queue if it has a device */ + bh->b_prev = NULL; + bh->b_next = NULL; + if (!bh->b_dev) + return; + bh->b_next = hash(bh->b_dev,bh->b_blocknr); + hash(bh->b_dev,bh->b_blocknr) = bh; + bh->b_next->b_prev = bh; +} + +static struct buffer_head * find_buffer(int dev, int block) +{ + struct buffer_head * tmp; + + for (tmp = hash(dev,block) ; tmp != NULL ; tmp = tmp->b_next) + if (tmp->b_dev==dev && tmp->b_blocknr==block) + return tmp; + return NULL; +} + +/* + * Why like this, I hear you say... The reason is race-conditions. + * As we don't lock buffers (unless we are readint them, that is), + * something might happen to it while we sleep (ie a read-error + * will force it bad). This shouldn't really happen currently, but + * the code is ready. + */ +struct buffer_head * get_hash_table(int dev, int block) +{ + struct buffer_head * bh; + + for (;;) { + if (!(bh=find_buffer(dev,block))) + return NULL; + bh->b_count++; + wait_on_buffer(bh); + if (bh->b_dev == dev && bh->b_blocknr == block) + return bh; + bh->b_count--; + } +} + +/* + * Ok, this is getblk, and it isn't very clear, again to hinder + * race-conditions. Most of the code is seldom used, (ie repeating), + * so it should be much more efficient than it looks. + * + * The algoritm is changed: hopefully better, and an elusive bug removed. + */ +#define BADNESS(bh) (((bh)->b_dirt<<1)+(bh)->b_lock) +struct buffer_head * getblk(int dev,int block) +{ + struct buffer_head * tmp, * bh; + +repeat: + if (bh = get_hash_table(dev,block)) + return bh; + tmp = free_list; + do { + if (tmp->b_count) + continue; + if (!bh || BADNESS(tmp)b_next_free) != free_list); + if (!bh) { + sleep_on(&buffer_wait); + goto repeat; + } + wait_on_buffer(bh); + if (bh->b_count) + goto repeat; + while (bh->b_dirt) { + sync_dev(bh->b_dev); + wait_on_buffer(bh); + if (bh->b_count) + goto repeat; + } +/* NOTE!! While we slept waiting for this block, somebody else might */ +/* already have added "this" block to the cache. check it */ + if (find_buffer(dev,block)) + goto repeat; +/* OK, FINALLY we know that this buffer is the only one of it's kind, */ +/* and that it's unused (b_count=0), unlocked (b_lock=0), and clean */ + bh->b_count=1; + bh->b_dirt=0; + bh->b_uptodate=0; + remove_from_queues(bh); + bh->b_dev=dev; + bh->b_blocknr=block; + insert_into_queues(bh); + return bh; +} + +void brelse(struct buffer_head * buf) +{ + if (!buf) + return; + wait_on_buffer(buf); + if (!(buf->b_count--)) + panic("Trying to free free buffer"); + wake_up(&buffer_wait); +} + +/* + * bread() reads a specified block and returns the buffer that contains + * it. It returns NULL if the block was unreadable. + */ +struct buffer_head * bread(int dev,int block) +{ + struct buffer_head * bh; + + if (!(bh=getblk(dev,block))) + panic("bread: getblk returned NULL\n"); + if (bh->b_uptodate) + return bh; + ll_rw_block(READ,bh); + wait_on_buffer(bh); + if (bh->b_uptodate) + return bh; + brelse(bh); + return NULL; +} + +#define COPYBLK(from,to) \ +__asm__("cld\n\t" \ + "rep\n\t" \ + "movsl\n\t" \ + ::"c" (BLOCK_SIZE/4),"S" (from),"D" (to) \ + ) + +/* + * bread_page reads four buffers into memory at the desired address. It's + * a function of its own, as there is some speed to be got by reading them + * all at the same time, not waiting for one to be read, and then another + * etc. + */ +void bread_page(unsigned long address,int dev,int b[4]) +{ + struct buffer_head * bh[4]; + int i; + + for (i=0 ; i<4 ; i++) + if (b[i]) { + if (bh[i] = getblk(dev,b[i])) + if (!bh[i]->b_uptodate) + ll_rw_block(READ,bh[i]); + } else + bh[i] = NULL; + for (i=0 ; i<4 ; i++,address += BLOCK_SIZE) + if (bh[i]) { + wait_on_buffer(bh[i]); + if (bh[i]->b_uptodate) + COPYBLK((unsigned long) bh[i]->b_data,address); + brelse(bh[i]); + } +} + +/* + * Ok, breada can be used as bread, but additionally to mark other + * blocks for reading as well. End the argument list with a negative + * number. + */ +struct buffer_head * breada(int dev,int first, ...) +{ + va_list args; + struct buffer_head * bh, *tmp; + + va_start(args,first); + if (!(bh=getblk(dev,first))) + panic("bread: getblk returned NULL\n"); + if (!bh->b_uptodate) + ll_rw_block(READ,bh); + while ((first=va_arg(args,int))>=0) { + tmp=getblk(dev,first); + if (tmp) { + if (!tmp->b_uptodate) + ll_rw_block(READA,bh); + tmp->b_count--; + } + } + va_end(args); + wait_on_buffer(bh); + if (bh->b_uptodate) + return bh; + brelse(bh); + return (NULL); +} + +void buffer_init(long buffer_end) +{ + struct buffer_head * h = start_buffer; + void * b; + int i; + + if (buffer_end == 1<<20) + b = (void *) (640*1024); + else + b = (void *) buffer_end; + while ( (b -= BLOCK_SIZE) >= ((void *) (h+1)) ) { + h->b_dev = 0; + h->b_dirt = 0; + h->b_count = 0; + h->b_lock = 0; + h->b_uptodate = 0; + h->b_wait = NULL; + h->b_next = NULL; + h->b_prev = NULL; + h->b_data = (char *) b; + h->b_prev_free = h-1; + h->b_next_free = h+1; + h++; + NR_BUFFERS++; + if (b == (void *) 0x100000) + b = (void *) 0xA0000; + } + h--; + free_list = start_buffer; + free_list->b_prev_free = h; + h->b_next_free = free_list; + for (i=0;iQ6+~nZ1VPZCP{pdlWadpWGMO3Y4-glv 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 +#include + +#include +#include + +#include +#include + +extern int tty_read(unsigned minor,char * buf,int count); +extern int tty_write(unsigned minor,char * buf,int count); + +typedef (*crw_ptr)(int rw,unsigned minor,char * buf,int count,off_t * pos); + +static int rw_ttyx(int rw,unsigned minor,char * buf,int count,off_t * pos) +{ + return ((rw==READ)?tty_read(minor,buf,count): + tty_write(minor,buf,count)); +} + +static int rw_tty(int rw,unsigned minor,char * buf,int count, off_t * pos) +{ + if (current->tty<0) + return -EPERM; + return rw_ttyx(rw,current->tty,buf,count,pos); +} + +static int rw_ram(int rw,char * buf, int count, off_t *pos) +{ + return -EIO; +} + +static int rw_mem(int rw,char * buf, int count, off_t * pos) +{ + return -EIO; +} + +static int rw_kmem(int rw,char * buf, int count, off_t * pos) +{ + return -EIO; +} + +static int rw_port(int rw,char * buf, int count, off_t * pos) +{ + int i=*pos; + + while (count-->0 && i<65536) { + if (rw==READ) + put_fs_byte(inb(i),buf++); + else + outb(get_fs_byte(buf++),i); + i++; + } + i -= *pos; + *pos += i; + return i; +} + +static int rw_memory(int rw, unsigned minor, char * buf, int count, off_t * pos) +{ + switch(minor) { + case 0: + return rw_ram(rw,buf,count,pos); + case 1: + return rw_mem(rw,buf,count,pos); + case 2: + return rw_kmem(rw,buf,count,pos); + case 3: + return (rw==READ)?0:count; /* rw_null */ + case 4: + return rw_port(rw,buf,count,pos); + default: + return -EIO; + } +} + +#define NRDEVS ((sizeof (crw_table))/(sizeof (crw_ptr))) + +static crw_ptr crw_table[]={ + NULL, /* nodev */ + rw_memory, /* /dev/mem etc */ + NULL, /* /dev/fd */ + NULL, /* /dev/hd */ + rw_ttyx, /* /dev/ttyx */ + rw_tty, /* /dev/tty */ + NULL, /* /dev/lp */ + NULL}; /* unnamed pipes */ + +int rw_char(int rw,int dev, char * buf, int count, off_t * pos) +{ + crw_ptr call_addr; + + if (MAJOR(dev)>=NRDEVS) + return -ENODEV; + if (!(call_addr=crw_table[MAJOR(dev)])) + return -ENODEV; + return call_addr(rw,MINOR(dev),buf,count,pos); +} diff --git a/linux-0.11-lab/cur/linux/fs/char_dev.o b/linux-0.11-lab/cur/linux/fs/char_dev.o new file mode 100644 index 0000000000000000000000000000000000000000..2977060a7c0b215e10aa16a8395ed973d52837cd GIT binary patch literal 8288 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 O%Ys)0UlIH-!T$wZ8WjQn literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/fs/exec.c b/linux-0.11-lab/cur/linux/fs/exec.c new file mode 100644 index 0000000..6b9ffc0 --- /dev/null +++ b/linux-0.11-lab/cur/linux/fs/exec.c @@ -0,0 +1,545 @@ +/* + * linux/fs/exec.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * #!-checking implemented by tytso. + */ + +/* + * Demand-loading implemented 01.12.91 - no need to read anything but + * the header into memory. The inode of the executable is put into + * "current->executable", and page faults do the actual loading. Clean. + * + * Once more I can proudly say that linux stood up to being changed: it + * was less than 2 hours work to get demand-loading completely implemented. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +extern int sys_exit(int exit_code); +extern int sys_close(int fd); + +/* + * MAX_ARG_PAGES defines the number of pages allocated for arguments + * and envelope for the new program. 32 should suffice, this gives + * a maximum env+arg of 128kB ! + */ +#define MAX_ARG_PAGES 32 + + +int sys_uselib() +{ + return -ENOSYS; +} + +/* + * create_tables() parses the env- and arg-strings in new user + * memory and creates the pointer tables from them, and puts their + * addresses on the "stack", returning the new stack pointer value. + */ +static unsigned long * create_tables(char * p,int argc,int envc) +{ + unsigned long *argv,*envp; + unsigned long * sp; + + sp = (unsigned long *) (0xfffffffc & (unsigned long) p); + sp -= envc+1; + envp = sp; + sp -= argc+1; + argv = sp; + put_fs_long((unsigned long)envp,--sp); + put_fs_long((unsigned long)argv,--sp); + put_fs_long((unsigned long)argc,--sp); + while (argc-->0) { + put_fs_long((unsigned long) p,argv++); + while (get_fs_byte(p++)) /* nothing */ ; + } + put_fs_long(0,argv); + while (envc-->0) { + put_fs_long((unsigned long) p,envp++); + while (get_fs_byte(p++)) /* nothing */ ; + } + put_fs_long(0,envp); + return sp; +} + +/* + * count() counts the number of arguments/envelopes + */ +static int count(char ** argv) +{ + int i=0; + char ** tmp; + + if (tmp = argv) + while (get_fs_long((unsigned long *) (tmp++))) + i++; + + return i; +} + +/* + * 'copy_string()' copies argument/envelope strings from user + * memory to free pages in kernel mem. These are in a format ready + * to be put directly into the top of new user memory. + * + * Modified by TYT, 11/24/91 to add the from_kmem argument, which specifies + * whether the string and the string array are from user or kernel segments: + * + * from_kmem argv * argv ** + * 0 user space user space + * 1 kernel space user space + * 2 kernel space kernel space + * + * We do this by playing games with the fs segment register. Since it + * it is expensive to load a segment register, we try to avoid calling + * set_fs() unless we absolutely have to. + */ +static unsigned long copy_strings(int argc,char ** argv,unsigned long *page, + unsigned long p, int from_kmem) +{ + char *tmp, *pag; + int len, offset = 0; + unsigned long old_fs, new_fs; + + if (!p) + return 0; /* bullet-proofing */ + new_fs = get_ds(); + old_fs = get_fs(); + if (from_kmem==2) + set_fs(new_fs); + while (argc-- > 0) { + if (from_kmem == 1) + set_fs(new_fs); + if (!(tmp = (char *)get_fs_long(((unsigned long *)argv)+argc))) + panic("argc is wrong"); + if (from_kmem == 1) + set_fs(old_fs); + len=0; /* remember zero-padding */ + do { + len++; + } while (get_fs_byte(tmp++)); + if (p-len < 0) { /* this shouldn't happen - 128kB */ + set_fs(old_fs); + return 0; + } + while (len) { + --p; --tmp; --len; + if (--offset < 0) { + offset = p % PAGE_SIZE; + if (from_kmem==2) + set_fs(old_fs); + if (!(pag = (char *) page[p/PAGE_SIZE]) && + !(pag = (char *) (page[p/PAGE_SIZE] = + (unsigned long *) get_free_page()))) + return 0; + if (from_kmem==2) + set_fs(new_fs); + + } + *(pag + offset) = get_fs_byte(tmp); + } + } + if (from_kmem==2) + set_fs(old_fs); + return p; +} + +static unsigned long change_ldt(unsigned long text_size,unsigned long * page) +{ + unsigned long code_limit,data_limit,code_base,data_base; + int i; + + code_limit = text_size+PAGE_SIZE -1; + code_limit &= 0xFFFFF000; + data_limit = 0x4000000; + code_base = get_base(current->ldt[1]); + data_base = code_base; + set_base(current->ldt[1],code_base); + set_limit(current->ldt[1],code_limit); + set_base(current->ldt[2],data_base); + set_limit(current->ldt[2],data_limit); +/* make sure fs points to the NEW data segment */ + __asm__("pushl $0x17\n\tpop %%fs"::); + data_base += data_limit; + for (i=MAX_ARG_PAGES-1 ; i>=0 ; i--) { + data_base -= PAGE_SIZE; + if (page[i]) + put_page(page[i],data_base); + } + return data_limit; +} + +/* + * 'do_execve()' executes a new program. + */ +int do_execve(unsigned long * eip,long tmp,char * filename, + char ** argv, char ** envp) +{ + struct m_inode * inode; + struct buffer_head * bh; + struct exec ex; + unsigned long page[MAX_ARG_PAGES]; + int i,argc,envc; + int e_uid, e_gid; + int retval; + int sh_bang = 0; + unsigned long p=PAGE_SIZE*MAX_ARG_PAGES-4; + + if ((0xffff & eip[1]) != 0x000f) + panic("execve called from supervisor mode"); + for (i=0 ; ii_mode)) { /* must be regular file */ + retval = -EACCES; + goto exec_error2; + } + i = inode->i_mode; + e_uid = (i & S_ISUID) ? inode->i_uid : current->euid; + e_gid = (i & S_ISGID) ? inode->i_gid : current->egid; + if (current->euid == inode->i_uid) + i >>= 6; + else if (current->egid == inode->i_gid) + i >>= 3; + if (!(i & 1) && + !((inode->i_mode & 0111) && suser())) { + retval = -ENOEXEC; + goto exec_error2; + } + if (!(bh = bread(inode->i_dev,inode->i_zone[0]))) { + retval = -EACCES; + goto exec_error2; + } + ex = *((struct exec *) bh->b_data); /* read exec-header */ + if ((bh->b_data[0] == '#') && (bh->b_data[1] == '!') && (!sh_bang)) { + /* + * This section does the #! interpretation. + * Sorta complicated, but hopefully it will work. -TYT + */ + + char buf[1023], *cp, *interp, *i_name, *i_arg; + unsigned long old_fs; + + strncpy(buf, bh->b_data+2, 1022); + brelse(bh); + iput(inode); + buf[1022] = '\0'; + if (cp = strchr(buf, '\n')) { + *cp = '\0'; + for (cp = buf; (*cp == ' ') || (*cp == '\t'); cp++); + } + if (!cp || *cp == '\0') { + retval = -ENOEXEC; /* No interpreter name found */ + goto exec_error1; + } + interp = i_name = cp; + i_arg = 0; + for ( ; *cp && (*cp != ' ') && (*cp != '\t'); cp++) { + if (*cp == '/') + i_name = cp+1; + } + if (*cp) { + *cp++ = '\0'; + i_arg = cp; + } + /* + * OK, we've parsed out the interpreter name and + * (optional) argument. + */ + if (sh_bang++ == 0) { + p = copy_strings(envc, envp, page, p, 0); + p = copy_strings(--argc, argv+1, page, p, 0); + } + /* + * Splice in (1) the interpreter's name for argv[0] + * (2) (optional) argument to interpreter + * (3) filename of shell script + * + * This is done in reverse order, because of how the + * user environment and arguments are stored. + */ + p = copy_strings(1, &filename, page, p, 1); + argc++; + if (i_arg) { + p = copy_strings(1, &i_arg, page, p, 2); + argc++; + } + p = copy_strings(1, &i_name, page, p, 2); + argc++; + if (!p) { + retval = -ENOMEM; + goto exec_error1; + } + /* + * OK, now restart the process with the interpreter's inode. + */ + old_fs = get_fs(); + set_fs(get_ds()); + if (!(inode=namei(interp))) { /* get executables inode */ + set_fs(old_fs); + retval = -ENOENT; + goto exec_error1; + } + set_fs(old_fs); + goto restart_interp; + } + brelse(bh); + if (N_MAGIC(ex) != ZMAGIC || ex.a_trsize || ex.a_drsize || + ex.a_text+ex.a_data+ex.a_bss>0x3000000 || + inode->i_size < ex.a_text+ex.a_data+ex.a_syms+N_TXTOFF(ex)) { + retval = -ENOEXEC; + goto exec_error2; + } + if (N_TXTOFF(ex) != BLOCK_SIZE) { + printk("%s: N_TXTOFF != BLOCK_SIZE. See a.out.h.", filename); + retval = -ENOEXEC; + goto exec_error2; + } + if (!sh_bang) { + p = copy_strings(envc,envp,page,p,0); + p = copy_strings(argc,argv,page,p,0); + if (!p) { + retval = -ENOMEM; + goto exec_error2; + } + } +/* OK, This is the point of no return */ + if (current->executable) + iput(current->executable); + current->executable = inode; + for (i=0 ; i<32 ; i++) + current->sigaction[i].sa_handler = NULL; + for (i=0 ; iclose_on_exec>>i)&1) + sys_close(i); + current->close_on_exec = 0; + free_page_tables(get_base(current->ldt[1]),get_limit(0x0f)); + free_page_tables(get_base(current->ldt[2]),get_limit(0x17)); + if (last_task_used_math == current) + last_task_used_math = NULL; + current->used_math = 0; + p += change_ldt(ex.a_text,page)-MAX_ARG_PAGES*PAGE_SIZE; + p = (unsigned long) create_tables((char *)p,argc,envc); + current->brk = ex.a_bss + + (current->end_data = ex.a_data + + (current->end_code = ex.a_text)); + current->start_stack = p & 0xfffff000; + current->euid = e_uid; + current->egid = e_gid; + i = ex.a_text+ex.a_data; + while (i&0xfff) + put_fs_byte(0,(char *) (i++)); + eip[0] = ex.a_entry; /* eip, magic happens :-) */ + eip[3] = p; /* stack pointer */ + return 0; +exec_error2: + iput(inode); +exec_error1: + for (i=0 ; ii_mode)) { /* must be regular file */ + retval = -EACCES; + goto exec_error2; + } + i = inode->i_mode; + e_uid = (i & S_ISUID) ? inode->i_uid : current->euid; + e_gid = (i & S_ISGID) ? inode->i_gid : current->egid; + if (current->euid == inode->i_uid) + i >>= 6; + else if (current->egid == inode->i_gid) + i >>= 3; + if (!(i & 1) && + !((inode->i_mode & 0111) && suser())) { + retval = -ENOEXEC; + goto exec_error2; + } + if (!(bh = bread(inode->i_dev,inode->i_zone[0]))) { + retval = -EACCES; + goto exec_error2; + } + ex = *((struct exec *) bh->b_data); /* read exec-header */ + if ((bh->b_data[0] == '#') && (bh->b_data[1] == '!') && (!sh_bang)) { + /* + * This section does the #! interpretation. + * Sorta complicated, but hopefully it will work. -TYT + */ + + char buf[1023], *cp, *interp, *i_name, *i_arg; + unsigned long old_fs; + + strncpy(buf, bh->b_data+2, 1022); + brelse(bh); + iput(inode); + buf[1022] = '\0'; + if (cp = strchr(buf, '\n')) { + *cp = '\0'; + for (cp = buf; (*cp == ' ') || (*cp == '\t'); cp++); + } + if (!cp || *cp == '\0') { + retval = -ENOEXEC; /* No interpreter name found */ + goto exec_error1; + } + interp = i_name = cp; + i_arg = 0; + for ( ; *cp && (*cp != ' ') && (*cp != '\t'); cp++) { + if (*cp == '/') + i_name = cp+1; + } + if (*cp) { + *cp++ = '\0'; + i_arg = cp; + } + /* + * OK, we've parsed out the interpreter name and + * (optional) argument. + */ + if (sh_bang++ == 0) { + p = copy_strings(envc, envp, page, p, 0); + p = copy_strings(--argc, argv+1, page, p, 0); + } + /* + * Splice in (1) the interpreter's name for argv[0] + * (2) (optional) argument to interpreter + * (3) filename of shell script + * + * This is done in reverse order, because of how the + * user environment and arguments are stored. + */ + p = copy_strings(1, &filename, page, p, 1); + argc++; + if (i_arg) { + p = copy_strings(1, &i_arg, page, p, 2); + argc++; + } + p = copy_strings(1, &i_name, page, p, 2); + argc++; + if (!p) { + retval = -ENOMEM; + goto exec_error1; + } + /* + * OK, now restart the process with the interpreter's inode. + */ + old_fs = get_fs(); + set_fs(get_ds()); + if (!(inode=namei(interp))) { /* get executables inode */ + set_fs(old_fs); + retval = -ENOENT; + goto exec_error1; + } + set_fs(old_fs); + goto restart_interp; + } + brelse(bh); + if (N_MAGIC(ex) != ZMAGIC || ex.a_trsize || ex.a_drsize || + ex.a_text+ex.a_data+ex.a_bss>0x3000000 || + inode->i_size < ex.a_text+ex.a_data+ex.a_syms+N_TXTOFF(ex)) { + retval = -ENOEXEC; + goto exec_error2; + } + if (N_TXTOFF(ex) != BLOCK_SIZE) { + printk("%s: N_TXTOFF != BLOCK_SIZE. See a.out.h.", filename); + retval = -ENOEXEC; + goto exec_error2; + } + if (!sh_bang) { + p = copy_strings(envc,envp,page,p,0); + p = copy_strings(argc,argv,page,p,0); + if (!p) { + retval = -ENOMEM; + goto exec_error2; + } + } +/* OK, This is the point of no return */ + if (current->executable) + iput(current->executable); + current->executable = inode; + for (i=0 ; i<32 ; i++) + current->sigaction[i].sa_handler = NULL; + for (i=0 ; iclose_on_exec>>i)&1) + sys_close(i); + current->close_on_exec = 0; + free_page_tables(get_base(current->ldt[1]),get_limit(0x0f)); + free_page_tables(get_base(current->ldt[2]),get_limit(0x17)); + if (last_task_used_math == current) + last_task_used_math = NULL; + current->used_math = 0; + p += change_ldt(ex.a_text,page)-MAX_ARG_PAGES*PAGE_SIZE; + p = (unsigned long) create_tables((char *)p,argc,envc); + current->brk = ex.a_bss + + (current->end_data = ex.a_data + + (current->end_code = ex.a_text)); + current->start_stack = p & 0xfffff000; + current->euid = e_uid; + current->egid = e_gid; + /*********begin*********/ + unsigned long k; + for(k=0;k<=(current->brk-1)&0xfffff000;k+=4096) + { + load_all(5,k+current->start_code); + } + + /*********end***********/ + i = ex.a_text+ex.a_data; + while (i&0xfff) + put_fs_byte(0,(char *) (i++)); + eip[0] = ex.a_entry; /* eip, magic happens :-) */ + eip[3] = p; /* stack pointer */ + return 0; +exec_error2: + iput(inode); +exec_error1: + for (i=0 ; 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/fs/fcntl.c b/linux-0.11-lab/cur/linux/fs/fcntl.c new file mode 100644 index 0000000..c201aa8 --- /dev/null +++ b/linux-0.11-lab/cur/linux/fs/fcntl.c @@ -0,0 +1,75 @@ +/* + * linux/fs/fcntl.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include +#include +#include +#include + +#include +#include + +extern int sys_close(int fd); + +static int dupfd(unsigned int fd, unsigned int arg) +{ + if (fd >= NR_OPEN || !current->filp[fd]) + return -EBADF; + if (arg >= NR_OPEN) + return -EINVAL; + while (arg < NR_OPEN) + if (current->filp[arg]) + arg++; + else + break; + if (arg >= NR_OPEN) + return -EMFILE; + current->close_on_exec &= ~(1<filp[arg] = current->filp[fd])->f_count++; + return arg; +} + +int sys_dup2(unsigned int oldfd, unsigned int newfd) +{ + sys_close(newfd); + return dupfd(oldfd,newfd); +} + +int sys_dup(unsigned int fildes) +{ + return dupfd(fildes,0); +} + +int sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + struct file * filp; + + if (fd >= NR_OPEN || !(filp = current->filp[fd])) + return -EBADF; + switch (cmd) { + case F_DUPFD: + return dupfd(fd,arg); + case F_GETFD: + return (current->close_on_exec>>fd)&1; + case F_SETFD: + if (arg&1) + current->close_on_exec |= (1<close_on_exec &= ~(1<f_flags; + case F_SETFL: + filp->f_flags &= ~(O_APPEND | O_NONBLOCK); + filp->f_flags |= arg & (O_APPEND | O_NONBLOCK); + return 0; + case F_GETLK: case F_SETLK: case F_SETLKW: + return -1; + default: + return -1; + } +} diff --git a/linux-0.11-lab/cur/linux/fs/fcntl.o b/linux-0.11-lab/cur/linux/fs/fcntl.o new file mode 100644 index 0000000000000000000000000000000000000000..b44314bb70d40ff28034523fc6bfc29aa0507651 GIT binary patch literal 6748 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/fs/file_dev.c b/linux-0.11-lab/cur/linux/fs/file_dev.c new file mode 100644 index 0000000..0458f02 --- /dev/null +++ b/linux-0.11-lab/cur/linux/fs/file_dev.c @@ -0,0 +1,125 @@ +/* + * linux/fs/file_dev.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include + +#include +#include +#include + +#define MIN(a,b) (((a)<(b))?(a):(b)) +#define MAX(a,b) (((a)>(b))?(a):(b)) + +int file_read(struct m_inode * inode, struct file * filp, char * buf, int count) +{ + int left,chars,nr; + struct buffer_head * bh; + + if ((left=count)<=0) + return 0; + while (left) { + if (nr = bmap(inode,(filp->f_pos)/BLOCK_SIZE)) { + if (!(bh=bread(inode->i_dev,nr))) + break; + } else + bh = NULL; + nr = filp->f_pos % BLOCK_SIZE; + chars = MIN( BLOCK_SIZE-nr , left ); + filp->f_pos += chars; + left -= chars; + if (bh) { + char * p = nr + bh->b_data; + while (chars-->0) + put_fs_byte(*(p++),buf++); + brelse(bh); + } else { + while (chars-->0) + put_fs_byte(0,buf++); + } + } + inode->i_atime = CURRENT_TIME; + return (count-left)?(count-left):-ERROR; +} +int my_file_read(struct m_inode * inode, struct file * filp, char * buf, int count) +{ + int left,chars,nr; + struct buffer_head * bh; + + if ((left=count)<=0) + return 0; + while (left) { + if (nr = bmap(inode,(filp->f_pos)/BLOCK_SIZE)) { + if (!(bh=bread(inode->i_dev,nr))) + break; + } else + bh = NULL; + nr = filp->f_pos % BLOCK_SIZE; + chars = MIN( BLOCK_SIZE-nr , left ); + filp->f_pos += chars; + left -= chars; + if (bh) { + char * p = nr + bh->b_data; + while (chars-->0){ + *buf = *(p++); + ++buf; + } +/* put_fs_byte(*(p++),buf++);*/ + brelse(bh); + } else { + while (chars-->0){ + *buf = '\0'; + ++buf; + } +/* put_fs_byte(0,buf++);*/ + } + } + inode->i_atime = CURRENT_TIME; + return (count-left)?(count-left):-ERROR; +} +int file_write(struct m_inode * inode, struct file * filp, char * buf, int count) +{ + off_t pos; + int block,c; + struct buffer_head * bh; + char * p; + int i=0; + +/* + * ok, append may not work when many processes are writing at the same time + * but so what. That way leads to madness anyway. + */ + if (filp->f_flags & O_APPEND) + pos = inode->i_size; + else + pos = filp->f_pos; + while (ii_dev,block))) + break; + c = pos % BLOCK_SIZE; + p = c + bh->b_data; + bh->b_dirt = 1; + c = BLOCK_SIZE-c; + if (c > count-i) c = count-i; + pos += c; + if (pos > inode->i_size) { + inode->i_size = pos; + inode->i_dirt = 1; + } + i += c; + while (c-->0) + *(p++) = get_fs_byte(buf++); + brelse(bh); + } + inode->i_mtime = CURRENT_TIME; + if (!(filp->f_flags & O_APPEND)) { + filp->f_pos = pos; + inode->i_ctime = CURRENT_TIME; + } + return (i?i:-1); +} diff --git a/linux-0.11-lab/cur/linux/fs/file_dev.o b/linux-0.11-lab/cur/linux/fs/file_dev.o new file mode 100644 index 0000000000000000000000000000000000000000..b58fe3710bc85c7b4abed50202d458b2ac7b68b4 GIT binary patch literal 8624 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/fs/file_table.c b/linux-0.11-lab/cur/linux/fs/file_table.c new file mode 100644 index 0000000..e0589ac --- /dev/null +++ b/linux-0.11-lab/cur/linux/fs/file_table.c @@ -0,0 +1,9 @@ +/* + * linux/fs/file_table.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +struct file file_table[NR_FILE]; diff --git a/linux-0.11-lab/cur/linux/fs/file_table.o b/linux-0.11-lab/cur/linux/fs/file_table.o new file mode 100644 index 0000000000000000000000000000000000000000..422bcb331f1423abef699440aa5b0f0ff3a8b671 GIT binary patch literal 2644 zcma)8ONbmr7_OR`-P!Hgo!w=9BnF`a8xkecvzttkb&W;|x+aF`!4(DLY)?=3Ogq!v zV?VOl_&SK&K#0s-B=xPW^?j%FhrbeTlMCJwT9?XVawWCSbyVX|l2jSv>;r0{YaW6k_^T zz^c43M3{C3LO#m~p?wD-+vFv!O1}9tWJUXp+$5jUK4*OA9`G6MD!D~It9?Y?9e~%h zNpi;q*R@lSvd7#dtx0>I{E+r8?Jnm!to=&<9J!$#WXynkS-U~|kmDcG>f|2zQB7xz zPu|k*q&*-%ra=ffB0sKOX3X>CC&cs`U|z-_!=_!MBjE%>dy4!bc}e?}e2cuIh2)nQ zKBe73zWo5~GpHxaSY_e9qLcMJC2H@1m#062oG8PB_yu{OzE~^Q_tocb$KXq%R=Xc6 z!W5mtG`ERzeXVwH?aU$)7onWoi!GZ&EG<G-(`FDL5GCjLkzBG)c>s!O5Yd43kpIj0J zL$ni?^gGLma)}S#8gV?s>Amp;_i=x>NJiF;9-MAS< z4d33%KD)7OtgJMKW~aHF8JbRnjKu9i4g+f-0>^2`Q2fM$^wI?~uoxN5N}`rr)!X zkOgp0bB?ivVFjLNqo#(BEj4ghvMo+e;Qti+cm>cWRebh7?!!!*IMC1w&2`!#>Rb)&9ZYkHg8gkiQ-5obM!ho&zcta4TOYQ7!kK zhn{n~t|E>PMc#7XSs04*p2N$^c{neB7xH;8faf`&;yT9LBvCE*xzNe^-E4CxbDRBJaN~jlSq|VjswDS1$X0~#=Lq&ga zCz+rAOpXJ}=@*Vw_-pAt>oj4i1@Xtt-Oowk-9QNMj)Y*HB&K4`iTsa2WPK#+q${0w zg!W?!)3XcxL8Yf>6#9nJ`D4X+Q{jsW-%$9r!fOgYRQQR)FBEb=InIv?e^L0SLLMmk uXB6&HxTJ7d;Yo#$D11WUrb18Qw!+sGzNPRTh3_l;TH*IZ6fvzQ&gs8hV_9GT literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/fs/fs.o b/linux-0.11-lab/cur/linux/fs/fs.o new file mode 100644 index 0000000000000000000000000000000000000000..8c513f90f67555c2da7097f7c7f01ef1cb688490 GIT binary patch literal 153208 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/fs/inode.c b/linux-0.11-lab/cur/linux/fs/inode.c new file mode 100644 index 0000000..9bb10b3 --- /dev/null +++ b/linux-0.11-lab/cur/linux/fs/inode.c @@ -0,0 +1,340 @@ +/* + * linux/fs/inode.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include + +#include +#include +#include +#include + +struct m_inode inode_table[NR_INODE]={{0,},}; + +static void read_inode(struct m_inode * inode); +static void write_inode(struct m_inode * inode); + +static inline void wait_on_inode(struct m_inode * inode) +{ + cli(); + while (inode->i_lock) + sleep_on(&inode->i_wait); + sti(); +} + +static inline void lock_inode(struct m_inode * inode) +{ + cli(); + while (inode->i_lock) + sleep_on(&inode->i_wait); + inode->i_lock=1; + sti(); +} + +static inline void unlock_inode(struct m_inode * inode) +{ + inode->i_lock=0; + wake_up(&inode->i_wait); +} + +void invalidate_inodes(int dev) +{ + int i; + struct m_inode * inode; + + inode = 0+inode_table; + for(i=0 ; ii_dev == dev) { + if (inode->i_count) + printk("inode in use on removed disk\n\r"); + inode->i_dev = inode->i_dirt = 0; + } + } +} + +void sync_inodes(void) +{ + int i; + struct m_inode * inode; + + inode = 0+inode_table; + for(i=0 ; ii_dirt && !inode->i_pipe) + write_inode(inode); + } +} + +static int _bmap(struct m_inode * inode,int block,int create) +{ + struct buffer_head * bh; + int i; + + if (block<0) + panic("_bmap: block<0"); + if (block >= 7+512+512*512) + panic("_bmap: block>big"); + if (block<7) { + if (create && !inode->i_zone[block]) + if (inode->i_zone[block]=new_block(inode->i_dev)) { + inode->i_ctime=CURRENT_TIME; + inode->i_dirt=1; + } + return inode->i_zone[block]; + } + block -= 7; + if (block<512) { + if (create && !inode->i_zone[7]) + if (inode->i_zone[7]=new_block(inode->i_dev)) { + inode->i_dirt=1; + inode->i_ctime=CURRENT_TIME; + } + if (!inode->i_zone[7]) + return 0; + if (!(bh = bread(inode->i_dev,inode->i_zone[7]))) + return 0; + i = ((unsigned short *) (bh->b_data))[block]; + if (create && !i) + if (i=new_block(inode->i_dev)) { + ((unsigned short *) (bh->b_data))[block]=i; + bh->b_dirt=1; + } + brelse(bh); + return i; + } + block -= 512; + if (create && !inode->i_zone[8]) + if (inode->i_zone[8]=new_block(inode->i_dev)) { + inode->i_dirt=1; + inode->i_ctime=CURRENT_TIME; + } + if (!inode->i_zone[8]) + return 0; + if (!(bh=bread(inode->i_dev,inode->i_zone[8]))) + return 0; + i = ((unsigned short *)bh->b_data)[block>>9]; + if (create && !i) + if (i=new_block(inode->i_dev)) { + ((unsigned short *) (bh->b_data))[block>>9]=i; + bh->b_dirt=1; + } + brelse(bh); + if (!i) + return 0; + if (!(bh=bread(inode->i_dev,i))) + return 0; + i = ((unsigned short *)bh->b_data)[block&511]; + if (create && !i) + if (i=new_block(inode->i_dev)) { + ((unsigned short *) (bh->b_data))[block&511]=i; + bh->b_dirt=1; + } + brelse(bh); + return i; +} + +int bmap(struct m_inode * inode,int block) +{ + return _bmap(inode,block,0); +} + +int create_block(struct m_inode * inode, int block) +{ + return _bmap(inode,block,1); +} + +void iput(struct m_inode * inode) +{ + if (!inode) + return; + wait_on_inode(inode); + if (!inode->i_count) + panic("iput: trying to free free inode"); + if (inode->i_pipe) { + wake_up(&inode->i_wait); + if (--inode->i_count) + return; + free_page(inode->i_size); + inode->i_count=0; + inode->i_dirt=0; + inode->i_pipe=0; + return; + } + if (!inode->i_dev) { + inode->i_count--; + return; + } + if (S_ISBLK(inode->i_mode)) { + sync_dev(inode->i_zone[0]); + wait_on_inode(inode); + } +repeat: + if (inode->i_count>1) { + inode->i_count--; + return; + } + if (!inode->i_nlinks) { + truncate(inode); + free_inode(inode); + return; + } + if (inode->i_dirt) { + write_inode(inode); /* we can sleep - so do again */ + wait_on_inode(inode); + goto repeat; + } + inode->i_count--; + return; +} + +struct m_inode * get_empty_inode(void) +{ + struct m_inode * inode; + static struct m_inode * last_inode = inode_table; + int i; + + do { + inode = NULL; + for (i = NR_INODE; i ; i--) { + if (++last_inode >= inode_table + NR_INODE) + last_inode = inode_table; + if (!last_inode->i_count) { + inode = last_inode; + if (!inode->i_dirt && !inode->i_lock) + break; + } + } + if (!inode) { + for (i=0 ; ii_dirt) { + write_inode(inode); + wait_on_inode(inode); + } + } while (inode->i_count); + memset(inode,0,sizeof(*inode)); + inode->i_count = 1; + return inode; +} + +struct m_inode * get_pipe_inode(void) +{ + struct m_inode * inode; + + if (!(inode = get_empty_inode())) + return NULL; + if (!(inode->i_size=get_free_page())) { + inode->i_count = 0; + return NULL; + } + inode->i_count = 2; /* sum of readers/writers */ + PIPE_HEAD(*inode) = PIPE_TAIL(*inode) = 0; + inode->i_pipe = 1; + return inode; +} + +struct m_inode * iget(int dev,int nr) +{ + struct m_inode * inode, * empty; + + if (!dev) + panic("iget with dev==0"); + empty = get_empty_inode(); + inode = inode_table; + while (inode < NR_INODE+inode_table) { + if (inode->i_dev != dev || inode->i_num != nr) { + inode++; + continue; + } + wait_on_inode(inode); + if (inode->i_dev != dev || inode->i_num != nr) { + inode = inode_table; + continue; + } + inode->i_count++; + if (inode->i_mount) { + int i; + + for (i = 0 ; i= NR_SUPER) { + printk("Mounted inode hasn't got sb\n"); + if (empty) + iput(empty); + return inode; + } + iput(inode); + dev = super_block[i].s_dev; + nr = ROOT_INO; + inode = inode_table; + continue; + } + if (empty) + iput(empty); + return inode; + } + if (!empty) + return (NULL); + inode=empty; + inode->i_dev = dev; + inode->i_num = nr; + read_inode(inode); + return inode; +} + +static void read_inode(struct m_inode * inode) +{ + struct super_block * sb; + struct buffer_head * bh; + int block; + + lock_inode(inode); + if (!(sb=get_super(inode->i_dev))) + panic("trying to read inode without dev"); + block = 2 + sb->s_imap_blocks + sb->s_zmap_blocks + + (inode->i_num-1)/INODES_PER_BLOCK; + if (!(bh=bread(inode->i_dev,block))) + panic("unable to read i-node block"); + __asm__ volatile ("cld"); /* by wyj */ + *(struct d_inode *)inode = + ((struct d_inode *)bh->b_data) + [(inode->i_num-1)%INODES_PER_BLOCK]; + brelse(bh); + unlock_inode(inode); +} + +static void write_inode(struct m_inode * inode) +{ + struct super_block * sb; + struct buffer_head * bh; + int block; + + lock_inode(inode); + if (!inode->i_dirt || !inode->i_dev) { + unlock_inode(inode); + return; + } + if (!(sb=get_super(inode->i_dev))) + panic("trying to write inode without device"); + block = 2 + sb->s_imap_blocks + sb->s_zmap_blocks + + (inode->i_num-1)/INODES_PER_BLOCK; + if (!(bh=bread(inode->i_dev,block))) + panic("unable to read i-node block"); + __asm__ volatile ("cld"); /* by wyj */ + ((struct d_inode *)bh->b_data) + [(inode->i_num-1)%INODES_PER_BLOCK] = + *(struct d_inode *)inode; + bh->b_dirt=1; + inode->i_dirt=0; + brelse(bh); + unlock_inode(inode); +} diff --git a/linux-0.11-lab/cur/linux/fs/inode.o b/linux-0.11-lab/cur/linux/fs/inode.o new file mode 100644 index 0000000000000000000000000000000000000000..23ede935a0277582b811a868cd1fa5d24343bd2d GIT binary patch literal 14068 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 Hdj +#include +#include + +#include + +extern int tty_ioctl(int dev, int cmd, int arg); + +typedef int (*ioctl_ptr)(int dev,int cmd,int arg); + +#define NRDEVS ((sizeof (ioctl_table))/(sizeof (ioctl_ptr))) + +static ioctl_ptr ioctl_table[]={ + NULL, /* nodev */ + NULL, /* /dev/mem */ + NULL, /* /dev/fd */ + NULL, /* /dev/hd */ + tty_ioctl, /* /dev/ttyx */ + tty_ioctl, /* /dev/tty */ + NULL, /* /dev/lp */ + NULL}; /* named pipes */ + + +int sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + struct file * filp; + int dev,mode; + + if (fd >= NR_OPEN || !(filp = current->filp[fd])) + return -EBADF; + mode=filp->f_inode->i_mode; + if (!S_ISCHR(mode) && !S_ISBLK(mode)) + return -EINVAL; + dev = filp->f_inode->i_zone[0]; + if (MAJOR(dev) >= NRDEVS) + return -ENODEV; + if (!ioctl_table[MAJOR(dev)]) + return -ENOTTY; + return ioctl_table[MAJOR(dev)](dev,cmd,arg); +} diff --git a/linux-0.11-lab/cur/linux/fs/ioctl.o b/linux-0.11-lab/cur/linux/fs/ioctl.o new file mode 100644 index 0000000000000000000000000000000000000000..05cec0fd47207e66864bc4f7310803230d449915 GIT binary patch literal 5828 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/fs/namei.c b/linux-0.11-lab/cur/linux/fs/namei.c new file mode 100644 index 0000000..f8a02b9 --- /dev/null +++ b/linux-0.11-lab/cur/linux/fs/namei.c @@ -0,0 +1,783 @@ +/* + * linux/fs/namei.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * Some corrections by tytso. + */ + +#include +#include +#include + +#include +#include +#include +#include +#include + +#define ACC_MODE(x) ("\004\002\006\377"[(x)&O_ACCMODE]) + +/* + * comment out this line if you want names > NAME_LEN chars to be + * truncated. Else they will be disallowed. + */ +/* #define NO_TRUNCATE */ + +#define MAY_EXEC 1 +#define MAY_WRITE 2 +#define MAY_READ 4 + +/* + * permission() + * + * is used to check for read/write/execute permissions on a file. + * I don't know if we should look at just the euid or both euid and + * uid, but that should be easily changed. + */ +static int permission(struct m_inode * inode,int mask) +{ + int mode = inode->i_mode; + +/* special case: not even root can read/write a deleted file */ + if (inode->i_dev && !inode->i_nlinks) + return 0; + else if (current->euid==inode->i_uid) + mode >>= 6; + else if (current->egid==inode->i_gid) + mode >>= 3; + if (((mode & mask & 0007) == mask) || suser()) + return 1; + return 0; +} + +/* + * ok, we cannot use strncmp, as the name is not in our data space. + * Thus we'll have to use match. No big problem. Match also makes + * some sanity tests. + * + * NOTE! unlike strncmp, match returns 1 for success, 0 for failure. + */ +static int match(int len,const char * name,struct dir_entry * de) +{ + register int same __asm__("ax"); + + if (!de || !de->inode || len > NAME_LEN) + return 0; + if (len < NAME_LEN && de->name[len]) + return 0; + __asm__("cld\n\t" + "fs ; repe ; cmpsb\n\t" + "setz %%al" + :"=a" (same) + :"0" (0),"S" ((long) name),"D" ((long) de->name),"c" (len) + ); + return same; +} + +/* + * find_entry() + * + * finds an entry in the specified directory with the wanted name. It + * returns the cache buffer in which the entry was found, and the entry + * itself (as a parameter - res_dir). It does NOT read the inode of the + * entry - you'll have to do that yourself if you want to. + * + * This also takes care of the few special cases due to '..'-traversal + * over a pseudo-root and a mount point. + */ +static struct buffer_head * find_entry(struct m_inode ** dir, + const char * name, int namelen, struct dir_entry ** res_dir) +{ + int entries; + int block,i; + struct buffer_head * bh; + struct dir_entry * de; + struct super_block * sb; + +#ifdef NO_TRUNCATE + if (namelen > NAME_LEN) + return NULL; +#else + if (namelen > NAME_LEN) + namelen = NAME_LEN; +#endif + entries = (*dir)->i_size / (sizeof (struct dir_entry)); + *res_dir = NULL; + if (!namelen) + return NULL; +/* check for '..', as we might have to do some "magic" for it */ + if (namelen==2 && get_fs_byte(name)=='.' && get_fs_byte(name+1)=='.') { +/* '..' in a pseudo-root results in a faked '.' (just change namelen) */ + if ((*dir) == current->root) + namelen=1; + else if ((*dir)->i_num == ROOT_INO) { +/* '..' over a mount-point results in 'dir' being exchanged for the mounted + directory-inode. NOTE! We set mounted, so that we can iput the new dir */ + sb=get_super((*dir)->i_dev); + if (sb->s_imount) { + iput(*dir); + (*dir)=sb->s_imount; + (*dir)->i_count++; + } + } + } + if (!(block = (*dir)->i_zone[0])) + return NULL; + if (!(bh = bread((*dir)->i_dev,block))) + return NULL; + i = 0; + de = (struct dir_entry *) bh->b_data; + while (i < entries) { + if ((char *)de >= BLOCK_SIZE+bh->b_data) { + brelse(bh); + bh = NULL; + if (!(block = bmap(*dir,i/DIR_ENTRIES_PER_BLOCK)) || + !(bh = bread((*dir)->i_dev,block))) { + i += DIR_ENTRIES_PER_BLOCK; + continue; + } + de = (struct dir_entry *) bh->b_data; + } + if (match(namelen,name,de)) { + *res_dir = de; + return bh; + } + de++; + i++; + } + brelse(bh); + return NULL; +} + +/* + * add_entry() + * + * adds a file entry to the specified directory, using the same + * semantics as find_entry(). It returns NULL if it failed. + * + * NOTE!! The inode part of 'de' is left at 0 - which means you + * may not sleep between calling this and putting something into + * the entry, as someone else might have used it while you slept. + */ +static struct buffer_head * add_entry(struct m_inode * dir, + const char * name, int namelen, struct dir_entry ** res_dir) +{ + int block,i; + struct buffer_head * bh; + struct dir_entry * de; + + *res_dir = NULL; +#ifdef NO_TRUNCATE + if (namelen > NAME_LEN) + return NULL; +#else + if (namelen > NAME_LEN) + namelen = NAME_LEN; +#endif + if (!namelen) + return NULL; + if (!(block = dir->i_zone[0])) + return NULL; + if (!(bh = bread(dir->i_dev,block))) + return NULL; + i = 0; + de = (struct dir_entry *) bh->b_data; + while (1) { + if ((char *)de >= BLOCK_SIZE+bh->b_data) { + brelse(bh); + bh = NULL; + block = create_block(dir,i/DIR_ENTRIES_PER_BLOCK); + if (!block) + return NULL; + if (!(bh = bread(dir->i_dev,block))) { + i += DIR_ENTRIES_PER_BLOCK; + continue; + } + de = (struct dir_entry *) bh->b_data; + } + if (i*sizeof(struct dir_entry) >= dir->i_size) { + de->inode=0; + dir->i_size = (i+1)*sizeof(struct dir_entry); + dir->i_dirt = 1; + dir->i_ctime = CURRENT_TIME; + } + if (!de->inode) { + dir->i_mtime = CURRENT_TIME; + for (i=0; i < NAME_LEN ; i++) + de->name[i]=(ib_dirt = 1; + *res_dir = de; + return bh; + } + de++; + i++; + } + brelse(bh); + return NULL; +} + +/* + * get_dir() + * + * Getdir traverses the pathname until it hits the topmost directory. + * It returns NULL on failure. + */ +static struct m_inode * get_dir(const char * pathname) +{ + char c; + const char * thisname; + struct m_inode * inode; + struct buffer_head * bh; + int namelen,inr,idev; + struct dir_entry * de; + + if (!current->root || !current->root->i_count) + panic("No root inode"); + if (!current->pwd || !current->pwd->i_count) + panic("No cwd inode"); + if ((c=get_fs_byte(pathname))=='/') { + inode = current->root; + pathname++; + } else if (c) + inode = current->pwd; + else + return NULL; /* empty name is bad */ + inode->i_count++; + while (1) { + thisname = pathname; + if (!S_ISDIR(inode->i_mode) || !permission(inode,MAY_EXEC)) { + iput(inode); + return NULL; + } + for(namelen=0;(c=get_fs_byte(pathname++))&&(c!='/');namelen++) + /* nothing */ ; + if (!c) + return inode; + if (!(bh = find_entry(&inode,thisname,namelen,&de))) { + iput(inode); + return NULL; + } + inr = de->inode; + idev = inode->i_dev; + brelse(bh); + iput(inode); + if (!(inode = iget(idev,inr))) + return NULL; + } +} + +/* + * dir_namei() + * + * dir_namei() returns the inode of the directory of the + * specified name, and the name within that directory. + */ +static struct m_inode * dir_namei(const char * pathname, + int * namelen, const char ** name) +{ + char c; + const char * basename; + struct m_inode * dir; + + if (!(dir = get_dir(pathname))) + return NULL; + basename = pathname; + while (c=get_fs_byte(pathname++)) + if (c=='/') + basename=pathname; + *namelen = pathname-basename-1; + *name = basename; + return dir; +} + +/* + * namei() + * + * is used by most simple commands to get the inode of a specified name. + * Open, link etc use their own routines, but this is enough for things + * like 'chmod' etc. + */ +struct m_inode * namei(const char * pathname) +{ + const char * basename; + int inr,dev,namelen; + struct m_inode * dir; + struct buffer_head * bh; + struct dir_entry * de; + + if (!(dir = dir_namei(pathname,&namelen,&basename))) + return NULL; + if (!namelen) /* special case: '/usr/' etc */ + return dir; + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + iput(dir); + return NULL; + } + inr = de->inode; + dev = dir->i_dev; + brelse(bh); + iput(dir); + dir=iget(dev,inr); + if (dir) { + dir->i_atime=CURRENT_TIME; + dir->i_dirt=1; + } + return dir; +} + +/* + * open_namei() + * + * namei for open - this is in fact almost the whole open-routine. + */ +int open_namei(const char * pathname, int flag, int mode, + struct m_inode ** res_inode) +{ + const char * basename; + int inr,dev,namelen; + struct m_inode * dir, *inode; + struct buffer_head * bh; + struct dir_entry * de; + + if ((flag & O_TRUNC) && !(flag & O_ACCMODE)) + flag |= O_WRONLY; + mode &= 0777 & ~current->umask; + mode |= I_REGULAR; + if (!(dir = dir_namei(pathname,&namelen,&basename))) + return -ENOENT; + if (!namelen) { /* special case: '/usr/' etc */ + if (!(flag & (O_ACCMODE|O_CREAT|O_TRUNC))) { + *res_inode=dir; + return 0; + } + iput(dir); + return -EISDIR; + } + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + if (!(flag & O_CREAT)) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EACCES; + } + inode = new_inode(dir->i_dev); + if (!inode) { + iput(dir); + return -ENOSPC; + } + inode->i_uid = current->euid; + inode->i_mode = mode; + inode->i_dirt = 1; + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + inode->i_nlinks--; + iput(inode); + iput(dir); + return -ENOSPC; + } + de->inode = inode->i_num; + bh->b_dirt = 1; + brelse(bh); + iput(dir); + *res_inode = inode; + return 0; + } + inr = de->inode; + dev = dir->i_dev; + brelse(bh); + iput(dir); + if (flag & O_EXCL) + return -EEXIST; + if (!(inode=iget(dev,inr))) + return -EACCES; + if ((S_ISDIR(inode->i_mode) && (flag & O_ACCMODE)) || + !permission(inode,ACC_MODE(flag))) { + iput(inode); + return -EPERM; + } + inode->i_atime = CURRENT_TIME; + if (flag & O_TRUNC) + truncate(inode); + *res_inode = inode; + return 0; +} + +int sys_mknod(const char * filename, int mode, int dev) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh; + struct dir_entry * de; + + if (!suser()) + return -EPERM; + if (!(dir = dir_namei(filename,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (bh) { + brelse(bh); + iput(dir); + return -EEXIST; + } + inode = new_inode(dir->i_dev); + if (!inode) { + iput(dir); + return -ENOSPC; + } + inode->i_mode = mode; + if (S_ISBLK(mode) || S_ISCHR(mode)) + inode->i_zone[0] = dev; + inode->i_mtime = inode->i_atime = CURRENT_TIME; + inode->i_dirt = 1; + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + iput(dir); + inode->i_nlinks=0; + iput(inode); + return -ENOSPC; + } + de->inode = inode->i_num; + bh->b_dirt = 1; + iput(dir); + iput(inode); + brelse(bh); + return 0; +} + +int sys_mkdir(const char * pathname, int mode) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh, *dir_block; + struct dir_entry * de; + + if (!suser()) + return -EPERM; + if (!(dir = dir_namei(pathname,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (bh) { + brelse(bh); + iput(dir); + return -EEXIST; + } + inode = new_inode(dir->i_dev); + if (!inode) { + iput(dir); + return -ENOSPC; + } + inode->i_size = 32; + inode->i_dirt = 1; + inode->i_mtime = inode->i_atime = CURRENT_TIME; + if (!(inode->i_zone[0]=new_block(inode->i_dev))) { + iput(dir); + inode->i_nlinks--; + iput(inode); + return -ENOSPC; + } + inode->i_dirt = 1; + if (!(dir_block=bread(inode->i_dev,inode->i_zone[0]))) { + iput(dir); + free_block(inode->i_dev,inode->i_zone[0]); + inode->i_nlinks--; + iput(inode); + return -ERROR; + } + de = (struct dir_entry *) dir_block->b_data; + de->inode=inode->i_num; + strcpy(de->name,"."); + de++; + de->inode = dir->i_num; + strcpy(de->name,".."); + inode->i_nlinks = 2; + dir_block->b_dirt = 1; + brelse(dir_block); + inode->i_mode = I_DIRECTORY | (mode & 0777 & ~current->umask); + inode->i_dirt = 1; + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + iput(dir); + free_block(inode->i_dev,inode->i_zone[0]); + inode->i_nlinks=0; + iput(inode); + return -ENOSPC; + } + de->inode = inode->i_num; + bh->b_dirt = 1; + dir->i_nlinks++; + dir->i_dirt = 1; + iput(dir); + iput(inode); + brelse(bh); + return 0; +} + +/* + * routine to check that the specified directory is empty (for rmdir) + */ +static int empty_dir(struct m_inode * inode) +{ + int nr,block; + int len; + struct buffer_head * bh; + struct dir_entry * de; + + len = inode->i_size / sizeof (struct dir_entry); + if (len<2 || !inode->i_zone[0] || + !(bh=bread(inode->i_dev,inode->i_zone[0]))) { + printk("warning - bad directory on dev %04x\n",inode->i_dev); + return 0; + } + de = (struct dir_entry *) bh->b_data; + if (de[0].inode != inode->i_num || !de[1].inode || + strcmp(".",de[0].name) || strcmp("..",de[1].name)) { + printk("warning - bad directory on dev %04x\n",inode->i_dev); + return 0; + } + nr = 2; + de += 2; + while (nr= (void *) (bh->b_data+BLOCK_SIZE)) { + brelse(bh); + block=bmap(inode,nr/DIR_ENTRIES_PER_BLOCK); + if (!block) { + nr += DIR_ENTRIES_PER_BLOCK; + continue; + } + if (!(bh=bread(inode->i_dev,block))) + return 0; + de = (struct dir_entry *) bh->b_data; + } + if (de->inode) { + brelse(bh); + return 0; + } + de++; + nr++; + } + brelse(bh); + return 1; +} + +int sys_rmdir(const char * name) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh; + struct dir_entry * de; + + if (!suser()) + return -EPERM; + if (!(dir = dir_namei(name,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + iput(dir); + return -ENOENT; + } + if (!(inode = iget(dir->i_dev, de->inode))) { + iput(dir); + brelse(bh); + return -EPERM; + } + if ((dir->i_mode & S_ISVTX) && current->euid && + inode->i_uid != current->euid) { + iput(dir); + iput(inode); + brelse(bh); + return -EPERM; + } + if (inode->i_dev != dir->i_dev || inode->i_count>1) { + iput(dir); + iput(inode); + brelse(bh); + return -EPERM; + } + if (inode == dir) { /* we may not delete ".", but "../dir" is ok */ + iput(inode); + iput(dir); + brelse(bh); + return -EPERM; + } + if (!S_ISDIR(inode->i_mode)) { + iput(inode); + iput(dir); + brelse(bh); + return -ENOTDIR; + } + if (!empty_dir(inode)) { + iput(inode); + iput(dir); + brelse(bh); + return -ENOTEMPTY; + } + if (inode->i_nlinks != 2) + printk("empty directory has nlink!=2 (%d)",inode->i_nlinks); + de->inode = 0; + bh->b_dirt = 1; + brelse(bh); + inode->i_nlinks=0; + inode->i_dirt=1; + dir->i_nlinks--; + dir->i_ctime = dir->i_mtime = CURRENT_TIME; + dir->i_dirt=1; + iput(dir); + iput(inode); + return 0; +} + +int sys_unlink(const char * name) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh; + struct dir_entry * de; + + if (!(dir = dir_namei(name,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + iput(dir); + return -ENOENT; + } + if (!(inode = iget(dir->i_dev, de->inode))) { + iput(dir); + brelse(bh); + return -ENOENT; + } + if ((dir->i_mode & S_ISVTX) && !suser() && + current->euid != inode->i_uid && + current->euid != dir->i_uid) { + iput(dir); + iput(inode); + brelse(bh); + return -EPERM; + } + if (S_ISDIR(inode->i_mode)) { + iput(inode); + iput(dir); + brelse(bh); + return -EPERM; + } + if (!inode->i_nlinks) { + printk("Deleting nonexistent file (%04x:%d), %d\n", + inode->i_dev,inode->i_num,inode->i_nlinks); + inode->i_nlinks=1; + } + de->inode = 0; + bh->b_dirt = 1; + brelse(bh); + inode->i_nlinks--; + inode->i_dirt = 1; + inode->i_ctime = CURRENT_TIME; + iput(inode); + iput(dir); + return 0; +} + +int sys_symlink() +{ + return -ENOSYS; +} + +int sys_link(const char * oldname, const char * newname) +{ + struct dir_entry * de; + struct m_inode * oldinode, * dir; + struct buffer_head * bh; + const char * basename; + int namelen; + + oldinode=namei(oldname); + if (!oldinode) + return -ENOENT; + if (S_ISDIR(oldinode->i_mode)) { + iput(oldinode); + return -EPERM; + } + dir = dir_namei(newname,&namelen,&basename); + if (!dir) { + iput(oldinode); + return -EACCES; + } + if (!namelen) { + iput(oldinode); + iput(dir); + return -EPERM; + } + if (dir->i_dev != oldinode->i_dev) { + iput(dir); + iput(oldinode); + return -EXDEV; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + iput(oldinode); + return -EACCES; + } + bh = find_entry(&dir,basename,namelen,&de); + if (bh) { + brelse(bh); + iput(dir); + iput(oldinode); + return -EEXIST; + } + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + iput(dir); + iput(oldinode); + return -ENOSPC; + } + de->inode = oldinode->i_num; + bh->b_dirt = 1; + brelse(bh); + iput(dir); + oldinode->i_nlinks++; + oldinode->i_ctime = CURRENT_TIME; + oldinode->i_dirt = 1; + iput(oldinode); + return 0; +} diff --git a/linux-0.11-lab/cur/linux/fs/namei.o b/linux-0.11-lab/cur/linux/fs/namei.o new file mode 100644 index 0000000000000000000000000000000000000000..2b7addc2dc3b8ad772846b6fe345363e6c68f8fb GIT binary patch literal 20756 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/fs/open.c b/linux-0.11-lab/cur/linux/fs/open.c new file mode 100644 index 0000000..124c1a1 --- /dev/null +++ b/linux-0.11-lab/cur/linux/fs/open.c @@ -0,0 +1,281 @@ +/* + * linux/fs/open.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +extern int my_sys_read(unsigned int fd,char * buf,int count); +int sys_ustat(int dev, struct ustat * ubuf) +{ + return -ENOSYS; +} + +int sys_utime(char * filename, struct utimbuf * times) +{ + struct m_inode * inode; + long actime,modtime; + + if (!(inode=namei(filename))) + return -ENOENT; + if (times) { + actime = get_fs_long((unsigned long *) ×->actime); + modtime = get_fs_long((unsigned long *) ×->modtime); + } else + actime = modtime = CURRENT_TIME; + inode->i_atime = actime; + inode->i_mtime = modtime; + inode->i_dirt = 1; + iput(inode); + return 0; +} + +/* + * XXX should we use the real or effective uid? BSD uses the real uid, + * so as to make this call useful to setuid programs. + */ +int sys_access(const char * filename,int mode) +{ + struct m_inode * inode; + int res, i_mode; + + mode &= 0007; + if (!(inode=namei(filename))) + return -EACCES; + i_mode = res = inode->i_mode & 0777; + iput(inode); + if (current->uid == inode->i_uid) + res >>= 6; + else if (current->gid == inode->i_gid) + res >>= 6; + if ((res & 0007 & mode) == mode) + return 0; + /* + * XXX we are doing this test last because we really should be + * swapping the effective with the real user id (temporarily), + * and then calling suser() routine. If we do call the + * suser() routine, it needs to be called last. + */ + if ((!current->uid) && + (!(mode & 1) || (i_mode & 0111))) + return 0; + return -EACCES; +} + +int sys_chdir(const char * filename) +{ + struct m_inode * inode; + + if (!(inode = namei(filename))) + return -ENOENT; + if (!S_ISDIR(inode->i_mode)) { + iput(inode); + return -ENOTDIR; + } + iput(current->pwd); + current->pwd = inode; + return (0); +} + +int sys_chroot(const char * filename) +{ + struct m_inode * inode; + + if (!(inode=namei(filename))) + return -ENOENT; + if (!S_ISDIR(inode->i_mode)) { + iput(inode); + return -ENOTDIR; + } + iput(current->root); + current->root = inode; + return (0); +} + +int sys_chmod(const char * filename,int mode) +{ + struct m_inode * inode; + + if (!(inode=namei(filename))) + return -ENOENT; + if ((current->euid != inode->i_uid) && !suser()) { + iput(inode); + return -EACCES; + } + inode->i_mode = (mode & 07777) | (inode->i_mode & ~07777); + inode->i_dirt = 1; + iput(inode); + return 0; +} + +int sys_chown(const char * filename,int uid,int gid) +{ + struct m_inode * inode; + + if (!(inode=namei(filename))) + return -ENOENT; + if (!suser()) { + iput(inode); + return -EACCES; + } + inode->i_uid=uid; + inode->i_gid=gid; + inode->i_dirt=1; + iput(inode); + return 0; +} + +int sys_open(const char * filename,int flag,int mode) +{ + struct m_inode * inode; + struct file * f; + int i,fd; + + mode &= 0777 & ~current->umask; + for(fd=0 ; fdfilp[fd]) + break; + if (fd>=NR_OPEN) + return -EINVAL; + current->close_on_exec &= ~(1<f_count) break; + if (i>=NR_FILE) + return -EINVAL; + (current->filp[fd]=f)->f_count++; + if ((i=open_namei(filename,flag,mode,&inode))<0) { + current->filp[fd]=NULL; + f->f_count=0; + return i; + } +/* ttys are somewhat special (ttyxx major==4, tty major==5) */ + if (S_ISCHR(inode->i_mode)) + if (MAJOR(inode->i_zone[0])==4) { + if (current->leader && current->tty<0) { + current->tty = MINOR(inode->i_zone[0]); + tty_table[current->tty].pgrp = current->pgrp; + } + } else if (MAJOR(inode->i_zone[0])==5) + if (current->tty<0) { + iput(inode); + current->filp[fd]=NULL; + f->f_count=0; + return -EPERM; + } +/* Likewise with block-devices: check for floppy_change */ + if (S_ISBLK(inode->i_mode)) + check_disk_change(inode->i_zone[0]); + f->f_mode = inode->i_mode; + f->f_flags = flag; + f->f_count = 1; + f->f_inode = inode; + f->f_pos = 0; + return (fd); +} + +int sys_creat(const char * pathname, int mode) +{ + return sys_open(pathname, O_CREAT | O_TRUNC, mode); +} + +int sys_close(unsigned int fd) +{ + struct file * filp; + + if (fd >= NR_OPEN) + return -EINVAL; + current->close_on_exec &= ~(1<filp[fd])) + return -EINVAL; + current->filp[fd] = NULL; + if (filp->f_count == 0) + panic("Close: file count is 0"); + if (--filp->f_count) + return (0); + iput(filp->f_inode); + return (0); +} + +static int get_subentry(unsigned int fd, char* cwdbuf, char** subentry){ + int i, num_file = 0, read_num; + if(fd == -1){ + return -1; + } + for(i = 0; i < 512; ++i){ + cwdbuf[i] = '\0'; + } + read_num = my_sys_read(fd, cwdbuf, 512); + + if(read_num == -1){ + return -1; + } + for(i = 0; i < 512; ){ + if((cwdbuf[i] == '.') || (cwdbuf[i] >= 'a' && cwdbuf[i] <= 'z') || (cwdbuf[i] >= 'A' && cwdbuf[i] <= 'Z')){ + subentry[num_file++] = cwdbuf + i; + while(i<512 && cwdbuf[i]){ + ++i; + } + }else{ + cwdbuf[i] = '\0'; + ++i; + } + } + subentry[num_file] = NULL; + return read_num; +} +static int my_strlen(const char* Src){ + int len = 0; + int i = 0; + for(; Src[i]; ++i){ + ++len; + } + return len; +} +int sys_getdents(unsigned int fd, struct linux_dirent *dirp, unsigned int count){ + struct stat info; + char content[512]; + char* subdirs[128]; + char* curbuf = (char*)dirp; + int i, readn = 0, mod, j; + unsigned short size = sizeof(struct linux_dirent); + sys_fstat(fd, &info); + get_subentry(fd, content, subdirs); + + for(i = 0; subdirs[i]; ++i){ + put_fs_long(info.st_ino, &dirp->d_ino); + put_fs_byte(*((char*)(&size)), (char*)(&dirp->d_reclen)); + put_fs_byte(*((char*)(&size) + 1), (char*)(&dirp->d_reclen)+1); + readn += size; + for(j = 0; subdirs[i][j]; ++j){ + put_fs_byte(*(subdirs[i] + j), dirp->d_name+j); + } + put_fs_byte('\0', dirp->d_name+j); + dirp = (struct linux_dirent*) (curbuf + size); + curbuf += size; + } + return readn; +} + +long sys_getcwd(){ + return 0; +} +long sys_mmap(){ + return 0; +} +int sys_munmap(){ + return 0; +} +int sys_clone(){ + return 0; +} diff --git a/linux-0.11-lab/cur/linux/fs/open.o b/linux-0.11-lab/cur/linux/fs/open.o new file mode 100644 index 0000000000000000000000000000000000000000..7d4d409757c6fe0087469bdda9328145d2d2c50c GIT binary patch literal 14656 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 UV*A$wpB3bNhw^s>y`ahe57NNZyZ`_I literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/fs/pipe.c b/linux-0.11-lab/cur/linux/fs/pipe.c new file mode 100644 index 0000000..6154238 --- /dev/null +++ b/linux-0.11-lab/cur/linux/fs/pipe.c @@ -0,0 +1,152 @@ +/* + * linux/fs/pipe.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +#include +#include /* for get_free_page */ +#include + +int read_pipe(struct m_inode * inode, char * buf, int count) +{ + int chars, size, read = 0; + + while (count>0) { + while (!(size=PIPE_SIZE(*inode))) { + wake_up(&inode->i_wait); + if (inode->i_count != 2) /* are there any writers? */ + return read; + sleep_on(&inode->i_wait); + } + chars = PAGE_SIZE-PIPE_TAIL(*inode); + if (chars > count) + chars = count; + if (chars > size) + chars = size; + count -= chars; + read += chars; + size = PIPE_TAIL(*inode); + PIPE_TAIL(*inode) += chars; + PIPE_TAIL(*inode) &= (PAGE_SIZE-1); + while (chars-->0) + put_fs_byte(((char *)inode->i_size)[size++],buf++); + } + wake_up(&inode->i_wait); + return read; +} + +int write_pipe(struct m_inode * inode, char * buf, int count) +{ + int chars, size, written = 0; + + while (count>0) { + while (!(size=(PAGE_SIZE-1)-PIPE_SIZE(*inode))) { + wake_up(&inode->i_wait); + if (inode->i_count != 2) { /* no readers */ + current->signal |= (1<<(SIGPIPE-1)); + return written?written:-1; + } + sleep_on(&inode->i_wait); + } + chars = PAGE_SIZE-PIPE_HEAD(*inode); + if (chars > count) + chars = count; + if (chars > size) + chars = size; + count -= chars; + written += chars; + size = PIPE_HEAD(*inode); + PIPE_HEAD(*inode) += chars; + PIPE_HEAD(*inode) &= (PAGE_SIZE-1); + while (chars-->0) + ((char *)inode->i_size)[size++]=get_fs_byte(buf++); + } + wake_up(&inode->i_wait); + return written; +} + +int sys_pipe(unsigned long * fildes) +{ + struct m_inode * inode; + struct file * f[2]; + int fd[2]; + int i,j; + + j=0; + for(i=0;j<2 && if_count++; + if (j==1) + f[0]->f_count=0; + if (j<2) + return -1; + j=0; + for(i=0;j<2 && ifilp[i]) { + current->filp[ fd[j]=i ] = f[j]; + j++; + } + if (j==1) + current->filp[fd[0]]=NULL; + if (j<2) { + f[0]->f_count=f[1]->f_count=0; + return -1; + } + if (!(inode=get_pipe_inode())) { + current->filp[fd[0]] = + current->filp[fd[1]] = NULL; + f[0]->f_count = f[1]->f_count = 0; + return -1; + } + f[0]->f_inode = f[1]->f_inode = inode; + f[0]->f_pos = f[1]->f_pos = 0; + f[0]->f_mode = 1; /* read */ + f[1]->f_mode = 2; /* write */ + put_fs_long(fd[0],0+fildes); + put_fs_long(fd[1],1+fildes); + return 0; +} +int sys_pipe2(unsigned long * fildes) +{ + struct m_inode * inode; + struct file * f[2]; + int fd[2]; + int i,j; + + j=0; + for(i=0;j<2 && if_count++; + if (j==1) + f[0]->f_count=0; + if (j<2) + return -1; + j=0; + for(i=0;j<2 && ifilp[i]) { + current->filp[ fd[j]=i ] = f[j]; + j++; + } + if (j==1) + current->filp[fd[0]]=NULL; + if (j<2) { + f[0]->f_count=f[1]->f_count=0; + return -1; + } + if (!(inode=get_pipe_inode())) { + current->filp[fd[0]] = + current->filp[fd[1]] = NULL; + f[0]->f_count = f[1]->f_count = 0; + return -1; + } + f[0]->f_inode = f[1]->f_inode = inode; + f[0]->f_pos = f[1]->f_pos = 0; + f[0]->f_mode = 1; /* read */ + f[1]->f_mode = 2; /* write */ + put_fs_long(fd[0],0+fildes); + put_fs_long(fd[1],1+fildes); + return 0; +} diff --git a/linux-0.11-lab/cur/linux/fs/pipe.o b/linux-0.11-lab/cur/linux/fs/pipe.o new file mode 100644 index 0000000000000000000000000000000000000000..69f9166cc8e150b3c6ccaea19eb93fa9f2feb77c GIT binary patch literal 8972 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 +#include +#include + +#include +#include +#include + +extern int rw_char(int rw,int dev, char * buf, int count, off_t * pos); +extern int read_pipe(struct m_inode * inode, char * buf, int count); +extern int write_pipe(struct m_inode * inode, char * buf, int count); +extern int block_read(int dev, off_t * pos, char * buf, int count); +extern int block_write(int dev, off_t * pos, char * buf, int count); +extern int file_read(struct m_inode * inode, struct file * filp, + char * buf, int count); +extern int file_write(struct m_inode * inode, struct file * filp, + char * buf, int count); + +int sys_lseek(unsigned int fd,off_t offset, int origin) +{ + struct file * file; + int tmp; + + if (fd >= NR_OPEN || !(file=current->filp[fd]) || !(file->f_inode) + || !IS_SEEKABLE(MAJOR(file->f_inode->i_dev))) + return -EBADF; + if (file->f_inode->i_pipe) + return -ESPIPE; + switch (origin) { + case 0: + if (offset<0) return -EINVAL; + file->f_pos=offset; + break; + case 1: + if (file->f_pos+offset<0) return -EINVAL; + file->f_pos += offset; + break; + case 2: + if ((tmp=file->f_inode->i_size+offset) < 0) + return -EINVAL; + file->f_pos = tmp; + break; + default: + return -EINVAL; + } + return file->f_pos; +} + +int sys_read(unsigned int fd,char * buf,int count) +{ + struct file * file; + struct m_inode * inode; + + if (fd>=NR_OPEN || count<0 || !(file=current->filp[fd])) + return -EINVAL; + if (!count) + return 0; + verify_area(buf,count); + inode = file->f_inode; + if (inode->i_pipe) + return (file->f_mode&1)?read_pipe(inode,buf,count):-EIO; + if (S_ISCHR(inode->i_mode)) + return rw_char(READ,inode->i_zone[0],buf,count,&file->f_pos); + if (S_ISBLK(inode->i_mode)) + return block_read(inode->i_zone[0],&file->f_pos,buf,count); + if (S_ISDIR(inode->i_mode) || S_ISREG(inode->i_mode)) { + if (count+file->f_pos > inode->i_size) + count = inode->i_size - file->f_pos; + if (count<=0) + return 0; + return file_read(inode,file,buf,count); + } + printk("(Read)inode->i_mode=%06o\n\r",inode->i_mode); + return -EINVAL; +} +int my_sys_read(unsigned int fd,char * buf,int count) +{ + struct file * file; + struct m_inode * inode; + + if (fd>=NR_OPEN || count<0 || !(file=current->filp[fd])) + return -EINVAL; + if (!count) + return 0; + verify_area(buf,count); + inode = file->f_inode; + if (inode->i_pipe) + return (file->f_mode&1)?read_pipe(inode,buf,count):-EIO; + if (S_ISCHR(inode->i_mode)) + return rw_char(READ,inode->i_zone[0],buf,count,&file->f_pos); + if (S_ISBLK(inode->i_mode)) + return block_read(inode->i_zone[0],&file->f_pos,buf,count); + if (S_ISDIR(inode->i_mode) || S_ISREG(inode->i_mode)) { + if (count+file->f_pos > inode->i_size) + count = inode->i_size - file->f_pos; + if (count<=0) + return 0; + return my_file_read(inode,file,buf,count); + } + printk("(Read)inode->i_mode=%06o\n\r",inode->i_mode); + return -EINVAL; +} +int sys_write(unsigned int fd,char * buf,int count) +{ + struct file * file; + struct m_inode * inode; + + if (fd>=NR_OPEN || count <0 || !(file=current->filp[fd])) + return -EINVAL; + if (!count) + return 0; + inode=file->f_inode; + if (inode->i_pipe) + return (file->f_mode&2)?write_pipe(inode,buf,count):-EIO; + if (S_ISCHR(inode->i_mode)) + return rw_char(WRITE,inode->i_zone[0],buf,count,&file->f_pos); + if (S_ISBLK(inode->i_mode)) + return block_write(inode->i_zone[0],&file->f_pos,buf,count); + if (S_ISREG(inode->i_mode)) + return file_write(inode,file,buf,count); + printk("(Write)inode->i_mode=%06o\n\r",inode->i_mode); + return -EINVAL; +} diff --git a/linux-0.11-lab/cur/linux/fs/read_write.o b/linux-0.11-lab/cur/linux/fs/read_write.o new file mode 100644 index 0000000000000000000000000000000000000000..986fce4d5b19249afff5f572c306f891cc5a56e2 GIT binary patch literal 8476 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/fs/select.c b/linux-0.11-lab/cur/linux/fs/select.c new file mode 100644 index 0000000..cef8b43 --- /dev/null +++ b/linux-0.11-lab/cur/linux/fs/select.c @@ -0,0 +1,10 @@ +/* nothing , only the stub */ +/* gohigh */ + +#include + +int sys_select() +{ + return -ENOSYS; +} + diff --git a/linux-0.11-lab/cur/linux/fs/select.o b/linux-0.11-lab/cur/linux/fs/select.o new file mode 100644 index 0000000000000000000000000000000000000000..d61f73a39bf58c107d845f3825c695fe69663502 GIT binary patch literal 1776 zcma)7&ubG=5T2J!Yc*|X8^x9irr?h%?k3TorD`oLDvI>~7iJXeveV zCY}@#J&1bs?8UqPfKX4Kdi3hqL;YsoPO~}bz`U9HX5P%3>16x#`kfm}DH2j-P~Rf@ zl+m7QEas>{P2kmV>r<>uh}!akeCds_eOT8?M2Wg)X97y zXXIz{6KZmJ{3ubzqHEJeej#@`cdNkQ($w4KX(HnU<#LNTV+09~f%U6&dCo2MSm&o^ z=r~TL{^ZAS#{HoyMWNGi>XB9FIHI9A%~auDMj@)y@?EFobsJI14^7W`RO+<7ZqF=R zm5SN1Yo)RVO3jdNuC5hVidAdgsuoSx4(hF|?F;i4q1QW&qPbBto4(tQ%w}M_j=AZh zUncKQJrYawEG&Ru~0ZwnU4Z zUPM;Ij%>1OVMtcsbgYI`>u#*Ky`~RWtlPC(;57dvg*F;I@kis zL)RAOsi&aRIIZ<~a{8_RbIu@$_g4DiB@mtO%TCWGy1^hwHd9;uxYGc5+5Qz*MvUa< z9Gq{Nm4w8{zmS6hLcYY~mLMmkQ0ApQ$Ac%gz;MoiD`Am=g*R7#1j7tNTI!1mRP(~3C{b&IOkWGJ +#include + +#include +#include +#include +#include + +static void cp_stat(struct m_inode * inode, struct stat * statbuf) +{ + struct stat tmp; + int i; + + verify_area(statbuf,sizeof (* statbuf)); + tmp.st_dev = inode->i_dev; + tmp.st_ino = inode->i_num; + tmp.st_mode = inode->i_mode; + tmp.st_nlink = inode->i_nlinks; + tmp.st_uid = inode->i_uid; + tmp.st_gid = inode->i_gid; + tmp.st_rdev = inode->i_zone[0]; + tmp.st_size = inode->i_size; + tmp.st_atime = inode->i_atime; + tmp.st_mtime = inode->i_mtime; + tmp.st_ctime = inode->i_ctime; + for (i=0 ; i= NR_OPEN || !(f=current->filp[fd]) || !(inode=f->f_inode)) + return -EBADF; + cp_stat(inode,statbuf); + return 0; +} + +int sys_readlink() +{ + return -ENOSYS; +} diff --git a/linux-0.11-lab/cur/linux/fs/stat.o b/linux-0.11-lab/cur/linux/fs/stat.o new file mode 100644 index 0000000000000000000000000000000000000000..2daed7a97a85d87da066f5fbd6c9fd03f74d04cf GIT binary patch literal 7212 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 +#include +#include +#include + +#include +#include + +int sync_dev(int dev); +void wait_for_keypress(void); + +/* set_bit uses setb, as gas doesn't recognize setc */ +#define set_bit(bitnr,addr) ({ \ +register int __res __asm__("ax"); \ +__asm__("bt %2,%3;setb %%al":"=a" (__res):"a" (0),"r" (bitnr),"m" (*(addr))); \ +__res; }) + +struct super_block super_block[NR_SUPER]; +/* this is initialized in init/main.c */ +int ROOT_DEV = 0; + +static void lock_super(struct super_block * sb) +{ + cli(); + while (sb->s_lock) + sleep_on(&(sb->s_wait)); + sb->s_lock = 1; + sti(); +} + +static void free_super(struct super_block * sb) +{ + cli(); + sb->s_lock = 0; + wake_up(&(sb->s_wait)); + sti(); +} + +static void wait_on_super(struct super_block * sb) +{ + cli(); + while (sb->s_lock) + sleep_on(&(sb->s_wait)); + sti(); +} + +struct super_block * get_super(int dev) +{ + struct super_block * s; + + if (!dev) + return NULL; + s = 0+super_block; + while (s < NR_SUPER+super_block) + if (s->s_dev == dev) { + wait_on_super(s); + if (s->s_dev == dev) + return s; + s = 0+super_block; + } else + s++; + return NULL; +} + +void put_super(int dev) +{ + struct super_block * sb; +/* struct m_inode * inode; */ + int i; + + if (dev == ROOT_DEV) { + printk("root diskette changed: prepare for armageddon\n\r"); + return; + } + if (!(sb = get_super(dev))) + return; + if (sb->s_imount) { + printk("Mounted disk changed - tssk, tssk\n\r"); + return; + } + lock_super(sb); + sb->s_dev = 0; + for(i=0;is_imap[i]); + for(i=0;is_zmap[i]); + free_super(sb); + return; +} + +static struct super_block * read_super(int dev) +{ + struct super_block * s; + struct buffer_head * bh; + int i,block; + + if (!dev) + return NULL; + check_disk_change(dev); + if (s = get_super(dev)) + return s; + for (s = 0+super_block ;; s++) { + if (s >= NR_SUPER+super_block) + return NULL; + if (!s->s_dev) + break; + } + s->s_dev = dev; + s->s_isup = NULL; + s->s_imount = NULL; + s->s_time = 0; + s->s_rd_only = 0; + s->s_dirt = 0; + lock_super(s); + if (!(bh = bread(dev,1))) { + s->s_dev=0; + free_super(s); + return NULL; + } + __asm__ volatile ("cld"); /* by wyj */ + *((struct d_super_block *) s) = + *((struct d_super_block *) bh->b_data); + brelse(bh); + if (s->s_magic != SUPER_MAGIC) { + s->s_dev = 0; + free_super(s); + return NULL; + } + for (i=0;is_imap[i] = NULL; + for (i=0;is_zmap[i] = NULL; + block=2; + for (i=0 ; i < s->s_imap_blocks ; i++) + if (s->s_imap[i]=bread(dev,block)) + block++; + else + break; + for (i=0 ; i < s->s_zmap_blocks ; i++) + if (s->s_zmap[i]=bread(dev,block)) + block++; + else + break; + if (block != 2+s->s_imap_blocks+s->s_zmap_blocks) { + for(i=0;is_imap[i]); + for(i=0;is_zmap[i]); + s->s_dev=0; + free_super(s); + return NULL; + } + s->s_imap[0]->b_data[0] |= 1; + s->s_zmap[0]->b_data[0] |= 1; + free_super(s); + return s; +} + +int sys_umount(char * dev_name) +{ + struct m_inode * inode; + struct super_block * sb; + int dev; + + if (!(inode=namei(dev_name))) + return -ENOENT; + dev = inode->i_zone[0]; + if (!S_ISBLK(inode->i_mode)) { + iput(inode); + return -ENOTBLK; + } + iput(inode); + if (dev==ROOT_DEV) + return -EBUSY; + if (!(sb=get_super(dev)) || !(sb->s_imount)) + return -ENOENT; + if (!sb->s_imount->i_mount) + printk("Mounted inode has i_mount=0\n"); + for (inode=inode_table+0 ; inodei_dev==dev && inode->i_count) + return -EBUSY; + sb->s_imount->i_mount=0; + iput(sb->s_imount); + sb->s_imount = NULL; + iput(sb->s_isup); + sb->s_isup = NULL; + put_super(dev); + sync_dev(dev); + return 0; +} + +int sys_mount(char * dev_name, char * dir_name, int rw_flag) +{ + struct m_inode * dev_i, * dir_i; + struct super_block * sb; + int dev; + + if (!(dev_i=namei(dev_name))) + return -ENOENT; + dev = dev_i->i_zone[0]; + if (!S_ISBLK(dev_i->i_mode)) { + iput(dev_i); + return -EPERM; + } + iput(dev_i); + if (!(dir_i=namei(dir_name))) + return -ENOENT; + if (dir_i->i_count != 1 || dir_i->i_num == ROOT_INO) { + iput(dir_i); + return -EBUSY; + } + if (!S_ISDIR(dir_i->i_mode)) { + iput(dir_i); + return -EPERM; + } + if (!(sb=read_super(dev))) { + iput(dir_i); + return -EBUSY; + } + if (sb->s_imount) { + iput(dir_i); + return -EBUSY; + } + if (dir_i->i_mount) { + iput(dir_i); + return -EPERM; + } + sb->s_imount=dir_i; + dir_i->i_mount=1; + dir_i->i_dirt=1; /* NOTE! we don't iput(dir_i) */ + return 0; /* we do that in umount */ +} + +void mount_root(void) +{ + int i,free; + struct super_block * p; + struct m_inode * mi; + + if (32 != sizeof (struct d_inode)) + panic("bad i-node size"); + for(i=0;is_dev = 0; + p->s_lock = 0; + p->s_wait = NULL; + } + if (!(p=read_super(ROOT_DEV))) + panic("Unable to mount root"); + if (!(mi=iget(ROOT_DEV,ROOT_INO))) + panic("Unable to read root i-node"); + mi->i_count += 3 ; /* NOTE! it is logically used 4 times, not 1 */ + p->s_isup = p->s_imount = mi; + current->pwd = mi; + current->root = mi; + free=0; + i=p->s_nzones; + while (-- i >= 0) + if (!set_bit(i&8191,p->s_zmap[i>>13]->b_data)) + free++; + printk("%d/%d free blocks\n\r",free,p->s_nzones); + free=0; + i=p->s_ninodes+1; + while (-- i >= 0) + if (!set_bit(i&8191,p->s_imap[i>>13]->b_data)) + free++; + printk("%d/%d free inodes\n\r",free,p->s_ninodes); +} diff --git a/linux-0.11-lab/cur/linux/fs/super.o b/linux-0.11-lab/cur/linux/fs/super.o new file mode 100644 index 0000000000000000000000000000000000000000..ddd4a45729873af8fa5cec7d1be1b2f142e5522d GIT binary patch literal 12284 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/fs/truncate.c b/linux-0.11-lab/cur/linux/fs/truncate.c new file mode 100644 index 0000000..36f3ea2 --- /dev/null +++ b/linux-0.11-lab/cur/linux/fs/truncate.c @@ -0,0 +1,65 @@ +/* + * linux/fs/truncate.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +#include + +static void free_ind(int dev,int block) +{ + struct buffer_head * bh; + unsigned short * p; + int i; + + if (!block) + return; + if (bh=bread(dev,block)) { + p = (unsigned short *) bh->b_data; + for (i=0;i<512;i++,p++) + if (*p) + free_block(dev,*p); + brelse(bh); + } + free_block(dev,block); +} + +static void free_dind(int dev,int block) +{ + struct buffer_head * bh; + unsigned short * p; + int i; + + if (!block) + return; + if (bh=bread(dev,block)) { + p = (unsigned short *) bh->b_data; + for (i=0;i<512;i++,p++) + if (*p) + free_ind(dev,*p); + brelse(bh); + } + free_block(dev,block); +} + +void truncate(struct m_inode * inode) +{ + int i; + + if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode))) + return; + for (i=0;i<7;i++) + if (inode->i_zone[i]) { + free_block(inode->i_dev,inode->i_zone[i]); + inode->i_zone[i]=0; + } + free_ind(inode->i_dev,inode->i_zone[7]); + free_dind(inode->i_dev,inode->i_zone[8]); + inode->i_zone[7] = inode->i_zone[8] = 0; + inode->i_size = 0; + inode->i_dirt = 1; + inode->i_mtime = inode->i_ctime = CURRENT_TIME; +} + diff --git a/linux-0.11-lab/cur/linux/fs/truncate.o b/linux-0.11-lab/cur/linux/fs/truncate.o new file mode 100644 index 0000000000000000000000000000000000000000..88d0ba8d075c992ec9846e2d78471fa44b1e9791 GIT binary patch literal 6848 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 relocate with value of symbol. + r_symbolnum is the index of the symbol + in file's the symbol table. + 0 => relocate with the address of a segment. + r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS + (the N_EXT bit may be set also, but signifies nothing). */ + unsigned int r_extern:1; + /* Four bits that aren't used, but when writing an object file + it is desirable to clear them. */ + unsigned int r_pad:4; +}; +#endif /* no N_RELOCATION_INFO_DECLARED. */ + + +#endif /* __A_OUT_GNU_H__ */ diff --git a/linux-0.11-lab/cur/linux/include/asm/io.h b/linux-0.11-lab/cur/linux/include/asm/io.h new file mode 100644 index 0000000..d5cc42a --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/asm/io.h @@ -0,0 +1,24 @@ +#define outb(value,port) \ +__asm__ ("outb %%al,%%dx"::"a" (value),"d" (port)) + + +#define inb(port) ({ \ +unsigned char _v; \ +__asm__ volatile ("inb %%dx,%%al":"=a" (_v):"d" (port)); \ +_v; \ +}) + +#define outb_p(value,port) \ +__asm__ ("outb %%al,%%dx\n" \ + "\tjmp 1f\n" \ + "1:\tjmp 1f\n" \ + "1:"::"a" (value),"d" (port)) + +#define inb_p(port) ({ \ +unsigned char _v; \ +__asm__ volatile ("inb %%dx,%%al\n" \ + "\tjmp 1f\n" \ + "1:\tjmp 1f\n" \ + "1:":"=a" (_v):"d" (port)); \ +_v; \ +}) diff --git a/linux-0.11-lab/cur/linux/include/asm/memory.h b/linux-0.11-lab/cur/linux/include/asm/memory.h new file mode 100644 index 0000000..51b69e7 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/asm/memory.h @@ -0,0 +1,15 @@ +/* + * NOTE!!! memcpy(dest,src,n) assumes ds=es=normal data segment. This + * goes for all kernel functions (ds=es=kernel space, fs=local data, + * gs=null), as well as for all well-behaving user programs (ds=es= + * user data space). This is NOT a bug, as any user program that changes + * es deserves to die if it isn't careful. + */ +#define memcpy(dest,src,n) ({ \ +void * _res = dest; \ +__asm__ ("cld;rep;movsb" \ + ::"D" ((long)(_res)),"S" ((long)(src)),"c" ((long) (n)) \ + ); \ +_res; \ +}) + diff --git a/linux-0.11-lab/cur/linux/include/asm/segment.h b/linux-0.11-lab/cur/linux/include/asm/segment.h new file mode 100644 index 0000000..94dd102 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/asm/segment.h @@ -0,0 +1,65 @@ +static inline unsigned char get_fs_byte(const char * addr) +{ + unsigned register char _v; + + __asm__ ("movb %%fs:%1,%0":"=r" (_v):"m" (*addr)); + return _v; +} + +static inline unsigned short get_fs_word(const unsigned short *addr) +{ + unsigned short _v; + + __asm__ ("movw %%fs:%1,%0":"=r" (_v):"m" (*addr)); + return _v; +} + +static inline unsigned long get_fs_long(const unsigned long *addr) +{ + unsigned long _v; + + __asm__ ("movl %%fs:%1,%0":"=r" (_v):"m" (*addr)); \ + return _v; +} + +static inline void put_fs_byte(char val,char *addr) +{ +__asm__ ("movb %0,%%fs:%1"::"r" (val),"m" (*addr)); +} + +static inline void put_fs_word(short val,short * addr) +{ +__asm__ ("movw %0,%%fs:%1"::"r" (val),"m" (*addr)); +} + +static inline void put_fs_long(unsigned long val,unsigned long * addr) +{ +__asm__ ("movl %0,%%fs:%1"::"r" (val),"m" (*addr)); +} + +/* + * Someone who knows GNU asm better than I should double check the followig. + * It seems to work, but I don't know if I'm doing something subtly wrong. + * --- TYT, 11/24/91 + * [ nothing wrong here, Linus ] + */ + +static inline unsigned long get_fs() +{ + unsigned short _v; + __asm__("mov %%fs,%%ax":"=a" (_v):); + return _v; +} + +static inline unsigned long get_ds() +{ + unsigned short _v; + __asm__("mov %%ds,%%ax":"=a" (_v):); + return _v; +} + +static inline void set_fs(unsigned long val) +{ + __asm__("mov %0,%%fs"::"a" ((unsigned short) val)); +} + diff --git a/linux-0.11-lab/cur/linux/include/asm/system.h b/linux-0.11-lab/cur/linux/include/asm/system.h new file mode 100644 index 0000000..0b5a21d --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/asm/system.h @@ -0,0 +1,66 @@ +#define move_to_user_mode() \ +__asm__ ("movl %%esp,%%eax\n\t" \ + "pushl $0x17\n\t" \ + "pushl %%eax\n\t" \ + "pushfl\n\t" \ + "pushl $0x0f\n\t" \ + "pushl $1f\n\t" \ + "iret\n" \ + "1:\tmovl $0x17,%%eax\n\t" \ + "movw %%ax,%%ds\n\t" \ + "movw %%ax,%%es\n\t" \ + "movw %%ax,%%fs\n\t" \ + "movw %%ax,%%gs" \ + :::"ax") + +#define sti() __asm__ ("sti"::) +#define cli() __asm__ ("cli"::) +#define nop() __asm__ ("nop"::) + +#define iret() __asm__ ("iret"::) + +#define _set_gate(gate_addr,type,dpl,addr) \ +__asm__ ("movw %%dx,%%ax\n\t" \ + "movw %0,%%dx\n\t" \ + "movl %%eax,%1\n\t" \ + "movl %%edx,%2" \ + : \ + : "i" ((short) (0x8000+(dpl<<13)+(type<<8))), \ + "o" (*((char *) (gate_addr))), \ + "o" (*(4+(char *) (gate_addr))), \ + "d" ((char *) (addr)),"a" (0x00080000)) + +#define set_intr_gate(n,addr) \ + _set_gate(&idt[n],14,0,addr) + +#define set_trap_gate(n,addr) \ + _set_gate(&idt[n],15,0,addr) + +#define set_system_gate(n,addr) \ + _set_gate(&idt[n],15,3,addr) + +#define _set_seg_desc(gate_addr,type,dpl,base,limit) {\ + *(gate_addr) = ((base) & 0xff000000) | \ + (((base) & 0x00ff0000)>>16) | \ + ((limit) & 0xf0000) | \ + ((dpl)<<13) | \ + (0x00408000) | \ + ((type)<<8); \ + *((gate_addr)+1) = (((base) & 0x0000ffff)<<16) | \ + ((limit) & 0x0ffff); } + +#define _set_tssldt_desc(n,addr,type) \ +__asm__ ("movw $104,%1\n\t" \ + "movw %%ax,%2\n\t" \ + "rorl $16,%%eax\n\t" \ + "movb %%al,%3\n\t" \ + "movb $" type ",%4\n\t" \ + "movb $0x00,%5\n\t" \ + "movb %%ah,%6\n\t" \ + "rorl $16,%%eax" \ + ::"a" (addr), "m" (*(n)), "m" (*(n+2)), "m" (*(n+4)), \ + "m" (*(n+5)), "m" (*(n+6)), "m" (*(n+7)) \ + ) + +#define set_tss_desc(n,addr) _set_tssldt_desc(((char *) (n)),addr,"0x89") +#define set_ldt_desc(n,addr) _set_tssldt_desc(((char *) (n)),addr,"0x82") diff --git a/linux-0.11-lab/cur/linux/include/const.h b/linux-0.11-lab/cur/linux/include/const.h new file mode 100644 index 0000000..7828e61 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/const.h @@ -0,0 +1,15 @@ +#ifndef _CONST_H +#define _CONST_H + +#define BUFFER_END 0x200000 + +#define I_TYPE 0170000 +#define I_DIRECTORY 0040000 +#define I_REGULAR 0100000 +#define I_BLOCK_SPECIAL 0060000 +#define I_CHAR_SPECIAL 0020000 +#define I_NAMED_PIPE 0010000 +#define I_SET_UID_BIT 0004000 +#define I_SET_GID_BIT 0002000 + +#endif diff --git a/linux-0.11-lab/cur/linux/include/ctype.h b/linux-0.11-lab/cur/linux/include/ctype.h new file mode 100644 index 0000000..7acf55d --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/ctype.h @@ -0,0 +1,34 @@ +#ifndef _CTYPE_H +#define _CTYPE_H + +#define _U 0x01 /* upper */ +#define _L 0x02 /* lower */ +#define _D 0x04 /* digit */ +#define _C 0x08 /* cntrl */ +#define _P 0x10 /* punct */ +#define _S 0x20 /* white space (space/lf/tab) */ +#define _X 0x40 /* hex digit */ +#define _SP 0x80 /* hard space (0x20) */ + +extern unsigned char _ctype[]; +extern char _ctmp; + +#define isalnum(c) ((_ctype+1)[c]&(_U|_L|_D)) +#define isalpha(c) ((_ctype+1)[c]&(_U|_L)) +#define iscntrl(c) ((_ctype+1)[c]&(_C)) +#define isdigit(c) ((_ctype+1)[c]&(_D)) +#define isgraph(c) ((_ctype+1)[c]&(_P|_U|_L|_D)) +#define islower(c) ((_ctype+1)[c]&(_L)) +#define isprint(c) ((_ctype+1)[c]&(_P|_U|_L|_D|_SP)) +#define ispunct(c) ((_ctype+1)[c]&(_P)) +#define isspace(c) ((_ctype+1)[c]&(_S)) +#define isupper(c) ((_ctype+1)[c]&(_U)) +#define isxdigit(c) ((_ctype+1)[c]&(_D|_X)) + +#define isascii(c) (((unsigned) c)<=0x7f) +#define toascii(c) (((unsigned) c)&0x7f) + +#define tolower(c) (_ctmp=c,isupper(_ctmp)?_ctmp-('A'-'a'):_ctmp) +#define toupper(c) (_ctmp=c,islower(_ctmp)?_ctmp-('a'-'A'):_ctmp) + +#endif diff --git a/linux-0.11-lab/cur/linux/include/errno.h b/linux-0.11-lab/cur/linux/include/errno.h new file mode 100644 index 0000000..c282f69 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/errno.h @@ -0,0 +1,60 @@ +#ifndef _ERRNO_H +#define _ERRNO_H + +/* + * ok, as I hadn't got any other source of information about + * possible error numbers, I was forced to use the same numbers + * as minix. + * Hopefully these are posix or something. I wouldn't know (and posix + * isn't telling me - they want $$$ for their f***ing standard). + * + * We don't use the _SIGN cludge of minix, so kernel returns must + * see to the sign by themselves. + * + * NOTE! Remember to change strerror() if you change this file! + */ + +extern int errno; + +#define ERROR 99 +#define EPERM 1 +#define ENOENT 2 +#define ESRCH 3 +#define EINTR 4 +#define EIO 5 +#define ENXIO 6 +#define E2BIG 7 +#define ENOEXEC 8 +#define EBADF 9 +#define ECHILD 10 +#define EAGAIN 11 +#define ENOMEM 12 +#define EACCES 13 +#define EFAULT 14 +#define ENOTBLK 15 +#define EBUSY 16 +#define EEXIST 17 +#define EXDEV 18 +#define ENODEV 19 +#define ENOTDIR 20 +#define EISDIR 21 +#define EINVAL 22 +#define ENFILE 23 +#define EMFILE 24 +#define ENOTTY 25 +#define ETXTBSY 26 +#define EFBIG 27 +#define ENOSPC 28 +#define ESPIPE 29 +#define EROFS 30 +#define EMLINK 31 +#define EPIPE 32 +#define EDOM 33 +#define ERANGE 34 +#define EDEADLK 35 +#define ENAMETOOLONG 36 +#define ENOLCK 37 +#define ENOSYS 38 +#define ENOTEMPTY 39 + +#endif diff --git a/linux-0.11-lab/cur/linux/include/fcntl.h b/linux-0.11-lab/cur/linux/include/fcntl.h new file mode 100644 index 0000000..a5bf9af --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/fcntl.h @@ -0,0 +1,55 @@ +#ifndef _FCNTL_H +#define _FCNTL_H + +#include + +/* open/fcntl - NOCTTY, NDELAY isn't implemented yet */ +#define O_ACCMODE 00003 +#define O_RDONLY 00 +#define O_WRONLY 01 +#define O_RDWR 02 +#define O_CREAT 00100 /* not fcntl */ +#define O_EXCL 00200 /* not fcntl */ +#define O_NOCTTY 00400 /* not fcntl */ +#define O_TRUNC 01000 /* not fcntl */ +#define O_APPEND 02000 +#define O_NONBLOCK 04000 /* not fcntl */ +#define O_NDELAY O_NONBLOCK + +/* Defines for fcntl-commands. Note that currently + * locking isn't supported, and other things aren't really + * tested. + */ +#define F_DUPFD 0 /* dup */ +#define F_GETFD 1 /* get f_flags */ +#define F_SETFD 2 /* set f_flags */ +#define F_GETFL 3 /* more flags (cloexec) */ +#define F_SETFL 4 +#define F_GETLK 5 /* not implemented */ +#define F_SETLK 6 +#define F_SETLKW 7 + +/* for F_[GET|SET]FL */ +#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ + +/* Ok, these are locking features, and aren't implemented at any + * level. POSIX wants them. + */ +#define F_RDLCK 0 +#define F_WRLCK 1 +#define F_UNLCK 2 + +/* Once again - not implemented, but ... */ +struct flock { + short l_type; + short l_whence; + off_t l_start; + off_t l_len; + pid_t l_pid; +}; + +extern int creat(const char * filename,mode_t mode); +extern int fcntl(int fildes,int cmd, ...); +extern int open(const char * filename, int flags, ...); + +#endif diff --git a/linux-0.11-lab/cur/linux/include/linux/config.h b/linux-0.11-lab/cur/linux/include/linux/config.h new file mode 100644 index 0000000..c979fb3 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/linux/config.h @@ -0,0 +1,48 @@ +#ifndef _CONFIG_H +#define _CONFIG_H + +/* + * The root-device is no longer hard-coded. You can change the default + * root-device by changing the line ROOT_DEV = XXX in boot/bootsect.s + */ + +/* + * define your keyboard here - + * KBD_FINNISH for Finnish keyboards + * KBD_US for US-type + * KBD_GR for German keyboards + * KBD_FR for Frech keyboard + */ +#define KBD_US +/*#define KBD_GR */ +/*#define KBD_FR */ +/*#define KBD_FINNISH */ + +/* + * Normally, Linux can get the drive parameters from the BIOS at + * startup, but if this for some unfathomable reason fails, you'd + * be left stranded. For this case, you can define HD_TYPE, which + * contains all necessary info on your harddisk. + * + * The HD_TYPE macro should look like this: + * + * #define HD_TYPE { head, sect, cyl, wpcom, lzone, ctl} + * + * In case of two harddisks, the info should be sepatated by + * commas: + * + * #define HD_TYPE { h,s,c,wpcom,lz,ctl },{ h,s,c,wpcom,lz,ctl } + */ +/* + This is an example, two drives, first is type 2, second is type 3: + +#define HD_TYPE { 4,17,615,300,615,8 }, { 6,17,615,300,615,0 } + + NOTE: ctl is 0 for all drives with heads<=8, and ctl=8 for drives + with more than 8 heads. + + If you want the BIOS to tell what kind of drive you have, just + leave HD_TYPE undefined. This is the normal thing to do. +*/ + +#endif diff --git a/linux-0.11-lab/cur/linux/include/linux/fdreg.h b/linux-0.11-lab/cur/linux/include/linux/fdreg.h new file mode 100644 index 0000000..01355af --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/linux/fdreg.h @@ -0,0 +1,71 @@ +/* + * This file contains some defines for the floppy disk controller. + * Various sources. Mostly "IBM Microcomputers: A Programmers + * Handbook", Sanches and Canton. + */ +#ifndef _FDREG_H +#define _FDREG_H + +extern int ticks_to_floppy_on(unsigned int nr); +extern void floppy_on(unsigned int nr); +extern void floppy_off(unsigned int nr); +extern void floppy_select(unsigned int nr); +extern void floppy_deselect(unsigned int nr); + +/* Fd controller regs. S&C, about page 340 */ +#define FD_STATUS 0x3f4 +#define FD_DATA 0x3f5 +#define FD_DOR 0x3f2 /* Digital Output Register */ +#define FD_DIR 0x3f7 /* Digital Input Register (read) */ +#define FD_DCR 0x3f7 /* Diskette Control Register (write)*/ + +/* Bits of main status register */ +#define STATUS_BUSYMASK 0x0F /* drive busy mask */ +#define STATUS_BUSY 0x10 /* FDC busy */ +#define STATUS_DMA 0x20 /* 0- DMA mode */ +#define STATUS_DIR 0x40 /* 0- cpu->fdc */ +#define STATUS_READY 0x80 /* Data reg ready */ + +/* Bits of FD_ST0 */ +#define ST0_DS 0x03 /* drive select mask */ +#define ST0_HA 0x04 /* Head (Address) */ +#define ST0_NR 0x08 /* Not Ready */ +#define ST0_ECE 0x10 /* Equipment chech error */ +#define ST0_SE 0x20 /* Seek end */ +#define ST0_INTR 0xC0 /* Interrupt code mask */ + +/* Bits of FD_ST1 */ +#define ST1_MAM 0x01 /* Missing Address Mark */ +#define ST1_WP 0x02 /* Write Protect */ +#define ST1_ND 0x04 /* No Data - unreadable */ +#define ST1_OR 0x10 /* OverRun */ +#define ST1_CRC 0x20 /* CRC error in data or addr */ +#define ST1_EOC 0x80 /* End Of Cylinder */ + +/* Bits of FD_ST2 */ +#define ST2_MAM 0x01 /* Missing Addess Mark (again) */ +#define ST2_BC 0x02 /* Bad Cylinder */ +#define ST2_SNS 0x04 /* Scan Not Satisfied */ +#define ST2_SEH 0x08 /* Scan Equal Hit */ +#define ST2_WC 0x10 /* Wrong Cylinder */ +#define ST2_CRC 0x20 /* CRC error in data field */ +#define ST2_CM 0x40 /* Control Mark = deleted */ + +/* Bits of FD_ST3 */ +#define ST3_HA 0x04 /* Head (Address) */ +#define ST3_TZ 0x10 /* Track Zero signal (1=track 0) */ +#define ST3_WP 0x40 /* Write Protect */ + +/* Values for FD_COMMAND */ +#define FD_RECALIBRATE 0x07 /* move to track 0 */ +#define FD_SEEK 0x0F /* seek track */ +#define FD_READ 0xE6 /* read with MT, MFM, SKip deleted */ +#define FD_WRITE 0xC5 /* write with MT, MFM */ +#define FD_SENSEI 0x08 /* Sense Interrupt Status */ +#define FD_SPECIFY 0x03 /* specify HUT etc */ + +/* DMA commands */ +#define DMA_READ 0x46 +#define DMA_WRITE 0x4A + +#endif diff --git a/linux-0.11-lab/cur/linux/include/linux/fs.h b/linux-0.11-lab/cur/linux/include/linux/fs.h new file mode 100644 index 0000000..7a90b10 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/linux/fs.h @@ -0,0 +1,202 @@ +/* + * This file has definitions for some important file table + * structures etc. + */ + +#ifndef _FS_H +#define _FS_H + +#include + +/* devices are as follows: (same as minix, so we can use the minix + * file system. These are major numbers.) + * + * 0 - unused (nodev) + * 1 - /dev/mem + * 2 - /dev/fd + * 3 - /dev/hd + * 4 - /dev/ttyx + * 5 - /dev/tty + * 6 - /dev/lp + * 7 - unnamed pipes + */ + +#define IS_SEEKABLE(x) ((x)>=1 && (x)<=3) + +#define READ 0 +#define WRITE 1 +#define READA 2 /* read-ahead - don't pause */ +#define WRITEA 3 /* "write-ahead" - silly, but somewhat useful */ + +void buffer_init(long buffer_end); + +#define MAJOR(a) (((unsigned)(a))>>8) +#define MINOR(a) ((a)&0xff) + +#define NAME_LEN 14 +#define ROOT_INO 1 + +#define I_MAP_SLOTS 8 +#define Z_MAP_SLOTS 8 +#define SUPER_MAGIC 0x137F + +#define NR_OPEN 20 +#define NR_INODE 32 +#define NR_FILE 64 +#define NR_SUPER 8 +#define NR_HASH 307 +#define NR_BUFFERS nr_buffers +#define BLOCK_SIZE 1024 +#define BLOCK_SIZE_BITS 10 +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#define INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct d_inode))) +#define DIR_ENTRIES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct dir_entry))) + +#define PIPE_HEAD(inode) ((inode).i_zone[0]) +#define PIPE_TAIL(inode) ((inode).i_zone[1]) +#define PIPE_SIZE(inode) ((PIPE_HEAD(inode)-PIPE_TAIL(inode))&(PAGE_SIZE-1)) +#define PIPE_EMPTY(inode) (PIPE_HEAD(inode)==PIPE_TAIL(inode)) +#define PIPE_FULL(inode) (PIPE_SIZE(inode)==(PAGE_SIZE-1)) +#define INC_PIPE(head) \ +__asm__("incl %0\n\tandl $4095,%0"::"m" (head)) + +typedef char buffer_block[BLOCK_SIZE]; + +struct buffer_head { + char * b_data; /* pointer to data block (1024 bytes) */ + unsigned long b_blocknr; /* block number */ + unsigned short b_dev; /* device (0 = free) */ + unsigned char b_uptodate; + unsigned char b_dirt; /* 0-clean,1-dirty */ + unsigned char b_count; /* users using this block */ + unsigned char b_lock; /* 0 - ok, 1 -locked */ + struct task_struct * b_wait; + struct buffer_head * b_prev; + struct buffer_head * b_next; + struct buffer_head * b_prev_free; + struct buffer_head * b_next_free; +}; + +struct d_inode { + unsigned short i_mode; + unsigned short i_uid; + unsigned long i_size; + unsigned long i_time; + unsigned char i_gid; + unsigned char i_nlinks; + unsigned short i_zone[9]; +}; + +struct m_inode { + unsigned short i_mode; + unsigned short i_uid; + unsigned long i_size; + unsigned long i_mtime; + unsigned char i_gid; + unsigned char i_nlinks; + unsigned short i_zone[9]; +/* these are in memory also */ + struct task_struct * i_wait; + unsigned long i_atime; + unsigned long i_ctime; + unsigned short i_dev; + unsigned short i_num; + unsigned short i_count; + unsigned char i_lock; + unsigned char i_dirt; + unsigned char i_pipe; + unsigned char i_mount; + unsigned char i_seek; + unsigned char i_update; +}; + +struct file { + unsigned short f_mode; + unsigned short f_flags; + unsigned short f_count; + struct m_inode * f_inode; + off_t f_pos; +}; + +struct super_block { + unsigned short s_ninodes; + unsigned short s_nzones; + unsigned short s_imap_blocks; + unsigned short s_zmap_blocks; + unsigned short s_firstdatazone; + unsigned short s_log_zone_size; + unsigned long s_max_size; + unsigned short s_magic; +/* These are only in memory */ + struct buffer_head * s_imap[8]; + struct buffer_head * s_zmap[8]; + unsigned short s_dev; + struct m_inode * s_isup; + struct m_inode * s_imount; + unsigned long s_time; + struct task_struct * s_wait; + unsigned char s_lock; + unsigned char s_rd_only; + unsigned char s_dirt; +}; + +struct d_super_block { + unsigned short s_ninodes; + unsigned short s_nzones; + unsigned short s_imap_blocks; + unsigned short s_zmap_blocks; + unsigned short s_firstdatazone; + unsigned short s_log_zone_size; + unsigned long s_max_size; + unsigned short s_magic; +}; + +struct dir_entry { + unsigned short inode; + char name[NAME_LEN]; +}; + +extern struct m_inode inode_table[NR_INODE]; +extern struct file file_table[NR_FILE]; +extern struct super_block super_block[NR_SUPER]; +extern struct buffer_head * start_buffer; +extern int nr_buffers; + +extern void check_disk_change(int dev); +extern int floppy_change(unsigned int nr); +extern int ticks_to_floppy_on(unsigned int dev); +extern void floppy_on(unsigned int dev); +extern void floppy_off(unsigned int dev); +extern void truncate(struct m_inode * inode); +extern void sync_inodes(void); +extern void wait_on(struct m_inode * inode); +extern int bmap(struct m_inode * inode,int block); +extern int create_block(struct m_inode * inode,int block); +extern struct m_inode * namei(const char * pathname); +extern int open_namei(const char * pathname, int flag, int mode, + struct m_inode ** res_inode); +extern void iput(struct m_inode * inode); +extern struct m_inode * iget(int dev,int nr); +extern struct m_inode * get_empty_inode(void); +extern struct m_inode * get_pipe_inode(void); +extern struct buffer_head * get_hash_table(int dev, int block); +extern struct buffer_head * getblk(int dev, int block); +extern void ll_rw_block(int rw, struct buffer_head * bh); +extern void brelse(struct buffer_head * buf); +extern struct buffer_head * bread(int dev,int block); +extern void bread_page(unsigned long addr,int dev,int b[4]); +extern struct buffer_head * breada(int dev,int block,...); +extern int new_block(int dev); +extern void free_block(int dev, int block); +extern struct m_inode * new_inode(int dev); +extern void free_inode(struct m_inode * inode); +extern int sync_dev(int dev); +extern struct super_block * get_super(int dev); +extern int ROOT_DEV; + +extern void mount_root(void); + +#endif diff --git a/linux-0.11-lab/cur/linux/include/linux/hdreg.h b/linux-0.11-lab/cur/linux/include/linux/hdreg.h new file mode 100644 index 0000000..e6c593f --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/linux/hdreg.h @@ -0,0 +1,65 @@ +/* + * This file contains some defines for the AT-hd-controller. + * Various sources. Check out some definitions (see comments with + * a ques). + */ +#ifndef _HDREG_H +#define _HDREG_H + +/* Hd controller regs. Ref: IBM AT Bios-listing */ +#define HD_DATA 0x1f0 /* _CTL when writing */ +#define HD_ERROR 0x1f1 /* see err-bits */ +#define HD_NSECTOR 0x1f2 /* nr of sectors to read/write */ +#define HD_SECTOR 0x1f3 /* starting sector */ +#define HD_LCYL 0x1f4 /* starting cylinder */ +#define HD_HCYL 0x1f5 /* high byte of starting cyl */ +#define HD_CURRENT 0x1f6 /* 101dhhhh , d=drive, hhhh=head */ +#define HD_STATUS 0x1f7 /* see status-bits */ +#define HD_PRECOMP HD_ERROR /* same io address, read=error, write=precomp */ +#define HD_COMMAND HD_STATUS /* same io address, read=status, write=cmd */ + +#define HD_CMD 0x3f6 + +/* Bits of HD_STATUS */ +#define ERR_STAT 0x01 +#define INDEX_STAT 0x02 +#define ECC_STAT 0x04 /* Corrected error */ +#define DRQ_STAT 0x08 +#define SEEK_STAT 0x10 +#define WRERR_STAT 0x20 +#define READY_STAT 0x40 +#define BUSY_STAT 0x80 + +/* Values for HD_COMMAND */ +#define WIN_RESTORE 0x10 +#define WIN_READ 0x20 +#define WIN_WRITE 0x30 +#define WIN_VERIFY 0x40 +#define WIN_FORMAT 0x50 +#define WIN_INIT 0x60 +#define WIN_SEEK 0x70 +#define WIN_DIAGNOSE 0x90 +#define WIN_SPECIFY 0x91 + +/* Bits for HD_ERROR */ +#define MARK_ERR 0x01 /* Bad address mark ? */ +#define TRK0_ERR 0x02 /* couldn't find track 0 */ +#define ABRT_ERR 0x04 /* ? */ +#define ID_ERR 0x10 /* ? */ +#define ECC_ERR 0x40 /* ? */ +#define BBD_ERR 0x80 /* ? */ + +struct partition { + unsigned char boot_ind; /* 0x80 - active (unused) */ + unsigned char head; /* ? */ + unsigned char sector; /* ? */ + unsigned char cyl; /* ? */ + unsigned char sys_ind; /* ? */ + unsigned char end_head; /* ? */ + unsigned char end_sector; /* ? */ + unsigned char end_cyl; /* ? */ + unsigned int start_sect; /* starting sector counting from 0 */ + unsigned int nr_sects; /* nr of sectors in partition */ +}; + +#endif diff --git a/linux-0.11-lab/cur/linux/include/linux/head.h b/linux-0.11-lab/cur/linux/include/linux/head.h new file mode 100644 index 0000000..db3dda2 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/linux/head.h @@ -0,0 +1,20 @@ +#ifndef _HEAD_H +#define _HEAD_H + +typedef struct desc_struct { + unsigned long a,b; +} desc_table[256]; + +extern unsigned long pg_dir[1024]; +extern desc_table idt,gdt; + +#define GDT_NUL 0 +#define GDT_CODE 1 +#define GDT_DATA 2 +#define GDT_TMP 3 + +#define LDT_NUL 0 +#define LDT_CODE 1 +#define LDT_DATA 2 + +#endif diff --git a/linux-0.11-lab/cur/linux/include/linux/kernel.h b/linux-0.11-lab/cur/linux/include/linux/kernel.h new file mode 100644 index 0000000..cb40dd5 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/linux/kernel.h @@ -0,0 +1,22 @@ +/* + * 'kernel.h' contains some often-used function prototypes etc + */ +void verify_area(void * addr,int count); +volatile void panic(const char * str); +int printf(const char * fmt, ...); +int printk(const char * fmt, ...); +int tty_write(unsigned ch,char * buf,int count); +void * malloc(unsigned int size); +void free_s(void * obj, int size); + +#define free(x) free_s((x), 0) + +/* + * This is defined as a macro, but at some point this might become a + * real subroutine that sets a flag if it returns true (to do + * BSD-style accounting where the process is flagged if it uses root + * privs). The implication of this is that you should do normal + * permissions checks first, and check suser() last. + */ +#define suser() (current->euid == 0) + diff --git a/linux-0.11-lab/cur/linux/include/linux/mm.h b/linux-0.11-lab/cur/linux/include/linux/mm.h new file mode 100644 index 0000000..5a160f3 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/linux/mm.h @@ -0,0 +1,10 @@ +#ifndef _MM_H +#define _MM_H + +#define PAGE_SIZE 4096 + +extern unsigned long get_free_page(void); +extern unsigned long put_page(unsigned long page,unsigned long address); +extern void free_page(unsigned long addr); + +#endif diff --git a/linux-0.11-lab/cur/linux/include/linux/sched.h b/linux-0.11-lab/cur/linux/include/linux/sched.h new file mode 100644 index 0000000..772646a --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/linux/sched.h @@ -0,0 +1,239 @@ +#ifndef _SCHED_H +#define _SCHED_H + +#define NR_TASKS 64 +#define HZ 100 + +#define FIRST_TASK task[0] +#define LAST_TASK task[NR_TASKS-1] + +#include +#include +#include +#include + +#if (NR_OPEN > 32) +#error "Currently the close-on-exec-flags are in one word, max 32 files/proc" +#endif + +#define TASK_RUNNING 0 +#define TASK_INTERRUPTIBLE 1 +#define TASK_UNINTERRUPTIBLE 2 +#define TASK_ZOMBIE 3 +#define TASK_STOPPED 4 + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +extern int copy_page_tables(unsigned long from, unsigned long to, long size); +extern int free_page_tables(unsigned long from, unsigned long size); + +extern void sched_init(void); +extern void schedule(void); +extern void trap_init(void); +extern void panic(const char * str); +extern int tty_write(unsigned minor,char * buf,int count); + +typedef int (*fn_ptr)(); + +struct i387_struct { + long cwd; + long swd; + long twd; + long fip; + long fcs; + long foo; + long fos; + long st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */ +}; + +struct tss_struct { + long back_link; /* 16 high bits zero */ + long esp0; + long ss0; /* 16 high bits zero */ + long esp1; + long ss1; /* 16 high bits zero */ + long esp2; + long ss2; /* 16 high bits zero */ + long cr3; + long eip; + long eflags; + long eax,ecx,edx,ebx; + long esp; + long ebp; + long esi; + long edi; + long es; /* 16 high bits zero */ + long cs; /* 16 high bits zero */ + long ss; /* 16 high bits zero */ + long ds; /* 16 high bits zero */ + long fs; /* 16 high bits zero */ + long gs; /* 16 high bits zero */ + long ldt; /* 16 high bits zero */ + long trace_bitmap; /* bits: trace 0, bitmap 16-31 */ + struct i387_struct i387; +}; + +struct task_struct { +/* these are hardcoded - don't touch */ + long state; /* -1 unrunnable, 0 runnable, >0 stopped */ + long counter; + long priority; + long signal; + struct sigaction sigaction[32]; + long blocked; /* bitmap of masked signals */ +/* various fields */ + int exit_code; + unsigned long start_code,end_code,end_data,brk,start_stack; + long pid,father,pgrp,session,leader; + unsigned short uid,euid,suid; + unsigned short gid,egid,sgid; + long alarm; + long utime,stime,cutime,cstime,start_time; + unsigned short used_math; +/* file system info */ + int tty; /* -1 if no tty, so it must be signed */ + unsigned short umask; + struct m_inode * pwd; + struct m_inode * root; + struct m_inode * executable; + unsigned long close_on_exec; + struct file * filp[NR_OPEN]; +/* ldt for this task 0 - zero 1 - cs 2 - ds&ss */ + struct desc_struct ldt[3]; +/* tss for this task */ + struct tss_struct tss; +}; + +/* + * INIT_TASK is used to set up the first task table, touch at + * your own risk!. Base=0, limit=0x9ffff (=640kB) + */ +#define INIT_TASK \ +/* state etc */ { 0,15,15, \ +/* signals */ 0,{{},},0, \ +/* ec,brk... */ 0,0,0,0,0,0, \ +/* pid etc.. */ 0,-1,0,0,0, \ +/* uid etc */ 0,0,0,0,0,0, \ +/* alarm */ 0,0,0,0,0,0, \ +/* math */ 0, \ +/* fs info */ -1,0022,NULL,NULL,NULL,0, \ +/* filp */ {NULL,}, \ + { \ + {0,0}, \ +/* ldt */ {0x9f,0xc0fa00}, \ + {0x9f,0xc0f200}, \ + }, \ +/*tss*/ {0,PAGE_SIZE+(long)&init_task,0x10,0,0,0,0,(long)&pg_dir,\ + 0,0,0,0,0,0,0,0, \ + 0,0,0x17,0x17,0x17,0x17,0x17,0x17, \ + _LDT(0),0x80000000, \ + {} \ + }, \ +} + +extern struct task_struct *task[NR_TASKS]; +extern struct task_struct *last_task_used_math; +extern struct task_struct *current; +extern long volatile jiffies; +extern long startup_time; + +#define CURRENT_TIME (startup_time+jiffies/HZ) + +extern void add_timer(long jiffies, void (*fn)(void)); +extern void sleep_on(struct task_struct ** p); +extern void interruptible_sleep_on(struct task_struct ** p); +extern void wake_up(struct task_struct ** p); + +/* + * Entry into gdt where to find first TSS. 0-nul, 1-cs, 2-ds, 3-syscall + * 4-TSS0, 5-LDT0, 6-TSS1 etc ... + */ +#define FIRST_TSS_ENTRY 4 +#define FIRST_LDT_ENTRY (FIRST_TSS_ENTRY+1) +#define _TSS(n) ((((unsigned long) n)<<4)+(FIRST_TSS_ENTRY<<3)) +#define _LDT(n) ((((unsigned long) n)<<4)+(FIRST_LDT_ENTRY<<3)) +#define ltr(n) __asm__("ltr %%ax"::"a" (_TSS(n))) +#define lldt(n) __asm__("lldt %%ax"::"a" (_LDT(n))) +#define str(n) \ +__asm__("str %%ax\n\t" \ + "subl %2,%%eax\n\t" \ + "shrl $4,%%eax" \ + :"=a" (n) \ + :"a" (0),"i" (FIRST_TSS_ENTRY<<3)) +/* + * switch_to(n) should switch tasks to task nr n, first + * checking that n isn't the current task, in which case it does nothing. + * This also clears the TS-flag if the task we switched to has used + * tha math co-processor latest. + */ +#define switch_to(n) {\ +struct {long a,b;} __tmp; \ +__asm__("cmpl %%ecx,current\n\t" \ + "je 1f\n\t" \ + "movw %%dx,%1\n\t" \ + "xchgl %%ecx,current\n\t" \ + "ljmp *%0\n\t" \ + "cmpl %%ecx,last_task_used_math\n\t" \ + "jne 1f\n\t" \ + "clts\n" \ + "1:" \ + ::"m" (*&__tmp.a),"m" (*&__tmp.b), \ + "d" (_TSS(n)),"c" ((long) task[n])); \ +} + +#define PAGE_ALIGN(n) (((n)+0xfff)&0xfffff000) + +#define _set_base(addr,base) \ +__asm__ ("push %%edx\n\t" \ + "movw %%dx,%0\n\t" \ + "rorl $16,%%edx\n\t" \ + "movb %%dl,%1\n\t" \ + "movb %%dh,%2\n\t" \ + "pop %%edx" \ + ::"m" (*((addr)+2)), \ + "m" (*((addr)+4)), \ + "m" (*((addr)+7)), \ + "d" (base) \ + ) + +#define _set_limit(addr,limit) \ +__asm__ ("push %%edx\n\t" \ + "movw %%dx,%0\n\t" \ + "rorl $16,%%edx\n\t" \ + "movb %1,%%dh\n\t" \ + "andb $0xf0,%%dh\n\t" \ + "orb %%dh,%%dl\n\t" \ + "movb %%dl,%1\n\t" \ + "pop %%edx" \ + ::"m" (*(addr)), \ + "m" (*((addr)+6)), \ + "d" (limit) \ + ) + +#define set_base(ldt,base) _set_base( ((char *)&(ldt)) , (base) ) +#define set_limit(ldt,limit) _set_limit( ((char *)&(ldt)) , (limit-1)>>12 ) + +static inline unsigned long _get_base(char * addr) +{ + unsigned long __base; + __asm__("movb %3,%%dh\n\t" + "movb %2,%%dl\n\t" + "shll $16,%%edx\n\t" + "movw %1,%%dx" + :"=&d" (__base) + :"m" (*((addr)+2)), + "m" (*((addr)+4)), + "m" (*((addr)+7))); + return __base; +} + +#define get_base(ldt) _get_base( ((char *)&(ldt)) ) + +#define get_limit(segment) ({ \ +unsigned long __limit; \ +__asm__("lsll %1,%0\n\tincl %0":"=r" (__limit):"r" (segment)); \ +__limit;}) + +#endif diff --git a/linux-0.11-lab/cur/linux/include/linux/sys.h b/linux-0.11-lab/cur/linux/include/linux/sys.h new file mode 100644 index 0000000..2d05119 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/linux/sys.h @@ -0,0 +1,119 @@ +/* + * Why isn't this a .c file? Enquiring minds.... + */ + +extern int sys_setup(); +extern int sys_exit(); +extern int sys_fork(); +extern int sys_read(); +extern int sys_write(); +extern int sys_open(); +extern int sys_close(); +extern int sys_waitpid(); +extern int sys_creat(); +extern int sys_link(); +extern int sys_unlink(); +extern int sys_execve(); +extern int sys_chdir(); +extern int sys_time(); +extern int sys_mknod(); +extern int sys_chmod(); +extern int sys_chown(); +extern int sys_break(); +extern int sys_stat(); +extern int sys_lseek(); +extern int sys_getpid(); +extern int sys_mount(); +extern int sys_umount(); +extern int sys_setuid(); +extern int sys_getuid(); +extern int sys_stime(); +extern int sys_ptrace(); +extern int sys_alarm(); +extern int sys_fstat(); +extern int sys_pause(); +extern int sys_utime(); +extern int sys_stty(); +extern int sys_gtty(); +extern int sys_access(); +extern int sys_nice(); +extern int sys_ftime(); +extern int sys_sync(); +extern int sys_kill(); +extern int sys_rename(); +extern int sys_mkdir(); +extern int sys_rmdir(); +extern int sys_dup(); +extern int sys_pipe(); +extern int sys_times(); +extern int sys_prof(); +extern int sys_brk(); +extern int sys_setgid(); +extern int sys_getgid(); +extern int sys_signal(); +extern int sys_geteuid(); +extern int sys_getegid(); +extern int sys_acct(); +extern int sys_phys(); +extern int sys_lock(); +extern int sys_ioctl(); +extern int sys_fcntl(); +extern int sys_mpx(); +extern int sys_setpgid(); +extern int sys_ulimit(); +extern int sys_uname(); +extern int sys_umask(); +extern int sys_chroot(); +extern int sys_ustat(); +extern int sys_dup2(); +extern int sys_getppid(); +extern int sys_getpgrp(); +extern int sys_setsid(); +extern int sys_sigaction(); +extern int sys_sgetmask(); +extern int sys_ssetmask(); +extern int sys_setreuid(); +extern int sys_setregid(); +extern int sys_sigpending(); +extern int sys_sigsuspend(); +extern int sys_sethostname(); +extern int sys_setrlimit(); +extern int sys_getrlimit(); +extern int sys_getrusage(); +extern int sys_gettimeofday(); +extern int sys_settimeofday(); +extern int sys_getgroups(); +extern int sys_setgroups(); +extern int sys_select(); +extern int sys_symlink(); +extern int sys_lstat(); +extern int sys_readlink(); +extern int sys_uselib(); +extern int sys_execve2(); +extern int sys_getdents(); +extern int sys_pipe2(); +extern int sys_sleep(); +extern long sys_getcwd(); +extern long sys_mmap(); +extern int sys_munmap(); +extern int sys_clone(); + +fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read, +sys_write, sys_open, sys_close, sys_waitpid, sys_creat, sys_link, +sys_unlink, sys_execve, sys_chdir, sys_time, sys_mknod, sys_chmod, +sys_chown, sys_break, sys_stat, sys_lseek, sys_getpid, sys_mount, +sys_umount, sys_setuid, sys_getuid, sys_stime, sys_ptrace, sys_alarm, +sys_fstat, sys_pause, sys_utime, sys_stty, sys_gtty, sys_access, +sys_nice, sys_ftime, sys_sync, sys_kill, sys_rename, sys_mkdir, +sys_rmdir, sys_dup, sys_pipe, sys_times, sys_prof, sys_brk, sys_setgid, +sys_getgid, sys_signal, sys_geteuid, sys_getegid, sys_acct, sys_phys, +sys_lock, sys_ioctl, sys_fcntl, sys_mpx, sys_setpgid, sys_ulimit, +sys_uname, sys_umask, sys_chroot, sys_ustat, sys_dup2, sys_getppid, +sys_getpgrp, sys_setsid, sys_sigaction, sys_sgetmask, sys_ssetmask, +sys_setreuid,sys_setregid, sys_sigsuspend, sys_sigpending, sys_sethostname, +sys_setrlimit, sys_getrlimit, sys_getrusage, sys_gettimeofday, +sys_settimeofday, sys_getgroups, sys_setgroups, sys_select, sys_symlink, +sys_lstat, sys_readlink, sys_uselib, sys_execve2, sys_getdents, sys_pipe2, sys_sleep, sys_getcwd, sys_mmap, sys_munmap, sys_clone }; + +/* So we don't have to do any more manual updating.... */ +int NR_syscalls = sizeof(sys_call_table)/sizeof(fn_ptr); diff --git a/linux-0.11-lab/cur/linux/include/linux/tty.h b/linux-0.11-lab/cur/linux/include/linux/tty.h new file mode 100644 index 0000000..ad846b3 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/linux/tty.h @@ -0,0 +1,77 @@ +/* + * 'tty.h' defines some structures used by tty_io.c and some defines. + * + * NOTE! Don't touch this without checking that nothing in rs_io.s or + * con_io.s breaks. Some constants are hardwired into the system (mainly + * offsets into 'tty_queue' + */ + +#ifndef _TTY_H +#define _TTY_H + +#include + +#define TTY_BUF_SIZE 1024 + +struct tty_queue { + unsigned long data; + unsigned long head; + unsigned long tail; + struct task_struct * proc_list; + char buf[TTY_BUF_SIZE]; +}; + +#define INC(a) ((a) = ((a)+1) & (TTY_BUF_SIZE-1)) +#define DEC(a) ((a) = ((a)-1) & (TTY_BUF_SIZE-1)) +#define EMPTY(a) ((a).head == (a).tail) +#define LEFT(a) (((a).tail-(a).head-1)&(TTY_BUF_SIZE-1)) +#define LAST(a) ((a).buf[(TTY_BUF_SIZE-1)&((a).head-1)]) +#define FULL(a) (!LEFT(a)) +#define CHARS(a) (((a).head-(a).tail)&(TTY_BUF_SIZE-1)) +#define GETCH(queue,c) \ +(void)({c=(queue).buf[(queue).tail];INC((queue).tail);}) +#define PUTCH(c,queue) \ +(void)({(queue).buf[(queue).head]=(c);INC((queue).head);}) + +#define INTR_CHAR(tty) ((tty)->termios.c_cc[VINTR]) +#define QUIT_CHAR(tty) ((tty)->termios.c_cc[VQUIT]) +#define ERASE_CHAR(tty) ((tty)->termios.c_cc[VERASE]) +#define KILL_CHAR(tty) ((tty)->termios.c_cc[VKILL]) +#define EOF_CHAR(tty) ((tty)->termios.c_cc[VEOF]) +#define START_CHAR(tty) ((tty)->termios.c_cc[VSTART]) +#define STOP_CHAR(tty) ((tty)->termios.c_cc[VSTOP]) +#define SUSPEND_CHAR(tty) ((tty)->termios.c_cc[VSUSP]) + +struct tty_struct { + struct termios termios; + int pgrp; + int stopped; + void (*write)(struct tty_struct * tty); + struct tty_queue read_q; + struct tty_queue write_q; + struct tty_queue secondary; + }; + +extern struct tty_struct tty_table[]; + +/* intr=^C quit=^| erase=del kill=^U + eof=^D vtime=\0 vmin=\1 sxtc=\0 + start=^Q stop=^S susp=^Z eol=\0 + reprint=^R discard=^U werase=^W lnext=^V + eol2=\0 +*/ +#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" + +void rs_init(void); +void con_init(void); +void tty_init(void); + +int tty_read(unsigned c, char * buf, int n); +int tty_write(unsigned c, char * buf, int n); + +void rs_write(struct tty_struct * tty); +void con_write(struct tty_struct * tty); + +void copy_to_cooked(struct tty_struct * tty); + +#endif diff --git a/linux-0.11-lab/cur/linux/include/signal.h b/linux-0.11-lab/cur/linux/include/signal.h new file mode 100644 index 0000000..0eea9a3 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/signal.h @@ -0,0 +1,68 @@ +#ifndef _SIGNAL_H +#define _SIGNAL_H + +#include + +typedef int sig_atomic_t; +typedef unsigned int sigset_t; /* 32 bits */ + +#define _NSIG 32 +#define NSIG _NSIG + +#define SIGHUP 1 +#define SIGINT 2 +#define SIGQUIT 3 +#define SIGILL 4 +#define SIGTRAP 5 +#define SIGABRT 6 +#define SIGIOT 6 +#define SIGUNUSED 7 +#define SIGFPE 8 +#define SIGKILL 9 +#define SIGUSR1 10 +#define SIGSEGV 11 +#define SIGUSR2 12 +#define SIGPIPE 13 +#define SIGALRM 14 +#define SIGTERM 15 +#define SIGSTKFLT 16 +#define SIGCHLD 17 +#define SIGCONT 18 +#define SIGSTOP 19 +#define SIGTSTP 20 +#define SIGTTIN 21 +#define SIGTTOU 22 + +/* Ok, I haven't implemented sigactions, but trying to keep headers POSIX */ +#define SA_NOCLDSTOP 1 +#define SA_NOMASK 0x40000000 +#define SA_ONESHOT 0x80000000 + +#define SIG_BLOCK 0 /* for blocking signals */ +#define SIG_UNBLOCK 1 /* for unblocking signals */ +#define SIG_SETMASK 2 /* for setting the signal mask */ + +#define SIG_DFL ((void (*)(int))0) /* default signal handling */ +#define SIG_IGN ((void (*)(int))1) /* ignore signal */ + +struct sigaction { + void (*sa_handler)(int); + sigset_t sa_mask; + int sa_flags; + void (*sa_restorer)(void); +}; + +void (*signal(int _sig, void (*_func)(int)))(int); +int raise(int sig); +int kill(pid_t pid, int sig); +int sigaddset(sigset_t *mask, int signo); +int sigdelset(sigset_t *mask, int signo); +int sigemptyset(sigset_t *mask); +int sigfillset(sigset_t *mask); +int sigismember(sigset_t *mask, int signo); /* 1 - is, 0 - not, -1 error */ +int sigpending(sigset_t *set); +int sigprocmask(int how, sigset_t *set, sigset_t *oldset); +int sigsuspend(sigset_t *sigmask); +int sigaction(int sig, struct sigaction *act, struct sigaction *oldact); + +#endif /* _SIGNAL_H */ diff --git a/linux-0.11-lab/cur/linux/include/stdarg.h b/linux-0.11-lab/cur/linux/include/stdarg.h new file mode 100644 index 0000000..fd79ec0 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/stdarg.h @@ -0,0 +1,28 @@ +#ifndef _STDARG_H +#define _STDARG_H + +typedef char *va_list; + +/* Amount of space required in an argument list for an arg of type TYPE. + TYPE may alternatively be an expression whose type is used. */ + +#define __va_rounded_size(TYPE) \ + (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) + +#ifndef __sparc__ +#define va_start(AP, LASTARG) \ + (AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG))) +#else +#define va_start(AP, LASTARG) \ + (__builtin_saveregs (), \ + AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG))) +#endif + +void va_end (va_list); /* Defined in gnulib */ +#define va_end(AP) + +#define va_arg(AP, TYPE) \ + (AP += __va_rounded_size (TYPE), \ + *((TYPE *) (AP - __va_rounded_size (TYPE)))) + +#endif /* _STDARG_H */ diff --git a/linux-0.11-lab/cur/linux/include/stddef.h b/linux-0.11-lab/cur/linux/include/stddef.h new file mode 100644 index 0000000..97f72ff --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/stddef.h @@ -0,0 +1,19 @@ +#ifndef _STDDEF_H +#define _STDDEF_H + +#ifndef _PTRDIFF_T +#define _PTRDIFF_T +typedef long ptrdiff_t; +#endif + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned long size_t; +#endif + +#undef NULL +#define NULL ((void *)0) + +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) + +#endif diff --git a/linux-0.11-lab/cur/linux/include/string.h b/linux-0.11-lab/cur/linux/include/string.h new file mode 100644 index 0000000..48b91e5 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/string.h @@ -0,0 +1,405 @@ +#ifndef _STRING_H_ +#define _STRING_H_ + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif + +extern char * strerror(int errno); + +/* + * This string-include defines all string functions as inline + * functions. Use gcc. It also assumes ds=es=data space, this should be + * normal. Most of the string-functions are rather heavily hand-optimized, + * see especially strtok,strstr,str[c]spn. They should work, but are not + * very easy to understand. Everything is done entirely within the register + * set, making the functions fast and clean. String instructions have been + * used through-out, making for "slightly" unclear code :-) + * + * (C) 1991 Linus Torvalds + */ + +extern inline char * strcpy(char * dest,const char *src) +{ +__asm__("cld\n" + "1:\tlodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b" + ::"S" (src),"D" (dest)); +return dest; +} + +extern inline char * strncpy(char * dest,const char *src,int count) +{ +__asm__("cld\n" + "1:\tdecl %2\n\t" + "js 2f\n\t" + "lodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n\t" + "rep\n\t" + "stosb\n" + "2:" + ::"S" (src),"D" (dest),"c" (count)); +return dest; +} + +extern inline char * strcat(char * dest,const char * src) +{ +__asm__("cld\n\t" + "repne\n\t" + "scasb\n\t" + "decl %1\n" + "1:\tlodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b" + ::"S" (src),"D" (dest),"a" (0),"c" (0xffffffff)); +return dest; +} + +extern inline char * strncat(char * dest,const char * src,int count) +{ +__asm__("cld\n\t" + "repne\n\t" + "scasb\n\t" + "decl %1\n\t" + "movl %4,%3\n" + "1:\tdecl %3\n\t" + "js 2f\n\t" + "lodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n" + "2:\txorl %2,%2\n\t" + "stosb" + ::"S" (src),"D" (dest),"a" (0),"c" (0xffffffff),"g" (count) + ); +return dest; +} + +extern inline int strcmp(const char * cs,const char * ct) +{ +register int __res __asm__("ax"); +__asm__("cld\n" + "1:\tlodsb\n\t" + "scasb\n\t" + "jne 2f\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n\t" + "xorl %%eax,%%eax\n\t" + "jmp 3f\n" + "2:\tmovl $1,%%eax\n\t" + "jl 3f\n\t" + "negl %%eax\n" + "3:" + :"=a" (__res):"D" (cs),"S" (ct)); +return __res; +} + +extern inline int strncmp(const char * cs,const char * ct,int count) +{ +register int __res __asm__("ax"); +__asm__("cld\n" + "1:\tdecl %3\n\t" + "js 2f\n\t" + "lodsb\n\t" + "scasb\n\t" + "jne 3f\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n" + "2:\txorl %%eax,%%eax\n\t" + "jmp 4f\n" + "3:\tmovl $1,%%eax\n\t" + "jl 4f\n\t" + "negl %%eax\n" + "4:" + :"=a" (__res):"D" (cs),"S" (ct),"c" (count)); +return __res; +} + +extern inline char * strchr(const char * s,char c) +{ +register char * __res __asm__("ax"); +__asm__("cld\n\t" + "movb %%al,%%ah\n" + "1:\tlodsb\n\t" + "cmpb %%ah,%%al\n\t" + "je 2f\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n\t" + "movl $1,%1\n" + "2:\tmovl %1,%0\n\t" + "decl %0" + :"=a" (__res):"S" (s),"0" (c)); +return __res; +} + +extern inline char * strrchr(const char * s,char c) +{ +register char * __res __asm__("dx"); +__asm__("cld\n\t" + "movb %%al,%%ah\n" + "1:\tlodsb\n\t" + "cmpb %%ah,%%al\n\t" + "jne 2f\n\t" + "movl %%esi,%0\n\t" + "decl %0\n" + "2:\ttestb %%al,%%al\n\t" + "jne 1b" + :"=d" (__res):"0" (0),"S" (s),"a" (c)); +return __res; +} + +extern inline int strspn(const char * cs, const char * ct) +{ +register char * __res __asm__("si"); +__asm__("cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "movl %%ecx,%%edx\n" + "1:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 2f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "je 1b\n" + "2:\tdecl %0" + :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) + ); +return __res-cs; +} + +extern inline int strcspn(const char * cs, const char * ct) +{ +register char * __res __asm__("si"); +__asm__("cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "movl %%ecx,%%edx\n" + "1:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 2f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "jne 1b\n" + "2:\tdecl %0" + :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) + ); +return __res-cs; +} + +extern inline char * strpbrk(const char * cs,const char * ct) +{ +register char * __res __asm__("si"); +__asm__("cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "movl %%ecx,%%edx\n" + "1:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 2f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "jne 1b\n\t" + "decl %0\n\t" + "jmp 3f\n" + "2:\txorl %0,%0\n" + "3:" + :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) + ); +return __res; +} + +extern inline char * strstr(const char * cs,const char * ct) +{ +register char * __res __asm__("ax"); +__asm__("cld\n\t" \ + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */ + "movl %%ecx,%%edx\n" + "1:\tmovl %4,%%edi\n\t" + "movl %%esi,%%eax\n\t" + "movl %%edx,%%ecx\n\t" + "repe\n\t" + "cmpsb\n\t" + "je 2f\n\t" /* also works for empty string, see above */ + "xchgl %%eax,%%esi\n\t" + "incl %%esi\n\t" + "cmpb $0,-1(%%eax)\n\t" + "jne 1b\n\t" + "xorl %%eax,%%eax\n\t" + "2:" + :"=a" (__res):"0" (0),"c" (0xffffffff),"S" (cs),"g" (ct) + ); +return __res; +} + +extern inline int strlen(const char * s) +{ +register int __res ; +__asm__("cld\n\t" + "repne\n\t" + "scasb\n\t" + "notl %0\n\t" + "decl %0" + :"=c" (__res):"D" (s),"a" (0),"0" (0xffffffff)); +return __res; +} + +extern char * ___strtok; + +extern inline char * strtok(char * s,const char * ct) +{ +register char * __res __asm__("si"); +__asm__("testl %1,%1\n\t" + "jne 1f\n\t" + "testl %0,%0\n\t" + "je 8f\n\t" + "movl %0,%1\n" + "1:\txorl %0,%0\n\t" + "movl $-1,%%ecx\n\t" + "xorl %%eax,%%eax\n\t" + "cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "je 7f\n\t" /* empty delimeter-string */ + "movl %%ecx,%%edx\n" + "2:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 7f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "je 2b\n\t" + "decl %1\n\t" + "cmpb $0,(%1)\n\t" + "je 7f\n\t" + "movl %1,%0\n" + "3:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 5f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "jne 3b\n\t" + "decl %1\n\t" + "cmpb $0,(%1)\n\t" + "je 5f\n\t" + "movb $0,(%1)\n\t" + "incl %1\n\t" + "jmp 6f\n" + "5:\txorl %1,%1\n" + "6:\tcmpb $0,(%0)\n\t" + "jne 7f\n\t" + "xorl %0,%0\n" + "7:\ttestl %0,%0\n\t" + "jne 8f\n\t" + "movl %0,%1\n" + "8:" + :"=b" (__res),"=S" (___strtok) + :"0" (___strtok),"1" (s),"g" (ct) + ); +return __res; +} + +extern inline void * memcpy(void * dest,const void * src, int n) +{ +__asm__("cld\n\t" + "rep\n\t" + "movsb" + ::"c" (n),"S" (src),"D" (dest) + ); +return dest; +} + +extern inline void * memmove(void * dest,const void * src, int n) +{ +if (dest + +struct stat { + dev_t st_dev; + ino_t st_ino; + umode_t st_mode; + nlink_t st_nlink; + uid_t st_uid; + gid_t st_gid; + dev_t st_rdev; + off_t st_size; + time_t st_atime; + time_t st_mtime; + time_t st_ctime; +}; +struct linux_dirent { + long d_ino; + off_t d_off; + unsigned short d_reclen; + char d_name[14]; +}; +#define S_IFMT 00170000 +#define S_IFLNK 0120000 +#define S_IFREG 0100000 +#define S_IFBLK 0060000 +#define S_IFDIR 0040000 +#define S_IFCHR 0020000 +#define S_IFIFO 0010000 +#define S_ISUID 0004000 +#define S_ISGID 0002000 +#define S_ISVTX 0001000 + +#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) + +#define S_IRWXU 00700 +#define S_IRUSR 00400 +#define S_IWUSR 00200 +#define S_IXUSR 00100 + +#define S_IRWXG 00070 +#define S_IRGRP 00040 +#define S_IWGRP 00020 +#define S_IXGRP 00010 + +#define S_IRWXO 00007 +#define S_IROTH 00004 +#define S_IWOTH 00002 +#define S_IXOTH 00001 + +extern int chmod(const char *_path, mode_t mode); +extern int fstat(int fildes, struct stat *stat_buf); +extern int mkdir(const char *_path, mode_t mode); +extern int mkfifo(const char *_path, mode_t mode); +extern int stat(const char *filename, struct stat *stat_buf); +extern mode_t umask(mode_t mask); + +#endif diff --git a/linux-0.11-lab/cur/linux/include/sys/times.h b/linux-0.11-lab/cur/linux/include/sys/times.h new file mode 100644 index 0000000..68d5bfb --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/sys/times.h @@ -0,0 +1,15 @@ +#ifndef _TIMES_H +#define _TIMES_H + +#include + +struct tms { + time_t tms_utime; + time_t tms_stime; + time_t tms_cutime; + time_t tms_cstime; +}; + +extern time_t times(struct tms * tp); + +#endif diff --git a/linux-0.11-lab/cur/linux/include/sys/types.h b/linux-0.11-lab/cur/linux/include/sys/types.h new file mode 100644 index 0000000..557aa31 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/sys/types.h @@ -0,0 +1,46 @@ +#ifndef _SYS_TYPES_H +#define _SYS_TYPES_H + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif + +#ifndef _TIME_T +#define _TIME_T +typedef long time_t; +#endif + +#ifndef _PTRDIFF_T +#define _PTRDIFF_T +typedef long ptrdiff_t; +#endif + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +typedef int pid_t; +typedef unsigned short uid_t; +typedef unsigned char gid_t; +typedef unsigned short dev_t; +typedef unsigned short ino_t; +typedef unsigned short mode_t; +typedef unsigned short umode_t; +typedef unsigned char nlink_t; +typedef int daddr_t; +typedef long off_t; +typedef unsigned char u_char; +typedef unsigned short ushort; + +typedef struct { int quot,rem; } div_t; +typedef struct { long quot,rem; } ldiv_t; + +struct ustat { + daddr_t f_tfree; + ino_t f_tinode; + char f_fname[6]; + char f_fpack[6]; +}; + +#endif diff --git a/linux-0.11-lab/cur/linux/include/sys/utsname.h b/linux-0.11-lab/cur/linux/include/sys/utsname.h new file mode 100644 index 0000000..0a1c5a0 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/sys/utsname.h @@ -0,0 +1,16 @@ +#ifndef _SYS_UTSNAME_H +#define _SYS_UTSNAME_H + +#include + +struct utsname { + char sysname[9]; + char nodename[9]; + char release[9]; + char version[9]; + char machine[9]; +}; + +extern int uname(struct utsname * utsbuf); + +#endif diff --git a/linux-0.11-lab/cur/linux/include/sys/wait.h b/linux-0.11-lab/cur/linux/include/sys/wait.h new file mode 100644 index 0000000..53190c2 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/sys/wait.h @@ -0,0 +1,23 @@ +#ifndef _SYS_WAIT_H +#define _SYS_WAIT_H + +#include + +#define _LOW(v) ( (v) & 0377) +#define _HIGH(v) ( ((v) >> 8) & 0377) + +/* options for waitpid, WUNTRACED not supported */ +#define WNOHANG 1 +#define WUNTRACED 2 + +#define WIFEXITED(s) (!((s)&0xFF) +#define WIFSTOPPED(s) (((s)&0xFF)==0x7F) +#define WEXITSTATUS(s) (((s)>>8)&0xFF) +#define WTERMSIG(s) ((s)&0x7F) +#define WSTOPSIG(s) (((s)>>8)&0xFF) +#define WIFSIGNALED(s) (((unsigned int)(s)-1 & 0xFFFF) < 0xFF) + +pid_t wait(int *stat_loc); +pid_t waitpid(pid_t pid, int *stat_loc, int options); + +#endif diff --git a/linux-0.11-lab/cur/linux/include/termios.h b/linux-0.11-lab/cur/linux/include/termios.h new file mode 100644 index 0000000..2b7b913 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/termios.h @@ -0,0 +1,228 @@ +#ifndef _TERMIOS_H +#define _TERMIOS_H + +#define TTY_BUF_SIZE 1024 + +/* 0x54 is just a magic number to make these relatively uniqe ('T') */ + +#define TCGETS 0x5401 +#define TCSETS 0x5402 +#define TCSETSW 0x5403 +#define TCSETSF 0x5404 +#define TCGETA 0x5405 +#define TCSETA 0x5406 +#define TCSETAW 0x5407 +#define TCSETAF 0x5408 +#define TCSBRK 0x5409 +#define TCXONC 0x540A +#define TCFLSH 0x540B +#define TIOCEXCL 0x540C +#define TIOCNXCL 0x540D +#define TIOCSCTTY 0x540E +#define TIOCGPGRP 0x540F +#define TIOCSPGRP 0x5410 +#define TIOCOUTQ 0x5411 +#define TIOCSTI 0x5412 +#define TIOCGWINSZ 0x5413 +#define TIOCSWINSZ 0x5414 +#define TIOCMGET 0x5415 +#define TIOCMBIS 0x5416 +#define TIOCMBIC 0x5417 +#define TIOCMSET 0x5418 +#define TIOCGSOFTCAR 0x5419 +#define TIOCSSOFTCAR 0x541A +#define TIOCINQ 0x541B + +struct winsize { + unsigned short ws_row; + unsigned short ws_col; + unsigned short ws_xpixel; + unsigned short ws_ypixel; +}; + +#define NCC 8 +struct termio { + unsigned short c_iflag; /* input mode flags */ + unsigned short c_oflag; /* output mode flags */ + unsigned short c_cflag; /* control mode flags */ + unsigned short c_lflag; /* local mode flags */ + unsigned char c_line; /* line discipline */ + unsigned char c_cc[NCC]; /* control characters */ +}; + +#define NCCS 17 +struct termios { + unsigned long c_iflag; /* input mode flags */ + unsigned long c_oflag; /* output mode flags */ + unsigned long c_cflag; /* control mode flags */ + unsigned long c_lflag; /* local mode flags */ + unsigned char c_line; /* line discipline */ + unsigned char c_cc[NCCS]; /* control characters */ +}; + +/* c_cc characters */ +#define VINTR 0 +#define VQUIT 1 +#define VERASE 2 +#define VKILL 3 +#define VEOF 4 +#define VTIME 5 +#define VMIN 6 +#define VSWTC 7 +#define VSTART 8 +#define VSTOP 9 +#define VSUSP 10 +#define VEOL 11 +#define VREPRINT 12 +#define VDISCARD 13 +#define VWERASE 14 +#define VLNEXT 15 +#define VEOL2 16 + +/* c_iflag bits */ +#define IGNBRK 0000001 +#define BRKINT 0000002 +#define IGNPAR 0000004 +#define PARMRK 0000010 +#define INPCK 0000020 +#define ISTRIP 0000040 +#define INLCR 0000100 +#define IGNCR 0000200 +#define ICRNL 0000400 +#define IUCLC 0001000 +#define IXON 0002000 +#define IXANY 0004000 +#define IXOFF 0010000 +#define IMAXBEL 0020000 + +/* c_oflag bits */ +#define OPOST 0000001 +#define OLCUC 0000002 +#define ONLCR 0000004 +#define OCRNL 0000010 +#define ONOCR 0000020 +#define ONLRET 0000040 +#define OFILL 0000100 +#define OFDEL 0000200 +#define NLDLY 0000400 +#define NL0 0000000 +#define NL1 0000400 +#define CRDLY 0003000 +#define CR0 0000000 +#define CR1 0001000 +#define CR2 0002000 +#define CR3 0003000 +#define TABDLY 0014000 +#define TAB0 0000000 +#define TAB1 0004000 +#define TAB2 0010000 +#define TAB3 0014000 +#define XTABS 0014000 +#define BSDLY 0020000 +#define BS0 0000000 +#define BS1 0020000 +#define VTDLY 0040000 +#define VT0 0000000 +#define VT1 0040000 +#define FFDLY 0040000 +#define FF0 0000000 +#define FF1 0040000 + +/* c_cflag bit meaning */ +#define CBAUD 0000017 +#define B0 0000000 /* hang up */ +#define B50 0000001 +#define B75 0000002 +#define B110 0000003 +#define B134 0000004 +#define B150 0000005 +#define B200 0000006 +#define B300 0000007 +#define B600 0000010 +#define B1200 0000011 +#define B1800 0000012 +#define B2400 0000013 +#define B4800 0000014 +#define B9600 0000015 +#define B19200 0000016 +#define B38400 0000017 +#define EXTA B19200 +#define EXTB B38400 +#define CSIZE 0000060 +#define CS5 0000000 +#define CS6 0000020 +#define CS7 0000040 +#define CS8 0000060 +#define CSTOPB 0000100 +#define CREAD 0000200 +#define CPARENB 0000400 +#define CPARODD 0001000 +#define HUPCL 0002000 +#define CLOCAL 0004000 +#define CIBAUD 03600000 /* input baud rate (not used) */ +#define CRTSCTS 020000000000 /* flow control */ + +#define PARENB CPARENB +#define PARODD CPARODD + +/* c_lflag bits */ +#define ISIG 0000001 +#define ICANON 0000002 +#define XCASE 0000004 +#define ECHO 0000010 +#define ECHOE 0000020 +#define ECHOK 0000040 +#define ECHONL 0000100 +#define NOFLSH 0000200 +#define TOSTOP 0000400 +#define ECHOCTL 0001000 +#define ECHOPRT 0002000 +#define ECHOKE 0004000 +#define FLUSHO 0010000 +#define PENDIN 0040000 +#define IEXTEN 0100000 + +/* modem lines */ +#define TIOCM_LE 0x001 +#define TIOCM_DTR 0x002 +#define TIOCM_RTS 0x004 +#define TIOCM_ST 0x008 +#define TIOCM_SR 0x010 +#define TIOCM_CTS 0x020 +#define TIOCM_CAR 0x040 +#define TIOCM_RNG 0x080 +#define TIOCM_DSR 0x100 +#define TIOCM_CD TIOCM_CAR +#define TIOCM_RI TIOCM_RNG + +/* tcflow() and TCXONC use these */ +#define TCOOFF 0 +#define TCOON 1 +#define TCIOFF 2 +#define TCION 3 + +/* tcflush() and TCFLSH use these */ +#define TCIFLUSH 0 +#define TCOFLUSH 1 +#define TCIOFLUSH 2 + +/* tcsetattr uses these */ +#define TCSANOW 0 +#define TCSADRAIN 1 +#define TCSAFLUSH 2 + +typedef int speed_t; + +extern speed_t cfgetispeed(struct termios *termios_p); +extern speed_t cfgetospeed(struct termios *termios_p); +extern int cfsetispeed(struct termios *termios_p, speed_t speed); +extern int cfsetospeed(struct termios *termios_p, speed_t speed); +extern int tcdrain(int fildes); +extern int tcflow(int fildes, int action); +extern int tcflush(int fildes, int queue_selector); +extern int tcgetattr(int fildes, struct termios *termios_p); +extern int tcsendbreak(int fildes, int duration); +extern int tcsetattr(int fildes, int optional_actions, + struct termios *termios_p); + +#endif diff --git a/linux-0.11-lab/cur/linux/include/time.h b/linux-0.11-lab/cur/linux/include/time.h new file mode 100644 index 0000000..d0a765d --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/time.h @@ -0,0 +1,42 @@ +#ifndef _TIME_H +#define _TIME_H + +#ifndef _TIME_T +#define _TIME_T +typedef long time_t; +#endif + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif + +#define CLOCKS_PER_SEC 100 + +typedef long clock_t; + +struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; +}; + +clock_t clock(void); +time_t time(time_t * tp); +double difftime(time_t time2, time_t time1); +time_t mktime(struct tm * tp); + +char * asctime(const struct tm * tp); +char * ctime(const time_t * tp); +struct tm * gmtime(const time_t *tp); +struct tm *localtime(const time_t * tp); +size_t strftime(char * s, size_t smax, const char * fmt, const struct tm * tp); +void tzset(void); + +#endif diff --git a/linux-0.11-lab/cur/linux/include/unistd.h b/linux-0.11-lab/cur/linux/include/unistd.h new file mode 100644 index 0000000..3f0fa89 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/unistd.h @@ -0,0 +1,277 @@ +#ifndef _UNISTD_H +#define _UNISTD_H + +/* ok, this may be a joke, but I'm working on it */ +#define _POSIX_VERSION 198808L + +#define _POSIX_CHOWN_RESTRICTED /* only root can do a chown (I think..) */ +#define _POSIX_NO_TRUNC /* no pathname truncation (but see in kernel) */ +#define _POSIX_VDISABLE '\0' /* character to disable things like ^C */ +/*#define _POSIX_SAVED_IDS */ /* we'll get to this yet */ +/*#define _POSIX_JOB_CONTROL */ /* we aren't there quite yet. Soon hopefully */ + +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#define STDERR_FILENO 2 + +#ifndef NULL +#define NULL ((void *)0) +#endif + +/* access */ +#define F_OK 0 +#define X_OK 1 +#define W_OK 2 +#define R_OK 4 + +/* lseek */ +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + +/* _SC stands for System Configuration. We don't use them much */ +#define _SC_ARG_MAX 1 +#define _SC_CHILD_MAX 2 +#define _SC_CLOCKS_PER_SEC 3 +#define _SC_NGROUPS_MAX 4 +#define _SC_OPEN_MAX 5 +#define _SC_JOB_CONTROL 6 +#define _SC_SAVED_IDS 7 +#define _SC_VERSION 8 + +/* more (possibly) configurable things - now pathnames */ +#define _PC_LINK_MAX 1 +#define _PC_MAX_CANON 2 +#define _PC_MAX_INPUT 3 +#define _PC_NAME_MAX 4 +#define _PC_PATH_MAX 5 +#define _PC_PIPE_BUF 6 +#define _PC_NO_TRUNC 7 +#define _PC_VDISABLE 8 +#define _PC_CHOWN_RESTRICTED 9 + +#include +#include +#include +#include + +#ifdef __LIBRARY__ + +#define __NR_setup 0 /* used only by init, to get system going */ +#define __NR_exit 1 +#define __NR_fork 2 +#define __NR_read 3 +#define __NR_write 4 +#define __NR_open 5 +#define __NR_close 6 +#define __NR_waitpid 7 +#define __NR_creat 8 +#define __NR_link 9 +#define __NR_unlink 10 +#define __NR_execve 11 +#define __NR_chdir 12 +#define __NR_time 13 +#define __NR_mknod 14 +#define __NR_chmod 15 +#define __NR_chown 16 +#define __NR_break 17 +#define __NR_stat 18 +#define __NR_lseek 19 +#define __NR_getpid 20 +#define __NR_mount 21 +#define __NR_umount 22 +#define __NR_setuid 23 +#define __NR_getuid 24 +#define __NR_stime 25 +#define __NR_ptrace 26 +#define __NR_alarm 27 +#define __NR_fstat 28 +#define __NR_pause 29 +#define __NR_utime 30 +#define __NR_stty 31 +#define __NR_gtty 32 +#define __NR_access 33 +#define __NR_nice 34 +#define __NR_ftime 35 +#define __NR_sync 36 +#define __NR_kill 37 +#define __NR_rename 38 +#define __NR_mkdir 39 +#define __NR_rmdir 40 +#define __NR_dup 41 +#define __NR_pipe 42 +#define __NR_times 43 +#define __NR_prof 44 +#define __NR_brk 45 +#define __NR_setgid 46 +#define __NR_getgid 47 +#define __NR_signal 48 +#define __NR_geteuid 49 +#define __NR_getegid 50 +#define __NR_acct 51 +#define __NR_phys 52 +#define __NR_lock 53 +#define __NR_ioctl 54 +#define __NR_fcntl 55 +#define __NR_mpx 56 +#define __NR_setpgid 57 +#define __NR_ulimit 58 +#define __NR_uname 59 +#define __NR_umask 60 +#define __NR_chroot 61 +#define __NR_ustat 62 +#define __NR_dup2 63 +#define __NR_getppid 64 +#define __NR_getpgrp 65 +#define __NR_setsid 66 +#define __NR_sigaction 67 +#define __NR_sgetmask 68 +#define __NR_ssetmask 69 +#define __NR_setreuid 70 +#define __NR_setregid 71 +#define __NR_sigsuspend 72 +#define __NR_sigpending 73 +#define __NR_sethostname 74 +#define __NR_setrlimit 75 +#define __NR_getrlimit 76 +#define __NR_getrusage 77 +#define __NR_gettimeofday 78 +#define __NR_settimeofday 79 +#define __NR_getgroups 80 +#define __NR_setgroups 81 +#define __NR_select 82 +#define __NR_symlink 83 +#define __NR_lstat 84 +#define __NR_readlink 85 +#define __NR_uselib 86 +#define __NR_execve2 87 +#define __NR_getdents 88 +#define __NR_pipe2 89 +#define __NR_sleep 90 +#define __NR_getcwd 91 +#define __NR_mmap 92 +#define __NR_munmap 93 +#define __NR_clone 94 +#define _syscall0(type,name) \ +type name(void) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name)); \ +if (__res >= 0) \ + return (type) __res; \ +errno = -__res; \ +return -1; \ +} + +#define _syscall1(type,name,atype,a) \ +type name(atype a) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(a))); \ +if (__res >= 0) \ + return (type) __res; \ +errno = -__res; \ +return -1; \ +} + +#define _syscall2(type,name,atype,a,btype,b) \ +type name(atype a,btype b) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(a)),"c" ((long)(b))); \ +if (__res >= 0) \ + return (type) __res; \ +errno = -__res; \ +return -1; \ +} + +#define _syscall3(type,name,atype,a,btype,b,ctype,c) \ +type name(atype a,btype b,ctype c) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(a)),"c" ((long)(b)),"d" ((long)(c))); \ +if (__res>=0) \ + return (type) __res; \ +errno=-__res; \ +return -1; \ +} + +#endif /* __LIBRARY__ */ + +extern int errno; + +int access(const char * filename, mode_t mode); +int acct(const char * filename); +int alarm(int sec); +int brk(void * end_data_segment); +void * sbrk(ptrdiff_t increment); +int chdir(const char * filename); +int chmod(const char * filename, mode_t mode); +int chown(const char * filename, uid_t owner, gid_t group); +int chroot(const char * filename); +int close(int fildes); +int creat(const char * filename, mode_t mode); +int dup(int fildes); +int execve(const char * filename, char ** argv, char ** envp); +int execv(const char * pathname, char ** argv); +int execvp(const char * file, char ** argv); +int execl(const char * pathname, char * arg0, ...); +int execlp(const char * file, char * arg0, ...); +int execle(const char * pathname, char * arg0, ...); +volatile void exit(int status); +volatile void _exit(int status); +int fcntl(int fildes, int cmd, ...); +int fork(void); +int getpid(void); +int getuid(void); +int geteuid(void); +int getgid(void); +int getegid(void); +int ioctl(int fildes, int cmd, ...); +int kill(pid_t pid, int signal); +int link(const char * filename1, const char * filename2); +int lseek(int fildes, off_t offset, int origin); +int mknod(const char * filename, mode_t mode, dev_t dev); +int mount(const char * specialfile, const char * dir, int rwflag); +int nice(int val); +int open(const char * filename, int flag, ...); +int pause(void); +int pipe(int * fildes); +int read(int fildes, char * buf, off_t count); +int setpgrp(void); +int setpgid(pid_t pid,pid_t pgid); +int setuid(uid_t uid); +int setgid(gid_t gid); +void (*signal(int sig, void (*fn)(int)))(int); +int stat(const char * filename, struct stat * stat_buf); +int fstat(int fildes, struct stat * stat_buf); +int stime(time_t * tptr); +int sync(void); +time_t time(time_t * tloc); +time_t times(struct tms * tbuf); +int ulimit(int cmd, long limit); +mode_t umask(mode_t mask); +int umount(const char * specialfile); +int uname(struct utsname * name); +int unlink(const char * filename); +int ustat(dev_t dev, struct ustat * ubuf); +int utime(const char * filename, struct utimbuf * times); +pid_t waitpid(pid_t pid,int * wait_stat,int options); +pid_t wait(int * wait_stat); +int write(int fildes, const char * buf, off_t count); +int dup2(int oldfd, int newfd); +int getppid(void); +pid_t getpgrp(void); +pid_t setsid(void); + +#define __always_inline inline __attribute__((always_inline)) + +#endif diff --git a/linux-0.11-lab/cur/linux/include/utime.h b/linux-0.11-lab/cur/linux/include/utime.h new file mode 100644 index 0000000..83f07c7 --- /dev/null +++ b/linux-0.11-lab/cur/linux/include/utime.h @@ -0,0 +1,13 @@ +#ifndef _UTIME_H +#define _UTIME_H + +#include /* I know - shouldn't do this, but .. */ + +struct utimbuf { + time_t actime; + time_t modtime; +}; + +extern int utime(const char *filename, struct utimbuf *times); + +#endif diff --git a/linux-0.11-lab/cur/linux/init/main.c b/linux-0.11-lab/cur/linux/init/main.c new file mode 100644 index 0000000..bd86a68 --- /dev/null +++ b/linux-0.11-lab/cur/linux/init/main.c @@ -0,0 +1,216 @@ +/* + * linux/init/main.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include +#include + +/* + * we need this inline - forking from kernel space will result + * in NO COPY ON WRITE (!!!), until an execve is executed. This + * is no problem, but for the stack. This is handled by not letting + * main() use the stack at all after fork(). Thus, no function + * calls - which means inline code for fork too, as otherwise we + * would use the stack upon exit from 'fork()'. + * + * Actually only pause and fork are needed inline, so that there + * won't be any messing with the stack from main(), but we define + * some others too. + */ + +__always_inline _syscall0(int,fork) +__always_inline _syscall0(int,pause) +__always_inline _syscall1(int,setup,void *,BIOS) +__always_inline _syscall0(int,sync) + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +static char printbuf[1024]; + +extern int vsprintf(); +extern void init(void); +extern void blk_dev_init(void); +extern void chr_dev_init(void); +extern void hd_init(void); +extern void floppy_init(void); +extern void mem_init(long start, long end); +extern long rd_init(long mem_start, int length); +extern long kernel_mktime(struct tm * tm); +extern long startup_time; + +/* + * This is set up by the setup-routine at boot-time + */ +#define EXT_MEM_K (*(unsigned short *)0x90002) +#define DRIVE_INFO (*(struct drive_info *)0x90080) +#define ORIG_ROOT_DEV (*(unsigned short *)0x901FC) + +/* + * Yeah, yeah, it's ugly, but I cannot find how to do this correctly + * and this seems to work. I anybody has more info on the real-time + * clock I'd be interested. Most of this was trial and error, and some + * bios-listing reading. Urghh. + */ + +#define CMOS_READ(addr) ({ \ +outb_p(0x80|addr,0x70); \ +inb_p(0x71); \ +}) + +#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10) + +static void time_init(void) +{ + struct tm time; + + do { + time.tm_sec = CMOS_READ(0); + time.tm_min = CMOS_READ(2); + time.tm_hour = CMOS_READ(4); + time.tm_mday = CMOS_READ(7); + time.tm_mon = CMOS_READ(8); + time.tm_year = CMOS_READ(9); + } while (time.tm_sec != CMOS_READ(0)); + BCD_TO_BIN(time.tm_sec); + BCD_TO_BIN(time.tm_min); + BCD_TO_BIN(time.tm_hour); + BCD_TO_BIN(time.tm_mday); + BCD_TO_BIN(time.tm_mon); + BCD_TO_BIN(time.tm_year); + time.tm_mon--; + startup_time = kernel_mktime(&time); +} + +static long memory_end = 0; +static long buffer_memory_end = 0; +static long main_memory_start = 0; + +struct drive_info { char dummy[32]; } drive_info; + +void main(void) /* This really IS void, no error here. */ +{ /* The startup routine assumes (well, ...) this */ +/* + * Interrupts are still disabled. Do necessary setups, then + * enable them + */ + ROOT_DEV = ORIG_ROOT_DEV; + __asm__ volatile ("cld"); /* by wyj */ + drive_info = DRIVE_INFO; + memory_end = (1<<20) + (EXT_MEM_K<<10); + memory_end &= 0xfffff000; + if (memory_end > 16*1024*1024) + memory_end = 16*1024*1024; + if (memory_end > 12*1024*1024) + buffer_memory_end = 4*1024*1024; + else if (memory_end > 6*1024*1024) + buffer_memory_end = 2*1024*1024; + else + buffer_memory_end = 1*1024*1024; + main_memory_start = buffer_memory_end; +#ifdef RAMDISK + main_memory_start += rd_init(main_memory_start, RAMDISK*1024); +#endif + mem_init(main_memory_start,memory_end); + trap_init(); + blk_dev_init(); + chr_dev_init(); + tty_init(); + time_init(); + sched_init(); + buffer_init(buffer_memory_end); + hd_init(); + floppy_init(); + sti(); + move_to_user_mode(); + if (!fork()) { /* we count on this going ok */ + init(); + } +/* + * NOTE!! For any other task 'pause()' would mean we have to get a + * signal to awaken, but task0 is the sole exception (see 'schedule()') + * as task 0 gets activated at every idle moment (when no other tasks + * can run). For task0 'pause()' just means we go check if some other + * task can run, and if not we return here. + */ + for(;;) pause(); +} + +static int printf(const char *fmt, ...) +{ + va_list args; + int i; + + va_start(args, fmt); + write(1,printbuf,i=vsprintf(printbuf, fmt, args)); + va_end(args); + return i; +} + +static char * argv_rc[] = { "/bin/sh", NULL }; +static char * envp_rc[] = { "HOME=/", NULL, NULL }; + +static char * argv[] = { "-/bin/sh",NULL }; +static char * envp[] = { "HOME=/usr/root", NULL, NULL }; + +void init(void) +{ + int pid,i; + + setup((void *) &drive_info); + (void) open("/dev/tty0",O_RDWR,0); + (void) dup(0); + (void) dup(0); + printf("%d buffers = %d bytes buffer space\n\r",NR_BUFFERS, + NR_BUFFERS*BLOCK_SIZE); + printf("Free mem: %d bytes\n\r",memory_end-main_memory_start); + if (!(pid=fork())) { + close(0); + if (open("/etc/rc",O_RDONLY,0)) + _exit(1); + execve("/bin/sh",argv_rc,envp_rc); + _exit(2); + } + if (pid>0) + while (pid != wait(&i)) + /* nothing */; + while (1) { + if ((pid=fork())<0) { + printf("Fork failed in init\r\n"); + continue; + } + if (!pid) { + close(0);close(1);close(2); + setsid(); + (void) open("/dev/tty0",O_RDWR,0); + (void) dup(0); + (void) dup(0); + _exit(execve("/bin/sh",argv,envp)); + } + while (1) + if (pid == wait(&i)) + break; + printf("\n\rchild %d died with code %04x\n\r",pid,i); + sync(); + } + _exit(0); /* NOTE! _exit, not exit() */ +} + +void print_nr(int sid) +{ + if (sid > 86) + printk(" --syscall: sid=%d, pid=%d\n", sid, current->pid); +} diff --git a/linux-0.11-lab/cur/linux/init/main.o b/linux-0.11-lab/cur/linux/init/main.o new file mode 100644 index 0000000000000000000000000000000000000000..37c2c6518d1497dec84049138f6ef97bf0706625 GIT binary patch literal 12208 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 tdjzw@u&k@tOmaWT_CF*D75 tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + (cd chr_drv; make dep) + (cd blk_drv; make dep) + +### Dependencies: +exit.s exit.o : exit.c ../include/errno.h ../include/signal.h \ + ../include/sys/types.h ../include/sys/wait.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \ + ../include/linux/kernel.h ../include/linux/tty.h ../include/termios.h \ + ../include/asm/segment.h +fork.s fork.o : fork.c ../include/errno.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h ../include/asm/system.h +mktime.s mktime.o : mktime.c ../include/time.h +panic.s panic.o : panic.c ../include/linux/kernel.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h +printk.s printk.o : printk.c ../include/stdarg.h ../include/stddef.h \ + ../include/linux/kernel.h +sched.s sched.o : sched.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/linux/kernel.h ../include/linux/sys.h \ + ../include/linux/fdreg.h ../include/asm/system.h ../include/asm/io.h \ + ../include/asm/segment.h +signal.s signal.o : signal.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/linux/kernel.h ../include/asm/segment.h +sys.s sys.o : sys.c ../include/errno.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/tty.h \ + ../include/termios.h ../include/linux/kernel.h ../include/asm/segment.h \ + ../include/sys/times.h ../include/sys/utsname.h +traps.s traps.o : traps.c ../include/string.h ../include/linux/head.h \ + ../include/linux/sched.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/system.h ../include/asm/segment.h ../include/asm/io.h +vsprintf.s vsprintf.o : vsprintf.c ../include/stdarg.h ../include/string.h diff --git a/linux-0.11-lab/cur/linux/kernel/asm.o b/linux-0.11-lab/cur/linux/kernel/asm.o new file mode 100644 index 0000000000000000000000000000000000000000..a89ec75e6e7dea54ae5b8d9b94ba28158b48a77f GIT binary patch literal 1740 zcma)+O=uHQ5XWcRv}sSZ2!7VKN<_gLTB@F^9;`i75B*Zxid{F^*K{@67k4+Yil|sH zrv|)<7wbhmD2RBl?IjkWde90*5b+=$0#XkiyeY()eY^2xiRgpv|Nnb$W-{}d&9$S) z`xHe1e<@H4e+Zz*gMDtmZfJlym?EDGMTQ55PMti_THiEx4rWIp9YYK2@F4#&zm)${ zdN=d3q3K?@?aYKaK6ZL^#Z6j!Eo4c^qL61o9t*iIN>a0?YOGAXEIm;+mxxDna!+$#}~zPg>(|qFzDh#3ziNdZhm7_Gt$HGtt5$ zJb2(2L6$5XS6!9gLaHZMBo4WC>dM&)G@;K)yrt}^F9miX@AvkI_oDBSxC{Lei4UOf zm-sOHL5cg&k4j8uHzb}wuS$Fw{k+6C(HA7XgML}!hv?r*yy$rny5~3eqzG`)Jgcaa zE(!kRc@m2M7T_NN{u$t~^pB$a<^Z<^_)viR13VsJBf!@Kd@I0Ua+O&Yx70Y-8Aw() zvWCvYA?PfYNr0I$z%ZR|;8|u(Ciz8(@r %eax + xchgl %ebx,(%esp) # &function <-> %ebx + pushl %ecx + pushl %edx + pushl %edi + pushl %esi + pushl %ebp + push %ds + push %es + push %fs + pushl %eax # error code + lea 44(%esp),%eax # offset + pushl %eax + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + mov %ax,%fs + call *%ebx + addl $8,%esp + pop %fs + pop %es + pop %ds + popl %ebp + popl %esi + popl %edi + popl %edx + popl %ecx + popl %ebx + popl %eax + iret + +invalid_TSS: + pushl $do_invalid_TSS + jmp error_code + +segment_not_present: + pushl $do_segment_not_present + jmp error_code + +stack_segment: + pushl $do_stack_segment + jmp error_code + +general_protection: + pushl $do_general_protection + jmp error_code + diff --git a/linux-0.11-lab/cur/linux/kernel/blk_drv/Makefile b/linux-0.11-lab/cur/linux/kernel/blk_drv/Makefile new file mode 100644 index 0000000..1fb57f9 --- /dev/null +++ b/linux-0.11-lab/cur/linux/kernel/blk_drv/Makefile @@ -0,0 +1,58 @@ +# +# Makefile for the FREAX-kernel block device drivers. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). +# + +AR =ar +AS =as +LD =ld +LDFLAGS =-s -x +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -finline-functions -nostdinc -fno-stack-protector -I../../include +CPP =gcc -E -nostdinc -I../../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< + +OBJS = ll_rw_blk.o floppy.o hd.o ramdisk.o + +blk_drv.a: $(OBJS) + $(AR) rcs blk_drv.a $(OBJS) + sync + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +floppy.s floppy.o : floppy.c ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/sys/types.h ../../include/linux/mm.h \ + ../../include/signal.h ../../include/linux/kernel.h \ + ../../include/linux/fdreg.h ../../include/asm/system.h \ + ../../include/asm/io.h ../../include/asm/segment.h blk.h +hd.s hd.o : hd.c ../../include/linux/config.h ../../include/linux/sched.h \ + ../../include/linux/head.h ../../include/linux/fs.h \ + ../../include/sys/types.h ../../include/linux/mm.h ../../include/signal.h \ + ../../include/linux/kernel.h ../../include/linux/hdreg.h \ + ../../include/asm/system.h ../../include/asm/io.h \ + ../../include/asm/segment.h blk.h +ll_rw_blk.s ll_rw_blk.o : ll_rw_blk.c ../../include/errno.h ../../include/linux/sched.h \ + ../../include/linux/head.h ../../include/linux/fs.h \ + ../../include/sys/types.h ../../include/linux/mm.h ../../include/signal.h \ + ../../include/linux/kernel.h ../../include/asm/system.h blk.h diff --git a/linux-0.11-lab/cur/linux/kernel/blk_drv/blk.h b/linux-0.11-lab/cur/linux/kernel/blk_drv/blk.h new file mode 100644 index 0000000..7a69b71 --- /dev/null +++ b/linux-0.11-lab/cur/linux/kernel/blk_drv/blk.h @@ -0,0 +1,140 @@ +#ifndef _BLK_H +#define _BLK_H + +#define NR_BLK_DEV 7 +/* + * NR_REQUEST is the number of entries in the request-queue. + * NOTE that writes may use only the low 2/3 of these: reads + * take precedence. + * + * 32 seems to be a reasonable number: enough to get some benefit + * from the elevator-mechanism, but not so much as to lock a lot of + * buffers when they are in the queue. 64 seems to be too many (easily + * long pauses in reading when heavy writing/syncing is going on) + */ +#define NR_REQUEST 32 + +/* + * Ok, this is an expanded form so that we can use the same + * request for paging requests when that is implemented. In + * paging, 'bh' is NULL, and 'waiting' is used to wait for + * read/write completion. + */ +struct request { + int dev; /* -1 if no request */ + int cmd; /* READ or WRITE */ + int errors; + unsigned long sector; + unsigned long nr_sectors; + char * buffer; + struct task_struct * waiting; + struct buffer_head * bh; + struct request * next; +}; + +/* + * This is used in the elevator algorithm: Note that + * reads always go before writes. This is natural: reads + * are much more time-critical than writes. + */ +#define IN_ORDER(s1,s2) \ +((s1)->cmd<(s2)->cmd || (s1)->cmd==(s2)->cmd && \ +((s1)->dev < (s2)->dev || ((s1)->dev == (s2)->dev && \ +(s1)->sector < (s2)->sector))) + +struct blk_dev_struct { + void (*request_fn)(void); + struct request * current_request; +}; + +extern struct blk_dev_struct blk_dev[NR_BLK_DEV]; +extern struct request request[NR_REQUEST]; +extern struct task_struct * wait_for_request; + +#ifdef MAJOR_NR + +/* + * Add entries as needed. Currently the only block devices + * supported are hard-disks and floppies. + */ + +#if (MAJOR_NR == 1) +/* ram disk */ +#define DEVICE_NAME "ramdisk" +#define DEVICE_REQUEST do_rd_request +#define DEVICE_NR(device) ((device) & 7) +#define DEVICE_ON(device) +#define DEVICE_OFF(device) + +#elif (MAJOR_NR == 2) +/* floppy */ +#define DEVICE_NAME "floppy" +#define DEVICE_INTR do_floppy +#define DEVICE_REQUEST do_fd_request +#define DEVICE_NR(device) ((device) & 3) +#define DEVICE_ON(device) floppy_on(DEVICE_NR(device)) +#define DEVICE_OFF(device) floppy_off(DEVICE_NR(device)) + +#elif (MAJOR_NR == 3) +/* harddisk */ +#define DEVICE_NAME "harddisk" +#define DEVICE_INTR do_hd +#define DEVICE_REQUEST do_hd_request +#define DEVICE_NR(device) (MINOR(device)/5) +#define DEVICE_ON(device) +#define DEVICE_OFF(device) + +#elif (MAJOR_NR > 3) +/* unknown blk device */ +#error "unknown blk device" + +#endif + +#define CURRENT (blk_dev[MAJOR_NR].current_request) +#define CURRENT_DEV DEVICE_NR(CURRENT->dev) + +#ifdef DEVICE_INTR +void (*DEVICE_INTR)(void) = NULL; +#endif +static void (DEVICE_REQUEST)(void); + +static inline void unlock_buffer(struct buffer_head * bh) +{ + if (!bh->b_lock) + printk(DEVICE_NAME ": free buffer being unlocked\n"); + bh->b_lock=0; + wake_up(&bh->b_wait); +} + +static inline void end_request(int uptodate) +{ + DEVICE_OFF(CURRENT->dev); + if (CURRENT->bh) { + CURRENT->bh->b_uptodate = uptodate; + unlock_buffer(CURRENT->bh); + } + if (!uptodate) { + printk(DEVICE_NAME " I/O error\n\r"); + printk("dev %04x, block %d\n\r",CURRENT->dev, + CURRENT->bh->b_blocknr); + } + wake_up(&CURRENT->waiting); + wake_up(&wait_for_request); + CURRENT->dev = -1; + CURRENT = CURRENT->next; +} + +#define INIT_REQUEST \ +repeat: \ + if (!CURRENT) \ + return; \ + if (MAJOR(CURRENT->dev) != MAJOR_NR) \ + panic(DEVICE_NAME ": request list destroyed"); \ + if (CURRENT->bh) { \ + if (!CURRENT->bh->b_lock) \ + panic(DEVICE_NAME ": block not locked"); \ + } + +#endif + +#endif diff --git a/linux-0.11-lab/cur/linux/kernel/blk_drv/blk_drv.a b/linux-0.11-lab/cur/linux/kernel/blk_drv/blk_drv.a new file mode 100644 index 0000000000000000000000000000000000000000..02751f123aa0c72fe90e820ca24599de825468be GIT binary patch literal 52212 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 +#include +#include +#include +#include +#include +#include + +#define MAJOR_NR 2 +#include "blk.h" + +static int recalibrate = 0; +static int reset = 0; +static int seek = 0; + +extern unsigned char current_DOR; + +#define immoutb_p(val,port) \ +__asm__("outb %0,%1\n\tjmp 1f\n1:\tjmp 1f\n1:"::"a" ((char) (val)),"i" (port)) + +#define TYPE(x) ((x)>>2) +#define DRIVE(x) ((x)&0x03) +/* + * Note that MAX_ERRORS=8 doesn't imply that we retry every bad read + * max 8 times - some types of errors increase the errorcount by 2, + * so we might actually retry only 5-6 times before giving up. + */ +#define MAX_ERRORS 8 + +/* + * globals used by 'result()' + */ +#define MAX_REPLIES 7 +static unsigned char reply_buffer[MAX_REPLIES]; +#define ST0 (reply_buffer[0]) +#define ST1 (reply_buffer[1]) +#define ST2 (reply_buffer[2]) +#define ST3 (reply_buffer[3]) + +/* + * This struct defines the different floppy types. Unlike minix + * linux doesn't have a "search for right type"-type, as the code + * for that is convoluted and weird. I've got enough problems with + * this driver as it is. + * + * The 'stretch' tells if the tracks need to be boubled for some + * types (ie 360kB diskette in 1.2MB drive etc). Others should + * be self-explanatory. + */ +static struct floppy_struct { + unsigned int size, sect, head, track, stretch; + unsigned char gap,rate,spec1; +} floppy_type[] = { + { 0, 0,0, 0,0,0x00,0x00,0x00 }, /* no testing */ + { 720, 9,2,40,0,0x2A,0x02,0xDF }, /* 360kB PC diskettes */ + { 2400,15,2,80,0,0x1B,0x00,0xDF }, /* 1.2 MB AT-diskettes */ + { 720, 9,2,40,1,0x2A,0x02,0xDF }, /* 360kB in 720kB drive */ + { 1440, 9,2,80,0,0x2A,0x02,0xDF }, /* 3.5" 720kB diskette */ + { 720, 9,2,40,1,0x23,0x01,0xDF }, /* 360kB in 1.2MB drive */ + { 1440, 9,2,80,0,0x23,0x01,0xDF }, /* 720kB in 1.2MB drive */ + { 2880,18,2,80,0,0x1B,0x00,0xCF }, /* 1.44MB diskette */ +}; +/* + * Rate is 0 for 500kb/s, 2 for 300kbps, 1 for 250kbps + * Spec1 is 0xSH, where S is stepping rate (F=1ms, E=2ms, D=3ms etc), + * H is head unload time (1=16ms, 2=32ms, etc) + * + * Spec2 is (HLD<<1 | ND), where HLD is head load time (1=2ms, 2=4 ms etc) + * and ND is set means no DMA. Hardcoded to 6 (HLD=6ms, use DMA). + */ + +extern void floppy_interrupt(void); +extern char tmp_floppy_area[1024]; + +/* + * These are global variables, as that's the easiest way to give + * information to interrupts. They are the data used for the current + * request. + */ +static int cur_spec1 = -1; +static int cur_rate = -1; +static struct floppy_struct * floppy = floppy_type; +static unsigned char current_drive = 0; +static unsigned char sector = 0; +static unsigned char head = 0; +static unsigned char track = 0; +static unsigned char seek_track = 0; +static unsigned char current_track = 255; +static unsigned char command = 0; +unsigned char selected = 0; +struct task_struct * wait_on_floppy_select = NULL; + +void floppy_deselect(unsigned int nr) +{ + if (nr != (current_DOR & 3)) + printk("floppy_deselect: drive not selected\n\r"); + selected = 0; + wake_up(&wait_on_floppy_select); +} + +/* + * floppy-change is never called from an interrupt, so we can relax a bit + * here, sleep etc. Note that floppy-on tries to set current_DOR to point + * to the desired drive, but it will probably not survive the sleep if + * several floppies are used at the same time: thus the loop. + */ +int floppy_change(unsigned int nr) +{ +repeat: + floppy_on(nr); + while ((current_DOR & 3) != nr && selected) + interruptible_sleep_on(&wait_on_floppy_select); + if ((current_DOR & 3) != nr) + goto repeat; + if (inb(FD_DIR) & 0x80) { + floppy_off(nr); + return 1; + } + floppy_off(nr); + return 0; +} + +#define copy_buffer(from,to) \ +__asm__("cld ; rep ; movsl" \ + ::"c" (BLOCK_SIZE/4),"S" ((long)(from)),"D" ((long)(to)) \ + ) + +static void setup_DMA(void) +{ + long addr = (long) CURRENT->buffer; + + cli(); + if (addr >= 0x100000) { + addr = (long) tmp_floppy_area; + if (command == FD_WRITE) + copy_buffer(CURRENT->buffer,tmp_floppy_area); + } +/* mask DMA 2 */ + immoutb_p(4|2,10); +/* output command byte. I don't know why, but everyone (minix, */ +/* sanches & canton) output this twice, first to 12 then to 11 */ + __asm__("outb %%al,$12\n\tjmp 1f\n1:\tjmp 1f\n1:\t" + "outb %%al,$11\n\tjmp 1f\n1:\tjmp 1f\n1:":: + "a" ((char) ((command == FD_READ)?DMA_READ:DMA_WRITE))); +/* 8 low bits of addr */ + immoutb_p(addr,4); + addr >>= 8; +/* bits 8-15 of addr */ + immoutb_p(addr,4); + addr >>= 8; +/* bits 16-19 of addr */ + immoutb_p(addr,0x81); +/* low 8 bits of count-1 (1024-1=0x3ff) */ + immoutb_p(0xff,5); +/* high 8 bits of count-1 */ + immoutb_p(3,5); +/* activate DMA 2 */ + immoutb_p(0|2,10); + sti(); +} + +static void output_byte(char byte) +{ + int counter; + unsigned char status; + + if (reset) + return; + for(counter = 0 ; counter < 10000 ; counter++) { + status = inb_p(FD_STATUS) & (STATUS_READY | STATUS_DIR); + if (status == STATUS_READY) { + outb(byte,FD_DATA); + return; + } + } + reset = 1; + printk("Unable to send byte to FDC\n\r"); +} + +static int result(void) +{ + int i = 0, counter, status; + + if (reset) + return -1; + for (counter = 0 ; counter < 10000 ; counter++) { + status = inb_p(FD_STATUS)&(STATUS_DIR|STATUS_READY|STATUS_BUSY); + if (status == STATUS_READY) + return i; + if (status == (STATUS_DIR|STATUS_READY|STATUS_BUSY)) { + if (i >= MAX_REPLIES) + break; + reply_buffer[i++] = inb_p(FD_DATA); + } + } + reset = 1; + printk("Getstatus times out\n\r"); + return -1; +} + +static void bad_flp_intr(void) +{ + CURRENT->errors++; + if (CURRENT->errors > MAX_ERRORS) { + floppy_deselect(current_drive); + end_request(0); + } + if (CURRENT->errors > MAX_ERRORS/2) + reset = 1; + else + recalibrate = 1; +} + +/* + * Ok, this interrupt is called after a DMA read/write has succeeded, + * so we check the results, and copy any buffers. + */ +static void rw_interrupt(void) +{ + if (result() != 7 || (ST0 & 0xf8) || (ST1 & 0xbf) || (ST2 & 0x73)) { + if (ST1 & 0x02) { + printk("Drive %d is write protected\n\r",current_drive); + floppy_deselect(current_drive); + end_request(0); + } else + bad_flp_intr(); + do_fd_request(); + return; + } + if (command == FD_READ && (unsigned long)(CURRENT->buffer) >= 0x100000) + copy_buffer(tmp_floppy_area,CURRENT->buffer); + floppy_deselect(current_drive); + end_request(1); + do_fd_request(); +} + +inline void setup_rw_floppy(void) +{ + setup_DMA(); + do_floppy = rw_interrupt; + output_byte(command); + output_byte(head<<2 | current_drive); + output_byte(track); + output_byte(head); + output_byte(sector); + output_byte(2); /* sector size = 512 */ + output_byte(floppy->sect); + output_byte(floppy->gap); + output_byte(0xFF); /* sector size (0xff when n!=0 ?) */ + if (reset) + do_fd_request(); +} + +/* + * This is the routine called after every seek (or recalibrate) interrupt + * from the floppy controller. Note that the "unexpected interrupt" routine + * also does a recalibrate, but doesn't come here. + */ +static void seek_interrupt(void) +{ +/* sense drive status */ + output_byte(FD_SENSEI); + if (result() != 2 || (ST0 & 0xF8) != 0x20 || ST1 != seek_track) { + bad_flp_intr(); + do_fd_request(); + return; + } + current_track = ST1; + setup_rw_floppy(); +} + +/* + * This routine is called when everything should be correctly set up + * for the transfer (ie floppy motor is on and the correct floppy is + * selected). + */ +static void transfer(void) +{ + if (cur_spec1 != floppy->spec1) { + cur_spec1 = floppy->spec1; + output_byte(FD_SPECIFY); + output_byte(cur_spec1); /* hut etc */ + output_byte(6); /* Head load time =6ms, DMA */ + } + if (cur_rate != floppy->rate) + outb_p(cur_rate = floppy->rate,FD_DCR); + if (reset) { + do_fd_request(); + return; + } + if (!seek) { + setup_rw_floppy(); + return; + } + do_floppy = seek_interrupt; + if (seek_track) { + output_byte(FD_SEEK); + output_byte(head<<2 | current_drive); + output_byte(seek_track); + } else { + output_byte(FD_RECALIBRATE); + output_byte(head<<2 | current_drive); + } + if (reset) + do_fd_request(); +} + +/* + * Special case - used after a unexpected interrupt (or reset) + */ +static void recal_interrupt(void) +{ + output_byte(FD_SENSEI); + if (result()!=2 || (ST0 & 0xE0) == 0x60) + reset = 1; + else + recalibrate = 0; + do_fd_request(); +} + +void unexpected_floppy_interrupt(void) +{ + output_byte(FD_SENSEI); + if (result()!=2 || (ST0 & 0xE0) == 0x60) + reset = 1; + else + recalibrate = 1; +} + +static void recalibrate_floppy(void) +{ + recalibrate = 0; + current_track = 0; + current_drive = 1; /* by wyj, ?? */ + do_floppy = recal_interrupt; + output_byte(FD_RECALIBRATE); + output_byte(head<<2 | current_drive); + if (reset) + do_fd_request(); +} + +static void reset_interrupt(void) +{ + output_byte(FD_SENSEI); + (void) result(); + output_byte(FD_SPECIFY); + output_byte(cur_spec1); /* hut etc */ + output_byte(6); /* Head load time =6ms, DMA */ + do_fd_request(); +} + +/* + * reset is done by pulling bit 2 of DOR low for a while. + */ +static void reset_floppy(void) +{ + int i; + + reset = 0; + cur_spec1 = -1; + cur_rate = -1; + recalibrate = 1; + printk("Reset-floppy called\n\r"); + cli(); + do_floppy = reset_interrupt; + outb_p(current_DOR & ~0x04,FD_DOR); + for (i=0 ; i<100 ; i++) + __asm__("nop"); + outb(current_DOR,FD_DOR); + sti(); +} + +static void floppy_on_interrupt(void) +{ +/* We cannot do a floppy-select, as that might sleep. We just force it */ + selected = 1; + if (current_drive != (current_DOR & 3)) { + current_DOR &= 0xFC; + current_DOR |= current_drive; + outb(current_DOR,FD_DOR); + add_timer(2,&transfer); + } else + transfer(); +} + +void do_fd_request(void) +{ + unsigned int block; + + seek = 0; + if (reset) { + reset_floppy(); + return; + } + if (recalibrate) { + recalibrate_floppy(); + return; + } + INIT_REQUEST; + floppy = (MINOR(CURRENT->dev)>>2) + floppy_type; + if (current_drive != CURRENT_DEV) + seek = 1; + current_drive = CURRENT_DEV; + block = CURRENT->sector; + if (block+2 > floppy->size) { + end_request(0); + goto repeat; + } + sector = block % floppy->sect; + block /= floppy->sect; + head = block % floppy->head; + track = block / floppy->head; + seek_track = track << floppy->stretch; + if (seek_track != current_track) + seek = 1; + sector++; + if (CURRENT->cmd == READ) + command = FD_READ; + else if (CURRENT->cmd == WRITE) + command = FD_WRITE; + else + panic("do_fd_request: unknown command"); + add_timer(ticks_to_floppy_on(current_drive),&floppy_on_interrupt); +} + +void floppy_init(void) +{ + blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; + set_trap_gate(0x26,&floppy_interrupt); + outb(inb_p(0x21)&~0x40,0x21); +} diff --git a/linux-0.11-lab/cur/linux/kernel/blk_drv/floppy.o b/linux-0.11-lab/cur/linux/kernel/blk_drv/floppy.o new file mode 100644 index 0000000000000000000000000000000000000000..33235bcdcc660371f0cfe6077089e24f2a1c3a96 GIT binary patch literal 16612 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/kernel/blk_drv/hd.c b/linux-0.11-lab/cur/linux/kernel/blk_drv/hd.c new file mode 100644 index 0000000..c0e908f --- /dev/null +++ b/linux-0.11-lab/cur/linux/kernel/blk_drv/hd.c @@ -0,0 +1,351 @@ +/* + * linux/kernel/hd.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This is the low-level hd interrupt support. It traverses the + * request-list, using interrupts to jump between functions. As + * all the functions are called within interrupts, we may not + * sleep. Special care is recommended. + * + * modified by Drew Eckhardt to check nr of hd's from the CMOS. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAJOR_NR 3 +#include "blk.h" + +#define CMOS_READ(addr) ({ \ +outb_p(0x80|addr,0x70); \ +inb_p(0x71); \ +}) + +/* Max read/write errors/sector */ +#define MAX_ERRORS 7 +#define MAX_HD 2 + +static void recal_intr(void); + +static int recalibrate = 0; /* 1, wen */ +static int reset = 0; + +/* + * This struct defines the HD's and their types. + */ +struct hd_i_struct { + int head,sect,cyl,wpcom,lzone,ctl; + }; +#ifdef HD_TYPE +struct hd_i_struct hd_info[] = { HD_TYPE }; +#define NR_HD ((sizeof (hd_info))/(sizeof (struct hd_i_struct))) +#else +struct hd_i_struct hd_info[] = { {0,0,0,0,0,0},{0,0,0,0,0,0} }; +static int NR_HD = 0; +#endif + +static struct hd_struct { + long start_sect; + long nr_sects; +} hd[5*MAX_HD]={{0,0},}; + +#define port_read(port,buf,nr) \ +__asm__("cld;rep;insw"::"d" (port),"D" (buf),"c" (nr)) + +#define port_write(port,buf,nr) \ +__asm__("cld;rep;outsw"::"d" (port),"S" (buf),"c" (nr)) + +extern void hd_interrupt(void); +extern void rd_load(void); + +/* This may be used only once, enforced by 'static int callable' */ +int sys_setup(void * BIOS) +{ + static int callable = 1; + int i,drive; + unsigned char cmos_disks; + struct partition *p; + struct buffer_head * bh; + + if (!callable) + return -1; + callable = 0; +#ifndef HD_TYPE + for (drive=0 ; drive<2 ; drive++) { + hd_info[drive].cyl = *(unsigned short *) BIOS; + hd_info[drive].head = *(unsigned char *) (2+BIOS); + hd_info[drive].wpcom = *(unsigned short *) (5+BIOS); + hd_info[drive].ctl = *(unsigned char *) (8+BIOS); + hd_info[drive].lzone = *(unsigned short *) (12+BIOS); + hd_info[drive].sect = *(unsigned char *) (14+BIOS); + BIOS += 16; + } + if (hd_info[1].cyl) + NR_HD=2; + else + NR_HD=1; +#endif + for (i=0 ; i are the primary drives in the system, and + the ones reflected as drive 1 or 2. + + The first drive is stored in the high nibble of CMOS + byte 0x12, the second in the low nibble. This will be + either a 4 bit drive type or 0xf indicating use byte 0x19 + for an 8 bit type, drive 1, 0x1a for drive 2 in CMOS. + + Needless to say, a non-zero value means we have + an AT controller hard disk for that drive. + + + */ + + if ((cmos_disks = CMOS_READ(0x12)) & 0xf0) + if (cmos_disks & 0x0f) + NR_HD = 2; + else + NR_HD = 1; + else + NR_HD = 0; + for (i = NR_HD ; i < 2 ; i++) { + hd[i*5].start_sect = 0; + hd[i*5].nr_sects = 0; + } + for (drive=0 ; driveb_data[510] != 0x55 || (unsigned char) + bh->b_data[511] != 0xAA) { + printk("Bad partition table on drive %d\n\r",drive); + panic(""); + } + p = 0x1BE + (void *)bh->b_data; + for (i=1;i<5;i++,p++) { + hd[i+5*drive].start_sect = p->start_sect; + hd[i+5*drive].nr_sects = p->nr_sects; + } + brelse(bh); + } + if (NR_HD) + printk("Partition table%s ok.\n\r",(NR_HD>1)?"s":""); + rd_load(); + mount_root(); + return (0); +} + +static int controller_ready(void) +{ + /* int retries=10000; */ + int retries=100000; + + /* while (--retries && (inb_p(HD_STATUS)&0xc0)!=0x40); */ + while (--retries && (inb_p(HD_STATUS)&0x80)); + return (retries); +} + +static int win_result(void) +{ + int i=inb_p(HD_STATUS); + + if ((i & (BUSY_STAT | READY_STAT | WRERR_STAT | SEEK_STAT | ERR_STAT)) + == (READY_STAT | SEEK_STAT)) + return(0); /* ok */ + if (i&1) i=inb(HD_ERROR); + return (1); +} + +static void hd_out(unsigned int drive,unsigned int nsect,unsigned int sect, + unsigned int head,unsigned int cyl,unsigned int cmd, + void (*intr_addr)(void)) +{ + register int port asm("dx"); + + if (drive>1 || head>15) + panic("Trying to write bad sector"); + if (!controller_ready()) + panic("HD controller not ready"); + do_hd = intr_addr; + outb_p(hd_info[drive].ctl,HD_CMD); + port=HD_DATA; + outb_p(hd_info[drive].wpcom>>2,++port); + outb_p(nsect,++port); + outb_p(sect,++port); + outb_p(cyl,++port); + outb_p(cyl>>8,++port); + outb_p(0xA0|(drive<<4)|head,++port); + outb(cmd,++port); +} + +static int drive_busy(void) +{ + unsigned int i; + + for (i = 0; i < 10000; i++) + if (READY_STAT == (inb_p(HD_STATUS) & (BUSY_STAT|READY_STAT))) + break; + i = inb(HD_STATUS); + i &= BUSY_STAT | READY_STAT | SEEK_STAT; + if (i == READY_STAT | SEEK_STAT) + return(0); + printk("HD controller times out\n\r"); + return(1); +} + +static void reset_controller(void) +{ + int i; + + outb(4,HD_CMD); + for(i = 0; i < 100; i++) nop(); + outb(hd_info[0].ctl & 0x0f ,HD_CMD); + if (drive_busy()) + printk("HD-controller still busy\n\r"); + if ((i = inb(HD_ERROR)) != 1) + printk("HD-controller reset failed: %02x\n\r",i); +} + +static void reset_hd(int nr) +{ + reset_controller(); + hd_out(nr,hd_info[nr].sect,hd_info[nr].sect,hd_info[nr].head-1, + hd_info[nr].cyl,WIN_SPECIFY,&recal_intr); +} + +void unexpected_hd_interrupt(void) +{ + printk("Unexpected HD interrupt\n\r"); +} + +static void bad_rw_intr(void) +{ + if (++CURRENT->errors >= MAX_ERRORS) + end_request(0); + if (CURRENT->errors > MAX_ERRORS/2) + reset = 1; +} + +static void read_intr(void) +{ + if (win_result()) { + bad_rw_intr(); + do_hd_request(); + return; + } + port_read(HD_DATA,CURRENT->buffer,256); + CURRENT->errors = 0; + CURRENT->buffer += 512; + CURRENT->sector++; + if (--CURRENT->nr_sectors) { + do_hd = &read_intr; + return; + } + end_request(1); + do_hd_request(); +} + +static void write_intr(void) +{ + if (win_result()) { + bad_rw_intr(); + do_hd_request(); + return; + } + if (--CURRENT->nr_sectors) { + CURRENT->sector++; + CURRENT->buffer += 512; + do_hd = &write_intr; + port_write(HD_DATA,CURRENT->buffer,256); + return; + } + end_request(1); + do_hd_request(); +} + +static void recal_intr(void) +{ + if (win_result()) + bad_rw_intr(); + do_hd_request(); +} + +void do_hd_request(void) +{ + int i,r; + unsigned int block,dev; + unsigned int sec,head,cyl; + unsigned int nsect; + + INIT_REQUEST; + dev = MINOR(CURRENT->dev); + block = CURRENT->sector; + if (dev >= 5*NR_HD || block+2 > hd[dev].nr_sects) { + end_request(0); + goto repeat; + } + block += hd[dev].start_sect; + dev /= 5; + __asm__("divl %4":"=a" (block),"=d" (sec):"0" (block),"1" (0), + "r" (hd_info[dev].sect)); + __asm__("divl %4":"=a" (cyl),"=d" (head):"0" (block),"1" (0), + "r" (hd_info[dev].head)); + sec++; + nsect = CURRENT->nr_sectors; + if (reset) { + reset = 0; + recalibrate = 1; + reset_hd(CURRENT_DEV); + return; + } + if (recalibrate) { + recalibrate = 0; + hd_out(dev,hd_info[CURRENT_DEV].sect,0,0,0, + WIN_RESTORE,&recal_intr); + return; + } + if (CURRENT->cmd == WRITE) { + hd_out(dev,nsect,sec,head,cyl,WIN_WRITE,&write_intr); + for(i=0 ; i<3000 && !(r=inb_p(HD_STATUS)&DRQ_STAT) ; i++) + /* nothing */ ; + if (!r) { + bad_rw_intr(); + goto repeat; + } + port_write(HD_DATA,CURRENT->buffer,256); + } else if (CURRENT->cmd == READ) { + hd_out(dev,nsect,sec,head,cyl,WIN_READ,&read_intr); + } else + panic("unknown hd-command"); +} + +void hd_init(void) +{ + blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; + set_intr_gate(0x2E,&hd_interrupt); + outb_p(inb_p(0x21)&0xfb,0x21); + outb(inb_p(0xA1)&0xbf,0xA1); +} diff --git a/linux-0.11-lab/cur/linux/kernel/blk_drv/hd.o b/linux-0.11-lab/cur/linux/kernel/blk_drv/hd.o new file mode 100644 index 0000000000000000000000000000000000000000..bf2b0d10bc58477ea1758f63f765ba3eab8d6225 GIT binary patch literal 15520 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/kernel/blk_drv/ll_rw_blk.c b/linux-0.11-lab/cur/linux/kernel/blk_drv/ll_rw_blk.c new file mode 100644 index 0000000..f57d998 --- /dev/null +++ b/linux-0.11-lab/cur/linux/kernel/blk_drv/ll_rw_blk.c @@ -0,0 +1,165 @@ +/* + * linux/kernel/blk_dev/ll_rw.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This handles all read/write requests to block devices + */ +#include +#include +#include +#include + +#include "blk.h" + +/* + * The request-struct contains all necessary data + * to load a nr of sectors into memory + */ +struct request request[NR_REQUEST]; + +/* + * used to wait on when there are no free requests + */ +struct task_struct * wait_for_request = NULL; + +/* blk_dev_struct is: + * do_request-address + * next-request + */ +struct blk_dev_struct blk_dev[NR_BLK_DEV] = { + { NULL, NULL }, /* no_dev */ + { NULL, NULL }, /* dev mem */ + { NULL, NULL }, /* dev fd */ + { NULL, NULL }, /* dev hd */ + { NULL, NULL }, /* dev ttyx */ + { NULL, NULL }, /* dev tty */ + { NULL, NULL } /* dev lp */ +}; + +static inline void lock_buffer(struct buffer_head * bh) +{ + cli(); + while (bh->b_lock) + sleep_on(&bh->b_wait); + bh->b_lock=1; + sti(); +} + +static inline void unlock_buffer(struct buffer_head * bh) +{ + if (!bh->b_lock) + printk("ll_rw_block.c: buffer not locked\n\r"); + bh->b_lock = 0; + wake_up(&bh->b_wait); +} + +/* + * add-request adds a request to the linked list. + * It disables interrupts so that it can muck with the + * request-lists in peace. + */ +static void add_request(struct blk_dev_struct * dev, struct request * req) +{ + struct request * tmp; + + req->next = NULL; + cli(); + if (req->bh) + req->bh->b_dirt = 0; + if (!(tmp = dev->current_request)) { + dev->current_request = req; + sti(); + (dev->request_fn)(); + return; + } + for ( ; tmp->next ; tmp=tmp->next) + if ((IN_ORDER(tmp,req) || + !IN_ORDER(tmp,tmp->next)) && + IN_ORDER(req,tmp->next)) + break; + req->next=tmp->next; + tmp->next=req; + sti(); +} + +static void make_request(int major,int rw, struct buffer_head * bh) +{ + struct request * req; + int rw_ahead; + +/* WRITEA/READA is special case - it is not really needed, so if the */ +/* buffer is locked, we just forget about it, else it's a normal read */ + if (rw_ahead = (rw == READA || rw == WRITEA)) { + if (bh->b_lock) + return; + if (rw == READA) + rw = READ; + else + rw = WRITE; + } + if (rw!=READ && rw!=WRITE) + panic("Bad block dev command, must be R/W/RA/WA"); + lock_buffer(bh); + if ((rw == WRITE && !bh->b_dirt) || (rw == READ && bh->b_uptodate)) { + unlock_buffer(bh); + return; + } +repeat: +/* we don't allow the write-requests to fill up the queue completely: + * we want some room for reads: they take precedence. The last third + * of the requests are only for reads. + */ + if (rw == READ) + req = request+NR_REQUEST; + else + req = request+((NR_REQUEST*2)/3); +/* find an empty request */ + while (--req >= request) + if (req->dev<0) + break; +/* if none found, sleep on new requests: check for rw_ahead */ + if (req < request) { + if (rw_ahead) { + unlock_buffer(bh); + return; + } + sleep_on(&wait_for_request); + goto repeat; + } +/* fill up the request-info, and add it to the queue */ + req->dev = bh->b_dev; + req->cmd = rw; + req->errors=0; + req->sector = bh->b_blocknr<<1; + req->nr_sectors = 2; + req->buffer = bh->b_data; + req->waiting = NULL; + req->bh = bh; + req->next = NULL; + add_request(major+blk_dev,req); +} + +void ll_rw_block(int rw, struct buffer_head * bh) +{ + unsigned int major; + + if ((major=MAJOR(bh->b_dev)) >= NR_BLK_DEV || + !(blk_dev[major].request_fn)) { + printk("Trying to read nonexistent block-device\n\r"); + return; + } + make_request(major,rw,bh); +} + +void blk_dev_init(void) +{ + int i; + + for (i=0 ; iYkGs}N`|^F* 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 + +#include +#include +#include +#include +#include +#include +#include + +#define MAJOR_NR 1 +#include "blk.h" + +char *rd_start; +int rd_length = 0; + +void do_rd_request(void) +{ + int len; + char *addr; + + INIT_REQUEST; + addr = rd_start + (CURRENT->sector << 9); + len = CURRENT->nr_sectors << 9; + if ((MINOR(CURRENT->dev) != 1) || (addr+len > rd_start+rd_length)) { + end_request(0); + goto repeat; + } + if (CURRENT-> cmd == WRITE) { + (void ) memcpy(addr, + CURRENT->buffer, + len); + } else if (CURRENT->cmd == READ) { + (void) memcpy(CURRENT->buffer, + addr, + len); + } else + panic("unknown ramdisk-command"); + end_request(1); + goto repeat; +} + +/* + * Returns amount of memory which needs to be reserved. + */ +long rd_init(long mem_start, int length) +{ + int i; + char *cp; + + blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; + rd_start = (char *) mem_start; + rd_length = length; + cp = rd_start; + for (i=0; i < length; i++) + *cp++ = '\0'; + return(length); +} + +/* + * If the root device is the ram disk, try to load it. + * In order to do this, the root device is originally set to the + * floppy, and we later change it to be ram disk. + */ +void rd_load(void) +{ + struct buffer_head *bh; + struct super_block s; + int block = 256; /* Start at block 256 */ + int i = 1; + int nblocks; + char *cp; /* Move pointer */ + + if (!rd_length) + return; + printk("Ram disk: %d bytes, starting at 0x%x\n", rd_length, + (int) rd_start); + if (MAJOR(ROOT_DEV) != 2) + return; + bh = breada(ROOT_DEV,block+1,block,block+2,-1); + if (!bh) { + printk("Disk error while looking for ramdisk!\n"); + return; + } + __asm__ volatile ("cld"); /* by wyj */ + *((struct d_super_block *) &s) = *((struct d_super_block *) bh->b_data); + brelse(bh); + if (s.s_magic != SUPER_MAGIC) + /* No ram disk image present, assume normal floppy boot */ + return; + nblocks = s.s_nzones << s.s_log_zone_size; + if (nblocks > (rd_length >> BLOCK_SIZE_BITS)) { + printk("Ram disk image too big! (%d blocks, %d avail)\n", + nblocks, rd_length >> BLOCK_SIZE_BITS); + return; + } + printk("Loading %d bytes into ram disk... 0000k", + nblocks << BLOCK_SIZE_BITS); + cp = rd_start; + while (nblocks) { + if (nblocks > 2) + bh = breada(ROOT_DEV, block, block+1, block+2, -1); + else + bh = bread(ROOT_DEV, block); + if (!bh) { + printk("I/O error on block %d, aborting load\n", + block); + return; + } + (void) memcpy(cp, bh->b_data, BLOCK_SIZE); + brelse(bh); + printk("\010\010\010\010\010%4dk",i); + cp += BLOCK_SIZE; + block++; + nblocks--; + i++; + } + printk("\010\010\010\010\010done \n"); + ROOT_DEV=0x0101; +} diff --git a/linux-0.11-lab/cur/linux/kernel/blk_drv/ramdisk.o b/linux-0.11-lab/cur/linux/kernel/blk_drv/ramdisk.o new file mode 100644 index 0000000000000000000000000000000000000000..d37a922496b20c46741e78e22466958ee16e9dcd GIT binary patch literal 10664 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 azd^gt2s%I$JikGRTt|uA(-65=A^s1$?rygL literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/kernel/chr_drv/Makefile b/linux-0.11-lab/cur/linux/kernel/chr_drv/Makefile new file mode 100644 index 0000000..9d4d8d1 --- /dev/null +++ b/linux-0.11-lab/cur/linux/kernel/chr_drv/Makefile @@ -0,0 +1,68 @@ +# +# Makefile for the FREAX-kernel character device drivers. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). +# + +AR =ar +AS =as +LD =ld +LDFLAGS =-s -x +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -finline-functions -nostdinc -fno-stack-protector -I../../include +CPP =gcc -E -nostdinc -I../../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< + +OBJS = tty_io.o console.o keyboard.2.o serial.o rs_io.o \ + tty_ioctl.o + +chr_drv.a: $(OBJS) + $(AR) rcs chr_drv.a $(OBJS) + sync + +keyboard.2.s: keyboard.S ../../include/linux/config.h + $(CPP) -traditional keyboard.S -o keyboard.2.s + +clean: + rm -f core *.o *.a tmp_make keyboard.2.s + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +console.s console.o : console.c ../../include/linux/sched.h \ + ../../include/linux/head.h ../../include/linux/fs.h \ + ../../include/sys/types.h ../../include/linux/mm.h ../../include/signal.h \ + ../../include/linux/tty.h ../../include/termios.h ../../include/asm/io.h \ + ../../include/asm/system.h +serial.s serial.o : serial.c ../../include/linux/tty.h ../../include/termios.h \ + ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/sys/types.h ../../include/linux/mm.h \ + ../../include/signal.h ../../include/asm/system.h ../../include/asm/io.h +tty_io.s tty_io.o : tty_io.c ../../include/ctype.h ../../include/errno.h \ + ../../include/signal.h ../../include/sys/types.h \ + ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/linux/mm.h ../../include/linux/tty.h \ + ../../include/termios.h ../../include/asm/segment.h \ + ../../include/asm/system.h +tty_ioctl.s tty_ioctl.o : tty_ioctl.c ../../include/errno.h ../../include/termios.h \ + ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/sys/types.h ../../include/linux/mm.h \ + ../../include/signal.h ../../include/linux/kernel.h \ + ../../include/linux/tty.h ../../include/asm/io.h \ + ../../include/asm/segment.h ../../include/asm/system.h diff --git a/linux-0.11-lab/cur/linux/kernel/chr_drv/chr_drv.a b/linux-0.11-lab/cur/linux/kernel/chr_drv/chr_drv.a new file mode 100644 index 0000000000000000000000000000000000000000..d2f3869a9d5cd226117476be64275b50d1cf4aa7 GIT binary patch literal 68902 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ਞ(_ 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 E8yu$yWB>pF literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/kernel/chr_drv/console.c b/linux-0.11-lab/cur/linux/kernel/chr_drv/console.c new file mode 100644 index 0000000..a12ffbf --- /dev/null +++ b/linux-0.11-lab/cur/linux/kernel/chr_drv/console.c @@ -0,0 +1,710 @@ +/* + * linux/kernel/console.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * console.c + * + * This module implements the console io functions + * 'void con_init(void)' + * 'void con_write(struct tty_queue * queue)' + * Hopefully this will be a rather complete VT102 implementation. + * + * Beeping thanks to John T Kohl. + */ + +/* + * NOTE!!! We sometimes disable and enable interrupts for a short while + * (to put a word in video IO), but this will work even for keyboard + * interrupts. We know interrupts aren't enabled when getting a keyboard + * interrupt, as we use trap-gates. Hopefully all is well. + */ + +/* + * Code to check for different video-cards mostly by Galen Hunt, + * + */ + +#include +#include +#include +#include + +/* + * These are set up by the setup-routine at boot-time: + */ + +#define ORIG_X (*(unsigned char *)0x90000) +#define ORIG_Y (*(unsigned char *)0x90001) +#define ORIG_VIDEO_PAGE (*(unsigned short *)0x90004) +#define ORIG_VIDEO_MODE ((*(unsigned short *)0x90006) & 0xff) +#define ORIG_VIDEO_COLS (((*(unsigned short *)0x90006) & 0xff00) >> 8) +#define ORIG_VIDEO_LINES (25) +#define ORIG_VIDEO_EGA_AX (*(unsigned short *)0x90008) +#define ORIG_VIDEO_EGA_BX (*(unsigned short *)0x9000a) +#define ORIG_VIDEO_EGA_CX (*(unsigned short *)0x9000c) + +#define VIDEO_TYPE_MDA 0x10 /* Monochrome Text Display */ +#define VIDEO_TYPE_CGA 0x11 /* CGA Display */ +#define VIDEO_TYPE_EGAM 0x20 /* EGA/VGA in Monochrome Mode */ +#define VIDEO_TYPE_EGAC 0x21 /* EGA/VGA in Color Mode */ + +#define NPAR 16 + +extern void keyboard_interrupt(void); + +static unsigned char video_type; /* Type of display being used */ +static unsigned long video_num_columns; /* Number of text columns */ +static unsigned long video_size_row; /* Bytes per row */ +static unsigned long video_num_lines; /* Number of test lines */ +static unsigned char video_page; /* Initial video page */ +static unsigned long video_mem_start; /* Start of video RAM */ +static unsigned long video_mem_end; /* End of video RAM (sort of) */ +static unsigned short video_port_reg; /* Video register select port */ +static unsigned short video_port_val; /* Video register value port */ +static unsigned short video_erase_char; /* Char+Attrib to erase with */ + +static unsigned long origin; /* Used for EGA/VGA fast scroll */ +static unsigned long scr_end; /* Used for EGA/VGA fast scroll */ +static unsigned long pos; +static unsigned long x,y; +static unsigned long top,bottom; +static unsigned long state=0; +static unsigned long npar,par[NPAR]; +static unsigned long ques=0; +static unsigned char attr=0x07; + +static void sysbeep(void); + +/* + * this is what the terminal answers to a ESC-Z or csi0c + * query (= vt100 response). + */ +#define RESPONSE "\033[?1;2c" + +/* NOTE! gotoxy thinks x==video_num_columns is ok */ +static inline void gotoxy(unsigned int new_x,unsigned int new_y) +{ + if (new_x > video_num_columns || new_y >= video_num_lines) + return; + x=new_x; + y=new_y; + pos=origin + y*video_size_row + (x<<1); +} + +static inline void set_origin(void) +{ + cli(); + outb_p(12, video_port_reg); + outb_p(0xff&((origin-video_mem_start)>>9), video_port_val); + outb_p(13, video_port_reg); + outb_p(0xff&((origin-video_mem_start)>>1), video_port_val); + sti(); +} + +static void scrup(void) +{ + if (video_type == VIDEO_TYPE_EGAC || video_type == VIDEO_TYPE_EGAM) + { + if (!top && bottom == video_num_lines) { + origin += video_size_row; + pos += video_size_row; + scr_end += video_size_row; + if (scr_end > video_mem_end) { + __asm__("cld\n\t" + "rep\n\t" + "movsl\n\t" + "movl video_num_columns,%1\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((video_num_lines-1)*video_num_columns>>1), + "D" (video_mem_start), + "S" (origin) + ); + scr_end -= origin-video_mem_start; + pos -= origin-video_mem_start; + origin = video_mem_start; + } else { + __asm__("cld\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" (video_num_columns), + "D" (scr_end-video_size_row) + ); + } + set_origin(); + } else { + __asm__("cld\n\t" + "rep\n\t" + "movsl\n\t" + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*top), + "S" (origin+video_size_row*(top+1)) + ); + } + } + else /* Not EGA/VGA */ + { + __asm__("cld\n\t" + "rep\n\t" + "movsl\n\t" + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*top), + "S" (origin+video_size_row*(top+1)) + ); + } +} + +static void scrdown(void) +{ + if (video_type == VIDEO_TYPE_EGAC || video_type == VIDEO_TYPE_EGAM) + { + __asm__("std\n\t" + "rep\n\t" + "movsl\n\t" + "addl $2,%%edi\n\t" /* %edi has been decremented by 4 */ + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*bottom-4), + "S" (origin+video_size_row*(bottom-1)-4) + ); + } + else /* Not EGA/VGA */ + { + __asm__("std\n\t" + "rep\n\t" + "movsl\n\t" + "addl $2,%%edi\n\t" /* %edi has been decremented by 4 */ + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*bottom-4), + "S" (origin+video_size_row*(bottom-1)-4) + ); + } +} + +static void lf(void) +{ + if (y+1top) { + y--; + pos -= video_size_row; + return; + } + scrdown(); +} + +static void cr(void) +{ + pos -= x<<1; + x=0; +} + +static void del(void) +{ + if (x) { + pos -= 2; + x--; + *(unsigned short *)pos = video_erase_char; + } +} + +static void csi_J(int par) +{ + long count __asm__("cx"); + long start __asm__("di"); + + switch (par) { + case 0: /* erase from cursor to end of display */ + count = (scr_end-pos)>>1; + start = pos; + break; + case 1: /* erase from start to cursor */ + count = (pos-origin)>>1; + start = origin; + break; + case 2: /* erase whole display */ + count = video_num_columns * video_num_lines; + start = origin; + break; + default: + return; + } + __asm__("cld\n\t" + "rep\n\t" + "stosw\n\t" + ::"c" (count), + "D" (start),"a" (video_erase_char) + ); +} + +static void csi_K(int par) +{ + long count __asm__("cx"); + long start __asm__("di"); + + switch (par) { + case 0: /* erase from cursor to end of line */ + if (x>=video_num_columns) + return; + count = video_num_columns-x; + start = pos; + break; + case 1: /* erase from start of line to cursor */ + start = pos - (x<<1); + count = (x>9), video_port_val); + outb_p(15, video_port_reg); + outb_p(0xff&((pos-video_mem_start)>>1), video_port_val); + sti(); +} + +static void respond(struct tty_struct * tty) +{ + char * p = RESPONSE; + + cli(); + while (*p) { + PUTCH(*p,tty->read_q); + p++; + } + sti(); + copy_to_cooked(tty); +} + +static void insert_char(void) +{ + int i=x; + unsigned short tmp, old = video_erase_char; + unsigned short * p = (unsigned short *) pos; + + while (i++=video_num_columns) + return; + i = x; + while (++i < video_num_columns) { + *p = *(p+1); + p++; + } + *p = video_erase_char; +} + +static void delete_line(void) +{ + int oldtop,oldbottom; + + oldtop=top; + oldbottom=bottom; + top=y; + bottom = video_num_lines; + scrup(); + top=oldtop; + bottom=oldbottom; +} + +static void csi_at(unsigned int nr) +{ + if (nr > video_num_columns) + nr = video_num_columns; + else if (!nr) + nr = 1; + while (nr--) + insert_char(); +} + +static void csi_L(unsigned int nr) +{ + if (nr > video_num_lines) + nr = video_num_lines; + else if (!nr) + nr = 1; + while (nr--) + insert_line(); +} + +static void csi_P(unsigned int nr) +{ + if (nr > video_num_columns) + nr = video_num_columns; + else if (!nr) + nr = 1; + while (nr--) + delete_char(); +} + +static void csi_M(unsigned int nr) +{ + if (nr > video_num_lines) + nr = video_num_lines; + else if (!nr) + nr=1; + while (nr--) + delete_line(); +} + +static int saved_x=0; +static int saved_y=0; + +static void save_cur(void) +{ + saved_x=x; + saved_y=y; +} + +static void restore_cur(void) +{ + gotoxy(saved_x, saved_y); +} + +void con_write(struct tty_struct * tty) +{ + int nr; + char c; + + nr = CHARS(tty->write_q); + while (nr--) { + GETCH(tty->write_q,c); + switch(state) { + case 0: + if (c>31 && c<127) { + if (x>=video_num_columns) { + x -= video_num_columns; + pos -= video_size_row; + lf(); + } + __asm__("movb attr,%%ah\n\t" + "movw %%ax,%1\n\t" + ::"a" (c),"m" (*(short *)pos) + ); + pos += 2; + x++; + } else if (c==27) + state=1; + else if (c==10 || c==11 || c==12) + lf(); + else if (c==13) + cr(); + else if (c==ERASE_CHAR(tty)) + del(); + else if (c==8) { + if (x) { + x--; + pos -= 2; + } + } else if (c==9) { + c=8-(x&7); + x += c; + pos += c<<1; + if (x>video_num_columns) { + x -= video_num_columns; + pos -= video_size_row; + lf(); + } + c=9; + } else if (c==7) + sysbeep(); + break; + case 1: + state=0; + if (c=='[') + state=2; + else if (c=='E') + gotoxy(0,y+1); + else if (c=='M') + ri(); + else if (c=='D') + lf(); + else if (c=='Z') + respond(tty); + else if (x=='7') + save_cur(); + else if (x=='8') + restore_cur(); + break; + case 2: + for(npar=0;npar='0' && c<='9') { + par[npar]=10*par[npar]+c-'0'; + break; + } else state=4; + case 4: + state=0; + switch(c) { + case 'G': case '`': + if (par[0]) par[0]--; + gotoxy(par[0],y); + break; + case 'A': + if (!par[0]) par[0]++; + gotoxy(x,y-par[0]); + break; + case 'B': case 'e': + if (!par[0]) par[0]++; + gotoxy(x,y+par[0]); + break; + case 'C': case 'a': + if (!par[0]) par[0]++; + gotoxy(x+par[0],y); + break; + case 'D': + if (!par[0]) par[0]++; + gotoxy(x-par[0],y); + break; + case 'E': + if (!par[0]) par[0]++; + gotoxy(0,y+par[0]); + break; + case 'F': + if (!par[0]) par[0]++; + gotoxy(0,y-par[0]); + break; + case 'd': + if (par[0]) par[0]--; + gotoxy(x,par[0]); + break; + case 'H': case 'f': + if (par[0]) par[0]--; + if (par[1]) par[1]--; + gotoxy(par[1],par[0]); + break; + case 'J': + csi_J(par[0]); + break; + case 'K': + csi_K(par[0]); + break; + case 'L': + csi_L(par[0]); + break; + case 'M': + csi_M(par[0]); + break; + case 'P': + csi_P(par[0]); + break; + case '@': + csi_at(par[0]); + break; + case 'm': + csi_m(); + break; + case 'r': + if (par[0]) par[0]--; + if (!par[1]) par[1] = video_num_lines; + if (par[0] < par[1] && + par[1] <= video_num_lines) { + top=par[0]; + bottom=par[1]; + } + break; + case 's': + save_cur(); + break; + case 'u': + restore_cur(); + break; + } + } + } + set_cursor(); +} + +/* + * void con_init(void); + * + * This routine initalizes console interrupts, and does nothing + * else. If you want the screen to clear, call tty_write with + * the appropriate escape-sequece. + * + * Reads the information preserved by setup.s to determine the current display + * type and sets everything accordingly. + */ +void con_init(void) +{ + register unsigned char a; + char *display_desc = "????"; + char *display_ptr; + + video_num_columns = ORIG_VIDEO_COLS; + video_size_row = video_num_columns * 2; + video_num_lines = ORIG_VIDEO_LINES; + video_page = ORIG_VIDEO_PAGE; + video_erase_char = 0x0720; + + if (ORIG_VIDEO_MODE == 7) /* Is this a monochrome display? */ + { + video_mem_start = 0xb0000; + video_port_reg = 0x3b4; + video_port_val = 0x3b5; + if ((ORIG_VIDEO_EGA_BX & 0xff) != 0x10) + { + video_type = VIDEO_TYPE_EGAM; + video_mem_end = 0xb8000; + display_desc = "EGAm"; + } + else + { + video_type = VIDEO_TYPE_MDA; + video_mem_end = 0xb2000; + display_desc = "*MDA"; + } + } + else /* If not, it is color. */ + { + video_mem_start = 0xb8000; + video_port_reg = 0x3d4; + video_port_val = 0x3d5; + if ((ORIG_VIDEO_EGA_BX & 0xff) != 0x10) + { + video_type = VIDEO_TYPE_EGAC; + video_mem_end = 0xbc000; + display_desc = "EGAc"; + } + else + { + video_type = VIDEO_TYPE_CGA; + video_mem_end = 0xba000; + display_desc = "*CGA"; + } + } + + /* Let the user known what kind of display driver we are using */ + + display_ptr = ((char *)video_mem_start) + video_size_row - 8; + while (*display_desc) + { + *display_ptr++ = *display_desc++; + display_ptr++; + } + + /* Initialize the variables used for scrolling (mostly EGA/VGA) */ + + origin = video_mem_start; + scr_end = video_mem_start + video_num_lines * video_size_row; + top = 0; + bottom = video_num_lines; + + gotoxy(ORIG_X,ORIG_Y); + set_trap_gate(0x21,&keyboard_interrupt); + outb_p(inb_p(0x21)&0xfd,0x21); + a=inb_p(0x61); + outb_p(a|0x80,0x61); + outb(a,0x61); +} +/* from bsd-net-2: */ + +void sysbeepstop(void) +{ + /* disable counter 2 */ + outb(inb_p(0x61)&0xFC, 0x61); +} + +int beepcount = 0; + +static void sysbeep(void) +{ + /* enable counter 2 */ + outb_p(inb_p(0x61)|3, 0x61); + /* set command for counter 2, 2 byte write */ + outb_p(0xB6, 0x43); + /* send 0x637 for 750 HZ */ + outb_p(0x37, 0x42); + outb(0x06, 0x42); + /* 1/8 second */ + beepcount = HZ/8; +} diff --git a/linux-0.11-lab/cur/linux/kernel/chr_drv/console.o b/linux-0.11-lab/cur/linux/kernel/chr_drv/console.o new file mode 100644 index 0000000000000000000000000000000000000000..cdb09cf249a683c556a1bd6a57bcc3dbe96270a4 GIT binary patch literal 20896 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" +# 1 "" +# 1 "keyboard.S" + + + + + + + + + + + + + +# 1 "../../include/linux/config.h" 1 + + + + + + + + + + + + + + + + + + + + + +# 36 "../../include/linux/config.h" + +# 47 "../../include/linux/config.h" + +# 14 "keyboard.S" 2 + +.text +.globl keyboard_interrupt + + + + +size = 1024 + +head = 4 +tail = 8 +proc_list = 12 +buf = 16 + +mode: .byte 0 +leds: .byte 2 +e0: .byte 0 + + + + + + +keyboard_interrupt: + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + push %ds + push %es + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + xor %al,%al + inb $0x60,%al + cmpb $0xe0,%al + je set_e0 + cmpb $0xe1,%al + je set_e1 + call key_table(,%eax,4) + movb $0,e0 +e0_e1: inb $0x61,%al + jmp 1f +1: jmp 1f +1: orb $0x80,%al + jmp 1f +1: jmp 1f +1: outb %al,$0x61 + jmp 1f +1: jmp 1f +1: andb $0x7F,%al + outb %al,$0x61 + movb $0x20,%al + outb %al,$0x20 + pushl $0 + call do_tty_interrupt + addl $4,%esp + pop %es + pop %ds + popl %edx + popl %ecx + popl %ebx + popl %eax + iret +set_e0: movb $1,e0 + jmp e0_e1 +set_e1: movb $2,e0 + jmp e0_e1 + + + + + + +put_queue: + pushl %ecx + pushl %edx + movl table_list,%edx # read-queue for console + movl head(%edx),%ecx +1: movb %al,buf(%edx,%ecx) + incl %ecx + andl $size-1,%ecx + cmpl tail(%edx),%ecx # buffer full - discard everything + je 3f + shrdl $8,%ebx,%eax + je 2f + shrl $8,%ebx + jmp 1b +2: movl %ecx,head(%edx) + movl proc_list(%edx),%ecx + testl %ecx,%ecx + je 3f + movl $0,(%ecx) +3: popl %edx + popl %ecx + ret + +ctrl: movb $0x04,%al + jmp 1f +alt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: orb %al,mode + ret +unctrl: movb $0x04,%al + jmp 1f +unalt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: notb %al + andb %al,mode + ret + +lshift: + orb $0x01,mode + ret +unlshift: + andb $0xfe,mode + ret +rshift: + orb $0x02,mode + ret +unrshift: + andb $0xfd,mode + ret + +caps: testb $0x80,mode + jne 1f + xorb $4,leds + xorb $0x40,mode + orb $0x80,mode +set_leds: + call kb_wait + movb $0xed,%al + outb %al,$0x60 + call kb_wait + movb leds,%al + outb %al,$0x60 + ret +uncaps: andb $0x7f,mode + ret +scroll: + xorb $1,leds + jmp set_leds +num: xorb $2,leds + jmp set_leds + + + + + +cursor: + subb $0x47,%al + jb 1f + cmpb $12,%al + ja 1f + jne cur2 + testb $0x0c,mode + je cur2 + testb $0x30,mode + jne reboot +cur2: cmpb $0x01,e0 + je cur + testb $0x02,leds + je cur + testb $0x03,mode + jne cur + xorl %ebx,%ebx + movb num_table(%eax),%al + jmp put_queue +1: ret + +cur: movb cur_table(%eax),%al + cmpb $'9,%al + ja ok_cur + movb $'~,%ah +ok_cur: shll $16,%eax + movw $0x5b1b,%ax + xorl %ebx,%ebx + jmp put_queue + + + + + +num_table: + .ascii "789 456 1230," + +cur_table: + .ascii "HA5 DGC YB623" + + + + +func: + pushl %eax + pushl %ecx + pushl %edx + call show_stat + popl %edx + popl %ecx + popl %eax + subb $0x3B,%al + jb end_func + cmpb $9,%al + jbe ok_func + subb $18,%al + cmpb $10,%al + jb end_func + cmpb $11,%al + ja end_func +ok_func: + cmpl $4,%ecx + jl end_func + movl func_table(,%eax,4),%eax + xorl %ebx,%ebx + jmp put_queue +end_func: + ret + + + + +func_table: + .long 0x415b5b1b,0x425b5b1b,0x435b5b1b,0x445b5b1b + .long 0x455b5b1b,0x465b5b1b,0x475b5b1b,0x485b5b1b + .long 0x495b5b1b,0x4a5b5b1b,0x4b5b5b1b,0x4c5b5b1b + +# 294 "keyboard.S" + +key_map: + .byte 0,27 + .ascii "1234567890-=" + .byte 127,9 + .ascii "qwertyuiop[]" + .byte 13,0 + .ascii "asdfghjkl;'" + .byte '`,0 + .ascii "\\zxcvbnm,./" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 + .byte '-,0,0,0,'+ + .byte 0,0,0,0,0,0,0 + .byte '< + .fill 10,1,0 + + +shift_map: + .byte 0,27 + .ascii "!@#$%^&*()_+" + .byte 127,9 + .ascii "QWERTYUIOP{}" + .byte 13,0 + .ascii "ASDFGHJKL:\"" + .byte '~,0 + .ascii "|ZXCVBNM<>?" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 + .byte '-,0,0,0,'+ + .byte 0,0,0,0,0,0,0 + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 + .fill 16,1,0 + .byte 0,0,0,0,0 + .byte 0,0,0,0,0,0,0 + .byte '| + .fill 10,1,0 + +# 449 "keyboard.S" + + + + +do_self: + lea alt_map,%ebx + testb $0x20,mode + jne 1f + lea shift_map,%ebx + testb $0x03,mode + jne 1f + lea key_map,%ebx +1: movb (%ebx,%eax),%al + orb %al,%al + je none + testb $0x4c,mode + je 2f + cmpb $'a,%al + jb 2f + cmpb $'},%al + ja 2f + subb $32,%al +2: testb $0x0c,mode + je 3f + cmpb $64,%al + jb 3f + cmpb $64+32,%al + jae 3f + subb $64,%al +3: testb $0x10,mode + je 4f + orb $0x80,%al +4: andl $0xff,%eax + xorl %ebx,%ebx + call put_queue +none: ret + + + + + + +minus: cmpb $1,e0 + jne do_self + movl $'/,%eax + xorl %ebx,%ebx + jmp put_queue + + + + + + +key_table: + .long none,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,ctrl,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,lshift,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,minus,rshift,do_self + .long alt,do_self,caps,func + .long func,func,func,func + .long func,func,func,func + .long func,num,scroll,cursor + .long cursor,cursor,do_self,cursor + .long cursor,cursor,do_self,cursor + .long cursor,cursor,cursor,cursor + .long none,none,do_self,func + .long func,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,unctrl,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,unlshift,none + .long none,none,none,none + .long none,none,none,none + .long none,none,unrshift,none + .long unalt,none,uncaps,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + + + + + +kb_wait: + pushl %eax +1: inb $0x64,%al + testb $0x02,%al + jne 1b + popl %eax + ret + + + + +reboot: + call kb_wait + movw $0x1234,0x472 + movb $0xfc,%al + outb %al,$0x64 +die: jmp die diff --git a/linux-0.11-lab/cur/linux/kernel/chr_drv/keyboard.S b/linux-0.11-lab/cur/linux/kernel/chr_drv/keyboard.S new file mode 100644 index 0000000..25210b4 --- /dev/null +++ b/linux-0.11-lab/cur/linux/kernel/chr_drv/keyboard.S @@ -0,0 +1,588 @@ +/* + * linux/kernel/keyboard.S + * + * (C) 1991 Linus Torvalds + */ + +/* + * Thanks to Alfred Leung for US keyboard patches + * Wolfgang Thiel for German keyboard patches + * Marc Corsini for the French keyboard + */ + +#include + +.text +.globl keyboard_interrupt + +/* + * these are for the keyboard read functions + */ +size = 1024 /* must be a power of two ! And MUST be the same + as in tty_io.c !!!! */ +head = 4 +tail = 8 +proc_list = 12 +buf = 16 + +mode: .byte 0 /* caps, alt, ctrl and shift mode */ +leds: .byte 2 /* num-lock, caps, scroll-lock mode (nom-lock on) */ +e0: .byte 0 + +/* + * con_int is the real interrupt routine that reads the + * keyboard scan-code and converts it into the appropriate + * ascii character(s). + */ +keyboard_interrupt: + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + push %ds + push %es + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + xor %al,%al /* %eax is scan code */ + inb $0x60,%al + cmpb $0xe0,%al + je set_e0 + cmpb $0xe1,%al + je set_e1 + call key_table(,%eax,4) + movb $0,e0 +e0_e1: inb $0x61,%al + jmp 1f +1: jmp 1f +1: orb $0x80,%al + jmp 1f +1: jmp 1f +1: outb %al,$0x61 + jmp 1f +1: jmp 1f +1: andb $0x7F,%al + outb %al,$0x61 + movb $0x20,%al + outb %al,$0x20 + pushl $0 + call do_tty_interrupt + addl $4,%esp + pop %es + pop %ds + popl %edx + popl %ecx + popl %ebx + popl %eax + iret +set_e0: movb $1,e0 + jmp e0_e1 +set_e1: movb $2,e0 + jmp e0_e1 + +/* + * This routine fills the buffer with max 8 bytes, taken from + * %ebx:%eax. (%edx is high). The bytes are written in the + * order %al,%ah,%eal,%eah,%bl,%bh ... until %eax is zero. + */ +put_queue: + pushl %ecx + pushl %edx + movl table_list,%edx # read-queue for console + movl head(%edx),%ecx +1: movb %al,buf(%edx,%ecx) + incl %ecx + andl $size-1,%ecx + cmpl tail(%edx),%ecx # buffer full - discard everything + je 3f + shrdl $8,%ebx,%eax + je 2f + shrl $8,%ebx + jmp 1b +2: movl %ecx,head(%edx) + movl proc_list(%edx),%ecx + testl %ecx,%ecx + je 3f + movl $0,(%ecx) +3: popl %edx + popl %ecx + ret + +ctrl: movb $0x04,%al + jmp 1f +alt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: orb %al,mode + ret +unctrl: movb $0x04,%al + jmp 1f +unalt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: notb %al + andb %al,mode + ret + +lshift: + orb $0x01,mode + ret +unlshift: + andb $0xfe,mode + ret +rshift: + orb $0x02,mode + ret +unrshift: + andb $0xfd,mode + ret + +caps: testb $0x80,mode + jne 1f + xorb $4,leds + xorb $0x40,mode + orb $0x80,mode +set_leds: + call kb_wait + movb $0xed,%al /* set leds command */ + outb %al,$0x60 + call kb_wait + movb leds,%al + outb %al,$0x60 + ret +uncaps: andb $0x7f,mode + ret +scroll: + xorb $1,leds + jmp set_leds +num: xorb $2,leds + jmp set_leds + +/* + * curosr-key/numeric keypad cursor keys are handled here. + * checking for numeric keypad etc. + */ +cursor: + subb $0x47,%al + jb 1f + cmpb $12,%al + ja 1f + jne cur2 /* check for ctrl-alt-del */ + testb $0x0c,mode + je cur2 + testb $0x30,mode + jne reboot +cur2: cmpb $0x01,e0 /* e0 forces cursor movement */ + je cur + testb $0x02,leds /* not num-lock forces cursor */ + je cur + testb $0x03,mode /* shift forces cursor */ + jne cur + xorl %ebx,%ebx + movb num_table(%eax),%al + jmp put_queue +1: ret + +cur: movb cur_table(%eax),%al + cmpb $'9,%al + ja ok_cur + movb $'~,%ah +ok_cur: shll $16,%eax + movw $0x5b1b,%ax + xorl %ebx,%ebx + jmp put_queue + +#if defined(KBD_FR) +num_table: + .ascii "789 456 1230." +#else +num_table: + .ascii "789 456 1230," +#endif +cur_table: + .ascii "HA5 DGC YB623" + +/* + * this routine handles function keys + */ +func: + pushl %eax + pushl %ecx + pushl %edx + call show_stat + popl %edx + popl %ecx + popl %eax + subb $0x3B,%al + jb end_func + cmpb $9,%al + jbe ok_func + subb $18,%al + cmpb $10,%al + jb end_func + cmpb $11,%al + ja end_func +ok_func: + cmpl $4,%ecx /* check that there is enough room */ + jl end_func + movl func_table(,%eax,4),%eax + xorl %ebx,%ebx + jmp put_queue +end_func: + ret + +/* + * function keys send F1:'esc [ [ A' F2:'esc [ [ B' etc. + */ +func_table: + .long 0x415b5b1b,0x425b5b1b,0x435b5b1b,0x445b5b1b + .long 0x455b5b1b,0x465b5b1b,0x475b5b1b,0x485b5b1b + .long 0x495b5b1b,0x4a5b5b1b,0x4b5b5b1b,0x4c5b5b1b + +#if defined(KBD_FINNISH) +key_map: + .byte 0,27 + .ascii "1234567890+'" + .byte 127,9 + .ascii "qwertyuiop}" + .byte 0,13,0 + .ascii "asdfghjkl|{" + .byte 0,0 + .ascii "'zxcvbnm,.-" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + +shift_map: + .byte 0,27 + .ascii "!\"#$%&/()=?`" + .byte 127,9 + .ascii "QWERTYUIOP]^" + .byte 13,0 + .ascii "ASDFGHJKL\\[" + .byte 0,0 + .ascii "*ZXCVBNM;:_" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + +#elif defined(KBD_US) + +key_map: + .byte 0,27 + .ascii "1234567890-=" + .byte 127,9 + .ascii "qwertyuiop[]" + .byte 13,0 + .ascii "asdfghjkl;'" + .byte '`,0 + .ascii "\\zxcvbnm,./" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + + +shift_map: + .byte 0,27 + .ascii "!@#$%^&*()_+" + .byte 127,9 + .ascii "QWERTYUIOP{}" + .byte 13,0 + .ascii "ASDFGHJKL:\"" + .byte '~,0 + .ascii "|ZXCVBNM<>?" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + +#elif defined(KBD_GR) + +key_map: + .byte 0,27 + .ascii "1234567890\\'" + .byte 127,9 + .ascii "qwertzuiop@+" + .byte 13,0 + .ascii "asdfghjkl[]^" + .byte 0,'# + .ascii "yxcvbnm,.-" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + + +shift_map: + .byte 0,27 + .ascii "!\"#$%&/()=?`" + .byte 127,9 + .ascii "QWERTZUIOP\\*" + .byte 13,0 + .ascii "ASDFGHJKL{}~" + .byte 0,'' + .ascii "YXCVBNM;:_" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte '@,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + + +#elif defined(KBD_FR) + +key_map: + .byte 0,27 + .ascii "&{\"'(-}_/@)=" + .byte 127,9 + .ascii "azertyuiop^$" + .byte 13,0 + .ascii "qsdfghjklm|" + .byte '`,0,42 /* coin sup gauche, don't know, [*|mu] */ + .ascii "wxcvbn,;:!" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + +shift_map: + .byte 0,27 + .ascii "1234567890]+" + .byte 127,9 + .ascii "AZERTYUIOP<>" + .byte 13,0 + .ascii "QSDFGHJKLM%" + .byte '~,0,'# + .ascii "WXCVBN?./\\" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0~#{[|`\\^@]}" + .byte 0,0 + .byte '@,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + +#else +#error "KBD-type not defined" +#endif +/* + * do_self handles "normal" keys, ie keys that don't change meaning + * and which have just one character returns. + */ +do_self: + lea alt_map,%ebx + testb $0x20,mode /* alt-gr */ + jne 1f + lea shift_map,%ebx + testb $0x03,mode + jne 1f + lea key_map,%ebx +1: movb (%ebx,%eax),%al + orb %al,%al + je none + testb $0x4c,mode /* ctrl or caps */ + je 2f + cmpb $'a,%al + jb 2f + cmpb $'},%al + ja 2f + subb $32,%al +2: testb $0x0c,mode /* ctrl */ + je 3f + cmpb $64,%al + jb 3f + cmpb $64+32,%al + jae 3f + subb $64,%al +3: testb $0x10,mode /* left alt */ + je 4f + orb $0x80,%al +4: andl $0xff,%eax + xorl %ebx,%ebx + call put_queue +none: ret + +/* + * minus has a routine of it's own, as a 'E0h' before + * the scan code for minus means that the numeric keypad + * slash was pushed. + */ +minus: cmpb $1,e0 + jne do_self + movl $'/,%eax + xorl %ebx,%ebx + jmp put_queue + +/* + * This table decides which routine to call when a scan-code has been + * gotten. Most routines just call do_self, or none, depending if + * they are make or break. + */ +key_table: + .long none,do_self,do_self,do_self /* 00-03 s0 esc 1 2 */ + .long do_self,do_self,do_self,do_self /* 04-07 3 4 5 6 */ + .long do_self,do_self,do_self,do_self /* 08-0B 7 8 9 0 */ + .long do_self,do_self,do_self,do_self /* 0C-0F + ' bs tab */ + .long do_self,do_self,do_self,do_self /* 10-13 q w e r */ + .long do_self,do_self,do_self,do_self /* 14-17 t y u i */ + .long do_self,do_self,do_self,do_self /* 18-1B o p } ^ */ + .long do_self,ctrl,do_self,do_self /* 1C-1F enter ctrl a s */ + .long do_self,do_self,do_self,do_self /* 20-23 d f g h */ + .long do_self,do_self,do_self,do_self /* 24-27 j k l | */ + .long do_self,do_self,lshift,do_self /* 28-2B { para lshift , */ + .long do_self,do_self,do_self,do_self /* 2C-2F z x c v */ + .long do_self,do_self,do_self,do_self /* 30-33 b n m , */ + .long do_self,minus,rshift,do_self /* 34-37 . - rshift * */ + .long alt,do_self,caps,func /* 38-3B alt sp caps f1 */ + .long func,func,func,func /* 3C-3F f2 f3 f4 f5 */ + .long func,func,func,func /* 40-43 f6 f7 f8 f9 */ + .long func,num,scroll,cursor /* 44-47 f10 num scr home */ + .long cursor,cursor,do_self,cursor /* 48-4B up pgup - left */ + .long cursor,cursor,do_self,cursor /* 4C-4F n5 right + end */ + .long cursor,cursor,cursor,cursor /* 50-53 dn pgdn ins del */ + .long none,none,do_self,func /* 54-57 sysreq ? < f11 */ + .long func,none,none,none /* 58-5B f12 ? ? ? */ + .long none,none,none,none /* 5C-5F ? ? ? ? */ + .long none,none,none,none /* 60-63 ? ? ? ? */ + .long none,none,none,none /* 64-67 ? ? ? ? */ + .long none,none,none,none /* 68-6B ? ? ? ? */ + .long none,none,none,none /* 6C-6F ? ? ? ? */ + .long none,none,none,none /* 70-73 ? ? ? ? */ + .long none,none,none,none /* 74-77 ? ? ? ? */ + .long none,none,none,none /* 78-7B ? ? ? ? */ + .long none,none,none,none /* 7C-7F ? ? ? ? */ + .long none,none,none,none /* 80-83 ? br br br */ + .long none,none,none,none /* 84-87 br br br br */ + .long none,none,none,none /* 88-8B br br br br */ + .long none,none,none,none /* 8C-8F br br br br */ + .long none,none,none,none /* 90-93 br br br br */ + .long none,none,none,none /* 94-97 br br br br */ + .long none,none,none,none /* 98-9B br br br br */ + .long none,unctrl,none,none /* 9C-9F br unctrl br br */ + .long none,none,none,none /* A0-A3 br br br br */ + .long none,none,none,none /* A4-A7 br br br br */ + .long none,none,unlshift,none /* A8-AB br br unlshift br */ + .long none,none,none,none /* AC-AF br br br br */ + .long none,none,none,none /* B0-B3 br br br br */ + .long none,none,unrshift,none /* B4-B7 br br unrshift br */ + .long unalt,none,uncaps,none /* B8-BB unalt br uncaps br */ + .long none,none,none,none /* BC-BF br br br br */ + .long none,none,none,none /* C0-C3 br br br br */ + .long none,none,none,none /* C4-C7 br br br br */ + .long none,none,none,none /* C8-CB br br br br */ + .long none,none,none,none /* CC-CF br br br br */ + .long none,none,none,none /* D0-D3 br br br br */ + .long none,none,none,none /* D4-D7 br br br br */ + .long none,none,none,none /* D8-DB br ? ? ? */ + .long none,none,none,none /* DC-DF ? ? ? ? */ + .long none,none,none,none /* E0-E3 e0 e1 ? ? */ + .long none,none,none,none /* E4-E7 ? ? ? ? */ + .long none,none,none,none /* E8-EB ? ? ? ? */ + .long none,none,none,none /* EC-EF ? ? ? ? */ + .long none,none,none,none /* F0-F3 ? ? ? ? */ + .long none,none,none,none /* F4-F7 ? ? ? ? */ + .long none,none,none,none /* F8-FB ? ? ? ? */ + .long none,none,none,none /* FC-FF ? ? ? ? */ + +/* + * kb_wait waits for the keyboard controller buffer to empty. + * there is no timeout - if the buffer doesn't empty, we hang. + */ +kb_wait: + pushl %eax +1: inb $0x64,%al + testb $0x02,%al + jne 1b + popl %eax + ret +/* + * This routine reboots the machine by asking the keyboard + * controller to pulse the reset-line low. + */ +reboot: + call kb_wait + movw $0x1234,0x472 /* don't do memory check */ + movb $0xfc,%al /* pulse reset and A20 low */ + outb %al,$0x64 +die: jmp die diff --git a/linux-0.11-lab/cur/linux/kernel/chr_drv/rs_io.o b/linux-0.11-lab/cur/linux/kernel/chr_drv/rs_io.o new file mode 100644 index 0000000000000000000000000000000000000000..9d7d5b3a22aa1a7d33dea95b723af176ee68e951 GIT binary patch literal 1320 zcma)5O=}ZT6upy7lN1_>vDAuUi$oC$(TZ-YF8rt{7SvR*(+bl`=7mYg$1w9^jTe}J1pL8J+VS-DUc@11#5ry}TuH|L!9&O7g8W*$#YU6UjU z!jd2kzZJlJAu zYUu}^X)*0615dy3#7CS5;3%o*n6o2-mX*|mBJ()SkJ>Kxy3mDOdS@N-cB{sLjja`nuw?{k1!T?BECWK1Ur++2eHxq=#!x{gli&& zBRH@@L{yj;>c8RMuaxqliKJ!!PW(mv0M`reH^_6neMo3eLAl-mBy=A^x!y36flz|$ z9Yaq056bmU5ZT?V>*Z0VgF%1b96oaqeG&Pkh$c>dL{JjkL^3ZF1^Vqn>-rt20MOw)mDl`5E4qoh_V zHiu%f3^vy+-ZaTqsdKQH=_9M_uuwBq{86e5Y7L#$RJ8J@4U1NVGqq%B7P>V(VAV>U z?KNO{nOQ2UnY@MR;}pv*t7+mQ_L+$Cmk2hbH&o7BkuiEb(opct5uPWFopkSn(*o}a PoD +#include +#include +#include + +#define WAKEUP_CHARS (TTY_BUF_SIZE/4) + +extern void rs1_interrupt(void); +extern void rs2_interrupt(void); + +static void init(int port) +{ + outb_p(0x80,port+3); /* set DLAB of line control reg */ + outb_p(0x30,port); /* LS of divisor (48 -> 2400 bps */ + outb_p(0x00,port+1); /* MS of divisor */ + outb_p(0x03,port+3); /* reset DLAB */ + outb_p(0x0b,port+4); /* set DTR,RTS, OUT_2 */ + outb_p(0x0d,port+1); /* enable all intrs but writes */ + (void)inb(port); /* read data port to reset things (?) */ +} + +void rs_init(void) +{ + set_intr_gate(0x24,rs1_interrupt); + set_intr_gate(0x23,rs2_interrupt); + init(tty_table[1].read_q.data); + init(tty_table[2].read_q.data); + outb(inb_p(0x21)&0xE7,0x21); +} + +/* + * This routine gets called when tty_write has put something into + * the write_queue. It must check wheter the queue is empty, and + * set the interrupt register accordingly + * + * void _rs_write(struct tty_struct * tty); + */ +void rs_write(struct tty_struct * tty) +{ + cli(); + if (!EMPTY(tty->write_q)) + outb(inb_p(tty->write_q.data+1)|0x02,tty->write_q.data+1); + sti(); +} diff --git a/linux-0.11-lab/cur/linux/kernel/chr_drv/serial.o b/linux-0.11-lab/cur/linux/kernel/chr_drv/serial.o new file mode 100644 index 0000000000000000000000000000000000000000..bf80e08be94a19c3982f10989e20a6e929a1d240 GIT binary patch literal 6752 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 +#include +#include + +#define ALRMMASK (1<<(SIGALRM-1)) +#define KILLMASK (1<<(SIGKILL-1)) +#define INTMASK (1<<(SIGINT-1)) +#define QUITMASK (1<<(SIGQUIT-1)) +#define TSTPMASK (1<<(SIGTSTP-1)) + +#include +#include +#include +#include + +#define _L_FLAG(tty,f) ((tty)->termios.c_lflag & f) +#define _I_FLAG(tty,f) ((tty)->termios.c_iflag & f) +#define _O_FLAG(tty,f) ((tty)->termios.c_oflag & f) + +#define L_CANON(tty) _L_FLAG((tty),ICANON) +#define L_ISIG(tty) _L_FLAG((tty),ISIG) +#define L_ECHO(tty) _L_FLAG((tty),ECHO) +#define L_ECHOE(tty) _L_FLAG((tty),ECHOE) +#define L_ECHOK(tty) _L_FLAG((tty),ECHOK) +#define L_ECHOCTL(tty) _L_FLAG((tty),ECHOCTL) +#define L_ECHOKE(tty) _L_FLAG((tty),ECHOKE) + +#define I_UCLC(tty) _I_FLAG((tty),IUCLC) +#define I_NLCR(tty) _I_FLAG((tty),INLCR) +#define I_CRNL(tty) _I_FLAG((tty),ICRNL) +#define I_NOCR(tty) _I_FLAG((tty),IGNCR) + +#define O_POST(tty) _O_FLAG((tty),OPOST) +#define O_NLCR(tty) _O_FLAG((tty),ONLCR) +#define O_CRNL(tty) _O_FLAG((tty),OCRNL) +#define O_NLRET(tty) _O_FLAG((tty),ONLRET) +#define O_LCUC(tty) _O_FLAG((tty),OLCUC) + +struct tty_struct tty_table[] = { + { + {ICRNL, /* change incoming CR to NL */ + OPOST|ONLCR, /* change outgoing NL to CRNL */ + 0, + ISIG | ICANON | ECHO | ECHOCTL | ECHOKE, + 0, /* console termio */ + INIT_C_CC}, + 0, /* initial pgrp */ + 0, /* initial stopped */ + con_write, + {0,0,0,0,""}, /* console read-queue */ + {0,0,0,0,""}, /* console write-queue */ + {0,0,0,0,""} /* console secondary queue */ + },{ + {0, /* no translation */ + 0, /* no translation */ + B2400 | CS8, + 0, + 0, + INIT_C_CC}, + 0, + 0, + rs_write, + {0x3f8,0,0,0,""}, /* rs 1 */ + {0x3f8,0,0,0,""}, + {0,0,0,0,""} + },{ + {0, /* no translation */ + 0, /* no translation */ + B2400 | CS8, + 0, + 0, + INIT_C_CC}, + 0, + 0, + rs_write, + {0x2f8,0,0,0,""}, /* rs 2 */ + {0x2f8,0,0,0,""}, + {0,0,0,0,""} + } +}; + +/* + * these are the tables used by the machine code handlers. + * you can implement pseudo-tty's or something by changing + * them. Currently not done. + */ +struct tty_queue * table_list[]={ + &tty_table[0].read_q, &tty_table[0].write_q, + &tty_table[1].read_q, &tty_table[1].write_q, + &tty_table[2].read_q, &tty_table[2].write_q + }; + +void tty_init(void) +{ + rs_init(); + con_init(); +} + +void tty_intr(struct tty_struct * tty, int mask) +{ + int i; + + if (tty->pgrp <= 0) + return; + for (i=0;ipgrp==tty->pgrp) + task[i]->signal |= mask; +} + +static void sleep_if_empty(struct tty_queue * queue) +{ + cli(); + while (!current->signal && EMPTY(*queue)) + interruptible_sleep_on(&queue->proc_list); + sti(); +} + +static void sleep_if_full(struct tty_queue * queue) +{ + if (!FULL(*queue)) + return; + cli(); + while (!current->signal && LEFT(*queue)<128) + interruptible_sleep_on(&queue->proc_list); + sti(); +} + +void wait_for_keypress(void) +{ + sleep_if_empty(&tty_table[0].secondary); +} + +void copy_to_cooked(struct tty_struct * tty) +{ + signed char c; + + while (!EMPTY(tty->read_q) && !FULL(tty->secondary)) { + GETCH(tty->read_q,c); + if (c==13) + if (I_CRNL(tty)) + c=10; + else if (I_NOCR(tty)) + continue; + else ; + else if (c==10 && I_NLCR(tty)) + c=13; + if (I_UCLC(tty)) + c=tolower(c); + if (L_CANON(tty)) { + if (c==KILL_CHAR(tty)) { + /* deal with killing the input line */ + while(!(EMPTY(tty->secondary) || + (c=LAST(tty->secondary))==10 || + c==EOF_CHAR(tty))) { + if (L_ECHO(tty)) { + if (c<32) + PUTCH(127,tty->write_q); + PUTCH(127,tty->write_q); + tty->write(tty); + } + DEC(tty->secondary.head); + } + continue; + } + if (c==ERASE_CHAR(tty)) { + if (EMPTY(tty->secondary) || + (c=LAST(tty->secondary))==10 || + c==EOF_CHAR(tty)) + continue; + if (L_ECHO(tty)) { + if (c<32) + PUTCH(127,tty->write_q); + PUTCH(127,tty->write_q); + tty->write(tty); + } + DEC(tty->secondary.head); + continue; + } + if (c==STOP_CHAR(tty)) { + tty->stopped=1; + continue; + } + if (c==START_CHAR(tty)) { + tty->stopped=0; + continue; + } + } + if (L_ISIG(tty)) { + if (c==INTR_CHAR(tty)) { + tty_intr(tty,INTMASK); + continue; + } + if (c==QUIT_CHAR(tty)) { + tty_intr(tty,QUITMASK); + continue; + } + } + if (c==10 || c==EOF_CHAR(tty)) + tty->secondary.data++; + if (L_ECHO(tty)) { + if (c==10) { + PUTCH(10,tty->write_q); + PUTCH(13,tty->write_q); + } else if (c<32) { + if (L_ECHOCTL(tty)) { + PUTCH('^',tty->write_q); + PUTCH(c+64,tty->write_q); + } + } else + PUTCH(c,tty->write_q); + tty->write(tty); + } + PUTCH(c,tty->secondary); + } + wake_up(&tty->secondary.proc_list); +} + +int tty_read(unsigned channel, char * buf, int nr) +{ + struct tty_struct * tty; + char c, * b=buf; + int minimum,time,flag=0; + long oldalarm; + + if (channel>2 || nr<0) return -1; + tty = &tty_table[channel]; + oldalarm = current->alarm; + time = 10L*tty->termios.c_cc[VTIME]; + minimum = tty->termios.c_cc[VMIN]; + if (time && !minimum) { + minimum=1; + if (flag=(!oldalarm || time+jiffiesalarm = time+jiffies; + } + if (minimum>nr) + minimum=nr; + while (nr>0) { + if (flag && (current->signal & ALRMMASK)) { + current->signal &= ~ALRMMASK; + break; + } + if (current->signal) + break; + if (EMPTY(tty->secondary) || (L_CANON(tty) && + !tty->secondary.data && LEFT(tty->secondary)>20)) { + sleep_if_empty(&tty->secondary); + continue; + } + do { + GETCH(tty->secondary,c); + if (c==EOF_CHAR(tty) || c==10) + tty->secondary.data--; + if (c==EOF_CHAR(tty) && L_CANON(tty)) + return (b-buf); + else { + put_fs_byte(c,b++); + if (!--nr) + break; + } + } while (nr>0 && !EMPTY(tty->secondary)); + if (time && !L_CANON(tty)) + if (flag=(!oldalarm || time+jiffiesalarm = time+jiffies; + else + current->alarm = oldalarm; + if (L_CANON(tty)) { + if (b-buf) + break; + } else if (b-buf >= minimum) + break; + } + current->alarm = oldalarm; + if (current->signal && !(b-buf)) + return -EINTR; + return (b-buf); +} + +int tty_write(unsigned channel, char * buf, int nr) +{ + static cr_flag=0; + struct tty_struct * tty; + char c, *b=buf; + + if (channel>2 || nr<0) return -1; + tty = channel + tty_table; + while (nr>0) { + sleep_if_full(&tty->write_q); + if (current->signal) + break; + while (nr>0 && !FULL(tty->write_q)) { + c=get_fs_byte(b); + if (O_POST(tty)) { + if (c=='\r' && O_CRNL(tty)) + c='\n'; + else if (c=='\n' && O_NLRET(tty)) + c='\r'; + if (c=='\n' && !cr_flag && O_NLCR(tty)) { + cr_flag = 1; + PUTCH(13,tty->write_q); + continue; + } + if (O_LCUC(tty)) + c=toupper(c); + } + b++; nr--; + cr_flag = 0; + PUTCH(c,tty->write_q); + } + tty->write(tty); + if (nr>0) + schedule(); + } + return (b-buf); +} + +/* + * Jeh, sometimes I really like the 386. + * This routine is called from an interrupt, + * and there should be absolutely no problem + * with sleeping even in an interrupt (I hope). + * Of course, if somebody proves me wrong, I'll + * hate intel for all time :-). We'll have to + * be careful and see to reinstating the interrupt + * chips before calling this, though. + * + * I don't think we sleep here under normal circumstances + * anyway, which is good, as the task sleeping might be + * totally innocent. + */ +void do_tty_interrupt(int tty) +{ + copy_to_cooked(tty_table+tty); +} + +void chr_dev_init(void) +{ +} diff --git a/linux-0.11-lab/cur/linux/kernel/chr_drv/tty_io.o b/linux-0.11-lab/cur/linux/kernel/chr_drv/tty_io.o new file mode 100644 index 0000000000000000000000000000000000000000..37e2b15961ebc5713d826d6c25e53571ac6fbb83 GIT binary patch literal 22504 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 O^kQA0pRj`M3jQCx0hyNo literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/kernel/chr_drv/tty_ioctl.c b/linux-0.11-lab/cur/linux/kernel/chr_drv/tty_ioctl.c new file mode 100644 index 0000000..e4e3745 --- /dev/null +++ b/linux-0.11-lab/cur/linux/kernel/chr_drv/tty_ioctl.c @@ -0,0 +1,204 @@ +/* + * linux/kernel/chr_drv/tty_ioctl.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include + +#include +#include +#include + +#include +#include +#include + +static unsigned short quotient[] = { + 0, 2304, 1536, 1047, 857, + 768, 576, 384, 192, 96, + 64, 48, 24, 12, 6, 3 +}; + +static void change_speed(struct tty_struct * tty) +{ + unsigned short port,quot; + + if (!(port = tty->read_q.data)) + return; + quot = quotient[tty->termios.c_cflag & CBAUD]; + cli(); + outb_p(0x80,port+3); /* set DLAB */ + outb_p(quot & 0xff,port); /* LS of divisor */ + outb_p(quot >> 8,port+1); /* MS of divisor */ + outb(0x03,port+3); /* reset DLAB */ + sti(); +} + +static void flush(struct tty_queue * queue) +{ + cli(); + queue->head = queue->tail; + sti(); +} + +static void wait_until_sent(struct tty_struct * tty) +{ + /* do nothing - not implemented */ +} + +static void send_break(struct tty_struct * tty) +{ + /* do nothing - not implemented */ +} + +static int get_termios(struct tty_struct * tty, struct termios * termios) +{ + int i; + + verify_area(termios, sizeof (*termios)); + for (i=0 ; i< (sizeof (*termios)) ; i++) + put_fs_byte( ((char *)&tty->termios)[i] , i+(char *)termios ); + return 0; +} + +static int set_termios(struct tty_struct * tty, struct termios * termios) +{ + int i; + + for (i=0 ; i< (sizeof (*termios)) ; i++) + ((char *)&tty->termios)[i]=get_fs_byte(i+(char *)termios); + change_speed(tty); + return 0; +} + +static int get_termio(struct tty_struct * tty, struct termio * termio) +{ + int i; + struct termio tmp_termio; + + verify_area(termio, sizeof (*termio)); + tmp_termio.c_iflag = tty->termios.c_iflag; + tmp_termio.c_oflag = tty->termios.c_oflag; + tmp_termio.c_cflag = tty->termios.c_cflag; + tmp_termio.c_lflag = tty->termios.c_lflag; + tmp_termio.c_line = tty->termios.c_line; + for(i=0 ; i < NCC ; i++) + tmp_termio.c_cc[i] = tty->termios.c_cc[i]; + for (i=0 ; i< (sizeof (*termio)) ; i++) + put_fs_byte( ((char *)&tmp_termio)[i] , i+(char *)termio ); + return 0; +} + +/* + * This only works as the 386 is low-byt-first + */ +static int set_termio(struct tty_struct * tty, struct termio * termio) +{ + int i; + struct termio tmp_termio; + + for (i=0 ; i< (sizeof (*termio)) ; i++) + ((char *)&tmp_termio)[i]=get_fs_byte(i+(char *)termio); + *(unsigned short *)&tty->termios.c_iflag = tmp_termio.c_iflag; + *(unsigned short *)&tty->termios.c_oflag = tmp_termio.c_oflag; + *(unsigned short *)&tty->termios.c_cflag = tmp_termio.c_cflag; + *(unsigned short *)&tty->termios.c_lflag = tmp_termio.c_lflag; + tty->termios.c_line = tmp_termio.c_line; + for(i=0 ; i < NCC ; i++) + tty->termios.c_cc[i] = tmp_termio.c_cc[i]; + change_speed(tty); + return 0; +} + +int tty_ioctl(int dev, int cmd, int arg) +{ + struct tty_struct * tty; + if (MAJOR(dev) == 5) { + dev=current->tty; + if (dev<0) + panic("tty_ioctl: dev<0"); + } else + dev=MINOR(dev); + tty = dev + tty_table; + switch (cmd) { + case TCGETS: + return get_termios(tty,(struct termios *) arg); + case TCSETSF: + flush(&tty->read_q); /* fallthrough */ + case TCSETSW: + wait_until_sent(tty); /* fallthrough */ + case TCSETS: + return set_termios(tty,(struct termios *) arg); + case TCGETA: + return get_termio(tty,(struct termio *) arg); + case TCSETAF: + flush(&tty->read_q); /* fallthrough */ + case TCSETAW: + wait_until_sent(tty); /* fallthrough */ + case TCSETA: + return set_termio(tty,(struct termio *) arg); + case TCSBRK: + if (!arg) { + wait_until_sent(tty); + send_break(tty); + } + return 0; + case TCXONC: + return -EINVAL; /* not implemented */ + case TCFLSH: + if (arg==0) + flush(&tty->read_q); + else if (arg==1) + flush(&tty->write_q); + else if (arg==2) { + flush(&tty->read_q); + flush(&tty->write_q); + } else + return -EINVAL; + return 0; + case TIOCEXCL: + return -EINVAL; /* not implemented */ + case TIOCNXCL: + return -EINVAL; /* not implemented */ + case TIOCSCTTY: + return -EINVAL; /* set controlling term NI */ + case TIOCGPGRP: + verify_area((void *) arg,4); + put_fs_long(tty->pgrp,(unsigned long *) arg); + return 0; + case TIOCSPGRP: + tty->pgrp=get_fs_long((unsigned long *) arg); + return 0; + case TIOCOUTQ: + verify_area((void *) arg,4); + put_fs_long(CHARS(tty->write_q),(unsigned long *) arg); + return 0; + case TIOCINQ: + verify_area((void *) arg,4); + put_fs_long(CHARS(tty->secondary), + (unsigned long *) arg); + return 0; + case TIOCSTI: + return -EINVAL; /* not implemented */ + case TIOCGWINSZ: + return -EINVAL; /* not implemented */ + case TIOCSWINSZ: + return -EINVAL; /* not implemented */ + case TIOCMGET: + return -EINVAL; /* not implemented */ + case TIOCMBIS: + return -EINVAL; /* not implemented */ + case TIOCMBIC: + return -EINVAL; /* not implemented */ + case TIOCMSET: + return -EINVAL; /* not implemented */ + case TIOCGSOFTCAR: + return -EINVAL; /* not implemented */ + case TIOCSSOFTCAR: + return -EINVAL; /* not implemented */ + default: + return -EINVAL; + } +} diff --git a/linux-0.11-lab/cur/linux/kernel/chr_drv/tty_ioctl.o b/linux-0.11-lab/cur/linux/kernel/chr_drv/tty_ioctl.o new file mode 100644 index 0000000000000000000000000000000000000000..6fcf766d95e129c53038533553e2124de8516b4b GIT binary patch literal 10648 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/kernel/exit.c b/linux-0.11-lab/cur/linux/kernel/exit.c new file mode 100644 index 0000000..2406ebe --- /dev/null +++ b/linux-0.11-lab/cur/linux/kernel/exit.c @@ -0,0 +1,197 @@ +/* + * linux/kernel/exit.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include +#include + +#include +#include +#include +#include + +int sys_pause(void); +int sys_close(int fd); + +void release(struct task_struct * p) +{ + int i; + + if (!p) + return; + for (i=1 ; i32) + return -EINVAL; + if (priv || (current->euid==p->euid) || suser()) + p->signal |= (1<<(sig-1)); + else + return -EPERM; + return 0; +} + +static void kill_session(void) +{ + struct task_struct **p = NR_TASKS + task; + + while (--p > &FIRST_TASK) { + if (*p && (*p)->session == current->session) + (*p)->signal |= 1<<(SIGHUP-1); + } +} + +/* + * XXX need to check permissions needed to send signals to process + * groups, etc. etc. kill() permissions semantics are tricky! + */ +int sys_kill(int pid,int sig) +{ + struct task_struct **p = NR_TASKS + task; + int err, retval = 0; + + if (!pid) while (--p > &FIRST_TASK) { + if (*p && (*p)->pgrp == current->pid) + if (err=send_sig(sig,*p,1)) + retval = err; + } else if (pid>0) while (--p > &FIRST_TASK) { + if (*p && (*p)->pid == pid) + if (err=send_sig(sig,*p,0)) + retval = err; + } else if (pid == -1) while (--p > &FIRST_TASK) + if (err = send_sig(sig,*p,0)) + retval = err; + else while (--p > &FIRST_TASK) + if (*p && (*p)->pgrp == -pid) + if (err = send_sig(sig,*p,0)) + retval = err; + return retval; +} + +static void tell_father(int pid) +{ + int i; + + if (pid) + for (i=0;ipid != pid) + continue; + task[i]->signal |= (1<<(SIGCHLD-1)); + return; + } +/* if we don't find any fathers, we just release ourselves */ +/* This is not really OK. Must change it to make father 1 */ + printk("BAD BAD - no father found\n\r"); + release(current); +} + +int do_exit(long code) +{ + int i; + + free_page_tables(get_base(current->ldt[1]),get_limit(0x0f)); + free_page_tables(get_base(current->ldt[2]),get_limit(0x17)); + for (i=0 ; ifather == current->pid) { + task[i]->father = 1; + if (task[i]->state == TASK_ZOMBIE) + /* assumption task[1] is always init */ + (void) send_sig(SIGCHLD, task[1], 1); + } + for (i=0 ; ifilp[i]) + sys_close(i); + iput(current->pwd); + current->pwd=NULL; + iput(current->root); + current->root=NULL; + iput(current->executable); + current->executable=NULL; + if (current->leader && current->tty >= 0) + tty_table[current->tty].pgrp = 0; + if (last_task_used_math == current) + last_task_used_math = NULL; + if (current->leader) + kill_session(); + current->state = TASK_ZOMBIE; + current->exit_code = code; + tell_father(current->father); + schedule(); + return (-1); /* just to suppress warnings */ +} + +int sys_exit(int error_code) +{ + return do_exit((error_code&0xff)<<8); +} + +int sys_waitpid(pid_t pid,unsigned long * stat_addr, int options) +{ + int flag, code; + struct task_struct ** p; + + verify_area(stat_addr,4); +repeat: + flag=0; + for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) { + if (!*p || *p == current) + continue; + if ((*p)->father != current->pid) + continue; + if (pid>0) { + if ((*p)->pid != pid) + continue; + } else if (!pid) { + if ((*p)->pgrp != current->pgrp) + continue; + } else if (pid != -1) { + if ((*p)->pgrp != -pid) + continue; + } + switch ((*p)->state) { + case TASK_STOPPED: + if (!(options & WUNTRACED)) + continue; + put_fs_long(0x7f,stat_addr); + return (*p)->pid; + case TASK_ZOMBIE: + current->cutime += (*p)->utime; + current->cstime += (*p)->stime; + flag = (*p)->pid; + code = (*p)->exit_code; + release(*p); + put_fs_long(code,stat_addr); + return flag; + default: + flag=1; + continue; + } + } + if (flag) { + if (options & WNOHANG) + return 0; + current->state=TASK_INTERRUPTIBLE; + schedule(); + if (!(current->signal &= ~(1<<(SIGCHLD-1)))) + goto repeat; + else + return -EINTR; + } + return -ECHILD; +} + + diff --git a/linux-0.11-lab/cur/linux/kernel/exit.o b/linux-0.11-lab/cur/linux/kernel/exit.o new file mode 100644 index 0000000000000000000000000000000000000000..97c5057fd4da000378b2c23ca0dba2b274e9b855 GIT binary patch literal 11164 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 + +#include +#include +#include +#include + +extern void write_verify(unsigned long address); + +long last_pid=0; + +void verify_area(void * addr,int size) +{ + unsigned long start; + + start = (unsigned long) addr; + size += start & 0xfff; + start &= 0xfffff000; + start += get_base(current->ldt[2]); + while (size>0) { + size -= 4096; + write_verify(start); + start += 4096; + } +} + +int copy_mem(int nr,struct task_struct * p) +{ + unsigned long old_data_base,new_data_base,data_limit; + unsigned long old_code_base,new_code_base,code_limit; + + code_limit=get_limit(0x0f); + data_limit=get_limit(0x17); + old_code_base = get_base(current->ldt[1]); + old_data_base = get_base(current->ldt[2]); + if (old_data_base != old_code_base) + panic("We don't support separate I&D"); + if (data_limit < code_limit) + panic("Bad data_limit"); + new_data_base = new_code_base = nr * 0x4000000; + p->start_code = new_code_base; + set_base(p->ldt[1],new_code_base); + set_base(p->ldt[2],new_data_base); + if (copy_page_tables(old_data_base,new_data_base,data_limit)) { + free_page_tables(new_data_base,data_limit); + return -ENOMEM; + } + return 0; +} + +/* + * Ok, this is the main fork-routine. It copies the system process + * information (task[nr]) and sets up the necessary registers. It + * also copies the data segment in it's entirety. + */ +int copy_process(int nr,long ebp,long edi,long esi,long gs,long none, + long ebx,long ecx,long edx, + long fs,long es,long ds, + long eip,long cs,long eflags,long esp,long ss) +{ + struct task_struct *p; + int i; + struct file *f; + + p = (struct task_struct *) get_free_page(); + if (!p) + return -EAGAIN; + task[nr] = p; + __asm__ volatile ("cld"); /* by wyj */ + *p = *current; /* NOTE! this doesn't copy the supervisor stack */ + p->state = TASK_UNINTERRUPTIBLE; + p->pid = last_pid; + p->father = current->pid; + p->counter = p->priority; + p->signal = 0; + p->alarm = 0; + p->leader = 0; /* process leadership doesn't inherit */ + p->utime = p->stime = 0; + p->cutime = p->cstime = 0; + p->start_time = jiffies; + p->tss.back_link = 0; + p->tss.esp0 = PAGE_SIZE + (long) p; + p->tss.ss0 = 0x10; + p->tss.eip = eip; + p->tss.eflags = eflags; + p->tss.eax = 0; + p->tss.ecx = ecx; + p->tss.edx = edx; + p->tss.ebx = ebx; + p->tss.esp = esp; + p->tss.ebp = ebp; + p->tss.esi = esi; + p->tss.edi = edi; + p->tss.es = es & 0xffff; + p->tss.cs = cs & 0xffff; + p->tss.ss = ss & 0xffff; + p->tss.ds = ds & 0xffff; + p->tss.fs = fs & 0xffff; + p->tss.gs = gs & 0xffff; + p->tss.ldt = _LDT(nr); + p->tss.trace_bitmap = 0x80000000; + if (last_task_used_math == current) + __asm__("clts ; fnsave %0"::"m" (p->tss.i387)); + if (copy_mem(nr,p)) { + task[nr] = NULL; + free_page((long) p); + return -EAGAIN; + } + for (i=0; ifilp[i]) + f->f_count++; + if (current->pwd) + current->pwd->i_count++; + if (current->root) + current->root->i_count++; + if (current->executable) + current->executable->i_count++; + set_tss_desc(gdt+(nr<<1)+FIRST_TSS_ENTRY,&(p->tss)); + set_ldt_desc(gdt+(nr<<1)+FIRST_LDT_ENTRY,&(p->ldt)); + p->state = TASK_RUNNING; /* do this last, just in case */ + return last_pid; +} + +int find_empty_process(void) +{ + int i; + + repeat: + if ((++last_pid)<0) last_pid=1; + for(i=0 ; ipid == last_pid) goto repeat; + for(i=1 ; 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/kernel/math/Makefile b/linux-0.11-lab/cur/linux/kernel/math/Makefile new file mode 100644 index 0000000..b35d488 --- /dev/null +++ b/linux-0.11-lab/cur/linux/kernel/math/Makefile @@ -0,0 +1,43 @@ +# +# Makefile for the FREAX-kernel character device drivers. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). +# + +AR =ar +AS =as +LD =ld +LDFLAGS =-s -x +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -nostdinc -fno-stack-protector -I../../include +CPP =gcc -E -nostdinc -I../../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< + +OBJS = math_emulate.o + +math.a: $(OBJS) + $(AR) rcs math.a $(OBJS) + sync + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: diff --git a/linux-0.11-lab/cur/linux/kernel/math/math.a b/linux-0.11-lab/cur/linux/kernel/math/math.a new file mode 100644 index 0000000000000000000000000000000000000000..f92fb43a9c019f8e75bf744c65f88b59c8d4ba88 GIT binary patch literal 6628 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 + +#include +#include +#include + +void math_emulate(long edi, long esi, long ebp, long sys_call_ret, + long eax,long ebx,long ecx,long edx, + unsigned short fs,unsigned short es,unsigned short ds, + unsigned long eip,unsigned short cs,unsigned long eflags, + unsigned short ss, unsigned long esp) +{ + unsigned char first, second; + +/* 0x0007 means user code space */ + if (cs != 0x000F) { + printk("math_emulate: %04x:%08x\n\r",cs,eip); + panic("Math emulation needed in kernel"); + } + first = get_fs_byte((char *)((*&eip)++)); + second = get_fs_byte((char *)((*&eip)++)); + printk("%04x:%08x %02x %02x\n\r",cs,eip-2,first,second); + current->signal |= 1<<(SIGFPE-1); +} + +void math_error(void) +{ + __asm__("fnclex"); + if (last_task_used_math) + last_task_used_math->signal |= 1<<(SIGFPE-1); +} diff --git a/linux-0.11-lab/cur/linux/kernel/math/math_emulate.o b/linux-0.11-lab/cur/linux/kernel/math/math_emulate.o new file mode 100644 index 0000000000000000000000000000000000000000..8a98b22720edd26bc9b196e2d1b86549665ddef0 GIT binary patch literal 6464 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 + +/* + * This isn't the library routine, it is only used in the kernel. + * as such, we don't care about years<1970 etc, but assume everything + * is ok. Similarly, TZ etc is happily ignored. We just do everything + * as easily as possible. Let's find something public for the library + * routines (although I think minix times is public). + */ +/* + * PS. I hate whoever though up the year 1970 - couldn't they have gotten + * a leap-year instead? I also hate Gregorius, pope or no. I'm grumpy. + */ +#define MINUTE 60 +#define HOUR (60*MINUTE) +#define DAY (24*HOUR) +#define YEAR (365*DAY) + +/* interestingly, we assume leap-years */ +static int month[12] = { + 0, + DAY*(31), + DAY*(31+29), + DAY*(31+29+31), + DAY*(31+29+31+30), + DAY*(31+29+31+30+31), + DAY*(31+29+31+30+31+30), + DAY*(31+29+31+30+31+30+31), + DAY*(31+29+31+30+31+30+31+31), + DAY*(31+29+31+30+31+30+31+31+30), + DAY*(31+29+31+30+31+30+31+31+30+31), + DAY*(31+29+31+30+31+30+31+31+30+31+30) +}; + +long kernel_mktime(struct tm * tm) +{ + long res; + int year; + if (tm->tm_year < 70 ) tm->tm_year += 100; /* gohigh */ + year = tm->tm_year - 70; +/* magic offsets (y+1) needed to get leapyears right.*/ + res = YEAR*year + DAY*((year+1)/4); + res += month[tm->tm_mon]; +/* and (y+2) here. If it wasn't a leap-year, we have to adjust */ + if (tm->tm_mon>1 && ((year+2)%4)) + res -= DAY; + res += DAY*(tm->tm_mday-1); + res += HOUR*tm->tm_hour; + res += MINUTE*tm->tm_min; + res += tm->tm_sec; + return res; +} diff --git a/linux-0.11-lab/cur/linux/kernel/mktime.o b/linux-0.11-lab/cur/linux/kernel/mktime.o new file mode 100644 index 0000000000000000000000000000000000000000..6694bf8258168567f68b2aba8bfc5ed630e30698 GIT binary patch literal 2872 zcma)8U1%It6h3!mHraGH+f8=c=BL9R=z+QC zJLlZh2X+aMEv_t>trhe7 zs=+FMvsh7H_c`1WH#v6H&lF#_7Ezv9*R)o}g{=tMS}|I;&BYZj{7N|;Z9Xl?_laJb zy7!+sbi64(04lkZ^z#JEw@~X^<|*sGoj9@%qYI3-zKwt5w^gpqUj~T!PEd383^f<8 z5*2O|-T9N6-}eamWL(gJl4$n6A(|h2E>b)kOL|%2Nt}5PFW*T8(P1??!wQYF%COpD zFue+;jqZ;aTKk|*0Ft#II4RZEhrnBa!&WCpF}4Cntxo8-0mrQn^gX~ys}K5K;2vui za3An?3&%40fm0N+LM7Luwrebj!QH%qP@{PFZ$|B0mly;xE>pPX)Jg2cF5~jqj<1=E zhY-iO?9nD!cLZXD-J@6{INm?3=}2O4-(6lqCNC^>iQTb8#EkXFxcneQzY^j ztGFErVTL1-{gDF^k>ECTk{N?AnHY_52(>Xx)Mkr=y}s?i-pK?)jrF|qcrU!#Lu7`1 zFQbQ>HnKtNU{S?{b<<`}KFMAYAtn=WkM5+&M3&Rhc76;Lt)>d3#|T{J#~|E3A@0UH zd6kzHO|T+#TCCnYx$DpU%wJs-Bbgsx@RQRvR@s?bKYSJna`l3rj$BF>73&&%scXkDpCbUrK1xQ`%?p_ zW*V;7@Q;*vxFMzC3&SJ!(8!>#<*R`SFo|;~Nt_Rh{-|ZW&eP)8K+YOAIp2v`(i|5t zd6(__LdDC?kX`p`J}+uibIP{oob|{qJbHHN9lg{A-$Y1?s@gL!-S zBN1mE^5T3tFW>nM@!sQj^Q_aP`$J4UrLA^zH?rA;v#(!9l zgBc)OgxP>F5Bw(!k}2Q7b&W~#cYaM_$_cND?5(5uI+LR7MnXh#w zG`P#%nAqCq-~V;k_#GyCi}wmH8{YxJ+xEdL7= CPoF&i literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/kernel/panic.c b/linux-0.11-lab/cur/linux/kernel/panic.c new file mode 100644 index 0000000..7d8a06b --- /dev/null +++ b/linux-0.11-lab/cur/linux/kernel/panic.c @@ -0,0 +1,24 @@ +/* + * linux/kernel/panic.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This function is used through-out the kernel (includeinh mm and fs) + * to indicate a major problem. + */ +#include +#include + +void sys_sync(void); /* it's really int */ + +volatile void panic(const char * s) +{ + printk("Kernel panic: %s\n\r",s); + if (current == task[0]) + printk("In swapper task - not syncing\n\r"); + else + sys_sync(); + for(;;); +} diff --git a/linux-0.11-lab/cur/linux/kernel/panic.o b/linux-0.11-lab/cur/linux/kernel/panic.o new file mode 100644 index 0000000000000000000000000000000000000000..da42b57864ffc04172b2020b3f3f9096af53eb86 GIT binary patch literal 5424 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 D&gTd! literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/kernel/printk.c b/linux-0.11-lab/cur/linux/kernel/printk.c new file mode 100644 index 0000000..0daa097 --- /dev/null +++ b/linux-0.11-lab/cur/linux/kernel/printk.c @@ -0,0 +1,41 @@ +/* + * linux/kernel/printk.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * When in kernel-mode, we cannot use printf, as fs is liable to + * point to 'interesting' things. Make a printf with fs-saving, and + * all is well. + */ +#include +#include + +#include + +static char buf[1024]; + +extern int vsprintf(char * buf, const char * fmt, va_list args); + +int printk(const char *fmt, ...) +{ + va_list args; + int i; + + va_start(args, fmt); + i=vsprintf(buf,fmt,args); + va_end(args); + __asm__("push %%fs\n\t" + "push %%ds\n\t" + "pop %%fs\n\t" + "pushl %0\n\t" + "pushl $buf\n\t" + "pushl $0\n\t" + "call tty_write\n\t" + "addl $8,%%esp\n\t" + "popl %0\n\t" + "pop %%fs" + ::"r" (i):"ax","cx","dx"); + return i; +} diff --git a/linux-0.11-lab/cur/linux/kernel/printk.o b/linux-0.11-lab/cur/linux/kernel/printk.o new file mode 100644 index 0000000000000000000000000000000000000000..93ce6e40ca451b8b2b024367e2fd7f575b694368 GIT binary patch literal 2424 zcma)7&2Jk;6o2DgCr+F=bwa44L}e?vC4jtkz$&FcNl74zT1BEwQKbUW+Fsk+*lV-9 zPLry@Ap#ObAoTzO!66j~E?kfhSCAS$gv5Ou_hxtEEfNw>nt8wXJ@aOE z_N^B#y(okrMS?WyOGHgQw3H>Ar3WZWSGNC{eQz;e-d)Vk>@DU?d#m}G-PL>wvi^gf zXV2gNK0G{xoZEXPpBvjhF?RP#ll3=3%l1L)`q*8>=C%)Juisi90ly z>aykdDJiyw91=P9O5ADEu%2|>07X85BF&XXc={4!l&3=tH3#1S8mjc_B(nQ}NevS+ zX2q$@L|V&CXR=~^;Mj4be2}!vx%AWNhz0-DrLfy04cA?ur zdfS82aa)dS7wSE?8aN%-hsx~~{J^TN7rI_2u&Y7GqgKal7(Lf_8m?V4_zbZkpEj(u zmg5KHJGbm$t7}uS*=gHFw^s{_9lzk(H;c&L+bopKxw%5isuWA1qPT8*uH6dra=N4a zR-2X=NkmHv3+Ig4tCgM`^uoOr9`8wM?#;QfSt>sgY6;&}NaEII61P)gdPLWE&{P9z zJ`yH*3>Pw~?ZiT+l(?8lUAUK#--hXLwF9d{rXP4AZz|;3Eiec z$O^M5i?7IF5RtO2K#teF2H_ZVT$lH!>e|3629V~E?;3-Ml+A)1&)0;&c{txNhRXLk zFvsw|nRb!ymk`RCZ9HyAT=~6`G|KE@(H-d7eQUg`kCXV589b>lVJwlj!6Ly5PP@Nmnz+;^@S&-W3E%tEI~ z@kn{1j;@ME+C(083(}ch`{!E#R3zOA&vW cIpTsy{wm_%F-Lt_7ZcwB_FIU!0iJ;T4?BzyrvLx| literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/kernel/sched.c b/linux-0.11-lab/cur/linux/kernel/sched.c new file mode 100644 index 0000000..a03c953 --- /dev/null +++ b/linux-0.11-lab/cur/linux/kernel/sched.c @@ -0,0 +1,418 @@ +/* + * linux/kernel/sched.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * 'sched.c' is the main kernel file. It contains scheduling primitives + * (sleep_on, wakeup, schedule etc) as well as a number of simple system + * call functions (type getpid(), which just extracts a field from + * current-task + */ +#include +#include +#include +#include +#include +#include +#include + +#include + +#define _S(nr) (1<<((nr)-1)) +#define _BLOCKABLE (~(_S(SIGKILL) | _S(SIGSTOP))) + +void show_task(int nr,struct task_struct * p) +{ + int i,j = 4096-sizeof(struct task_struct); + + printk("%d: pid=%d, state=%d, ",nr,p->pid,p->state); + i=0; + while (i>2 ] ; + +struct { + long * a; + short b; + } stack_start = { & user_stack [PAGE_SIZE>>2] , 0x10 }; +/* + * 'math_state_restore()' saves the current math information in the + * old math state array, and gets the new ones from the current task + */ +void math_state_restore() +{ + if (last_task_used_math == current) + return; + __asm__("fwait"); + if (last_task_used_math) { + __asm__("fnsave %0"::"m" (last_task_used_math->tss.i387)); + } + last_task_used_math=current; + if (current->used_math) { + __asm__("frstor %0"::"m" (current->tss.i387)); + } else { + __asm__("fninit"::); + current->used_math=1; + } +} + +/* + * 'schedule()' is the scheduler function. This is GOOD CODE! There + * probably won't be any reason to change this, as it should work well + * in all circumstances (ie gives IO-bound processes good response etc). + * The one thing you might take a look at is the signal-handler code here. + * + * NOTE!! Task 0 is the 'idle' task, which gets called when no other + * tasks can run. It can not be killed, and it cannot sleep. The 'state' + * information in task[0] is never used. + */ +void schedule(void) +{ + int i,next,c; + struct task_struct ** p; + +/* check alarm, wake up any interruptible tasks that have got a signal */ + + for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) + if (*p) { + if ((*p)->alarm && (*p)->alarm < jiffies) { + (*p)->signal |= (1<<(SIGALRM-1)); + (*p)->alarm = 0; + } + if (((*p)->signal & ~(_BLOCKABLE & (*p)->blocked)) && + (*p)->state==TASK_INTERRUPTIBLE) + (*p)->state=TASK_RUNNING; + } + +/* this is the scheduler proper: */ + + while (1) { + c = -1; + next = 0; + i = NR_TASKS; + p = &task[NR_TASKS]; + while (--i) { + if (!*--p) + continue; + if ((*p)->state == TASK_RUNNING && (*p)->counter > c) + c = (*p)->counter, next = i; + } + if (c) break; + for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) + if (*p) + (*p)->counter = ((*p)->counter >> 1) + + (*p)->priority; + } + switch_to(next); +} + +int sys_pause(void) +{ + current->state = TASK_INTERRUPTIBLE; + schedule(); + return 0; +} + +void sleep_on(struct task_struct **p) +{ + struct task_struct *tmp; + + if (!p) + return; + if (current == &(init_task.task)) + panic("task[0] trying to sleep"); + tmp = *p; + *p = current; + current->state = TASK_UNINTERRUPTIBLE; + schedule(); + if (tmp) + tmp->state=0; +} + +void interruptible_sleep_on(struct task_struct **p) +{ + struct task_struct *tmp; + + if (!p) + return; + if (current == &(init_task.task)) + panic("task[0] trying to sleep"); + tmp=*p; + *p=current; +repeat: current->state = TASK_INTERRUPTIBLE; + schedule(); + if (*p && *p != current) { + (**p).state=0; + goto repeat; + } + *p=NULL; + if (tmp) + tmp->state=0; +} + +void wake_up(struct task_struct **p) +{ + if (p && *p) { + (**p).state=0; + *p=NULL; + } +} + +/* + * OK, here are some floppy things that shouldn't be in the kernel + * proper. They are here because the floppy needs a timer, and this + * was the easiest way of doing it. + */ +static struct task_struct * wait_motor[4] = {NULL,NULL,NULL,NULL}; +static int mon_timer[4]={0,0,0,0}; +static int moff_timer[4]={0,0,0,0}; +unsigned char current_DOR = 0x0C; + +int ticks_to_floppy_on(unsigned int nr) +{ + extern unsigned char selected; + unsigned char mask = 0x10 << nr; + + if (nr>3) + panic("floppy_on: nr>3"); + moff_timer[nr]=10000; /* 100 s = very big :-) */ + cli(); /* use floppy_off to turn it off */ + mask |= current_DOR; + if (!selected) { + mask &= 0xFC; + mask |= nr; + } + if (mask != current_DOR) { + outb(mask,FD_DOR); + if ((mask ^ current_DOR) & 0xf0) + mon_timer[nr] = HZ/2; + else if (mon_timer[nr] < 2) + mon_timer[nr] = 2; + current_DOR = mask; + } + sti(); + return mon_timer[nr]; +} + +void floppy_on(unsigned int nr) +{ + cli(); + while (ticks_to_floppy_on(nr)) + sleep_on(nr+wait_motor); + sti(); +} + +void floppy_off(unsigned int nr) +{ + moff_timer[nr]=3*HZ; +} + +void do_floppy_timer(void) +{ + int i; + unsigned char mask = 0x10; + + for (i=0 ; i<4 ; i++,mask <<= 1) { + if (!(mask & current_DOR)) + continue; + if (mon_timer[i]) { + if (!--mon_timer[i]) + wake_up(i+wait_motor); + } else if (!moff_timer[i]) { + current_DOR &= ~mask; + outb(current_DOR,FD_DOR); + } else + moff_timer[i]--; + } +} + +#define TIME_REQUESTS 64 + +static struct timer_list { + long jiffies; + void (*fn)(); + struct timer_list * next; +} timer_list[TIME_REQUESTS], * next_timer = NULL; + +void add_timer(long jiffies, void (*fn)(void)) +{ + struct timer_list * p; + + if (!fn) + return; + cli(); + if (jiffies <= 0) + (fn)(); + else { + for (p = timer_list ; p < timer_list + TIME_REQUESTS ; p++) + if (!p->fn) + break; + if (p >= timer_list + TIME_REQUESTS) + panic("No more time requests free"); + p->fn = fn; + p->jiffies = jiffies; + p->next = next_timer; + next_timer = p; + while (p->next && p->next->jiffies < p->jiffies) { + p->jiffies -= p->next->jiffies; + fn = p->fn; + p->fn = p->next->fn; + p->next->fn = fn; + jiffies = p->jiffies; + p->jiffies = p->next->jiffies; + p->next->jiffies = jiffies; + p = p->next; + } + } + sti(); +} + +void do_timer(long cpl) +{ + extern int beepcount; + extern void sysbeepstop(void); + + if (beepcount) + if (!--beepcount) + sysbeepstop(); + + if (cpl) + current->utime++; + else + current->stime++; + + if (next_timer) { + next_timer->jiffies--; + while (next_timer && next_timer->jiffies <= 0) { + void (*fn)(void); + + fn = next_timer->fn; + next_timer->fn = NULL; + next_timer = next_timer->next; + (fn)(); + } + } + if (current_DOR & 0xf0) + do_floppy_timer(); + if ((--current->counter)>0) return; + current->counter=0; + if (!cpl) return; + schedule(); +} + +int sys_alarm(long seconds) +{ + int old = current->alarm; + + if (old) + old = (old - jiffies) / HZ; + current->alarm = (seconds>0)?(jiffies+HZ*seconds):0; + return (old); +} + +int sys_getpid(void) +{ + return current->pid; +} + +int sys_getppid(void) +{ + return current->father; +} + +int sys_getuid(void) +{ + return current->uid; +} + +int sys_geteuid(void) +{ + return current->euid; +} + +int sys_getgid(void) +{ + return current->gid; +} + +int sys_getegid(void) +{ + return current->egid; +} + +int sys_nice(long increment) +{ + if (current->priority-increment>0) + current->priority -= increment; + return 0; +} + +void sched_init(void) +{ + int i; + struct desc_struct * p; + + if (sizeof(struct sigaction) != 16) + panic("Struct sigaction MUST be 16 bytes"); + set_tss_desc(gdt+FIRST_TSS_ENTRY,&(init_task.task.tss)); + set_ldt_desc(gdt+FIRST_LDT_ENTRY,&(init_task.task.ldt)); + p = gdt+2+FIRST_TSS_ENTRY; + for(i=1;ia=p->b=0; + p++; + p->a=p->b=0; + p++; + } +/* Clear NT, so that we won't have troubles with that later on */ + __asm__("pushfl ; andl $0xffffbfff,(%esp) ; popfl"); + ltr(0); + lldt(0); + outb_p(0x36,0x43); /* binary, mode 3, LSB/MSB, ch 0 */ + outb_p(LATCH & 0xff , 0x40); /* LSB */ + outb(LATCH >> 8 , 0x40); /* MSB */ + set_intr_gate(0x20,&timer_interrupt); + outb(inb_p(0x21)&~0x01,0x21); + set_system_gate(0x80,&system_call); +} +int sys_sleep(unsigned int seconds){ + sys_signal(SIGALRM, SIG_IGN); + sys_alarm(seconds); + sys_pause(); + return 0; +} \ No newline at end of file diff --git a/linux-0.11-lab/cur/linux/kernel/sched.o b/linux-0.11-lab/cur/linux/kernel/sched.o new file mode 100644 index 0000000000000000000000000000000000000000..fe016fcc0b7c7670f9d7370abafb7b2f7c8870e9 GIT binary patch literal 23272 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 Qf^P|aEXeaU>n|4kKW&-Du>b%7 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/kernel/signal.c b/linux-0.11-lab/cur/linux/kernel/signal.c new file mode 100644 index 0000000..8d5a65f --- /dev/null +++ b/linux-0.11-lab/cur/linux/kernel/signal.c @@ -0,0 +1,129 @@ +/* + * linux/kernel/signal.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include +#include +#include +#include + +volatile void do_exit(int error_code); + +int sys_sgetmask() +{ + return current->blocked; +} + +int sys_ssetmask(int newmask) +{ + int old=current->blocked; + + current->blocked = newmask & ~(1<<(SIGKILL-1)); + return old; +} + +int sys_sigpending() +{ + return -ENOSYS; +} + +int sys_sigsuspend() +{ + return -ENOSYS; +} + +static inline void save_old(char * from,char * to) +{ + int i; + + verify_area(to, sizeof(struct sigaction)); + for (i=0 ; i< sizeof(struct sigaction) ; i++) { + put_fs_byte(*from,to); + from++; + to++; + } +} + +static inline void get_new(char * from,char * to) +{ + int i; + + for (i=0 ; i< sizeof(struct sigaction) ; i++) + *(to++) = get_fs_byte(from++); +} + +int sys_signal(int signum, long handler, long restorer) +{ + struct sigaction tmp; + + if (signum<1 || signum>32 || signum==SIGKILL) + return -1; + tmp.sa_handler = (void (*)(int)) handler; + tmp.sa_mask = 0; + tmp.sa_flags = SA_ONESHOT | SA_NOMASK; + tmp.sa_restorer = (void (*)(void)) restorer; + handler = (long) current->sigaction[signum-1].sa_handler; + current->sigaction[signum-1] = tmp; + return handler; +} + +int sys_sigaction(int signum, const struct sigaction * action, + struct sigaction * oldaction) +{ + struct sigaction tmp; + + if (signum<1 || signum>32 || signum==SIGKILL) + return -1; + tmp = current->sigaction[signum-1]; + get_new((char *) action, + (char *) (signum-1+current->sigaction)); + if (oldaction) + save_old((char *) &tmp,(char *) oldaction); + if (current->sigaction[signum-1].sa_flags & SA_NOMASK) + current->sigaction[signum-1].sa_mask = 0; + else + current->sigaction[signum-1].sa_mask |= (1<<(signum-1)); + return 0; +} + +void do_signal(long signr,long eax, long ebx, long ecx, long edx, + long fs, long es, long ds, + long eip, long cs, long eflags, + unsigned long * esp, long ss) +{ + unsigned long sa_handler; + long old_eip=eip; + struct sigaction * sa = current->sigaction + signr - 1; + int longs; + unsigned long * tmp_esp; + + sa_handler = (unsigned long) sa->sa_handler; + if (sa_handler==1) + return; + if (!sa_handler) { + if (signr==SIGCHLD) + return; + else + do_exit(1<<(signr-1)); + } + if (sa->sa_flags & SA_ONESHOT) + sa->sa_handler = NULL; + *(&eip) = sa_handler; + longs = (sa->sa_flags & SA_NOMASK)?7:8; + *(&esp) -= longs; + verify_area(esp,longs*4); + tmp_esp=esp; + put_fs_long((long) sa->sa_restorer,tmp_esp++); + put_fs_long(signr,tmp_esp++); + if (!(sa->sa_flags & SA_NOMASK)) + put_fs_long(current->blocked,tmp_esp++); + put_fs_long(eax,tmp_esp++); + put_fs_long(ecx,tmp_esp++); + put_fs_long(edx,tmp_esp++); + put_fs_long(eflags,tmp_esp++); + put_fs_long(old_eip,tmp_esp++); + current->blocked |= sa->sa_mask; +} diff --git a/linux-0.11-lab/cur/linux/kernel/signal.o b/linux-0.11-lab/cur/linux/kernel/signal.o new file mode 100644 index 0000000000000000000000000000000000000000..1970f39f72c6b0c63a277c6955a88089975ca4d3 GIT binary patch literal 8960 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/kernel/sys.c b/linux-0.11-lab/cur/linux/kernel/sys.c new file mode 100644 index 0000000..695f287 --- /dev/null +++ b/linux-0.11-lab/cur/linux/kernel/sys.c @@ -0,0 +1,292 @@ +/* + * linux/kernel/sys.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +#include +#include +#include +#include +#include +#include + +int sys_ftime() +{ + return -ENOSYS; +} + +int sys_break() +{ + return -ENOSYS; +} + +int sys_ptrace() +{ + return -ENOSYS; +} + +int sys_stty() +{ + return -ENOSYS; +} + +int sys_gtty() +{ + return -ENOSYS; +} + +int sys_rename() +{ + return -ENOSYS; +} + +int sys_prof() +{ + return -ENOSYS; +} + +int sys_setregid(int rgid, int egid) +{ + if (rgid>0) { + if ((current->gid == rgid) || + suser()) + current->gid = rgid; + else + return(-EPERM); + } + if (egid>0) { + if ((current->gid == egid) || + (current->egid == egid) || + suser()) { + current->egid = egid; + current->sgid = egid; + } else + return(-EPERM); + } + return 0; +} + +int sys_setgid(int gid) +{ +/* return(sys_setregid(gid, gid)); */ + if (suser()) + current->gid = current->egid = current->sgid = gid; + else if ((gid == current->gid) || (gid == current->sgid)) + current->egid = gid; + else + return -EPERM; + return 0; +} + +int sys_acct() +{ + return -ENOSYS; +} + +int sys_phys() +{ + return -ENOSYS; +} + +int sys_lock() +{ + return -ENOSYS; +} + +int sys_mpx() +{ + return -ENOSYS; +} + +int sys_ulimit() +{ + return -ENOSYS; +} + +int sys_time(long * tloc) +{ + int i; + + i = CURRENT_TIME; + if (tloc) { + verify_area(tloc,4); + put_fs_long(i,(unsigned long *)tloc); + } + return i; +} + +/* + * Unprivileged users may change the real user id to the effective uid + * or vice versa. + */ +int sys_setreuid(int ruid, int euid) +{ + int old_ruid = current->uid; + + if (ruid>0) { + if ((current->euid==ruid) || + (old_ruid == ruid) || + suser()) + current->uid = ruid; + else + return(-EPERM); + } + if (euid>0) { + if ((old_ruid == euid) || + (current->euid == euid) || + suser()) { + current->euid = euid; + current->suid = euid; + } else { + current->uid = old_ruid; + return(-EPERM); + } + } + return 0; +} + +int sys_setuid(int uid) +{ +/* return(sys_setreuid(uid, uid)); */ + if (suser()) + current->uid = current->euid = current->suid = uid; + else if ((uid == current->uid) || (uid == current->suid)) + current->euid = uid; + else + return -EPERM; + return(0); +} + +int sys_stime(long * tptr) +{ + if (!suser()) + return -EPERM; + startup_time = get_fs_long((unsigned long *)tptr) - jiffies/HZ; + return 0; +} + +int sys_times(struct tms * tbuf) +{ + if (tbuf) { + verify_area(tbuf,sizeof *tbuf); + put_fs_long(current->utime,(unsigned long *)&tbuf->tms_utime); + put_fs_long(current->stime,(unsigned long *)&tbuf->tms_stime); + put_fs_long(current->cutime,(unsigned long *)&tbuf->tms_cutime); + put_fs_long(current->cstime,(unsigned long *)&tbuf->tms_cstime); + } + return jiffies; +} + +int sys_brk(unsigned long end_data_seg) +{ + if (end_data_seg >= current->end_code && + end_data_seg < current->start_stack - 16384) + current->brk = end_data_seg; + return current->brk; +} + +/* + * This needs some heave checking ... + * I just haven't get the stomach for it. I also don't fully + * understand sessions/pgrp etc. Let somebody who does explain it. + */ +int sys_setpgid(int pid, int pgid) +{ + int i; + + if (!pid) + pid = current->pid; + if (!pgid) + pgid = current->pid; + for (i=0 ; ipid==pid) { + if (task[i]->leader) + return -EPERM; + if (task[i]->session != current->session) + return -EPERM; + task[i]->pgrp = pgid; + return 0; + } + return -ESRCH; +} + +int sys_getpgrp(void) +{ + return current->pgrp; +} + +int sys_setsid(void) +{ + if (current->leader && !suser()) + return -EPERM; + current->leader = 1; + current->session = current->pgrp = current->pid; + current->tty = -1; + return current->pgrp; +} + +int sys_getgroups() +{ + return -ENOSYS; +} + +int sys_setgroups() +{ + return -ENOSYS; +} + +int sys_uname(struct utsname * name) +{ + static struct utsname thisname = { + "linux .0","nodename","release ","version ","machine " + }; + int i; + + if (!name) return -ERROR; + verify_area(name,sizeof *name); + for(i=0;iumask; + + current->umask = mask & 0777; + return (old); +} diff --git a/linux-0.11-lab/cur/linux/kernel/sys.o b/linux-0.11-lab/cur/linux/kernel/sys.o new file mode 100644 index 0000000000000000000000000000000000000000..a691166c6ad2230733c9baaa0609d3b8fe779594 GIT binary patch literal 13088 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 M35GC+)VB!!4-!@J2mk;8 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/kernel/system_call.o b/linux-0.11-lab/cur/linux/kernel/system_call.o new file mode 100644 index 0000000000000000000000000000000000000000..8ce29cd9d744bf0904c584eb5714b7841f47f6b1 GIT binary patch literal 2640 zcma)8U1%It6h523R*BhEqxGkn6(hzr#w1#;R>d@%)WS+PS(0vR?J(J$?XKC~S!V9W zEC?do5H%zOA4(s5NMHPUQwkD;*u@AcKBPvFDhj1ywFDm)6nzlJ@66BcbxPC&cfRkt z_ndRjJ$o~gmxm)Gfk1#f3s57~6;ZgsS$WuoZrV=Gv|_>5Q%mW?n7sNIL~5!0=ZP18 zzN;m;JT@9zZO8oLcZ;8_?qqT~`V0HSt&Ukv5L% z#oqtoVr9kN|5ClqfAt8q1Vfc~n@~pZ6c;=`am3z3Ir043(pHg{UH5yTE1~&tSEzic z(K&4S)26Fk$g#8#?%GwGT1#D{?Hy(-Gi||lCXS4Io*iq^(J|iAe-v!Ayh)qXzcF_+ zH*9vJ*u2W*O32#aJ{&t5U*9@5)L)si3!beMn^!o_x=@SaL&Vpq*DU3PItdhpgK3W$ zTDDhcGlF`Ps!*wS(lj~8|Fupy^4)521Nct;AYC?YJ=+}^*V)W@oPpqCIgZ`gZ#%}l zu5JXf?Qrj^qa0u6dobAlzx;McKA?8KJ|?btr83G}okHRY#x~6J8M!{bf_w&VPf!ZO zVN?qA^6}bM_RqgY&L?MN-DLNKYj><_UGGsFt5zG(>n%~$x)GZD;aJtW1*FxJSic>d z>vybb-3ij+Nvwy!Z3!fml76bjnN+PXo^t&WXu1Az zXu1C5&~p7L*0sJ@tvqzys#Xa?&i@Luod0!bIsa*B1;eqb^_E9%4A41XJw8AmL-VWB zu>f5F@%q`0U+;V9hDC z19>_B81xxwKQ9+gaUXMTtf!}ade)~GeEJQae$%Jl_UToh{>-P>efpwLU-s!=eOmtG z<@4Q8yBp4VZ}RCqKE2ncDR$_fGW1L&Ov8h58a{wAgb|L@NQ{PK6vp#Vl!gE!k->v8 zIvfcP$D$0e7@0y98YT2%UT6jtjErt%M2XDI$-J6nP!l4f=V>ylC#JL{nW~aj^T{ln zL364(#hA*fCru`XW(wWFV%|{9k}0&Dl2Ef*lP1+9PuPm!l}KyJVpancO3Ki4^+hR+ zI3lGRQzSAu%}_F2q){vgdqJDg64RPQ2PmDCd{SAxP$)?g1=T<;T2`7$YSWp7rsQ>@ zsMBgDt4^Y(gkCW8gl3w$ptmcYY{s~^lq*58p + +#include +#include +#include +#include +#include +#include + +#define get_seg_byte(seg,addr) ({ \ +register char __res; \ +__asm__("push %%fs;mov %%ax,%%fs;movb %%fs:%2,%%al;pop %%fs" \ + :"=a" (__res):"0" (seg),"m" (*(addr))); \ +__res;}) + +#define get_seg_long(seg,addr) ({ \ +register unsigned long __res; \ +__asm__("push %%fs;mov %%ax,%%fs;movl %%fs:%2,%%eax;pop %%fs" \ + :"=a" (__res):"0" (seg),"m" (*(addr))); \ +__res;}) + +#define _fs() ({ \ +register unsigned short __res; \ +__asm__("mov %%fs,%%ax":"=a" (__res):); \ +__res;}) + +int do_exit(long code); + +void page_exception(void); + +void divide_error(void); +void debug(void); +void nmi(void); +void int3(void); +void overflow(void); +void bounds(void); +void invalid_op(void); +void device_not_available(void); +void double_fault(void); +void coprocessor_segment_overrun(void); +void invalid_TSS(void); +void segment_not_present(void); +void stack_segment(void); +void general_protection(void); +void page_fault(void); +void coprocessor_error(void); +void reserved(void); +void parallel_interrupt(void); +void irq13(void); + +static void die(char * str,long esp_ptr,long nr) +{ + long * esp = (long *) esp_ptr; + int i; + + printk("%s: %04x\n\r",str,nr&0xffff); + printk("EIP:\t%04x:%p\nEFLAGS:\t%p\nESP:\t%04x:%p\n", + esp[1],esp[0],esp[2],esp[4],esp[3]); + printk("fs: %04x\n",_fs()); + printk("base: %p, limit: %p\n",get_base(current->ldt[1]),get_limit(0x17)); + if (esp[4] == 0x17) { + printk("Stack: "); + for (i=0;i<4;i++) + printk("%p ",get_seg_long(0x17,i+(long *)esp[3])); + printk("\n"); + } + str(i); + printk("Pid: %d, process nr: %d\n\r",current->pid,0xffff & i); + for(i=0;i<10;i++) + printk("%02x ",0xff & get_seg_byte(esp[1],(i+(char *)esp[0]))); + printk("\n\r"); + do_exit(11); /* play segment exception */ +} + +void do_double_fault(long esp, long error_code) +{ + die("double fault",esp,error_code); +} + +void do_general_protection(long esp, long error_code) +{ + die("general protection",esp,error_code); +} + +void do_divide_error(long esp, long error_code) +{ + die("divide error",esp,error_code); +} + +void do_int3(long * esp, long error_code, + long fs,long es,long ds, + long ebp,long esi,long edi, + long edx,long ecx,long ebx,long eax) +{ + int tr; + + __asm__("str %%ax":"=a" (tr):"0" (0)); + printk("eax\t\tebx\t\tecx\t\tedx\n\r%8x\t%8x\t%8x\t%8x\n\r", + eax,ebx,ecx,edx); + printk("esi\t\tedi\t\tebp\t\tesp\n\r%8x\t%8x\t%8x\t%8x\n\r", + esi,edi,ebp,(long) esp); + printk("\n\rds\tes\tfs\ttr\n\r%4x\t%4x\t%4x\t%4x\n\r", + ds,es,fs,tr); + printk("EIP: %8x CS: %4x EFLAGS: %8x\n\r",esp[0],esp[1],esp[2]); +} + +void do_nmi(long esp, long error_code) +{ + die("nmi",esp,error_code); +} + +void do_debug(long esp, long error_code) +{ + die("debug",esp,error_code); +} + +void do_overflow(long esp, long error_code) +{ + die("overflow",esp,error_code); +} + +void do_bounds(long esp, long error_code) +{ + die("bounds",esp,error_code); +} + +void do_invalid_op(long esp, long error_code) +{ + die("invalid operand",esp,error_code); +} + +void do_device_not_available(long esp, long error_code) +{ + die("device not available",esp,error_code); +} + +void do_coprocessor_segment_overrun(long esp, long error_code) +{ + die("coprocessor segment overrun",esp,error_code); +} + +void do_invalid_TSS(long esp,long error_code) +{ + die("invalid TSS",esp,error_code); +} + +void do_segment_not_present(long esp,long error_code) +{ + die("segment not present",esp,error_code); +} + +void do_stack_segment(long esp,long error_code) +{ + die("stack segment",esp,error_code); +} + +void do_coprocessor_error(long esp, long error_code) +{ + if (last_task_used_math != current) + return; + die("coprocessor error",esp,error_code); +} + +void do_reserved(long esp, long error_code) +{ + die("reserved (15,17-47) error",esp,error_code); +} + +void trap_init(void) +{ + int i; + + set_trap_gate(0,÷_error); + set_trap_gate(1,&debug); + set_trap_gate(2,&nmi); + set_system_gate(3,&int3); /* int3-5 can be called from all */ + set_system_gate(4,&overflow); + set_system_gate(5,&bounds); + set_trap_gate(6,&invalid_op); + set_trap_gate(7,&device_not_available); + set_trap_gate(8,&double_fault); + set_trap_gate(9,&coprocessor_segment_overrun); + set_trap_gate(10,&invalid_TSS); + set_trap_gate(11,&segment_not_present); + set_trap_gate(12,&stack_segment); + set_trap_gate(13,&general_protection); + set_trap_gate(14,&page_fault); + set_trap_gate(15,&reserved); + set_trap_gate(16,&coprocessor_error); + for (i=17;i<48;i++) + set_trap_gate(i,&reserved); + set_trap_gate(45,&irq13); + outb_p(inb_p(0x21)&0xfb,0x21); + outb(inb_p(0xA1)&0xdf,0xA1); + set_trap_gate(39,¶llel_interrupt); +} diff --git a/linux-0.11-lab/cur/linux/kernel/traps.o b/linux-0.11-lab/cur/linux/kernel/traps.o new file mode 100644 index 0000000000000000000000000000000000000000..51de46fe88ac98ea479385c2c283bf030d1f46cd GIT binary patch literal 12972 zcma)C3zQVqnZ8wBJ@icVJY;5I5Li1hgwf0sMwt-Q;h};-g8~r|ZF;(^XIgr?JNatw+FB@QkU{nALiAE{cJ` zI^c5c=H=Wlu14ROT^dBdn{~=JSGTq^#JQ_s(|(}oeiF|-Jg$t>W6yY5KKh}T6XRz6 z5td7edmAj>il2w)=os^h7J7V7J4-!L z{it@VD3jM>cwBAcGsm6>wj1B6XKD7MH2a?2cc%WSll4#Vp|GKL=@`09)oz*IuhlTI zwLE&N_x3xV9es5kO4SN~KBb7n`2da1|MC3!(NpuLG5Ih}Ub>*k-_zuH*<^XSMWijZ z0of}OK=!#IAWM-3vNn(FqC&?fPTP%QyH#vAi|rYoZM)d65!-cQyIyShqUbK$KYG&Z zpb#v#kM^U3R(8x*Z9jTy`82I@9ZkN6*I@bvyMZR3zo5x_n(Vuv$!#=oE@-liCMz#! zlB3Bb7c{w_CU3oYp&A{b$$wtZ&KOe3vD3+~sSl4CV~xi{Oy(Fgb#eofo2E@}Ve-5w zl7H<6k1&~I<>cUAavPI55KW!j&18<`lasxY_c57+-PFnbOkO>0@){KkplQ&MA zyqU>cr%m3*7c?j5PARqEQc>z7rN zEL)hXx%RqsE3V%F4snA|uaeqB4a5o#ymRf5bZR(Nq*$Xi6l3x2%OYxFE~0AG`cwky zM0+Hc&&HiXA(F|HBe#X!i$`Els}kALK-!5UW2JOa4LTVoA4}7`=){YuY(^zgJ5mWJ z;^gz$yi!hVq`KM};4RKu0wrJAH&X5Uu`0?bq?pRvKn}M;Zfd)l+C%}V)yYD2F%Oeo zgqrxdq1<+fAcIIGvT6g0-wR2ahiVvQhEpox43q{{c88Nsrn5WMK(>@g6jUm+BbH7j zBH0}3l}W&AM=I__GTCAzwj-8G$53|_&r0)T^O1rxIP7GK5eCYaGUWgpH*8Qkjo!Ju zQ-GZ+u)VccMI^7qXqMmMBqD7+SG4ym?dV;4nY87{Fs)l?D%_37a5uh=#l<50c>Q>W zho&{-%jiM@4m6>FbtAxvsX&l|vIa!56zqNpyC4VRKo!>|RdmVXH-oqHw0Hu+O)J;| z!;lqBq4cIXqn=756c50A4^phi4%nMU)k$cotw%s=`ccj&1IA5Xgsr^@M#g#?Df@2N z7&lY4>>Lt}TPTO@hpFE{Ic)!$`i<>XN;QN}Q{F^z_4C4g3k7IWzoOhK`dI&F}*(PJ(0vgw5-)t#_N@1I#D69FJ#@S({E2 zl`(V+$Z6zLC@ABupCZgz6FuQ`u&-i9r{L~(s*noIM`~a2j;|ny{d?$xZXuQ30DUk@ zYtxP(@8C9OXW9KQ48|yj?DNzQj6)9Fx8fd*Q?9kSH3%lYjC-AZka3dicM*FVZ3gMv zYJZ!)LzLU>U9?XzuXg((#=nblr`<>2?UcLiS(MX^zu116Hp7&c*jF)5hH|gnNI6US z3Oh_WNBK&7E91Y9@=_J}0Gu0wMYg1UC5=kVK-t?U@1ShjTpk5?Qnu{9%y@+6A^SmQ zyz3$8!)Q-7WAK}}Rn1rkRe#0XzMrf$E?f?Wh*QJfN=OJ5h_KwTg3zb!%d^u&yDpGz2<&c$3<&@D* zIcz24c>W!f8?0nDtBg*{O^~7QqTFJC9`TKChM%XZsA6||1I7PRdQtFIL7f$}LtrzeE}D zqCC%XSn%bPBR0CLGOnWBYGJ}s#?_SDEKFGnLutk`S+_xY-(nxQ60Z z%YEn8Qr>3YfV*)6<%B(#E%xpN+H*)%)dTpBx=nkDs#*t`KWXY}i*KMij0gX!6y1#()maclfNLYvp` z1vNIP+0OvEvRlL?&Wh$5uQ&-cdp;~LN7~A=+d8Jft>sHdYK81YyX6s2jaPt$ne#B? z+}ec7Envc-hY+CIE#9qOVb#oCu8GGiHRpL2YU|Rn$EmW1JCdWVJP%>;I7pA!ma@nH zl|5n=c?g3?h*>7@fycMpQau&YrAm5@CV3>KRL$r$=AcJHD1MoQo6)s&N<%X{t2yM^ zHNg%oFRZ1R9agh>U?a**d6to8z7(3ZBFY47Yv#+N)7odT2W*#zsphOf7czHVi@Vpl zzbV&arx#l4Aq+KtA3b&tl|3%4)-~T<;UNqjMYisJ<7JPHWsmzRJcPlcfq6Xe#j?i( zWse6cJcPl6qoq0ieA(kz*<-xILl`_hjb~?mKmJjD>ZLcA#!<-9^UCss@~2nyt#VuZ9XU zYNHXTv+ZT}yKJKo6IiVZghPuP#;7Nm@1pqB0QvvI#EUjTr_8GBkR!L z^2wF1-OOM)y4iwpv$uja!OyMCqB)+|Cp@oacu6JcH49!oI@?Bz&8%WET09YBZ>Mq1 z99@QrSQr0!ij-}x6ehT~@tQfyQH^;M`FM)?6UFruSajgw;D-m{-g(noC(8G+i>on6 zhVf=yE$#+13O}Q>vn!Q}r%MT^E1k-eMwCxc*j4aRr3&#OC($`XzhXX?D|E&ge8`Du z<*uAlKst(&B*Lzc8qCDfkkPR)ccwCfo{T=?7C7*tVcc9Q1$Gtx@NUZtym;^C+wKpY zDRklAXu-U+DRj_W+W5i=?AOf0yqU``0vJ^{RPA^&)MdWCajKLPCsJ31zHp=b)?f2& zv%N|FcQuFZ`u{6UFE$7cle!%4c5M2n?dh6WOS5haL6y#R;bnj~3nS zH@49EV$|J8V}A}c+N%^VDkqbOCSt{yD#W76bPP)-G=AKP4y201v7AapGk9>@vB!_b zim72omE1cf_#Ranjup16WUM&kIyOMS45?I(s7> z!?ApP=&IC`zAGWe(}_sOV5B3N#X(C)G9MduI&xX;pq)IFDHg=(NR~40kx2onOt!*WgI>PIcs24B!YO%CiW2uq8%6!l(D0XoqNwkn$Srw=Uo?u-57dAahet8W6Dw61%I1ra3PU`z zZq+rE9d^1hr9`nSTjv)|Mb}{ehj87TmDd6CZCu#9gKF=c~n~vcT6w!I36TKE;bhGoIE0##)8AFb?qCA-@w`P1O<|cZlVeVtY8<0%llq(s{ zVdDnTeRWF1GDNA|U_PfDJ|hIxuLRpdA91-c(-`a!iNhaqP8HFtEP64^&YVc)-IFjp z0k@=HUGUnvuVEB@3$Kk==He1QGxtqkGpb=kV{IzuqgyBM{qE)o^} z9_aO6#jk%Ddc7m@>mP?+?>nIHH&4}BTu6NjKfR9k+rJFGUakA}Z$PitY`WP zetjGCdVTHJ_d~B&(SH4A==ECJujdyqy(0GO+2(rP>(@UDy@*&DC*8xDC=K&T>?8)Tj8+4y?Sx?FRYlxYc77+{*>*XNdGoM=3W5@C^*46sbX?;-m z>tS^$^#+2l9&7_$k2R3B4@C8kIB@?bpF)dUCfRMkE+Rq)xwPGT!TtHZ)q_<$bj+7} zo$oMY?E_I25RadG^`*rW6#jT&3_xs8#$&a0JokVcobAZ#4Xo?Gz(lzikH5Ww+U_6b zdxtS%=GxHifY@pM_hIM1boq`zNm)O))36I^0=+K6Bar>|XhJ;O+;PwQ6dhG;(6j1e(I9q1o z3aC1T?pMB;`Zs0fwddO>@lJ3(hs{L&t_Ih07x_kTJ!g?8!1Y{3&JWIdjv_CB>$!=1 zH@KdY$oGNkxrqEBa6Jc+KMJnr9`a-0dd?w#0bI{D~EgL@0`RFllagiK0JxF*ddWnc{Z;%9{&+ zu0$(Ve&ADVXlUhr{MK7muDP*(h2H((%#8!TIfIw?T99RJ4@s}ku~G$_a+d+Ue{Zap z-+D*t3&LeSsJ8Gg(5dEUXq`wqe^hVBJ=N9%hUMk<#L}KeWR*2{>&Z&H4N$Iap9g{s-ms^1=E$$)zuB=``GU8%Jfd8vX)akvRrJ?(W`m+@b3R6FAp-6e_ziMmBX?s zop#cEsA!>5u84lP2|okFDd%q!9rLj8qr#61e@gfd$T121M)bcGeGU3MV9vyx45a=>LHA=k_~XLALOb}s zB>bns-E&Xa)nZCwdLNK+t`dH`@OuT12%Zvjzf!}#24f-pIt14X76d;b=zf&G)LUz? zzTXl3{|KHZVzFr9bdy+3d^_eB;R^)Yh?twN624OKdSV+ss|k+@CW)6R^|!+J2;NV; zT&Yh9KP-5Zh{fn};ZF%ZOT=GRoDu#b!B>b_GyYEaTY_v81C!q@;zF#K1tY{Rd}$WG zOz;|FH$D~$zfJH?Vh`4R!bb$}A!1?hknm3m9wIJL>Py0(5IjNb#piwD{~`Dy@d~AW zE&O%C-xIG?DuR=BmcL!Fmk9ff!fzA2leiRr_$2(K;B!PQvJp-hSY(BXxSo)&yb@T}nL zf;={+J?D9%`*9Z7CVZvfR>71Y=Uv*53UXd0=X^>$CCD$2;x@ry!Mgws?!I@3`>&!uEBfCF{!#Q7hrIm1F8CY~<$6W< zYl6QMeG}ecmUn^RWklFtCw!CO?V=wM{-EFi(SJ_(alx;P{w3k(1YZ+<9ro|ccfQ~P zBJ%AQ{vN?iqR$JzPw+v}9~J&Dg2zSwL*YLcJSX}P#v +#include + +/* we use this so that we can do without the ctype library */ +#define is_digit(c) ((c) >= '0' && (c) <= '9') + +static int skip_atoi(const char **s) +{ + int i=0; + + while (is_digit(**s)) + i = i*10 + *((*s)++) - '0'; + return i; +} + +#define ZEROPAD 1 /* pad with zero */ +#define SIGN 2 /* unsigned/signed long */ +#define PLUS 4 /* show plus */ +#define SPACE 8 /* space if plus */ +#define LEFT 16 /* left justified */ +#define SPECIAL 32 /* 0x */ +#define SMALL 64 /* use 'abcdef' instead of 'ABCDEF' */ + +#define do_div(n,base) ({ \ +int __res; \ +__asm__("divl %4":"=a" (n),"=d" (__res):"0" (n),"1" (0),"r" (base)); \ +__res; }) + +static char * number(char * str, int num, int base, int size, int precision + ,int type) +{ + char c,sign,tmp[36]; + const char *digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + int i; + + if (type&SMALL) digits="0123456789abcdefghijklmnopqrstuvwxyz"; + if (type&LEFT) type &= ~ZEROPAD; + if (base<2 || base>36) + return 0; + c = (type & ZEROPAD) ? '0' : ' ' ; + if (type&SIGN && num<0) { + sign='-'; + num = -num; + } else + sign=(type&PLUS) ? '+' : ((type&SPACE) ? ' ' : 0); + if (sign) size--; + if (type&SPECIAL) + if (base==16) size -= 2; + else if (base==8) size--; + i=0; + if (num==0) + tmp[i++]='0'; + else while (num!=0) + tmp[i++]=digits[do_div(num,base)]; + if (i>precision) precision=i; + size -= precision; + if (!(type&(ZEROPAD+LEFT))) + while(size-->0) + *str++ = ' '; + if (sign) + *str++ = sign; + if (type&SPECIAL) + if (base==8) + *str++ = '0'; + else if (base==16) { + *str++ = '0'; + *str++ = digits[33]; + } + if (!(type&LEFT)) + while(size-->0) + *str++ = c; + while(i0) + *str++ = tmp[i]; + while(size-->0) + *str++ = ' '; + return str; +} + +int vsprintf(char *buf, const char *fmt, va_list args) +{ + int len; + int i; + char * str; + char *s; + int *ip; + + int flags; /* flags to number() */ + + int field_width; /* width of output field */ + int precision; /* min. # of digits for integers; max + number of chars for from string */ + int qualifier; /* 'h', 'l', or 'L' for integer fields */ + + for (str=buf ; *fmt ; ++fmt) { + if (*fmt != '%') { + *str++ = *fmt; + continue; + } + + /* process flags */ + flags = 0; + repeat: + ++fmt; /* this also skips first '%' */ + switch (*fmt) { + case '-': flags |= LEFT; goto repeat; + case '+': flags |= PLUS; goto repeat; + case ' ': flags |= SPACE; goto repeat; + case '#': flags |= SPECIAL; goto repeat; + case '0': flags |= ZEROPAD; goto repeat; + } + + /* get field width */ + field_width = -1; + if (is_digit(*fmt)) + field_width = skip_atoi(&fmt); + else if (*fmt == '*') { + /* it's the next argument */ + field_width = va_arg(args, int); + if (field_width < 0) { + field_width = -field_width; + flags |= LEFT; + } + } + + /* get the precision */ + precision = -1; + if (*fmt == '.') { + ++fmt; + if (is_digit(*fmt)) + precision = skip_atoi(&fmt); + else if (*fmt == '*') { + /* it's the next argument */ + precision = va_arg(args, int); + } + if (precision < 0) + precision = 0; + } + + /* get the conversion qualifier */ + qualifier = -1; + if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L') { + qualifier = *fmt; + ++fmt; + } + + switch (*fmt) { + case 'c': + if (!(flags & LEFT)) + while (--field_width > 0) + *str++ = ' '; + *str++ = (unsigned char) va_arg(args, int); + while (--field_width > 0) + *str++ = ' '; + break; + + case 's': + s = va_arg(args, char *); + len = strlen(s); + if (precision < 0) + precision = len; + else if (len > precision) + len = precision; + + if (!(flags & LEFT)) + while (len < field_width--) + *str++ = ' '; + for (i = 0; i < len; ++i) + *str++ = *s++; + while (len < field_width--) + *str++ = ' '; + break; + + case 'o': + str = number(str, va_arg(args, unsigned long), 8, + field_width, precision, flags); + break; + + case 'p': + if (field_width == -1) { + field_width = 8; + flags |= ZEROPAD; + } + str = number(str, + (unsigned long) va_arg(args, void *), 16, + field_width, precision, flags); + break; + + case 'x': + flags |= SMALL; + case 'X': + str = number(str, va_arg(args, unsigned long), 16, + field_width, precision, flags); + break; + + case 'd': + case 'i': + flags |= SIGN; + case 'u': + str = number(str, va_arg(args, unsigned long), 10, + field_width, precision, flags); + break; + + case 'n': + ip = va_arg(args, int *); + *ip = (str - buf); + break; + + default: + if (*fmt != '%') + *str++ = '%'; + if (*fmt) + *str++ = *fmt; + else + --fmt; + break; + } + } + *str = '\0'; + return str-buf; +} diff --git a/linux-0.11-lab/cur/linux/kernel/vsprintf.o b/linux-0.11-lab/cur/linux/kernel/vsprintf.o new file mode 100644 index 0000000000000000000000000000000000000000..5acfe6576413e77d5a31e400e048fdd1e4ad4bf8 GIT binary patch literal 6156 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 tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +_exit.s _exit.o : _exit.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +close.s close.o : close.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +ctype.s ctype.o : ctype.c ../include/ctype.h +dup.s dup.o : dup.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +errno.s errno.o : errno.c +execve.s execve.o : execve.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +malloc.s malloc.o : malloc.c ../include/linux/kernel.h ../include/linux/mm.h \ + ../include/asm/system.h +open.s open.o : open.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h ../include/stdarg.h +setsid.s setsid.o : setsid.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +string.s string.o : string.c ../include/string.h +wait.s wait.o : wait.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h ../include/sys/wait.h +write.s write.o : write.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h diff --git a/linux-0.11-lab/cur/linux/lib/_exit.c b/linux-0.11-lab/cur/linux/lib/_exit.c new file mode 100644 index 0000000..c0c9d69 --- /dev/null +++ b/linux-0.11-lab/cur/linux/lib/_exit.c @@ -0,0 +1,13 @@ +/* + * linux/lib/_exit.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include + +volatile void _exit(int exit_code) +{ + __asm__("int $0x80"::"a" (__NR_exit),"b" (exit_code)); +} diff --git a/linux-0.11-lab/cur/linux/lib/_exit.o b/linux-0.11-lab/cur/linux/lib/_exit.o new file mode 100644 index 0000000000000000000000000000000000000000..94af2a4a5f650db6a742b57da8d85e71ab559bc6 GIT binary patch literal 1988 zcma)7J#QRE7=CB>&OUt35!*q;a)j1Wq8RY*+2nu_629yZ1&}2I5e15@y}R|@3g51^ zAK*lY57B@qPzpo?qKT*}D3G8_ML|VLlfOVs0nal#b6!{QN;A*%e#|>F@6ODAeD#f2 zl~Q6wi7Q8%$hKQ~dK%VbNlwaJKQrRXx6ih|_~Z9a-o2kgYiNH%JquJz=zi1&L3kxj zV|E72X*9nBxQ%9<6yi9uD>SOsSK2olXl>?CfX=Aqz;q7vZSx0EHFp8MbC+~Mo$D;M z-Ofs9K`qXld=&Px(r&*16J{{9g-n5ZaoO!$YCqpTzs%5=PJi>tvPiQjmG%0Pa~cWH zFf*Fn4Vhg&`O|2QJceGWzdI+;>%yTJN_L~exCjOeLt>r9ol~p7IS#_KQ_3WdM@cmF zxN{qykJGI1j=A#qPE_1Jh~(PNO>fKV1s8*!=TE|HFuoFBxcH3ck34@boy3K|mxYta zKS+@=%3zF>{WyvIy)qdTahl{XC8?hm;ov?0AWMsAP^8(>LI&e7ll?Rq=_PRoyMuHX zNq3x1qHaGAqVC)f^Nnw(QcgVrEqB;_WN1%e%%{pVKR!24Pfo;0OXfokWMBM zK30&RbOAm`Rmv(&G~U(aHyipNz@yHa!+SvCovNQN`Y5Yt2bxtK zeQc~jJ?<*5_Y+l!?rq$sCeFIj>M^nEbnRc8IO{$DsovKrlMD3`!H-)Y(A@7tlJy%*FV-y zJpNaqUSA3I`i#_V6{;-m^wwA%i>irxtWq4`u6e0*hezTHD|jTX%uh4028*ngeWa`R zTdzQ&X7lhX6p3{wK4K8R6j9jLDiH^6&DgsJuNd4m_`1Ox2H!Er^UFMAqw~E`&Fb6G M{-p7HK>T0iU+XN)TmS$7 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/lib/close.c b/linux-0.11-lab/cur/linux/lib/close.c new file mode 100644 index 0000000..afd8364 --- /dev/null +++ b/linux-0.11-lab/cur/linux/lib/close.c @@ -0,0 +1,10 @@ +/* + * linux/lib/close.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include + +_syscall1(int,close,int,fd) diff --git a/linux-0.11-lab/cur/linux/lib/close.o b/linux-0.11-lab/cur/linux/lib/close.o new file mode 100644 index 0000000000000000000000000000000000000000..b7924357c0fbdb50cd1a60f7d1f6eed36f526f30 GIT binary patch literal 2220 zcma)7O>7%Q6n?Y2cHG!CPQp*DAhAfPNP%4^)Id}y{Yhz6Ks^*HkU)yo>$SbAy_@b2 zq*Z`Q5fW9(p+YD^>IIbxS5Cc`D+h!s^#B*H^uW)714!X}vpe?Y1W!Bff8LvUZ)fJ? zSKl}zgdhcibec#+Kk1pJEy)r+Of&T6_JhWqG88*+EzV#6@%wAnPcPQCw-#%(S>6Hr zYlHD$_iyu@J9~ib?;7vk{T!0PDl)|Lz~U>QZ&?Psm=V&9DdsezbPz;0N`8=#rcFK0 zN>Sk$aQQ|`<)1-}M}frj5nu+6BW~>gmwMe?uid2bXRM!o7FfHP&{T_=ALJx4BM#N) zs(O8)J|kw!jmKbFq-ymQsIY>Ztss*vjyLuC(dtXpr<&*H*!jf#?y07jL$VU-6}Ft4 z)8>iFZOR-oacUwSZ@%0_Zn+&$RT1V?37CHeLnB!w@pt_op+(#k3}M?XKX8X>*CTR= zVeHv1&qxD5PP+CW>t0D?oqj;PhH{B=1vNCZ-XB^CkJH$ZG{@ zH)(}&3t`huYuR2|v4&2k<)%@l0`8CuKxfz1j+#psJ86)l*`lrIQYo!`w9>Yh+lMnP z;eXCRT)jYIt0ER^hVd!N%njnfARBYCUfI^x>hqWDm6Lbt2HEkIQQ~w!lPIGD#YNuG zPQ1;8?5>kIWOw42Y*u!?PTF7hgI)-e36oyZCLC`n-g*HKMC4zk^FH1g0q zJ3tw2v?eQSHpd&R%T{D-|3CN%IPu@bN1B1pdhusu8^Z#|0m)^^z@flLvl#5dhnwX? zxtw1ebO~}1RJ>=PWdHy2K_10s}OE8lLN1hf$2CW_Rn&vgH*$Z|0Q%ba}zy8PpcvV7OZ3SD+|EMh))b^ + +char _ctmp; +unsigned char _ctype[] = {0x00, /* EOF */ +_C,_C,_C,_C,_C,_C,_C,_C, /* 0-7 */ +_C,_C|_S,_C|_S,_C|_S,_C|_S,_C|_S,_C,_C, /* 8-15 */ +_C,_C,_C,_C,_C,_C,_C,_C, /* 16-23 */ +_C,_C,_C,_C,_C,_C,_C,_C, /* 24-31 */ +_S|_SP,_P,_P,_P,_P,_P,_P,_P, /* 32-39 */ +_P,_P,_P,_P,_P,_P,_P,_P, /* 40-47 */ +_D,_D,_D,_D,_D,_D,_D,_D, /* 48-55 */ +_D,_D,_P,_P,_P,_P,_P,_P, /* 56-63 */ +_P,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U, /* 64-71 */ +_U,_U,_U,_U,_U,_U,_U,_U, /* 72-79 */ +_U,_U,_U,_U,_U,_U,_U,_U, /* 80-87 */ +_U,_U,_U,_P,_P,_P,_P,_P, /* 88-95 */ +_P,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L, /* 96-103 */ +_L,_L,_L,_L,_L,_L,_L,_L, /* 104-111 */ +_L,_L,_L,_L,_L,_L,_L,_L, /* 112-119 */ +_L,_L,_L,_P,_P,_P,_P,_C, /* 120-127 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 128-143 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 144-159 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 160-175 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 176-191 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 192-207 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 208-223 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 224-239 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; /* 240-255 */ + diff --git a/linux-0.11-lab/cur/linux/lib/ctype.o b/linux-0.11-lab/cur/linux/lib/ctype.o new file mode 100644 index 0000000000000000000000000000000000000000..acd65e6a3869dcf4ecb16245dcd9f21e6856c20c GIT binary patch literal 1908 zcmcgtOK;Oa5Z;Yl`bZlRr97$%luE4#2s;S`RJF8FBB+9@9*}xLf?_*PViDVs<3Ni9 z`~q(L0B%U!xbSDVaN!4lxFJ-&+4Ux_=z$X>&CcuFnf2_$Z|?2f=bSS|oM~)qG4@WA zk-89NmS=McD&>@-GLbUI@_qg|=_5+~TY|8Lzeob^3d)>76rVc2n*VRvD5;CGI)4bs z*HdfA+<;+%H5$-ZU7u_~(fO1CG4YX{GZ#n|eV*7M$MlntL+7VH!C<_=S8~OymRro_ z&oP$ayjkQ$?>nnU-72u4kLY+Y6cVm^}~9P?}_=LdCEQ&ajIZ zIscWL!zfMy_MbB+KJ2@uBcPRT=)09**orIRzzEzIm7W(24~(i=s~J7Zu2iK1qs@lF z!0QBVtK@X8Xq0B)y>uxf+jnBW&$f5>N{v$8Ts7+@!?z-*yWw45y;(9kC8HhsUTm}@ z%Xf`_=moJG!RZC4=^E`};KW`S4B!evV-Q=;Gov4cvFpTPMA@l`D9yGTjkQvF&mIQx zP}VZ84TV*EU8|eb`eo_G77Y&l*s>wxNXo9#V)r0sX3L5#X4-=RGb6WWwp@GI+4q8W zh>*}N+m77l>8KT1LC3`e382+09l4q5gud?v$Q@wuCK@6?Ml}52hDF*q@TmkY@9220 zy2nciF1gC=4%sRQy#yw@1g86>a9b%1#g$o2>EtI|o0NnU?kenQ<%FD_Wb7#<&Zszu zbZw~KEwGvcm3@G*NlHR0whLS76#52(j<+HedjLneZVz>-4%LM!YLopKtmZ&vzhRU~ zNl3*!*rd~U6RqGbeU_>iDMlP8QsKS;cSRuNpm47eoC?XiudMN!3UH~tpeW(qj$xy< zQ(k$!WpEw`;w#kC;8`&BIS;0ur1Sj*?ks$YD9=fh_Ur8XQ5tjnZ$bIfD + +_syscall1(int,dup,int,fd) diff --git a/linux-0.11-lab/cur/linux/lib/dup.o b/linux-0.11-lab/cur/linux/lib/dup.o new file mode 100644 index 0000000000000000000000000000000000000000..3b59d3a90f0a3ea5dd762400b7a6481e5a4cf26d GIT binary patch literal 2200 zcma)7&2Jl35TCcZ{%D*UCn+LUkT6mT39##gS`ZaVQ&Ol3sE0y1z#&@OYkO6DH{B0# ztMDNOq?T}?LMR|{LA~)8^xobO2LwonGdDO;1fmj$@|(Bs#hVk1^xn*GX5P%~ynXMz z_rfbL3L!|7Ad@DD=m#^iv?N=iBQ!&=?)+A}xeUebYm4*OzW?_9Yo`~dceWR&Xlzkj;HYi`~H?cA=tdFxXki&bQaCoqe{n7(EVdOBldSS6MWtMECPX%+k+A;T!m zu~L*jlD5)U5*2?0v%2XPiK$}{nK+L4au;)<*HwDsIu$=){S>D)t|wG_goW?qA~7S5 zR_7{ab)h;VW{b54U|FO}K&cK$+$2 zoH0*SY>`=I#|)Mx@MQhjI&weA`7v}ySkf(E`E?9~xIQ8NsUF5G_Xs;99H;3AonhMb zi16)BhyByQkCU!5$o8%vLz{=hOK7AhmeE1W=>1_75GM^{zaMzr1~)ca9}mJPX&f+k zQ51x9=G=wGMx*7dIjx30a-+`Rgnw-9sfOKe*u8M%Cw4D#N1nYEBA6FJ=?6nU@a$e1 zbP_)dVyJ@9juW?Y(cX%}#OowsM4OwD7o%oXNoU|jGz^2jtSR=dc**50kD7yU53?iMZ+5UU61e?V;OlcG4(QVQ!O*KxZ~KjyIMrw9_C-v#RYUQ;AmJU2Qolt>sM1 z4LiaUNL)EjV!JFBrY-9#+RGcmgGp}4scL!0*r?85s+LdPs#@g4mq&@)22Y}l5403{ zLnraZ2{~Oiami`NF*&U4dhN8o=?A?KCMmn^cI3U4x4MxV^wE{v0&b;VfE?s>!qLdX zwmAVh>0o!V&Sq=8!KU1etoHviKLjT}>qX_vXFUHCvW;m03A*_`FK|mgyV3$ zDGVL&5@cS(-_3Lf;O9(~GuwD6vn zzE@Ts!_P4C-|uL;x~ljao;&- zKHe|*PdSGs9ZzG;^LmT!+|zpI2VXs*{l|*Syf~b^Z){&zya8?i{|k+V^jZJ_ literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/lib/errno.c b/linux-0.11-lab/cur/linux/lib/errno.c new file mode 100644 index 0000000..50aca2e --- /dev/null +++ b/linux-0.11-lab/cur/linux/lib/errno.c @@ -0,0 +1,7 @@ +/* + * linux/lib/errno.c + * + * (C) 1991 Linus Torvalds + */ + +int errno; diff --git a/linux-0.11-lab/cur/linux/lib/errno.o b/linux-0.11-lab/cur/linux/lib/errno.o new file mode 100644 index 0000000000000000000000000000000000000000..2b68237de5d516e34b24195231b0aca298879d71 GIT binary patch literal 1472 zcma)6OK;Oa5T1=w3Ydmg1wmB_8L5aA;Z4#;RaIVx3Mvrltw)6HWYZdIyK>f04m|FN zQzg#)0?zylPW%tJawy;IdK)8wV5HfZ`R3c5eT@C~{^JKi2y!CGqe(;*G;F4COq*tD zhF0J=P23c#u;RT5?9d1qnU)x*JchjHRFY|6bK+WS-uGIIt=UUNjXrs;4gZ$^aQ@yx z<1%g4zI(q1Z~h2j6(cu&0sWJ$A$%|qR4VNU>bGy@>F%Qa;Q7` zILy?`&VG`WhhbOtdf|Q)ce)n97~6@owY?K;27S3M`$3pS#bEDFvbw$&gu6jF%F{%L zqasRGc#z{XssNZ|SX70hG8^b5&&GhVJRIw2@H{*ya;*kBFDBdC+T7d-+BC)B- zS4tE0-t_vi+h4XQksQBDbri$u!rDFOX?3Vc4kI0rjK^b=h1!=x6_>kDlWdeDW&9|P z3-zL&jfyDSRhVE2ymRMcZIXjLO%oAA%n@OM*0>xf%W?lD%bcN^;Fz@=wUp6kTr zwgEVwb048-;uCSXM?mUzzo0JH;kwgMSN92gHwP|#hPK(M#N`si?DM%dHD^0`P{Vn9=cGS3H+G;zUhcI0wwV1*e(!;SW6KSHBFC{e%O4g?Ao$4$9}9h4P)$ z*E_(yFvp3j>tbi?c$2;#JDlzBe=d&eJK?xqkz?M?M7)#kwU}pKsGhICB+oxPNy78Y z2`7+8zBwmXVV$EN$0z>-^SiR&i@-<2cO$So-!t2bm0e(qhB5y<;QWRHWd6 + +_syscall3(int,execve,const char *,file,char **,argv,char **,envp) diff --git a/linux-0.11-lab/cur/linux/lib/execve.o b/linux-0.11-lab/cur/linux/lib/execve.o new file mode 100644 index 0000000000000000000000000000000000000000..90285289762a04e32eddc4b9cc9331a4b1051515 GIT binary patch literal 2336 zcma)7O>7%Q6n?Y2{z;s=PQp*3RAP}_2tQsY)T*M=Us5Q6sz`+jP>aIa9@{JI-LSh3 zX%!Wu2m}fjBoII1)(a;j#HHLotppO{&`UxQfX%J-6NFrLY5=%podAfrp>DjGcE87>UGux-D`?jB}+E+_3{_w^-C#w@% zo7D;0$Zv!FrNa2{n^!pU>TST*^~(8c-$F`qT4D~oC;+{M!EhuYWLSmkU=1txGl*&B zJU=GGD15<6QQT0r!jDSI-vCh=#rOfR44g-N`WbL8Vs@Na<2}mVQqq@7vT}E2q+N1?*1Q?`iJ zIpWx?Sw2*Hv~>UM$}~G4pZV~ySuu?T<|whOOdB&q`Nl4>uowAO;8whkn2e3g$7T=D zVlDf4Js7&G%;_>R|00G#2Z4q7r@RMPbsIevj#KyiR)5%*L~=v6)}_(meYuFa0CtD%gDPAxAVvggk=hkiUv_E&pksHDZqiw$R?@j#*_ zoRtK`rL!b9i(+oVvff7Fxn(>URI5&ui(AHWdFHip@x-;VMNV{a5W7v#I810ybD``z zvD}EsX}hsYPBV(gVP#u3huu}r?*uR@-fcERxt_JUq3d_ChfDyMTnAtda$3P)AhBD= zN5vgHH6c4#=X(em_Wv(GUXPC9B%JSiW>V0$1<2X;^^p7{=y-iO486YN;B^dGIt<}W zW>V0$vye5J(< zq=P_teGDI9WcM+X*~ebk^gbrRXQz4}!WHN==y|hqvh4*tOTUBS&ZRvVoR90yb7u2B ziQ?hj-vOO(N0BmFy+wcA&f0gsxST&b1Iv2XNtCJnxKRd^_zfL_sXCgKxw9iMX<{UR zGYQXC22A1#j=)3(bOt`VQ|J)aRRh;0^9HDwgp#L#>M#kU=kqUscxHhjay-*JQ_4@7 zK-2GKiki-+dKC{po|pYkru6BQs&fSW^Qr7IMV_@(zMRr`Q~F6tzfP%I7Y;D*f#a4_ JYJ(b({{_qc2xI^N literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/lib/lib.a b/linux-0.11-lab/cur/linux/lib/lib.a new file mode 100644 index 0000000000000000000000000000000000000000..4265c002fcbfbe27389cec61c503ac616d1f8852 GIT binary patch literal 34150 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 QdMAMCTchqEzQW@F3!BgybN~PV literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/lib/malloc.c b/linux-0.11-lab/cur/linux/lib/malloc.c new file mode 100644 index 0000000..d7c95d5 --- /dev/null +++ b/linux-0.11-lab/cur/linux/lib/malloc.c @@ -0,0 +1,232 @@ +/* + * malloc.c --- a general purpose kernel memory allocator for Linux. + * + * Written by Theodore Ts'o (tytso@mit.edu), 11/29/91 + * + * This routine is written to be as fast as possible, so that it + * can be called from the interrupt level. + * + * Limitations: maximum size of memory we can allocate using this routine + * is 4k, the size of a page in Linux. + * + * The general game plan is that each page (called a bucket) will only hold + * objects of a given size. When all of the object on a page are released, + * the page can be returned to the general free pool. When malloc() is + * called, it looks for the smallest bucket size which will fulfill its + * request, and allocate a piece of memory from that bucket pool. + * + * Each bucket has as its control block a bucket descriptor which keeps + * track of how many objects are in use on that page, and the free list + * for that page. Like the buckets themselves, bucket descriptors are + * stored on pages requested from get_free_page(). However, unlike buckets, + * pages devoted to bucket descriptor pages are never released back to the + * system. Fortunately, a system should probably only need 1 or 2 bucket + * descriptor pages, since a page can hold 256 bucket descriptors (which + * corresponds to 1 megabyte worth of bucket pages.) If the kernel is using + * that much allocated memory, it's probably doing something wrong. :-) + * + * Note: malloc() and free() both call get_free_page() and free_page() + * in sections of code where interrupts are turned off, to allow + * malloc() and free() to be safely called from an interrupt routine. + * (We will probably need this functionality when networking code, + * particularily things like NFS, is added to Linux.) However, this + * presumes that get_free_page() and free_page() are interrupt-level + * safe, which they may not be once paging is added. If this is the + * case, we will need to modify malloc() to keep a few unused pages + * "pre-allocated" so that it can safely draw upon those pages if + * it is called from an interrupt routine. + * + * Another concern is that get_free_page() should not sleep; if it + * does, the code is carefully ordered so as to avoid any race + * conditions. The catch is that if malloc() is called re-entrantly, + * there is a chance that unecessary pages will be grabbed from the + * system. Except for the pages for the bucket descriptor page, the + * extra pages will eventually get released back to the system, though, + * so it isn't all that bad. + */ + +#include +#include +#include + +struct bucket_desc { /* 16 bytes */ + void *page; + struct bucket_desc *next; + void *freeptr; + unsigned short refcnt; + unsigned short bucket_size; +}; + +struct _bucket_dir { /* 8 bytes */ + int size; + struct bucket_desc *chain; +}; + +/* + * The following is the where we store a pointer to the first bucket + * descriptor for a given size. + * + * If it turns out that the Linux kernel allocates a lot of objects of a + * specific size, then we may want to add that specific size to this list, + * since that will allow the memory to be allocated more efficiently. + * However, since an entire page must be dedicated to each specific size + * on this list, some amount of temperance must be exercised here. + * + * Note that this list *must* be kept in order. + */ +struct _bucket_dir bucket_dir[] = { + { 16, (struct bucket_desc *) 0}, + { 32, (struct bucket_desc *) 0}, + { 64, (struct bucket_desc *) 0}, + { 128, (struct bucket_desc *) 0}, + { 256, (struct bucket_desc *) 0}, + { 512, (struct bucket_desc *) 0}, + { 1024, (struct bucket_desc *) 0}, + { 2048, (struct bucket_desc *) 0}, + { 4096, (struct bucket_desc *) 0}, + { 0, (struct bucket_desc *) 0}}; /* End of list marker */ + +/* + * This contains a linked list of free bucket descriptor blocks + */ +struct bucket_desc *free_bucket_desc = (struct bucket_desc *) 0; + +/* + * This routine initializes a bucket description page. + */ +static inline void init_bucket_desc() +{ + struct bucket_desc *bdesc, *first; + int i; + + first = bdesc = (struct bucket_desc *) get_free_page(); + if (!bdesc) + panic("Out of memory in init_bucket_desc()"); + for (i = PAGE_SIZE/sizeof(struct bucket_desc); i > 1; i--) { + bdesc->next = bdesc+1; + bdesc++; + } + /* + * This is done last, to avoid race conditions in case + * get_free_page() sleeps and this routine gets called again.... + */ + bdesc->next = free_bucket_desc; + free_bucket_desc = first; +} + +void *malloc(unsigned int len) +{ + struct _bucket_dir *bdir; + struct bucket_desc *bdesc; + void *retval; + + /* + * First we search the bucket_dir to find the right bucket change + * for this request. + */ + for (bdir = bucket_dir; bdir->size; bdir++) + if (bdir->size >= len) + break; + if (!bdir->size) { + printk("malloc called with impossibly large argument (%d)\n", + len); + panic("malloc: bad arg"); + } + /* + * Now we search for a bucket descriptor which has free space + */ + cli(); /* Avoid race conditions */ + for (bdesc = bdir->chain; bdesc; bdesc = bdesc->next) + if (bdesc->freeptr) + break; + /* + * If we didn't find a bucket with free space, then we'll + * allocate a new one. + */ + if (!bdesc) { + char *cp; + int i; + + if (!free_bucket_desc) + init_bucket_desc(); + bdesc = free_bucket_desc; + free_bucket_desc = bdesc->next; + bdesc->refcnt = 0; + bdesc->bucket_size = bdir->size; + bdesc->page = bdesc->freeptr = (void *) (cp = get_free_page()); + if (!cp) + panic("Out of memory in kernel malloc()"); + /* Set up the chain of free objects */ + for (i=PAGE_SIZE/bdir->size; i > 1; i--) { + *((char **) cp) = cp + bdir->size; + cp += bdir->size; + } + *((char **) cp) = 0; + bdesc->next = bdir->chain; /* OK, link it in! */ + bdir->chain = bdesc; + } + retval = (void *) bdesc->freeptr; + bdesc->freeptr = *((void **) retval); + bdesc->refcnt++; + sti(); /* OK, we're safe again */ + return(retval); +} + +/* + * Here is the free routine. If you know the size of the object that you + * are freeing, then free_s() will use that information to speed up the + * search for the bucket descriptor. + * + * We will #define a macro so that "free(x)" is becomes "free_s(x, 0)" + */ +void free_s(void *obj, int size) +{ + void *page; + struct _bucket_dir *bdir; + struct bucket_desc *bdesc, *prev; + + /* Calculate what page this object lives in */ + page = (void *) ((unsigned long) obj & 0xfffff000); + /* Now search the buckets looking for that page */ + for (bdir = bucket_dir; bdir->size; bdir++) { + prev = 0; + /* If size is zero then this conditional is always false */ + if (bdir->size < size) + continue; + for (bdesc = bdir->chain; bdesc; bdesc = bdesc->next) { + if (bdesc->page == page) + goto found; + prev = bdesc; + } + } + panic("Bad address passed to kernel free_s()"); +found: + cli(); /* To avoid race conditions */ + *((void **)obj) = bdesc->freeptr; + bdesc->freeptr = obj; + bdesc->refcnt--; + if (bdesc->refcnt == 0) { + /* + * We need to make sure that prev is still accurate. It + * may not be, if someone rudely interrupted us.... + */ + if ((prev && (prev->next != bdesc)) || + (!prev && (bdir->chain != bdesc))) + for (prev = bdir->chain; prev; prev = prev->next) + if (prev->next == bdesc) + break; + if (prev) + prev->next = bdesc->next; + else { + if (bdir->chain != bdesc) + panic("malloc bucket chains corrupted"); + bdir->chain = bdesc->next; + } + free_page((unsigned long) bdesc->page); + bdesc->next = free_bucket_desc; + free_bucket_desc = bdesc; + } + sti(); + return; +} + diff --git a/linux-0.11-lab/cur/linux/lib/malloc.o b/linux-0.11-lab/cur/linux/lib/malloc.o new file mode 100644 index 0000000000000000000000000000000000000000..83667757057ff0915c7c4ad6ae9f4d0c0160ea5d GIT binary patch literal 4880 zcma)AS!`Ta89sOBdNTId@?Fn#g3%ipE_#~_of1bL9E?Nob`ab!I zi+!(7T-}TyePri5q3N3vn|36JywH3rg7ig|=;VdqFN>4|Y6uD0$b_k=Ozh-m4gGIv zI%LD9cRm58cWNkl@`4|l?@)}?Ahli*ydk0WLLZY-Bqxr*atWsx2y&Iz zQ1g(^z4->@t0pdP##;1&99S)`$%Svb1UW~T9|qN>$66&9Xz+Mw{to(0$ucMAd%z^5 zsx45e1P1PsQe}d~6C!wxTZ1Ve4odw4tl?9LEbGU0OQ?zs$Z02#;(*FHF*VeDKiCAS z-K?TEkDk2Hdh$HH5xPtGEf9AhAMBq*z}?ygU-|`*FUMK ztQwMHeY;T9`P+36j^gt$ylB#2GF+vqk9thnNjbH}1CY=vxtnf0Gl3(3^_R`jIHd8* z8W#_1NDFL@QH>^mWin7}?XuCyX7W@C@xE~mx?b5WIx02> zLEA>-eBN_wHK&@X)i9V}akSy6=ei>`X{hs2NjkalOrczJauv@Ds=k{SJ(#+hwQa3M zSSyK3=UF}9VptKO1z?*sSO$bsFtF|*DZ*bMeP}EFgIxg~u_Au} z6Mq+-b?$9Q4&$><&7*IwWFLi44Io-&J8t<=Zfh zuznSU0PRfU2DBaQ8kyeDA?b9`Sr0OU2D#py6BO)cJS7lTyR|yr84Jf(#@nrqNZYL_ zL8ldt$6^~}n_^ZcR;)#Y<79SrZouN(ts(|!Anb%Xk_5380fbngNgT0g8Zqd^phJo0 zwskX9Cju zNweIX?UuE(lL>Y7h@GANm`>+XX7_Z{UhooUY0ViTWeyGLH}QqUZRjoQM!W^R{I!7S zmOl0A9PLml87BOOu!f?Y!K?_`p&53U+3iDTMRrAw%}qZTZrnUG+b0DNM^4W~x4zOd zcUJLdB42u8`jP3`nak1Z!OL`vZdvM2=^#gDF8}!K-1VLZ!cDuj{c`4s+5WlN{u5Gp zCQ_03a3mc2&dZ2<{T<2s=tIAV1aot9W~9TxTXVCoU7q`DPfy6kyhbZQIWKC3$6VpL zqd6SdEH6aCo2cr0!d#LCPu%yZhn(%sV0uG(&`FgtUT%C#;S(F~bW&qZYP3=+_^DAZ zQ*u+)3eLUjL0Bjk3uQMo8kBQ>p@RD>HCnEuYJMhnFje&`zMJzao*b(FG8X;gm6F?E z4)T6~rIsqYhx-vGIFcGjuUnTYX0rVQN`O9#bdehK_m5UN2mer}C~#eR;^s?UEDiz> zb<-|Rk5iU+tf-AwJl_e*wZd2#cQdarbroa9tC=y^xX6-KJ@=4UW;)r#jsR(Dn0prXBggk@H{;7>{|~kFP%76)3yw1cv>#(bDMt54>`qijVOamt&f}2U75-!=og0Gw}>>uwHJ9zw?*k zVq5;#Fyq&cK;Fz+xr9Z7Fy$*i6k1kU+M82p?76~AExfF9wCBn%wXkSeVnBsu1(rl% zS&4c+F3&k7!}!|a@iDDt=IzM;F3l5I$9r$$9{|s}@Luh}eD>U=e+0a_Td6;AlYZ&d zc;7oz_om8c$nboG#_$)36w0@znkg4@I+Cb*c#IC3mutyL?S&9F)`yXU)gZ)2fg$X_ z&ydIDG8(HyY@X+dusaJ3VMD#B`IpGU@1Nx1XJhWfE{*Ge9Ov`o;eUWU>>IIB8MjD; z{EI-!*J9g{9{`fyP5gimdniZTtVZq*-Z%J91Yu$6c}9r*KN4a$5ixs+*l1i!%GYb$ zs&SV_-ci(NHOjjK{NtMcipJ+O{!rr!M2z!_=6|j6ipGCveJkgWcpuWZR^#17_>XAb z( +#include + +int open(const char * filename, int flag, ...) +{ + register int res; + va_list arg; + + va_start(arg,flag); + __asm__("int $0x80" + :"=a" (res) + :"0" (__NR_open),"b" (filename),"c" (flag), + "d" (va_arg(arg,int))); + if (res>=0) + return res; + errno = -res; + return -1; +} diff --git a/linux-0.11-lab/cur/linux/lib/open.o b/linux-0.11-lab/cur/linux/lib/open.o new file mode 100644 index 0000000000000000000000000000000000000000..5490bb1a66d83fe50c3618ad8174bf2457ea739e GIT binary patch literal 2364 zcma)7U1%It6h3!mlHFvJZGQYoNWc+NjXyh^*hNZzY-*w0ediYUg}-Pzs2-I+Ku zThdxJ5(|bXng=O@Z+-5Y4;2K3D!x=ue2EA?2@3k4Pd@lizjN>0?(|6ybMN`R-#z!- zd*{CO%;{%^5Tr?vNj;6|6-#+4lFiaRG)iZ;{}_3HX=Zx+OKWFoW@z^`L~v^t-S%(R z?#PWkMDM;dGx6=#&dn=7ZCX3~zZZA*|K7jGC^v3{w!a#A@#ZaP3f~e_kVO&Q4jR+4 zVq{o3jx(&jU%^bP&kqtZjNGSe6#3VsFZZ+5`hNtoVrg>G_gT-O??)q1IK&LZz~Yn7 z(C0W$QDD*7que)A<1k~-$`3?dOk$W-adyCsnn>@w^d-Rk0@5IZ7w$!8elNkrs5n?0 zFPO!t;;0zwAGse$GgK%%1rvf&F^?4QBeQseG_~KBTHg7!yQ!G#aRonO7)m8+?cur2uP+ePZ(1B;uyg3^ZMAmUMMlei_Z61@uDv zQyfMw4+M^ZaGbIq)Y{#;M-*;&fm1^i#Yr9Ya9Vs)x`7W>$yke=$1I4o>#IN9T3Ok9 z!RP}X52c3R_5!!#X&^6(f{;$FowFD1igVbh*rkpe)mq2>Lx-QVOHI4f2s?gKYD5@R z+6b}lUIe2bwEe&)sirx3+{RwnIXT}Zw6l7uC?5V z%B`^Dm4j|QDTi?xINi*LD(bGa;w$CN4SEI3|aU zb+6iOuKPhFgiFe9wHkRBvR*fGgC$vkM_@gpHbvo`!8mC=bdSg-p$1#13# + +_syscall0(pid_t,setsid) diff --git a/linux-0.11-lab/cur/linux/lib/setsid.o b/linux-0.11-lab/cur/linux/lib/setsid.o new file mode 100644 index 0000000000000000000000000000000000000000..6f70845664bc088cc44b4a210388e0127e8923b0 GIT binary patch literal 2244 zcma)7&2Jk;6o0e3vD4T!&If6%6tSRGgpXY()T*jd+NuHCN~oYp<%X=ay|!1ecf)=_ zQX)W#kXm}G1VSKg<-iq*Lxs4(l>;~a0WOdOZ~+OV@_Vy0_EsF=$@9KHX5RD6zWd_K zF9{(?gCLWp649ZVTUwH=(-O_o!D0R0MabX3ck6|<>cRe6m3B+F!TwTb{Kt=X+4ZPg9t^zoTbunc+?Sct!BM}g&BFb(0l%^>WKvYy{e_7a+ki1O1U=(%0a zknZjHi96&0W?_(|J@B&PjKt;<^xv>VY1RfY`o9|%iezCD3_`zWbDJmGa)y#&6sPtB zE;~W5osu8NVMLd%UbnaGmV4T5+0NLDyTj*$lc!JF&cJs1(Ktw*e(a5XXD32(KZY_0 zM?vU2{VeRJK@=uXg^`n_UU%EsiKEo-rcq4ocI+oOgW6el=*2XO!a=^r;D*m9rRFdi z`^_-xrOha5B5$_qY`B}7&dBRDyIGv8fIB2J(50=dGxqxRP8OzFzH8^%OiG*YY_{Bu z)|0swtz6=M0>q7LB=%>;YSprCqOYvyK{CkUZPk{xYxsM+$=*2iI-qHs)1l^Kf8?hA zZc1*?OFeQs2}a1up5Ms^?I7$&FiGC)bYlO_qScGNaDZkM0=R=Z05!<%M&q%M>A4{q z=wc{&L-QDa*p@@c_xykGqj2IkproAn?ic^4Y-3o(IwH9oE#ZdXM+;c&!ddeS5Q30#NQb1OC5`A7W4fL zKfL!7(D^0`#T4}x{dT`-fAA~G`HK};=IT>0 diff --git a/linux-0.11-lab/cur/linux/lib/string.o b/linux-0.11-lab/cur/linux/lib/string.o new file mode 100644 index 0000000000000000000000000000000000000000..840f038b2beb337cf418b004cd61fe5f8badc3b6 GIT binary patch literal 6380 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 b$T5+-MNW%6E;57|# +#include + +_syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options) + +pid_t wait(int * wait_stat) +{ + return waitpid(-1,wait_stat,0); +} diff --git a/linux-0.11-lab/cur/linux/lib/wait.o b/linux-0.11-lab/cur/linux/lib/wait.o new file mode 100644 index 0000000000000000000000000000000000000000..b60510b4f0d32d080f741fe9a4f116ed854eece0 GIT binary patch literal 2580 zcma)8O^6&t6t3#-nVszHPG%ELc1geyCm1!;lQoNmm|r&nd#jb-05Ds zd-BKP4~t;fQ$P(uZXtLQ1wn#G6Nnd);KhR%J^2&CpMyvi;`dco?Q}rU2lc-9Q}4a1 zSJgH1#uG=Llu`;qQrKdk3GthgdZrX?6?cg-@!ZnQ^74`D<|{)mF27tIUw*z?`RdJc z2dg7Xi`5ZvI=>9@mooWZ-(F(mmD`}DYvmJHmu`++KUgi$2!9zt&UL3s_m3-T&dAlD z;7iLoas;yc8*CASG^4l>mNWDdhDym#+_s(hQlVlR!%x1()(xX%t-DG2ATay7g|*n(w#$dVD4p z167DqUN>=DOp%;f@ME{btJn{^angpY>g5!-hvm~aQ<*P(39x4W$e-9#_{efl$B&{Q z6gbC5A`TrrUYV{;xjWsdO0DNbt<07Q zz^~2rgI3ZFgBYeDti_4fdbPF?g^Axv!bq*N0b_#2#of8UZ&z9!FB0`m*z@Z_zn#>> zxQRF%!UJG6AR|+*a7@`Dlh4 z;FMgPe0pkWjNfUfljdUoAKim#XocXrLgM>3LqQXLq)ixWl$5e!LF+O%% zv~B}Q@20TIO}>X<;r#!a$Mu*PCSkr`DQGgj?a;I9+YRLt*totNhFRZ!$R-A&cnivB z6f_y%G3Z97>rs4<6$+Y+kDq?F?#)bJxIa_Zhiqb);zi^;OF@(IdC;@@R-iBs_c4rN z^1TL`G2A!l2Hy*lM2l1xwY)kH4Sx_eL!86$wnk&WWe!FgOzIExJoP+5UctO)O%Ral zBfW=_-G_t4mto^R)?%1_j6u$pIs(Tf*bJGvL{pQ#GMfS;UUV^v!FfZ(u;Sz%OKm zY}LVm!A1wz4iew7b!ZHGVTkeu4D(w}zj;Ra2=o0-e@@hsEb5pmQSv3Ah34{YkYMUR z3i`=2lfb(*@`qC5aPB2yAzQUw<-t7l4FjLj_GdJ{pz#%rO^x$J!Q9@7MSbYi>F| literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/lib/write.c b/linux-0.11-lab/cur/linux/lib/write.c new file mode 100644 index 0000000..df52e74 --- /dev/null +++ b/linux-0.11-lab/cur/linux/lib/write.c @@ -0,0 +1,10 @@ +/* + * linux/lib/write.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include + +_syscall3(int,write,int,fd,const char *,buf,off_t,count) diff --git a/linux-0.11-lab/cur/linux/lib/write.o b/linux-0.11-lab/cur/linux/lib/write.o new file mode 100644 index 0000000000000000000000000000000000000000..34f41463fb65e3f733570df99f7edda9cb1b4527 GIT binary patch literal 2376 zcma)7OK%%h6h3!m{79U-c@#*LN(_<<;W6WcS||#Xrle4Us#YqL1r%9hdmIngGwD3q zq>2D3LTVKj&4QQ229;mH0%d{Nv`DZ3i4~RDuwny3z=lN^N?;LN?dfbCo3uiyLzT3XW(laR%)AR9o2V<{ueD18M{GYUU}=|;ix zW74z|*V07!O)yzQGoO%Qr5~iD_#If`OAs-76qJEWich})Ep|JZUE8H%E9pXGyS8hT ziX1iiqSVUeU!*2W@5VG@>_H!W4Wu##qW>ssiwSY0I#toDv(*VPSsZ@=m1)E-cNdUsq%DXbqc$)#qpU`ePm{JiZhp|KYDIPz*j7gUQPqGX`&L;ERWT4;~sV7 zAlBlFqYo3a%Fum$=9wAn^Ds~Ys(!Pi8q9JC)aWdz5O=BvK;=Ea^o4ELJ-^*gI&MAM zjA*D5T@Jn2wcA`E-duMhyT|t>@x3VSK$Z&@B-Ka6OBkUjmcIqlx_@g0tPym(&6wIj zf{D6e=m&J_%z1OgY}ku-!?XrY*zO(kjxIiBT5G1&4F+Cpbwg+1TI&IBfg8f;`F+oK zt#0DCV=wR{nEb$sVyFF^NY*_R5 z!h+RzTJ?4krY6u9MZF-5&HZ$~d-Bx7ifocqBkzjKZJ>VOubFIaHbXZWcInj0%91&E zzJ=o^=^3pj6R9n{z0k1d8;_<|?&l#U0CD9UiLJ7j9W#upXf6+ukwFgdM76xFtyHHk zSIZ}ERt>VF%|Yz6z~eCGJtc*1-;UjlnCy-dJ7l*ajFXKWx0S3lJ--{kC1t183f)V2 zuM;}{8cvf-;Kr*2tU-1=7z|vT+xF3S8?#L3kmk6(rkq{6_y0p5L=e9}{D)-VcPD>o z*~c&o9FbB=uH%n}AIT>LoSz5Qj{rGG2Qpkt**;bE9*2eF|0|C7qjI$21LZpdJ-_Z8lyTU2T|S>$ z*M+QdAkrNumsrR^`5fr^dW%rF4%Zt6s(Rc9&f#-2T*MRbM=DCnKE|z#tGFf_{+NtN ziHdtKi&L&^YA~6B;}|{xvYbA2MDHVRksTTE{un+0=FhR5JI6uz)Hx;~=a;$#|->^d~r8VmbiidfazjGhc55&ASga1*)FX70=rZ`s=Q;Gr#u>&3b+X*43%g zEM4BXVFjJA*&OI{qC}1lOSd3&3v@vj6}9 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/mm/Makefile b/linux-0.11-lab/cur/linux/mm/Makefile new file mode 100644 index 0000000..e0bcd73 --- /dev/null +++ b/linux-0.11-lab/cur/linux/mm/Makefile @@ -0,0 +1,38 @@ +AR =ar +AS =as +LD =ld +LDFLAGS =-m elf_i386 -Ttext 0 -e startup_32 +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -finline-functions -nostdinc -fno-stack-protector -I../include +CPP =gcc -E -nostdinc -I../include + +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< +.s.o: + $(AS) -o $*.o $< +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< + +OBJS = memory.o page.o + +all: mm.o + +mm.o: $(OBJS) + $(LD) -r -o mm.o $(OBJS) + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +memory.o : memory.c ../include/signal.h ../include/sys/types.h \ + ../include/asm/system.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/linux/mm.h ../include/linux/kernel.h diff --git a/linux-0.11-lab/cur/linux/mm/memory.c b/linux-0.11-lab/cur/linux/mm/memory.c new file mode 100644 index 0000000..32a7a99 --- /dev/null +++ b/linux-0.11-lab/cur/linux/mm/memory.c @@ -0,0 +1,466 @@ +/* + * linux/mm/memory.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * demand-loading started 01.12.91 - seems it is high on the list of + * things wanted, and it should be easy to implement. - Linus + */ + +/* + * Ok, demand-loading was easy, shared pages a little bit tricker. Shared + * pages started 02.12.91, seems to work. - Linus. + * + * Tested sharing by executing about 30 /bin/sh: under the old kernel it + * would have taken more than the 6M I have free, but it worked well as + * far as I could see. + * + * Also corrected some "invalidate()"s - I wasn't doing enough of them. + */ + +#include + +#include + +#include +#include +#include + +volatile void do_exit(long code); + +static inline volatile void oom(void) +{ + printk("out of memory\n\r"); + do_exit(SIGSEGV); +} + +#define invalidate() \ +__asm__("movl %%eax,%%cr3"::"a" (0)) + +/* these are not to be changed without changing head.s etc */ +#define LOW_MEM 0x100000 +#define PAGING_MEMORY (15*1024*1024) +#define PAGING_PAGES (PAGING_MEMORY>>12) +#define MAP_NR(addr) (((addr)-LOW_MEM)>>12) +#define USED 100 + +#define CODE_SPACE(addr) ((((addr)+4095)&~4095) < \ +current->start_code + current->end_code) + +static long HIGH_MEMORY = 0; + +#define copy_page(from,to) \ +__asm__("cld ; rep ; movsl"::"S" (from),"D" (to),"c" (1024)) + +static unsigned char mem_map [ PAGING_PAGES ] = {0,}; + +/* + * Get physical address of first (actually last :-) free page, and mark it + * used. If no free pages left, return 0. + */ +unsigned long get_free_page(void) +{ +register unsigned long __res asm("ax"); + +__asm__("std ; repne ; scasb\n\t" + "jne 1f\n\t" + "movb $1,1(%%edi)\n\t" + "sall $12,%%ecx\n\t" + "addl %2,%%ecx\n\t" + "movl %%ecx,%%edx\n\t" + "movl $1024,%%ecx\n\t" + "leal 4092(%%edx),%%edi\n\t" + "rep ; stosl\n\t" + "movl %%edx,%%eax\n\t" + "1:" + "cld\n\t" /* by wyj */ + :"=a" (__res) + :"0" (0),"i" (LOW_MEM),"c" (PAGING_PAGES), + "D" (mem_map+PAGING_PAGES-1) + ); +return __res; +} + +/* + * Free a page of memory at physical address 'addr'. Used by + * 'free_page_tables()' + */ +void free_page(unsigned long addr) +{ + if (addr < LOW_MEM) return; + if (addr >= HIGH_MEMORY) + panic("trying to free nonexistent page"); + addr -= LOW_MEM; + addr >>= 12; + if (mem_map[addr]--) return; + mem_map[addr]=0; + panic("trying to free free page"); +} + +/* + * This function frees a continuos block of page tables, as needed + * by 'exit()'. As does copy_page_tables(), this handles only 4Mb blocks. + */ +int free_page_tables(unsigned long from,unsigned long size) +{ + unsigned long *pg_table; + unsigned long * dir, nr; + + if (from & 0x3fffff) + panic("free_page_tables called with wrong alignment"); + if (!from) + panic("Trying to free up swapper memory space"); + size = (size + 0x3fffff) >> 22; + dir = (unsigned long *) ((from>>20) & 0xffc); /* _pg_dir = 0 */ + for ( ; size-->0 ; dir++) { + if (!(1 & *dir)) + continue; + pg_table = (unsigned long *) (0xfffff000 & *dir); + for (nr=0 ; nr<1024 ; nr++) { + if (1 & *pg_table) + free_page(0xfffff000 & *pg_table); + *pg_table = 0; + pg_table++; + } + free_page(0xfffff000 & *dir); + *dir = 0; + } + invalidate(); + return 0; +} + +/* + * Well, here is one of the most complicated functions in mm. It + * copies a range of linerar addresses by copying only the pages. + * Let's hope this is bug-free, 'cause this one I don't want to debug :-) + * + * Note! We don't copy just any chunks of memory - addresses have to + * be divisible by 4Mb (one page-directory entry), as this makes the + * function easier. It's used only by fork anyway. + * + * NOTE 2!! When from==0 we are copying kernel space for the first + * fork(). Then we DONT want to copy a full page-directory entry, as + * that would lead to some serious memory waste - we just copy the + * first 160 pages - 640kB. Even that is more than we need, but it + * doesn't take any more memory - we don't copy-on-write in the low + * 1 Mb-range, so the pages can be shared with the kernel. Thus the + * special case for nr=xxxx. + */ +int copy_page_tables(unsigned long from,unsigned long to,long size) +{ + unsigned long * from_page_table; + unsigned long * to_page_table; + unsigned long this_page; + unsigned long * from_dir, * to_dir; + unsigned long nr; + + if ((from&0x3fffff) || (to&0x3fffff)) + panic("copy_page_tables called with wrong alignment"); + from_dir = (unsigned long *) ((from>>20) & 0xffc); /* _pg_dir = 0 */ + to_dir = (unsigned long *) ((to>>20) & 0xffc); + size = ((unsigned) (size+0x3fffff)) >> 22; + for( ; size-->0 ; from_dir++,to_dir++) { + if (1 & *to_dir) + panic("copy_page_tables: already exist"); + if (!(1 & *from_dir)) + continue; + from_page_table = (unsigned long *) (0xfffff000 & *from_dir); + if (!(to_page_table = (unsigned long *) get_free_page())) + return -1; /* Out of memory, see freeing */ + *to_dir = ((unsigned long) to_page_table) | 7; + nr = (from==0)?0xA0:1024; + for ( ; nr-- > 0 ; from_page_table++,to_page_table++) { + this_page = *from_page_table; + if (!(1 & this_page)) + continue; + this_page &= ~2; + *to_page_table = this_page; + if (this_page > LOW_MEM) { + *from_page_table = this_page; + this_page -= LOW_MEM; + this_page >>= 12; + mem_map[this_page]++; + } + } + } + invalidate(); + return 0; +} + +/* + * This function puts a page in memory at the wanted address. + * It returns the physical address of the page gotten, 0 if + * out of memory (either when trying to access page-table or + * page.) + */ +unsigned long put_page(unsigned long page,unsigned long address) +{ + unsigned long tmp, *page_table; + +/* NOTE !!! This uses the fact that _pg_dir=0 */ + + if (page < LOW_MEM || page >= HIGH_MEMORY) + printk("Trying to put page %p at %p\n",page,address); + if (mem_map[(page-LOW_MEM)>>12] != 1) + printk("mem_map disagrees with %p at %p\n",page,address); + page_table = (unsigned long *) ((address>>20) & 0xffc); + if ((*page_table)&1) + page_table = (unsigned long *) (0xfffff000 & *page_table); + else { + if (!(tmp=get_free_page())) + return 0; + *page_table = tmp|7; + page_table = (unsigned long *) tmp; + } + page_table[(address>>12) & 0x3ff] = page | 7; +/* no need for invalidate */ + return page; +} + +void un_wp_page(unsigned long * table_entry) +{ + unsigned long old_page,new_page; + + old_page = 0xfffff000 & *table_entry; + if (old_page >= LOW_MEM && mem_map[MAP_NR(old_page)]==1) { + *table_entry |= 2; + invalidate(); + return; + } + if (!(new_page=get_free_page())) + oom(); + if (old_page >= LOW_MEM) + mem_map[MAP_NR(old_page)]--; + *table_entry = new_page | 7; + invalidate(); + copy_page(old_page,new_page); +} + +/* + * This routine handles present pages, when users try to write + * to a shared page. It is done by copying the page to a new address + * and decrementing the shared-page counter for the old page. + * + * If it's in code space we exit with a segment error. + */ +void do_wp_page(unsigned long error_code,unsigned long address) +{ +#if 0 +/* we cannot do this yet: the estdio library writes to code space */ +/* stupid, stupid. I really want the libc.a from GNU */ + if (CODE_SPACE(address)) + do_exit(SIGSEGV); +#endif + un_wp_page((unsigned long *) + (((address>>10) & 0xffc) + (0xfffff000 & + *((unsigned long *) ((address>>20) &0xffc))))); + +} + +void write_verify(unsigned long address) +{ + unsigned long page; + + if (!( (page = *((unsigned long *) ((address>>20) & 0xffc)) )&1)) + return; + page &= 0xfffff000; + page += ((address>>10) & 0xffc); + if ((3 & *(unsigned long *) page) == 1) /* non-writeable, present */ + un_wp_page((unsigned long *) page); + return; +} + +void get_empty_page(unsigned long address) +{ + unsigned long tmp; + + if (!(tmp=get_free_page()) || !put_page(tmp,address)) { + free_page(tmp); /* 0 is ok - ignored */ + oom(); + } +} + +/* + * try_to_share() checks the page at address "address" in the task "p", + * to see if it exists, and if it is clean. If so, share it with the current + * task. + * + * NOTE! This assumes we have checked that p != current, and that they + * share the same executable. + */ +static int try_to_share(unsigned long address, struct task_struct * p) +{ + unsigned long from; + unsigned long to; + unsigned long from_page; + unsigned long to_page; + unsigned long phys_addr; + + from_page = to_page = ((address>>20) & 0xffc); + from_page += ((p->start_code>>20) & 0xffc); + to_page += ((current->start_code>>20) & 0xffc); +/* is there a page-directory at from? */ + from = *(unsigned long *) from_page; + if (!(from & 1)) + return 0; + from &= 0xfffff000; + from_page = from + ((address>>10) & 0xffc); + phys_addr = *(unsigned long *) from_page; +/* is the page clean and present? */ + if ((phys_addr & 0x41) != 0x01) + return 0; + phys_addr &= 0xfffff000; + if (phys_addr >= HIGH_MEMORY || phys_addr < LOW_MEM) + return 0; + to = *(unsigned long *) to_page; + if (!(to & 1)) + if (to = get_free_page()) + *(unsigned long *) to_page = to | 7; + else + oom(); + to &= 0xfffff000; + to_page = to + ((address>>10) & 0xffc); + if (1 & *(unsigned long *) to_page) + panic("try_to_share: to_page already exists"); +/* share them: write-protect */ + *(unsigned long *) from_page &= ~2; + *(unsigned long *) to_page = *(unsigned long *) from_page; + invalidate(); + phys_addr -= LOW_MEM; + phys_addr >>= 12; + mem_map[phys_addr]++; + return 1; +} + +/* + * share_page() tries to find a process that could share a page with + * the current one. Address is the address of the wanted page relative + * to the current data space. + * + * We first check if it is at all feasible by checking executable->i_count. + * It should be >1 if there are other tasks sharing this inode. + */ +static int share_page(unsigned long address) +{ + struct task_struct ** p; + + if (!current->executable) + return 0; + if (current->executable->i_count < 2) + return 0; + for (p = &LAST_TASK ; p > &FIRST_TASK ; --p) { + if (!*p) + continue; + if (current == *p) + continue; + if ((*p)->executable != current->executable) + continue; + if (try_to_share(address,*p)) + return 1; + } + return 0; +} + +void do_no_page(unsigned long error_code,unsigned long address) +{ + int nr[4]; + unsigned long tmp; + unsigned long page; + int block,i; + + if (current->pid > 5) + printk(" --do_no_page: address=%x, pid=%d\n", address, current->pid); + + address &= 0xfffff000; + tmp = address - current->start_code; + if (!current->executable || tmp >= current->end_data) { + get_empty_page(address); + return; + } + if (share_page(tmp)) + return; + if (!(page = get_free_page())) + oom(); +/* remember that 1 block is used for header */ + block = 1 + tmp/BLOCK_SIZE; + for (i=0 ; i<4 ; block++,i++) + nr[i] = bmap(current->executable,block); + bread_page(page,current->executable->i_dev,nr); + i = tmp + 4096 - current->end_data; + tmp = page + 4096; + while (i-- > 0) { + tmp--; + *(char *)tmp = 0; + } + if (put_page(page,address)) + return; + free_page(page); + oom(); +} +void load_all(unsigned long error_code,unsigned long address) +{ + int nr[4]; + unsigned long tmp; + unsigned long page; + int block,i; + + address &= 0xfffff000; + tmp = address - current->start_code; + if (!current->executable || tmp >= current->end_data) { + get_empty_page(address); + return; + } + if (share_page(tmp)) + return; + if (!(page = get_free_page())) + oom(); +/* remember that 1 block is used for header */ + block = 1 + tmp/BLOCK_SIZE; + for (i=0 ; i<4 ; block++,i++) + nr[i] = bmap(current->executable,block); + bread_page(page,current->executable->i_dev,nr); + i = tmp + 4096 - current->end_data; + tmp = page + 4096; + while (i-- > 0) { + tmp--; + *(char *)tmp = 0; + } + if (put_page(page,address)) + return; + free_page(page); + oom(); +} +void mem_init(long start_mem, long end_mem) +{ + int i; + + HIGH_MEMORY = end_mem; + for (i=0 ; i>= 12; + while (end_mem-->0) + mem_map[i++]=0; +} + +void calc_mem(void) +{ + int i,j,k,free=0; + long * pg_tbl; + + for(i=0 ; ic5C<4R^^C=##-If*4=8ezu$eIcQV25 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 V>I~--A3Lr4*wJYR`&x3K@}JNJF^2#E literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/mm/page.o b/linux-0.11-lab/cur/linux/mm/page.o new file mode 100644 index 0000000000000000000000000000000000000000..da4852668a6d8b88d91c428ae8572bb3d4d2090d GIT binary patch literal 640 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 N^|Cbi(V*L${{d;jp)>#h literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/cur/linux/tools/build.c b/linux-0.11-lab/cur/linux/tools/build.c new file mode 100644 index 0000000..8b8c7ab --- /dev/null +++ b/linux-0.11-lab/cur/linux/tools/build.c @@ -0,0 +1,171 @@ +/* + * linux/tools/build.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This file builds a disk-image from three different files: + * + * - bootsect: max 510 bytes of 8086 machine code, loads the rest + * - setup: max 4 sectors of 8086 machine code, sets up system parm + * - system: 80386 code for actual system + * + * It does some checking that all files are of the correct type, and + * just writes the result to stdout, removing headers and padding to + * the right amount. It also writes some system data to stderr. + */ + +/* + * Changes by tytso to allow root device specification + */ + +#include /* fprintf */ +#include +#include /* contains exit */ +#include /* unistd.h needs this */ +#include +#include +#include /* contains read/write */ +#include + +#define MAJOR(a) (((unsigned)(a))>>8) +#define MINOR(a) ((a)&0xff) + +#define MINIX_HEADER 32 +#define GCC_HEADER 0x80 /* 0x1000 */ /* by wyj */ + +#define SYS_SIZE 0x3000 + +#define DEFAULT_MAJOR_ROOT 0x03 //0x02 /* by wyj */ +#define DEFAULT_MINOR_ROOT 0x00 //0x1d + +/* max nr of sectors of setup: don't change unless you also change + * bootsect etc */ +#define SETUP_SECTS 4 + +#define STRINGIFY(x) #x + +void die(char * str) +{ + fprintf(stderr,"%s\n",str); + exit(1); +} + +void usage(void) +{ + die("Usage: build bootsect setup system [rootdev] [> image]"); +} + +int main(int argc, char ** argv) +{ + int i,c,id; + char buf[1024*4]; /* by wyj */ + char major_root, minor_root; + struct stat sb; + + if ((argc != 4) && (argc != 5)) + usage(); + if (argc == 5) { + if (strcmp(argv[4], "FLOPPY")) { + if (stat(argv[4], &sb)) { + perror(argv[4]); + die("Couldn't stat root device."); + } + major_root = MAJOR(sb.st_rdev); + minor_root = MINOR(sb.st_rdev); + } else { + major_root = 0; + minor_root = 0; + } + } else { + major_root = DEFAULT_MAJOR_ROOT; + minor_root = DEFAULT_MINOR_ROOT; + } + fprintf(stderr, "Root device is (%d, %d)\n", major_root, minor_root); + if ((major_root != 2) && (major_root != 3) && + (major_root != 0)) { + fprintf(stderr, "Illegal root device (major = %d)\n", + major_root); + die("Bad root device --- major #"); + } + for (i=0;i0 ; i+=c ) + if (write(1,buf,c)!=c) + die("Write call failed"); + close (id); + if (i > SETUP_SECTS*512) + die("Setup exceeds " STRINGIFY(SETUP_SECTS) + " sectors - rewrite build/boot/setup"); + fprintf(stderr,"Setup is %d bytes.\n",i); + for (c=0 ; c sizeof(buf)) + c = sizeof(buf); + if (write(1,buf,c) != c) + die("Write call failed"); + i += c; + } + + if ((id=open(argv[3],O_RDONLY,0))<0) + die("Unable to open 'system'"); + if (read(id,buf,GCC_HEADER) != GCC_HEADER) + die("Unable to read header of 'system'"); +// if (((long *) buf)[5] != 0) +// die("Non-GCC header of 'system'"); + for (i=0 ; (c=read(id,buf,sizeof buf))>0 ; i+=c ) + if (write(1,buf,c)!=c) + die("Write call failed"); + close(id); + fprintf(stderr,"System is %d bytes.\n",i); + if (i > SYS_SIZE*16) + die("System is too big"); + return(0); +} diff --git a/linux-0.11-lab/cur/linux/tools/system b/linux-0.11-lab/cur/linux/tools/system new file mode 100644 index 0000000000000000000000000000000000000000..8b17e336b01baf6995caec561aeb9a84a04f8605 GIT binary patch literal 297648 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 Cri=yv literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/Makefile b/linux-0.11-lab/4/linux/Makefile new file mode 100644 index 0000000..ecbcf30 --- /dev/null +++ b/linux-0.11-lab/4/linux/Makefile @@ -0,0 +1,125 @@ +# +# if you want the ram-disk device, define this to be the +# size in blocks. +# +RAMDISK = #-DRAMDISK=512 + +AS86 =as86 -0 -a +LD86 =ld86 -0 + +AS =as +LD =ld +LDFLAGS =-m elf_i386 -Ttext 0 -e startup_32 -Map=System.map.2 -N +CC =gcc -march=i386 $(RAMDISK) +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -fno-stack-protector -mcld +CPP =cpp -nostdinc -Iinclude + +# +# ROOT_DEV specifies the default root-device when making the image. +# This can be either FLOPPY, /dev/xxxx or empty, in which case the +# default of /dev/hd6 is used by 'build'. +# +ROOT_DEV= + +ARCHIVES=kernel/kernel.o mm/mm.o fs/fs.o +DRIVERS =kernel/blk_drv/blk_drv.a kernel/chr_drv/chr_drv.a +MATH =kernel/math/math.a +LIBS =lib/lib.a + +.c.s: + $(CC) $(CFLAGS) \ + -nostdinc -Iinclude -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -nostdinc -Iinclude -c -o $*.o $< + +all: Image + +Image: boot/bootsect boot/setup tools/system tools/build + cp -f tools/system system.tmp + strip system.tmp + tools/build boot/bootsect boot/setup system.tmp $(ROOT_DEV) > Image + rm -f system.tmp + sync + +disk: Image + dd bs=8192 if=Image of=/dev/PS0 + +tools/build: tools/build.c + $(CC) $(CFLAGS) \ + -o tools/build tools/build.c + +boot/head.o: boot/head.s + +tools/system: boot/head.o init/main.o \ + $(ARCHIVES) $(DRIVERS) $(MATH) $(LIBS) + $(LD) $(LDFLAGS) boot/head.o init/main.o \ + $(ARCHIVES) \ + $(DRIVERS) \ + $(MATH) \ + $(LIBS) \ + -o tools/system + nm tools/system | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw]\)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort >System.map + +kernel/math/math.a: FORCE + (cd kernel/math; make) + +kernel/blk_drv/blk_drv.a: FORCE + (cd kernel/blk_drv; make) + +kernel/chr_drv/chr_drv.a: FORCE + (cd kernel/chr_drv; make) + +kernel/kernel.o: FORCE + (cd kernel; make) + +mm/mm.o: FORCE + (cd mm; make) + +fs/fs.o: FORCE + (cd fs; make) + +lib/lib.a: FORCE + (cd lib; make) + +FORCE: + +boot/setup: boot/setup.s + $(AS86) -o boot/setup.o boot/setup.s + $(LD86) -s -o boot/setup boot/setup.o + +boot/bootsect: boot/bootsect.s + $(AS86) -o boot/bootsect.o boot/bootsect.s + $(LD86) -s -o boot/bootsect boot/bootsect.o + +tmp.s: boot/bootsect.s tools/system + (echo -n "SYSSIZE = (";ls -l tools/system | grep system \ + | cut -c25-31 | tr '\012' ' '; echo "+ 15 ) / 16") > tmp.s + cat boot/bootsect.s >> tmp.s + +clean: + rm -f Image System.map tmp_make core System.map.2 + rm -f boot/bootsect boot/setup + rm -f init/*.o tools/system tools/build boot/*.o + (cd mm;make clean) + (cd fs;make clean) + (cd kernel;make clean) + (cd lib;make clean) + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in init/*.c;do echo -n "init/";$(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + (cd fs; make dep) + (cd kernel; make dep) + (cd mm; make dep) + +### Dependencies: +init/main.o : init/main.c include/unistd.h include/sys/stat.h \ + include/sys/types.h include/sys/times.h include/sys/utsname.h \ + include/utime.h include/time.h include/linux/tty.h include/termios.h \ + include/linux/sched.h include/linux/head.h include/linux/fs.h \ + include/linux/mm.h include/signal.h include/asm/system.h include/asm/io.h \ + include/stddef.h include/stdarg.h include/fcntl.h diff --git a/linux-0.11-lab/4/linux/System.map b/linux-0.11-lab/4/linux/System.map new file mode 100644 index 0000000..5cda5be --- /dev/null +++ b/linux-0.11-lab/4/linux/System.map @@ -0,0 +1,593 @@ +00000000 T pg_dir +00000000 T startup_32 +0000005a t check_x87 +00000073 t setup_idt +00000090 t rp_sidt +000000a3 t setup_gdt +00001000 t pg0 +00002000 t pg1 +00003000 t pg2 +00004000 t pg3 +00005000 T tmp_floppy_area +00005412 t L6 +00005414 t int_msg +00005428 t ignore_int +00005450 t setup_paging +000054ae t idt_descr +000054b6 t gdt_descr +000054c0 T idt +00005cc0 T gdt +000064c0 T fork +000064ef T pause +0000651e T setup +00006555 T sync +00006584 t time_init +00006799 T main +0000690c t printf +0000695b T init +00006bd3 T print_nr +00006c04 T show_task +00006c89 T show_stat +00006ccf T math_state_restore +00006d2d T schedule +00006edf T sys_pause +00006ef5 T sleep_on +00006f54 T interruptible_sleep_on +0000700f T ticks_to_floppy_on +000070da T floppy_on +00007109 T floppy_off +00007119 T do_floppy_timer +00007311 T do_timer +00007400 T sys_alarm +0000747f T sys_getpid +0000748b T sys_getppid +00007497 T sys_getuid +000074a6 T sys_geteuid +000074b6 T sys_getgid +000074c6 T sys_getegid +000074d5 T sys_nice +00007500 T sched_init +0000768d T sys_sleep +000076c0 t bad_sys_call +000076c8 t reschedule +000076d4 T system_call +0000770f t ret_from_sys_call +00007758 T coprocessor_error +0000777a T device_not_available +000077b4 T timer_interrupt +000077ec T sys_execve +000077fc T sys_execve2 +0000780c T sys_fork +00007824 T hd_interrupt +00007860 T floppy_interrupt +00007896 T parallel_interrupt +0000789d t _get_base +000078cf t die +00007ab1 T do_double_fault +00007ad4 T do_general_protection +00007af7 T do_divide_error +00007b1a T do_int3 +00007be2 T do_nmi +00007c05 T do_debug +00007c28 T do_overflow +00007c4b T do_bounds +00007c6e T do_invalid_op +00007c91 T do_device_not_available +00007cb4 T do_coprocessor_segment_overrun +00007cd7 T do_invalid_TSS +00007cfa T do_segment_not_present +00007d1d T do_stack_segment +00007d40 T do_coprocessor_error +00007d74 T do_reserved +00007d97 T trap_init +0000807b T divide_error +00008080 t no_error_code +000080b0 T debug +000080b7 T nmi +000080be T int3 +000080c5 T overflow +000080cc T bounds +000080d3 T invalid_op +000080da T coprocessor_segment_overrun +000080e1 T reserved +000080e8 T irq13 +000080fd T double_fault +00008102 t error_code +00008134 T invalid_TSS +0000813b T segment_not_present +00008142 T stack_segment +00008149 T general_protection +00008150 t _get_base +00008182 T verify_area +000081e9 T copy_mem +00008343 T copy_process +000087f0 T find_empty_process +00008884 T panic +000088bf T printk +00008910 t skip_atoi +0000896b t number +00008bdc T vsprintf +00009068 t get_fs_long +0000907e t put_fs_byte +00009096 t put_fs_long +000090a2 T sys_ftime +000090a8 T sys_break +000090ae T sys_ptrace +000090b4 T sys_stty +000090ba T sys_gtty +000090c0 T sys_rename +000090c6 T sys_prof +000090cc T sys_setregid +00009185 T sys_setgid +0000921c T sys_acct +00009222 T sys_phys +00009228 T sys_lock +0000922e T sys_mpx +00009234 T sys_ulimit +0000923a T sys_time +00009296 T sys_setreuid +00009378 T sys_setuid +0000940d T sys_stime +00009463 T sys_times +00009503 T sys_brk +00009545 T sys_setpgid +0000961e T sys_getpgrp +0000962a T sys_setsid +000096a4 T sys_getgroups +000096aa T sys_setgroups +000096b0 T sys_uname +00009719 T sys_sethostname +0000971f T sys_getrlimit +00009725 T sys_setrlimit +0000972b T sys_getrusage +00009731 T sys_gettimeofday +00009737 T sys_settimeofday +0000973d T sys_umask +00009770 t _get_base +000097a2 t put_fs_long +000097ae T release +00009812 t send_sig +00009891 t kill_session +000098eb T sys_kill +00009a9b t tell_father +00009b25 T do_exit +00009d59 T sys_exit +00009d72 T sys_waitpid +00009f98 t get_fs_byte +00009fa6 t put_fs_byte +00009fbe t put_fs_long +00009fca T sys_sgetmask +00009fd6 T sys_ssetmask +0000a002 T sys_sigpending +0000a008 T sys_sigsuspend +0000a00e t save_old +0000a061 t get_new +0000a0a1 T sys_signal +0000a125 T sys_sigaction +0000a22f T do_signal +0000a41b T kernel_mktime +0000a560 t oom +0000a57f T get_free_page +0000a5bb T free_page +0000a62a T free_page_tables +0000a729 T copy_page_tables +0000a8aa T put_page +0000a996 T un_wp_page +0000aa4e T do_wp_page +0000aad9 T get_empty_page +0000ab19 t try_to_share +0000acab t share_page +0000ad5f T do_no_page +0000aef4 T load_all +0000b056 T mem_init +0000b0ca T calc_mem +0000b1bf T page_fault +0000b1f6 t get_fs_long +0000b20c t put_fs_byte +0000b224 t put_fs_long +0000b230 T sys_ustat +0000b236 T sys_utime +0000b2e3 T sys_access +0000b3bf T sys_chdir +0000b433 T sys_chroot +0000b4a7 T sys_chmod +0000b541 T sys_chown +0000b5bc T sys_open +0000b85f T sys_creat +0000b882 T sys_close +0000b951 t get_subentry +0000baa4 t my_strlen +0000bad9 T sys_getdents +0000bc92 T sys_getcwd +0000bc98 T sys_mmap +0000bc9e T sys_munmap +0000bca4 T sys_clone +0000bcaa T sys_lseek +0000bdc1 T sys_read +0000bfb4 T my_sys_read +0000c1a7 T sys_write +0000c355 t lock_inode +0000c382 t unlock_inode +0000c3a0 T invalidate_inodes +0000c40f T sync_inodes +0000c466 t _bmap +0000c852 T bmap +0000c875 T create_block +0000c898 T iput +0000ca07 T get_empty_inode +0000cb5c T get_pipe_inode +0000cbd1 T iget +0000cd96 t read_inode +0000cfcc T sys_sync +0000d02f T sync_dev +0000d128 T invalidate_buffers +0000d19a T check_disk_change +0000d244 t remove_from_queues +0000d33b t insert_into_queues +0000d400 t find_buffer +0000d468 T get_hash_table +0000d4ea T getblk +0000d688 T brelse +0000d6d1 T bread +0000d756 T bread_page +0000d878 T breada +0000d96d T buffer_init +0000da9c t lock_super +0000dac9 t free_super +0000db0e T get_super +0000db7d T put_super +0000dc50 t read_super +0000df93 T sys_umount +0000e0f4 T sys_mount +0000e265 T mount_root +0000e473 t get_fs_byte +0000e481 t put_fs_byte +0000e499 T block_write +0000e5eb T block_read +0000e716 t get_fs_byte +0000e724 t put_fs_byte +0000e73c t rw_ttyx +0000e784 t rw_tty +0000e7d4 t rw_ram +0000e7da t rw_mem +0000e7e0 t rw_kmem +0000e7e6 t rw_port +0000e880 t rw_memory +0000e956 T rw_char +0000e9c0 t get_fs_byte +0000e9ce t put_fs_byte +0000e9e6 T file_read +0000eb91 T my_file_read +0000ed1c T file_write +0000ef16 t put_fs_byte +0000ef2e t cp_stat +0000f005 T sys_stat +0000f04f T sys_lstat +0000f06a T sys_fstat +0000f0c7 T sys_readlink +0000f0cd t _get_base +0000f0ff t get_fs_byte +0000f10d t get_fs_long +0000f123 t put_fs_byte +0000f13b t put_fs_long +0000f147 t get_fs +0000f15b t get_ds +0000f16f t set_fs +0000f176 T sys_uselib +0000f17c t create_tables +0000f2c7 t count +0000f306 t copy_strings +0000f4c2 t change_ldt +0000f645 T do_execve +000100c7 T do_execve2 +00010b55 t get_fs_byte +00010b63 t put_fs_byte +00010b7b t put_fs_long +00010b87 T read_pipe +00010e5c T sys_pipe +0001105e T sys_pipe2 +00011260 t get_fs_byte +0001126e t permission +0001130f t match +00011377 t find_entry +000117d1 t get_dir +000119be t dir_namei +00011a3d T namei +00011b53 T open_namei +00011ea6 T sys_mknod +000120d6 T sys_mkdir +00012487 t empty_dir +00012665 T sys_rmdir +000129bd T sys_unlink +00012c5e T sys_symlink +00012c64 T sys_link +00012ebe T free_block +00013030 T new_block +000131d4 T free_inode +0001333b T new_inode +00013515 t dupfd +000135ef T sys_dup2 +00013616 T sys_dup +00013631 T sys_fcntl +00013770 T sys_ioctl +00013841 t free_ind +000138e0 t free_dind +0001397f T truncate +00013ab4 T sys_select +00013aba t lock_buffer +00013ae7 t unlock_buffer +00013cd9 t make_request +00013e7d T ll_rw_block +00013ed6 T blk_dev_init +00013f24 t unlock_buffer +00013f59 t end_request +0001400a T floppy_deselect +00014041 T floppy_change +000140c7 t setup_DMA +0001417d t output_byte +000141f3 t result +000142b0 t bad_flp_intr +0001430f t rw_interrupt +000143fe T setup_rw_floppy +000144bf t seek_interrupt +00014518 t transfer +0001464d t recal_interrupt +00014697 T unexpected_floppy_interrupt +000146dc t recalibrate_floppy +0001473e t reset_interrupt +00014783 t reset_floppy +00014800 t floppy_on_interrupt +0001486b t do_fd_request +00014a6f T floppy_init +00014ac1 t unlock_buffer +00014af6 t end_request +00014b95 T sys_setup +00014f48 t controller_ready +00014fdc t hd_out +000150c9 t drive_busy +0001512f t reset_controller +000151ac t reset_hd +00015244 T unexpected_hd_interrupt +00015257 t bad_rw_intr +00015295 t read_intr +000153bb t recal_intr +000153d5 t do_hd_request +000156d6 T hd_init +00015750 t unlock_buffer +00015785 t end_request +00015824 t do_rd_request +0001595a T rd_init +000159b0 T rd_load +00015c5c t get_fs_byte +00015c6a t put_fs_byte +00015c82 T tty_init +00015c93 T tty_intr +00015d07 t sleep_if_empty +00015d3f t sleep_if_full +00015db3 T copy_to_cooked +0001636e T tty_read +000166dc T tty_write +000168ee T do_tty_interrupt +00016916 T chr_dev_init +00016917 t gotoxy +00016965 t set_origin +000169cb t scrup +00016bbb t scrdown +00016cb2 t lf +00016ce8 t ri +00016d1e t cr +00016d3f t del +00016d71 t csi_J +00016e02 t csi_K +00016eb4 T csi_m +00016f1b t set_cursor +00016f81 t respond +00016fd9 t insert_char +0001703c t insert_line +00017080 t delete_char +000170de t delete_line +00017122 t csi_at +00017160 t csi_L +0001719e t csi_P +000171dc t csi_M +0001721a t save_cur +0001722f t restore_cur +0001724e T con_write +000178dc T con_init +00017b13 T sysbeepstop +00017b3c t sysbeep +00017b9a t mode +00017b9b t leds +00017b9c t e0 +00017b9d T keyboard_interrupt +00017bc6 t e0_e1 +00017bf1 t set_e0 +00017bfa t set_e1 +00017c03 t put_queue +00017c3c t ctrl +00017c54 t unctrl +00017c58 t unalt +00017c6e t lshift +00017c76 t unlshift +00017c7e t rshift +00017c86 t unrshift +00017c8e t caps +00017cb0 t set_leds +00017cc6 t uncaps +00017cce t scroll +00017cd7 t num +00017ce0 t cursor +00017d00 t cur2 +00017d29 t cur +00017d35 t ok_cur +00017d43 t num_table +00017d50 t cur_table +00017d5d t func +00017d7a t ok_func +00017d8d t end_func +00017d8e t func_table +00017dbe t key_map +00017e1f t shift_map +00017ee1 t do_self +00017f49 t none +00017f4a t minus +00017f5f t key_table +0001835f t kb_wait +00018368 t reboot +0001837a t die +0001837c t init +000183f1 T rs_init +00018474 T rs_write +000184c4 T rs1_interrupt +000184cc T rs2_interrupt +000184d1 t rs_int +000184e8 t rep_int +00018505 t end +00018513 t jmp_table +00018524 t modem_status +0001852c t line_status +00018534 t read_char +000185bb t get_fs_byte +000185c9 t get_fs_long +000185df t put_fs_byte +000185f7 t put_fs_long +00018603 t change_speed +00018681 t flush +00018693 t send_break +00018694 t get_termios +000186f0 t set_termios +00018740 t get_termio +00018808 t set_termio +000188cc T tty_ioctl +00018bca t get_fs_byte +00018bd8 T math_emulate +00018cbb T math_error +00018cdb T _exit +00018ceb T open +00018d34 T close +00018da8 T dup +00018ddf T setsid +00018e0e T execve +00018eab T strcpy +00018ec7 T strncpy +00018eec T strcat +00018f17 T strncat +00018f4c T strcmp +00018f73 T strncmp +00018fa1 T strchr +00018fce T strrchr +00018ffd T strspn +0001903a T strcspn +00019077 T strpbrk +000190ae T strstr +000190e7 T strlen +0001910a T strtok +0001918d T memcpy +000191ad T memmove +00019201 T memcmp +0001922b T memchr +00019263 T memset +0001d2c8 d envp_rc +0001d2dc d envp +0001d300 D sys_call_table +0001d47c D NR_syscalls +0001d480 d init_task +0001e480 D current +0001e4a0 D task +0001e5a0 D stack_start +0001e5a8 D current_DOR +0001e5c0 d thisname.1955 +0001e600 d month +0001e640 d last_inode.1940 +0001e644 D start_buffer +0001e660 d crw_table +0001e680 d ioctl_table +0001e6a0 d floppy_type +0001e760 d cur_spec1 +0001e764 d cur_rate +0001e768 d floppy +0001e76c d current_track +0001e770 d callable.1844 +0001e780 D tty_table +00020ca0 D table_list +00020cc0 d quotient +00020ce0 D _ctype +00020de1 B __bss_start +00020de1 D _edata +00020e00 b printbuf +00021200 b memory_end +00021204 b buffer_memory_end +00021208 b main_memory_start +00021220 B jiffies +00021224 B startup_time +00021228 B last_task_used_math +0002123c b mon_timer +0002124c b moff_timer +00021260 b timer_list +00021560 b next_timer +00021564 B last_pid +00021580 b buf +00021980 b HIGH_MEMORY +000219a0 b mem_map +000228a0 B inode_table +00022fa0 B nr_buffers +00022fa4 b free_list +00022fa8 b buffer_wait +00022fac B ROOT_DEV +00022fe0 B blk_dev +00023018 B do_floppy +0002301c B selected +00023024 b recalibrate +00023028 b reset +0002302c b seek +00023030 b reply_buffer +00023037 b current_drive +00023038 b sector +00023039 b head +0002303a b track +0002303b b seek_track +0002303c b command +00023040 B do_hd +00023060 B hd_info +00023090 b recalibrate +00023094 b reset +00023098 b NR_HD +000230a0 b hd +000230f0 B rd_length +000230f4 b cr_flag.1923 +00023100 B beepcount +00023104 b video_type +00023108 b video_num_columns +0002310c b video_size_row +00023110 b video_num_lines +00023114 b video_page +00023118 b video_mem_start +0002311c b video_mem_end +00023120 b video_port_reg +00023122 b video_port_val +00023124 b video_erase_char +00023128 b origin +0002312c b scr_end +00023130 b pos +00023134 b x +00023138 b y +0002313c b top +00023140 b bottom +00023144 b state +00023148 b npar +00023160 b par +000231a0 b ques +000231a4 b saved_x +000231a8 b saved_y +000231c0 B drive_info +000231e0 B user_stack +000241e0 B hash_table +000246c0 B super_block +00024a20 B file_table +00024e20 B request +000252a0 B rd_start +000252a4 B _ctmp +000252a8 B errno +000252ac B ___strtok +000252b0 B end +000252b0 B _end diff --git a/linux-0.11-lab/4/linux/System.map.2 b/linux-0.11-lab/4/linux/System.map.2 new file mode 100644 index 0000000..c14c595 --- /dev/null +++ b/linux-0.11-lab/4/linux/System.map.2 @@ -0,0 +1,1087 @@ +Archive member included to satisfy reference by file (symbol) + +kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + fs/fs.o (ll_rw_block) +kernel/blk_drv/blk_drv.a(floppy.o) + kernel/kernel.o (do_floppy) +kernel/blk_drv/blk_drv.a(hd.o) + kernel/kernel.o (do_hd) +kernel/blk_drv/blk_drv.a(ramdisk.o) + kernel/blk_drv/blk_drv.a(hd.o) (rd_load) +kernel/chr_drv/chr_drv.a(tty_io.o) + kernel/kernel.o (tty_table) +kernel/chr_drv/chr_drv.a(console.o) + kernel/chr_drv/chr_drv.a(tty_io.o) (con_write) +kernel/chr_drv/chr_drv.a(keyboard.2.o) + kernel/chr_drv/chr_drv.a(console.o) (keyboard_interrupt) +kernel/chr_drv/chr_drv.a(serial.o) + kernel/chr_drv/chr_drv.a(tty_io.o) (rs_init) +kernel/chr_drv/chr_drv.a(rs_io.o) + kernel/chr_drv/chr_drv.a(serial.o) (rs1_interrupt) +kernel/chr_drv/chr_drv.a(tty_ioctl.o) + fs/fs.o (tty_ioctl) +kernel/math/math.a(math_emulate.o) + kernel/kernel.o (math_emulate) +lib/lib.a(ctype.o) kernel/chr_drv/chr_drv.a(tty_io.o) (_ctmp) +lib/lib.a(_exit.o) init/main.o (_exit) +lib/lib.a(open.o) init/main.o (open) +lib/lib.a(close.o) init/main.o (close) +lib/lib.a(errno.o) init/main.o (errno) +lib/lib.a(write.o) init/main.o (write) +lib/lib.a(dup.o) init/main.o (dup) +lib/lib.a(setsid.o) init/main.o (setsid) +lib/lib.a(execve.o) init/main.o (execve) +lib/lib.a(wait.o) init/main.o (wait) +lib/lib.a(string.o) fs/fs.o (strncpy) + +分配公共符号 +公共符号 大小 文件 + +errno 0x4 lib/lib.a(errno.o) +hash_table 0x4cc fs/fs.o +___strtok 0x4 lib/lib.a(string.o) +rd_start 0x4 kernel/blk_drv/blk_drv.a(ramdisk.o) +request 0x480 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) +user_stack 0x1000 kernel/kernel.o +_ctmp 0x1 lib/lib.a(ctype.o) +super_block 0x360 fs/fs.o +drive_info 0x20 init/main.o +file_table 0x400 fs/fs.o + +Discarded input sections + + .note.GNU-stack + 0x0000000000000000 0x0 init/main.o + .note.GNU-stack + 0x0000000000000000 0x0 kernel/kernel.o + .note.GNU-stack + 0x0000000000000000 0x0 mm/mm.o + .note.GNU-stack + 0x0000000000000000 0x0 fs/fs.o + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(floppy.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(hd.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(ramdisk.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(tty_io.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(console.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(serial.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/math/math.a(math_emulate.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(ctype.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(_exit.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(open.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(close.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(errno.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(write.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(dup.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(setsid.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(execve.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(wait.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(string.o) + +内存配置 + +名称 来源 长度 属性 +*default* 0x0000000000000000 0xffffffffffffffff + +Linker script and memory map + +段 .text 的地址设置为 0x0 +LOAD boot/head.o +LOAD init/main.o +LOAD kernel/kernel.o +LOAD mm/mm.o +LOAD fs/fs.o +LOAD kernel/blk_drv/blk_drv.a +LOAD kernel/chr_drv/chr_drv.a +LOAD kernel/math/math.a +LOAD lib/lib.a + 0x0000000008048000 PROVIDE (__executable_start, 0x8048000) + 0x0000000008048074 . = (0x8048000 + SIZEOF_HEADERS) + +.interp + *(.interp) + +.note.gnu.build-id + *(.note.gnu.build-id) + +.hash + *(.hash) + +.gnu.hash + *(.gnu.hash) + +.dynsym + *(.dynsym) + +.dynstr + *(.dynstr) + +.gnu.version + *(.gnu.version) + +.gnu.version_d + *(.gnu.version_d) + +.gnu.version_r + *(.gnu.version_r) + +.rel.init + *(.rel.init) + +.rel.text 0x0000000008048074 0x0 + *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) + .rel.text 0x0000000000000000 0x0 boot/head.o + +.rel.fini + *(.rel.fini) + +.rel.rodata + *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) + +.rel.data.rel.ro + *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) + +.rel.data 0x0000000008048074 0x0 + *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) + .rel.data 0x0000000000000000 0x0 boot/head.o + +.rel.tdata + *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) + +.rel.tbss + *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) + +.rel.ctors + *(.rel.ctors) + +.rel.dtors + *(.rel.dtors) + +.rel.got + *(.rel.got) + +.rel.bss + *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) + +.rel.ifunc + *(.rel.ifunc) + +.rel.plt 0x0000000008048074 0x0 + *(.rel.plt) + 0x0000000008048074 PROVIDE (__rel_iplt_start, .) + *(.rel.iplt) + .rel.iplt 0x0000000000000000 0x0 boot/head.o + 0x0000000008048074 PROVIDE (__rel_iplt_end, .) + +.init + *(SORT(.init)) + +.plt 0x0000000008048080 0x0 + *(.plt) + *(.iplt) + .iplt 0x0000000000000000 0x0 boot/head.o + +.text 0x0000000000000000 0x19287 + *(.text.unlikely .text.*_unlikely .text.unlikely.*) + *(.text.exit .text.exit.*) + *(.text.startup .text.startup.*) + *(.text.hot .text.hot.*) + *(.text .stub .text.* .gnu.linkonce.t.*) + .text 0x0000000000000000 0x64c0 boot/head.o + 0x0000000000000000 startup_32 + 0x0000000000000000 pg_dir + 0x0000000000005000 tmp_floppy_area + 0x00000000000054c0 idt + 0x0000000000005cc0 gdt + .text 0x00000000000064c0 0x744 init/main.o + 0x00000000000064c0 fork + 0x00000000000064ef pause + 0x000000000000651e setup + 0x0000000000006555 sync + 0x0000000000006799 main + 0x000000000000695b init + 0x0000000000006bd3 print_nr + .text 0x0000000000006c04 0x395c kernel/kernel.o + 0x0000000000006c04 show_task + 0x0000000000006c89 show_stat + 0x0000000000006ccf math_state_restore + 0x0000000000006d2d schedule + 0x0000000000006edf sys_pause + 0x0000000000006ef5 sleep_on + 0x0000000000006f54 interruptible_sleep_on + 0x0000000000006fe7 wake_up + 0x000000000000700f ticks_to_floppy_on + 0x00000000000070da floppy_on + 0x0000000000007109 floppy_off + 0x0000000000007119 do_floppy_timer + 0x00000000000071ed add_timer + 0x0000000000007311 do_timer + 0x0000000000007400 sys_alarm + 0x000000000000747f sys_getpid + 0x000000000000748b sys_getppid + 0x0000000000007497 sys_getuid + 0x00000000000074a6 sys_geteuid + 0x00000000000074b6 sys_getgid + 0x00000000000074c6 sys_getegid + 0x00000000000074d5 sys_nice + 0x0000000000007500 sched_init + 0x000000000000768d sys_sleep + 0x00000000000076d4 system_call + 0x0000000000007758 coprocessor_error + 0x000000000000777a device_not_available + 0x00000000000077b4 timer_interrupt + 0x00000000000077ec sys_execve + 0x00000000000077fc sys_execve2 + 0x000000000000780c sys_fork + 0x0000000000007824 hd_interrupt + 0x0000000000007860 floppy_interrupt + 0x0000000000007896 parallel_interrupt + 0x0000000000007ab1 do_double_fault + 0x0000000000007ad4 do_general_protection + 0x0000000000007af7 do_divide_error + 0x0000000000007b1a do_int3 + 0x0000000000007be2 do_nmi + 0x0000000000007c05 do_debug + 0x0000000000007c28 do_overflow + 0x0000000000007c4b do_bounds + 0x0000000000007c6e do_invalid_op + 0x0000000000007c91 do_device_not_available + 0x0000000000007cb4 do_coprocessor_segment_overrun + 0x0000000000007cd7 do_invalid_TSS + 0x0000000000007cfa do_segment_not_present + 0x0000000000007d1d do_stack_segment + 0x0000000000007d40 do_coprocessor_error + 0x0000000000007d74 do_reserved + 0x0000000000007d97 trap_init + 0x000000000000807b divide_error + 0x00000000000080b0 debug + 0x00000000000080b7 nmi + 0x00000000000080be int3 + 0x00000000000080c5 overflow + 0x00000000000080cc bounds + 0x00000000000080d3 invalid_op + 0x00000000000080da coprocessor_segment_overrun + 0x00000000000080e1 reserved + 0x00000000000080e8 irq13 + 0x00000000000080fd double_fault + 0x0000000000008134 invalid_TSS + 0x000000000000813b segment_not_present + 0x0000000000008142 stack_segment + 0x0000000000008149 general_protection + 0x0000000000008182 verify_area + 0x00000000000081e9 copy_mem + 0x0000000000008343 copy_process + 0x00000000000087f0 find_empty_process + 0x0000000000008884 panic + 0x00000000000088bf printk + 0x0000000000008bdc vsprintf + 0x00000000000090a2 sys_ftime + 0x00000000000090a8 sys_break + 0x00000000000090ae sys_ptrace + 0x00000000000090b4 sys_stty + 0x00000000000090ba sys_gtty + 0x00000000000090c0 sys_rename + 0x00000000000090c6 sys_prof + 0x00000000000090cc sys_setregid + 0x0000000000009185 sys_setgid + 0x000000000000921c sys_acct + 0x0000000000009222 sys_phys + 0x0000000000009228 sys_lock + 0x000000000000922e sys_mpx + 0x0000000000009234 sys_ulimit + 0x000000000000923a sys_time + 0x0000000000009296 sys_setreuid + 0x0000000000009378 sys_setuid + 0x000000000000940d sys_stime + 0x0000000000009463 sys_times + 0x0000000000009503 sys_brk + 0x0000000000009545 sys_setpgid + 0x000000000000961e sys_getpgrp + 0x000000000000962a sys_setsid + 0x00000000000096a4 sys_getgroups + 0x00000000000096aa sys_setgroups + 0x00000000000096b0 sys_uname + 0x0000000000009719 sys_sethostname + 0x000000000000971f sys_getrlimit + 0x0000000000009725 sys_setrlimit + 0x000000000000972b sys_getrusage + 0x0000000000009731 sys_gettimeofday + 0x0000000000009737 sys_settimeofday + 0x000000000000973d sys_umask + 0x00000000000097ae release + 0x00000000000098eb sys_kill + 0x0000000000009b25 do_exit + 0x0000000000009d59 sys_exit + 0x0000000000009d72 sys_waitpid + 0x0000000000009fca sys_sgetmask + 0x0000000000009fd6 sys_ssetmask + 0x000000000000a002 sys_sigpending + 0x000000000000a008 sys_sigsuspend + 0x000000000000a0a1 sys_signal + 0x000000000000a125 sys_sigaction + 0x000000000000a22f do_signal + 0x000000000000a41b kernel_mktime + .text 0x000000000000a560 0xc96 mm/mm.o + 0x000000000000a57f get_free_page + 0x000000000000a5bb free_page + 0x000000000000a62a free_page_tables + 0x000000000000a729 copy_page_tables + 0x000000000000a8aa put_page + 0x000000000000a996 un_wp_page + 0x000000000000aa4e do_wp_page + 0x000000000000aa80 write_verify + 0x000000000000aad9 get_empty_page + 0x000000000000ad5f do_no_page + 0x000000000000aef4 load_all + 0x000000000000b056 mem_init + 0x000000000000b0ca calc_mem + 0x000000000000b1bf page_fault + .text 0x000000000000b1f6 0x88c4 fs/fs.o + 0x000000000000b230 sys_ustat + 0x000000000000b236 sys_utime + 0x000000000000b2e3 sys_access + 0x000000000000b3bf sys_chdir + 0x000000000000b433 sys_chroot + 0x000000000000b4a7 sys_chmod + 0x000000000000b541 sys_chown + 0x000000000000b5bc sys_open + 0x000000000000b85f sys_creat + 0x000000000000b882 sys_close + 0x000000000000bad9 sys_getdents + 0x000000000000bc92 sys_getcwd + 0x000000000000bc98 sys_mmap + 0x000000000000bc9e sys_munmap + 0x000000000000bca4 sys_clone + 0x000000000000bcaa sys_lseek + 0x000000000000bdc1 sys_read + 0x000000000000bfb4 my_sys_read + 0x000000000000c1a7 sys_write + 0x000000000000c3a0 invalidate_inodes + 0x000000000000c40f sync_inodes + 0x000000000000c852 bmap + 0x000000000000c875 create_block + 0x000000000000c898 iput + 0x000000000000ca07 get_empty_inode + 0x000000000000cb5c get_pipe_inode + 0x000000000000cbd1 iget + 0x000000000000cfcc sys_sync + 0x000000000000d02f sync_dev + 0x000000000000d128 invalidate_buffers + 0x000000000000d19a check_disk_change + 0x000000000000d468 get_hash_table + 0x000000000000d4ea getblk + 0x000000000000d688 brelse + 0x000000000000d6d1 bread + 0x000000000000d756 bread_page + 0x000000000000d878 breada + 0x000000000000d96d buffer_init + 0x000000000000db0e get_super + 0x000000000000db7d put_super + 0x000000000000df93 sys_umount + 0x000000000000e0f4 sys_mount + 0x000000000000e265 mount_root + 0x000000000000e499 block_write + 0x000000000000e5eb block_read + 0x000000000000e956 rw_char + 0x000000000000e9e6 file_read + 0x000000000000eb91 my_file_read + 0x000000000000ed1c file_write + 0x000000000000f005 sys_stat + 0x000000000000f04f sys_lstat + 0x000000000000f06a sys_fstat + 0x000000000000f0c7 sys_readlink + 0x000000000000f176 sys_uselib + 0x000000000000f645 do_execve + 0x00000000000100c7 do_execve2 + 0x0000000000010b87 read_pipe + 0x0000000000010cdd write_pipe + 0x0000000000010e5c sys_pipe + 0x000000000001105e sys_pipe2 + 0x0000000000011a3d namei + 0x0000000000011b53 open_namei + 0x0000000000011ea6 sys_mknod + 0x00000000000120d6 sys_mkdir + 0x0000000000012665 sys_rmdir + 0x00000000000129bd sys_unlink + 0x0000000000012c5e sys_symlink + 0x0000000000012c64 sys_link + 0x0000000000012ebe free_block + 0x0000000000013030 new_block + 0x00000000000131d4 free_inode + 0x000000000001333b new_inode + 0x00000000000135ef sys_dup2 + 0x0000000000013616 sys_dup + 0x0000000000013631 sys_fcntl + 0x0000000000013770 sys_ioctl + 0x000000000001397f truncate + 0x0000000000013ab4 sys_select + .text 0x0000000000013aba 0x46a kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x0000000000013e7d ll_rw_block + 0x0000000000013ed6 blk_dev_init + .text 0x0000000000013f24 0xb9d kernel/blk_drv/blk_drv.a(floppy.o) + 0x000000000001400a floppy_deselect + 0x0000000000014041 floppy_change + 0x00000000000143fe setup_rw_floppy + 0x0000000000014697 unexpected_floppy_interrupt + 0x0000000000014a6f floppy_init + .text 0x0000000000014ac1 0xc8f kernel/blk_drv/blk_drv.a(hd.o) + 0x0000000000014b95 sys_setup + 0x0000000000015244 unexpected_hd_interrupt + 0x00000000000156d6 hd_init + .text 0x0000000000015750 0x50c kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x000000000001595a rd_init + 0x00000000000159b0 rd_load + .text 0x0000000000015c5c 0xcbb kernel/chr_drv/chr_drv.a(tty_io.o) + 0x0000000000015c82 tty_init + 0x0000000000015c93 tty_intr + 0x0000000000015da0 wait_for_keypress + 0x0000000000015db3 copy_to_cooked + 0x000000000001636e tty_read + 0x00000000000166dc tty_write + 0x00000000000168ee do_tty_interrupt + 0x0000000000016916 chr_dev_init + .text 0x0000000000016917 0x1283 kernel/chr_drv/chr_drv.a(console.o) + 0x0000000000016eb4 csi_m + 0x000000000001724e con_write + 0x00000000000178dc con_init + 0x0000000000017b13 sysbeepstop + .text 0x0000000000017b9a 0x7e2 kernel/chr_drv/chr_drv.a(keyboard.2.o) + 0x0000000000017b9d keyboard_interrupt + .text 0x000000000001837c 0x145 kernel/chr_drv/chr_drv.a(serial.o) + 0x00000000000183f1 rs_init + 0x0000000000018474 rs_write + *fill* 0x00000000000184c1 0x3 + .text 0x00000000000184c4 0xf7 kernel/chr_drv/chr_drv.a(rs_io.o) + 0x00000000000184c4 rs1_interrupt + 0x00000000000184cc rs2_interrupt + .text 0x00000000000185bb 0x60f kernel/chr_drv/chr_drv.a(tty_ioctl.o) + 0x00000000000188cc tty_ioctl + .text 0x0000000000018bca 0x111 kernel/math/math.a(math_emulate.o) + 0x0000000000018bd8 math_emulate + 0x0000000000018cbb math_error + .text 0x0000000000018cdb 0x0 lib/lib.a(ctype.o) + .text 0x0000000000018cdb 0x10 lib/lib.a(_exit.o) + 0x0000000000018cdb _exit + .text 0x0000000000018ceb 0x49 lib/lib.a(open.o) + 0x0000000000018ceb open + .text 0x0000000000018d34 0x37 lib/lib.a(close.o) + 0x0000000000018d34 close + .text 0x0000000000018d6b 0x0 lib/lib.a(errno.o) + .text 0x0000000000018d6b 0x3d lib/lib.a(write.o) + 0x0000000000018d6b write + .text 0x0000000000018da8 0x37 lib/lib.a(dup.o) + 0x0000000000018da8 dup + .text 0x0000000000018ddf 0x2f lib/lib.a(setsid.o) + 0x0000000000018ddf setsid + .text 0x0000000000018e0e 0x3d lib/lib.a(execve.o) + 0x0000000000018e0e execve + .text 0x0000000000018e4b 0x60 lib/lib.a(wait.o) + 0x0000000000018e4b waitpid + 0x0000000000018e88 wait + .text 0x0000000000018eab 0x3dc lib/lib.a(string.o) + 0x0000000000018eab strcpy + 0x0000000000018ec7 strncpy + 0x0000000000018eec strcat + 0x0000000000018f17 strncat + 0x0000000000018f4c strcmp + 0x0000000000018f73 strncmp + 0x0000000000018fa1 strchr + 0x0000000000018fce strrchr + 0x0000000000018ffd strspn + 0x000000000001903a strcspn + 0x0000000000019077 strpbrk + 0x00000000000190ae strstr + 0x00000000000190e7 strlen + 0x000000000001910a strtok + 0x000000000001918d memcpy + 0x00000000000191ad memmove + 0x0000000000019201 memcmp + 0x000000000001922b memchr + 0x0000000000019263 memset + *(.gnu.warning) + +.fini + *(SORT(.fini)) + 0x0000000000019287 PROVIDE (__etext, .) + 0x0000000000019287 PROVIDE (_etext, .) + 0x0000000000019287 PROVIDE (etext, .) + +.rodata 0x0000000000019288 0x140e + *(.rodata .rodata.* .gnu.linkonce.r.*) + .rodata 0x0000000000019288 0xc9 init/main.o + *fill* 0x0000000000019351 0x3 + .rodata 0x0000000000019354 0x438 kernel/kernel.o + .rodata 0x000000000001978c 0x1b5 mm/mm.o + *fill* 0x0000000000019941 0x3 + .rodata 0x0000000000019944 0x62c fs/fs.o + .rodata 0x0000000000019f70 0x7a kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + *fill* 0x0000000000019fea 0x2 + .rodata 0x0000000000019fec 0x133 kernel/blk_drv/blk_drv.a(floppy.o) + *fill* 0x000000000001a11f 0x1 + .rodata 0x000000000001a120 0x19b kernel/blk_drv/blk_drv.a(hd.o) + *fill* 0x000000000001a2bb 0x1 + .rodata 0x000000000001a2bc 0x188 kernel/blk_drv/blk_drv.a(ramdisk.o) + .rodata 0x000000000001a444 0x17d kernel/chr_drv/chr_drv.a(console.o) + *fill* 0x000000000001a5c1 0x3 + .rodata 0x000000000001a5c4 0x80 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .rodata 0x000000000001a644 0x52 kernel/math/math.a(math_emulate.o) + +.rodata1 + *(.rodata1) + +.eh_frame_hdr + *(.eh_frame_hdr) + +.eh_frame 0x000000000001a698 0x2c20 + *(.eh_frame) + .eh_frame 0x000000000001a698 0x108 init/main.o + .eh_frame 0x000000000001a7a0 0xb1c kernel/kernel.o + 0xc0c (size before relaxing) + .eh_frame 0x000000000001b2bc 0x1b0 mm/mm.o + 0x1c8 (size before relaxing) + .eh_frame 0x000000000001b46c 0xf40 fs/fs.o + 0x10d8 (size before relaxing) + .eh_frame 0x000000000001c3ac 0x98 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0xb0 (size before relaxing) + .eh_frame 0x000000000001c444 0x23c kernel/blk_drv/blk_drv.a(floppy.o) + 0x254 (size before relaxing) + .eh_frame 0x000000000001c680 0x1e8 kernel/blk_drv/blk_drv.a(hd.o) + 0x200 (size before relaxing) + .eh_frame 0x000000000001c868 0xac kernel/blk_drv/blk_drv.a(ramdisk.o) + 0xc4 (size before relaxing) + .eh_frame 0x000000000001c914 0x12c kernel/chr_drv/chr_drv.a(tty_io.o) + 0x144 (size before relaxing) + .eh_frame 0x000000000001ca40 0x2c0 kernel/chr_drv/chr_drv.a(console.o) + 0x2d8 (size before relaxing) + .eh_frame 0x000000000001cd00 0x54 kernel/chr_drv/chr_drv.a(serial.o) + 0x6c (size before relaxing) + .eh_frame 0x000000000001cd54 0x148 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + 0x160 (size before relaxing) + .eh_frame 0x000000000001ce9c 0x5c kernel/math/math.a(math_emulate.o) + 0x74 (size before relaxing) + .eh_frame 0x000000000001cef8 0x1c lib/lib.a(_exit.o) + 0x34 (size before relaxing) + .eh_frame 0x000000000001cf14 0x24 lib/lib.a(open.o) + 0x3c (size before relaxing) + .eh_frame 0x000000000001cf38 0x20 lib/lib.a(close.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001cf58 0x20 lib/lib.a(write.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001cf78 0x20 lib/lib.a(dup.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001cf98 0x18 lib/lib.a(setsid.o) + 0x30 (size before relaxing) + .eh_frame 0x000000000001cfb0 0x20 lib/lib.a(execve.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001cfd0 0x38 lib/lib.a(wait.o) + 0x50 (size before relaxing) + .eh_frame 0x000000000001d008 0x2b0 lib/lib.a(string.o) + 0x2c8 (size before relaxing) + +.gcc_except_table + *(.gcc_except_table .gcc_except_table.*) + +.exception_ranges + *(.exception_ranges .exception_ranges*) + 0x000000000001d2b8 . = . + +.eh_frame + *(.eh_frame) + +.gcc_except_table + *(.gcc_except_table .gcc_except_table.*) + +.exception_ranges + *(.exception_ranges .exception_ranges*) + +.tdata + *(.tdata .tdata.* .gnu.linkonce.td.*) + +.tbss + *(.tbss .tbss.* .gnu.linkonce.tb.*) + *(.tcommon) + +.preinit_array 0x000000000001d2b8 0x0 + 0x000000000001d2b8 PROVIDE (__preinit_array_start, .) + *(.preinit_array) + 0x000000000001d2b8 PROVIDE (__preinit_array_end, .) + +.init_array 0x000000000001d2b8 0x0 + 0x000000000001d2b8 PROVIDE (__init_array_start, .) + *(SORT(.init_array.*) SORT(.ctors.*)) + *(.init_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .ctors) + 0x000000000001d2b8 PROVIDE (__init_array_end, .) + +.fini_array 0x000000000001d2b8 0x0 + 0x000000000001d2b8 PROVIDE (__fini_array_start, .) + *(SORT(.fini_array.*) SORT(.dtors.*)) + *(.fini_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .dtors) + 0x000000000001d2b8 PROVIDE (__fini_array_end, .) + +.ctors + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + +.dtors + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + +.jcr + *(.jcr) + +.data.rel.ro + *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) + *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) + +.dynamic + *(.dynamic) + +.got + *(.got) + *(.igot) + +.got.plt 0x000000000001d2b8 0x0 + *(.got.plt) + *(.igot.plt) + .igot.plt 0x0000000000000000 0x0 boot/head.o + +.data 0x000000000001d2c0 0x3b21 + *(.data .data.* .gnu.linkonce.d.*) + .data 0x000000000001d2c0 0x0 boot/head.o + .data 0x000000000001d2c0 0x28 init/main.o + *fill* 0x000000000001d2e8 0x18 + .data 0x000000000001d300 0x1330 kernel/kernel.o + 0x000000000001d300 sys_call_table + 0x000000000001d47c NR_syscalls + 0x000000000001e480 current + 0x000000000001e4a0 task + 0x000000000001e5a0 stack_start + 0x000000000001e5a8 current_DOR + .data 0x000000000001e630 0x0 mm/mm.o + *fill* 0x000000000001e630 0x10 + .data 0x000000000001e640 0x60 fs/fs.o + 0x000000000001e644 start_buffer + .data 0x000000000001e6a0 0x0 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .data 0x000000000001e6a0 0xcd kernel/blk_drv/blk_drv.a(floppy.o) + *fill* 0x000000000001e76d 0x3 + .data 0x000000000001e770 0x4 kernel/blk_drv/blk_drv.a(hd.o) + .data 0x000000000001e774 0x0 kernel/blk_drv/blk_drv.a(ramdisk.o) + *fill* 0x000000000001e774 0xc + .data 0x000000000001e780 0x2538 kernel/chr_drv/chr_drv.a(tty_io.o) + 0x000000000001e780 tty_table + 0x0000000000020ca0 table_list + .data 0x0000000000020cb8 0x1 kernel/chr_drv/chr_drv.a(console.o) + .data 0x0000000000020cb9 0x0 kernel/chr_drv/chr_drv.a(keyboard.2.o) + .data 0x0000000000020cb9 0x0 kernel/chr_drv/chr_drv.a(serial.o) + .data 0x0000000000020cb9 0x0 kernel/chr_drv/chr_drv.a(rs_io.o) + *fill* 0x0000000000020cb9 0x7 + .data 0x0000000000020cc0 0x20 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .data 0x0000000000020ce0 0x0 kernel/math/math.a(math_emulate.o) + .data 0x0000000000020ce0 0x101 lib/lib.a(ctype.o) + 0x0000000000020ce0 _ctype + .data 0x0000000000020de1 0x0 lib/lib.a(_exit.o) + .data 0x0000000000020de1 0x0 lib/lib.a(open.o) + .data 0x0000000000020de1 0x0 lib/lib.a(close.o) + .data 0x0000000000020de1 0x0 lib/lib.a(errno.o) + .data 0x0000000000020de1 0x0 lib/lib.a(write.o) + .data 0x0000000000020de1 0x0 lib/lib.a(dup.o) + .data 0x0000000000020de1 0x0 lib/lib.a(setsid.o) + .data 0x0000000000020de1 0x0 lib/lib.a(execve.o) + .data 0x0000000000020de1 0x0 lib/lib.a(wait.o) + .data 0x0000000000020de1 0x0 lib/lib.a(string.o) + +.data1 + *(.data1) + 0x0000000000020de1 _edata = . + 0x0000000000020de1 PROVIDE (edata, .) + 0x0000000000020de1 . = . + 0x0000000000020de1 __bss_start = . + +.bss 0x0000000000020e00 0x44b0 + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + .bss 0x0000000000020e00 0x0 boot/head.o + .bss 0x0000000000020e00 0x40c init/main.o + *fill* 0x000000000002120c 0x14 + .bss 0x0000000000021220 0x760 kernel/kernel.o + 0x0000000000021220 jiffies + 0x0000000000021224 startup_time + 0x0000000000021228 last_task_used_math + 0x0000000000021564 last_pid + .bss 0x0000000000021980 0xf20 mm/mm.o + .bss 0x00000000000228a0 0x710 fs/fs.o + 0x00000000000228a0 inode_table + 0x0000000000022fa0 nr_buffers + 0x0000000000022fac ROOT_DEV + *fill* 0x0000000000022fb0 0x10 + .bss 0x0000000000022fc0 0x58 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x0000000000022fc0 wait_for_request + 0x0000000000022fe0 blk_dev + .bss 0x0000000000023018 0x25 kernel/blk_drv/blk_drv.a(floppy.o) + 0x0000000000023018 do_floppy + 0x000000000002301c selected + 0x0000000000023020 wait_on_floppy_select + *fill* 0x000000000002303d 0x3 + .bss 0x0000000000023040 0xb0 kernel/blk_drv/blk_drv.a(hd.o) + 0x0000000000023040 do_hd + 0x0000000000023060 hd_info + .bss 0x00000000000230f0 0x4 kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x00000000000230f0 rd_length + .bss 0x00000000000230f4 0x4 kernel/chr_drv/chr_drv.a(tty_io.o) + *fill* 0x00000000000230f8 0x8 + .bss 0x0000000000023100 0xac kernel/chr_drv/chr_drv.a(console.o) + 0x0000000000023100 beepcount + .bss 0x00000000000231ac 0x0 kernel/chr_drv/chr_drv.a(keyboard.2.o) + .bss 0x00000000000231ac 0x0 kernel/chr_drv/chr_drv.a(serial.o) + .bss 0x00000000000231ac 0x0 kernel/chr_drv/chr_drv.a(rs_io.o) + .bss 0x00000000000231ac 0x0 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .bss 0x00000000000231ac 0x0 kernel/math/math.a(math_emulate.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(ctype.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(_exit.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(open.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(close.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(errno.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(write.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(dup.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(setsid.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(execve.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(wait.o) + .bss 0x00000000000231ac 0x0 lib/lib.a(string.o) + *(COMMON) + *fill* 0x00000000000231ac 0x14 + COMMON 0x00000000000231c0 0x20 init/main.o + 0x00000000000231c0 drive_info + COMMON 0x00000000000231e0 0x1000 kernel/kernel.o + 0x00000000000231e0 user_stack + COMMON 0x00000000000241e0 0xc40 fs/fs.o + 0x00000000000241e0 hash_table + 0x00000000000246c0 super_block + 0x0000000000024a20 file_table + COMMON 0x0000000000024e20 0x480 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x0000000000024e20 request + COMMON 0x00000000000252a0 0x4 kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x00000000000252a0 rd_start + COMMON 0x00000000000252a4 0x1 lib/lib.a(ctype.o) + 0x00000000000252a4 _ctmp + *fill* 0x00000000000252a5 0x3 + COMMON 0x00000000000252a8 0x4 lib/lib.a(errno.o) + 0x00000000000252a8 errno + COMMON 0x00000000000252ac 0x4 lib/lib.a(string.o) + 0x00000000000252ac ___strtok + 0x00000000000252b0 . = ALIGN ((. != 0x0)?0x4:0x1) + 0x00000000000252b0 . = ALIGN (0x4) + 0x00000000000252b0 . = SEGMENT_START ("ldata-segment", .) + 0x00000000000252b0 . = ALIGN (0x4) + 0x00000000000252b0 _end = . + 0x00000000000252b0 PROVIDE (end, .) + +.stab + *(.stab) + +.stabstr + *(.stabstr) + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x0000000000000000 0x29 + *(.comment) + .comment 0x0000000000000000 0x29 init/main.o + 0x2a (size before relaxing) + .comment 0x0000000000000000 0x1a4 kernel/kernel.o + .comment 0x0000000000000000 0x2a mm/mm.o + .comment 0x0000000000000000 0x2f4 fs/fs.o + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(floppy.o) + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(hd.o) + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(ramdisk.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(tty_io.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(console.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(serial.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .comment 0x0000000000000000 0x2a kernel/math/math.a(math_emulate.o) + .comment 0x0000000000000000 0x2a lib/lib.a(ctype.o) + .comment 0x0000000000000000 0x2a lib/lib.a(_exit.o) + .comment 0x0000000000000000 0x2a lib/lib.a(open.o) + .comment 0x0000000000000000 0x2a lib/lib.a(close.o) + .comment 0x0000000000000000 0x2a lib/lib.a(errno.o) + .comment 0x0000000000000000 0x2a lib/lib.a(write.o) + .comment 0x0000000000000000 0x2a lib/lib.a(dup.o) + .comment 0x0000000000000000 0x2a lib/lib.a(setsid.o) + .comment 0x0000000000000000 0x2a lib/lib.a(execve.o) + .comment 0x0000000000000000 0x2a lib/lib.a(wait.o) + .comment 0x0000000000000000 0x2a lib/lib.a(string.o) + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x0000000000000000 0x628 + *(.debug_aranges) + .debug_aranges + 0x0000000000000000 0x20 init/main.o + .debug_aranges + 0x0000000000000020 0x140 kernel/kernel.o + .debug_aranges + 0x0000000000000160 0x20 mm/mm.o + .debug_aranges + 0x0000000000000180 0x238 fs/fs.o + .debug_aranges + 0x00000000000003b8 0x20 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_aranges + 0x00000000000003d8 0x20 kernel/blk_drv/blk_drv.a(floppy.o) + .debug_aranges + 0x00000000000003f8 0x20 kernel/blk_drv/blk_drv.a(hd.o) + .debug_aranges + 0x0000000000000418 0x20 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_aranges + 0x0000000000000438 0x20 kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_aranges + 0x0000000000000458 0x20 kernel/chr_drv/chr_drv.a(console.o) + .debug_aranges + 0x0000000000000478 0x20 kernel/chr_drv/chr_drv.a(serial.o) + .debug_aranges + 0x0000000000000498 0x20 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_aranges + 0x00000000000004b8 0x20 kernel/math/math.a(math_emulate.o) + .debug_aranges + 0x00000000000004d8 0x18 lib/lib.a(ctype.o) + .debug_aranges + 0x00000000000004f0 0x20 lib/lib.a(_exit.o) + .debug_aranges + 0x0000000000000510 0x20 lib/lib.a(open.o) + .debug_aranges + 0x0000000000000530 0x20 lib/lib.a(close.o) + .debug_aranges + 0x0000000000000550 0x18 lib/lib.a(errno.o) + .debug_aranges + 0x0000000000000568 0x20 lib/lib.a(write.o) + .debug_aranges + 0x0000000000000588 0x20 lib/lib.a(dup.o) + .debug_aranges + 0x00000000000005a8 0x20 lib/lib.a(setsid.o) + .debug_aranges + 0x00000000000005c8 0x20 lib/lib.a(execve.o) + .debug_aranges + 0x00000000000005e8 0x20 lib/lib.a(wait.o) + .debug_aranges + 0x0000000000000608 0x20 lib/lib.a(string.o) + +.debug_pubnames + *(.debug_pubnames) + +.debug_info 0x0000000000000000 0x17acb + *(.debug_info .gnu.linkonce.wi.*) + .debug_info 0x0000000000000000 0xb73 init/main.o + .debug_info 0x0000000000000b73 0x4ce0 kernel/kernel.o + .debug_info 0x0000000000005853 0xba8 mm/mm.o + .debug_info 0x00000000000063fb 0xa971 fs/fs.o + .debug_info 0x0000000000010d6c 0x932 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_info 0x000000000001169e 0xc9f kernel/blk_drv/blk_drv.a(floppy.o) + .debug_info 0x000000000001233d 0xd5f kernel/blk_drv/blk_drv.a(hd.o) + .debug_info 0x000000000001309c 0xad5 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_info 0x0000000000013b71 0xacd kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_info 0x000000000001463e 0xdb0 kernel/chr_drv/chr_drv.a(console.o) + .debug_info 0x00000000000153ee 0x85c kernel/chr_drv/chr_drv.a(serial.o) + .debug_info 0x0000000000015c4a 0xb47 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_info 0x0000000000016791 0x7b5 kernel/math/math.a(math_emulate.o) + .debug_info 0x0000000000016f46 0x66 lib/lib.a(ctype.o) + .debug_info 0x0000000000016fac 0x77 lib/lib.a(_exit.o) + .debug_info 0x0000000000017023 0xd0 lib/lib.a(open.o) + .debug_info 0x00000000000170f3 0x97 lib/lib.a(close.o) + .debug_info 0x000000000001718a 0x36 lib/lib.a(errno.o) + .debug_info 0x00000000000171c0 0xc9 lib/lib.a(write.o) + .debug_info 0x0000000000017289 0x97 lib/lib.a(dup.o) + .debug_info 0x0000000000017320 0x95 lib/lib.a(setsid.o) + .debug_info 0x00000000000173b5 0xcb lib/lib.a(execve.o) + .debug_info 0x0000000000017480 0xed lib/lib.a(wait.o) + .debug_info 0x000000000001756d 0x55e lib/lib.a(string.o) + +.debug_abbrev 0x0000000000000000 0x450e + *(.debug_abbrev) + .debug_abbrev 0x0000000000000000 0x237 init/main.o + .debug_abbrev 0x0000000000000237 0xf7f kernel/kernel.o + .debug_abbrev 0x00000000000011b6 0x20b mm/mm.o + .debug_abbrev 0x00000000000013c1 0x1ac6 fs/fs.o + .debug_abbrev 0x0000000000002e87 0x169 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_abbrev 0x0000000000002ff0 0x27d kernel/blk_drv/blk_drv.a(floppy.o) + .debug_abbrev 0x000000000000326d 0x23c kernel/blk_drv/blk_drv.a(hd.o) + .debug_abbrev 0x00000000000034a9 0x1a8 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_abbrev 0x0000000000003651 0x279 kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_abbrev 0x00000000000038ca 0x26b kernel/chr_drv/chr_drv.a(console.o) + .debug_abbrev 0x0000000000003b35 0x175 kernel/chr_drv/chr_drv.a(serial.o) + .debug_abbrev 0x0000000000003caa 0x18d kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_abbrev 0x0000000000003e37 0x163 kernel/math/math.a(math_emulate.o) + .debug_abbrev 0x0000000000003f9a 0x3e lib/lib.a(ctype.o) + .debug_abbrev 0x0000000000003fd8 0x51 lib/lib.a(_exit.o) + .debug_abbrev 0x0000000000004029 0x97 lib/lib.a(open.o) + .debug_abbrev 0x00000000000040c0 0x75 lib/lib.a(close.o) + .debug_abbrev 0x0000000000004135 0x2c lib/lib.a(errno.o) + .debug_abbrev 0x0000000000004161 0xa1 lib/lib.a(write.o) + .debug_abbrev 0x0000000000004202 0x75 lib/lib.a(dup.o) + .debug_abbrev 0x0000000000004277 0x73 lib/lib.a(setsid.o) + .debug_abbrev 0x00000000000042ea 0x85 lib/lib.a(execve.o) + .debug_abbrev 0x000000000000436f 0xb6 lib/lib.a(wait.o) + .debug_abbrev 0x0000000000004425 0xe9 lib/lib.a(string.o) + +.debug_line 0x0000000000000000 0x4934 + *(.debug_line .debug_line.* .debug_line_end) + .debug_line 0x0000000000000000 0x1e5 init/main.o + .debug_line 0x00000000000001e5 0xe8d kernel/kernel.o + .debug_line 0x0000000000001072 0x2b4 mm/mm.o + .debug_line 0x0000000000001326 0x1f66 fs/fs.o + .debug_line 0x000000000000328c 0x197 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_line 0x0000000000003423 0x24c kernel/blk_drv/blk_drv.a(floppy.o) + .debug_line 0x000000000000366f 0x2bf kernel/blk_drv/blk_drv.a(hd.o) + .debug_line 0x000000000000392e 0x160 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_line 0x0000000000003a8e 0x33b kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_line 0x0000000000003dc9 0x3ab kernel/chr_drv/chr_drv.a(console.o) + .debug_line 0x0000000000004174 0xd9 kernel/chr_drv/chr_drv.a(serial.o) + .debug_line 0x000000000000424d 0x1db kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_line 0x0000000000004428 0xe1 kernel/math/math.a(math_emulate.o) + .debug_line 0x0000000000004509 0x28 lib/lib.a(ctype.o) + .debug_line 0x0000000000004531 0x39 lib/lib.a(_exit.o) + .debug_line 0x000000000000456a 0x62 lib/lib.a(open.o) + .debug_line 0x00000000000045cc 0x5c lib/lib.a(close.o) + .debug_line 0x0000000000004628 0x28 lib/lib.a(errno.o) + .debug_line 0x0000000000004650 0x76 lib/lib.a(write.o) + .debug_line 0x00000000000046c6 0x5a lib/lib.a(dup.o) + .debug_line 0x0000000000004720 0x77 lib/lib.a(setsid.o) + .debug_line 0x0000000000004797 0x5d lib/lib.a(execve.o) + .debug_line 0x00000000000047f4 0x7a lib/lib.a(wait.o) + .debug_line 0x000000000000486e 0xc6 lib/lib.a(string.o) + +.debug_frame + *(.debug_frame) + +.debug_str 0x0000000000000000 0x21ee + *(.debug_str) + .debug_str 0x0000000000000000 0x3ba init/main.o + 0x462 (size before relaxing) + .debug_str 0x00000000000003ba 0x900 kernel/kernel.o + 0x233a (size before relaxing) + .debug_str 0x0000000000000cba 0x18c mm/mm.o + 0x4e7 (size before relaxing) + .debug_str 0x0000000000000e46 0x9fa fs/fs.o + 0x4b39 (size before relaxing) + .debug_str 0x0000000000001840 0xf0 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x491 (size before relaxing) + .debug_str 0x0000000000001930 0x1cf kernel/blk_drv/blk_drv.a(floppy.o) + 0x673 (size before relaxing) + .debug_str 0x0000000000001aff 0x15e kernel/blk_drv/blk_drv.a(hd.o) + 0x5e8 (size before relaxing) + .debug_str 0x0000000000001c5d 0x43 kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x58a (size before relaxing) + .debug_str 0x0000000000001ca0 0xfb kernel/chr_drv/chr_drv.a(tty_io.o) + 0x4e3 (size before relaxing) + .debug_str 0x0000000000001d9b 0x1b9 kernel/chr_drv/chr_drv.a(console.o) + 0x5b7 (size before relaxing) + .debug_str 0x0000000000001f54 0x1a kernel/chr_drv/chr_drv.a(serial.o) + 0x3fc (size before relaxing) + .debug_str 0x0000000000001f6e 0x8b kernel/chr_drv/chr_drv.a(tty_ioctl.o) + 0x4a7 (size before relaxing) + .debug_str 0x0000000000001ff9 0x70 kernel/math/math.a(math_emulate.o) + 0x392 (size before relaxing) + .debug_str 0x0000000000002069 0x8d lib/lib.a(ctype.o) + 0xb6 (size before relaxing) + .debug_str 0x00000000000020f6 0x33 lib/lib.a(_exit.o) + 0xe0 (size before relaxing) + .debug_str 0x0000000000000000 0x33 lib/lib.a(open.o) + 0xf0 (size before relaxing) + .debug_str 0x0000000000002129 0x8 lib/lib.a(close.o) + 0xe2 (size before relaxing) + .debug_str 0x0000000000002131 0x8 lib/lib.a(errno.o) + 0x93 (size before relaxing) + .debug_str 0x0000000000000000 0x8 lib/lib.a(write.o) + 0xee (size before relaxing) + .debug_str 0x0000000000002139 0x6 lib/lib.a(dup.o) + 0xda (size before relaxing) + .debug_str 0x000000000000213f 0x9 lib/lib.a(setsid.o) + 0xea (size before relaxing) + .debug_str 0x0000000000002148 0x9 lib/lib.a(execve.o) + 0xf3 (size before relaxing) + .debug_str 0x0000000000002151 0x11 lib/lib.a(wait.o) + 0x100 (size before relaxing) + .debug_str 0x0000000000002162 0x8c lib/lib.a(string.o) + 0x147 (size before relaxing) + +.debug_loc + *(.debug_loc) + +.debug_macinfo + *(.debug_macinfo) + +.debug_weaknames + *(.debug_weaknames) + +.debug_funcnames + *(.debug_funcnames) + +.debug_typenames + *(.debug_typenames) + +.debug_varnames + *(.debug_varnames) + +.debug_pubtypes + *(.debug_pubtypes) + +.debug_ranges 0x0000000000000000 0x18 + *(.debug_ranges) + .debug_ranges 0x0000000000000000 0x18 init/main.o + +.debug_macro + *(.debug_macro) + +.gnu.attributes + *(.gnu.attributes) + +/DISCARD/ + *(.note.GNU-stack) + *(.gnu_debuglink) + *(.gnu.lto_*) +OUTPUT(tools/system elf32-i386) diff --git a/linux-0.11-lab/4/linux/boot/bootsect b/linux-0.11-lab/4/linux/boot/bootsect new file mode 100644 index 0000000000000000000000000000000000000000..4fbb8f823afe23687f1887d48deeb19fdcf83049 GIT binary patch literal 544 zcmZQ%7GP0e00JfufdrZ$>>UT#`)=%Dn9z4%Cj+DAH_iW_m%fre~uHUSwNXN9*i=ymehGJ;Ln!ff#WtiVnQ zhTZH8d+ix_Fbba)*ufysci@E)!;7N~dJF$B+A=VditBaD0d;UNHUH)>;o2bsq=ibD zUjNfu{D<)s1B1c@RhzFW-(_8 zyWs)N8wX!-zAym_G6SXbtl4ZCONDkYGHA2SVkl+#&o+l)@hk?z1B+)cfHa*h-qdq| z733tt+pm`g1P2Cni_Kx^=9|Ib*m1R6Y!*YuwM`6-j~E!Y0DW7;8WkBGaTw@dps&vg zgE+6x1nv67yn*3e)L{k&UM`>f#FWgubcN!|;*!){1wB1IUM^lPq<|j0Og84wRRH+h BgWdoD literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/boot/bootsect.o b/linux-0.11-lab/4/linux/boot/bootsect.o new file mode 100644 index 0000000000000000000000000000000000000000..e35422ec017a165928bfcbec5f9f0363b4a9e75c GIT binary patch literal 923 zcmYjPe@GKy7=FH+PB$=@gOrLGSb;@HGl?KZQ#V8qHK&qRjLn^EOg*`~_2a*bAQEj2 z`bR7R8DjO1Ax5YD;D!W64T2~X>5mFT9P~#*1c~eYW`BB3fn$y+MeVjqc)FB7D{5ZwQc zlnx;W9UDX^enV$llvLXoyfYO9Z}$=84ic;$V`O7tS=LmkPeZ`p+0`EKHzCjy2sHQl zw}lpeD-uHysXwTY5sDOw1Y=|-4_TXAn>%^rd%=iw84Yc11;O9ydW>fq~$ltjP-a7_y>584mLI>~!sq4M`D5Ly@qm@(>AWA%vwU zr%{<_+X|nde;^cvTBwf1Bxp*gFV1T;>8i$^g?NcKSG5q0@!xcE+`au;IbOSyoY+a~ z{!PR`f4ixx+SO^8CCMcNsiZj%R`aVSzcIBg=v7dW8hevmN}95U=#^i zr)no|09j{lb(WIStn(?vkzMq|I|{AlEXVU%$9xr@m*6E`j|&EKW*r6`Npr0hYp)?r zZZZ#$s1!#JP?cts3OD|gYj$Hl#R^TxZHehkwhp*b#dJ@BG4oNrJhA0o88bcbDr`}l zq`HQqR(%{jBbm%s8(UUwT8Z1NS<0;0*6J{lvGC1C@wAnkO^FJFf$S6TC5rM^{XXi` zL>k>@nq232gLmrem|4t+bg$&5+XH7iM)#1fVRRQc{Pnj!5uJed*5_GV{{}WkC!rMg z_MAVrNM}JOl67*Dd*89})A9sAdKZB*dkfv2*ih7^UQ;z`&?SnZugqR%-#z8CTDl%r F<1c(7E-?TA literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/boot/bootsect.s b/linux-0.11-lab/4/linux/boot/bootsect.s new file mode 100644 index 0000000..711f103 --- /dev/null +++ b/linux-0.11-lab/4/linux/boot/bootsect.s @@ -0,0 +1,260 @@ +! +! SYS_SIZE is the number of clicks (16 bytes) to be loaded. +! 0x3000 is 0x30000 bytes = 196kB, more than enough for current +! versions of linux +! +SYSSIZE = 0x3000 +! +! bootsect.s (C) 1991 Linus Torvalds +! +! bootsect.s is loaded at 0x7c00 by the bios-startup routines, and moves +! iself out of the way to address 0x90000, and jumps there. +! +! It then loads 'setup' directly after itself (0x90200), and the system +! at 0x10000, using BIOS interrupts. +! +! NOTE! currently system is at most 8*65536 bytes long. This should be no +! problem, even in the future. I want to keep it simple. This 512 kB +! kernel size should be enough, especially as this doesn't contain the +! buffer cache as in minix +! +! The loader has been made as simple as possible, and continuos +! read errors will result in a unbreakable loop. Reboot by hand. It +! loads pretty fast by getting whole sectors at a time whenever possible. + +.globl begtext, begdata, begbss, endtext, enddata, endbss +.text +begtext: +.data +begdata: +.bss +begbss: +.text + +SETUPLEN = 4 ! nr of setup-sectors +BOOTSEG = 0x07c0 ! original address of boot-sector +INITSEG = 0x9000 ! we move boot here - out of the way +SETUPSEG = 0x9020 ! setup starts here +SYSSEG = 0x1000 ! system loaded at 0x10000 (65536). +ENDSEG = SYSSEG + SYSSIZE ! where to stop loading + +! ROOT_DEV: 0x000 - same type of floppy as boot. +! 0x301 - first partition on first drive etc +ROOT_DEV = 0x306 + +entry start +start: + mov ax,#BOOTSEG + mov ds,ax + mov ax,#INITSEG + mov es,ax + mov cx,#256 + sub si,si + sub di,di + rep + movw + jmpi go,INITSEG +go: mov ax,cs + mov ds,ax + mov es,ax +! put stack at 0x9ff00. + mov ss,ax + mov sp,#0xFF00 ! arbitrary value >>512 + +! load the setup-sectors directly after the bootblock. +! Note that 'es' is already set up. + +load_setup: + mov dx,#0x0000 ! drive 0, head 0 + mov cx,#0x0002 ! sector 2, track 0 + mov bx,#0x0200 ! address = 512, in INITSEG + mov ax,#0x0200+SETUPLEN ! service 2, nr of sectors + int 0x13 ! read it + jnc ok_load_setup ! ok - continue + mov dx,#0x0000 + mov ax,#0x0000 ! reset the diskette + int 0x13 + j load_setup + +ok_load_setup: + +! Get disk drive parameters, specifically nr of sectors/track + + mov dl,#0x00 + mov ax,#0x0800 ! AH=8 is get drive parameters + int 0x13 + mov ch,#0x00 + seg cs + mov sectors,cx + mov ax,#INITSEG + mov es,ax + +! Print some inane message + + mov ah,#0x03 ! read cursor pos + xor bh,bh + int 0x10 + + mov cx,#24 + mov bx,#0x0007 ! page 0, attribute 7 (normal) + mov bp,#msg1 + mov ax,#0x1301 ! write string, move cursor + int 0x10 + +! ok, we've written the message, now +! we want to load the system (at 0x10000) + + mov ax,#SYSSEG + mov es,ax ! segment of 0x010000 + call read_it + call kill_motor + +! After that we check which root-device to use. If the device is +! defined (!= 0), nothing is done and the given device is used. +! Otherwise, either /dev/PS0 (2,28) or /dev/at0 (2,8), depending +! on the number of sectors that the BIOS reports currently. + + seg cs + mov ax,root_dev + cmp ax,#0 + jne root_defined + seg cs + mov bx,sectors + mov ax,#0x0208 ! /dev/ps0 - 1.2Mb + cmp bx,#15 + je root_defined + mov ax,#0x021c ! /dev/PS0 - 1.44Mb + cmp bx,#18 + je root_defined +undef_root: + jmp undef_root +root_defined: + seg cs + mov root_dev,ax + +! after that (everyting loaded), we jump to +! the setup-routine loaded directly after +! the bootblock: + + jmpi 0,SETUPSEG + +! This routine loads the system at address 0x10000, making sure +! no 64kB boundaries are crossed. We try to load it as fast as +! possible, loading whole tracks whenever we can. +! +! in: es - starting address segment (normally 0x1000) +! +sread: .word 1+SETUPLEN ! sectors read of current track +head: .word 0 ! current head +track: .word 0 ! current track + +read_it: + mov ax,es + test ax,#0x0fff +die: jne die ! es must be at 64kB boundary + xor bx,bx ! bx is starting address within segment +rp_read: + mov ax,es + cmp ax,#ENDSEG ! have we loaded all yet? + jb ok1_read + ret +ok1_read: + seg cs + mov ax,sectors + sub ax,sread + mov cx,ax + shl cx,#9 + add cx,bx + jnc ok2_read + je ok2_read + xor ax,ax + sub ax,bx + shr ax,#9 +ok2_read: + call read_track + mov cx,ax + add ax,sread + seg cs + cmp ax,sectors + jne ok3_read + mov ax,#1 + sub ax,head + jne ok4_read + inc track +ok4_read: + mov head,ax + xor ax,ax +ok3_read: + mov sread,ax + shl cx,#9 + add bx,cx + jnc rp_read + mov ax,es + add ax,#0x1000 + mov es,ax + xor bx,bx + jmp rp_read + +read_track: + push ax + push bx + push cx + push dx + mov dx,track + mov cx,sread + inc cx + mov ch,dl + mov dx,head + mov dh,dl + mov dl,#0 + and dx,#0x0100 + mov ah,#2 + int 0x13 + jc bad_rt + pop dx + pop cx + pop bx + pop ax + ret +bad_rt: mov ax,#0 + mov dx,#0 + int 0x13 + pop dx + pop cx + pop bx + pop ax + jmp read_track + +/* + * This procedure turns off the floppy drive motor, so + * that we enter the kernel in a known state, and + * don't have to worry about it later. + */ +kill_motor: + push dx + mov dx,#0x3f2 + mov al,#0 + outb + pop dx + ret + +sectors: + .word 0 + +msg1: + .byte 13,10 + .ascii "Loading system ..." + .byte 13,10,13,10 + +.org 508 +root_dev: + .word ROOT_DEV +boot_flag: + .word 0xAA55 + +.text +endtext: +.data +enddata: +.bss +endbss: diff --git a/linux-0.11-lab/4/linux/boot/head.o b/linux-0.11-lab/4/linux/boot/head.o new file mode 100644 index 0000000000000000000000000000000000000000..a4c55649c84336692e2f017e7d3b9dc5fd3082ba GIT binary patch literal 27012 zcmeI5O=ule7>2)-rn#v$OwS%uL!8 z6a%qn7P*Sc3jRisn&iB4& z&iUrdGdG*FIOn4m54>cIk-Qk$Ah(^!ke}VzorWRlmW`=8*Nf1++Dw|)n=8(lL2X<) zq}4H0_qtn3hEHg(eMrzN@gL4WGWd|l-26`+&h}(Q)Bb+)4UucVe)-Gw{Sx<}!~D%I z+*?{aEZ2TpTI?Ts6R8Drs4QHmT#)ACbDHqHPI#fPaIkZJx%=grzZ~<#59qk$nEtaG zwGRskkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@{I3YSFZx$|7#nQXbmBLjzwysojfuwek;Xv15&K~{ z6T}bn$jEE2Z|!ovS+gN%tq)^XR$HyssPk=M+o88dFJpht^U^0$N=mKOKTj>|UZ7II z4x`H(J5>#+>Q=Qw)n--0B9~TQ#eSfLn=SeK)YI5gR6e{_N}TOiv2kb*y3Aqg&{f?# zRHRiv)sBntlbK~r0wh2JBtQZrur3L-9K81NMAG<0vMw3$rAdGUNPq-LVBHWXMn|V& zZ%m3&9A>eWtI(e;#{O(9#j+QBQXGq-`^K^jJ@x#QE<0i`Vp6sSL02)fJdSHqsHM(blD3iP(3Pv78q7&_8 zM*5-k_?fI2(eEHwXv&I_5`-Qfll%P;pXV0YUx3zAW3po86$m{&CikN%^o7%6cM$*qTtc_Ysx=5yrWmz#Y0Wq@1&%*1%SXPY8K_u4qV*JPI(}(IbjC`7P zOl$R@sT#=|)qkDIv{wK99Ukv?m%n(Im&lK20=Hg{t*Sze*ZlDbcXsa{@hVv2a|5sH zyZGms^dqTP8`GihV(m}Dz>RbuF1PGQ!HL`fm@lJ4uYeu7y6z=u@~z6cI{M&Nu>=k<<%P!gh--%^>djmB1Ic# zG~x&OiAMa0zq0GKeRF1UbBAE`q28r)_-9Aob|_S NJgpJWKc}%z4Mb on a 4Mb machine). + * + * NOTE! Although all physical memory should be identity + * mapped by this routine, only the kernel page functions + * use the >1Mb addresses directly. All "normal" functions + * use just the lower 1Mb, or the local data space, which + * will be mapped to some other place - mm keeps track of + * that. + * + * For those with more memory than 16 Mb - tough luck. I've + * not got it, why should you :-) The source is here. Change + * it. (Seriously - it shouldn't be too difficult. Mostly + * change some constants etc. I left it at 16Mb, as my machine + * even cannot be extended past that (ok, but it was cheap :-) + * I've tried to show which constants to change by having + * some kind of marker at them (search for "16Mb"), but I + * won't guarantee that's all :-( ) + */ +.align 4 +setup_paging: + movl $1024*5,%ecx /* 5 pages - pg_dir+4 page tables */ + xorl %eax,%eax + xorl %edi,%edi /* pg_dir is at 0x000 */ + cld;rep;stosl + movl $pg0+7,pg_dir /* set present bit/user r/w */ + movl $pg1+7,pg_dir+4 /* --------- " " --------- */ + movl $pg2+7,pg_dir+8 /* --------- " " --------- */ + movl $pg3+7,pg_dir+12 /* --------- " " --------- */ + movl $pg3+4092,%edi + movl $0xfff007,%eax /* 16Mb - 4096 + 7 (r/w user,p) */ + std +1: stosl /* fill pages backwards - more efficient :-) */ + subl $0x1000,%eax + jge 1b + xorl %eax,%eax /* pg_dir is at 0x0000 */ + movl %eax,%cr3 /* cr3 - page directory start */ + movl %cr0,%eax + orl $0x80000000,%eax + movl %eax,%cr0 /* set paging (PG) bit */ + cld /* by wyj */ + ret /* this also flushes prefetch-queue */ + +.align 4 +.word 0 +idt_descr: + .word 256*8-1 # idt contains 256 entries + .long idt +.align 4 +.word 0 +gdt_descr: + .word 256*8-1 # so does gdt (not that that's any + .long gdt # magic number, but it works for me :^) + + .align 8 +idt: .fill 256,8,0 # idt is uninitialized + +gdt: .quad 0x0000000000000000 /* NULL descriptor */ + .quad 0x00c09a0000000fff /* 16Mb */ + .quad 0x00c0920000000fff /* 16Mb */ + .quad 0x0000000000000000 /* TEMPORARY - don't use */ + .fill 252,8,0 /* space for LDT's and TSS's etc */ diff --git a/linux-0.11-lab/4/linux/boot/setup b/linux-0.11-lab/4/linux/boot/setup new file mode 100644 index 0000000000000000000000000000000000000000..0e70f4846819f560fb2e22a8eb1e7186c7956ab0 GIT binary patch literal 344 zcmZQ%7GP0eU|_Id1QJNVq7lN`!7!ok#ujFS|7Qg{#TXd2bet7k%*3#TAIOzsVOY$@ zutjLIz*&LC91NXuTnwFjJPbP+82WA;HDh4}X+5yNfnlcr!{;SXQ3*l_<@!izwL4T8@UUNgLAc(wpUZcuop2&OfjEda<7{%Xg;=gL$t<~Tutazx3hbYqSrLZVca%ibUp9b?$HkVw;4TnF?Rz@46w`UObliF2LrIX1l zD$%Xa$Sgt^u2&7@|GQ@O1M(N{a&->*XRca94ek$5^Qt@KbHx4WGu-r2)9WkibQgy407%ZoGynhq literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/boot/setup.s b/linux-0.11-lab/4/linux/boot/setup.s new file mode 100644 index 0000000..2329d00 --- /dev/null +++ b/linux-0.11-lab/4/linux/boot/setup.s @@ -0,0 +1,231 @@ +! +! setup.s (C) 1991 Linus Torvalds +! +! setup.s is responsible for getting the system data from the BIOS, +! and putting them into the appropriate places in system memory. +! both setup.s and system has been loaded by the bootblock. +! +! This code asks the bios for memory/disk/other parameters, and +! puts them in a "safe" place: 0x90000-0x901FF, ie where the +! boot-block used to be. It is then up to the protected mode +! system to read them from there before the area is overwritten +! for buffer-blocks. +! + +! NOTE! These had better be the same as in bootsect.s! + +INITSEG = 0x9000 ! we move boot here - out of the way +SYSSEG = 0x1000 ! system loaded at 0x10000 (65536). +SETUPSEG = 0x9020 ! this is the current segment + +.globl begtext, begdata, begbss, endtext, enddata, endbss +.text +begtext: +.data +begdata: +.bss +begbss: +.text + +entry start +start: + +! ok, the read went well so we get current cursor position and save it for +! posterity. + + mov ax,#INITSEG ! this is done in bootsect already, but... + mov ds,ax + mov ah,#0x03 ! read cursor pos + xor bh,bh + int 0x10 ! save it in known place, con_init fetches + mov [0],dx ! it from 0x90000. + +! Get memory size (extended mem, kB) + + mov ah,#0x88 + int 0x15 + mov [2],ax + +! Get video-card data: + + mov ah,#0x0f + int 0x10 + mov [4],bx ! bh = display page + mov [6],ax ! al = video mode, ah = window width + +! check for EGA/VGA and some config parameters + + mov ah,#0x12 + mov bl,#0x10 + int 0x10 + mov [8],ax + mov [10],bx + mov [12],cx + +! Get hd0 data + + mov ax,#0x0000 + mov ds,ax + lds si,[4*0x41] + mov ax,#INITSEG + mov es,ax + mov di,#0x0080 + mov cx,#0x10 + rep + movsb + +! Get hd1 data + + mov ax,#0x0000 + mov ds,ax + lds si,[4*0x46] + mov ax,#INITSEG + mov es,ax + mov di,#0x0090 + mov cx,#0x10 + rep + movsb + +! Check that there IS a hd1 :-) + + mov ax,#0x01500 + mov dl,#0x81 + int 0x13 + jc no_disk1 + cmp ah,#3 + je is_disk1 +no_disk1: + mov ax,#INITSEG + mov es,ax + mov di,#0x0090 + mov cx,#0x10 + mov ax,#0x00 + rep + stosb +is_disk1: + +! now we want to move to protected mode ... + + cli ! no interrupts allowed ! + +! first we move the system to it's rightful place + + mov ax,#0x0000 + cld ! 'direction'=0, movs moves forward +do_move: + mov es,ax ! destination segment + add ax,#0x1000 + cmp ax,#0x9000 + jz end_move + mov ds,ax ! source segment + sub di,di + sub si,si + mov cx,#0x8000 + rep + movsw + jmp do_move + +! then we load the segment descriptors + +end_move: + mov ax,#SETUPSEG ! right, forgot this at first. didn't work :-) + mov ds,ax + lidt idt_48 ! load idt with 0,0 + lgdt gdt_48 ! load gdt with whatever appropriate + +! that was painless, now we enable A20 + + call empty_8042 + mov al,#0xD1 ! command write + out #0x64,al + call empty_8042 + mov al,#0xDF ! A20 on + out #0x60,al + call empty_8042 + +! well, that went ok, I hope. Now we have to reprogram the interrupts :-( +! we put them right after the intel-reserved hardware interrupts, at +! int 0x20-0x2F. There they won't mess up anything. Sadly IBM really +! messed this up with the original PC, and they haven't been able to +! rectify it afterwards. Thus the bios puts interrupts at 0x08-0x0f, +! which is used for the internal hardware interrupts as well. We just +! have to reprogram the 8259's, and it isn't fun. + + mov al,#0x11 ! initialization sequence + out #0x20,al ! send it to 8259A-1 + .word 0x00eb,0x00eb ! jmp $+2, jmp $+2 + out #0xA0,al ! and to 8259A-2 + .word 0x00eb,0x00eb + mov al,#0x20 ! start of hardware int's (0x20) + out #0x21,al + .word 0x00eb,0x00eb + mov al,#0x28 ! start of hardware int's 2 (0x28) + out #0xA1,al + .word 0x00eb,0x00eb + mov al,#0x04 ! 8259-1 is master + out #0x21,al + .word 0x00eb,0x00eb + mov al,#0x02 ! 8259-2 is slave + out #0xA1,al + .word 0x00eb,0x00eb + mov al,#0x01 ! 8086 mode for both + out #0x21,al + .word 0x00eb,0x00eb + out #0xA1,al + .word 0x00eb,0x00eb + mov al,#0xFF ! mask off all interrupts for now + out #0x21,al + .word 0x00eb,0x00eb + out #0xA1,al + +! well, that certainly wasn't fun :-(. Hopefully it works, and we don't +! need no steenking BIOS anyway (except for the initial loading :-). +! The BIOS-routine wants lots of unnecessary data, and it's less +! "interesting" anyway. This is how REAL programmers do it. +! +! Well, now's the time to actually move into protected mode. To make +! things as simple as possible, we do no register set-up or anything, +! we let the gnu-compiled 32-bit programs do that. We just jump to +! absolute address 0x00000, in 32-bit protected mode. + + mov ax,#0x0001 ! protected mode (PE) bit + lmsw ax ! This is it! + jmpi 0,8 ! jmp offset 0 of segment 8 (cs) + +! This routine checks that the keyboard command queue is empty +! No timeout is used - if this hangs there is something wrong with +! the machine, and we probably couldn't proceed anyway. +empty_8042: + .word 0x00eb,0x00eb + in al,#0x64 ! 8042 status port + test al,#2 ! is input buffer full? + jnz empty_8042 ! yes - loop + ret + +gdt: + .word 0,0,0,0 ! dummy + + .word 0x07FF ! 8Mb - limit=2047 (2048*4096=8Mb) + .word 0x0000 ! base address=0 + .word 0x9A00 ! code read/exec + .word 0x00C0 ! granularity=4096, 386 + + .word 0x07FF ! 8Mb - limit=2047 (2048*4096=8Mb) + .word 0x0000 ! base address=0 + .word 0x9200 ! data read/write + .word 0x00C0 ! granularity=4096, 386 + +idt_48: + .word 0 ! idt limit=0 + .word 0,0 ! idt base=0L + +gdt_48: + .word 0x800 ! gdt limit=2048, 256 GDT entries + .word 512+gdt,0x9 ! gdt base = 0X9xxxx + +.text +endtext: +.data +enddata: +.bss +endbss: diff --git a/linux-0.11-lab/4/linux/fs/Makefile b/linux-0.11-lab/4/linux/fs/Makefile new file mode 100644 index 0000000..970acd4 --- /dev/null +++ b/linux-0.11-lab/4/linux/fs/Makefile @@ -0,0 +1,101 @@ +AR =ar +AS =as +LD =ld +LDFLAGS =-s -x +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -finline-functions -nostdinc -fno-stack-protector -I../include +CPP =gcc -E -nostdinc -I../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< +.s.o: + $(AS) -o $*.o $< + +OBJS= open.o read_write.o inode.o file_table.o buffer.o super.o \ + block_dev.o char_dev.o file_dev.o stat.o exec.o pipe.o namei.o \ + bitmap.o fcntl.o ioctl.o truncate.o select.o + +fs.o: $(OBJS) + $(LD) -r -o fs.o $(OBJS) + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +bitmap.o : bitmap.c ../include/string.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h +block_dev.o : block_dev.c ../include/errno.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h ../include/asm/system.h +buffer.o : buffer.c ../include/stdarg.h ../include/linux/config.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/sys/types.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/system.h ../include/asm/io.h +char_dev.o : char_dev.c ../include/errno.h ../include/sys/types.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h ../include/asm/io.h +exec.o : exec.c ../include/errno.h ../include/string.h \ + ../include/sys/stat.h ../include/sys/types.h ../include/a.out.h \ + ../include/linux/fs.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h +fcntl.o : fcntl.c ../include/string.h ../include/errno.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/sys/types.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/segment.h ../include/fcntl.h \ + ../include/sys/stat.h +file_dev.o : file_dev.c ../include/errno.h ../include/fcntl.h \ + ../include/sys/types.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/segment.h +file_table.o : file_table.c ../include/linux/fs.h ../include/sys/types.h +inode.o : inode.c ../include/string.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/system.h +ioctl.o : ioctl.c ../include/string.h ../include/errno.h \ + ../include/sys/stat.h ../include/sys/types.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \ + ../include/signal.h +namei.o : namei.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/linux/kernel.h ../include/asm/segment.h \ + ../include/string.h ../include/fcntl.h ../include/errno.h \ + ../include/const.h ../include/sys/stat.h +open.o : open.c ../include/string.h ../include/errno.h ../include/fcntl.h \ + ../include/sys/types.h ../include/utime.h ../include/sys/stat.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/tty.h \ + ../include/termios.h ../include/linux/kernel.h ../include/asm/segment.h +pipe.o : pipe.c ../include/signal.h ../include/sys/types.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/linux/mm.h ../include/asm/segment.h +read_write.o : read_write.c ../include/sys/stat.h ../include/sys/types.h \ + ../include/errno.h ../include/linux/kernel.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \ + ../include/signal.h ../include/asm/segment.h +stat.o : stat.c ../include/errno.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/linux/fs.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/segment.h +super.o : super.c ../include/linux/config.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/system.h ../include/errno.h ../include/sys/stat.h +truncate.o : truncate.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/sys/stat.h diff --git a/linux-0.11-lab/4/linux/fs/bitmap.c b/linux-0.11-lab/4/linux/fs/bitmap.c new file mode 100644 index 0000000..73951a8 --- /dev/null +++ b/linux-0.11-lab/4/linux/fs/bitmap.c @@ -0,0 +1,168 @@ +/* + * linux/fs/bitmap.c + * + * (C) 1991 Linus Torvalds + */ + +/* bitmap.c contains the code that handles the inode and block bitmaps */ +#include + +#include +#include + +#define clear_block(addr) \ +__asm__ __volatile__ ("cld\n\t" \ + "rep\n\t" \ + "stosl" \ + ::"a" (0),"c" (BLOCK_SIZE/4),"D" ((long) (addr))) + +#define set_bit(nr,addr) ({\ +register int res __asm__("ax"); \ +__asm__ __volatile__("btsl %2,%3\n\tsetb %%al": \ +"=a" (res):"0" (0),"r" (nr),"m" (*(addr))); \ +res;}) + +#define clear_bit(nr,addr) ({\ +register int res __asm__("ax"); \ +__asm__ __volatile__("btrl %2,%3\n\tsetnb %%al": \ +"=a" (res):"0" (0),"r" (nr),"m" (*(addr))); \ +res;}) + +#define find_first_zero(addr) ({ \ +int __res; \ +__asm__ __volatile__ ("cld\n" \ + "1:\tlodsl\n\t" \ + "notl %%eax\n\t" \ + "bsfl %%eax,%%edx\n\t" \ + "je 2f\n\t" \ + "addl %%edx,%%ecx\n\t" \ + "jmp 3f\n" \ + "2:\taddl $32,%%ecx\n\t" \ + "cmpl $8192,%%ecx\n\t" \ + "jl 1b\n" \ + "3:" \ + :"=c" (__res):"c" (0),"S" (addr)); \ +__res;}) + +void free_block(int dev, int block) +{ + struct super_block * sb; + struct buffer_head * bh; + + if (!(sb = get_super(dev))) + panic("trying to free block on nonexistent device"); + if (block < sb->s_firstdatazone || block >= sb->s_nzones) + panic("trying to free block not in datazone"); + bh = get_hash_table(dev,block); + if (bh) { + if (bh->b_count != 1) { + printk("trying to free block (%04x:%d), count=%d\n", + dev,block,bh->b_count); + return; + } + bh->b_dirt=0; + bh->b_uptodate=0; + brelse(bh); + } + block -= sb->s_firstdatazone - 1 ; + if (clear_bit(block&8191,sb->s_zmap[block/8192]->b_data)) { + printk("block (%04x:%d) ",dev,block+sb->s_firstdatazone-1); + panic("free_block: bit already cleared"); + } + sb->s_zmap[block/8192]->b_dirt = 1; +} + +int new_block(int dev) +{ + struct buffer_head * bh; + struct super_block * sb; + int i,j; + + if (!(sb = get_super(dev))) + panic("trying to get new block from nonexistant device"); + j = 8192; + for (i=0 ; i<8 ; i++) + if (bh=sb->s_zmap[i]) + if ((j=find_first_zero(bh->b_data))<8192) + break; + if (i>=8 || !bh || j>=8192) + return 0; + if (set_bit(j,bh->b_data)) + panic("new_block: bit already set"); + bh->b_dirt = 1; + j += i*8192 + sb->s_firstdatazone-1; + if (j >= sb->s_nzones) + return 0; + if (!(bh=getblk(dev,j))) + panic("new_block: cannot get block"); + if (bh->b_count != 1) + panic("new block: count is != 1"); + clear_block(bh->b_data); + bh->b_uptodate = 1; + bh->b_dirt = 1; + brelse(bh); + return j; +} + +void free_inode(struct m_inode * inode) +{ + struct super_block * sb; + struct buffer_head * bh; + + if (!inode) + return; + if (!inode->i_dev) { + memset(inode,0,sizeof(*inode)); + return; + } + if (inode->i_count>1) { + printk("trying to free inode with count=%d\n",inode->i_count); + panic("free_inode"); + } + if (inode->i_nlinks) + panic("trying to free inode with links"); + if (!(sb = get_super(inode->i_dev))) + panic("trying to free inode on nonexistent device"); + if (inode->i_num < 1 || inode->i_num > sb->s_ninodes) + panic("trying to free inode 0 or nonexistant inode"); + if (!(bh=sb->s_imap[inode->i_num>>13])) + panic("nonexistent imap in superblock"); + if (clear_bit(inode->i_num&8191,bh->b_data)) + printk("free_inode: bit already cleared.\n\r"); + bh->b_dirt = 1; + memset(inode,0,sizeof(*inode)); +} + +struct m_inode * new_inode(int dev) +{ + struct m_inode * inode; + struct super_block * sb; + struct buffer_head * bh; + int i,j; + + if (!(inode=get_empty_inode())) + return NULL; + if (!(sb = get_super(dev))) + panic("new_inode with unknown device"); + j = 8192; + for (i=0 ; i<8 ; i++) + if (bh=sb->s_imap[i]) + if ((j=find_first_zero(bh->b_data))<8192) + break; + if (!bh || j >= 8192 || j+i*8192 > sb->s_ninodes) { + iput(inode); + return NULL; + } + if (set_bit(j,bh->b_data)) + panic("new_inode: bit already set"); + bh->b_dirt = 1; + inode->i_count=1; + inode->i_nlinks=1; + inode->i_dev=dev; + inode->i_uid=current->euid; + inode->i_gid=current->egid; + inode->i_dirt=1; + inode->i_num = j + i*8192; + inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; + return inode; +} diff --git a/linux-0.11-lab/4/linux/fs/bitmap.o b/linux-0.11-lab/4/linux/fs/bitmap.o new file mode 100644 index 0000000000000000000000000000000000000000..501d3c5e3fb1a044792589a0bdde55cbb41cfaa2 GIT binary patch literal 10280 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 J@|j5fe*vQQ&y@fG literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/fs/block_dev.c b/linux-0.11-lab/4/linux/fs/block_dev.c new file mode 100644 index 0000000..a50ae3f --- /dev/null +++ b/linux-0.11-lab/4/linux/fs/block_dev.c @@ -0,0 +1,73 @@ +/* + * linux/fs/block_dev.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +#include +#include +#include +#include + +int block_write(int dev, long * pos, char * buf, int count) +{ + int block = *pos >> BLOCK_SIZE_BITS; + int offset = *pos & (BLOCK_SIZE-1); + int chars; + int written = 0; + struct buffer_head * bh; + register char * p; + + while (count>0) { + chars = BLOCK_SIZE - offset; + if (chars > count) + chars=count; + if (chars == BLOCK_SIZE) + bh = getblk(dev,block); + else + bh = breada(dev,block,block+1,block+2,-1); + block++; + if (!bh) + return written?written:-EIO; + p = offset + bh->b_data; + offset = 0; + *pos += chars; + written += chars; + count -= chars; + while (chars-->0) + *(p++) = get_fs_byte(buf++); + bh->b_dirt = 1; + brelse(bh); + } + return written; +} + +int block_read(int dev, unsigned long * pos, char * buf, int count) +{ + int block = *pos >> BLOCK_SIZE_BITS; + int offset = *pos & (BLOCK_SIZE-1); + int chars; + int read = 0; + struct buffer_head * bh; + register char * p; + + while (count>0) { + chars = BLOCK_SIZE-offset; + if (chars > count) + chars = count; + if (!(bh = breada(dev,block,block+1,block+2,-1))) + return read?read:-EIO; + block++; + p = offset + bh->b_data; + offset = 0; + *pos += chars; + read += chars; + count -= chars; + while (chars-->0) + put_fs_byte(*(p++),buf++); + brelse(bh); + } + return read; +} diff --git a/linux-0.11-lab/4/linux/fs/block_dev.o b/linux-0.11-lab/4/linux/fs/block_dev.o new file mode 100644 index 0000000000000000000000000000000000000000..e5e9334ce9a4697061730271c4c9d92fcf4aa105 GIT binary patch literal 7296 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 + +#include +#include +#include +#include +#include + +extern void put_super(int dev); +extern void invalidate_inodes(int dev); + +extern int end; +struct buffer_head * start_buffer = (struct buffer_head *) &end; +struct buffer_head * hash_table[NR_HASH]; +static struct buffer_head * free_list; +static struct task_struct * buffer_wait = NULL; +int NR_BUFFERS = 0; + +static inline void wait_on_buffer(struct buffer_head * bh) +{ + cli(); + while (bh->b_lock) + sleep_on(&bh->b_wait); + sti(); +} + +int sys_sync(void) +{ + int i; + struct buffer_head * bh; + + sync_inodes(); /* write out inodes into buffers */ + bh = start_buffer; + for (i=0 ; ib_dirt) + ll_rw_block(WRITE,bh); + } + return 0; +} + +int sync_dev(int dev) +{ + int i; + struct buffer_head * bh; + + bh = start_buffer; + for (i=0 ; ib_dev != dev) + continue; + wait_on_buffer(bh); + if (bh->b_dev == dev && bh->b_dirt) + ll_rw_block(WRITE,bh); + } + sync_inodes(); + bh = start_buffer; + for (i=0 ; ib_dev != dev) + continue; + wait_on_buffer(bh); + if (bh->b_dev == dev && bh->b_dirt) + ll_rw_block(WRITE,bh); + } + return 0; +} + +void inline invalidate_buffers(int dev) +{ + int i; + struct buffer_head * bh; + + bh = start_buffer; + for (i=0 ; ib_dev != dev) + continue; + wait_on_buffer(bh); + if (bh->b_dev == dev) + bh->b_uptodate = bh->b_dirt = 0; + } +} + +/* + * This routine checks whether a floppy has been changed, and + * invalidates all buffer-cache-entries in that case. This + * is a relatively slow routine, so we have to try to minimize using + * it. Thus it is called only upon a 'mount' or 'open'. This + * is the best way of combining speed and utility, I think. + * People changing diskettes in the middle of an operation deserve + * to loose :-) + * + * NOTE! Although currently this is only for floppies, the idea is + * that any additional removable block-device will use this routine, + * and that mount/open needn't know that floppies/whatever are + * special. + */ +void check_disk_change(int dev) +{ + int i; + + if (MAJOR(dev) != 2) + return; + if (!floppy_change(dev & 0x03)) + return; + for (i=0 ; ib_next) + bh->b_next->b_prev = bh->b_prev; + if (bh->b_prev) + bh->b_prev->b_next = bh->b_next; + if (hash(bh->b_dev,bh->b_blocknr) == bh) + hash(bh->b_dev,bh->b_blocknr) = bh->b_next; +/* remove from free list */ + if (!(bh->b_prev_free) || !(bh->b_next_free)) + panic("Free block list corrupted"); + bh->b_prev_free->b_next_free = bh->b_next_free; + bh->b_next_free->b_prev_free = bh->b_prev_free; + if (free_list == bh) + free_list = bh->b_next_free; +} + +static inline void insert_into_queues(struct buffer_head * bh) +{ +/* put at end of free list */ + bh->b_next_free = free_list; + bh->b_prev_free = free_list->b_prev_free; + free_list->b_prev_free->b_next_free = bh; + free_list->b_prev_free = bh; +/* put the buffer in new hash-queue if it has a device */ + bh->b_prev = NULL; + bh->b_next = NULL; + if (!bh->b_dev) + return; + bh->b_next = hash(bh->b_dev,bh->b_blocknr); + hash(bh->b_dev,bh->b_blocknr) = bh; + bh->b_next->b_prev = bh; +} + +static struct buffer_head * find_buffer(int dev, int block) +{ + struct buffer_head * tmp; + + for (tmp = hash(dev,block) ; tmp != NULL ; tmp = tmp->b_next) + if (tmp->b_dev==dev && tmp->b_blocknr==block) + return tmp; + return NULL; +} + +/* + * Why like this, I hear you say... The reason is race-conditions. + * As we don't lock buffers (unless we are readint them, that is), + * something might happen to it while we sleep (ie a read-error + * will force it bad). This shouldn't really happen currently, but + * the code is ready. + */ +struct buffer_head * get_hash_table(int dev, int block) +{ + struct buffer_head * bh; + + for (;;) { + if (!(bh=find_buffer(dev,block))) + return NULL; + bh->b_count++; + wait_on_buffer(bh); + if (bh->b_dev == dev && bh->b_blocknr == block) + return bh; + bh->b_count--; + } +} + +/* + * Ok, this is getblk, and it isn't very clear, again to hinder + * race-conditions. Most of the code is seldom used, (ie repeating), + * so it should be much more efficient than it looks. + * + * The algoritm is changed: hopefully better, and an elusive bug removed. + */ +#define BADNESS(bh) (((bh)->b_dirt<<1)+(bh)->b_lock) +struct buffer_head * getblk(int dev,int block) +{ + struct buffer_head * tmp, * bh; + +repeat: + if (bh = get_hash_table(dev,block)) + return bh; + tmp = free_list; + do { + if (tmp->b_count) + continue; + if (!bh || BADNESS(tmp)b_next_free) != free_list); + if (!bh) { + sleep_on(&buffer_wait); + goto repeat; + } + wait_on_buffer(bh); + if (bh->b_count) + goto repeat; + while (bh->b_dirt) { + sync_dev(bh->b_dev); + wait_on_buffer(bh); + if (bh->b_count) + goto repeat; + } +/* NOTE!! While we slept waiting for this block, somebody else might */ +/* already have added "this" block to the cache. check it */ + if (find_buffer(dev,block)) + goto repeat; +/* OK, FINALLY we know that this buffer is the only one of it's kind, */ +/* and that it's unused (b_count=0), unlocked (b_lock=0), and clean */ + bh->b_count=1; + bh->b_dirt=0; + bh->b_uptodate=0; + remove_from_queues(bh); + bh->b_dev=dev; + bh->b_blocknr=block; + insert_into_queues(bh); + return bh; +} + +void brelse(struct buffer_head * buf) +{ + if (!buf) + return; + wait_on_buffer(buf); + if (!(buf->b_count--)) + panic("Trying to free free buffer"); + wake_up(&buffer_wait); +} + +/* + * bread() reads a specified block and returns the buffer that contains + * it. It returns NULL if the block was unreadable. + */ +struct buffer_head * bread(int dev,int block) +{ + struct buffer_head * bh; + + if (!(bh=getblk(dev,block))) + panic("bread: getblk returned NULL\n"); + if (bh->b_uptodate) + return bh; + ll_rw_block(READ,bh); + wait_on_buffer(bh); + if (bh->b_uptodate) + return bh; + brelse(bh); + return NULL; +} + +#define COPYBLK(from,to) \ +__asm__("cld\n\t" \ + "rep\n\t" \ + "movsl\n\t" \ + ::"c" (BLOCK_SIZE/4),"S" (from),"D" (to) \ + ) + +/* + * bread_page reads four buffers into memory at the desired address. It's + * a function of its own, as there is some speed to be got by reading them + * all at the same time, not waiting for one to be read, and then another + * etc. + */ +void bread_page(unsigned long address,int dev,int b[4]) +{ + struct buffer_head * bh[4]; + int i; + + for (i=0 ; i<4 ; i++) + if (b[i]) { + if (bh[i] = getblk(dev,b[i])) + if (!bh[i]->b_uptodate) + ll_rw_block(READ,bh[i]); + } else + bh[i] = NULL; + for (i=0 ; i<4 ; i++,address += BLOCK_SIZE) + if (bh[i]) { + wait_on_buffer(bh[i]); + if (bh[i]->b_uptodate) + COPYBLK((unsigned long) bh[i]->b_data,address); + brelse(bh[i]); + } +} + +/* + * Ok, breada can be used as bread, but additionally to mark other + * blocks for reading as well. End the argument list with a negative + * number. + */ +struct buffer_head * breada(int dev,int first, ...) +{ + va_list args; + struct buffer_head * bh, *tmp; + + va_start(args,first); + if (!(bh=getblk(dev,first))) + panic("bread: getblk returned NULL\n"); + if (!bh->b_uptodate) + ll_rw_block(READ,bh); + while ((first=va_arg(args,int))>=0) { + tmp=getblk(dev,first); + if (tmp) { + if (!tmp->b_uptodate) + ll_rw_block(READA,bh); + tmp->b_count--; + } + } + va_end(args); + wait_on_buffer(bh); + if (bh->b_uptodate) + return bh; + brelse(bh); + return (NULL); +} + +void buffer_init(long buffer_end) +{ + struct buffer_head * h = start_buffer; + void * b; + int i; + + if (buffer_end == 1<<20) + b = (void *) (640*1024); + else + b = (void *) buffer_end; + while ( (b -= BLOCK_SIZE) >= ((void *) (h+1)) ) { + h->b_dev = 0; + h->b_dirt = 0; + h->b_count = 0; + h->b_lock = 0; + h->b_uptodate = 0; + h->b_wait = NULL; + h->b_next = NULL; + h->b_prev = NULL; + h->b_data = (char *) b; + h->b_prev_free = h-1; + h->b_next_free = h+1; + h++; + NR_BUFFERS++; + if (b == (void *) 0x100000) + b = (void *) 0xA0000; + } + h--; + free_list = start_buffer; + free_list->b_prev_free = h; + h->b_next_free = free_list; + for (i=0;iQ6+~nZ1VPZCP{pdlWadpWGMO3Y4-glv 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 +#include + +#include +#include + +#include +#include + +extern int tty_read(unsigned minor,char * buf,int count); +extern int tty_write(unsigned minor,char * buf,int count); + +typedef (*crw_ptr)(int rw,unsigned minor,char * buf,int count,off_t * pos); + +static int rw_ttyx(int rw,unsigned minor,char * buf,int count,off_t * pos) +{ + return ((rw==READ)?tty_read(minor,buf,count): + tty_write(minor,buf,count)); +} + +static int rw_tty(int rw,unsigned minor,char * buf,int count, off_t * pos) +{ + if (current->tty<0) + return -EPERM; + return rw_ttyx(rw,current->tty,buf,count,pos); +} + +static int rw_ram(int rw,char * buf, int count, off_t *pos) +{ + return -EIO; +} + +static int rw_mem(int rw,char * buf, int count, off_t * pos) +{ + return -EIO; +} + +static int rw_kmem(int rw,char * buf, int count, off_t * pos) +{ + return -EIO; +} + +static int rw_port(int rw,char * buf, int count, off_t * pos) +{ + int i=*pos; + + while (count-->0 && i<65536) { + if (rw==READ) + put_fs_byte(inb(i),buf++); + else + outb(get_fs_byte(buf++),i); + i++; + } + i -= *pos; + *pos += i; + return i; +} + +static int rw_memory(int rw, unsigned minor, char * buf, int count, off_t * pos) +{ + switch(minor) { + case 0: + return rw_ram(rw,buf,count,pos); + case 1: + return rw_mem(rw,buf,count,pos); + case 2: + return rw_kmem(rw,buf,count,pos); + case 3: + return (rw==READ)?0:count; /* rw_null */ + case 4: + return rw_port(rw,buf,count,pos); + default: + return -EIO; + } +} + +#define NRDEVS ((sizeof (crw_table))/(sizeof (crw_ptr))) + +static crw_ptr crw_table[]={ + NULL, /* nodev */ + rw_memory, /* /dev/mem etc */ + NULL, /* /dev/fd */ + NULL, /* /dev/hd */ + rw_ttyx, /* /dev/ttyx */ + rw_tty, /* /dev/tty */ + NULL, /* /dev/lp */ + NULL}; /* unnamed pipes */ + +int rw_char(int rw,int dev, char * buf, int count, off_t * pos) +{ + crw_ptr call_addr; + + if (MAJOR(dev)>=NRDEVS) + return -ENODEV; + if (!(call_addr=crw_table[MAJOR(dev)])) + return -ENODEV; + return call_addr(rw,MINOR(dev),buf,count,pos); +} diff --git a/linux-0.11-lab/4/linux/fs/char_dev.o b/linux-0.11-lab/4/linux/fs/char_dev.o new file mode 100644 index 0000000000000000000000000000000000000000..2977060a7c0b215e10aa16a8395ed973d52837cd GIT binary patch literal 8288 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 O%Ys)0UlIH-!T$wZ8WjQn literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/fs/exec.c b/linux-0.11-lab/4/linux/fs/exec.c new file mode 100644 index 0000000..6b9ffc0 --- /dev/null +++ b/linux-0.11-lab/4/linux/fs/exec.c @@ -0,0 +1,545 @@ +/* + * linux/fs/exec.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * #!-checking implemented by tytso. + */ + +/* + * Demand-loading implemented 01.12.91 - no need to read anything but + * the header into memory. The inode of the executable is put into + * "current->executable", and page faults do the actual loading. Clean. + * + * Once more I can proudly say that linux stood up to being changed: it + * was less than 2 hours work to get demand-loading completely implemented. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +extern int sys_exit(int exit_code); +extern int sys_close(int fd); + +/* + * MAX_ARG_PAGES defines the number of pages allocated for arguments + * and envelope for the new program. 32 should suffice, this gives + * a maximum env+arg of 128kB ! + */ +#define MAX_ARG_PAGES 32 + + +int sys_uselib() +{ + return -ENOSYS; +} + +/* + * create_tables() parses the env- and arg-strings in new user + * memory and creates the pointer tables from them, and puts their + * addresses on the "stack", returning the new stack pointer value. + */ +static unsigned long * create_tables(char * p,int argc,int envc) +{ + unsigned long *argv,*envp; + unsigned long * sp; + + sp = (unsigned long *) (0xfffffffc & (unsigned long) p); + sp -= envc+1; + envp = sp; + sp -= argc+1; + argv = sp; + put_fs_long((unsigned long)envp,--sp); + put_fs_long((unsigned long)argv,--sp); + put_fs_long((unsigned long)argc,--sp); + while (argc-->0) { + put_fs_long((unsigned long) p,argv++); + while (get_fs_byte(p++)) /* nothing */ ; + } + put_fs_long(0,argv); + while (envc-->0) { + put_fs_long((unsigned long) p,envp++); + while (get_fs_byte(p++)) /* nothing */ ; + } + put_fs_long(0,envp); + return sp; +} + +/* + * count() counts the number of arguments/envelopes + */ +static int count(char ** argv) +{ + int i=0; + char ** tmp; + + if (tmp = argv) + while (get_fs_long((unsigned long *) (tmp++))) + i++; + + return i; +} + +/* + * 'copy_string()' copies argument/envelope strings from user + * memory to free pages in kernel mem. These are in a format ready + * to be put directly into the top of new user memory. + * + * Modified by TYT, 11/24/91 to add the from_kmem argument, which specifies + * whether the string and the string array are from user or kernel segments: + * + * from_kmem argv * argv ** + * 0 user space user space + * 1 kernel space user space + * 2 kernel space kernel space + * + * We do this by playing games with the fs segment register. Since it + * it is expensive to load a segment register, we try to avoid calling + * set_fs() unless we absolutely have to. + */ +static unsigned long copy_strings(int argc,char ** argv,unsigned long *page, + unsigned long p, int from_kmem) +{ + char *tmp, *pag; + int len, offset = 0; + unsigned long old_fs, new_fs; + + if (!p) + return 0; /* bullet-proofing */ + new_fs = get_ds(); + old_fs = get_fs(); + if (from_kmem==2) + set_fs(new_fs); + while (argc-- > 0) { + if (from_kmem == 1) + set_fs(new_fs); + if (!(tmp = (char *)get_fs_long(((unsigned long *)argv)+argc))) + panic("argc is wrong"); + if (from_kmem == 1) + set_fs(old_fs); + len=0; /* remember zero-padding */ + do { + len++; + } while (get_fs_byte(tmp++)); + if (p-len < 0) { /* this shouldn't happen - 128kB */ + set_fs(old_fs); + return 0; + } + while (len) { + --p; --tmp; --len; + if (--offset < 0) { + offset = p % PAGE_SIZE; + if (from_kmem==2) + set_fs(old_fs); + if (!(pag = (char *) page[p/PAGE_SIZE]) && + !(pag = (char *) (page[p/PAGE_SIZE] = + (unsigned long *) get_free_page()))) + return 0; + if (from_kmem==2) + set_fs(new_fs); + + } + *(pag + offset) = get_fs_byte(tmp); + } + } + if (from_kmem==2) + set_fs(old_fs); + return p; +} + +static unsigned long change_ldt(unsigned long text_size,unsigned long * page) +{ + unsigned long code_limit,data_limit,code_base,data_base; + int i; + + code_limit = text_size+PAGE_SIZE -1; + code_limit &= 0xFFFFF000; + data_limit = 0x4000000; + code_base = get_base(current->ldt[1]); + data_base = code_base; + set_base(current->ldt[1],code_base); + set_limit(current->ldt[1],code_limit); + set_base(current->ldt[2],data_base); + set_limit(current->ldt[2],data_limit); +/* make sure fs points to the NEW data segment */ + __asm__("pushl $0x17\n\tpop %%fs"::); + data_base += data_limit; + for (i=MAX_ARG_PAGES-1 ; i>=0 ; i--) { + data_base -= PAGE_SIZE; + if (page[i]) + put_page(page[i],data_base); + } + return data_limit; +} + +/* + * 'do_execve()' executes a new program. + */ +int do_execve(unsigned long * eip,long tmp,char * filename, + char ** argv, char ** envp) +{ + struct m_inode * inode; + struct buffer_head * bh; + struct exec ex; + unsigned long page[MAX_ARG_PAGES]; + int i,argc,envc; + int e_uid, e_gid; + int retval; + int sh_bang = 0; + unsigned long p=PAGE_SIZE*MAX_ARG_PAGES-4; + + if ((0xffff & eip[1]) != 0x000f) + panic("execve called from supervisor mode"); + for (i=0 ; ii_mode)) { /* must be regular file */ + retval = -EACCES; + goto exec_error2; + } + i = inode->i_mode; + e_uid = (i & S_ISUID) ? inode->i_uid : current->euid; + e_gid = (i & S_ISGID) ? inode->i_gid : current->egid; + if (current->euid == inode->i_uid) + i >>= 6; + else if (current->egid == inode->i_gid) + i >>= 3; + if (!(i & 1) && + !((inode->i_mode & 0111) && suser())) { + retval = -ENOEXEC; + goto exec_error2; + } + if (!(bh = bread(inode->i_dev,inode->i_zone[0]))) { + retval = -EACCES; + goto exec_error2; + } + ex = *((struct exec *) bh->b_data); /* read exec-header */ + if ((bh->b_data[0] == '#') && (bh->b_data[1] == '!') && (!sh_bang)) { + /* + * This section does the #! interpretation. + * Sorta complicated, but hopefully it will work. -TYT + */ + + char buf[1023], *cp, *interp, *i_name, *i_arg; + unsigned long old_fs; + + strncpy(buf, bh->b_data+2, 1022); + brelse(bh); + iput(inode); + buf[1022] = '\0'; + if (cp = strchr(buf, '\n')) { + *cp = '\0'; + for (cp = buf; (*cp == ' ') || (*cp == '\t'); cp++); + } + if (!cp || *cp == '\0') { + retval = -ENOEXEC; /* No interpreter name found */ + goto exec_error1; + } + interp = i_name = cp; + i_arg = 0; + for ( ; *cp && (*cp != ' ') && (*cp != '\t'); cp++) { + if (*cp == '/') + i_name = cp+1; + } + if (*cp) { + *cp++ = '\0'; + i_arg = cp; + } + /* + * OK, we've parsed out the interpreter name and + * (optional) argument. + */ + if (sh_bang++ == 0) { + p = copy_strings(envc, envp, page, p, 0); + p = copy_strings(--argc, argv+1, page, p, 0); + } + /* + * Splice in (1) the interpreter's name for argv[0] + * (2) (optional) argument to interpreter + * (3) filename of shell script + * + * This is done in reverse order, because of how the + * user environment and arguments are stored. + */ + p = copy_strings(1, &filename, page, p, 1); + argc++; + if (i_arg) { + p = copy_strings(1, &i_arg, page, p, 2); + argc++; + } + p = copy_strings(1, &i_name, page, p, 2); + argc++; + if (!p) { + retval = -ENOMEM; + goto exec_error1; + } + /* + * OK, now restart the process with the interpreter's inode. + */ + old_fs = get_fs(); + set_fs(get_ds()); + if (!(inode=namei(interp))) { /* get executables inode */ + set_fs(old_fs); + retval = -ENOENT; + goto exec_error1; + } + set_fs(old_fs); + goto restart_interp; + } + brelse(bh); + if (N_MAGIC(ex) != ZMAGIC || ex.a_trsize || ex.a_drsize || + ex.a_text+ex.a_data+ex.a_bss>0x3000000 || + inode->i_size < ex.a_text+ex.a_data+ex.a_syms+N_TXTOFF(ex)) { + retval = -ENOEXEC; + goto exec_error2; + } + if (N_TXTOFF(ex) != BLOCK_SIZE) { + printk("%s: N_TXTOFF != BLOCK_SIZE. See a.out.h.", filename); + retval = -ENOEXEC; + goto exec_error2; + } + if (!sh_bang) { + p = copy_strings(envc,envp,page,p,0); + p = copy_strings(argc,argv,page,p,0); + if (!p) { + retval = -ENOMEM; + goto exec_error2; + } + } +/* OK, This is the point of no return */ + if (current->executable) + iput(current->executable); + current->executable = inode; + for (i=0 ; i<32 ; i++) + current->sigaction[i].sa_handler = NULL; + for (i=0 ; iclose_on_exec>>i)&1) + sys_close(i); + current->close_on_exec = 0; + free_page_tables(get_base(current->ldt[1]),get_limit(0x0f)); + free_page_tables(get_base(current->ldt[2]),get_limit(0x17)); + if (last_task_used_math == current) + last_task_used_math = NULL; + current->used_math = 0; + p += change_ldt(ex.a_text,page)-MAX_ARG_PAGES*PAGE_SIZE; + p = (unsigned long) create_tables((char *)p,argc,envc); + current->brk = ex.a_bss + + (current->end_data = ex.a_data + + (current->end_code = ex.a_text)); + current->start_stack = p & 0xfffff000; + current->euid = e_uid; + current->egid = e_gid; + i = ex.a_text+ex.a_data; + while (i&0xfff) + put_fs_byte(0,(char *) (i++)); + eip[0] = ex.a_entry; /* eip, magic happens :-) */ + eip[3] = p; /* stack pointer */ + return 0; +exec_error2: + iput(inode); +exec_error1: + for (i=0 ; ii_mode)) { /* must be regular file */ + retval = -EACCES; + goto exec_error2; + } + i = inode->i_mode; + e_uid = (i & S_ISUID) ? inode->i_uid : current->euid; + e_gid = (i & S_ISGID) ? inode->i_gid : current->egid; + if (current->euid == inode->i_uid) + i >>= 6; + else if (current->egid == inode->i_gid) + i >>= 3; + if (!(i & 1) && + !((inode->i_mode & 0111) && suser())) { + retval = -ENOEXEC; + goto exec_error2; + } + if (!(bh = bread(inode->i_dev,inode->i_zone[0]))) { + retval = -EACCES; + goto exec_error2; + } + ex = *((struct exec *) bh->b_data); /* read exec-header */ + if ((bh->b_data[0] == '#') && (bh->b_data[1] == '!') && (!sh_bang)) { + /* + * This section does the #! interpretation. + * Sorta complicated, but hopefully it will work. -TYT + */ + + char buf[1023], *cp, *interp, *i_name, *i_arg; + unsigned long old_fs; + + strncpy(buf, bh->b_data+2, 1022); + brelse(bh); + iput(inode); + buf[1022] = '\0'; + if (cp = strchr(buf, '\n')) { + *cp = '\0'; + for (cp = buf; (*cp == ' ') || (*cp == '\t'); cp++); + } + if (!cp || *cp == '\0') { + retval = -ENOEXEC; /* No interpreter name found */ + goto exec_error1; + } + interp = i_name = cp; + i_arg = 0; + for ( ; *cp && (*cp != ' ') && (*cp != '\t'); cp++) { + if (*cp == '/') + i_name = cp+1; + } + if (*cp) { + *cp++ = '\0'; + i_arg = cp; + } + /* + * OK, we've parsed out the interpreter name and + * (optional) argument. + */ + if (sh_bang++ == 0) { + p = copy_strings(envc, envp, page, p, 0); + p = copy_strings(--argc, argv+1, page, p, 0); + } + /* + * Splice in (1) the interpreter's name for argv[0] + * (2) (optional) argument to interpreter + * (3) filename of shell script + * + * This is done in reverse order, because of how the + * user environment and arguments are stored. + */ + p = copy_strings(1, &filename, page, p, 1); + argc++; + if (i_arg) { + p = copy_strings(1, &i_arg, page, p, 2); + argc++; + } + p = copy_strings(1, &i_name, page, p, 2); + argc++; + if (!p) { + retval = -ENOMEM; + goto exec_error1; + } + /* + * OK, now restart the process with the interpreter's inode. + */ + old_fs = get_fs(); + set_fs(get_ds()); + if (!(inode=namei(interp))) { /* get executables inode */ + set_fs(old_fs); + retval = -ENOENT; + goto exec_error1; + } + set_fs(old_fs); + goto restart_interp; + } + brelse(bh); + if (N_MAGIC(ex) != ZMAGIC || ex.a_trsize || ex.a_drsize || + ex.a_text+ex.a_data+ex.a_bss>0x3000000 || + inode->i_size < ex.a_text+ex.a_data+ex.a_syms+N_TXTOFF(ex)) { + retval = -ENOEXEC; + goto exec_error2; + } + if (N_TXTOFF(ex) != BLOCK_SIZE) { + printk("%s: N_TXTOFF != BLOCK_SIZE. See a.out.h.", filename); + retval = -ENOEXEC; + goto exec_error2; + } + if (!sh_bang) { + p = copy_strings(envc,envp,page,p,0); + p = copy_strings(argc,argv,page,p,0); + if (!p) { + retval = -ENOMEM; + goto exec_error2; + } + } +/* OK, This is the point of no return */ + if (current->executable) + iput(current->executable); + current->executable = inode; + for (i=0 ; i<32 ; i++) + current->sigaction[i].sa_handler = NULL; + for (i=0 ; iclose_on_exec>>i)&1) + sys_close(i); + current->close_on_exec = 0; + free_page_tables(get_base(current->ldt[1]),get_limit(0x0f)); + free_page_tables(get_base(current->ldt[2]),get_limit(0x17)); + if (last_task_used_math == current) + last_task_used_math = NULL; + current->used_math = 0; + p += change_ldt(ex.a_text,page)-MAX_ARG_PAGES*PAGE_SIZE; + p = (unsigned long) create_tables((char *)p,argc,envc); + current->brk = ex.a_bss + + (current->end_data = ex.a_data + + (current->end_code = ex.a_text)); + current->start_stack = p & 0xfffff000; + current->euid = e_uid; + current->egid = e_gid; + /*********begin*********/ + unsigned long k; + for(k=0;k<=(current->brk-1)&0xfffff000;k+=4096) + { + load_all(5,k+current->start_code); + } + + /*********end***********/ + i = ex.a_text+ex.a_data; + while (i&0xfff) + put_fs_byte(0,(char *) (i++)); + eip[0] = ex.a_entry; /* eip, magic happens :-) */ + eip[3] = p; /* stack pointer */ + return 0; +exec_error2: + iput(inode); +exec_error1: + for (i=0 ; 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/fs/fcntl.c b/linux-0.11-lab/4/linux/fs/fcntl.c new file mode 100644 index 0000000..c201aa8 --- /dev/null +++ b/linux-0.11-lab/4/linux/fs/fcntl.c @@ -0,0 +1,75 @@ +/* + * linux/fs/fcntl.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include +#include +#include +#include + +#include +#include + +extern int sys_close(int fd); + +static int dupfd(unsigned int fd, unsigned int arg) +{ + if (fd >= NR_OPEN || !current->filp[fd]) + return -EBADF; + if (arg >= NR_OPEN) + return -EINVAL; + while (arg < NR_OPEN) + if (current->filp[arg]) + arg++; + else + break; + if (arg >= NR_OPEN) + return -EMFILE; + current->close_on_exec &= ~(1<filp[arg] = current->filp[fd])->f_count++; + return arg; +} + +int sys_dup2(unsigned int oldfd, unsigned int newfd) +{ + sys_close(newfd); + return dupfd(oldfd,newfd); +} + +int sys_dup(unsigned int fildes) +{ + return dupfd(fildes,0); +} + +int sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + struct file * filp; + + if (fd >= NR_OPEN || !(filp = current->filp[fd])) + return -EBADF; + switch (cmd) { + case F_DUPFD: + return dupfd(fd,arg); + case F_GETFD: + return (current->close_on_exec>>fd)&1; + case F_SETFD: + if (arg&1) + current->close_on_exec |= (1<close_on_exec &= ~(1<f_flags; + case F_SETFL: + filp->f_flags &= ~(O_APPEND | O_NONBLOCK); + filp->f_flags |= arg & (O_APPEND | O_NONBLOCK); + return 0; + case F_GETLK: case F_SETLK: case F_SETLKW: + return -1; + default: + return -1; + } +} diff --git a/linux-0.11-lab/4/linux/fs/fcntl.o b/linux-0.11-lab/4/linux/fs/fcntl.o new file mode 100644 index 0000000000000000000000000000000000000000..b44314bb70d40ff28034523fc6bfc29aa0507651 GIT binary patch literal 6748 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/fs/file_dev.c b/linux-0.11-lab/4/linux/fs/file_dev.c new file mode 100644 index 0000000..0458f02 --- /dev/null +++ b/linux-0.11-lab/4/linux/fs/file_dev.c @@ -0,0 +1,125 @@ +/* + * linux/fs/file_dev.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include + +#include +#include +#include + +#define MIN(a,b) (((a)<(b))?(a):(b)) +#define MAX(a,b) (((a)>(b))?(a):(b)) + +int file_read(struct m_inode * inode, struct file * filp, char * buf, int count) +{ + int left,chars,nr; + struct buffer_head * bh; + + if ((left=count)<=0) + return 0; + while (left) { + if (nr = bmap(inode,(filp->f_pos)/BLOCK_SIZE)) { + if (!(bh=bread(inode->i_dev,nr))) + break; + } else + bh = NULL; + nr = filp->f_pos % BLOCK_SIZE; + chars = MIN( BLOCK_SIZE-nr , left ); + filp->f_pos += chars; + left -= chars; + if (bh) { + char * p = nr + bh->b_data; + while (chars-->0) + put_fs_byte(*(p++),buf++); + brelse(bh); + } else { + while (chars-->0) + put_fs_byte(0,buf++); + } + } + inode->i_atime = CURRENT_TIME; + return (count-left)?(count-left):-ERROR; +} +int my_file_read(struct m_inode * inode, struct file * filp, char * buf, int count) +{ + int left,chars,nr; + struct buffer_head * bh; + + if ((left=count)<=0) + return 0; + while (left) { + if (nr = bmap(inode,(filp->f_pos)/BLOCK_SIZE)) { + if (!(bh=bread(inode->i_dev,nr))) + break; + } else + bh = NULL; + nr = filp->f_pos % BLOCK_SIZE; + chars = MIN( BLOCK_SIZE-nr , left ); + filp->f_pos += chars; + left -= chars; + if (bh) { + char * p = nr + bh->b_data; + while (chars-->0){ + *buf = *(p++); + ++buf; + } +/* put_fs_byte(*(p++),buf++);*/ + brelse(bh); + } else { + while (chars-->0){ + *buf = '\0'; + ++buf; + } +/* put_fs_byte(0,buf++);*/ + } + } + inode->i_atime = CURRENT_TIME; + return (count-left)?(count-left):-ERROR; +} +int file_write(struct m_inode * inode, struct file * filp, char * buf, int count) +{ + off_t pos; + int block,c; + struct buffer_head * bh; + char * p; + int i=0; + +/* + * ok, append may not work when many processes are writing at the same time + * but so what. That way leads to madness anyway. + */ + if (filp->f_flags & O_APPEND) + pos = inode->i_size; + else + pos = filp->f_pos; + while (ii_dev,block))) + break; + c = pos % BLOCK_SIZE; + p = c + bh->b_data; + bh->b_dirt = 1; + c = BLOCK_SIZE-c; + if (c > count-i) c = count-i; + pos += c; + if (pos > inode->i_size) { + inode->i_size = pos; + inode->i_dirt = 1; + } + i += c; + while (c-->0) + *(p++) = get_fs_byte(buf++); + brelse(bh); + } + inode->i_mtime = CURRENT_TIME; + if (!(filp->f_flags & O_APPEND)) { + filp->f_pos = pos; + inode->i_ctime = CURRENT_TIME; + } + return (i?i:-1); +} diff --git a/linux-0.11-lab/4/linux/fs/file_dev.o b/linux-0.11-lab/4/linux/fs/file_dev.o new file mode 100644 index 0000000000000000000000000000000000000000..b58fe3710bc85c7b4abed50202d458b2ac7b68b4 GIT binary patch literal 8624 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/fs/file_table.c b/linux-0.11-lab/4/linux/fs/file_table.c new file mode 100644 index 0000000..e0589ac --- /dev/null +++ b/linux-0.11-lab/4/linux/fs/file_table.c @@ -0,0 +1,9 @@ +/* + * linux/fs/file_table.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +struct file file_table[NR_FILE]; diff --git a/linux-0.11-lab/4/linux/fs/file_table.o b/linux-0.11-lab/4/linux/fs/file_table.o new file mode 100644 index 0000000000000000000000000000000000000000..422bcb331f1423abef699440aa5b0f0ff3a8b671 GIT binary patch literal 2644 zcma)8ONbmr7_OR`-P!Hgo!w=9BnF`a8xkecvzttkb&W;|x+aF`!4(DLY)?=3Ogq!v zV?VOl_&SK&K#0s-B=xPW^?j%FhrbeTlMCJwT9?XVawWCSbyVX|l2jSv>;r0{YaW6k_^T zz^c43M3{C3LO#m~p?wD-+vFv!O1}9tWJUXp+$5jUK4*OA9`G6MD!D~It9?Y?9e~%h zNpi;q*R@lSvd7#dtx0>I{E+r8?Jnm!to=&<9J!$#WXynkS-U~|kmDcG>f|2zQB7xz zPu|k*q&*-%ra=ffB0sKOX3X>CC&cs`U|z-_!=_!MBjE%>dy4!bc}e?}e2cuIh2)nQ zKBe73zWo5~GpHxaSY_e9qLcMJC2H@1m#062oG8PB_yu{OzE~^Q_tocb$KXq%R=Xc6 z!W5mtG`ERzeXVwH?aU$)7onWoi!GZ&EG<G-(`FDL5GCjLkzBG)c>s!O5Yd43kpIj0J zL$ni?^gGLma)}S#8gV?s>Amp;_i=x>NJiF;9-MAS< z4d33%KD)7OtgJMKW~aHF8JbRnjKu9i4g+f-0>^2`Q2fM$^wI?~uoxN5N}`rr)!X zkOgp0bB?ivVFjLNqo#(BEj4ghvMo+e;Qti+cm>cWRebh7?!!!*IMC1w&2`!#>Rb)&9ZYkHg8gkiQ-5obM!ho&zcta4TOYQ7!kK zhn{n~t|E>PMc#7XSs04*p2N$^c{neB7xH;8faf`&;yT9LBvCE*xzNe^-E4CxbDRBJaN~jlSq|VjswDS1$X0~#=Lq&ga zCz+rAOpXJ}=@*Vw_-pAt>oj4i1@Xtt-Oowk-9QNMj)Y*HB&K4`iTsa2WPK#+q${0w zg!W?!)3XcxL8Yf>6#9nJ`D4X+Q{jsW-%$9r!fOgYRQQR)FBEb=InIv?e^L0SLLMmk uXB6&HxTJ7d;Yo#$D11WUrb18Qw!+sGzNPRTh3_l;TH*IZ6fvzQ&gs8hV_9GT literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/fs/fs.o b/linux-0.11-lab/4/linux/fs/fs.o new file mode 100644 index 0000000000000000000000000000000000000000..8c513f90f67555c2da7097f7c7f01ef1cb688490 GIT binary patch literal 153208 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/fs/inode.c b/linux-0.11-lab/4/linux/fs/inode.c new file mode 100644 index 0000000..9bb10b3 --- /dev/null +++ b/linux-0.11-lab/4/linux/fs/inode.c @@ -0,0 +1,340 @@ +/* + * linux/fs/inode.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include + +#include +#include +#include +#include + +struct m_inode inode_table[NR_INODE]={{0,},}; + +static void read_inode(struct m_inode * inode); +static void write_inode(struct m_inode * inode); + +static inline void wait_on_inode(struct m_inode * inode) +{ + cli(); + while (inode->i_lock) + sleep_on(&inode->i_wait); + sti(); +} + +static inline void lock_inode(struct m_inode * inode) +{ + cli(); + while (inode->i_lock) + sleep_on(&inode->i_wait); + inode->i_lock=1; + sti(); +} + +static inline void unlock_inode(struct m_inode * inode) +{ + inode->i_lock=0; + wake_up(&inode->i_wait); +} + +void invalidate_inodes(int dev) +{ + int i; + struct m_inode * inode; + + inode = 0+inode_table; + for(i=0 ; ii_dev == dev) { + if (inode->i_count) + printk("inode in use on removed disk\n\r"); + inode->i_dev = inode->i_dirt = 0; + } + } +} + +void sync_inodes(void) +{ + int i; + struct m_inode * inode; + + inode = 0+inode_table; + for(i=0 ; ii_dirt && !inode->i_pipe) + write_inode(inode); + } +} + +static int _bmap(struct m_inode * inode,int block,int create) +{ + struct buffer_head * bh; + int i; + + if (block<0) + panic("_bmap: block<0"); + if (block >= 7+512+512*512) + panic("_bmap: block>big"); + if (block<7) { + if (create && !inode->i_zone[block]) + if (inode->i_zone[block]=new_block(inode->i_dev)) { + inode->i_ctime=CURRENT_TIME; + inode->i_dirt=1; + } + return inode->i_zone[block]; + } + block -= 7; + if (block<512) { + if (create && !inode->i_zone[7]) + if (inode->i_zone[7]=new_block(inode->i_dev)) { + inode->i_dirt=1; + inode->i_ctime=CURRENT_TIME; + } + if (!inode->i_zone[7]) + return 0; + if (!(bh = bread(inode->i_dev,inode->i_zone[7]))) + return 0; + i = ((unsigned short *) (bh->b_data))[block]; + if (create && !i) + if (i=new_block(inode->i_dev)) { + ((unsigned short *) (bh->b_data))[block]=i; + bh->b_dirt=1; + } + brelse(bh); + return i; + } + block -= 512; + if (create && !inode->i_zone[8]) + if (inode->i_zone[8]=new_block(inode->i_dev)) { + inode->i_dirt=1; + inode->i_ctime=CURRENT_TIME; + } + if (!inode->i_zone[8]) + return 0; + if (!(bh=bread(inode->i_dev,inode->i_zone[8]))) + return 0; + i = ((unsigned short *)bh->b_data)[block>>9]; + if (create && !i) + if (i=new_block(inode->i_dev)) { + ((unsigned short *) (bh->b_data))[block>>9]=i; + bh->b_dirt=1; + } + brelse(bh); + if (!i) + return 0; + if (!(bh=bread(inode->i_dev,i))) + return 0; + i = ((unsigned short *)bh->b_data)[block&511]; + if (create && !i) + if (i=new_block(inode->i_dev)) { + ((unsigned short *) (bh->b_data))[block&511]=i; + bh->b_dirt=1; + } + brelse(bh); + return i; +} + +int bmap(struct m_inode * inode,int block) +{ + return _bmap(inode,block,0); +} + +int create_block(struct m_inode * inode, int block) +{ + return _bmap(inode,block,1); +} + +void iput(struct m_inode * inode) +{ + if (!inode) + return; + wait_on_inode(inode); + if (!inode->i_count) + panic("iput: trying to free free inode"); + if (inode->i_pipe) { + wake_up(&inode->i_wait); + if (--inode->i_count) + return; + free_page(inode->i_size); + inode->i_count=0; + inode->i_dirt=0; + inode->i_pipe=0; + return; + } + if (!inode->i_dev) { + inode->i_count--; + return; + } + if (S_ISBLK(inode->i_mode)) { + sync_dev(inode->i_zone[0]); + wait_on_inode(inode); + } +repeat: + if (inode->i_count>1) { + inode->i_count--; + return; + } + if (!inode->i_nlinks) { + truncate(inode); + free_inode(inode); + return; + } + if (inode->i_dirt) { + write_inode(inode); /* we can sleep - so do again */ + wait_on_inode(inode); + goto repeat; + } + inode->i_count--; + return; +} + +struct m_inode * get_empty_inode(void) +{ + struct m_inode * inode; + static struct m_inode * last_inode = inode_table; + int i; + + do { + inode = NULL; + for (i = NR_INODE; i ; i--) { + if (++last_inode >= inode_table + NR_INODE) + last_inode = inode_table; + if (!last_inode->i_count) { + inode = last_inode; + if (!inode->i_dirt && !inode->i_lock) + break; + } + } + if (!inode) { + for (i=0 ; ii_dirt) { + write_inode(inode); + wait_on_inode(inode); + } + } while (inode->i_count); + memset(inode,0,sizeof(*inode)); + inode->i_count = 1; + return inode; +} + +struct m_inode * get_pipe_inode(void) +{ + struct m_inode * inode; + + if (!(inode = get_empty_inode())) + return NULL; + if (!(inode->i_size=get_free_page())) { + inode->i_count = 0; + return NULL; + } + inode->i_count = 2; /* sum of readers/writers */ + PIPE_HEAD(*inode) = PIPE_TAIL(*inode) = 0; + inode->i_pipe = 1; + return inode; +} + +struct m_inode * iget(int dev,int nr) +{ + struct m_inode * inode, * empty; + + if (!dev) + panic("iget with dev==0"); + empty = get_empty_inode(); + inode = inode_table; + while (inode < NR_INODE+inode_table) { + if (inode->i_dev != dev || inode->i_num != nr) { + inode++; + continue; + } + wait_on_inode(inode); + if (inode->i_dev != dev || inode->i_num != nr) { + inode = inode_table; + continue; + } + inode->i_count++; + if (inode->i_mount) { + int i; + + for (i = 0 ; i= NR_SUPER) { + printk("Mounted inode hasn't got sb\n"); + if (empty) + iput(empty); + return inode; + } + iput(inode); + dev = super_block[i].s_dev; + nr = ROOT_INO; + inode = inode_table; + continue; + } + if (empty) + iput(empty); + return inode; + } + if (!empty) + return (NULL); + inode=empty; + inode->i_dev = dev; + inode->i_num = nr; + read_inode(inode); + return inode; +} + +static void read_inode(struct m_inode * inode) +{ + struct super_block * sb; + struct buffer_head * bh; + int block; + + lock_inode(inode); + if (!(sb=get_super(inode->i_dev))) + panic("trying to read inode without dev"); + block = 2 + sb->s_imap_blocks + sb->s_zmap_blocks + + (inode->i_num-1)/INODES_PER_BLOCK; + if (!(bh=bread(inode->i_dev,block))) + panic("unable to read i-node block"); + __asm__ volatile ("cld"); /* by wyj */ + *(struct d_inode *)inode = + ((struct d_inode *)bh->b_data) + [(inode->i_num-1)%INODES_PER_BLOCK]; + brelse(bh); + unlock_inode(inode); +} + +static void write_inode(struct m_inode * inode) +{ + struct super_block * sb; + struct buffer_head * bh; + int block; + + lock_inode(inode); + if (!inode->i_dirt || !inode->i_dev) { + unlock_inode(inode); + return; + } + if (!(sb=get_super(inode->i_dev))) + panic("trying to write inode without device"); + block = 2 + sb->s_imap_blocks + sb->s_zmap_blocks + + (inode->i_num-1)/INODES_PER_BLOCK; + if (!(bh=bread(inode->i_dev,block))) + panic("unable to read i-node block"); + __asm__ volatile ("cld"); /* by wyj */ + ((struct d_inode *)bh->b_data) + [(inode->i_num-1)%INODES_PER_BLOCK] = + *(struct d_inode *)inode; + bh->b_dirt=1; + inode->i_dirt=0; + brelse(bh); + unlock_inode(inode); +} diff --git a/linux-0.11-lab/4/linux/fs/inode.o b/linux-0.11-lab/4/linux/fs/inode.o new file mode 100644 index 0000000000000000000000000000000000000000..23ede935a0277582b811a868cd1fa5d24343bd2d GIT binary patch literal 14068 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 Hdj +#include +#include + +#include + +extern int tty_ioctl(int dev, int cmd, int arg); + +typedef int (*ioctl_ptr)(int dev,int cmd,int arg); + +#define NRDEVS ((sizeof (ioctl_table))/(sizeof (ioctl_ptr))) + +static ioctl_ptr ioctl_table[]={ + NULL, /* nodev */ + NULL, /* /dev/mem */ + NULL, /* /dev/fd */ + NULL, /* /dev/hd */ + tty_ioctl, /* /dev/ttyx */ + tty_ioctl, /* /dev/tty */ + NULL, /* /dev/lp */ + NULL}; /* named pipes */ + + +int sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + struct file * filp; + int dev,mode; + + if (fd >= NR_OPEN || !(filp = current->filp[fd])) + return -EBADF; + mode=filp->f_inode->i_mode; + if (!S_ISCHR(mode) && !S_ISBLK(mode)) + return -EINVAL; + dev = filp->f_inode->i_zone[0]; + if (MAJOR(dev) >= NRDEVS) + return -ENODEV; + if (!ioctl_table[MAJOR(dev)]) + return -ENOTTY; + return ioctl_table[MAJOR(dev)](dev,cmd,arg); +} diff --git a/linux-0.11-lab/4/linux/fs/ioctl.o b/linux-0.11-lab/4/linux/fs/ioctl.o new file mode 100644 index 0000000000000000000000000000000000000000..05cec0fd47207e66864bc4f7310803230d449915 GIT binary patch literal 5828 zcmbVQZH!!189w)8?#`W=-EKSEue8Ecx9JwTv%B4eE~TYQyOg#x4VG3a1*Ugq?(AH4 zzPR^JKS(3Ewb8nXlxQ#@Mo2US{6iF>5eyUvMh&K-3DGE;Xb=!Y0aKM|eV%jA-JSZ& zc#?ab=Y7w6-t(UKeB3*8_jS9sYnmqFq6tIHOG5mvCu$j!Fd!C-MdHLe>rNc+AI={6 z*dx@=?&}}^>S@?>gLd=3N?1DAlZa5(9~o&$qkI z{E-c7E^e6J-9L^%$4>3;PoCP>Z-V!o>g&I7?!-&$US!Yzvt+x3FlAp;bAj4kLkLS{ z@Mp@YZg%-l>1N^&&=_XIYlK4AyB?)dOSX0Rm;_Jc)}bBNCN#QcJqt)=pi1iI48U@P zo*)rcQ8AO|_o8o?c?%6!VEAVZW6zh-)qWis<3{=v_6aDAPm-JVZ(wiiB~RMlrv4`K zjJ=V3-$F}>-qZ^6{nYpBseiJ=&7%nSuSVL(r}ys|JpP1o!6)IPRIVOURnhu)+xrl)S06UOz_%X7jeJ>8~*TQ;KSgr4H& zjfAaw>K05t5+?QZ6wMCOY`dO%nhvC}Lr-Zv_!aoAEr4vrwU;_u7lpF+zLpHBb1sk z@D#XJ;_g_>T_~)8{4#RW3dt`gPg)hPC5(0C8LLvl`VW%#T9sx~7#&c9EMSD-s70`7ex79(}t&!!cS2`}^cqkegNz3=88*@}&J7^&7}D(2odX zoV?e5iTbO^`=DPhjE&^Wtdc(}jH}64S}p_MM4q!pF|M(hyx(%2qr$j`e86%`F<)o7 z<(Lm!ZZYO#mK(s&7TS+P4?aP@33^W$*OE`5FZfpSN$7>KjdX{_bWM`(MwG(1j`T*W z47#0kpH%_9p7ek<1-gUuR!g3_o#cn?%TOD;$jkPtcTvYL}&~4Lepg)K)sMVzQ)ru!ZOJ~~BU+9z>G#zZm)*lcTSb5RedWHhY*P{@!w~K8?G*UZo4}1P@&*vvLTz)*x`mO9+Q!ouW&s?~EGf+rv6&4s<$`9Z z4lyA_y2A;?jHd0((s}nPu`@da`<}(xn&s3iNI-*4yjZMRjs>7PGF_C{wk(f^po$Zk zSa$zb*(sZti&4kxuWxKF7K)1@su@sRqFNI>vs;#L!XQiM%_9ZQCNhNwnUOWC_%nk1 z2Y7VBbZgp2J>96~#~b%VK0o9&O0{;`9jbYa_EFKH2#y6Eq7YuQ6xQ-3daSxmIbRj< z5R|H}qLm<0g~wVhDMAXosfJSn$HE7p?=_|(j%AYp8<%Jk_!!Zw&`Lh@jSnP!-}<1P zT=fi|w!S8-n+P`u9X~9fE=`NF8rP8} zg$5=y9e_BYS9e7_s_RZLEhb$#LB*qC{QEN7)a{R`tz@+S=vE{W~;nWc;+VP?_<+p^(NM&z1bPb0F9ts5x7&f^X%AOx`{gDefW)uN- zv)rP{794m5PEphgUW4hv@^KA3B##>@#9odk5QU{y*C|w;M!ALo;m&shY(j>wyu@cY zh(yd9l}!S!t^jeKTgEI&N9Hqzo2=;Kv@qTRJuXvdS< zii~M~0e1rRypveuJ+!T7SbwF*6#3v-9pM3y0EyL@`ED&Ax<^BiCzFRdU&MPh65V2Z z3XxZuB43u=DHeTfmX21(cN$Z8U3aK>F5?auN90S*dYy}&Z{S$wap0q48uf9j1$nfi zxc`^>QW#;n0&g~1#!z?OyKG}wfyb6Cs%m&+@MjM|_UEmQ*P2+XWcii^&%r?s7?+$P zd|!9^`yAgu(9s|J#{P!D={NQ_5eEbvODv9eaO!Ed6u(j965DZpo#TFmaf4JLbXt5a(qfct_Y`9R41KE-vx7onx|XU=i{R zCC@WMr9b-Rm>2m&;zpp0OYAR}W9-zM;;$ECJ@MjykSKSKKshlt*BtEmpHpWs=1yUx zHROuUTNrb_<94p}d@%$Tt)m!XL5IZgIrI5qAR~+CMcK;xfQ5I!B1E`WN>L?y$G2|h zMU9{P>NPz7LXKZf=*lQHbp9$4Q+`4r{b^Vft__jrPs5qb5V23W=0wIw#D}BMu%T8F zv48_g&pU$cn-xwf+^JBWQMBKt}3SU$Bw!*(D)NtrIUbn*K3Rf%KrSNfuKUDa0g}+sJULk%kNq<`u z{zG8`8<^wlQ0OZ>PDHMrRPs56?Xm{gi<@pbq>G=dn(h literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/fs/namei.c b/linux-0.11-lab/4/linux/fs/namei.c new file mode 100644 index 0000000..f8a02b9 --- /dev/null +++ b/linux-0.11-lab/4/linux/fs/namei.c @@ -0,0 +1,783 @@ +/* + * linux/fs/namei.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * Some corrections by tytso. + */ + +#include +#include +#include + +#include +#include +#include +#include +#include + +#define ACC_MODE(x) ("\004\002\006\377"[(x)&O_ACCMODE]) + +/* + * comment out this line if you want names > NAME_LEN chars to be + * truncated. Else they will be disallowed. + */ +/* #define NO_TRUNCATE */ + +#define MAY_EXEC 1 +#define MAY_WRITE 2 +#define MAY_READ 4 + +/* + * permission() + * + * is used to check for read/write/execute permissions on a file. + * I don't know if we should look at just the euid or both euid and + * uid, but that should be easily changed. + */ +static int permission(struct m_inode * inode,int mask) +{ + int mode = inode->i_mode; + +/* special case: not even root can read/write a deleted file */ + if (inode->i_dev && !inode->i_nlinks) + return 0; + else if (current->euid==inode->i_uid) + mode >>= 6; + else if (current->egid==inode->i_gid) + mode >>= 3; + if (((mode & mask & 0007) == mask) || suser()) + return 1; + return 0; +} + +/* + * ok, we cannot use strncmp, as the name is not in our data space. + * Thus we'll have to use match. No big problem. Match also makes + * some sanity tests. + * + * NOTE! unlike strncmp, match returns 1 for success, 0 for failure. + */ +static int match(int len,const char * name,struct dir_entry * de) +{ + register int same __asm__("ax"); + + if (!de || !de->inode || len > NAME_LEN) + return 0; + if (len < NAME_LEN && de->name[len]) + return 0; + __asm__("cld\n\t" + "fs ; repe ; cmpsb\n\t" + "setz %%al" + :"=a" (same) + :"0" (0),"S" ((long) name),"D" ((long) de->name),"c" (len) + ); + return same; +} + +/* + * find_entry() + * + * finds an entry in the specified directory with the wanted name. It + * returns the cache buffer in which the entry was found, and the entry + * itself (as a parameter - res_dir). It does NOT read the inode of the + * entry - you'll have to do that yourself if you want to. + * + * This also takes care of the few special cases due to '..'-traversal + * over a pseudo-root and a mount point. + */ +static struct buffer_head * find_entry(struct m_inode ** dir, + const char * name, int namelen, struct dir_entry ** res_dir) +{ + int entries; + int block,i; + struct buffer_head * bh; + struct dir_entry * de; + struct super_block * sb; + +#ifdef NO_TRUNCATE + if (namelen > NAME_LEN) + return NULL; +#else + if (namelen > NAME_LEN) + namelen = NAME_LEN; +#endif + entries = (*dir)->i_size / (sizeof (struct dir_entry)); + *res_dir = NULL; + if (!namelen) + return NULL; +/* check for '..', as we might have to do some "magic" for it */ + if (namelen==2 && get_fs_byte(name)=='.' && get_fs_byte(name+1)=='.') { +/* '..' in a pseudo-root results in a faked '.' (just change namelen) */ + if ((*dir) == current->root) + namelen=1; + else if ((*dir)->i_num == ROOT_INO) { +/* '..' over a mount-point results in 'dir' being exchanged for the mounted + directory-inode. NOTE! We set mounted, so that we can iput the new dir */ + sb=get_super((*dir)->i_dev); + if (sb->s_imount) { + iput(*dir); + (*dir)=sb->s_imount; + (*dir)->i_count++; + } + } + } + if (!(block = (*dir)->i_zone[0])) + return NULL; + if (!(bh = bread((*dir)->i_dev,block))) + return NULL; + i = 0; + de = (struct dir_entry *) bh->b_data; + while (i < entries) { + if ((char *)de >= BLOCK_SIZE+bh->b_data) { + brelse(bh); + bh = NULL; + if (!(block = bmap(*dir,i/DIR_ENTRIES_PER_BLOCK)) || + !(bh = bread((*dir)->i_dev,block))) { + i += DIR_ENTRIES_PER_BLOCK; + continue; + } + de = (struct dir_entry *) bh->b_data; + } + if (match(namelen,name,de)) { + *res_dir = de; + return bh; + } + de++; + i++; + } + brelse(bh); + return NULL; +} + +/* + * add_entry() + * + * adds a file entry to the specified directory, using the same + * semantics as find_entry(). It returns NULL if it failed. + * + * NOTE!! The inode part of 'de' is left at 0 - which means you + * may not sleep between calling this and putting something into + * the entry, as someone else might have used it while you slept. + */ +static struct buffer_head * add_entry(struct m_inode * dir, + const char * name, int namelen, struct dir_entry ** res_dir) +{ + int block,i; + struct buffer_head * bh; + struct dir_entry * de; + + *res_dir = NULL; +#ifdef NO_TRUNCATE + if (namelen > NAME_LEN) + return NULL; +#else + if (namelen > NAME_LEN) + namelen = NAME_LEN; +#endif + if (!namelen) + return NULL; + if (!(block = dir->i_zone[0])) + return NULL; + if (!(bh = bread(dir->i_dev,block))) + return NULL; + i = 0; + de = (struct dir_entry *) bh->b_data; + while (1) { + if ((char *)de >= BLOCK_SIZE+bh->b_data) { + brelse(bh); + bh = NULL; + block = create_block(dir,i/DIR_ENTRIES_PER_BLOCK); + if (!block) + return NULL; + if (!(bh = bread(dir->i_dev,block))) { + i += DIR_ENTRIES_PER_BLOCK; + continue; + } + de = (struct dir_entry *) bh->b_data; + } + if (i*sizeof(struct dir_entry) >= dir->i_size) { + de->inode=0; + dir->i_size = (i+1)*sizeof(struct dir_entry); + dir->i_dirt = 1; + dir->i_ctime = CURRENT_TIME; + } + if (!de->inode) { + dir->i_mtime = CURRENT_TIME; + for (i=0; i < NAME_LEN ; i++) + de->name[i]=(ib_dirt = 1; + *res_dir = de; + return bh; + } + de++; + i++; + } + brelse(bh); + return NULL; +} + +/* + * get_dir() + * + * Getdir traverses the pathname until it hits the topmost directory. + * It returns NULL on failure. + */ +static struct m_inode * get_dir(const char * pathname) +{ + char c; + const char * thisname; + struct m_inode * inode; + struct buffer_head * bh; + int namelen,inr,idev; + struct dir_entry * de; + + if (!current->root || !current->root->i_count) + panic("No root inode"); + if (!current->pwd || !current->pwd->i_count) + panic("No cwd inode"); + if ((c=get_fs_byte(pathname))=='/') { + inode = current->root; + pathname++; + } else if (c) + inode = current->pwd; + else + return NULL; /* empty name is bad */ + inode->i_count++; + while (1) { + thisname = pathname; + if (!S_ISDIR(inode->i_mode) || !permission(inode,MAY_EXEC)) { + iput(inode); + return NULL; + } + for(namelen=0;(c=get_fs_byte(pathname++))&&(c!='/');namelen++) + /* nothing */ ; + if (!c) + return inode; + if (!(bh = find_entry(&inode,thisname,namelen,&de))) { + iput(inode); + return NULL; + } + inr = de->inode; + idev = inode->i_dev; + brelse(bh); + iput(inode); + if (!(inode = iget(idev,inr))) + return NULL; + } +} + +/* + * dir_namei() + * + * dir_namei() returns the inode of the directory of the + * specified name, and the name within that directory. + */ +static struct m_inode * dir_namei(const char * pathname, + int * namelen, const char ** name) +{ + char c; + const char * basename; + struct m_inode * dir; + + if (!(dir = get_dir(pathname))) + return NULL; + basename = pathname; + while (c=get_fs_byte(pathname++)) + if (c=='/') + basename=pathname; + *namelen = pathname-basename-1; + *name = basename; + return dir; +} + +/* + * namei() + * + * is used by most simple commands to get the inode of a specified name. + * Open, link etc use their own routines, but this is enough for things + * like 'chmod' etc. + */ +struct m_inode * namei(const char * pathname) +{ + const char * basename; + int inr,dev,namelen; + struct m_inode * dir; + struct buffer_head * bh; + struct dir_entry * de; + + if (!(dir = dir_namei(pathname,&namelen,&basename))) + return NULL; + if (!namelen) /* special case: '/usr/' etc */ + return dir; + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + iput(dir); + return NULL; + } + inr = de->inode; + dev = dir->i_dev; + brelse(bh); + iput(dir); + dir=iget(dev,inr); + if (dir) { + dir->i_atime=CURRENT_TIME; + dir->i_dirt=1; + } + return dir; +} + +/* + * open_namei() + * + * namei for open - this is in fact almost the whole open-routine. + */ +int open_namei(const char * pathname, int flag, int mode, + struct m_inode ** res_inode) +{ + const char * basename; + int inr,dev,namelen; + struct m_inode * dir, *inode; + struct buffer_head * bh; + struct dir_entry * de; + + if ((flag & O_TRUNC) && !(flag & O_ACCMODE)) + flag |= O_WRONLY; + mode &= 0777 & ~current->umask; + mode |= I_REGULAR; + if (!(dir = dir_namei(pathname,&namelen,&basename))) + return -ENOENT; + if (!namelen) { /* special case: '/usr/' etc */ + if (!(flag & (O_ACCMODE|O_CREAT|O_TRUNC))) { + *res_inode=dir; + return 0; + } + iput(dir); + return -EISDIR; + } + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + if (!(flag & O_CREAT)) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EACCES; + } + inode = new_inode(dir->i_dev); + if (!inode) { + iput(dir); + return -ENOSPC; + } + inode->i_uid = current->euid; + inode->i_mode = mode; + inode->i_dirt = 1; + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + inode->i_nlinks--; + iput(inode); + iput(dir); + return -ENOSPC; + } + de->inode = inode->i_num; + bh->b_dirt = 1; + brelse(bh); + iput(dir); + *res_inode = inode; + return 0; + } + inr = de->inode; + dev = dir->i_dev; + brelse(bh); + iput(dir); + if (flag & O_EXCL) + return -EEXIST; + if (!(inode=iget(dev,inr))) + return -EACCES; + if ((S_ISDIR(inode->i_mode) && (flag & O_ACCMODE)) || + !permission(inode,ACC_MODE(flag))) { + iput(inode); + return -EPERM; + } + inode->i_atime = CURRENT_TIME; + if (flag & O_TRUNC) + truncate(inode); + *res_inode = inode; + return 0; +} + +int sys_mknod(const char * filename, int mode, int dev) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh; + struct dir_entry * de; + + if (!suser()) + return -EPERM; + if (!(dir = dir_namei(filename,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (bh) { + brelse(bh); + iput(dir); + return -EEXIST; + } + inode = new_inode(dir->i_dev); + if (!inode) { + iput(dir); + return -ENOSPC; + } + inode->i_mode = mode; + if (S_ISBLK(mode) || S_ISCHR(mode)) + inode->i_zone[0] = dev; + inode->i_mtime = inode->i_atime = CURRENT_TIME; + inode->i_dirt = 1; + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + iput(dir); + inode->i_nlinks=0; + iput(inode); + return -ENOSPC; + } + de->inode = inode->i_num; + bh->b_dirt = 1; + iput(dir); + iput(inode); + brelse(bh); + return 0; +} + +int sys_mkdir(const char * pathname, int mode) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh, *dir_block; + struct dir_entry * de; + + if (!suser()) + return -EPERM; + if (!(dir = dir_namei(pathname,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (bh) { + brelse(bh); + iput(dir); + return -EEXIST; + } + inode = new_inode(dir->i_dev); + if (!inode) { + iput(dir); + return -ENOSPC; + } + inode->i_size = 32; + inode->i_dirt = 1; + inode->i_mtime = inode->i_atime = CURRENT_TIME; + if (!(inode->i_zone[0]=new_block(inode->i_dev))) { + iput(dir); + inode->i_nlinks--; + iput(inode); + return -ENOSPC; + } + inode->i_dirt = 1; + if (!(dir_block=bread(inode->i_dev,inode->i_zone[0]))) { + iput(dir); + free_block(inode->i_dev,inode->i_zone[0]); + inode->i_nlinks--; + iput(inode); + return -ERROR; + } + de = (struct dir_entry *) dir_block->b_data; + de->inode=inode->i_num; + strcpy(de->name,"."); + de++; + de->inode = dir->i_num; + strcpy(de->name,".."); + inode->i_nlinks = 2; + dir_block->b_dirt = 1; + brelse(dir_block); + inode->i_mode = I_DIRECTORY | (mode & 0777 & ~current->umask); + inode->i_dirt = 1; + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + iput(dir); + free_block(inode->i_dev,inode->i_zone[0]); + inode->i_nlinks=0; + iput(inode); + return -ENOSPC; + } + de->inode = inode->i_num; + bh->b_dirt = 1; + dir->i_nlinks++; + dir->i_dirt = 1; + iput(dir); + iput(inode); + brelse(bh); + return 0; +} + +/* + * routine to check that the specified directory is empty (for rmdir) + */ +static int empty_dir(struct m_inode * inode) +{ + int nr,block; + int len; + struct buffer_head * bh; + struct dir_entry * de; + + len = inode->i_size / sizeof (struct dir_entry); + if (len<2 || !inode->i_zone[0] || + !(bh=bread(inode->i_dev,inode->i_zone[0]))) { + printk("warning - bad directory on dev %04x\n",inode->i_dev); + return 0; + } + de = (struct dir_entry *) bh->b_data; + if (de[0].inode != inode->i_num || !de[1].inode || + strcmp(".",de[0].name) || strcmp("..",de[1].name)) { + printk("warning - bad directory on dev %04x\n",inode->i_dev); + return 0; + } + nr = 2; + de += 2; + while (nr= (void *) (bh->b_data+BLOCK_SIZE)) { + brelse(bh); + block=bmap(inode,nr/DIR_ENTRIES_PER_BLOCK); + if (!block) { + nr += DIR_ENTRIES_PER_BLOCK; + continue; + } + if (!(bh=bread(inode->i_dev,block))) + return 0; + de = (struct dir_entry *) bh->b_data; + } + if (de->inode) { + brelse(bh); + return 0; + } + de++; + nr++; + } + brelse(bh); + return 1; +} + +int sys_rmdir(const char * name) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh; + struct dir_entry * de; + + if (!suser()) + return -EPERM; + if (!(dir = dir_namei(name,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + iput(dir); + return -ENOENT; + } + if (!(inode = iget(dir->i_dev, de->inode))) { + iput(dir); + brelse(bh); + return -EPERM; + } + if ((dir->i_mode & S_ISVTX) && current->euid && + inode->i_uid != current->euid) { + iput(dir); + iput(inode); + brelse(bh); + return -EPERM; + } + if (inode->i_dev != dir->i_dev || inode->i_count>1) { + iput(dir); + iput(inode); + brelse(bh); + return -EPERM; + } + if (inode == dir) { /* we may not delete ".", but "../dir" is ok */ + iput(inode); + iput(dir); + brelse(bh); + return -EPERM; + } + if (!S_ISDIR(inode->i_mode)) { + iput(inode); + iput(dir); + brelse(bh); + return -ENOTDIR; + } + if (!empty_dir(inode)) { + iput(inode); + iput(dir); + brelse(bh); + return -ENOTEMPTY; + } + if (inode->i_nlinks != 2) + printk("empty directory has nlink!=2 (%d)",inode->i_nlinks); + de->inode = 0; + bh->b_dirt = 1; + brelse(bh); + inode->i_nlinks=0; + inode->i_dirt=1; + dir->i_nlinks--; + dir->i_ctime = dir->i_mtime = CURRENT_TIME; + dir->i_dirt=1; + iput(dir); + iput(inode); + return 0; +} + +int sys_unlink(const char * name) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh; + struct dir_entry * de; + + if (!(dir = dir_namei(name,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + iput(dir); + return -ENOENT; + } + if (!(inode = iget(dir->i_dev, de->inode))) { + iput(dir); + brelse(bh); + return -ENOENT; + } + if ((dir->i_mode & S_ISVTX) && !suser() && + current->euid != inode->i_uid && + current->euid != dir->i_uid) { + iput(dir); + iput(inode); + brelse(bh); + return -EPERM; + } + if (S_ISDIR(inode->i_mode)) { + iput(inode); + iput(dir); + brelse(bh); + return -EPERM; + } + if (!inode->i_nlinks) { + printk("Deleting nonexistent file (%04x:%d), %d\n", + inode->i_dev,inode->i_num,inode->i_nlinks); + inode->i_nlinks=1; + } + de->inode = 0; + bh->b_dirt = 1; + brelse(bh); + inode->i_nlinks--; + inode->i_dirt = 1; + inode->i_ctime = CURRENT_TIME; + iput(inode); + iput(dir); + return 0; +} + +int sys_symlink() +{ + return -ENOSYS; +} + +int sys_link(const char * oldname, const char * newname) +{ + struct dir_entry * de; + struct m_inode * oldinode, * dir; + struct buffer_head * bh; + const char * basename; + int namelen; + + oldinode=namei(oldname); + if (!oldinode) + return -ENOENT; + if (S_ISDIR(oldinode->i_mode)) { + iput(oldinode); + return -EPERM; + } + dir = dir_namei(newname,&namelen,&basename); + if (!dir) { + iput(oldinode); + return -EACCES; + } + if (!namelen) { + iput(oldinode); + iput(dir); + return -EPERM; + } + if (dir->i_dev != oldinode->i_dev) { + iput(dir); + iput(oldinode); + return -EXDEV; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + iput(oldinode); + return -EACCES; + } + bh = find_entry(&dir,basename,namelen,&de); + if (bh) { + brelse(bh); + iput(dir); + iput(oldinode); + return -EEXIST; + } + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + iput(dir); + iput(oldinode); + return -ENOSPC; + } + de->inode = oldinode->i_num; + bh->b_dirt = 1; + brelse(bh); + iput(dir); + oldinode->i_nlinks++; + oldinode->i_ctime = CURRENT_TIME; + oldinode->i_dirt = 1; + iput(oldinode); + return 0; +} diff --git a/linux-0.11-lab/4/linux/fs/namei.o b/linux-0.11-lab/4/linux/fs/namei.o new file mode 100644 index 0000000000000000000000000000000000000000..2b7addc2dc3b8ad772846b6fe345363e6c68f8fb GIT binary patch literal 20756 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/fs/open.c b/linux-0.11-lab/4/linux/fs/open.c new file mode 100644 index 0000000..124c1a1 --- /dev/null +++ b/linux-0.11-lab/4/linux/fs/open.c @@ -0,0 +1,281 @@ +/* + * linux/fs/open.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +extern int my_sys_read(unsigned int fd,char * buf,int count); +int sys_ustat(int dev, struct ustat * ubuf) +{ + return -ENOSYS; +} + +int sys_utime(char * filename, struct utimbuf * times) +{ + struct m_inode * inode; + long actime,modtime; + + if (!(inode=namei(filename))) + return -ENOENT; + if (times) { + actime = get_fs_long((unsigned long *) ×->actime); + modtime = get_fs_long((unsigned long *) ×->modtime); + } else + actime = modtime = CURRENT_TIME; + inode->i_atime = actime; + inode->i_mtime = modtime; + inode->i_dirt = 1; + iput(inode); + return 0; +} + +/* + * XXX should we use the real or effective uid? BSD uses the real uid, + * so as to make this call useful to setuid programs. + */ +int sys_access(const char * filename,int mode) +{ + struct m_inode * inode; + int res, i_mode; + + mode &= 0007; + if (!(inode=namei(filename))) + return -EACCES; + i_mode = res = inode->i_mode & 0777; + iput(inode); + if (current->uid == inode->i_uid) + res >>= 6; + else if (current->gid == inode->i_gid) + res >>= 6; + if ((res & 0007 & mode) == mode) + return 0; + /* + * XXX we are doing this test last because we really should be + * swapping the effective with the real user id (temporarily), + * and then calling suser() routine. If we do call the + * suser() routine, it needs to be called last. + */ + if ((!current->uid) && + (!(mode & 1) || (i_mode & 0111))) + return 0; + return -EACCES; +} + +int sys_chdir(const char * filename) +{ + struct m_inode * inode; + + if (!(inode = namei(filename))) + return -ENOENT; + if (!S_ISDIR(inode->i_mode)) { + iput(inode); + return -ENOTDIR; + } + iput(current->pwd); + current->pwd = inode; + return (0); +} + +int sys_chroot(const char * filename) +{ + struct m_inode * inode; + + if (!(inode=namei(filename))) + return -ENOENT; + if (!S_ISDIR(inode->i_mode)) { + iput(inode); + return -ENOTDIR; + } + iput(current->root); + current->root = inode; + return (0); +} + +int sys_chmod(const char * filename,int mode) +{ + struct m_inode * inode; + + if (!(inode=namei(filename))) + return -ENOENT; + if ((current->euid != inode->i_uid) && !suser()) { + iput(inode); + return -EACCES; + } + inode->i_mode = (mode & 07777) | (inode->i_mode & ~07777); + inode->i_dirt = 1; + iput(inode); + return 0; +} + +int sys_chown(const char * filename,int uid,int gid) +{ + struct m_inode * inode; + + if (!(inode=namei(filename))) + return -ENOENT; + if (!suser()) { + iput(inode); + return -EACCES; + } + inode->i_uid=uid; + inode->i_gid=gid; + inode->i_dirt=1; + iput(inode); + return 0; +} + +int sys_open(const char * filename,int flag,int mode) +{ + struct m_inode * inode; + struct file * f; + int i,fd; + + mode &= 0777 & ~current->umask; + for(fd=0 ; fdfilp[fd]) + break; + if (fd>=NR_OPEN) + return -EINVAL; + current->close_on_exec &= ~(1<f_count) break; + if (i>=NR_FILE) + return -EINVAL; + (current->filp[fd]=f)->f_count++; + if ((i=open_namei(filename,flag,mode,&inode))<0) { + current->filp[fd]=NULL; + f->f_count=0; + return i; + } +/* ttys are somewhat special (ttyxx major==4, tty major==5) */ + if (S_ISCHR(inode->i_mode)) + if (MAJOR(inode->i_zone[0])==4) { + if (current->leader && current->tty<0) { + current->tty = MINOR(inode->i_zone[0]); + tty_table[current->tty].pgrp = current->pgrp; + } + } else if (MAJOR(inode->i_zone[0])==5) + if (current->tty<0) { + iput(inode); + current->filp[fd]=NULL; + f->f_count=0; + return -EPERM; + } +/* Likewise with block-devices: check for floppy_change */ + if (S_ISBLK(inode->i_mode)) + check_disk_change(inode->i_zone[0]); + f->f_mode = inode->i_mode; + f->f_flags = flag; + f->f_count = 1; + f->f_inode = inode; + f->f_pos = 0; + return (fd); +} + +int sys_creat(const char * pathname, int mode) +{ + return sys_open(pathname, O_CREAT | O_TRUNC, mode); +} + +int sys_close(unsigned int fd) +{ + struct file * filp; + + if (fd >= NR_OPEN) + return -EINVAL; + current->close_on_exec &= ~(1<filp[fd])) + return -EINVAL; + current->filp[fd] = NULL; + if (filp->f_count == 0) + panic("Close: file count is 0"); + if (--filp->f_count) + return (0); + iput(filp->f_inode); + return (0); +} + +static int get_subentry(unsigned int fd, char* cwdbuf, char** subentry){ + int i, num_file = 0, read_num; + if(fd == -1){ + return -1; + } + for(i = 0; i < 512; ++i){ + cwdbuf[i] = '\0'; + } + read_num = my_sys_read(fd, cwdbuf, 512); + + if(read_num == -1){ + return -1; + } + for(i = 0; i < 512; ){ + if((cwdbuf[i] == '.') || (cwdbuf[i] >= 'a' && cwdbuf[i] <= 'z') || (cwdbuf[i] >= 'A' && cwdbuf[i] <= 'Z')){ + subentry[num_file++] = cwdbuf + i; + while(i<512 && cwdbuf[i]){ + ++i; + } + }else{ + cwdbuf[i] = '\0'; + ++i; + } + } + subentry[num_file] = NULL; + return read_num; +} +static int my_strlen(const char* Src){ + int len = 0; + int i = 0; + for(; Src[i]; ++i){ + ++len; + } + return len; +} +int sys_getdents(unsigned int fd, struct linux_dirent *dirp, unsigned int count){ + struct stat info; + char content[512]; + char* subdirs[128]; + char* curbuf = (char*)dirp; + int i, readn = 0, mod, j; + unsigned short size = sizeof(struct linux_dirent); + sys_fstat(fd, &info); + get_subentry(fd, content, subdirs); + + for(i = 0; subdirs[i]; ++i){ + put_fs_long(info.st_ino, &dirp->d_ino); + put_fs_byte(*((char*)(&size)), (char*)(&dirp->d_reclen)); + put_fs_byte(*((char*)(&size) + 1), (char*)(&dirp->d_reclen)+1); + readn += size; + for(j = 0; subdirs[i][j]; ++j){ + put_fs_byte(*(subdirs[i] + j), dirp->d_name+j); + } + put_fs_byte('\0', dirp->d_name+j); + dirp = (struct linux_dirent*) (curbuf + size); + curbuf += size; + } + return readn; +} + +long sys_getcwd(){ + return 0; +} +long sys_mmap(){ + return 0; +} +int sys_munmap(){ + return 0; +} +int sys_clone(){ + return 0; +} diff --git a/linux-0.11-lab/4/linux/fs/open.o b/linux-0.11-lab/4/linux/fs/open.o new file mode 100644 index 0000000000000000000000000000000000000000..7d4d409757c6fe0087469bdda9328145d2d2c50c GIT binary patch literal 14656 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 UV*A$wpB3bNhw^s>y`ahe57NNZyZ`_I literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/fs/pipe.c b/linux-0.11-lab/4/linux/fs/pipe.c new file mode 100644 index 0000000..6154238 --- /dev/null +++ b/linux-0.11-lab/4/linux/fs/pipe.c @@ -0,0 +1,152 @@ +/* + * linux/fs/pipe.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +#include +#include /* for get_free_page */ +#include + +int read_pipe(struct m_inode * inode, char * buf, int count) +{ + int chars, size, read = 0; + + while (count>0) { + while (!(size=PIPE_SIZE(*inode))) { + wake_up(&inode->i_wait); + if (inode->i_count != 2) /* are there any writers? */ + return read; + sleep_on(&inode->i_wait); + } + chars = PAGE_SIZE-PIPE_TAIL(*inode); + if (chars > count) + chars = count; + if (chars > size) + chars = size; + count -= chars; + read += chars; + size = PIPE_TAIL(*inode); + PIPE_TAIL(*inode) += chars; + PIPE_TAIL(*inode) &= (PAGE_SIZE-1); + while (chars-->0) + put_fs_byte(((char *)inode->i_size)[size++],buf++); + } + wake_up(&inode->i_wait); + return read; +} + +int write_pipe(struct m_inode * inode, char * buf, int count) +{ + int chars, size, written = 0; + + while (count>0) { + while (!(size=(PAGE_SIZE-1)-PIPE_SIZE(*inode))) { + wake_up(&inode->i_wait); + if (inode->i_count != 2) { /* no readers */ + current->signal |= (1<<(SIGPIPE-1)); + return written?written:-1; + } + sleep_on(&inode->i_wait); + } + chars = PAGE_SIZE-PIPE_HEAD(*inode); + if (chars > count) + chars = count; + if (chars > size) + chars = size; + count -= chars; + written += chars; + size = PIPE_HEAD(*inode); + PIPE_HEAD(*inode) += chars; + PIPE_HEAD(*inode) &= (PAGE_SIZE-1); + while (chars-->0) + ((char *)inode->i_size)[size++]=get_fs_byte(buf++); + } + wake_up(&inode->i_wait); + return written; +} + +int sys_pipe(unsigned long * fildes) +{ + struct m_inode * inode; + struct file * f[2]; + int fd[2]; + int i,j; + + j=0; + for(i=0;j<2 && if_count++; + if (j==1) + f[0]->f_count=0; + if (j<2) + return -1; + j=0; + for(i=0;j<2 && ifilp[i]) { + current->filp[ fd[j]=i ] = f[j]; + j++; + } + if (j==1) + current->filp[fd[0]]=NULL; + if (j<2) { + f[0]->f_count=f[1]->f_count=0; + return -1; + } + if (!(inode=get_pipe_inode())) { + current->filp[fd[0]] = + current->filp[fd[1]] = NULL; + f[0]->f_count = f[1]->f_count = 0; + return -1; + } + f[0]->f_inode = f[1]->f_inode = inode; + f[0]->f_pos = f[1]->f_pos = 0; + f[0]->f_mode = 1; /* read */ + f[1]->f_mode = 2; /* write */ + put_fs_long(fd[0],0+fildes); + put_fs_long(fd[1],1+fildes); + return 0; +} +int sys_pipe2(unsigned long * fildes) +{ + struct m_inode * inode; + struct file * f[2]; + int fd[2]; + int i,j; + + j=0; + for(i=0;j<2 && if_count++; + if (j==1) + f[0]->f_count=0; + if (j<2) + return -1; + j=0; + for(i=0;j<2 && ifilp[i]) { + current->filp[ fd[j]=i ] = f[j]; + j++; + } + if (j==1) + current->filp[fd[0]]=NULL; + if (j<2) { + f[0]->f_count=f[1]->f_count=0; + return -1; + } + if (!(inode=get_pipe_inode())) { + current->filp[fd[0]] = + current->filp[fd[1]] = NULL; + f[0]->f_count = f[1]->f_count = 0; + return -1; + } + f[0]->f_inode = f[1]->f_inode = inode; + f[0]->f_pos = f[1]->f_pos = 0; + f[0]->f_mode = 1; /* read */ + f[1]->f_mode = 2; /* write */ + put_fs_long(fd[0],0+fildes); + put_fs_long(fd[1],1+fildes); + return 0; +} diff --git a/linux-0.11-lab/4/linux/fs/pipe.o b/linux-0.11-lab/4/linux/fs/pipe.o new file mode 100644 index 0000000000000000000000000000000000000000..69f9166cc8e150b3c6ccaea19eb93fa9f2feb77c GIT binary patch literal 8972 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 +#include +#include + +#include +#include +#include + +extern int rw_char(int rw,int dev, char * buf, int count, off_t * pos); +extern int read_pipe(struct m_inode * inode, char * buf, int count); +extern int write_pipe(struct m_inode * inode, char * buf, int count); +extern int block_read(int dev, off_t * pos, char * buf, int count); +extern int block_write(int dev, off_t * pos, char * buf, int count); +extern int file_read(struct m_inode * inode, struct file * filp, + char * buf, int count); +extern int file_write(struct m_inode * inode, struct file * filp, + char * buf, int count); + +int sys_lseek(unsigned int fd,off_t offset, int origin) +{ + struct file * file; + int tmp; + + if (fd >= NR_OPEN || !(file=current->filp[fd]) || !(file->f_inode) + || !IS_SEEKABLE(MAJOR(file->f_inode->i_dev))) + return -EBADF; + if (file->f_inode->i_pipe) + return -ESPIPE; + switch (origin) { + case 0: + if (offset<0) return -EINVAL; + file->f_pos=offset; + break; + case 1: + if (file->f_pos+offset<0) return -EINVAL; + file->f_pos += offset; + break; + case 2: + if ((tmp=file->f_inode->i_size+offset) < 0) + return -EINVAL; + file->f_pos = tmp; + break; + default: + return -EINVAL; + } + return file->f_pos; +} + +int sys_read(unsigned int fd,char * buf,int count) +{ + struct file * file; + struct m_inode * inode; + + if (fd>=NR_OPEN || count<0 || !(file=current->filp[fd])) + return -EINVAL; + if (!count) + return 0; + verify_area(buf,count); + inode = file->f_inode; + if (inode->i_pipe) + return (file->f_mode&1)?read_pipe(inode,buf,count):-EIO; + if (S_ISCHR(inode->i_mode)) + return rw_char(READ,inode->i_zone[0],buf,count,&file->f_pos); + if (S_ISBLK(inode->i_mode)) + return block_read(inode->i_zone[0],&file->f_pos,buf,count); + if (S_ISDIR(inode->i_mode) || S_ISREG(inode->i_mode)) { + if (count+file->f_pos > inode->i_size) + count = inode->i_size - file->f_pos; + if (count<=0) + return 0; + return file_read(inode,file,buf,count); + } + printk("(Read)inode->i_mode=%06o\n\r",inode->i_mode); + return -EINVAL; +} +int my_sys_read(unsigned int fd,char * buf,int count) +{ + struct file * file; + struct m_inode * inode; + + if (fd>=NR_OPEN || count<0 || !(file=current->filp[fd])) + return -EINVAL; + if (!count) + return 0; + verify_area(buf,count); + inode = file->f_inode; + if (inode->i_pipe) + return (file->f_mode&1)?read_pipe(inode,buf,count):-EIO; + if (S_ISCHR(inode->i_mode)) + return rw_char(READ,inode->i_zone[0],buf,count,&file->f_pos); + if (S_ISBLK(inode->i_mode)) + return block_read(inode->i_zone[0],&file->f_pos,buf,count); + if (S_ISDIR(inode->i_mode) || S_ISREG(inode->i_mode)) { + if (count+file->f_pos > inode->i_size) + count = inode->i_size - file->f_pos; + if (count<=0) + return 0; + return my_file_read(inode,file,buf,count); + } + printk("(Read)inode->i_mode=%06o\n\r",inode->i_mode); + return -EINVAL; +} +int sys_write(unsigned int fd,char * buf,int count) +{ + struct file * file; + struct m_inode * inode; + + if (fd>=NR_OPEN || count <0 || !(file=current->filp[fd])) + return -EINVAL; + if (!count) + return 0; + inode=file->f_inode; + if (inode->i_pipe) + return (file->f_mode&2)?write_pipe(inode,buf,count):-EIO; + if (S_ISCHR(inode->i_mode)) + return rw_char(WRITE,inode->i_zone[0],buf,count,&file->f_pos); + if (S_ISBLK(inode->i_mode)) + return block_write(inode->i_zone[0],&file->f_pos,buf,count); + if (S_ISREG(inode->i_mode)) + return file_write(inode,file,buf,count); + printk("(Write)inode->i_mode=%06o\n\r",inode->i_mode); + return -EINVAL; +} diff --git a/linux-0.11-lab/4/linux/fs/read_write.o b/linux-0.11-lab/4/linux/fs/read_write.o new file mode 100644 index 0000000000000000000000000000000000000000..986fce4d5b19249afff5f572c306f891cc5a56e2 GIT binary patch literal 8476 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/fs/select.c b/linux-0.11-lab/4/linux/fs/select.c new file mode 100644 index 0000000..cef8b43 --- /dev/null +++ b/linux-0.11-lab/4/linux/fs/select.c @@ -0,0 +1,10 @@ +/* nothing , only the stub */ +/* gohigh */ + +#include + +int sys_select() +{ + return -ENOSYS; +} + diff --git a/linux-0.11-lab/4/linux/fs/select.o b/linux-0.11-lab/4/linux/fs/select.o new file mode 100644 index 0000000000000000000000000000000000000000..d61f73a39bf58c107d845f3825c695fe69663502 GIT binary patch literal 1776 zcma)7&ubG=5T2J!Yc*|X8^x9irr?h%?k3TorD`oLDvI>~7iJXeveV zCY}@#J&1bs?8UqPfKX4Kdi3hqL;YsoPO~}bz`U9HX5P%3>16x#`kfm}DH2j-P~Rf@ zl+m7QEas>{P2kmV>r<>uh}!akeCds_eOT8?M2Wg)X97y zXXIz{6KZmJ{3ubzqHEJeej#@`cdNkQ($w4KX(HnU<#LNTV+09~f%U6&dCo2MSm&o^ z=r~TL{^ZAS#{HoyMWNGi>XB9FIHI9A%~auDMj@)y@?EFobsJI14^7W`RO+<7ZqF=R zm5SN1Yo)RVO3jdNuC5hVidAdgsuoSx4(hF|?F;i4q1QW&qPbBto4(tQ%w}M_j=AZh zUncKQJrYawEG&Ru~0ZwnU4Z zUPM;Ij%>1OVMtcsbgYI`>u#*Ky`~RWtlPC(;57dvg*F;I@kis zL)RAOsi&aRIIZ<~a{8_RbIu@$_g4DiB@mtO%TCWGy1^hwHd9;uxYGc5+5Qz*MvUa< z9Gq{Nm4w8{zmS6hLcYY~mLMmkQ0ApQ$Ac%gz;MoiD`Am=g*R7#1j7tNTI!1mRP(~3C{b&IOkWGJ +#include + +#include +#include +#include +#include + +static void cp_stat(struct m_inode * inode, struct stat * statbuf) +{ + struct stat tmp; + int i; + + verify_area(statbuf,sizeof (* statbuf)); + tmp.st_dev = inode->i_dev; + tmp.st_ino = inode->i_num; + tmp.st_mode = inode->i_mode; + tmp.st_nlink = inode->i_nlinks; + tmp.st_uid = inode->i_uid; + tmp.st_gid = inode->i_gid; + tmp.st_rdev = inode->i_zone[0]; + tmp.st_size = inode->i_size; + tmp.st_atime = inode->i_atime; + tmp.st_mtime = inode->i_mtime; + tmp.st_ctime = inode->i_ctime; + for (i=0 ; i= NR_OPEN || !(f=current->filp[fd]) || !(inode=f->f_inode)) + return -EBADF; + cp_stat(inode,statbuf); + return 0; +} + +int sys_readlink() +{ + return -ENOSYS; +} diff --git a/linux-0.11-lab/4/linux/fs/stat.o b/linux-0.11-lab/4/linux/fs/stat.o new file mode 100644 index 0000000000000000000000000000000000000000..2daed7a97a85d87da066f5fbd6c9fd03f74d04cf GIT binary patch literal 7212 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 +#include +#include +#include + +#include +#include + +int sync_dev(int dev); +void wait_for_keypress(void); + +/* set_bit uses setb, as gas doesn't recognize setc */ +#define set_bit(bitnr,addr) ({ \ +register int __res __asm__("ax"); \ +__asm__("bt %2,%3;setb %%al":"=a" (__res):"a" (0),"r" (bitnr),"m" (*(addr))); \ +__res; }) + +struct super_block super_block[NR_SUPER]; +/* this is initialized in init/main.c */ +int ROOT_DEV = 0; + +static void lock_super(struct super_block * sb) +{ + cli(); + while (sb->s_lock) + sleep_on(&(sb->s_wait)); + sb->s_lock = 1; + sti(); +} + +static void free_super(struct super_block * sb) +{ + cli(); + sb->s_lock = 0; + wake_up(&(sb->s_wait)); + sti(); +} + +static void wait_on_super(struct super_block * sb) +{ + cli(); + while (sb->s_lock) + sleep_on(&(sb->s_wait)); + sti(); +} + +struct super_block * get_super(int dev) +{ + struct super_block * s; + + if (!dev) + return NULL; + s = 0+super_block; + while (s < NR_SUPER+super_block) + if (s->s_dev == dev) { + wait_on_super(s); + if (s->s_dev == dev) + return s; + s = 0+super_block; + } else + s++; + return NULL; +} + +void put_super(int dev) +{ + struct super_block * sb; +/* struct m_inode * inode; */ + int i; + + if (dev == ROOT_DEV) { + printk("root diskette changed: prepare for armageddon\n\r"); + return; + } + if (!(sb = get_super(dev))) + return; + if (sb->s_imount) { + printk("Mounted disk changed - tssk, tssk\n\r"); + return; + } + lock_super(sb); + sb->s_dev = 0; + for(i=0;is_imap[i]); + for(i=0;is_zmap[i]); + free_super(sb); + return; +} + +static struct super_block * read_super(int dev) +{ + struct super_block * s; + struct buffer_head * bh; + int i,block; + + if (!dev) + return NULL; + check_disk_change(dev); + if (s = get_super(dev)) + return s; + for (s = 0+super_block ;; s++) { + if (s >= NR_SUPER+super_block) + return NULL; + if (!s->s_dev) + break; + } + s->s_dev = dev; + s->s_isup = NULL; + s->s_imount = NULL; + s->s_time = 0; + s->s_rd_only = 0; + s->s_dirt = 0; + lock_super(s); + if (!(bh = bread(dev,1))) { + s->s_dev=0; + free_super(s); + return NULL; + } + __asm__ volatile ("cld"); /* by wyj */ + *((struct d_super_block *) s) = + *((struct d_super_block *) bh->b_data); + brelse(bh); + if (s->s_magic != SUPER_MAGIC) { + s->s_dev = 0; + free_super(s); + return NULL; + } + for (i=0;is_imap[i] = NULL; + for (i=0;is_zmap[i] = NULL; + block=2; + for (i=0 ; i < s->s_imap_blocks ; i++) + if (s->s_imap[i]=bread(dev,block)) + block++; + else + break; + for (i=0 ; i < s->s_zmap_blocks ; i++) + if (s->s_zmap[i]=bread(dev,block)) + block++; + else + break; + if (block != 2+s->s_imap_blocks+s->s_zmap_blocks) { + for(i=0;is_imap[i]); + for(i=0;is_zmap[i]); + s->s_dev=0; + free_super(s); + return NULL; + } + s->s_imap[0]->b_data[0] |= 1; + s->s_zmap[0]->b_data[0] |= 1; + free_super(s); + return s; +} + +int sys_umount(char * dev_name) +{ + struct m_inode * inode; + struct super_block * sb; + int dev; + + if (!(inode=namei(dev_name))) + return -ENOENT; + dev = inode->i_zone[0]; + if (!S_ISBLK(inode->i_mode)) { + iput(inode); + return -ENOTBLK; + } + iput(inode); + if (dev==ROOT_DEV) + return -EBUSY; + if (!(sb=get_super(dev)) || !(sb->s_imount)) + return -ENOENT; + if (!sb->s_imount->i_mount) + printk("Mounted inode has i_mount=0\n"); + for (inode=inode_table+0 ; inodei_dev==dev && inode->i_count) + return -EBUSY; + sb->s_imount->i_mount=0; + iput(sb->s_imount); + sb->s_imount = NULL; + iput(sb->s_isup); + sb->s_isup = NULL; + put_super(dev); + sync_dev(dev); + return 0; +} + +int sys_mount(char * dev_name, char * dir_name, int rw_flag) +{ + struct m_inode * dev_i, * dir_i; + struct super_block * sb; + int dev; + + if (!(dev_i=namei(dev_name))) + return -ENOENT; + dev = dev_i->i_zone[0]; + if (!S_ISBLK(dev_i->i_mode)) { + iput(dev_i); + return -EPERM; + } + iput(dev_i); + if (!(dir_i=namei(dir_name))) + return -ENOENT; + if (dir_i->i_count != 1 || dir_i->i_num == ROOT_INO) { + iput(dir_i); + return -EBUSY; + } + if (!S_ISDIR(dir_i->i_mode)) { + iput(dir_i); + return -EPERM; + } + if (!(sb=read_super(dev))) { + iput(dir_i); + return -EBUSY; + } + if (sb->s_imount) { + iput(dir_i); + return -EBUSY; + } + if (dir_i->i_mount) { + iput(dir_i); + return -EPERM; + } + sb->s_imount=dir_i; + dir_i->i_mount=1; + dir_i->i_dirt=1; /* NOTE! we don't iput(dir_i) */ + return 0; /* we do that in umount */ +} + +void mount_root(void) +{ + int i,free; + struct super_block * p; + struct m_inode * mi; + + if (32 != sizeof (struct d_inode)) + panic("bad i-node size"); + for(i=0;is_dev = 0; + p->s_lock = 0; + p->s_wait = NULL; + } + if (!(p=read_super(ROOT_DEV))) + panic("Unable to mount root"); + if (!(mi=iget(ROOT_DEV,ROOT_INO))) + panic("Unable to read root i-node"); + mi->i_count += 3 ; /* NOTE! it is logically used 4 times, not 1 */ + p->s_isup = p->s_imount = mi; + current->pwd = mi; + current->root = mi; + free=0; + i=p->s_nzones; + while (-- i >= 0) + if (!set_bit(i&8191,p->s_zmap[i>>13]->b_data)) + free++; + printk("%d/%d free blocks\n\r",free,p->s_nzones); + free=0; + i=p->s_ninodes+1; + while (-- i >= 0) + if (!set_bit(i&8191,p->s_imap[i>>13]->b_data)) + free++; + printk("%d/%d free inodes\n\r",free,p->s_ninodes); +} diff --git a/linux-0.11-lab/4/linux/fs/super.o b/linux-0.11-lab/4/linux/fs/super.o new file mode 100644 index 0000000000000000000000000000000000000000..ddd4a45729873af8fa5cec7d1be1b2f142e5522d GIT binary patch literal 12284 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/fs/truncate.c b/linux-0.11-lab/4/linux/fs/truncate.c new file mode 100644 index 0000000..36f3ea2 --- /dev/null +++ b/linux-0.11-lab/4/linux/fs/truncate.c @@ -0,0 +1,65 @@ +/* + * linux/fs/truncate.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +#include + +static void free_ind(int dev,int block) +{ + struct buffer_head * bh; + unsigned short * p; + int i; + + if (!block) + return; + if (bh=bread(dev,block)) { + p = (unsigned short *) bh->b_data; + for (i=0;i<512;i++,p++) + if (*p) + free_block(dev,*p); + brelse(bh); + } + free_block(dev,block); +} + +static void free_dind(int dev,int block) +{ + struct buffer_head * bh; + unsigned short * p; + int i; + + if (!block) + return; + if (bh=bread(dev,block)) { + p = (unsigned short *) bh->b_data; + for (i=0;i<512;i++,p++) + if (*p) + free_ind(dev,*p); + brelse(bh); + } + free_block(dev,block); +} + +void truncate(struct m_inode * inode) +{ + int i; + + if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode))) + return; + for (i=0;i<7;i++) + if (inode->i_zone[i]) { + free_block(inode->i_dev,inode->i_zone[i]); + inode->i_zone[i]=0; + } + free_ind(inode->i_dev,inode->i_zone[7]); + free_dind(inode->i_dev,inode->i_zone[8]); + inode->i_zone[7] = inode->i_zone[8] = 0; + inode->i_size = 0; + inode->i_dirt = 1; + inode->i_mtime = inode->i_ctime = CURRENT_TIME; +} + diff --git a/linux-0.11-lab/4/linux/fs/truncate.o b/linux-0.11-lab/4/linux/fs/truncate.o new file mode 100644 index 0000000000000000000000000000000000000000..88d0ba8d075c992ec9846e2d78471fa44b1e9791 GIT binary patch literal 6848 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 relocate with value of symbol. + r_symbolnum is the index of the symbol + in file's the symbol table. + 0 => relocate with the address of a segment. + r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS + (the N_EXT bit may be set also, but signifies nothing). */ + unsigned int r_extern:1; + /* Four bits that aren't used, but when writing an object file + it is desirable to clear them. */ + unsigned int r_pad:4; +}; +#endif /* no N_RELOCATION_INFO_DECLARED. */ + + +#endif /* __A_OUT_GNU_H__ */ diff --git a/linux-0.11-lab/4/linux/include/asm/io.h b/linux-0.11-lab/4/linux/include/asm/io.h new file mode 100644 index 0000000..d5cc42a --- /dev/null +++ b/linux-0.11-lab/4/linux/include/asm/io.h @@ -0,0 +1,24 @@ +#define outb(value,port) \ +__asm__ ("outb %%al,%%dx"::"a" (value),"d" (port)) + + +#define inb(port) ({ \ +unsigned char _v; \ +__asm__ volatile ("inb %%dx,%%al":"=a" (_v):"d" (port)); \ +_v; \ +}) + +#define outb_p(value,port) \ +__asm__ ("outb %%al,%%dx\n" \ + "\tjmp 1f\n" \ + "1:\tjmp 1f\n" \ + "1:"::"a" (value),"d" (port)) + +#define inb_p(port) ({ \ +unsigned char _v; \ +__asm__ volatile ("inb %%dx,%%al\n" \ + "\tjmp 1f\n" \ + "1:\tjmp 1f\n" \ + "1:":"=a" (_v):"d" (port)); \ +_v; \ +}) diff --git a/linux-0.11-lab/4/linux/include/asm/memory.h b/linux-0.11-lab/4/linux/include/asm/memory.h new file mode 100644 index 0000000..51b69e7 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/asm/memory.h @@ -0,0 +1,15 @@ +/* + * NOTE!!! memcpy(dest,src,n) assumes ds=es=normal data segment. This + * goes for all kernel functions (ds=es=kernel space, fs=local data, + * gs=null), as well as for all well-behaving user programs (ds=es= + * user data space). This is NOT a bug, as any user program that changes + * es deserves to die if it isn't careful. + */ +#define memcpy(dest,src,n) ({ \ +void * _res = dest; \ +__asm__ ("cld;rep;movsb" \ + ::"D" ((long)(_res)),"S" ((long)(src)),"c" ((long) (n)) \ + ); \ +_res; \ +}) + diff --git a/linux-0.11-lab/4/linux/include/asm/segment.h b/linux-0.11-lab/4/linux/include/asm/segment.h new file mode 100644 index 0000000..94dd102 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/asm/segment.h @@ -0,0 +1,65 @@ +static inline unsigned char get_fs_byte(const char * addr) +{ + unsigned register char _v; + + __asm__ ("movb %%fs:%1,%0":"=r" (_v):"m" (*addr)); + return _v; +} + +static inline unsigned short get_fs_word(const unsigned short *addr) +{ + unsigned short _v; + + __asm__ ("movw %%fs:%1,%0":"=r" (_v):"m" (*addr)); + return _v; +} + +static inline unsigned long get_fs_long(const unsigned long *addr) +{ + unsigned long _v; + + __asm__ ("movl %%fs:%1,%0":"=r" (_v):"m" (*addr)); \ + return _v; +} + +static inline void put_fs_byte(char val,char *addr) +{ +__asm__ ("movb %0,%%fs:%1"::"r" (val),"m" (*addr)); +} + +static inline void put_fs_word(short val,short * addr) +{ +__asm__ ("movw %0,%%fs:%1"::"r" (val),"m" (*addr)); +} + +static inline void put_fs_long(unsigned long val,unsigned long * addr) +{ +__asm__ ("movl %0,%%fs:%1"::"r" (val),"m" (*addr)); +} + +/* + * Someone who knows GNU asm better than I should double check the followig. + * It seems to work, but I don't know if I'm doing something subtly wrong. + * --- TYT, 11/24/91 + * [ nothing wrong here, Linus ] + */ + +static inline unsigned long get_fs() +{ + unsigned short _v; + __asm__("mov %%fs,%%ax":"=a" (_v):); + return _v; +} + +static inline unsigned long get_ds() +{ + unsigned short _v; + __asm__("mov %%ds,%%ax":"=a" (_v):); + return _v; +} + +static inline void set_fs(unsigned long val) +{ + __asm__("mov %0,%%fs"::"a" ((unsigned short) val)); +} + diff --git a/linux-0.11-lab/4/linux/include/asm/system.h b/linux-0.11-lab/4/linux/include/asm/system.h new file mode 100644 index 0000000..0b5a21d --- /dev/null +++ b/linux-0.11-lab/4/linux/include/asm/system.h @@ -0,0 +1,66 @@ +#define move_to_user_mode() \ +__asm__ ("movl %%esp,%%eax\n\t" \ + "pushl $0x17\n\t" \ + "pushl %%eax\n\t" \ + "pushfl\n\t" \ + "pushl $0x0f\n\t" \ + "pushl $1f\n\t" \ + "iret\n" \ + "1:\tmovl $0x17,%%eax\n\t" \ + "movw %%ax,%%ds\n\t" \ + "movw %%ax,%%es\n\t" \ + "movw %%ax,%%fs\n\t" \ + "movw %%ax,%%gs" \ + :::"ax") + +#define sti() __asm__ ("sti"::) +#define cli() __asm__ ("cli"::) +#define nop() __asm__ ("nop"::) + +#define iret() __asm__ ("iret"::) + +#define _set_gate(gate_addr,type,dpl,addr) \ +__asm__ ("movw %%dx,%%ax\n\t" \ + "movw %0,%%dx\n\t" \ + "movl %%eax,%1\n\t" \ + "movl %%edx,%2" \ + : \ + : "i" ((short) (0x8000+(dpl<<13)+(type<<8))), \ + "o" (*((char *) (gate_addr))), \ + "o" (*(4+(char *) (gate_addr))), \ + "d" ((char *) (addr)),"a" (0x00080000)) + +#define set_intr_gate(n,addr) \ + _set_gate(&idt[n],14,0,addr) + +#define set_trap_gate(n,addr) \ + _set_gate(&idt[n],15,0,addr) + +#define set_system_gate(n,addr) \ + _set_gate(&idt[n],15,3,addr) + +#define _set_seg_desc(gate_addr,type,dpl,base,limit) {\ + *(gate_addr) = ((base) & 0xff000000) | \ + (((base) & 0x00ff0000)>>16) | \ + ((limit) & 0xf0000) | \ + ((dpl)<<13) | \ + (0x00408000) | \ + ((type)<<8); \ + *((gate_addr)+1) = (((base) & 0x0000ffff)<<16) | \ + ((limit) & 0x0ffff); } + +#define _set_tssldt_desc(n,addr,type) \ +__asm__ ("movw $104,%1\n\t" \ + "movw %%ax,%2\n\t" \ + "rorl $16,%%eax\n\t" \ + "movb %%al,%3\n\t" \ + "movb $" type ",%4\n\t" \ + "movb $0x00,%5\n\t" \ + "movb %%ah,%6\n\t" \ + "rorl $16,%%eax" \ + ::"a" (addr), "m" (*(n)), "m" (*(n+2)), "m" (*(n+4)), \ + "m" (*(n+5)), "m" (*(n+6)), "m" (*(n+7)) \ + ) + +#define set_tss_desc(n,addr) _set_tssldt_desc(((char *) (n)),addr,"0x89") +#define set_ldt_desc(n,addr) _set_tssldt_desc(((char *) (n)),addr,"0x82") diff --git a/linux-0.11-lab/4/linux/include/const.h b/linux-0.11-lab/4/linux/include/const.h new file mode 100644 index 0000000..7828e61 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/const.h @@ -0,0 +1,15 @@ +#ifndef _CONST_H +#define _CONST_H + +#define BUFFER_END 0x200000 + +#define I_TYPE 0170000 +#define I_DIRECTORY 0040000 +#define I_REGULAR 0100000 +#define I_BLOCK_SPECIAL 0060000 +#define I_CHAR_SPECIAL 0020000 +#define I_NAMED_PIPE 0010000 +#define I_SET_UID_BIT 0004000 +#define I_SET_GID_BIT 0002000 + +#endif diff --git a/linux-0.11-lab/4/linux/include/ctype.h b/linux-0.11-lab/4/linux/include/ctype.h new file mode 100644 index 0000000..7acf55d --- /dev/null +++ b/linux-0.11-lab/4/linux/include/ctype.h @@ -0,0 +1,34 @@ +#ifndef _CTYPE_H +#define _CTYPE_H + +#define _U 0x01 /* upper */ +#define _L 0x02 /* lower */ +#define _D 0x04 /* digit */ +#define _C 0x08 /* cntrl */ +#define _P 0x10 /* punct */ +#define _S 0x20 /* white space (space/lf/tab) */ +#define _X 0x40 /* hex digit */ +#define _SP 0x80 /* hard space (0x20) */ + +extern unsigned char _ctype[]; +extern char _ctmp; + +#define isalnum(c) ((_ctype+1)[c]&(_U|_L|_D)) +#define isalpha(c) ((_ctype+1)[c]&(_U|_L)) +#define iscntrl(c) ((_ctype+1)[c]&(_C)) +#define isdigit(c) ((_ctype+1)[c]&(_D)) +#define isgraph(c) ((_ctype+1)[c]&(_P|_U|_L|_D)) +#define islower(c) ((_ctype+1)[c]&(_L)) +#define isprint(c) ((_ctype+1)[c]&(_P|_U|_L|_D|_SP)) +#define ispunct(c) ((_ctype+1)[c]&(_P)) +#define isspace(c) ((_ctype+1)[c]&(_S)) +#define isupper(c) ((_ctype+1)[c]&(_U)) +#define isxdigit(c) ((_ctype+1)[c]&(_D|_X)) + +#define isascii(c) (((unsigned) c)<=0x7f) +#define toascii(c) (((unsigned) c)&0x7f) + +#define tolower(c) (_ctmp=c,isupper(_ctmp)?_ctmp-('A'-'a'):_ctmp) +#define toupper(c) (_ctmp=c,islower(_ctmp)?_ctmp-('a'-'A'):_ctmp) + +#endif diff --git a/linux-0.11-lab/4/linux/include/errno.h b/linux-0.11-lab/4/linux/include/errno.h new file mode 100644 index 0000000..c282f69 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/errno.h @@ -0,0 +1,60 @@ +#ifndef _ERRNO_H +#define _ERRNO_H + +/* + * ok, as I hadn't got any other source of information about + * possible error numbers, I was forced to use the same numbers + * as minix. + * Hopefully these are posix or something. I wouldn't know (and posix + * isn't telling me - they want $$$ for their f***ing standard). + * + * We don't use the _SIGN cludge of minix, so kernel returns must + * see to the sign by themselves. + * + * NOTE! Remember to change strerror() if you change this file! + */ + +extern int errno; + +#define ERROR 99 +#define EPERM 1 +#define ENOENT 2 +#define ESRCH 3 +#define EINTR 4 +#define EIO 5 +#define ENXIO 6 +#define E2BIG 7 +#define ENOEXEC 8 +#define EBADF 9 +#define ECHILD 10 +#define EAGAIN 11 +#define ENOMEM 12 +#define EACCES 13 +#define EFAULT 14 +#define ENOTBLK 15 +#define EBUSY 16 +#define EEXIST 17 +#define EXDEV 18 +#define ENODEV 19 +#define ENOTDIR 20 +#define EISDIR 21 +#define EINVAL 22 +#define ENFILE 23 +#define EMFILE 24 +#define ENOTTY 25 +#define ETXTBSY 26 +#define EFBIG 27 +#define ENOSPC 28 +#define ESPIPE 29 +#define EROFS 30 +#define EMLINK 31 +#define EPIPE 32 +#define EDOM 33 +#define ERANGE 34 +#define EDEADLK 35 +#define ENAMETOOLONG 36 +#define ENOLCK 37 +#define ENOSYS 38 +#define ENOTEMPTY 39 + +#endif diff --git a/linux-0.11-lab/4/linux/include/fcntl.h b/linux-0.11-lab/4/linux/include/fcntl.h new file mode 100644 index 0000000..a5bf9af --- /dev/null +++ b/linux-0.11-lab/4/linux/include/fcntl.h @@ -0,0 +1,55 @@ +#ifndef _FCNTL_H +#define _FCNTL_H + +#include + +/* open/fcntl - NOCTTY, NDELAY isn't implemented yet */ +#define O_ACCMODE 00003 +#define O_RDONLY 00 +#define O_WRONLY 01 +#define O_RDWR 02 +#define O_CREAT 00100 /* not fcntl */ +#define O_EXCL 00200 /* not fcntl */ +#define O_NOCTTY 00400 /* not fcntl */ +#define O_TRUNC 01000 /* not fcntl */ +#define O_APPEND 02000 +#define O_NONBLOCK 04000 /* not fcntl */ +#define O_NDELAY O_NONBLOCK + +/* Defines for fcntl-commands. Note that currently + * locking isn't supported, and other things aren't really + * tested. + */ +#define F_DUPFD 0 /* dup */ +#define F_GETFD 1 /* get f_flags */ +#define F_SETFD 2 /* set f_flags */ +#define F_GETFL 3 /* more flags (cloexec) */ +#define F_SETFL 4 +#define F_GETLK 5 /* not implemented */ +#define F_SETLK 6 +#define F_SETLKW 7 + +/* for F_[GET|SET]FL */ +#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ + +/* Ok, these are locking features, and aren't implemented at any + * level. POSIX wants them. + */ +#define F_RDLCK 0 +#define F_WRLCK 1 +#define F_UNLCK 2 + +/* Once again - not implemented, but ... */ +struct flock { + short l_type; + short l_whence; + off_t l_start; + off_t l_len; + pid_t l_pid; +}; + +extern int creat(const char * filename,mode_t mode); +extern int fcntl(int fildes,int cmd, ...); +extern int open(const char * filename, int flags, ...); + +#endif diff --git a/linux-0.11-lab/4/linux/include/linux/config.h b/linux-0.11-lab/4/linux/include/linux/config.h new file mode 100644 index 0000000..c979fb3 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/linux/config.h @@ -0,0 +1,48 @@ +#ifndef _CONFIG_H +#define _CONFIG_H + +/* + * The root-device is no longer hard-coded. You can change the default + * root-device by changing the line ROOT_DEV = XXX in boot/bootsect.s + */ + +/* + * define your keyboard here - + * KBD_FINNISH for Finnish keyboards + * KBD_US for US-type + * KBD_GR for German keyboards + * KBD_FR for Frech keyboard + */ +#define KBD_US +/*#define KBD_GR */ +/*#define KBD_FR */ +/*#define KBD_FINNISH */ + +/* + * Normally, Linux can get the drive parameters from the BIOS at + * startup, but if this for some unfathomable reason fails, you'd + * be left stranded. For this case, you can define HD_TYPE, which + * contains all necessary info on your harddisk. + * + * The HD_TYPE macro should look like this: + * + * #define HD_TYPE { head, sect, cyl, wpcom, lzone, ctl} + * + * In case of two harddisks, the info should be sepatated by + * commas: + * + * #define HD_TYPE { h,s,c,wpcom,lz,ctl },{ h,s,c,wpcom,lz,ctl } + */ +/* + This is an example, two drives, first is type 2, second is type 3: + +#define HD_TYPE { 4,17,615,300,615,8 }, { 6,17,615,300,615,0 } + + NOTE: ctl is 0 for all drives with heads<=8, and ctl=8 for drives + with more than 8 heads. + + If you want the BIOS to tell what kind of drive you have, just + leave HD_TYPE undefined. This is the normal thing to do. +*/ + +#endif diff --git a/linux-0.11-lab/4/linux/include/linux/fdreg.h b/linux-0.11-lab/4/linux/include/linux/fdreg.h new file mode 100644 index 0000000..01355af --- /dev/null +++ b/linux-0.11-lab/4/linux/include/linux/fdreg.h @@ -0,0 +1,71 @@ +/* + * This file contains some defines for the floppy disk controller. + * Various sources. Mostly "IBM Microcomputers: A Programmers + * Handbook", Sanches and Canton. + */ +#ifndef _FDREG_H +#define _FDREG_H + +extern int ticks_to_floppy_on(unsigned int nr); +extern void floppy_on(unsigned int nr); +extern void floppy_off(unsigned int nr); +extern void floppy_select(unsigned int nr); +extern void floppy_deselect(unsigned int nr); + +/* Fd controller regs. S&C, about page 340 */ +#define FD_STATUS 0x3f4 +#define FD_DATA 0x3f5 +#define FD_DOR 0x3f2 /* Digital Output Register */ +#define FD_DIR 0x3f7 /* Digital Input Register (read) */ +#define FD_DCR 0x3f7 /* Diskette Control Register (write)*/ + +/* Bits of main status register */ +#define STATUS_BUSYMASK 0x0F /* drive busy mask */ +#define STATUS_BUSY 0x10 /* FDC busy */ +#define STATUS_DMA 0x20 /* 0- DMA mode */ +#define STATUS_DIR 0x40 /* 0- cpu->fdc */ +#define STATUS_READY 0x80 /* Data reg ready */ + +/* Bits of FD_ST0 */ +#define ST0_DS 0x03 /* drive select mask */ +#define ST0_HA 0x04 /* Head (Address) */ +#define ST0_NR 0x08 /* Not Ready */ +#define ST0_ECE 0x10 /* Equipment chech error */ +#define ST0_SE 0x20 /* Seek end */ +#define ST0_INTR 0xC0 /* Interrupt code mask */ + +/* Bits of FD_ST1 */ +#define ST1_MAM 0x01 /* Missing Address Mark */ +#define ST1_WP 0x02 /* Write Protect */ +#define ST1_ND 0x04 /* No Data - unreadable */ +#define ST1_OR 0x10 /* OverRun */ +#define ST1_CRC 0x20 /* CRC error in data or addr */ +#define ST1_EOC 0x80 /* End Of Cylinder */ + +/* Bits of FD_ST2 */ +#define ST2_MAM 0x01 /* Missing Addess Mark (again) */ +#define ST2_BC 0x02 /* Bad Cylinder */ +#define ST2_SNS 0x04 /* Scan Not Satisfied */ +#define ST2_SEH 0x08 /* Scan Equal Hit */ +#define ST2_WC 0x10 /* Wrong Cylinder */ +#define ST2_CRC 0x20 /* CRC error in data field */ +#define ST2_CM 0x40 /* Control Mark = deleted */ + +/* Bits of FD_ST3 */ +#define ST3_HA 0x04 /* Head (Address) */ +#define ST3_TZ 0x10 /* Track Zero signal (1=track 0) */ +#define ST3_WP 0x40 /* Write Protect */ + +/* Values for FD_COMMAND */ +#define FD_RECALIBRATE 0x07 /* move to track 0 */ +#define FD_SEEK 0x0F /* seek track */ +#define FD_READ 0xE6 /* read with MT, MFM, SKip deleted */ +#define FD_WRITE 0xC5 /* write with MT, MFM */ +#define FD_SENSEI 0x08 /* Sense Interrupt Status */ +#define FD_SPECIFY 0x03 /* specify HUT etc */ + +/* DMA commands */ +#define DMA_READ 0x46 +#define DMA_WRITE 0x4A + +#endif diff --git a/linux-0.11-lab/4/linux/include/linux/fs.h b/linux-0.11-lab/4/linux/include/linux/fs.h new file mode 100644 index 0000000..7a90b10 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/linux/fs.h @@ -0,0 +1,202 @@ +/* + * This file has definitions for some important file table + * structures etc. + */ + +#ifndef _FS_H +#define _FS_H + +#include + +/* devices are as follows: (same as minix, so we can use the minix + * file system. These are major numbers.) + * + * 0 - unused (nodev) + * 1 - /dev/mem + * 2 - /dev/fd + * 3 - /dev/hd + * 4 - /dev/ttyx + * 5 - /dev/tty + * 6 - /dev/lp + * 7 - unnamed pipes + */ + +#define IS_SEEKABLE(x) ((x)>=1 && (x)<=3) + +#define READ 0 +#define WRITE 1 +#define READA 2 /* read-ahead - don't pause */ +#define WRITEA 3 /* "write-ahead" - silly, but somewhat useful */ + +void buffer_init(long buffer_end); + +#define MAJOR(a) (((unsigned)(a))>>8) +#define MINOR(a) ((a)&0xff) + +#define NAME_LEN 14 +#define ROOT_INO 1 + +#define I_MAP_SLOTS 8 +#define Z_MAP_SLOTS 8 +#define SUPER_MAGIC 0x137F + +#define NR_OPEN 20 +#define NR_INODE 32 +#define NR_FILE 64 +#define NR_SUPER 8 +#define NR_HASH 307 +#define NR_BUFFERS nr_buffers +#define BLOCK_SIZE 1024 +#define BLOCK_SIZE_BITS 10 +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#define INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct d_inode))) +#define DIR_ENTRIES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct dir_entry))) + +#define PIPE_HEAD(inode) ((inode).i_zone[0]) +#define PIPE_TAIL(inode) ((inode).i_zone[1]) +#define PIPE_SIZE(inode) ((PIPE_HEAD(inode)-PIPE_TAIL(inode))&(PAGE_SIZE-1)) +#define PIPE_EMPTY(inode) (PIPE_HEAD(inode)==PIPE_TAIL(inode)) +#define PIPE_FULL(inode) (PIPE_SIZE(inode)==(PAGE_SIZE-1)) +#define INC_PIPE(head) \ +__asm__("incl %0\n\tandl $4095,%0"::"m" (head)) + +typedef char buffer_block[BLOCK_SIZE]; + +struct buffer_head { + char * b_data; /* pointer to data block (1024 bytes) */ + unsigned long b_blocknr; /* block number */ + unsigned short b_dev; /* device (0 = free) */ + unsigned char b_uptodate; + unsigned char b_dirt; /* 0-clean,1-dirty */ + unsigned char b_count; /* users using this block */ + unsigned char b_lock; /* 0 - ok, 1 -locked */ + struct task_struct * b_wait; + struct buffer_head * b_prev; + struct buffer_head * b_next; + struct buffer_head * b_prev_free; + struct buffer_head * b_next_free; +}; + +struct d_inode { + unsigned short i_mode; + unsigned short i_uid; + unsigned long i_size; + unsigned long i_time; + unsigned char i_gid; + unsigned char i_nlinks; + unsigned short i_zone[9]; +}; + +struct m_inode { + unsigned short i_mode; + unsigned short i_uid; + unsigned long i_size; + unsigned long i_mtime; + unsigned char i_gid; + unsigned char i_nlinks; + unsigned short i_zone[9]; +/* these are in memory also */ + struct task_struct * i_wait; + unsigned long i_atime; + unsigned long i_ctime; + unsigned short i_dev; + unsigned short i_num; + unsigned short i_count; + unsigned char i_lock; + unsigned char i_dirt; + unsigned char i_pipe; + unsigned char i_mount; + unsigned char i_seek; + unsigned char i_update; +}; + +struct file { + unsigned short f_mode; + unsigned short f_flags; + unsigned short f_count; + struct m_inode * f_inode; + off_t f_pos; +}; + +struct super_block { + unsigned short s_ninodes; + unsigned short s_nzones; + unsigned short s_imap_blocks; + unsigned short s_zmap_blocks; + unsigned short s_firstdatazone; + unsigned short s_log_zone_size; + unsigned long s_max_size; + unsigned short s_magic; +/* These are only in memory */ + struct buffer_head * s_imap[8]; + struct buffer_head * s_zmap[8]; + unsigned short s_dev; + struct m_inode * s_isup; + struct m_inode * s_imount; + unsigned long s_time; + struct task_struct * s_wait; + unsigned char s_lock; + unsigned char s_rd_only; + unsigned char s_dirt; +}; + +struct d_super_block { + unsigned short s_ninodes; + unsigned short s_nzones; + unsigned short s_imap_blocks; + unsigned short s_zmap_blocks; + unsigned short s_firstdatazone; + unsigned short s_log_zone_size; + unsigned long s_max_size; + unsigned short s_magic; +}; + +struct dir_entry { + unsigned short inode; + char name[NAME_LEN]; +}; + +extern struct m_inode inode_table[NR_INODE]; +extern struct file file_table[NR_FILE]; +extern struct super_block super_block[NR_SUPER]; +extern struct buffer_head * start_buffer; +extern int nr_buffers; + +extern void check_disk_change(int dev); +extern int floppy_change(unsigned int nr); +extern int ticks_to_floppy_on(unsigned int dev); +extern void floppy_on(unsigned int dev); +extern void floppy_off(unsigned int dev); +extern void truncate(struct m_inode * inode); +extern void sync_inodes(void); +extern void wait_on(struct m_inode * inode); +extern int bmap(struct m_inode * inode,int block); +extern int create_block(struct m_inode * inode,int block); +extern struct m_inode * namei(const char * pathname); +extern int open_namei(const char * pathname, int flag, int mode, + struct m_inode ** res_inode); +extern void iput(struct m_inode * inode); +extern struct m_inode * iget(int dev,int nr); +extern struct m_inode * get_empty_inode(void); +extern struct m_inode * get_pipe_inode(void); +extern struct buffer_head * get_hash_table(int dev, int block); +extern struct buffer_head * getblk(int dev, int block); +extern void ll_rw_block(int rw, struct buffer_head * bh); +extern void brelse(struct buffer_head * buf); +extern struct buffer_head * bread(int dev,int block); +extern void bread_page(unsigned long addr,int dev,int b[4]); +extern struct buffer_head * breada(int dev,int block,...); +extern int new_block(int dev); +extern void free_block(int dev, int block); +extern struct m_inode * new_inode(int dev); +extern void free_inode(struct m_inode * inode); +extern int sync_dev(int dev); +extern struct super_block * get_super(int dev); +extern int ROOT_DEV; + +extern void mount_root(void); + +#endif diff --git a/linux-0.11-lab/4/linux/include/linux/hdreg.h b/linux-0.11-lab/4/linux/include/linux/hdreg.h new file mode 100644 index 0000000..e6c593f --- /dev/null +++ b/linux-0.11-lab/4/linux/include/linux/hdreg.h @@ -0,0 +1,65 @@ +/* + * This file contains some defines for the AT-hd-controller. + * Various sources. Check out some definitions (see comments with + * a ques). + */ +#ifndef _HDREG_H +#define _HDREG_H + +/* Hd controller regs. Ref: IBM AT Bios-listing */ +#define HD_DATA 0x1f0 /* _CTL when writing */ +#define HD_ERROR 0x1f1 /* see err-bits */ +#define HD_NSECTOR 0x1f2 /* nr of sectors to read/write */ +#define HD_SECTOR 0x1f3 /* starting sector */ +#define HD_LCYL 0x1f4 /* starting cylinder */ +#define HD_HCYL 0x1f5 /* high byte of starting cyl */ +#define HD_CURRENT 0x1f6 /* 101dhhhh , d=drive, hhhh=head */ +#define HD_STATUS 0x1f7 /* see status-bits */ +#define HD_PRECOMP HD_ERROR /* same io address, read=error, write=precomp */ +#define HD_COMMAND HD_STATUS /* same io address, read=status, write=cmd */ + +#define HD_CMD 0x3f6 + +/* Bits of HD_STATUS */ +#define ERR_STAT 0x01 +#define INDEX_STAT 0x02 +#define ECC_STAT 0x04 /* Corrected error */ +#define DRQ_STAT 0x08 +#define SEEK_STAT 0x10 +#define WRERR_STAT 0x20 +#define READY_STAT 0x40 +#define BUSY_STAT 0x80 + +/* Values for HD_COMMAND */ +#define WIN_RESTORE 0x10 +#define WIN_READ 0x20 +#define WIN_WRITE 0x30 +#define WIN_VERIFY 0x40 +#define WIN_FORMAT 0x50 +#define WIN_INIT 0x60 +#define WIN_SEEK 0x70 +#define WIN_DIAGNOSE 0x90 +#define WIN_SPECIFY 0x91 + +/* Bits for HD_ERROR */ +#define MARK_ERR 0x01 /* Bad address mark ? */ +#define TRK0_ERR 0x02 /* couldn't find track 0 */ +#define ABRT_ERR 0x04 /* ? */ +#define ID_ERR 0x10 /* ? */ +#define ECC_ERR 0x40 /* ? */ +#define BBD_ERR 0x80 /* ? */ + +struct partition { + unsigned char boot_ind; /* 0x80 - active (unused) */ + unsigned char head; /* ? */ + unsigned char sector; /* ? */ + unsigned char cyl; /* ? */ + unsigned char sys_ind; /* ? */ + unsigned char end_head; /* ? */ + unsigned char end_sector; /* ? */ + unsigned char end_cyl; /* ? */ + unsigned int start_sect; /* starting sector counting from 0 */ + unsigned int nr_sects; /* nr of sectors in partition */ +}; + +#endif diff --git a/linux-0.11-lab/4/linux/include/linux/head.h b/linux-0.11-lab/4/linux/include/linux/head.h new file mode 100644 index 0000000..db3dda2 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/linux/head.h @@ -0,0 +1,20 @@ +#ifndef _HEAD_H +#define _HEAD_H + +typedef struct desc_struct { + unsigned long a,b; +} desc_table[256]; + +extern unsigned long pg_dir[1024]; +extern desc_table idt,gdt; + +#define GDT_NUL 0 +#define GDT_CODE 1 +#define GDT_DATA 2 +#define GDT_TMP 3 + +#define LDT_NUL 0 +#define LDT_CODE 1 +#define LDT_DATA 2 + +#endif diff --git a/linux-0.11-lab/4/linux/include/linux/kernel.h b/linux-0.11-lab/4/linux/include/linux/kernel.h new file mode 100644 index 0000000..cb40dd5 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/linux/kernel.h @@ -0,0 +1,22 @@ +/* + * 'kernel.h' contains some often-used function prototypes etc + */ +void verify_area(void * addr,int count); +volatile void panic(const char * str); +int printf(const char * fmt, ...); +int printk(const char * fmt, ...); +int tty_write(unsigned ch,char * buf,int count); +void * malloc(unsigned int size); +void free_s(void * obj, int size); + +#define free(x) free_s((x), 0) + +/* + * This is defined as a macro, but at some point this might become a + * real subroutine that sets a flag if it returns true (to do + * BSD-style accounting where the process is flagged if it uses root + * privs). The implication of this is that you should do normal + * permissions checks first, and check suser() last. + */ +#define suser() (current->euid == 0) + diff --git a/linux-0.11-lab/4/linux/include/linux/mm.h b/linux-0.11-lab/4/linux/include/linux/mm.h new file mode 100644 index 0000000..5a160f3 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/linux/mm.h @@ -0,0 +1,10 @@ +#ifndef _MM_H +#define _MM_H + +#define PAGE_SIZE 4096 + +extern unsigned long get_free_page(void); +extern unsigned long put_page(unsigned long page,unsigned long address); +extern void free_page(unsigned long addr); + +#endif diff --git a/linux-0.11-lab/4/linux/include/linux/sched.h b/linux-0.11-lab/4/linux/include/linux/sched.h new file mode 100644 index 0000000..772646a --- /dev/null +++ b/linux-0.11-lab/4/linux/include/linux/sched.h @@ -0,0 +1,239 @@ +#ifndef _SCHED_H +#define _SCHED_H + +#define NR_TASKS 64 +#define HZ 100 + +#define FIRST_TASK task[0] +#define LAST_TASK task[NR_TASKS-1] + +#include +#include +#include +#include + +#if (NR_OPEN > 32) +#error "Currently the close-on-exec-flags are in one word, max 32 files/proc" +#endif + +#define TASK_RUNNING 0 +#define TASK_INTERRUPTIBLE 1 +#define TASK_UNINTERRUPTIBLE 2 +#define TASK_ZOMBIE 3 +#define TASK_STOPPED 4 + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +extern int copy_page_tables(unsigned long from, unsigned long to, long size); +extern int free_page_tables(unsigned long from, unsigned long size); + +extern void sched_init(void); +extern void schedule(void); +extern void trap_init(void); +extern void panic(const char * str); +extern int tty_write(unsigned minor,char * buf,int count); + +typedef int (*fn_ptr)(); + +struct i387_struct { + long cwd; + long swd; + long twd; + long fip; + long fcs; + long foo; + long fos; + long st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */ +}; + +struct tss_struct { + long back_link; /* 16 high bits zero */ + long esp0; + long ss0; /* 16 high bits zero */ + long esp1; + long ss1; /* 16 high bits zero */ + long esp2; + long ss2; /* 16 high bits zero */ + long cr3; + long eip; + long eflags; + long eax,ecx,edx,ebx; + long esp; + long ebp; + long esi; + long edi; + long es; /* 16 high bits zero */ + long cs; /* 16 high bits zero */ + long ss; /* 16 high bits zero */ + long ds; /* 16 high bits zero */ + long fs; /* 16 high bits zero */ + long gs; /* 16 high bits zero */ + long ldt; /* 16 high bits zero */ + long trace_bitmap; /* bits: trace 0, bitmap 16-31 */ + struct i387_struct i387; +}; + +struct task_struct { +/* these are hardcoded - don't touch */ + long state; /* -1 unrunnable, 0 runnable, >0 stopped */ + long counter; + long priority; + long signal; + struct sigaction sigaction[32]; + long blocked; /* bitmap of masked signals */ +/* various fields */ + int exit_code; + unsigned long start_code,end_code,end_data,brk,start_stack; + long pid,father,pgrp,session,leader; + unsigned short uid,euid,suid; + unsigned short gid,egid,sgid; + long alarm; + long utime,stime,cutime,cstime,start_time; + unsigned short used_math; +/* file system info */ + int tty; /* -1 if no tty, so it must be signed */ + unsigned short umask; + struct m_inode * pwd; + struct m_inode * root; + struct m_inode * executable; + unsigned long close_on_exec; + struct file * filp[NR_OPEN]; +/* ldt for this task 0 - zero 1 - cs 2 - ds&ss */ + struct desc_struct ldt[3]; +/* tss for this task */ + struct tss_struct tss; +}; + +/* + * INIT_TASK is used to set up the first task table, touch at + * your own risk!. Base=0, limit=0x9ffff (=640kB) + */ +#define INIT_TASK \ +/* state etc */ { 0,15,15, \ +/* signals */ 0,{{},},0, \ +/* ec,brk... */ 0,0,0,0,0,0, \ +/* pid etc.. */ 0,-1,0,0,0, \ +/* uid etc */ 0,0,0,0,0,0, \ +/* alarm */ 0,0,0,0,0,0, \ +/* math */ 0, \ +/* fs info */ -1,0022,NULL,NULL,NULL,0, \ +/* filp */ {NULL,}, \ + { \ + {0,0}, \ +/* ldt */ {0x9f,0xc0fa00}, \ + {0x9f,0xc0f200}, \ + }, \ +/*tss*/ {0,PAGE_SIZE+(long)&init_task,0x10,0,0,0,0,(long)&pg_dir,\ + 0,0,0,0,0,0,0,0, \ + 0,0,0x17,0x17,0x17,0x17,0x17,0x17, \ + _LDT(0),0x80000000, \ + {} \ + }, \ +} + +extern struct task_struct *task[NR_TASKS]; +extern struct task_struct *last_task_used_math; +extern struct task_struct *current; +extern long volatile jiffies; +extern long startup_time; + +#define CURRENT_TIME (startup_time+jiffies/HZ) + +extern void add_timer(long jiffies, void (*fn)(void)); +extern void sleep_on(struct task_struct ** p); +extern void interruptible_sleep_on(struct task_struct ** p); +extern void wake_up(struct task_struct ** p); + +/* + * Entry into gdt where to find first TSS. 0-nul, 1-cs, 2-ds, 3-syscall + * 4-TSS0, 5-LDT0, 6-TSS1 etc ... + */ +#define FIRST_TSS_ENTRY 4 +#define FIRST_LDT_ENTRY (FIRST_TSS_ENTRY+1) +#define _TSS(n) ((((unsigned long) n)<<4)+(FIRST_TSS_ENTRY<<3)) +#define _LDT(n) ((((unsigned long) n)<<4)+(FIRST_LDT_ENTRY<<3)) +#define ltr(n) __asm__("ltr %%ax"::"a" (_TSS(n))) +#define lldt(n) __asm__("lldt %%ax"::"a" (_LDT(n))) +#define str(n) \ +__asm__("str %%ax\n\t" \ + "subl %2,%%eax\n\t" \ + "shrl $4,%%eax" \ + :"=a" (n) \ + :"a" (0),"i" (FIRST_TSS_ENTRY<<3)) +/* + * switch_to(n) should switch tasks to task nr n, first + * checking that n isn't the current task, in which case it does nothing. + * This also clears the TS-flag if the task we switched to has used + * tha math co-processor latest. + */ +#define switch_to(n) {\ +struct {long a,b;} __tmp; \ +__asm__("cmpl %%ecx,current\n\t" \ + "je 1f\n\t" \ + "movw %%dx,%1\n\t" \ + "xchgl %%ecx,current\n\t" \ + "ljmp *%0\n\t" \ + "cmpl %%ecx,last_task_used_math\n\t" \ + "jne 1f\n\t" \ + "clts\n" \ + "1:" \ + ::"m" (*&__tmp.a),"m" (*&__tmp.b), \ + "d" (_TSS(n)),"c" ((long) task[n])); \ +} + +#define PAGE_ALIGN(n) (((n)+0xfff)&0xfffff000) + +#define _set_base(addr,base) \ +__asm__ ("push %%edx\n\t" \ + "movw %%dx,%0\n\t" \ + "rorl $16,%%edx\n\t" \ + "movb %%dl,%1\n\t" \ + "movb %%dh,%2\n\t" \ + "pop %%edx" \ + ::"m" (*((addr)+2)), \ + "m" (*((addr)+4)), \ + "m" (*((addr)+7)), \ + "d" (base) \ + ) + +#define _set_limit(addr,limit) \ +__asm__ ("push %%edx\n\t" \ + "movw %%dx,%0\n\t" \ + "rorl $16,%%edx\n\t" \ + "movb %1,%%dh\n\t" \ + "andb $0xf0,%%dh\n\t" \ + "orb %%dh,%%dl\n\t" \ + "movb %%dl,%1\n\t" \ + "pop %%edx" \ + ::"m" (*(addr)), \ + "m" (*((addr)+6)), \ + "d" (limit) \ + ) + +#define set_base(ldt,base) _set_base( ((char *)&(ldt)) , (base) ) +#define set_limit(ldt,limit) _set_limit( ((char *)&(ldt)) , (limit-1)>>12 ) + +static inline unsigned long _get_base(char * addr) +{ + unsigned long __base; + __asm__("movb %3,%%dh\n\t" + "movb %2,%%dl\n\t" + "shll $16,%%edx\n\t" + "movw %1,%%dx" + :"=&d" (__base) + :"m" (*((addr)+2)), + "m" (*((addr)+4)), + "m" (*((addr)+7))); + return __base; +} + +#define get_base(ldt) _get_base( ((char *)&(ldt)) ) + +#define get_limit(segment) ({ \ +unsigned long __limit; \ +__asm__("lsll %1,%0\n\tincl %0":"=r" (__limit):"r" (segment)); \ +__limit;}) + +#endif diff --git a/linux-0.11-lab/4/linux/include/linux/sys.h b/linux-0.11-lab/4/linux/include/linux/sys.h new file mode 100644 index 0000000..2d05119 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/linux/sys.h @@ -0,0 +1,119 @@ +/* + * Why isn't this a .c file? Enquiring minds.... + */ + +extern int sys_setup(); +extern int sys_exit(); +extern int sys_fork(); +extern int sys_read(); +extern int sys_write(); +extern int sys_open(); +extern int sys_close(); +extern int sys_waitpid(); +extern int sys_creat(); +extern int sys_link(); +extern int sys_unlink(); +extern int sys_execve(); +extern int sys_chdir(); +extern int sys_time(); +extern int sys_mknod(); +extern int sys_chmod(); +extern int sys_chown(); +extern int sys_break(); +extern int sys_stat(); +extern int sys_lseek(); +extern int sys_getpid(); +extern int sys_mount(); +extern int sys_umount(); +extern int sys_setuid(); +extern int sys_getuid(); +extern int sys_stime(); +extern int sys_ptrace(); +extern int sys_alarm(); +extern int sys_fstat(); +extern int sys_pause(); +extern int sys_utime(); +extern int sys_stty(); +extern int sys_gtty(); +extern int sys_access(); +extern int sys_nice(); +extern int sys_ftime(); +extern int sys_sync(); +extern int sys_kill(); +extern int sys_rename(); +extern int sys_mkdir(); +extern int sys_rmdir(); +extern int sys_dup(); +extern int sys_pipe(); +extern int sys_times(); +extern int sys_prof(); +extern int sys_brk(); +extern int sys_setgid(); +extern int sys_getgid(); +extern int sys_signal(); +extern int sys_geteuid(); +extern int sys_getegid(); +extern int sys_acct(); +extern int sys_phys(); +extern int sys_lock(); +extern int sys_ioctl(); +extern int sys_fcntl(); +extern int sys_mpx(); +extern int sys_setpgid(); +extern int sys_ulimit(); +extern int sys_uname(); +extern int sys_umask(); +extern int sys_chroot(); +extern int sys_ustat(); +extern int sys_dup2(); +extern int sys_getppid(); +extern int sys_getpgrp(); +extern int sys_setsid(); +extern int sys_sigaction(); +extern int sys_sgetmask(); +extern int sys_ssetmask(); +extern int sys_setreuid(); +extern int sys_setregid(); +extern int sys_sigpending(); +extern int sys_sigsuspend(); +extern int sys_sethostname(); +extern int sys_setrlimit(); +extern int sys_getrlimit(); +extern int sys_getrusage(); +extern int sys_gettimeofday(); +extern int sys_settimeofday(); +extern int sys_getgroups(); +extern int sys_setgroups(); +extern int sys_select(); +extern int sys_symlink(); +extern int sys_lstat(); +extern int sys_readlink(); +extern int sys_uselib(); +extern int sys_execve2(); +extern int sys_getdents(); +extern int sys_pipe2(); +extern int sys_sleep(); +extern long sys_getcwd(); +extern long sys_mmap(); +extern int sys_munmap(); +extern int sys_clone(); + +fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read, +sys_write, sys_open, sys_close, sys_waitpid, sys_creat, sys_link, +sys_unlink, sys_execve, sys_chdir, sys_time, sys_mknod, sys_chmod, +sys_chown, sys_break, sys_stat, sys_lseek, sys_getpid, sys_mount, +sys_umount, sys_setuid, sys_getuid, sys_stime, sys_ptrace, sys_alarm, +sys_fstat, sys_pause, sys_utime, sys_stty, sys_gtty, sys_access, +sys_nice, sys_ftime, sys_sync, sys_kill, sys_rename, sys_mkdir, +sys_rmdir, sys_dup, sys_pipe, sys_times, sys_prof, sys_brk, sys_setgid, +sys_getgid, sys_signal, sys_geteuid, sys_getegid, sys_acct, sys_phys, +sys_lock, sys_ioctl, sys_fcntl, sys_mpx, sys_setpgid, sys_ulimit, +sys_uname, sys_umask, sys_chroot, sys_ustat, sys_dup2, sys_getppid, +sys_getpgrp, sys_setsid, sys_sigaction, sys_sgetmask, sys_ssetmask, +sys_setreuid,sys_setregid, sys_sigsuspend, sys_sigpending, sys_sethostname, +sys_setrlimit, sys_getrlimit, sys_getrusage, sys_gettimeofday, +sys_settimeofday, sys_getgroups, sys_setgroups, sys_select, sys_symlink, +sys_lstat, sys_readlink, sys_uselib, sys_execve2, sys_getdents, sys_pipe2, sys_sleep, sys_getcwd, sys_mmap, sys_munmap, sys_clone }; + +/* So we don't have to do any more manual updating.... */ +int NR_syscalls = sizeof(sys_call_table)/sizeof(fn_ptr); diff --git a/linux-0.11-lab/4/linux/include/linux/tty.h b/linux-0.11-lab/4/linux/include/linux/tty.h new file mode 100644 index 0000000..ad846b3 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/linux/tty.h @@ -0,0 +1,77 @@ +/* + * 'tty.h' defines some structures used by tty_io.c and some defines. + * + * NOTE! Don't touch this without checking that nothing in rs_io.s or + * con_io.s breaks. Some constants are hardwired into the system (mainly + * offsets into 'tty_queue' + */ + +#ifndef _TTY_H +#define _TTY_H + +#include + +#define TTY_BUF_SIZE 1024 + +struct tty_queue { + unsigned long data; + unsigned long head; + unsigned long tail; + struct task_struct * proc_list; + char buf[TTY_BUF_SIZE]; +}; + +#define INC(a) ((a) = ((a)+1) & (TTY_BUF_SIZE-1)) +#define DEC(a) ((a) = ((a)-1) & (TTY_BUF_SIZE-1)) +#define EMPTY(a) ((a).head == (a).tail) +#define LEFT(a) (((a).tail-(a).head-1)&(TTY_BUF_SIZE-1)) +#define LAST(a) ((a).buf[(TTY_BUF_SIZE-1)&((a).head-1)]) +#define FULL(a) (!LEFT(a)) +#define CHARS(a) (((a).head-(a).tail)&(TTY_BUF_SIZE-1)) +#define GETCH(queue,c) \ +(void)({c=(queue).buf[(queue).tail];INC((queue).tail);}) +#define PUTCH(c,queue) \ +(void)({(queue).buf[(queue).head]=(c);INC((queue).head);}) + +#define INTR_CHAR(tty) ((tty)->termios.c_cc[VINTR]) +#define QUIT_CHAR(tty) ((tty)->termios.c_cc[VQUIT]) +#define ERASE_CHAR(tty) ((tty)->termios.c_cc[VERASE]) +#define KILL_CHAR(tty) ((tty)->termios.c_cc[VKILL]) +#define EOF_CHAR(tty) ((tty)->termios.c_cc[VEOF]) +#define START_CHAR(tty) ((tty)->termios.c_cc[VSTART]) +#define STOP_CHAR(tty) ((tty)->termios.c_cc[VSTOP]) +#define SUSPEND_CHAR(tty) ((tty)->termios.c_cc[VSUSP]) + +struct tty_struct { + struct termios termios; + int pgrp; + int stopped; + void (*write)(struct tty_struct * tty); + struct tty_queue read_q; + struct tty_queue write_q; + struct tty_queue secondary; + }; + +extern struct tty_struct tty_table[]; + +/* intr=^C quit=^| erase=del kill=^U + eof=^D vtime=\0 vmin=\1 sxtc=\0 + start=^Q stop=^S susp=^Z eol=\0 + reprint=^R discard=^U werase=^W lnext=^V + eol2=\0 +*/ +#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" + +void rs_init(void); +void con_init(void); +void tty_init(void); + +int tty_read(unsigned c, char * buf, int n); +int tty_write(unsigned c, char * buf, int n); + +void rs_write(struct tty_struct * tty); +void con_write(struct tty_struct * tty); + +void copy_to_cooked(struct tty_struct * tty); + +#endif diff --git a/linux-0.11-lab/4/linux/include/signal.h b/linux-0.11-lab/4/linux/include/signal.h new file mode 100644 index 0000000..0eea9a3 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/signal.h @@ -0,0 +1,68 @@ +#ifndef _SIGNAL_H +#define _SIGNAL_H + +#include + +typedef int sig_atomic_t; +typedef unsigned int sigset_t; /* 32 bits */ + +#define _NSIG 32 +#define NSIG _NSIG + +#define SIGHUP 1 +#define SIGINT 2 +#define SIGQUIT 3 +#define SIGILL 4 +#define SIGTRAP 5 +#define SIGABRT 6 +#define SIGIOT 6 +#define SIGUNUSED 7 +#define SIGFPE 8 +#define SIGKILL 9 +#define SIGUSR1 10 +#define SIGSEGV 11 +#define SIGUSR2 12 +#define SIGPIPE 13 +#define SIGALRM 14 +#define SIGTERM 15 +#define SIGSTKFLT 16 +#define SIGCHLD 17 +#define SIGCONT 18 +#define SIGSTOP 19 +#define SIGTSTP 20 +#define SIGTTIN 21 +#define SIGTTOU 22 + +/* Ok, I haven't implemented sigactions, but trying to keep headers POSIX */ +#define SA_NOCLDSTOP 1 +#define SA_NOMASK 0x40000000 +#define SA_ONESHOT 0x80000000 + +#define SIG_BLOCK 0 /* for blocking signals */ +#define SIG_UNBLOCK 1 /* for unblocking signals */ +#define SIG_SETMASK 2 /* for setting the signal mask */ + +#define SIG_DFL ((void (*)(int))0) /* default signal handling */ +#define SIG_IGN ((void (*)(int))1) /* ignore signal */ + +struct sigaction { + void (*sa_handler)(int); + sigset_t sa_mask; + int sa_flags; + void (*sa_restorer)(void); +}; + +void (*signal(int _sig, void (*_func)(int)))(int); +int raise(int sig); +int kill(pid_t pid, int sig); +int sigaddset(sigset_t *mask, int signo); +int sigdelset(sigset_t *mask, int signo); +int sigemptyset(sigset_t *mask); +int sigfillset(sigset_t *mask); +int sigismember(sigset_t *mask, int signo); /* 1 - is, 0 - not, -1 error */ +int sigpending(sigset_t *set); +int sigprocmask(int how, sigset_t *set, sigset_t *oldset); +int sigsuspend(sigset_t *sigmask); +int sigaction(int sig, struct sigaction *act, struct sigaction *oldact); + +#endif /* _SIGNAL_H */ diff --git a/linux-0.11-lab/4/linux/include/stdarg.h b/linux-0.11-lab/4/linux/include/stdarg.h new file mode 100644 index 0000000..fd79ec0 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/stdarg.h @@ -0,0 +1,28 @@ +#ifndef _STDARG_H +#define _STDARG_H + +typedef char *va_list; + +/* Amount of space required in an argument list for an arg of type TYPE. + TYPE may alternatively be an expression whose type is used. */ + +#define __va_rounded_size(TYPE) \ + (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) + +#ifndef __sparc__ +#define va_start(AP, LASTARG) \ + (AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG))) +#else +#define va_start(AP, LASTARG) \ + (__builtin_saveregs (), \ + AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG))) +#endif + +void va_end (va_list); /* Defined in gnulib */ +#define va_end(AP) + +#define va_arg(AP, TYPE) \ + (AP += __va_rounded_size (TYPE), \ + *((TYPE *) (AP - __va_rounded_size (TYPE)))) + +#endif /* _STDARG_H */ diff --git a/linux-0.11-lab/4/linux/include/stddef.h b/linux-0.11-lab/4/linux/include/stddef.h new file mode 100644 index 0000000..97f72ff --- /dev/null +++ b/linux-0.11-lab/4/linux/include/stddef.h @@ -0,0 +1,19 @@ +#ifndef _STDDEF_H +#define _STDDEF_H + +#ifndef _PTRDIFF_T +#define _PTRDIFF_T +typedef long ptrdiff_t; +#endif + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned long size_t; +#endif + +#undef NULL +#define NULL ((void *)0) + +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) + +#endif diff --git a/linux-0.11-lab/4/linux/include/string.h b/linux-0.11-lab/4/linux/include/string.h new file mode 100644 index 0000000..48b91e5 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/string.h @@ -0,0 +1,405 @@ +#ifndef _STRING_H_ +#define _STRING_H_ + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif + +extern char * strerror(int errno); + +/* + * This string-include defines all string functions as inline + * functions. Use gcc. It also assumes ds=es=data space, this should be + * normal. Most of the string-functions are rather heavily hand-optimized, + * see especially strtok,strstr,str[c]spn. They should work, but are not + * very easy to understand. Everything is done entirely within the register + * set, making the functions fast and clean. String instructions have been + * used through-out, making for "slightly" unclear code :-) + * + * (C) 1991 Linus Torvalds + */ + +extern inline char * strcpy(char * dest,const char *src) +{ +__asm__("cld\n" + "1:\tlodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b" + ::"S" (src),"D" (dest)); +return dest; +} + +extern inline char * strncpy(char * dest,const char *src,int count) +{ +__asm__("cld\n" + "1:\tdecl %2\n\t" + "js 2f\n\t" + "lodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n\t" + "rep\n\t" + "stosb\n" + "2:" + ::"S" (src),"D" (dest),"c" (count)); +return dest; +} + +extern inline char * strcat(char * dest,const char * src) +{ +__asm__("cld\n\t" + "repne\n\t" + "scasb\n\t" + "decl %1\n" + "1:\tlodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b" + ::"S" (src),"D" (dest),"a" (0),"c" (0xffffffff)); +return dest; +} + +extern inline char * strncat(char * dest,const char * src,int count) +{ +__asm__("cld\n\t" + "repne\n\t" + "scasb\n\t" + "decl %1\n\t" + "movl %4,%3\n" + "1:\tdecl %3\n\t" + "js 2f\n\t" + "lodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n" + "2:\txorl %2,%2\n\t" + "stosb" + ::"S" (src),"D" (dest),"a" (0),"c" (0xffffffff),"g" (count) + ); +return dest; +} + +extern inline int strcmp(const char * cs,const char * ct) +{ +register int __res __asm__("ax"); +__asm__("cld\n" + "1:\tlodsb\n\t" + "scasb\n\t" + "jne 2f\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n\t" + "xorl %%eax,%%eax\n\t" + "jmp 3f\n" + "2:\tmovl $1,%%eax\n\t" + "jl 3f\n\t" + "negl %%eax\n" + "3:" + :"=a" (__res):"D" (cs),"S" (ct)); +return __res; +} + +extern inline int strncmp(const char * cs,const char * ct,int count) +{ +register int __res __asm__("ax"); +__asm__("cld\n" + "1:\tdecl %3\n\t" + "js 2f\n\t" + "lodsb\n\t" + "scasb\n\t" + "jne 3f\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n" + "2:\txorl %%eax,%%eax\n\t" + "jmp 4f\n" + "3:\tmovl $1,%%eax\n\t" + "jl 4f\n\t" + "negl %%eax\n" + "4:" + :"=a" (__res):"D" (cs),"S" (ct),"c" (count)); +return __res; +} + +extern inline char * strchr(const char * s,char c) +{ +register char * __res __asm__("ax"); +__asm__("cld\n\t" + "movb %%al,%%ah\n" + "1:\tlodsb\n\t" + "cmpb %%ah,%%al\n\t" + "je 2f\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n\t" + "movl $1,%1\n" + "2:\tmovl %1,%0\n\t" + "decl %0" + :"=a" (__res):"S" (s),"0" (c)); +return __res; +} + +extern inline char * strrchr(const char * s,char c) +{ +register char * __res __asm__("dx"); +__asm__("cld\n\t" + "movb %%al,%%ah\n" + "1:\tlodsb\n\t" + "cmpb %%ah,%%al\n\t" + "jne 2f\n\t" + "movl %%esi,%0\n\t" + "decl %0\n" + "2:\ttestb %%al,%%al\n\t" + "jne 1b" + :"=d" (__res):"0" (0),"S" (s),"a" (c)); +return __res; +} + +extern inline int strspn(const char * cs, const char * ct) +{ +register char * __res __asm__("si"); +__asm__("cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "movl %%ecx,%%edx\n" + "1:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 2f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "je 1b\n" + "2:\tdecl %0" + :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) + ); +return __res-cs; +} + +extern inline int strcspn(const char * cs, const char * ct) +{ +register char * __res __asm__("si"); +__asm__("cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "movl %%ecx,%%edx\n" + "1:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 2f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "jne 1b\n" + "2:\tdecl %0" + :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) + ); +return __res-cs; +} + +extern inline char * strpbrk(const char * cs,const char * ct) +{ +register char * __res __asm__("si"); +__asm__("cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "movl %%ecx,%%edx\n" + "1:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 2f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "jne 1b\n\t" + "decl %0\n\t" + "jmp 3f\n" + "2:\txorl %0,%0\n" + "3:" + :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) + ); +return __res; +} + +extern inline char * strstr(const char * cs,const char * ct) +{ +register char * __res __asm__("ax"); +__asm__("cld\n\t" \ + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */ + "movl %%ecx,%%edx\n" + "1:\tmovl %4,%%edi\n\t" + "movl %%esi,%%eax\n\t" + "movl %%edx,%%ecx\n\t" + "repe\n\t" + "cmpsb\n\t" + "je 2f\n\t" /* also works for empty string, see above */ + "xchgl %%eax,%%esi\n\t" + "incl %%esi\n\t" + "cmpb $0,-1(%%eax)\n\t" + "jne 1b\n\t" + "xorl %%eax,%%eax\n\t" + "2:" + :"=a" (__res):"0" (0),"c" (0xffffffff),"S" (cs),"g" (ct) + ); +return __res; +} + +extern inline int strlen(const char * s) +{ +register int __res ; +__asm__("cld\n\t" + "repne\n\t" + "scasb\n\t" + "notl %0\n\t" + "decl %0" + :"=c" (__res):"D" (s),"a" (0),"0" (0xffffffff)); +return __res; +} + +extern char * ___strtok; + +extern inline char * strtok(char * s,const char * ct) +{ +register char * __res __asm__("si"); +__asm__("testl %1,%1\n\t" + "jne 1f\n\t" + "testl %0,%0\n\t" + "je 8f\n\t" + "movl %0,%1\n" + "1:\txorl %0,%0\n\t" + "movl $-1,%%ecx\n\t" + "xorl %%eax,%%eax\n\t" + "cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "je 7f\n\t" /* empty delimeter-string */ + "movl %%ecx,%%edx\n" + "2:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 7f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "je 2b\n\t" + "decl %1\n\t" + "cmpb $0,(%1)\n\t" + "je 7f\n\t" + "movl %1,%0\n" + "3:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 5f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "jne 3b\n\t" + "decl %1\n\t" + "cmpb $0,(%1)\n\t" + "je 5f\n\t" + "movb $0,(%1)\n\t" + "incl %1\n\t" + "jmp 6f\n" + "5:\txorl %1,%1\n" + "6:\tcmpb $0,(%0)\n\t" + "jne 7f\n\t" + "xorl %0,%0\n" + "7:\ttestl %0,%0\n\t" + "jne 8f\n\t" + "movl %0,%1\n" + "8:" + :"=b" (__res),"=S" (___strtok) + :"0" (___strtok),"1" (s),"g" (ct) + ); +return __res; +} + +extern inline void * memcpy(void * dest,const void * src, int n) +{ +__asm__("cld\n\t" + "rep\n\t" + "movsb" + ::"c" (n),"S" (src),"D" (dest) + ); +return dest; +} + +extern inline void * memmove(void * dest,const void * src, int n) +{ +if (dest + +struct stat { + dev_t st_dev; + ino_t st_ino; + umode_t st_mode; + nlink_t st_nlink; + uid_t st_uid; + gid_t st_gid; + dev_t st_rdev; + off_t st_size; + time_t st_atime; + time_t st_mtime; + time_t st_ctime; +}; +struct linux_dirent { + long d_ino; + off_t d_off; + unsigned short d_reclen; + char d_name[14]; +}; +#define S_IFMT 00170000 +#define S_IFLNK 0120000 +#define S_IFREG 0100000 +#define S_IFBLK 0060000 +#define S_IFDIR 0040000 +#define S_IFCHR 0020000 +#define S_IFIFO 0010000 +#define S_ISUID 0004000 +#define S_ISGID 0002000 +#define S_ISVTX 0001000 + +#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) + +#define S_IRWXU 00700 +#define S_IRUSR 00400 +#define S_IWUSR 00200 +#define S_IXUSR 00100 + +#define S_IRWXG 00070 +#define S_IRGRP 00040 +#define S_IWGRP 00020 +#define S_IXGRP 00010 + +#define S_IRWXO 00007 +#define S_IROTH 00004 +#define S_IWOTH 00002 +#define S_IXOTH 00001 + +extern int chmod(const char *_path, mode_t mode); +extern int fstat(int fildes, struct stat *stat_buf); +extern int mkdir(const char *_path, mode_t mode); +extern int mkfifo(const char *_path, mode_t mode); +extern int stat(const char *filename, struct stat *stat_buf); +extern mode_t umask(mode_t mask); + +#endif diff --git a/linux-0.11-lab/4/linux/include/sys/times.h b/linux-0.11-lab/4/linux/include/sys/times.h new file mode 100644 index 0000000..68d5bfb --- /dev/null +++ b/linux-0.11-lab/4/linux/include/sys/times.h @@ -0,0 +1,15 @@ +#ifndef _TIMES_H +#define _TIMES_H + +#include + +struct tms { + time_t tms_utime; + time_t tms_stime; + time_t tms_cutime; + time_t tms_cstime; +}; + +extern time_t times(struct tms * tp); + +#endif diff --git a/linux-0.11-lab/4/linux/include/sys/types.h b/linux-0.11-lab/4/linux/include/sys/types.h new file mode 100644 index 0000000..557aa31 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/sys/types.h @@ -0,0 +1,46 @@ +#ifndef _SYS_TYPES_H +#define _SYS_TYPES_H + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif + +#ifndef _TIME_T +#define _TIME_T +typedef long time_t; +#endif + +#ifndef _PTRDIFF_T +#define _PTRDIFF_T +typedef long ptrdiff_t; +#endif + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +typedef int pid_t; +typedef unsigned short uid_t; +typedef unsigned char gid_t; +typedef unsigned short dev_t; +typedef unsigned short ino_t; +typedef unsigned short mode_t; +typedef unsigned short umode_t; +typedef unsigned char nlink_t; +typedef int daddr_t; +typedef long off_t; +typedef unsigned char u_char; +typedef unsigned short ushort; + +typedef struct { int quot,rem; } div_t; +typedef struct { long quot,rem; } ldiv_t; + +struct ustat { + daddr_t f_tfree; + ino_t f_tinode; + char f_fname[6]; + char f_fpack[6]; +}; + +#endif diff --git a/linux-0.11-lab/4/linux/include/sys/utsname.h b/linux-0.11-lab/4/linux/include/sys/utsname.h new file mode 100644 index 0000000..0a1c5a0 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/sys/utsname.h @@ -0,0 +1,16 @@ +#ifndef _SYS_UTSNAME_H +#define _SYS_UTSNAME_H + +#include + +struct utsname { + char sysname[9]; + char nodename[9]; + char release[9]; + char version[9]; + char machine[9]; +}; + +extern int uname(struct utsname * utsbuf); + +#endif diff --git a/linux-0.11-lab/4/linux/include/sys/wait.h b/linux-0.11-lab/4/linux/include/sys/wait.h new file mode 100644 index 0000000..53190c2 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/sys/wait.h @@ -0,0 +1,23 @@ +#ifndef _SYS_WAIT_H +#define _SYS_WAIT_H + +#include + +#define _LOW(v) ( (v) & 0377) +#define _HIGH(v) ( ((v) >> 8) & 0377) + +/* options for waitpid, WUNTRACED not supported */ +#define WNOHANG 1 +#define WUNTRACED 2 + +#define WIFEXITED(s) (!((s)&0xFF) +#define WIFSTOPPED(s) (((s)&0xFF)==0x7F) +#define WEXITSTATUS(s) (((s)>>8)&0xFF) +#define WTERMSIG(s) ((s)&0x7F) +#define WSTOPSIG(s) (((s)>>8)&0xFF) +#define WIFSIGNALED(s) (((unsigned int)(s)-1 & 0xFFFF) < 0xFF) + +pid_t wait(int *stat_loc); +pid_t waitpid(pid_t pid, int *stat_loc, int options); + +#endif diff --git a/linux-0.11-lab/4/linux/include/termios.h b/linux-0.11-lab/4/linux/include/termios.h new file mode 100644 index 0000000..2b7b913 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/termios.h @@ -0,0 +1,228 @@ +#ifndef _TERMIOS_H +#define _TERMIOS_H + +#define TTY_BUF_SIZE 1024 + +/* 0x54 is just a magic number to make these relatively uniqe ('T') */ + +#define TCGETS 0x5401 +#define TCSETS 0x5402 +#define TCSETSW 0x5403 +#define TCSETSF 0x5404 +#define TCGETA 0x5405 +#define TCSETA 0x5406 +#define TCSETAW 0x5407 +#define TCSETAF 0x5408 +#define TCSBRK 0x5409 +#define TCXONC 0x540A +#define TCFLSH 0x540B +#define TIOCEXCL 0x540C +#define TIOCNXCL 0x540D +#define TIOCSCTTY 0x540E +#define TIOCGPGRP 0x540F +#define TIOCSPGRP 0x5410 +#define TIOCOUTQ 0x5411 +#define TIOCSTI 0x5412 +#define TIOCGWINSZ 0x5413 +#define TIOCSWINSZ 0x5414 +#define TIOCMGET 0x5415 +#define TIOCMBIS 0x5416 +#define TIOCMBIC 0x5417 +#define TIOCMSET 0x5418 +#define TIOCGSOFTCAR 0x5419 +#define TIOCSSOFTCAR 0x541A +#define TIOCINQ 0x541B + +struct winsize { + unsigned short ws_row; + unsigned short ws_col; + unsigned short ws_xpixel; + unsigned short ws_ypixel; +}; + +#define NCC 8 +struct termio { + unsigned short c_iflag; /* input mode flags */ + unsigned short c_oflag; /* output mode flags */ + unsigned short c_cflag; /* control mode flags */ + unsigned short c_lflag; /* local mode flags */ + unsigned char c_line; /* line discipline */ + unsigned char c_cc[NCC]; /* control characters */ +}; + +#define NCCS 17 +struct termios { + unsigned long c_iflag; /* input mode flags */ + unsigned long c_oflag; /* output mode flags */ + unsigned long c_cflag; /* control mode flags */ + unsigned long c_lflag; /* local mode flags */ + unsigned char c_line; /* line discipline */ + unsigned char c_cc[NCCS]; /* control characters */ +}; + +/* c_cc characters */ +#define VINTR 0 +#define VQUIT 1 +#define VERASE 2 +#define VKILL 3 +#define VEOF 4 +#define VTIME 5 +#define VMIN 6 +#define VSWTC 7 +#define VSTART 8 +#define VSTOP 9 +#define VSUSP 10 +#define VEOL 11 +#define VREPRINT 12 +#define VDISCARD 13 +#define VWERASE 14 +#define VLNEXT 15 +#define VEOL2 16 + +/* c_iflag bits */ +#define IGNBRK 0000001 +#define BRKINT 0000002 +#define IGNPAR 0000004 +#define PARMRK 0000010 +#define INPCK 0000020 +#define ISTRIP 0000040 +#define INLCR 0000100 +#define IGNCR 0000200 +#define ICRNL 0000400 +#define IUCLC 0001000 +#define IXON 0002000 +#define IXANY 0004000 +#define IXOFF 0010000 +#define IMAXBEL 0020000 + +/* c_oflag bits */ +#define OPOST 0000001 +#define OLCUC 0000002 +#define ONLCR 0000004 +#define OCRNL 0000010 +#define ONOCR 0000020 +#define ONLRET 0000040 +#define OFILL 0000100 +#define OFDEL 0000200 +#define NLDLY 0000400 +#define NL0 0000000 +#define NL1 0000400 +#define CRDLY 0003000 +#define CR0 0000000 +#define CR1 0001000 +#define CR2 0002000 +#define CR3 0003000 +#define TABDLY 0014000 +#define TAB0 0000000 +#define TAB1 0004000 +#define TAB2 0010000 +#define TAB3 0014000 +#define XTABS 0014000 +#define BSDLY 0020000 +#define BS0 0000000 +#define BS1 0020000 +#define VTDLY 0040000 +#define VT0 0000000 +#define VT1 0040000 +#define FFDLY 0040000 +#define FF0 0000000 +#define FF1 0040000 + +/* c_cflag bit meaning */ +#define CBAUD 0000017 +#define B0 0000000 /* hang up */ +#define B50 0000001 +#define B75 0000002 +#define B110 0000003 +#define B134 0000004 +#define B150 0000005 +#define B200 0000006 +#define B300 0000007 +#define B600 0000010 +#define B1200 0000011 +#define B1800 0000012 +#define B2400 0000013 +#define B4800 0000014 +#define B9600 0000015 +#define B19200 0000016 +#define B38400 0000017 +#define EXTA B19200 +#define EXTB B38400 +#define CSIZE 0000060 +#define CS5 0000000 +#define CS6 0000020 +#define CS7 0000040 +#define CS8 0000060 +#define CSTOPB 0000100 +#define CREAD 0000200 +#define CPARENB 0000400 +#define CPARODD 0001000 +#define HUPCL 0002000 +#define CLOCAL 0004000 +#define CIBAUD 03600000 /* input baud rate (not used) */ +#define CRTSCTS 020000000000 /* flow control */ + +#define PARENB CPARENB +#define PARODD CPARODD + +/* c_lflag bits */ +#define ISIG 0000001 +#define ICANON 0000002 +#define XCASE 0000004 +#define ECHO 0000010 +#define ECHOE 0000020 +#define ECHOK 0000040 +#define ECHONL 0000100 +#define NOFLSH 0000200 +#define TOSTOP 0000400 +#define ECHOCTL 0001000 +#define ECHOPRT 0002000 +#define ECHOKE 0004000 +#define FLUSHO 0010000 +#define PENDIN 0040000 +#define IEXTEN 0100000 + +/* modem lines */ +#define TIOCM_LE 0x001 +#define TIOCM_DTR 0x002 +#define TIOCM_RTS 0x004 +#define TIOCM_ST 0x008 +#define TIOCM_SR 0x010 +#define TIOCM_CTS 0x020 +#define TIOCM_CAR 0x040 +#define TIOCM_RNG 0x080 +#define TIOCM_DSR 0x100 +#define TIOCM_CD TIOCM_CAR +#define TIOCM_RI TIOCM_RNG + +/* tcflow() and TCXONC use these */ +#define TCOOFF 0 +#define TCOON 1 +#define TCIOFF 2 +#define TCION 3 + +/* tcflush() and TCFLSH use these */ +#define TCIFLUSH 0 +#define TCOFLUSH 1 +#define TCIOFLUSH 2 + +/* tcsetattr uses these */ +#define TCSANOW 0 +#define TCSADRAIN 1 +#define TCSAFLUSH 2 + +typedef int speed_t; + +extern speed_t cfgetispeed(struct termios *termios_p); +extern speed_t cfgetospeed(struct termios *termios_p); +extern int cfsetispeed(struct termios *termios_p, speed_t speed); +extern int cfsetospeed(struct termios *termios_p, speed_t speed); +extern int tcdrain(int fildes); +extern int tcflow(int fildes, int action); +extern int tcflush(int fildes, int queue_selector); +extern int tcgetattr(int fildes, struct termios *termios_p); +extern int tcsendbreak(int fildes, int duration); +extern int tcsetattr(int fildes, int optional_actions, + struct termios *termios_p); + +#endif diff --git a/linux-0.11-lab/4/linux/include/time.h b/linux-0.11-lab/4/linux/include/time.h new file mode 100644 index 0000000..d0a765d --- /dev/null +++ b/linux-0.11-lab/4/linux/include/time.h @@ -0,0 +1,42 @@ +#ifndef _TIME_H +#define _TIME_H + +#ifndef _TIME_T +#define _TIME_T +typedef long time_t; +#endif + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif + +#define CLOCKS_PER_SEC 100 + +typedef long clock_t; + +struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; +}; + +clock_t clock(void); +time_t time(time_t * tp); +double difftime(time_t time2, time_t time1); +time_t mktime(struct tm * tp); + +char * asctime(const struct tm * tp); +char * ctime(const time_t * tp); +struct tm * gmtime(const time_t *tp); +struct tm *localtime(const time_t * tp); +size_t strftime(char * s, size_t smax, const char * fmt, const struct tm * tp); +void tzset(void); + +#endif diff --git a/linux-0.11-lab/4/linux/include/unistd.h b/linux-0.11-lab/4/linux/include/unistd.h new file mode 100644 index 0000000..3f0fa89 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/unistd.h @@ -0,0 +1,277 @@ +#ifndef _UNISTD_H +#define _UNISTD_H + +/* ok, this may be a joke, but I'm working on it */ +#define _POSIX_VERSION 198808L + +#define _POSIX_CHOWN_RESTRICTED /* only root can do a chown (I think..) */ +#define _POSIX_NO_TRUNC /* no pathname truncation (but see in kernel) */ +#define _POSIX_VDISABLE '\0' /* character to disable things like ^C */ +/*#define _POSIX_SAVED_IDS */ /* we'll get to this yet */ +/*#define _POSIX_JOB_CONTROL */ /* we aren't there quite yet. Soon hopefully */ + +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#define STDERR_FILENO 2 + +#ifndef NULL +#define NULL ((void *)0) +#endif + +/* access */ +#define F_OK 0 +#define X_OK 1 +#define W_OK 2 +#define R_OK 4 + +/* lseek */ +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + +/* _SC stands for System Configuration. We don't use them much */ +#define _SC_ARG_MAX 1 +#define _SC_CHILD_MAX 2 +#define _SC_CLOCKS_PER_SEC 3 +#define _SC_NGROUPS_MAX 4 +#define _SC_OPEN_MAX 5 +#define _SC_JOB_CONTROL 6 +#define _SC_SAVED_IDS 7 +#define _SC_VERSION 8 + +/* more (possibly) configurable things - now pathnames */ +#define _PC_LINK_MAX 1 +#define _PC_MAX_CANON 2 +#define _PC_MAX_INPUT 3 +#define _PC_NAME_MAX 4 +#define _PC_PATH_MAX 5 +#define _PC_PIPE_BUF 6 +#define _PC_NO_TRUNC 7 +#define _PC_VDISABLE 8 +#define _PC_CHOWN_RESTRICTED 9 + +#include +#include +#include +#include + +#ifdef __LIBRARY__ + +#define __NR_setup 0 /* used only by init, to get system going */ +#define __NR_exit 1 +#define __NR_fork 2 +#define __NR_read 3 +#define __NR_write 4 +#define __NR_open 5 +#define __NR_close 6 +#define __NR_waitpid 7 +#define __NR_creat 8 +#define __NR_link 9 +#define __NR_unlink 10 +#define __NR_execve 11 +#define __NR_chdir 12 +#define __NR_time 13 +#define __NR_mknod 14 +#define __NR_chmod 15 +#define __NR_chown 16 +#define __NR_break 17 +#define __NR_stat 18 +#define __NR_lseek 19 +#define __NR_getpid 20 +#define __NR_mount 21 +#define __NR_umount 22 +#define __NR_setuid 23 +#define __NR_getuid 24 +#define __NR_stime 25 +#define __NR_ptrace 26 +#define __NR_alarm 27 +#define __NR_fstat 28 +#define __NR_pause 29 +#define __NR_utime 30 +#define __NR_stty 31 +#define __NR_gtty 32 +#define __NR_access 33 +#define __NR_nice 34 +#define __NR_ftime 35 +#define __NR_sync 36 +#define __NR_kill 37 +#define __NR_rename 38 +#define __NR_mkdir 39 +#define __NR_rmdir 40 +#define __NR_dup 41 +#define __NR_pipe 42 +#define __NR_times 43 +#define __NR_prof 44 +#define __NR_brk 45 +#define __NR_setgid 46 +#define __NR_getgid 47 +#define __NR_signal 48 +#define __NR_geteuid 49 +#define __NR_getegid 50 +#define __NR_acct 51 +#define __NR_phys 52 +#define __NR_lock 53 +#define __NR_ioctl 54 +#define __NR_fcntl 55 +#define __NR_mpx 56 +#define __NR_setpgid 57 +#define __NR_ulimit 58 +#define __NR_uname 59 +#define __NR_umask 60 +#define __NR_chroot 61 +#define __NR_ustat 62 +#define __NR_dup2 63 +#define __NR_getppid 64 +#define __NR_getpgrp 65 +#define __NR_setsid 66 +#define __NR_sigaction 67 +#define __NR_sgetmask 68 +#define __NR_ssetmask 69 +#define __NR_setreuid 70 +#define __NR_setregid 71 +#define __NR_sigsuspend 72 +#define __NR_sigpending 73 +#define __NR_sethostname 74 +#define __NR_setrlimit 75 +#define __NR_getrlimit 76 +#define __NR_getrusage 77 +#define __NR_gettimeofday 78 +#define __NR_settimeofday 79 +#define __NR_getgroups 80 +#define __NR_setgroups 81 +#define __NR_select 82 +#define __NR_symlink 83 +#define __NR_lstat 84 +#define __NR_readlink 85 +#define __NR_uselib 86 +#define __NR_execve2 87 +#define __NR_getdents 88 +#define __NR_pipe2 89 +#define __NR_sleep 90 +#define __NR_getcwd 91 +#define __NR_mmap 92 +#define __NR_munmap 93 +#define __NR_clone 94 +#define _syscall0(type,name) \ +type name(void) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name)); \ +if (__res >= 0) \ + return (type) __res; \ +errno = -__res; \ +return -1; \ +} + +#define _syscall1(type,name,atype,a) \ +type name(atype a) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(a))); \ +if (__res >= 0) \ + return (type) __res; \ +errno = -__res; \ +return -1; \ +} + +#define _syscall2(type,name,atype,a,btype,b) \ +type name(atype a,btype b) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(a)),"c" ((long)(b))); \ +if (__res >= 0) \ + return (type) __res; \ +errno = -__res; \ +return -1; \ +} + +#define _syscall3(type,name,atype,a,btype,b,ctype,c) \ +type name(atype a,btype b,ctype c) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(a)),"c" ((long)(b)),"d" ((long)(c))); \ +if (__res>=0) \ + return (type) __res; \ +errno=-__res; \ +return -1; \ +} + +#endif /* __LIBRARY__ */ + +extern int errno; + +int access(const char * filename, mode_t mode); +int acct(const char * filename); +int alarm(int sec); +int brk(void * end_data_segment); +void * sbrk(ptrdiff_t increment); +int chdir(const char * filename); +int chmod(const char * filename, mode_t mode); +int chown(const char * filename, uid_t owner, gid_t group); +int chroot(const char * filename); +int close(int fildes); +int creat(const char * filename, mode_t mode); +int dup(int fildes); +int execve(const char * filename, char ** argv, char ** envp); +int execv(const char * pathname, char ** argv); +int execvp(const char * file, char ** argv); +int execl(const char * pathname, char * arg0, ...); +int execlp(const char * file, char * arg0, ...); +int execle(const char * pathname, char * arg0, ...); +volatile void exit(int status); +volatile void _exit(int status); +int fcntl(int fildes, int cmd, ...); +int fork(void); +int getpid(void); +int getuid(void); +int geteuid(void); +int getgid(void); +int getegid(void); +int ioctl(int fildes, int cmd, ...); +int kill(pid_t pid, int signal); +int link(const char * filename1, const char * filename2); +int lseek(int fildes, off_t offset, int origin); +int mknod(const char * filename, mode_t mode, dev_t dev); +int mount(const char * specialfile, const char * dir, int rwflag); +int nice(int val); +int open(const char * filename, int flag, ...); +int pause(void); +int pipe(int * fildes); +int read(int fildes, char * buf, off_t count); +int setpgrp(void); +int setpgid(pid_t pid,pid_t pgid); +int setuid(uid_t uid); +int setgid(gid_t gid); +void (*signal(int sig, void (*fn)(int)))(int); +int stat(const char * filename, struct stat * stat_buf); +int fstat(int fildes, struct stat * stat_buf); +int stime(time_t * tptr); +int sync(void); +time_t time(time_t * tloc); +time_t times(struct tms * tbuf); +int ulimit(int cmd, long limit); +mode_t umask(mode_t mask); +int umount(const char * specialfile); +int uname(struct utsname * name); +int unlink(const char * filename); +int ustat(dev_t dev, struct ustat * ubuf); +int utime(const char * filename, struct utimbuf * times); +pid_t waitpid(pid_t pid,int * wait_stat,int options); +pid_t wait(int * wait_stat); +int write(int fildes, const char * buf, off_t count); +int dup2(int oldfd, int newfd); +int getppid(void); +pid_t getpgrp(void); +pid_t setsid(void); + +#define __always_inline inline __attribute__((always_inline)) + +#endif diff --git a/linux-0.11-lab/4/linux/include/utime.h b/linux-0.11-lab/4/linux/include/utime.h new file mode 100644 index 0000000..83f07c7 --- /dev/null +++ b/linux-0.11-lab/4/linux/include/utime.h @@ -0,0 +1,13 @@ +#ifndef _UTIME_H +#define _UTIME_H + +#include /* I know - shouldn't do this, but .. */ + +struct utimbuf { + time_t actime; + time_t modtime; +}; + +extern int utime(const char *filename, struct utimbuf *times); + +#endif diff --git a/linux-0.11-lab/4/linux/init/main.c b/linux-0.11-lab/4/linux/init/main.c new file mode 100644 index 0000000..bd86a68 --- /dev/null +++ b/linux-0.11-lab/4/linux/init/main.c @@ -0,0 +1,216 @@ +/* + * linux/init/main.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include +#include + +/* + * we need this inline - forking from kernel space will result + * in NO COPY ON WRITE (!!!), until an execve is executed. This + * is no problem, but for the stack. This is handled by not letting + * main() use the stack at all after fork(). Thus, no function + * calls - which means inline code for fork too, as otherwise we + * would use the stack upon exit from 'fork()'. + * + * Actually only pause and fork are needed inline, so that there + * won't be any messing with the stack from main(), but we define + * some others too. + */ + +__always_inline _syscall0(int,fork) +__always_inline _syscall0(int,pause) +__always_inline _syscall1(int,setup,void *,BIOS) +__always_inline _syscall0(int,sync) + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +static char printbuf[1024]; + +extern int vsprintf(); +extern void init(void); +extern void blk_dev_init(void); +extern void chr_dev_init(void); +extern void hd_init(void); +extern void floppy_init(void); +extern void mem_init(long start, long end); +extern long rd_init(long mem_start, int length); +extern long kernel_mktime(struct tm * tm); +extern long startup_time; + +/* + * This is set up by the setup-routine at boot-time + */ +#define EXT_MEM_K (*(unsigned short *)0x90002) +#define DRIVE_INFO (*(struct drive_info *)0x90080) +#define ORIG_ROOT_DEV (*(unsigned short *)0x901FC) + +/* + * Yeah, yeah, it's ugly, but I cannot find how to do this correctly + * and this seems to work. I anybody has more info on the real-time + * clock I'd be interested. Most of this was trial and error, and some + * bios-listing reading. Urghh. + */ + +#define CMOS_READ(addr) ({ \ +outb_p(0x80|addr,0x70); \ +inb_p(0x71); \ +}) + +#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10) + +static void time_init(void) +{ + struct tm time; + + do { + time.tm_sec = CMOS_READ(0); + time.tm_min = CMOS_READ(2); + time.tm_hour = CMOS_READ(4); + time.tm_mday = CMOS_READ(7); + time.tm_mon = CMOS_READ(8); + time.tm_year = CMOS_READ(9); + } while (time.tm_sec != CMOS_READ(0)); + BCD_TO_BIN(time.tm_sec); + BCD_TO_BIN(time.tm_min); + BCD_TO_BIN(time.tm_hour); + BCD_TO_BIN(time.tm_mday); + BCD_TO_BIN(time.tm_mon); + BCD_TO_BIN(time.tm_year); + time.tm_mon--; + startup_time = kernel_mktime(&time); +} + +static long memory_end = 0; +static long buffer_memory_end = 0; +static long main_memory_start = 0; + +struct drive_info { char dummy[32]; } drive_info; + +void main(void) /* This really IS void, no error here. */ +{ /* The startup routine assumes (well, ...) this */ +/* + * Interrupts are still disabled. Do necessary setups, then + * enable them + */ + ROOT_DEV = ORIG_ROOT_DEV; + __asm__ volatile ("cld"); /* by wyj */ + drive_info = DRIVE_INFO; + memory_end = (1<<20) + (EXT_MEM_K<<10); + memory_end &= 0xfffff000; + if (memory_end > 16*1024*1024) + memory_end = 16*1024*1024; + if (memory_end > 12*1024*1024) + buffer_memory_end = 4*1024*1024; + else if (memory_end > 6*1024*1024) + buffer_memory_end = 2*1024*1024; + else + buffer_memory_end = 1*1024*1024; + main_memory_start = buffer_memory_end; +#ifdef RAMDISK + main_memory_start += rd_init(main_memory_start, RAMDISK*1024); +#endif + mem_init(main_memory_start,memory_end); + trap_init(); + blk_dev_init(); + chr_dev_init(); + tty_init(); + time_init(); + sched_init(); + buffer_init(buffer_memory_end); + hd_init(); + floppy_init(); + sti(); + move_to_user_mode(); + if (!fork()) { /* we count on this going ok */ + init(); + } +/* + * NOTE!! For any other task 'pause()' would mean we have to get a + * signal to awaken, but task0 is the sole exception (see 'schedule()') + * as task 0 gets activated at every idle moment (when no other tasks + * can run). For task0 'pause()' just means we go check if some other + * task can run, and if not we return here. + */ + for(;;) pause(); +} + +static int printf(const char *fmt, ...) +{ + va_list args; + int i; + + va_start(args, fmt); + write(1,printbuf,i=vsprintf(printbuf, fmt, args)); + va_end(args); + return i; +} + +static char * argv_rc[] = { "/bin/sh", NULL }; +static char * envp_rc[] = { "HOME=/", NULL, NULL }; + +static char * argv[] = { "-/bin/sh",NULL }; +static char * envp[] = { "HOME=/usr/root", NULL, NULL }; + +void init(void) +{ + int pid,i; + + setup((void *) &drive_info); + (void) open("/dev/tty0",O_RDWR,0); + (void) dup(0); + (void) dup(0); + printf("%d buffers = %d bytes buffer space\n\r",NR_BUFFERS, + NR_BUFFERS*BLOCK_SIZE); + printf("Free mem: %d bytes\n\r",memory_end-main_memory_start); + if (!(pid=fork())) { + close(0); + if (open("/etc/rc",O_RDONLY,0)) + _exit(1); + execve("/bin/sh",argv_rc,envp_rc); + _exit(2); + } + if (pid>0) + while (pid != wait(&i)) + /* nothing */; + while (1) { + if ((pid=fork())<0) { + printf("Fork failed in init\r\n"); + continue; + } + if (!pid) { + close(0);close(1);close(2); + setsid(); + (void) open("/dev/tty0",O_RDWR,0); + (void) dup(0); + (void) dup(0); + _exit(execve("/bin/sh",argv,envp)); + } + while (1) + if (pid == wait(&i)) + break; + printf("\n\rchild %d died with code %04x\n\r",pid,i); + sync(); + } + _exit(0); /* NOTE! _exit, not exit() */ +} + +void print_nr(int sid) +{ + if (sid > 86) + printk(" --syscall: sid=%d, pid=%d\n", sid, current->pid); +} diff --git a/linux-0.11-lab/4/linux/init/main.o b/linux-0.11-lab/4/linux/init/main.o new file mode 100644 index 0000000000000000000000000000000000000000..37c2c6518d1497dec84049138f6ef97bf0706625 GIT binary patch literal 12208 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 tdjzw@u&k@tOmaWT_CF*D75 tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + (cd chr_drv; make dep) + (cd blk_drv; make dep) + +### Dependencies: +exit.s exit.o : exit.c ../include/errno.h ../include/signal.h \ + ../include/sys/types.h ../include/sys/wait.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \ + ../include/linux/kernel.h ../include/linux/tty.h ../include/termios.h \ + ../include/asm/segment.h +fork.s fork.o : fork.c ../include/errno.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h ../include/asm/system.h +mktime.s mktime.o : mktime.c ../include/time.h +panic.s panic.o : panic.c ../include/linux/kernel.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h +printk.s printk.o : printk.c ../include/stdarg.h ../include/stddef.h \ + ../include/linux/kernel.h +sched.s sched.o : sched.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/linux/kernel.h ../include/linux/sys.h \ + ../include/linux/fdreg.h ../include/asm/system.h ../include/asm/io.h \ + ../include/asm/segment.h +signal.s signal.o : signal.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/linux/kernel.h ../include/asm/segment.h +sys.s sys.o : sys.c ../include/errno.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/tty.h \ + ../include/termios.h ../include/linux/kernel.h ../include/asm/segment.h \ + ../include/sys/times.h ../include/sys/utsname.h +traps.s traps.o : traps.c ../include/string.h ../include/linux/head.h \ + ../include/linux/sched.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/system.h ../include/asm/segment.h ../include/asm/io.h +vsprintf.s vsprintf.o : vsprintf.c ../include/stdarg.h ../include/string.h diff --git a/linux-0.11-lab/4/linux/kernel/asm.o b/linux-0.11-lab/4/linux/kernel/asm.o new file mode 100644 index 0000000000000000000000000000000000000000..a89ec75e6e7dea54ae5b8d9b94ba28158b48a77f GIT binary patch literal 1740 zcma)+O=uHQ5XWcRv}sSZ2!7VKN<_gLTB@F^9;`i75B*Zxid{F^*K{@67k4+Yil|sH zrv|)<7wbhmD2RBl?IjkWde90*5b+=$0#XkiyeY()eY^2xiRgpv|Nnb$W-{}d&9$S) z`xHe1e<@H4e+Zz*gMDtmZfJlym?EDGMTQ55PMti_THiEx4rWIp9YYK2@F4#&zm)${ zdN=d3q3K?@?aYKaK6ZL^#Z6j!Eo4c^qL61o9t*iIN>a0?YOGAXEIm;+mxxDna!+$#}~zPg>(|qFzDh#3ziNdZhm7_Gt$HGtt5$ zJb2(2L6$5XS6!9gLaHZMBo4WC>dM&)G@;K)yrt}^F9miX@AvkI_oDBSxC{Lei4UOf zm-sOHL5cg&k4j8uHzb}wuS$Fw{k+6C(HA7XgML}!hv?r*yy$rny5~3eqzG`)Jgcaa zE(!kRc@m2M7T_NN{u$t~^pB$a<^Z<^_)viR13VsJBf!@Kd@I0Ua+O&Yx70Y-8Aw() zvWCvYA?PfYNr0I$z%ZR|;8|u(Ciz8(@r %eax + xchgl %ebx,(%esp) # &function <-> %ebx + pushl %ecx + pushl %edx + pushl %edi + pushl %esi + pushl %ebp + push %ds + push %es + push %fs + pushl %eax # error code + lea 44(%esp),%eax # offset + pushl %eax + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + mov %ax,%fs + call *%ebx + addl $8,%esp + pop %fs + pop %es + pop %ds + popl %ebp + popl %esi + popl %edi + popl %edx + popl %ecx + popl %ebx + popl %eax + iret + +invalid_TSS: + pushl $do_invalid_TSS + jmp error_code + +segment_not_present: + pushl $do_segment_not_present + jmp error_code + +stack_segment: + pushl $do_stack_segment + jmp error_code + +general_protection: + pushl $do_general_protection + jmp error_code + diff --git a/linux-0.11-lab/4/linux/kernel/blk_drv/Makefile b/linux-0.11-lab/4/linux/kernel/blk_drv/Makefile new file mode 100644 index 0000000..1fb57f9 --- /dev/null +++ b/linux-0.11-lab/4/linux/kernel/blk_drv/Makefile @@ -0,0 +1,58 @@ +# +# Makefile for the FREAX-kernel block device drivers. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). +# + +AR =ar +AS =as +LD =ld +LDFLAGS =-s -x +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -finline-functions -nostdinc -fno-stack-protector -I../../include +CPP =gcc -E -nostdinc -I../../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< + +OBJS = ll_rw_blk.o floppy.o hd.o ramdisk.o + +blk_drv.a: $(OBJS) + $(AR) rcs blk_drv.a $(OBJS) + sync + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +floppy.s floppy.o : floppy.c ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/sys/types.h ../../include/linux/mm.h \ + ../../include/signal.h ../../include/linux/kernel.h \ + ../../include/linux/fdreg.h ../../include/asm/system.h \ + ../../include/asm/io.h ../../include/asm/segment.h blk.h +hd.s hd.o : hd.c ../../include/linux/config.h ../../include/linux/sched.h \ + ../../include/linux/head.h ../../include/linux/fs.h \ + ../../include/sys/types.h ../../include/linux/mm.h ../../include/signal.h \ + ../../include/linux/kernel.h ../../include/linux/hdreg.h \ + ../../include/asm/system.h ../../include/asm/io.h \ + ../../include/asm/segment.h blk.h +ll_rw_blk.s ll_rw_blk.o : ll_rw_blk.c ../../include/errno.h ../../include/linux/sched.h \ + ../../include/linux/head.h ../../include/linux/fs.h \ + ../../include/sys/types.h ../../include/linux/mm.h ../../include/signal.h \ + ../../include/linux/kernel.h ../../include/asm/system.h blk.h diff --git a/linux-0.11-lab/4/linux/kernel/blk_drv/blk.h b/linux-0.11-lab/4/linux/kernel/blk_drv/blk.h new file mode 100644 index 0000000..7a69b71 --- /dev/null +++ b/linux-0.11-lab/4/linux/kernel/blk_drv/blk.h @@ -0,0 +1,140 @@ +#ifndef _BLK_H +#define _BLK_H + +#define NR_BLK_DEV 7 +/* + * NR_REQUEST is the number of entries in the request-queue. + * NOTE that writes may use only the low 2/3 of these: reads + * take precedence. + * + * 32 seems to be a reasonable number: enough to get some benefit + * from the elevator-mechanism, but not so much as to lock a lot of + * buffers when they are in the queue. 64 seems to be too many (easily + * long pauses in reading when heavy writing/syncing is going on) + */ +#define NR_REQUEST 32 + +/* + * Ok, this is an expanded form so that we can use the same + * request for paging requests when that is implemented. In + * paging, 'bh' is NULL, and 'waiting' is used to wait for + * read/write completion. + */ +struct request { + int dev; /* -1 if no request */ + int cmd; /* READ or WRITE */ + int errors; + unsigned long sector; + unsigned long nr_sectors; + char * buffer; + struct task_struct * waiting; + struct buffer_head * bh; + struct request * next; +}; + +/* + * This is used in the elevator algorithm: Note that + * reads always go before writes. This is natural: reads + * are much more time-critical than writes. + */ +#define IN_ORDER(s1,s2) \ +((s1)->cmd<(s2)->cmd || (s1)->cmd==(s2)->cmd && \ +((s1)->dev < (s2)->dev || ((s1)->dev == (s2)->dev && \ +(s1)->sector < (s2)->sector))) + +struct blk_dev_struct { + void (*request_fn)(void); + struct request * current_request; +}; + +extern struct blk_dev_struct blk_dev[NR_BLK_DEV]; +extern struct request request[NR_REQUEST]; +extern struct task_struct * wait_for_request; + +#ifdef MAJOR_NR + +/* + * Add entries as needed. Currently the only block devices + * supported are hard-disks and floppies. + */ + +#if (MAJOR_NR == 1) +/* ram disk */ +#define DEVICE_NAME "ramdisk" +#define DEVICE_REQUEST do_rd_request +#define DEVICE_NR(device) ((device) & 7) +#define DEVICE_ON(device) +#define DEVICE_OFF(device) + +#elif (MAJOR_NR == 2) +/* floppy */ +#define DEVICE_NAME "floppy" +#define DEVICE_INTR do_floppy +#define DEVICE_REQUEST do_fd_request +#define DEVICE_NR(device) ((device) & 3) +#define DEVICE_ON(device) floppy_on(DEVICE_NR(device)) +#define DEVICE_OFF(device) floppy_off(DEVICE_NR(device)) + +#elif (MAJOR_NR == 3) +/* harddisk */ +#define DEVICE_NAME "harddisk" +#define DEVICE_INTR do_hd +#define DEVICE_REQUEST do_hd_request +#define DEVICE_NR(device) (MINOR(device)/5) +#define DEVICE_ON(device) +#define DEVICE_OFF(device) + +#elif (MAJOR_NR > 3) +/* unknown blk device */ +#error "unknown blk device" + +#endif + +#define CURRENT (blk_dev[MAJOR_NR].current_request) +#define CURRENT_DEV DEVICE_NR(CURRENT->dev) + +#ifdef DEVICE_INTR +void (*DEVICE_INTR)(void) = NULL; +#endif +static void (DEVICE_REQUEST)(void); + +static inline void unlock_buffer(struct buffer_head * bh) +{ + if (!bh->b_lock) + printk(DEVICE_NAME ": free buffer being unlocked\n"); + bh->b_lock=0; + wake_up(&bh->b_wait); +} + +static inline void end_request(int uptodate) +{ + DEVICE_OFF(CURRENT->dev); + if (CURRENT->bh) { + CURRENT->bh->b_uptodate = uptodate; + unlock_buffer(CURRENT->bh); + } + if (!uptodate) { + printk(DEVICE_NAME " I/O error\n\r"); + printk("dev %04x, block %d\n\r",CURRENT->dev, + CURRENT->bh->b_blocknr); + } + wake_up(&CURRENT->waiting); + wake_up(&wait_for_request); + CURRENT->dev = -1; + CURRENT = CURRENT->next; +} + +#define INIT_REQUEST \ +repeat: \ + if (!CURRENT) \ + return; \ + if (MAJOR(CURRENT->dev) != MAJOR_NR) \ + panic(DEVICE_NAME ": request list destroyed"); \ + if (CURRENT->bh) { \ + if (!CURRENT->bh->b_lock) \ + panic(DEVICE_NAME ": block not locked"); \ + } + +#endif + +#endif diff --git a/linux-0.11-lab/4/linux/kernel/blk_drv/blk_drv.a b/linux-0.11-lab/4/linux/kernel/blk_drv/blk_drv.a new file mode 100644 index 0000000000000000000000000000000000000000..02751f123aa0c72fe90e820ca24599de825468be GIT binary patch literal 52212 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 +#include +#include +#include +#include +#include +#include + +#define MAJOR_NR 2 +#include "blk.h" + +static int recalibrate = 0; +static int reset = 0; +static int seek = 0; + +extern unsigned char current_DOR; + +#define immoutb_p(val,port) \ +__asm__("outb %0,%1\n\tjmp 1f\n1:\tjmp 1f\n1:"::"a" ((char) (val)),"i" (port)) + +#define TYPE(x) ((x)>>2) +#define DRIVE(x) ((x)&0x03) +/* + * Note that MAX_ERRORS=8 doesn't imply that we retry every bad read + * max 8 times - some types of errors increase the errorcount by 2, + * so we might actually retry only 5-6 times before giving up. + */ +#define MAX_ERRORS 8 + +/* + * globals used by 'result()' + */ +#define MAX_REPLIES 7 +static unsigned char reply_buffer[MAX_REPLIES]; +#define ST0 (reply_buffer[0]) +#define ST1 (reply_buffer[1]) +#define ST2 (reply_buffer[2]) +#define ST3 (reply_buffer[3]) + +/* + * This struct defines the different floppy types. Unlike minix + * linux doesn't have a "search for right type"-type, as the code + * for that is convoluted and weird. I've got enough problems with + * this driver as it is. + * + * The 'stretch' tells if the tracks need to be boubled for some + * types (ie 360kB diskette in 1.2MB drive etc). Others should + * be self-explanatory. + */ +static struct floppy_struct { + unsigned int size, sect, head, track, stretch; + unsigned char gap,rate,spec1; +} floppy_type[] = { + { 0, 0,0, 0,0,0x00,0x00,0x00 }, /* no testing */ + { 720, 9,2,40,0,0x2A,0x02,0xDF }, /* 360kB PC diskettes */ + { 2400,15,2,80,0,0x1B,0x00,0xDF }, /* 1.2 MB AT-diskettes */ + { 720, 9,2,40,1,0x2A,0x02,0xDF }, /* 360kB in 720kB drive */ + { 1440, 9,2,80,0,0x2A,0x02,0xDF }, /* 3.5" 720kB diskette */ + { 720, 9,2,40,1,0x23,0x01,0xDF }, /* 360kB in 1.2MB drive */ + { 1440, 9,2,80,0,0x23,0x01,0xDF }, /* 720kB in 1.2MB drive */ + { 2880,18,2,80,0,0x1B,0x00,0xCF }, /* 1.44MB diskette */ +}; +/* + * Rate is 0 for 500kb/s, 2 for 300kbps, 1 for 250kbps + * Spec1 is 0xSH, where S is stepping rate (F=1ms, E=2ms, D=3ms etc), + * H is head unload time (1=16ms, 2=32ms, etc) + * + * Spec2 is (HLD<<1 | ND), where HLD is head load time (1=2ms, 2=4 ms etc) + * and ND is set means no DMA. Hardcoded to 6 (HLD=6ms, use DMA). + */ + +extern void floppy_interrupt(void); +extern char tmp_floppy_area[1024]; + +/* + * These are global variables, as that's the easiest way to give + * information to interrupts. They are the data used for the current + * request. + */ +static int cur_spec1 = -1; +static int cur_rate = -1; +static struct floppy_struct * floppy = floppy_type; +static unsigned char current_drive = 0; +static unsigned char sector = 0; +static unsigned char head = 0; +static unsigned char track = 0; +static unsigned char seek_track = 0; +static unsigned char current_track = 255; +static unsigned char command = 0; +unsigned char selected = 0; +struct task_struct * wait_on_floppy_select = NULL; + +void floppy_deselect(unsigned int nr) +{ + if (nr != (current_DOR & 3)) + printk("floppy_deselect: drive not selected\n\r"); + selected = 0; + wake_up(&wait_on_floppy_select); +} + +/* + * floppy-change is never called from an interrupt, so we can relax a bit + * here, sleep etc. Note that floppy-on tries to set current_DOR to point + * to the desired drive, but it will probably not survive the sleep if + * several floppies are used at the same time: thus the loop. + */ +int floppy_change(unsigned int nr) +{ +repeat: + floppy_on(nr); + while ((current_DOR & 3) != nr && selected) + interruptible_sleep_on(&wait_on_floppy_select); + if ((current_DOR & 3) != nr) + goto repeat; + if (inb(FD_DIR) & 0x80) { + floppy_off(nr); + return 1; + } + floppy_off(nr); + return 0; +} + +#define copy_buffer(from,to) \ +__asm__("cld ; rep ; movsl" \ + ::"c" (BLOCK_SIZE/4),"S" ((long)(from)),"D" ((long)(to)) \ + ) + +static void setup_DMA(void) +{ + long addr = (long) CURRENT->buffer; + + cli(); + if (addr >= 0x100000) { + addr = (long) tmp_floppy_area; + if (command == FD_WRITE) + copy_buffer(CURRENT->buffer,tmp_floppy_area); + } +/* mask DMA 2 */ + immoutb_p(4|2,10); +/* output command byte. I don't know why, but everyone (minix, */ +/* sanches & canton) output this twice, first to 12 then to 11 */ + __asm__("outb %%al,$12\n\tjmp 1f\n1:\tjmp 1f\n1:\t" + "outb %%al,$11\n\tjmp 1f\n1:\tjmp 1f\n1:":: + "a" ((char) ((command == FD_READ)?DMA_READ:DMA_WRITE))); +/* 8 low bits of addr */ + immoutb_p(addr,4); + addr >>= 8; +/* bits 8-15 of addr */ + immoutb_p(addr,4); + addr >>= 8; +/* bits 16-19 of addr */ + immoutb_p(addr,0x81); +/* low 8 bits of count-1 (1024-1=0x3ff) */ + immoutb_p(0xff,5); +/* high 8 bits of count-1 */ + immoutb_p(3,5); +/* activate DMA 2 */ + immoutb_p(0|2,10); + sti(); +} + +static void output_byte(char byte) +{ + int counter; + unsigned char status; + + if (reset) + return; + for(counter = 0 ; counter < 10000 ; counter++) { + status = inb_p(FD_STATUS) & (STATUS_READY | STATUS_DIR); + if (status == STATUS_READY) { + outb(byte,FD_DATA); + return; + } + } + reset = 1; + printk("Unable to send byte to FDC\n\r"); +} + +static int result(void) +{ + int i = 0, counter, status; + + if (reset) + return -1; + for (counter = 0 ; counter < 10000 ; counter++) { + status = inb_p(FD_STATUS)&(STATUS_DIR|STATUS_READY|STATUS_BUSY); + if (status == STATUS_READY) + return i; + if (status == (STATUS_DIR|STATUS_READY|STATUS_BUSY)) { + if (i >= MAX_REPLIES) + break; + reply_buffer[i++] = inb_p(FD_DATA); + } + } + reset = 1; + printk("Getstatus times out\n\r"); + return -1; +} + +static void bad_flp_intr(void) +{ + CURRENT->errors++; + if (CURRENT->errors > MAX_ERRORS) { + floppy_deselect(current_drive); + end_request(0); + } + if (CURRENT->errors > MAX_ERRORS/2) + reset = 1; + else + recalibrate = 1; +} + +/* + * Ok, this interrupt is called after a DMA read/write has succeeded, + * so we check the results, and copy any buffers. + */ +static void rw_interrupt(void) +{ + if (result() != 7 || (ST0 & 0xf8) || (ST1 & 0xbf) || (ST2 & 0x73)) { + if (ST1 & 0x02) { + printk("Drive %d is write protected\n\r",current_drive); + floppy_deselect(current_drive); + end_request(0); + } else + bad_flp_intr(); + do_fd_request(); + return; + } + if (command == FD_READ && (unsigned long)(CURRENT->buffer) >= 0x100000) + copy_buffer(tmp_floppy_area,CURRENT->buffer); + floppy_deselect(current_drive); + end_request(1); + do_fd_request(); +} + +inline void setup_rw_floppy(void) +{ + setup_DMA(); + do_floppy = rw_interrupt; + output_byte(command); + output_byte(head<<2 | current_drive); + output_byte(track); + output_byte(head); + output_byte(sector); + output_byte(2); /* sector size = 512 */ + output_byte(floppy->sect); + output_byte(floppy->gap); + output_byte(0xFF); /* sector size (0xff when n!=0 ?) */ + if (reset) + do_fd_request(); +} + +/* + * This is the routine called after every seek (or recalibrate) interrupt + * from the floppy controller. Note that the "unexpected interrupt" routine + * also does a recalibrate, but doesn't come here. + */ +static void seek_interrupt(void) +{ +/* sense drive status */ + output_byte(FD_SENSEI); + if (result() != 2 || (ST0 & 0xF8) != 0x20 || ST1 != seek_track) { + bad_flp_intr(); + do_fd_request(); + return; + } + current_track = ST1; + setup_rw_floppy(); +} + +/* + * This routine is called when everything should be correctly set up + * for the transfer (ie floppy motor is on and the correct floppy is + * selected). + */ +static void transfer(void) +{ + if (cur_spec1 != floppy->spec1) { + cur_spec1 = floppy->spec1; + output_byte(FD_SPECIFY); + output_byte(cur_spec1); /* hut etc */ + output_byte(6); /* Head load time =6ms, DMA */ + } + if (cur_rate != floppy->rate) + outb_p(cur_rate = floppy->rate,FD_DCR); + if (reset) { + do_fd_request(); + return; + } + if (!seek) { + setup_rw_floppy(); + return; + } + do_floppy = seek_interrupt; + if (seek_track) { + output_byte(FD_SEEK); + output_byte(head<<2 | current_drive); + output_byte(seek_track); + } else { + output_byte(FD_RECALIBRATE); + output_byte(head<<2 | current_drive); + } + if (reset) + do_fd_request(); +} + +/* + * Special case - used after a unexpected interrupt (or reset) + */ +static void recal_interrupt(void) +{ + output_byte(FD_SENSEI); + if (result()!=2 || (ST0 & 0xE0) == 0x60) + reset = 1; + else + recalibrate = 0; + do_fd_request(); +} + +void unexpected_floppy_interrupt(void) +{ + output_byte(FD_SENSEI); + if (result()!=2 || (ST0 & 0xE0) == 0x60) + reset = 1; + else + recalibrate = 1; +} + +static void recalibrate_floppy(void) +{ + recalibrate = 0; + current_track = 0; + current_drive = 1; /* by wyj, ?? */ + do_floppy = recal_interrupt; + output_byte(FD_RECALIBRATE); + output_byte(head<<2 | current_drive); + if (reset) + do_fd_request(); +} + +static void reset_interrupt(void) +{ + output_byte(FD_SENSEI); + (void) result(); + output_byte(FD_SPECIFY); + output_byte(cur_spec1); /* hut etc */ + output_byte(6); /* Head load time =6ms, DMA */ + do_fd_request(); +} + +/* + * reset is done by pulling bit 2 of DOR low for a while. + */ +static void reset_floppy(void) +{ + int i; + + reset = 0; + cur_spec1 = -1; + cur_rate = -1; + recalibrate = 1; + printk("Reset-floppy called\n\r"); + cli(); + do_floppy = reset_interrupt; + outb_p(current_DOR & ~0x04,FD_DOR); + for (i=0 ; i<100 ; i++) + __asm__("nop"); + outb(current_DOR,FD_DOR); + sti(); +} + +static void floppy_on_interrupt(void) +{ +/* We cannot do a floppy-select, as that might sleep. We just force it */ + selected = 1; + if (current_drive != (current_DOR & 3)) { + current_DOR &= 0xFC; + current_DOR |= current_drive; + outb(current_DOR,FD_DOR); + add_timer(2,&transfer); + } else + transfer(); +} + +void do_fd_request(void) +{ + unsigned int block; + + seek = 0; + if (reset) { + reset_floppy(); + return; + } + if (recalibrate) { + recalibrate_floppy(); + return; + } + INIT_REQUEST; + floppy = (MINOR(CURRENT->dev)>>2) + floppy_type; + if (current_drive != CURRENT_DEV) + seek = 1; + current_drive = CURRENT_DEV; + block = CURRENT->sector; + if (block+2 > floppy->size) { + end_request(0); + goto repeat; + } + sector = block % floppy->sect; + block /= floppy->sect; + head = block % floppy->head; + track = block / floppy->head; + seek_track = track << floppy->stretch; + if (seek_track != current_track) + seek = 1; + sector++; + if (CURRENT->cmd == READ) + command = FD_READ; + else if (CURRENT->cmd == WRITE) + command = FD_WRITE; + else + panic("do_fd_request: unknown command"); + add_timer(ticks_to_floppy_on(current_drive),&floppy_on_interrupt); +} + +void floppy_init(void) +{ + blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; + set_trap_gate(0x26,&floppy_interrupt); + outb(inb_p(0x21)&~0x40,0x21); +} diff --git a/linux-0.11-lab/4/linux/kernel/blk_drv/floppy.o b/linux-0.11-lab/4/linux/kernel/blk_drv/floppy.o new file mode 100644 index 0000000000000000000000000000000000000000..33235bcdcc660371f0cfe6077089e24f2a1c3a96 GIT binary patch literal 16612 zcmb7q4SZGAmG3_1esDR-O#%T7Ccq5_iEX}ssED9J5cyO@P*CdSCOJv2N$!pJ1Bg$t z8mxv?$EbDM5u1S3zSpTOb*2sy)bJtbs4cJ4r`7tiv`=Vk9Bqp;GJZ7g|KDew05`hVrNpPO0n*oRVq{rD}@GR~;V|buBFk z?Wzgx>`!MO_m;41;PauOA&QUH1QoHPKd;kUqQxCYi;keuo=MQ_QXMBfZh<4IDY~aW zHN&O5)|Z6tTWh&2Rl8ui1{RM8D znf~f(#}&*EiLuZVbW$Ad1*vkM?T5#gqDLwAbu~n~^7Ge-2P8IN_8Io;J&3LGj`#-v%ft*)AW9h)8K?rB1qtT*^wKr zzpmqhJn7RUge3dZyKXPZ9vaG3J1UNYrD885x$vd*v|+u&eU$HK26P_ke53O>pPzYh zpZ~Nqs0Ky*blSUb*`T>^<>_n+PiOH77qU-#NgYBXfiGk4V(Gr2(>{$JLDMn)S;x`5 zn{EyxM|AAa;p{zma0F>#4sM3KMRaR$?*5ORh|mU<3K5mUj+6Z$&;9!C_@=WV$v*HO z(E4z&WC-=p>7v}(O6@p$+((NH8AdDtkjyMYs|(RY8AQr$)!NULc>ghKFD)r$(O}D% z)@P%w*%-@NCs2wAhtO8&>!8zq1fXm%LY`&m3gm8?e}_3ZuWNNl+5L+RXqWA$ml$2? ziyqQeW=}_-f5xnRK za(mBp1RW=n7`|)W@{W@x*o%f;awh4M(AE7JmXC4u*k?mSgT8?&7>$9~ycmV+ouoaT zE_0K15tDlBv;#1uTv_Ll(K-Aj=Gnu6MwlN+!R~MZ77ZLibdKw}J%|y~&E>wJWB9c% zhK72JQ4aw)bke-cnpaN$$$xZ&&!~?YP?eY zBaRY9yJ{wh=pDM|En#jBoM5p`65qf+xazDvMNkOPR0nXP`RJ1UrMddeHX1Mk_EfB!zkI4F;pbU+} zf*P1h?!5F7CLA0y8pTi;cnA-U#>C;#I0@SwXSd)jI=no&QxGL;;8#e~F_zx^6qc6%|5#$G zyGHcvrs-oojxT_VgyDqk0(8~wa2uNW8_~KJ#UmY_^Ve=x(ak-0z@Scv8LZKd#w5PE zPMJ;#50yVand4@e6Akbf&wf0a@yC5k3Wsu+DA+y%p&tHEoj#n4UMmrRUIX~h4?Zka$f9)yJqZ~>{$Cn$L~CsoJiH^8XYG;-%GJm zDC>Zh=winpTJ(O5OoW$62**n-WLF~Z#&CM#YObObKQnoId!rjoRkjdvV(iADFXHTA^q!W`c^0il47 z8u;)((4Q&{rc<`uOI5vufAXi!6MI86#KyZeW|W+vO{u_5Mn;9=;RA{)OOK-dxeTHAYNQQTin=apRwB)9nk8qdfB>Pq4m3poUwfm~^(4p9`R6sR! zo@h9r{;t#L%->&(#z(dcx!8c@;#Jgf^2Gxz`H(NMBOv}epA*PPw5XVvrBdN5=5N#% z2)SBPzENjevK73Tv??s}xc3geRzfAu;~hJVpB;pAxsOs&lp;=Yc+si_= z)C$e2htRPVuD6qRi(Qvm5UNi^x7wjtJQZ>zFcwrBVv*VwJCuq;7^@G}wx=|+Z0Qmd zUS+3}sYoiF45gy2b}|%CryyOb?aZnVMU$azi6|d#Q4#@lai)rA13K z`j)V7P20&-s3nRAyh|nG?RNce*PR~FOQ*xCJ|1qU4@<2D2t;!%zAYB2i?_B$V)g1V ztRh~v6S+fqrNzS1G@abhh<9%GaNS z*LlG-=?#?UnZawx+;9h&NoLR>vyr_mFoRvgOpzJ91~R84WaiW+nuRGbgN4H-rDjfB zv|jl)(R7&^{705(rpgTdg3f5B+6=x&)0&xY2FuYehgoRmq-o&Bov2x31|Mf9HFJd- zya~QL%u+L_k!m+lZJ8N-lcqJZ+zi&!v}RVC!OK~)neMDMgLl%MuaQ}626wYj&8#9{? z>b2%V(H9{du)fFCt98;g28plEN!y*YQ_pRBj@1b7d=1RLkhP6EjjUT@-ORd8q)V;I z)Q_^QGV4X!zlC&#^)vd=OuEY2Pr8Nn=UTf+x00S`JwV@Lq^qqPNXJQEXsspPM*1S_ zEZe%3^u@~LNh;5mVmz&Tsgz~|%6gXcR??<*Ju7S@?X@b{f$dZeSnYWF+8=^E8}Vcq zegB1OFCbmusY}dL{!2+0d2Bkq zkaWm;1d;SFB3_7Ddft(gyeD$!?l#;YIv#qSCU-osRy}?gGLeQJnIhFF{bh5G|A#V z-UN{QpODD-SILMjSySnyMs=c)er@Y^5;NXuhDV^lT}#*v|LG5uQFetA#>gN z0TlcbOq73G?qY`sf6 znx3L2=Cfs+_AkWO*u4U+=CczvJ7IQXfA&?>HCkEx6Rpw;l}SHfpIaFt>P-F-mG3wW zmN&4*?gwcmmViu8WT;H}lqy}UF%1U4q1E1U)w)FOoZqrz_lKZS(1-`GI;MuVD)V9X z!|aCIxusO;eFCM=Y9n93NZ|qs_cBe)?iMxi+l<@cO?Xmd>|T%E>ZA`*#XS7D*4bRh z*R^@n=|M~3QkK2sG;&KpJ1X)3pqu_zN7{@zwZ#vuU$V~6q4B&n{W45XjVkjE*OWFa zT$5v1xGmE@5ySgfiT(PuW4uunT#5J$xA|K~99C-j7xeS}Z=w_&x-$J@y80=vsXo$z z8Cd{q8s3KDAuS1=WlEf9@IqvhBbmwQUuf`PdLil?yF>5N%nb%l|0^9kdU=c(Nl31A zYCXWVZ!z{mQtL?GLJOPy~SJP9F; z&?#QbNbWUw{_(=3vHJvSo%a&k`<~$>LraNHh94WZLrKl5Vh{e+ScTrM(>8`sqhLE& zMr|g8`7@&nq}h$vV&OqjW%R)3;eonvIz2CU1Wc>K3+O_HBcKUCD_;S7dIj;T!f%5& zub2yo&r?7J&f7XyVVo+wh88wlrxj4H3d`6=n`5${g6r6!TOGks3Kp^#iSO$wFGG;! zrP0EBK$^)eJbj)S)Z@BirW`?t0zKo?j-Z$VJ?*zTf|(RtL~ph^g7YZ&fHt-}0v>h? z+vr}qBPfC3{3y0Kp7Coy`X7NCmm^Tp`PtRT6k~2BB(qIaGpf11mEMW|7!fX7KCmeJ zCw8!kCTDLZ8T}r}(#P2HZB9c}EBzg6nE!(&oO;TbV9d(N&+_CH=1edq`t!~~dA{Mv z$;w)gb!nE7kL5Y2JOMH*^5p1hOr`_`s0e#iu_7w21FCd zHeSonHjZa*6&lORg|QW=l&#zJxorkB)KDuY!v(Opla1L^*;JknO<_kdSck58 zO$)Q9vMV(Ok6xj*@_oY{Fp)l!z>3#oCs!DkPyNz*Q!-0djwMDWU`7>WA&NW! zO|2f)(z#XW)cGTQzkKRK49Dz|UOIx(OaU9h#thlUyp$6% zDfdWBdO7EbdJvRhe1;^zze?eQ!q=#%sKj41R@aiQw<}wsvGjH|T9#~2j+S8UY-z4& zqG9LwUr|T8$&S=R3Ztp^HaiIttu_!LO4c>mQksl5#v&~c>j~%6etS+SW6{%n9jDeT z3KaL9`Z#^?uE48j`ksEpYpz-p$nQ({dB(52tglj;UgJ4DOn+da|DiyBWnfX?*1k>a z8V?rtbaV%vzn2RB2dS~rU-m-JjXgK^?%df?ylr21Wlx|d-SZW#u+slzPv4qFJG*;& z0;hT!d(xGjc5{{?WghFhJ$;+jEb4pZ%)wU<_FUVj<=^$2bMj9G(r13PX;YP!Jm^0a z=sVN5Y1^VrJ!b-Mo;h=-FHjk%?CajN?y^3q6F39yo=xi(1s0v@J999wDDY+k`X2B*lxc2fMeEN!e0;`~C_V6)7 zS6S)b`gHM{%hG}LD}myt12=A3b5oDgo-Wpb*+}v|);U1xfIrY<&dd*N>N(Yi*xwlF z4m9GM4)mPrdAhIrm52HQr=qKR;Or^Whs?oEPF*;~%Or&hpmbX}u`TSRfx;b9A{EB7 zu36RMLTW3YkyM2FLKa1dbX^M9STG?pE~6ZsWCUg+*fggSkvcnE8%?!hzZVV1kdw_x z5E0%@skDC9r4tD|mI~{uE`<&KT$QlfTH3?TU7AX_Mv~2{A(Cpc6Dpmw>%*;}p@WO6 zXl){rvQ^C9o>Es`y&<$DR9!K@qB>OG8cEbOEsD;Ye-Y@qmikb6W2n3#-WtUL$Y?Pm0^HJ-*56Pmvmej>DPRG|>P4Z%hoTeZY-N64$F2I$w@sMZ#3vk~VyUEAh8 zhg=B8V;LqG1FS!(1EI z_k-ARyZ3+k4m9ZmU{qD)STvDRxU+0ar^4FdXqXo{h;$t3htTQxHN_Jt+$v@?S{rUl zASq}MpyIh zXhdUC44S_7Rdp@#q#efiFmTG=j&N#o^pk6+O45BNmBUmcI7eToF0fI!o>j|?#9w<*1?%ry48s%!-O}H zYHLiiDVrhJvBpATM^eL;+zG5bt&P;9nKtH00@n2!lExD`j$3ip_mM1W!QjDvS^p%0 zcwJUD#ar#lSh_w{8BdnS>}}4Qx4f!i&Ybd=NNr`6BdBb)6EVA`QX5EMJ=Omz&`TsU zQYStZ2CTYH%$;Whs~wg<*K=ep`WAK4xD~!LbunQ%&oJNg!jVD+cR2O@Ms~`0J6VNf zwwp8N2bOE(L46B*hneBdvr79? z<0+-CTC!w8sB}XuvLWrP*5z~4nwzs@PIX09^#zVppPaZCF>YI@jN1c7VYb(MAGRMn z4snyj4-fuoNlxh29IuvFi;R~6l$%fIc&Wb{-_!W=0)XwqTYMxZd-1WHz~bX#Yai;khk9)*;k3<@lzSqF zyvBUak)MRzJvq}S^CqY5vyi(7=r3#g)R(kfhPb##Y;Eg#rw!g5xCd=5-;m?wCUZ07 z?s1!P&m052aAM1U8@LB=U1ynN>p{rfe#qUUc&0voK;Rz8 zA+Ivq9sNH-?jFLmeq)Ze6g~y8t8|azjK?=P79Aec^n7k$431z7j=}p7bgQB39>S^H zVJ^ujFjqt4i0+@NNVd1)?FLLG9Bgu_gxyk+;zpu^l-}!9)Z%8aBEdILM8tM&x)JlB zA+9RwH65v~<+|ilawK?XG~%K$L&P11TLJB<3cd-k=}{H zqt5+=gqQ`)w732er#|hmu4}InH0`?f_TlKxy6%U1{LpXup$`&3>dkYV2k+|DfX)!B z{~J`Q2fFUZEn5gdrhl8^-wEk2?i7ao{u_#v^Kr{s!DiZ9STho5cH50JFLPLjYZyPx zNQ|VL6yRCL?|p)<-n$r#uR!L0Ts_>4j`A;XzN_IN_4s)bU(&AY)LZW|kh|ly2XtmX zmewfM3mM}w0bjQtq}^NrsWxLF_%R9jxb0@P$)elKlnTMfWY8eBy*wb>%(S-~9ltlj zKi3}AMtw5nUiGJ;%)-&XN~ZnH7RdWD)xrDq*i*>&mWhaQEp{)j$(Mk4$J0Q4jt~83 zT*zMpWUO5NQqZ))TxR)lAV2;1@^{ngg?98kiurpKUzcwL{c;A+|LeJH3GMMc7{Zrv zAm0Hj&fu9xGc))HK%bYve+Tqy!@Ng*A9Tqu@6%)IzGvD0=TPRpL&?7c-hFqHr!DuL zN&YSH?z@uwY4Gm5g8awe-S;1P4?5z$_sD01ci(m7i@>|@GV+z+-FF!I%fY+vF7m6v zyYDRWnIDfHl@W<&ROT~3xDt$fJbL6ad0Z!Ed^|c6Mg$%`V>0<%wMAUu_)frh-IC!F z^N9c3bwA|W$MAQJ;lDYC=YQLs+;Qwb1wH^fZhHs8a}2o8nuvJ3Hl{w`{qBB?<)_D# za}VHt=-;@EIZFN<@a{f`^=E^3_ax+(jL}~+hQDqM&!29%`vuldj49tbh9BAWk3J`j zx*f>4m~f8J`ch!jorY}3^-g)@U_E?xl2eg;WOHstLdHG5>F$qG;lbQJ^EpS*QCAxyCqf*@ zW2t7`J~Z1nl8iZZg>j4V*H;(AN9Hd-^hnHykI!z%c#@PdISvblL-X+IFN!;|aI(d= z+i=!bW6!ouoJTIt{?;)PCue=YOQ^O;ELx{h(YoejIOQINX zi^$Jc>QeHs!}XT+HVEIra`f|2!5>f#KaUa-4E{dVz~aQ8N>R?Auu}es$ZgDTmj8?3 zVIurI4y2#I7CC=KM!mS;ZA9qZ38dbGAOBs- z`Ttz%@h4}*BEd32{!WkbjYRm~EXd#JQ2tZFmjz!J8UD8>H;llS-? z%oaRHuvBoVApfaJ{f&Zkf=zxqk=k@g@UY;|1m6}sE%;}_zX)1fui@tu!I^>;f(rzf32qW>5KIX2_rJ8WOOWpk^85`5 z@yCMP$CB6Y58xZZbAL*?g%}aJA0_HvSpnw=ze;eUAorEjIP^e@1GrNUn**e-aFV7K7og8Kc0dOsEZkl^crZwa0f{FC4pg5!~^ zY=5#~v7ml$L4Jww{Ao4yt`+>6;4Ok%1@9JoK=2;~pAvjd@TlMkLH_WB_Vs%V__6R) zF^4E`7kpH3ui%daj|sjjn8S4+^ zSnzF;pA`Nh;r}A&<$8;D^NFQcF9a(E7fJaB;lsk;Cj5PZkBa;!g0G1D=fb}&{7K;l zh5xhgUkLBzdJ2E^x(|P*2wzMDUn=}O;TH&hrSPkTzd`t$g^vo~Cj9-vKO%gO@J|W< zQ{j&azAAG4UVtCJ68`ssit97v*+k^-1mUL%KU4S$;g<-1jqrMXNBuVPn44)Szf1UU z2>+1qe=qzK!v9G414Oj{qVTT@e?s_og#WGZ|1SKWh5w82{52c|;i>hqjI{8%s>wDw2v{{acGz*hhO literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/kernel/blk_drv/hd.c b/linux-0.11-lab/4/linux/kernel/blk_drv/hd.c new file mode 100644 index 0000000..c0e908f --- /dev/null +++ b/linux-0.11-lab/4/linux/kernel/blk_drv/hd.c @@ -0,0 +1,351 @@ +/* + * linux/kernel/hd.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This is the low-level hd interrupt support. It traverses the + * request-list, using interrupts to jump between functions. As + * all the functions are called within interrupts, we may not + * sleep. Special care is recommended. + * + * modified by Drew Eckhardt to check nr of hd's from the CMOS. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAJOR_NR 3 +#include "blk.h" + +#define CMOS_READ(addr) ({ \ +outb_p(0x80|addr,0x70); \ +inb_p(0x71); \ +}) + +/* Max read/write errors/sector */ +#define MAX_ERRORS 7 +#define MAX_HD 2 + +static void recal_intr(void); + +static int recalibrate = 0; /* 1, wen */ +static int reset = 0; + +/* + * This struct defines the HD's and their types. + */ +struct hd_i_struct { + int head,sect,cyl,wpcom,lzone,ctl; + }; +#ifdef HD_TYPE +struct hd_i_struct hd_info[] = { HD_TYPE }; +#define NR_HD ((sizeof (hd_info))/(sizeof (struct hd_i_struct))) +#else +struct hd_i_struct hd_info[] = { {0,0,0,0,0,0},{0,0,0,0,0,0} }; +static int NR_HD = 0; +#endif + +static struct hd_struct { + long start_sect; + long nr_sects; +} hd[5*MAX_HD]={{0,0},}; + +#define port_read(port,buf,nr) \ +__asm__("cld;rep;insw"::"d" (port),"D" (buf),"c" (nr)) + +#define port_write(port,buf,nr) \ +__asm__("cld;rep;outsw"::"d" (port),"S" (buf),"c" (nr)) + +extern void hd_interrupt(void); +extern void rd_load(void); + +/* This may be used only once, enforced by 'static int callable' */ +int sys_setup(void * BIOS) +{ + static int callable = 1; + int i,drive; + unsigned char cmos_disks; + struct partition *p; + struct buffer_head * bh; + + if (!callable) + return -1; + callable = 0; +#ifndef HD_TYPE + for (drive=0 ; drive<2 ; drive++) { + hd_info[drive].cyl = *(unsigned short *) BIOS; + hd_info[drive].head = *(unsigned char *) (2+BIOS); + hd_info[drive].wpcom = *(unsigned short *) (5+BIOS); + hd_info[drive].ctl = *(unsigned char *) (8+BIOS); + hd_info[drive].lzone = *(unsigned short *) (12+BIOS); + hd_info[drive].sect = *(unsigned char *) (14+BIOS); + BIOS += 16; + } + if (hd_info[1].cyl) + NR_HD=2; + else + NR_HD=1; +#endif + for (i=0 ; i are the primary drives in the system, and + the ones reflected as drive 1 or 2. + + The first drive is stored in the high nibble of CMOS + byte 0x12, the second in the low nibble. This will be + either a 4 bit drive type or 0xf indicating use byte 0x19 + for an 8 bit type, drive 1, 0x1a for drive 2 in CMOS. + + Needless to say, a non-zero value means we have + an AT controller hard disk for that drive. + + + */ + + if ((cmos_disks = CMOS_READ(0x12)) & 0xf0) + if (cmos_disks & 0x0f) + NR_HD = 2; + else + NR_HD = 1; + else + NR_HD = 0; + for (i = NR_HD ; i < 2 ; i++) { + hd[i*5].start_sect = 0; + hd[i*5].nr_sects = 0; + } + for (drive=0 ; driveb_data[510] != 0x55 || (unsigned char) + bh->b_data[511] != 0xAA) { + printk("Bad partition table on drive %d\n\r",drive); + panic(""); + } + p = 0x1BE + (void *)bh->b_data; + for (i=1;i<5;i++,p++) { + hd[i+5*drive].start_sect = p->start_sect; + hd[i+5*drive].nr_sects = p->nr_sects; + } + brelse(bh); + } + if (NR_HD) + printk("Partition table%s ok.\n\r",(NR_HD>1)?"s":""); + rd_load(); + mount_root(); + return (0); +} + +static int controller_ready(void) +{ + /* int retries=10000; */ + int retries=100000; + + /* while (--retries && (inb_p(HD_STATUS)&0xc0)!=0x40); */ + while (--retries && (inb_p(HD_STATUS)&0x80)); + return (retries); +} + +static int win_result(void) +{ + int i=inb_p(HD_STATUS); + + if ((i & (BUSY_STAT | READY_STAT | WRERR_STAT | SEEK_STAT | ERR_STAT)) + == (READY_STAT | SEEK_STAT)) + return(0); /* ok */ + if (i&1) i=inb(HD_ERROR); + return (1); +} + +static void hd_out(unsigned int drive,unsigned int nsect,unsigned int sect, + unsigned int head,unsigned int cyl,unsigned int cmd, + void (*intr_addr)(void)) +{ + register int port asm("dx"); + + if (drive>1 || head>15) + panic("Trying to write bad sector"); + if (!controller_ready()) + panic("HD controller not ready"); + do_hd = intr_addr; + outb_p(hd_info[drive].ctl,HD_CMD); + port=HD_DATA; + outb_p(hd_info[drive].wpcom>>2,++port); + outb_p(nsect,++port); + outb_p(sect,++port); + outb_p(cyl,++port); + outb_p(cyl>>8,++port); + outb_p(0xA0|(drive<<4)|head,++port); + outb(cmd,++port); +} + +static int drive_busy(void) +{ + unsigned int i; + + for (i = 0; i < 10000; i++) + if (READY_STAT == (inb_p(HD_STATUS) & (BUSY_STAT|READY_STAT))) + break; + i = inb(HD_STATUS); + i &= BUSY_STAT | READY_STAT | SEEK_STAT; + if (i == READY_STAT | SEEK_STAT) + return(0); + printk("HD controller times out\n\r"); + return(1); +} + +static void reset_controller(void) +{ + int i; + + outb(4,HD_CMD); + for(i = 0; i < 100; i++) nop(); + outb(hd_info[0].ctl & 0x0f ,HD_CMD); + if (drive_busy()) + printk("HD-controller still busy\n\r"); + if ((i = inb(HD_ERROR)) != 1) + printk("HD-controller reset failed: %02x\n\r",i); +} + +static void reset_hd(int nr) +{ + reset_controller(); + hd_out(nr,hd_info[nr].sect,hd_info[nr].sect,hd_info[nr].head-1, + hd_info[nr].cyl,WIN_SPECIFY,&recal_intr); +} + +void unexpected_hd_interrupt(void) +{ + printk("Unexpected HD interrupt\n\r"); +} + +static void bad_rw_intr(void) +{ + if (++CURRENT->errors >= MAX_ERRORS) + end_request(0); + if (CURRENT->errors > MAX_ERRORS/2) + reset = 1; +} + +static void read_intr(void) +{ + if (win_result()) { + bad_rw_intr(); + do_hd_request(); + return; + } + port_read(HD_DATA,CURRENT->buffer,256); + CURRENT->errors = 0; + CURRENT->buffer += 512; + CURRENT->sector++; + if (--CURRENT->nr_sectors) { + do_hd = &read_intr; + return; + } + end_request(1); + do_hd_request(); +} + +static void write_intr(void) +{ + if (win_result()) { + bad_rw_intr(); + do_hd_request(); + return; + } + if (--CURRENT->nr_sectors) { + CURRENT->sector++; + CURRENT->buffer += 512; + do_hd = &write_intr; + port_write(HD_DATA,CURRENT->buffer,256); + return; + } + end_request(1); + do_hd_request(); +} + +static void recal_intr(void) +{ + if (win_result()) + bad_rw_intr(); + do_hd_request(); +} + +void do_hd_request(void) +{ + int i,r; + unsigned int block,dev; + unsigned int sec,head,cyl; + unsigned int nsect; + + INIT_REQUEST; + dev = MINOR(CURRENT->dev); + block = CURRENT->sector; + if (dev >= 5*NR_HD || block+2 > hd[dev].nr_sects) { + end_request(0); + goto repeat; + } + block += hd[dev].start_sect; + dev /= 5; + __asm__("divl %4":"=a" (block),"=d" (sec):"0" (block),"1" (0), + "r" (hd_info[dev].sect)); + __asm__("divl %4":"=a" (cyl),"=d" (head):"0" (block),"1" (0), + "r" (hd_info[dev].head)); + sec++; + nsect = CURRENT->nr_sectors; + if (reset) { + reset = 0; + recalibrate = 1; + reset_hd(CURRENT_DEV); + return; + } + if (recalibrate) { + recalibrate = 0; + hd_out(dev,hd_info[CURRENT_DEV].sect,0,0,0, + WIN_RESTORE,&recal_intr); + return; + } + if (CURRENT->cmd == WRITE) { + hd_out(dev,nsect,sec,head,cyl,WIN_WRITE,&write_intr); + for(i=0 ; i<3000 && !(r=inb_p(HD_STATUS)&DRQ_STAT) ; i++) + /* nothing */ ; + if (!r) { + bad_rw_intr(); + goto repeat; + } + port_write(HD_DATA,CURRENT->buffer,256); + } else if (CURRENT->cmd == READ) { + hd_out(dev,nsect,sec,head,cyl,WIN_READ,&read_intr); + } else + panic("unknown hd-command"); +} + +void hd_init(void) +{ + blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; + set_intr_gate(0x2E,&hd_interrupt); + outb_p(inb_p(0x21)&0xfb,0x21); + outb(inb_p(0xA1)&0xbf,0xA1); +} diff --git a/linux-0.11-lab/4/linux/kernel/blk_drv/hd.o b/linux-0.11-lab/4/linux/kernel/blk_drv/hd.o new file mode 100644 index 0000000000000000000000000000000000000000..bf2b0d10bc58477ea1758f63f765ba3eab8d6225 GIT binary patch literal 15520 zcmb7r4S1B*weJ4D`N{VsLlQ^=0ip~z(WvAHj5hLTKm-CoqeaVK874CmGG;Op=Ld*d zstvZpv}$_psXY~ooN`V*ZK#jN~fe*L!GKpQ`ErQ zHABlo!3SF>?LL|hobZNNHu}-|^XDmkzIBo!4je5X^oF!};JKRPsI4;;1rnw%%2xy!Eewdy7$R}w_EmuRu3G_7ayX^TaS8_I^m;?pA*YNb;P$`#smFp?HW>L zKRh+m9;zFB!8mHXaO{jnD-U*9EFL&&KB&r`zL-L}Q||lA76OijbrB2YXnwH6>nH>+ zWJVqz+S+@0Gup8k6t0xbw=4kbqq@oWf-2o3Ez59CcbBj9hymj7|aEzvv*JUyP%d`hzk* z&{7TR)u?7 zVZ7xVU>M)v;3;>)a1sx-dJq2r>7vv8@bAzDR-53&)n=$QaO|8pcx>=g>)^A4FKAUw z!)|B-S2uxc(j1hUj*VIqt3wz(cE($R90)uyvBG5~b`>=hRTRmUCCsXdC) zfpe{S^K2>7AaFlMsq6}+w*SnnfKV1Al*LXc1NX;5fm5g>~?fUqdLx5#k`?+P@scfFmf}|+)SrAZNSJ?qR%ywa{VGqO8G(J3Zfm7r8i-^^#!Q&SZw|WPUU0lqG)`X5#|IyNGL*+2659UJU zgPTKv!FFtN>q6c^%%!jY2|MF+p-o#5lp1udaop8{4YtEt#yzOj8aU_QHMTw9dv0vk zLxE=(mi2XL#!1|oJrm!A?%Fz|BV^ita!zexLG(Xf)V6W}t&3()xXGiaa(~j~59s4ypmL7Lz z1)T|sGYorRbmT)FBj4x{ma$Q0=D>3S?dCdd5fj|^)+oB~*jJceh__D0c63mumQ$qP zgl4+*`0G^fL^V}=9*rP7my2oubn8$RS5Vni7NT(bRHRYsmpV+q@*(d}xF}!$>~_W# zlp4L~4|u29$V_(1w?b&p(7Mp_LodJd(o66EC#;Q{Y>2W8l6{qatzPU~We@zlQ>&Ueh1!)(;8CLmHTf3S4CMRVA|Qj)RA}*~56+)Qop!c( z){8i`V}We{VTn?ot#ubjd9i84s?~^9Yv2rDdRJk8S*3C>YseRm{ux>M*1cFC9M>+I z)pxjVBSn{>)oM;WdK~=!@OTD1KFd{wLm=zqI;==oKgv(|s$r?p#yZi5(vch( zTdHgDRM%nk(4a9`acDO5#y4qq2d@1P;=?S{yVIfl6SPVZfKmjY_8Dri47*VIrsEUN zE09k3bVo9=SR&iAAlQ|O$Ag{uuC90{*cnfxwgvO4WIEatj}0%>|PQJYt|S>Hc`EK*5O^{c=LA@~NIwdPgeQ9fO0ty^&N*ZGul+ zKJheO!qez7lsf82)Wdob;s~-DC6>p#0^o@#kB@}%bPDBFUT@K6EVjOB6#Ka*`fKs% z#Q8)8{Cd+Uc>*_aK&5&amcrP zDGF?!fqgfTRQ6J~xq{Ak?FPzM?#9!yzlAfPZ`Ba!Vmn2hHqs^b=TOVHnsmTEPWc+r zlkClGwtWqr<#r1i^sT)WbftZO^v$HJ?Ss_6g>;Sm&$QD)I;e`hkJI+OX!3~1e>08P z++zG4?18fR?&!Z&_s0G;Z1`^@ZQ0$h?f)d{fPFW0*8R+n_5j zX$F4I+UwcdYBO*rOEgns2JV2&VS?tQ&P63sN3 zfi#`bOtTqyjHWfyVg|lFRyHT^%3_QqAYG#=kIF0T*%yM(mHmYr++6ps} zqXEsVG6Of#v}RVDf&V14neMckfzQ*OPm}2|12bq%GwaO2rZHx{892c@x@5B%C>tx; zY6iYX16$Z=%$$_V^(+5Y#;w~79AHU=B}v3!2YlwC?>Y{>jwuVHxZGbbfuIpy#EFEFRjPByFjckYH6ylWJDSHeWG_W;}5jmI_^ z(dlm~^OMkN@qKzdOxgbpa-Vip*$W}}g{f`YVN~~RWuspEr__m%w(KFMUZ<0`c}RRw zCvBtDiG2#sQu}|PJ*1oL zcG5}OpKn{Fdr4no-$UP0q?_&ANT*3(Yu`k=kMwo+zta9)q(7m|Kf{%BUykv#xdr+1 zY(UwMlHN|*wCAzH4$@xx7#rJ3b<6hP>FehWLjdt)7=6#9T2WD&)i_(qi<;hnlD!YL zist$ol~T2gau}wC@?x(-iTNb#C;fE{g(u1! zxsti4JXz9Lk@k9Wq^~AzdAbsP%0HKMz|$2)7Sxk2_jIMx%HKe`5;WwEq^s=;bk*NP z^EJv(5tBwIM};!Kiypn|zlIBdZBwzC8p{3=>1#=QJ=tuN@?S^VvVTnZCrAe%pQrpS zq|5EE;OW1fbS32Tm45;0YELwCjq)!fUE_(<@kOMAb{6gW7n2To;*p)ozl3z1Cmwa_ zxt@5;rJFqQPM2=>#Ivw-1NB=V2i;0~5#$NwUrM?abwMv9y&Q7ozmeoB55u*bWIMc6 z{+md4cw!(|kX+~K0=bgpde1hHt4MD4=$Y3>daKP%#lM<#%-)Eh^RFpFJiC?u`xsNs zR2|w`%Kr{%ekIh!Ud}+hIr;G3rKP4azX(I+R`Y`p+52G5x|Uh2?0zU)*O4~t-yrDL zCrF!~Xn#^!Eu=kmCmOb{C+)S*Q-1+zpN&S9wUD&mewa2FkuI|Dqn*XfWXs;ex=Tn0 zlz9!9kTK1~8>|PfJ<6!odFqMw#*{IgwAWsP%Ek;Quj!C6a|J8g^=R0rAzf~tBYg>X z$V!_xCB~&(7OFj+-O8BdY+xs#Xaw03H!ybFW0P?cc){hxY2&IJ9M7h2|YPU@t~phc5R-b4j5qm3b$FV77ddMj0Ga zXRy-2F?9xe)#M-1r8pc?*WzpJ{a0vDVUObMk%`0lO79|3ssEKZ{r8iic@sB}wR2Eu!CTRP#Zu)YODBS35?MRTQ{fcU2v{H}!jj zIovt5PnqraYa_9#@XpjP66WycX%E4VN?HnUSLSD!3FdGV!Soh;nTXRpY=1wS_ySzK z4ruIs9)_ysu;75x_ReXKqj1d3HytxOP<<)A_%^lv1sYp)^-GH##}7J{b2Io_$I5;d z(2s+TfqT@n4^hOEmll8D5oZz8%ON+Po(b!}(Kf$9=v4n$CMx^CfZ?CRG=udq0%U z{nRnOb4C@4*tyr;&b{JBXW9xBjdkwlju=bFZv4m4VEusnkrHw%-}R&@x=c-kO^z`2ANPSmFq7V~;=L z>F;l};F3HAWd={MUvebh;MmVLcq27KOD;Xh0M!{h-5Dq}_I?_#=(CWWR~h2;EV$t^ z-N8<_dbQyMY3nR5D`RYI7S1usoGYc9gL<@FcHJyJTrRslsK>cplsjhcqUAoA1t;&;9e5JdjAeLGoyQAZ<*PS;Qt}=hNhJuW>YY=s@V%HZR72`b{=&+nBi#B<(Um?yt%Q)@Ve6=O%*t=)FmSI zO^{wH4HZghdzSd;YpY<-g5tffvx}V;e3OwTbH;i-W<-3wY`l{DAk$lY3Qcm?pQ-qBQ94Ufx%pVUpxyEEp`zh%0|26QkqR{OGT0pV~%vkGVyJW z1~OQ??|D-hiw}+ryt#JC$eX{$HBp$)`C7 z@5K(J;5RIKD&8sV{B}d3w^uajMZY@5d%{uKkUcRdJAMx+>^c|L}o+)n(Yx3)OnmIf? z>;3O-*sx*K5{e(7)c+m7m0z=VvGv3+@)VNaw&9i=G@bM3M}|j+tf8knFRDDOe1ZwOh3LNANUtbl)JQyLH%a?R#%T7h4T} zYs1LKH?1XBn>Ei`Xf>@F8Q!@ZV#lmu(cJpoFRm*YVmyL$?J)X+ua3>eWGuop%!`!>@jN~HB zRI(__1V7TyLaLCBiAphMp{lNG{PES9$#$yFpYq z*34J>RxXU~BHtUy_NcB%t~;Jl`D{EE?gfqVXe62F%tUf=m5T4osg*b19=tKw+|bg{ z9IWq+WTM@R6W6p{2RfRJ1?#s3>$}puiCleGCejAay*o2Ch<7Upj*^;{|P)x1y>O;~VCvpc~8aH^+A(wAw0%lxwj{ z-knatQM&EiriZ&>024#srNc1}2in$ZdT8lX+?f&RS48I;jWZg)^^J$Q9JBirBXIXYsEX}o{ zu{+%xZ%pN5xyE$1J{8~L?6dVv4fE#JV|F$+IfBNXcqSE3HtO0LtYJ>vI4If^BnUIp zNk<(+C!$!u^y(AsO=qE!#iHd-EhHTJu_KX!-`RYU1FaLW7lGh7W8QI0*bmNN#86g8 zOdUPrb6D0~nS?g0QaU^J5Ok##n(xLB1o&kGQ5c^Z5jKe*KRATanhwWU1haH4;pATi zYlu=SZ@h6qu z0^f%C;rU+OSQ@;m)T`yqBIB8#a`UlLZxCcVzOUlTGrn3{Y7Lk-mbQ8hdP=RO$5B<+ z?L(1!+(zBXjM&@*xqFVL+}v2|r4LWw>z;*mTW>k?Ly)^iQ?1|W$WKA;9xowpGW$!t zb&!qX>z*Fz+vm-trGWttH6AGqz&~s0^RADT=)Zf6WSh5$kNkTf_cTfQ-H_Ava>(67 zC2fDfwH-8v#r6r>rY?UU?6sWZ<^(^2<^vb{u@}1TK@{zk-y!Ysw-EO@I>E+P&j)6K zks#VT16}tlNL`LewV88=1b5Nd{$6Yuz+A?`ZkNi$lMOlUwGDcEZ|KC;VMB%sb_9sR zSiCd84JnD-6*|({$(5p@G?Iy=wqZpr5OD)`E1)gaz+c9&B&Y`ba29XC&hG5TPMvr+ z_5keR=*<7)XBPC(ZG{t!{xDw)-{M)u&rE!AmLB_TorkMZj1x{Ex<1bU7%EjOJky$= z=Ww27nfr0+t0ADit9J%^|L7_KgF-g}>4S69z!*XAG1n=`U3-f}51>Ey;Dj2+LD&7b zRazh@?8lRsuv^i2_Jc8S`>_hNTL+~24+LP5>qJ4>#sZppQ!gF&oxE$~4$y_|T5z}= zGPX;(+iovtw+={k9qc`Gk#-X(E3{V)dyFUT;aECmuOBq+F^>HFR}k~tr%C-_8Na&) zUAe<6?`r@lwEfp+&4+GqZ{dkJ|i9qt}NJ_+94JILcUcWlofzX!a#SCGdo_Sia1 zelK`;A0YoEcz69L|9$Z8`b_>Pcz4YwU-yb7A{0aMW5 zl7cSN8{XTvAM(>K;4i&^zx)Dz9(Z?uru{bX?jA?})(iA+zkqj6XcOP5`EKaG>lL0g zopY3PPR1LkdkSor*V5el@xw&H`=Pu=7aY1i_Ok2=+I@)+G_#a96bAm4k{&%8Bep>;~KyDbdN-Y%JEch8g{xr$* zX9RyK_$Cn(=v~3d*ayg8LxlcH!LVRb%K3`}^_~^{so;MIzApHo;AHqn{k1?7`wf4Y zXB?8`XX8##_?_hIl==tZ`TI7@e<1u}DgWQ(VQ(_NME;6tV&Az=c>ZQW`OSj-?UwC@ z1@9E(pRdq_>rWjhB2pCLm3I1&0UhDyUU0uZx_5nFf8SJg#WVOV>zhdb5bA$3H$b@CRjA3N{e&{(@o0FY)}b z9#|vm3b0Ce6zTdHV*E0%)a4>?6TDflN093a?eq(NLGU3#z0RQg3E}@v@Oy&)B6w2p z-vs}s;BN#!5cC=1x8Nm$R|;M$xJrXOP_3jbeBly>Xe=GQu;1R)-f_gne{XYp`>~ZW( z6ATG<3+4px6a1p!R|O9U{-fX#!50Ky6+9#Ow%|EIFLIv!DHp5}tP^Y&Y!z%5+#nbi zyi4#if`fwm<4M|oQt+PypAmdf@U-CTf)?fm>vao0AjqG9DSup$e_2KTWx+oQ{*db= z=Mif?h+gld`fUc@Py#c1z!{VgP>kl;fG#VfwQ^( z0UHDt2(A#^B6z3ZfZ)S|dYwi6Cx!nm5xMoE@UIAeM)-FGKM=Xa^$_)^3eF)SH?9$W zsbDt|cJ~PXW#RV=|CI12gnvc&w*`x2eVj!^d$qzh3$NE-$UB7JBBE&ScW-zWT#@Lv}Gap4aL|CI1g3;&w% z0j}F<_bS2b1zU;m|0cmLB99B76MRJQAEf*TM9h)H!apzki^884{(Zq|I1aJ>IfC_q z*As(yuMvJDu~zn%YUlh+{|<2720~StK%PB`9fCQ*FA7qh#@^1+KANZZ>Jpcdz literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/kernel/blk_drv/ll_rw_blk.c b/linux-0.11-lab/4/linux/kernel/blk_drv/ll_rw_blk.c new file mode 100644 index 0000000..f57d998 --- /dev/null +++ b/linux-0.11-lab/4/linux/kernel/blk_drv/ll_rw_blk.c @@ -0,0 +1,165 @@ +/* + * linux/kernel/blk_dev/ll_rw.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This handles all read/write requests to block devices + */ +#include +#include +#include +#include + +#include "blk.h" + +/* + * The request-struct contains all necessary data + * to load a nr of sectors into memory + */ +struct request request[NR_REQUEST]; + +/* + * used to wait on when there are no free requests + */ +struct task_struct * wait_for_request = NULL; + +/* blk_dev_struct is: + * do_request-address + * next-request + */ +struct blk_dev_struct blk_dev[NR_BLK_DEV] = { + { NULL, NULL }, /* no_dev */ + { NULL, NULL }, /* dev mem */ + { NULL, NULL }, /* dev fd */ + { NULL, NULL }, /* dev hd */ + { NULL, NULL }, /* dev ttyx */ + { NULL, NULL }, /* dev tty */ + { NULL, NULL } /* dev lp */ +}; + +static inline void lock_buffer(struct buffer_head * bh) +{ + cli(); + while (bh->b_lock) + sleep_on(&bh->b_wait); + bh->b_lock=1; + sti(); +} + +static inline void unlock_buffer(struct buffer_head * bh) +{ + if (!bh->b_lock) + printk("ll_rw_block.c: buffer not locked\n\r"); + bh->b_lock = 0; + wake_up(&bh->b_wait); +} + +/* + * add-request adds a request to the linked list. + * It disables interrupts so that it can muck with the + * request-lists in peace. + */ +static void add_request(struct blk_dev_struct * dev, struct request * req) +{ + struct request * tmp; + + req->next = NULL; + cli(); + if (req->bh) + req->bh->b_dirt = 0; + if (!(tmp = dev->current_request)) { + dev->current_request = req; + sti(); + (dev->request_fn)(); + return; + } + for ( ; tmp->next ; tmp=tmp->next) + if ((IN_ORDER(tmp,req) || + !IN_ORDER(tmp,tmp->next)) && + IN_ORDER(req,tmp->next)) + break; + req->next=tmp->next; + tmp->next=req; + sti(); +} + +static void make_request(int major,int rw, struct buffer_head * bh) +{ + struct request * req; + int rw_ahead; + +/* WRITEA/READA is special case - it is not really needed, so if the */ +/* buffer is locked, we just forget about it, else it's a normal read */ + if (rw_ahead = (rw == READA || rw == WRITEA)) { + if (bh->b_lock) + return; + if (rw == READA) + rw = READ; + else + rw = WRITE; + } + if (rw!=READ && rw!=WRITE) + panic("Bad block dev command, must be R/W/RA/WA"); + lock_buffer(bh); + if ((rw == WRITE && !bh->b_dirt) || (rw == READ && bh->b_uptodate)) { + unlock_buffer(bh); + return; + } +repeat: +/* we don't allow the write-requests to fill up the queue completely: + * we want some room for reads: they take precedence. The last third + * of the requests are only for reads. + */ + if (rw == READ) + req = request+NR_REQUEST; + else + req = request+((NR_REQUEST*2)/3); +/* find an empty request */ + while (--req >= request) + if (req->dev<0) + break; +/* if none found, sleep on new requests: check for rw_ahead */ + if (req < request) { + if (rw_ahead) { + unlock_buffer(bh); + return; + } + sleep_on(&wait_for_request); + goto repeat; + } +/* fill up the request-info, and add it to the queue */ + req->dev = bh->b_dev; + req->cmd = rw; + req->errors=0; + req->sector = bh->b_blocknr<<1; + req->nr_sectors = 2; + req->buffer = bh->b_data; + req->waiting = NULL; + req->bh = bh; + req->next = NULL; + add_request(major+blk_dev,req); +} + +void ll_rw_block(int rw, struct buffer_head * bh) +{ + unsigned int major; + + if ((major=MAJOR(bh->b_dev)) >= NR_BLK_DEV || + !(blk_dev[major].request_fn)) { + printk("Trying to read nonexistent block-device\n\r"); + return; + } + make_request(major,rw,bh); +} + +void blk_dev_init(void) +{ + int i; + + for (i=0 ; iYkGs}N`|^F* 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 + +#include +#include +#include +#include +#include +#include +#include + +#define MAJOR_NR 1 +#include "blk.h" + +char *rd_start; +int rd_length = 0; + +void do_rd_request(void) +{ + int len; + char *addr; + + INIT_REQUEST; + addr = rd_start + (CURRENT->sector << 9); + len = CURRENT->nr_sectors << 9; + if ((MINOR(CURRENT->dev) != 1) || (addr+len > rd_start+rd_length)) { + end_request(0); + goto repeat; + } + if (CURRENT-> cmd == WRITE) { + (void ) memcpy(addr, + CURRENT->buffer, + len); + } else if (CURRENT->cmd == READ) { + (void) memcpy(CURRENT->buffer, + addr, + len); + } else + panic("unknown ramdisk-command"); + end_request(1); + goto repeat; +} + +/* + * Returns amount of memory which needs to be reserved. + */ +long rd_init(long mem_start, int length) +{ + int i; + char *cp; + + blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; + rd_start = (char *) mem_start; + rd_length = length; + cp = rd_start; + for (i=0; i < length; i++) + *cp++ = '\0'; + return(length); +} + +/* + * If the root device is the ram disk, try to load it. + * In order to do this, the root device is originally set to the + * floppy, and we later change it to be ram disk. + */ +void rd_load(void) +{ + struct buffer_head *bh; + struct super_block s; + int block = 256; /* Start at block 256 */ + int i = 1; + int nblocks; + char *cp; /* Move pointer */ + + if (!rd_length) + return; + printk("Ram disk: %d bytes, starting at 0x%x\n", rd_length, + (int) rd_start); + if (MAJOR(ROOT_DEV) != 2) + return; + bh = breada(ROOT_DEV,block+1,block,block+2,-1); + if (!bh) { + printk("Disk error while looking for ramdisk!\n"); + return; + } + __asm__ volatile ("cld"); /* by wyj */ + *((struct d_super_block *) &s) = *((struct d_super_block *) bh->b_data); + brelse(bh); + if (s.s_magic != SUPER_MAGIC) + /* No ram disk image present, assume normal floppy boot */ + return; + nblocks = s.s_nzones << s.s_log_zone_size; + if (nblocks > (rd_length >> BLOCK_SIZE_BITS)) { + printk("Ram disk image too big! (%d blocks, %d avail)\n", + nblocks, rd_length >> BLOCK_SIZE_BITS); + return; + } + printk("Loading %d bytes into ram disk... 0000k", + nblocks << BLOCK_SIZE_BITS); + cp = rd_start; + while (nblocks) { + if (nblocks > 2) + bh = breada(ROOT_DEV, block, block+1, block+2, -1); + else + bh = bread(ROOT_DEV, block); + if (!bh) { + printk("I/O error on block %d, aborting load\n", + block); + return; + } + (void) memcpy(cp, bh->b_data, BLOCK_SIZE); + brelse(bh); + printk("\010\010\010\010\010%4dk",i); + cp += BLOCK_SIZE; + block++; + nblocks--; + i++; + } + printk("\010\010\010\010\010done \n"); + ROOT_DEV=0x0101; +} diff --git a/linux-0.11-lab/4/linux/kernel/blk_drv/ramdisk.o b/linux-0.11-lab/4/linux/kernel/blk_drv/ramdisk.o new file mode 100644 index 0000000000000000000000000000000000000000..d37a922496b20c46741e78e22466958ee16e9dcd GIT binary patch literal 10664 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 azd^gt2s%I$JikGRTt|uA(-65=A^s1$?rygL literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/kernel/chr_drv/Makefile b/linux-0.11-lab/4/linux/kernel/chr_drv/Makefile new file mode 100644 index 0000000..9d4d8d1 --- /dev/null +++ b/linux-0.11-lab/4/linux/kernel/chr_drv/Makefile @@ -0,0 +1,68 @@ +# +# Makefile for the FREAX-kernel character device drivers. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). +# + +AR =ar +AS =as +LD =ld +LDFLAGS =-s -x +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -finline-functions -nostdinc -fno-stack-protector -I../../include +CPP =gcc -E -nostdinc -I../../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< + +OBJS = tty_io.o console.o keyboard.2.o serial.o rs_io.o \ + tty_ioctl.o + +chr_drv.a: $(OBJS) + $(AR) rcs chr_drv.a $(OBJS) + sync + +keyboard.2.s: keyboard.S ../../include/linux/config.h + $(CPP) -traditional keyboard.S -o keyboard.2.s + +clean: + rm -f core *.o *.a tmp_make keyboard.2.s + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +console.s console.o : console.c ../../include/linux/sched.h \ + ../../include/linux/head.h ../../include/linux/fs.h \ + ../../include/sys/types.h ../../include/linux/mm.h ../../include/signal.h \ + ../../include/linux/tty.h ../../include/termios.h ../../include/asm/io.h \ + ../../include/asm/system.h +serial.s serial.o : serial.c ../../include/linux/tty.h ../../include/termios.h \ + ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/sys/types.h ../../include/linux/mm.h \ + ../../include/signal.h ../../include/asm/system.h ../../include/asm/io.h +tty_io.s tty_io.o : tty_io.c ../../include/ctype.h ../../include/errno.h \ + ../../include/signal.h ../../include/sys/types.h \ + ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/linux/mm.h ../../include/linux/tty.h \ + ../../include/termios.h ../../include/asm/segment.h \ + ../../include/asm/system.h +tty_ioctl.s tty_ioctl.o : tty_ioctl.c ../../include/errno.h ../../include/termios.h \ + ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/sys/types.h ../../include/linux/mm.h \ + ../../include/signal.h ../../include/linux/kernel.h \ + ../../include/linux/tty.h ../../include/asm/io.h \ + ../../include/asm/segment.h ../../include/asm/system.h diff --git a/linux-0.11-lab/4/linux/kernel/chr_drv/chr_drv.a b/linux-0.11-lab/4/linux/kernel/chr_drv/chr_drv.a new file mode 100644 index 0000000000000000000000000000000000000000..d2f3869a9d5cd226117476be64275b50d1cf4aa7 GIT binary patch literal 68902 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ਞ(_ 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 E8yu$yWB>pF literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/kernel/chr_drv/console.c b/linux-0.11-lab/4/linux/kernel/chr_drv/console.c new file mode 100644 index 0000000..a12ffbf --- /dev/null +++ b/linux-0.11-lab/4/linux/kernel/chr_drv/console.c @@ -0,0 +1,710 @@ +/* + * linux/kernel/console.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * console.c + * + * This module implements the console io functions + * 'void con_init(void)' + * 'void con_write(struct tty_queue * queue)' + * Hopefully this will be a rather complete VT102 implementation. + * + * Beeping thanks to John T Kohl. + */ + +/* + * NOTE!!! We sometimes disable and enable interrupts for a short while + * (to put a word in video IO), but this will work even for keyboard + * interrupts. We know interrupts aren't enabled when getting a keyboard + * interrupt, as we use trap-gates. Hopefully all is well. + */ + +/* + * Code to check for different video-cards mostly by Galen Hunt, + * + */ + +#include +#include +#include +#include + +/* + * These are set up by the setup-routine at boot-time: + */ + +#define ORIG_X (*(unsigned char *)0x90000) +#define ORIG_Y (*(unsigned char *)0x90001) +#define ORIG_VIDEO_PAGE (*(unsigned short *)0x90004) +#define ORIG_VIDEO_MODE ((*(unsigned short *)0x90006) & 0xff) +#define ORIG_VIDEO_COLS (((*(unsigned short *)0x90006) & 0xff00) >> 8) +#define ORIG_VIDEO_LINES (25) +#define ORIG_VIDEO_EGA_AX (*(unsigned short *)0x90008) +#define ORIG_VIDEO_EGA_BX (*(unsigned short *)0x9000a) +#define ORIG_VIDEO_EGA_CX (*(unsigned short *)0x9000c) + +#define VIDEO_TYPE_MDA 0x10 /* Monochrome Text Display */ +#define VIDEO_TYPE_CGA 0x11 /* CGA Display */ +#define VIDEO_TYPE_EGAM 0x20 /* EGA/VGA in Monochrome Mode */ +#define VIDEO_TYPE_EGAC 0x21 /* EGA/VGA in Color Mode */ + +#define NPAR 16 + +extern void keyboard_interrupt(void); + +static unsigned char video_type; /* Type of display being used */ +static unsigned long video_num_columns; /* Number of text columns */ +static unsigned long video_size_row; /* Bytes per row */ +static unsigned long video_num_lines; /* Number of test lines */ +static unsigned char video_page; /* Initial video page */ +static unsigned long video_mem_start; /* Start of video RAM */ +static unsigned long video_mem_end; /* End of video RAM (sort of) */ +static unsigned short video_port_reg; /* Video register select port */ +static unsigned short video_port_val; /* Video register value port */ +static unsigned short video_erase_char; /* Char+Attrib to erase with */ + +static unsigned long origin; /* Used for EGA/VGA fast scroll */ +static unsigned long scr_end; /* Used for EGA/VGA fast scroll */ +static unsigned long pos; +static unsigned long x,y; +static unsigned long top,bottom; +static unsigned long state=0; +static unsigned long npar,par[NPAR]; +static unsigned long ques=0; +static unsigned char attr=0x07; + +static void sysbeep(void); + +/* + * this is what the terminal answers to a ESC-Z or csi0c + * query (= vt100 response). + */ +#define RESPONSE "\033[?1;2c" + +/* NOTE! gotoxy thinks x==video_num_columns is ok */ +static inline void gotoxy(unsigned int new_x,unsigned int new_y) +{ + if (new_x > video_num_columns || new_y >= video_num_lines) + return; + x=new_x; + y=new_y; + pos=origin + y*video_size_row + (x<<1); +} + +static inline void set_origin(void) +{ + cli(); + outb_p(12, video_port_reg); + outb_p(0xff&((origin-video_mem_start)>>9), video_port_val); + outb_p(13, video_port_reg); + outb_p(0xff&((origin-video_mem_start)>>1), video_port_val); + sti(); +} + +static void scrup(void) +{ + if (video_type == VIDEO_TYPE_EGAC || video_type == VIDEO_TYPE_EGAM) + { + if (!top && bottom == video_num_lines) { + origin += video_size_row; + pos += video_size_row; + scr_end += video_size_row; + if (scr_end > video_mem_end) { + __asm__("cld\n\t" + "rep\n\t" + "movsl\n\t" + "movl video_num_columns,%1\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((video_num_lines-1)*video_num_columns>>1), + "D" (video_mem_start), + "S" (origin) + ); + scr_end -= origin-video_mem_start; + pos -= origin-video_mem_start; + origin = video_mem_start; + } else { + __asm__("cld\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" (video_num_columns), + "D" (scr_end-video_size_row) + ); + } + set_origin(); + } else { + __asm__("cld\n\t" + "rep\n\t" + "movsl\n\t" + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*top), + "S" (origin+video_size_row*(top+1)) + ); + } + } + else /* Not EGA/VGA */ + { + __asm__("cld\n\t" + "rep\n\t" + "movsl\n\t" + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*top), + "S" (origin+video_size_row*(top+1)) + ); + } +} + +static void scrdown(void) +{ + if (video_type == VIDEO_TYPE_EGAC || video_type == VIDEO_TYPE_EGAM) + { + __asm__("std\n\t" + "rep\n\t" + "movsl\n\t" + "addl $2,%%edi\n\t" /* %edi has been decremented by 4 */ + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*bottom-4), + "S" (origin+video_size_row*(bottom-1)-4) + ); + } + else /* Not EGA/VGA */ + { + __asm__("std\n\t" + "rep\n\t" + "movsl\n\t" + "addl $2,%%edi\n\t" /* %edi has been decremented by 4 */ + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*bottom-4), + "S" (origin+video_size_row*(bottom-1)-4) + ); + } +} + +static void lf(void) +{ + if (y+1top) { + y--; + pos -= video_size_row; + return; + } + scrdown(); +} + +static void cr(void) +{ + pos -= x<<1; + x=0; +} + +static void del(void) +{ + if (x) { + pos -= 2; + x--; + *(unsigned short *)pos = video_erase_char; + } +} + +static void csi_J(int par) +{ + long count __asm__("cx"); + long start __asm__("di"); + + switch (par) { + case 0: /* erase from cursor to end of display */ + count = (scr_end-pos)>>1; + start = pos; + break; + case 1: /* erase from start to cursor */ + count = (pos-origin)>>1; + start = origin; + break; + case 2: /* erase whole display */ + count = video_num_columns * video_num_lines; + start = origin; + break; + default: + return; + } + __asm__("cld\n\t" + "rep\n\t" + "stosw\n\t" + ::"c" (count), + "D" (start),"a" (video_erase_char) + ); +} + +static void csi_K(int par) +{ + long count __asm__("cx"); + long start __asm__("di"); + + switch (par) { + case 0: /* erase from cursor to end of line */ + if (x>=video_num_columns) + return; + count = video_num_columns-x; + start = pos; + break; + case 1: /* erase from start of line to cursor */ + start = pos - (x<<1); + count = (x>9), video_port_val); + outb_p(15, video_port_reg); + outb_p(0xff&((pos-video_mem_start)>>1), video_port_val); + sti(); +} + +static void respond(struct tty_struct * tty) +{ + char * p = RESPONSE; + + cli(); + while (*p) { + PUTCH(*p,tty->read_q); + p++; + } + sti(); + copy_to_cooked(tty); +} + +static void insert_char(void) +{ + int i=x; + unsigned short tmp, old = video_erase_char; + unsigned short * p = (unsigned short *) pos; + + while (i++=video_num_columns) + return; + i = x; + while (++i < video_num_columns) { + *p = *(p+1); + p++; + } + *p = video_erase_char; +} + +static void delete_line(void) +{ + int oldtop,oldbottom; + + oldtop=top; + oldbottom=bottom; + top=y; + bottom = video_num_lines; + scrup(); + top=oldtop; + bottom=oldbottom; +} + +static void csi_at(unsigned int nr) +{ + if (nr > video_num_columns) + nr = video_num_columns; + else if (!nr) + nr = 1; + while (nr--) + insert_char(); +} + +static void csi_L(unsigned int nr) +{ + if (nr > video_num_lines) + nr = video_num_lines; + else if (!nr) + nr = 1; + while (nr--) + insert_line(); +} + +static void csi_P(unsigned int nr) +{ + if (nr > video_num_columns) + nr = video_num_columns; + else if (!nr) + nr = 1; + while (nr--) + delete_char(); +} + +static void csi_M(unsigned int nr) +{ + if (nr > video_num_lines) + nr = video_num_lines; + else if (!nr) + nr=1; + while (nr--) + delete_line(); +} + +static int saved_x=0; +static int saved_y=0; + +static void save_cur(void) +{ + saved_x=x; + saved_y=y; +} + +static void restore_cur(void) +{ + gotoxy(saved_x, saved_y); +} + +void con_write(struct tty_struct * tty) +{ + int nr; + char c; + + nr = CHARS(tty->write_q); + while (nr--) { + GETCH(tty->write_q,c); + switch(state) { + case 0: + if (c>31 && c<127) { + if (x>=video_num_columns) { + x -= video_num_columns; + pos -= video_size_row; + lf(); + } + __asm__("movb attr,%%ah\n\t" + "movw %%ax,%1\n\t" + ::"a" (c),"m" (*(short *)pos) + ); + pos += 2; + x++; + } else if (c==27) + state=1; + else if (c==10 || c==11 || c==12) + lf(); + else if (c==13) + cr(); + else if (c==ERASE_CHAR(tty)) + del(); + else if (c==8) { + if (x) { + x--; + pos -= 2; + } + } else if (c==9) { + c=8-(x&7); + x += c; + pos += c<<1; + if (x>video_num_columns) { + x -= video_num_columns; + pos -= video_size_row; + lf(); + } + c=9; + } else if (c==7) + sysbeep(); + break; + case 1: + state=0; + if (c=='[') + state=2; + else if (c=='E') + gotoxy(0,y+1); + else if (c=='M') + ri(); + else if (c=='D') + lf(); + else if (c=='Z') + respond(tty); + else if (x=='7') + save_cur(); + else if (x=='8') + restore_cur(); + break; + case 2: + for(npar=0;npar='0' && c<='9') { + par[npar]=10*par[npar]+c-'0'; + break; + } else state=4; + case 4: + state=0; + switch(c) { + case 'G': case '`': + if (par[0]) par[0]--; + gotoxy(par[0],y); + break; + case 'A': + if (!par[0]) par[0]++; + gotoxy(x,y-par[0]); + break; + case 'B': case 'e': + if (!par[0]) par[0]++; + gotoxy(x,y+par[0]); + break; + case 'C': case 'a': + if (!par[0]) par[0]++; + gotoxy(x+par[0],y); + break; + case 'D': + if (!par[0]) par[0]++; + gotoxy(x-par[0],y); + break; + case 'E': + if (!par[0]) par[0]++; + gotoxy(0,y+par[0]); + break; + case 'F': + if (!par[0]) par[0]++; + gotoxy(0,y-par[0]); + break; + case 'd': + if (par[0]) par[0]--; + gotoxy(x,par[0]); + break; + case 'H': case 'f': + if (par[0]) par[0]--; + if (par[1]) par[1]--; + gotoxy(par[1],par[0]); + break; + case 'J': + csi_J(par[0]); + break; + case 'K': + csi_K(par[0]); + break; + case 'L': + csi_L(par[0]); + break; + case 'M': + csi_M(par[0]); + break; + case 'P': + csi_P(par[0]); + break; + case '@': + csi_at(par[0]); + break; + case 'm': + csi_m(); + break; + case 'r': + if (par[0]) par[0]--; + if (!par[1]) par[1] = video_num_lines; + if (par[0] < par[1] && + par[1] <= video_num_lines) { + top=par[0]; + bottom=par[1]; + } + break; + case 's': + save_cur(); + break; + case 'u': + restore_cur(); + break; + } + } + } + set_cursor(); +} + +/* + * void con_init(void); + * + * This routine initalizes console interrupts, and does nothing + * else. If you want the screen to clear, call tty_write with + * the appropriate escape-sequece. + * + * Reads the information preserved by setup.s to determine the current display + * type and sets everything accordingly. + */ +void con_init(void) +{ + register unsigned char a; + char *display_desc = "????"; + char *display_ptr; + + video_num_columns = ORIG_VIDEO_COLS; + video_size_row = video_num_columns * 2; + video_num_lines = ORIG_VIDEO_LINES; + video_page = ORIG_VIDEO_PAGE; + video_erase_char = 0x0720; + + if (ORIG_VIDEO_MODE == 7) /* Is this a monochrome display? */ + { + video_mem_start = 0xb0000; + video_port_reg = 0x3b4; + video_port_val = 0x3b5; + if ((ORIG_VIDEO_EGA_BX & 0xff) != 0x10) + { + video_type = VIDEO_TYPE_EGAM; + video_mem_end = 0xb8000; + display_desc = "EGAm"; + } + else + { + video_type = VIDEO_TYPE_MDA; + video_mem_end = 0xb2000; + display_desc = "*MDA"; + } + } + else /* If not, it is color. */ + { + video_mem_start = 0xb8000; + video_port_reg = 0x3d4; + video_port_val = 0x3d5; + if ((ORIG_VIDEO_EGA_BX & 0xff) != 0x10) + { + video_type = VIDEO_TYPE_EGAC; + video_mem_end = 0xbc000; + display_desc = "EGAc"; + } + else + { + video_type = VIDEO_TYPE_CGA; + video_mem_end = 0xba000; + display_desc = "*CGA"; + } + } + + /* Let the user known what kind of display driver we are using */ + + display_ptr = ((char *)video_mem_start) + video_size_row - 8; + while (*display_desc) + { + *display_ptr++ = *display_desc++; + display_ptr++; + } + + /* Initialize the variables used for scrolling (mostly EGA/VGA) */ + + origin = video_mem_start; + scr_end = video_mem_start + video_num_lines * video_size_row; + top = 0; + bottom = video_num_lines; + + gotoxy(ORIG_X,ORIG_Y); + set_trap_gate(0x21,&keyboard_interrupt); + outb_p(inb_p(0x21)&0xfd,0x21); + a=inb_p(0x61); + outb_p(a|0x80,0x61); + outb(a,0x61); +} +/* from bsd-net-2: */ + +void sysbeepstop(void) +{ + /* disable counter 2 */ + outb(inb_p(0x61)&0xFC, 0x61); +} + +int beepcount = 0; + +static void sysbeep(void) +{ + /* enable counter 2 */ + outb_p(inb_p(0x61)|3, 0x61); + /* set command for counter 2, 2 byte write */ + outb_p(0xB6, 0x43); + /* send 0x637 for 750 HZ */ + outb_p(0x37, 0x42); + outb(0x06, 0x42); + /* 1/8 second */ + beepcount = HZ/8; +} diff --git a/linux-0.11-lab/4/linux/kernel/chr_drv/console.o b/linux-0.11-lab/4/linux/kernel/chr_drv/console.o new file mode 100644 index 0000000000000000000000000000000000000000..cdb09cf249a683c556a1bd6a57bcc3dbe96270a4 GIT binary patch literal 20896 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" +# 1 "" +# 1 "keyboard.S" + + + + + + + + + + + + + +# 1 "../../include/linux/config.h" 1 + + + + + + + + + + + + + + + + + + + + + +# 36 "../../include/linux/config.h" + +# 47 "../../include/linux/config.h" + +# 14 "keyboard.S" 2 + +.text +.globl keyboard_interrupt + + + + +size = 1024 + +head = 4 +tail = 8 +proc_list = 12 +buf = 16 + +mode: .byte 0 +leds: .byte 2 +e0: .byte 0 + + + + + + +keyboard_interrupt: + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + push %ds + push %es + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + xor %al,%al + inb $0x60,%al + cmpb $0xe0,%al + je set_e0 + cmpb $0xe1,%al + je set_e1 + call key_table(,%eax,4) + movb $0,e0 +e0_e1: inb $0x61,%al + jmp 1f +1: jmp 1f +1: orb $0x80,%al + jmp 1f +1: jmp 1f +1: outb %al,$0x61 + jmp 1f +1: jmp 1f +1: andb $0x7F,%al + outb %al,$0x61 + movb $0x20,%al + outb %al,$0x20 + pushl $0 + call do_tty_interrupt + addl $4,%esp + pop %es + pop %ds + popl %edx + popl %ecx + popl %ebx + popl %eax + iret +set_e0: movb $1,e0 + jmp e0_e1 +set_e1: movb $2,e0 + jmp e0_e1 + + + + + + +put_queue: + pushl %ecx + pushl %edx + movl table_list,%edx # read-queue for console + movl head(%edx),%ecx +1: movb %al,buf(%edx,%ecx) + incl %ecx + andl $size-1,%ecx + cmpl tail(%edx),%ecx # buffer full - discard everything + je 3f + shrdl $8,%ebx,%eax + je 2f + shrl $8,%ebx + jmp 1b +2: movl %ecx,head(%edx) + movl proc_list(%edx),%ecx + testl %ecx,%ecx + je 3f + movl $0,(%ecx) +3: popl %edx + popl %ecx + ret + +ctrl: movb $0x04,%al + jmp 1f +alt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: orb %al,mode + ret +unctrl: movb $0x04,%al + jmp 1f +unalt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: notb %al + andb %al,mode + ret + +lshift: + orb $0x01,mode + ret +unlshift: + andb $0xfe,mode + ret +rshift: + orb $0x02,mode + ret +unrshift: + andb $0xfd,mode + ret + +caps: testb $0x80,mode + jne 1f + xorb $4,leds + xorb $0x40,mode + orb $0x80,mode +set_leds: + call kb_wait + movb $0xed,%al + outb %al,$0x60 + call kb_wait + movb leds,%al + outb %al,$0x60 + ret +uncaps: andb $0x7f,mode + ret +scroll: + xorb $1,leds + jmp set_leds +num: xorb $2,leds + jmp set_leds + + + + + +cursor: + subb $0x47,%al + jb 1f + cmpb $12,%al + ja 1f + jne cur2 + testb $0x0c,mode + je cur2 + testb $0x30,mode + jne reboot +cur2: cmpb $0x01,e0 + je cur + testb $0x02,leds + je cur + testb $0x03,mode + jne cur + xorl %ebx,%ebx + movb num_table(%eax),%al + jmp put_queue +1: ret + +cur: movb cur_table(%eax),%al + cmpb $'9,%al + ja ok_cur + movb $'~,%ah +ok_cur: shll $16,%eax + movw $0x5b1b,%ax + xorl %ebx,%ebx + jmp put_queue + + + + + +num_table: + .ascii "789 456 1230," + +cur_table: + .ascii "HA5 DGC YB623" + + + + +func: + pushl %eax + pushl %ecx + pushl %edx + call show_stat + popl %edx + popl %ecx + popl %eax + subb $0x3B,%al + jb end_func + cmpb $9,%al + jbe ok_func + subb $18,%al + cmpb $10,%al + jb end_func + cmpb $11,%al + ja end_func +ok_func: + cmpl $4,%ecx + jl end_func + movl func_table(,%eax,4),%eax + xorl %ebx,%ebx + jmp put_queue +end_func: + ret + + + + +func_table: + .long 0x415b5b1b,0x425b5b1b,0x435b5b1b,0x445b5b1b + .long 0x455b5b1b,0x465b5b1b,0x475b5b1b,0x485b5b1b + .long 0x495b5b1b,0x4a5b5b1b,0x4b5b5b1b,0x4c5b5b1b + +# 294 "keyboard.S" + +key_map: + .byte 0,27 + .ascii "1234567890-=" + .byte 127,9 + .ascii "qwertyuiop[]" + .byte 13,0 + .ascii "asdfghjkl;'" + .byte '`,0 + .ascii "\\zxcvbnm,./" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 + .byte '-,0,0,0,'+ + .byte 0,0,0,0,0,0,0 + .byte '< + .fill 10,1,0 + + +shift_map: + .byte 0,27 + .ascii "!@#$%^&*()_+" + .byte 127,9 + .ascii "QWERTYUIOP{}" + .byte 13,0 + .ascii "ASDFGHJKL:\"" + .byte '~,0 + .ascii "|ZXCVBNM<>?" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 + .byte '-,0,0,0,'+ + .byte 0,0,0,0,0,0,0 + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 + .fill 16,1,0 + .byte 0,0,0,0,0 + .byte 0,0,0,0,0,0,0 + .byte '| + .fill 10,1,0 + +# 449 "keyboard.S" + + + + +do_self: + lea alt_map,%ebx + testb $0x20,mode + jne 1f + lea shift_map,%ebx + testb $0x03,mode + jne 1f + lea key_map,%ebx +1: movb (%ebx,%eax),%al + orb %al,%al + je none + testb $0x4c,mode + je 2f + cmpb $'a,%al + jb 2f + cmpb $'},%al + ja 2f + subb $32,%al +2: testb $0x0c,mode + je 3f + cmpb $64,%al + jb 3f + cmpb $64+32,%al + jae 3f + subb $64,%al +3: testb $0x10,mode + je 4f + orb $0x80,%al +4: andl $0xff,%eax + xorl %ebx,%ebx + call put_queue +none: ret + + + + + + +minus: cmpb $1,e0 + jne do_self + movl $'/,%eax + xorl %ebx,%ebx + jmp put_queue + + + + + + +key_table: + .long none,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,ctrl,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,lshift,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,minus,rshift,do_self + .long alt,do_self,caps,func + .long func,func,func,func + .long func,func,func,func + .long func,num,scroll,cursor + .long cursor,cursor,do_self,cursor + .long cursor,cursor,do_self,cursor + .long cursor,cursor,cursor,cursor + .long none,none,do_self,func + .long func,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,unctrl,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,unlshift,none + .long none,none,none,none + .long none,none,none,none + .long none,none,unrshift,none + .long unalt,none,uncaps,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + + + + + +kb_wait: + pushl %eax +1: inb $0x64,%al + testb $0x02,%al + jne 1b + popl %eax + ret + + + + +reboot: + call kb_wait + movw $0x1234,0x472 + movb $0xfc,%al + outb %al,$0x64 +die: jmp die diff --git a/linux-0.11-lab/4/linux/kernel/chr_drv/keyboard.S b/linux-0.11-lab/4/linux/kernel/chr_drv/keyboard.S new file mode 100644 index 0000000..25210b4 --- /dev/null +++ b/linux-0.11-lab/4/linux/kernel/chr_drv/keyboard.S @@ -0,0 +1,588 @@ +/* + * linux/kernel/keyboard.S + * + * (C) 1991 Linus Torvalds + */ + +/* + * Thanks to Alfred Leung for US keyboard patches + * Wolfgang Thiel for German keyboard patches + * Marc Corsini for the French keyboard + */ + +#include + +.text +.globl keyboard_interrupt + +/* + * these are for the keyboard read functions + */ +size = 1024 /* must be a power of two ! And MUST be the same + as in tty_io.c !!!! */ +head = 4 +tail = 8 +proc_list = 12 +buf = 16 + +mode: .byte 0 /* caps, alt, ctrl and shift mode */ +leds: .byte 2 /* num-lock, caps, scroll-lock mode (nom-lock on) */ +e0: .byte 0 + +/* + * con_int is the real interrupt routine that reads the + * keyboard scan-code and converts it into the appropriate + * ascii character(s). + */ +keyboard_interrupt: + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + push %ds + push %es + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + xor %al,%al /* %eax is scan code */ + inb $0x60,%al + cmpb $0xe0,%al + je set_e0 + cmpb $0xe1,%al + je set_e1 + call key_table(,%eax,4) + movb $0,e0 +e0_e1: inb $0x61,%al + jmp 1f +1: jmp 1f +1: orb $0x80,%al + jmp 1f +1: jmp 1f +1: outb %al,$0x61 + jmp 1f +1: jmp 1f +1: andb $0x7F,%al + outb %al,$0x61 + movb $0x20,%al + outb %al,$0x20 + pushl $0 + call do_tty_interrupt + addl $4,%esp + pop %es + pop %ds + popl %edx + popl %ecx + popl %ebx + popl %eax + iret +set_e0: movb $1,e0 + jmp e0_e1 +set_e1: movb $2,e0 + jmp e0_e1 + +/* + * This routine fills the buffer with max 8 bytes, taken from + * %ebx:%eax. (%edx is high). The bytes are written in the + * order %al,%ah,%eal,%eah,%bl,%bh ... until %eax is zero. + */ +put_queue: + pushl %ecx + pushl %edx + movl table_list,%edx # read-queue for console + movl head(%edx),%ecx +1: movb %al,buf(%edx,%ecx) + incl %ecx + andl $size-1,%ecx + cmpl tail(%edx),%ecx # buffer full - discard everything + je 3f + shrdl $8,%ebx,%eax + je 2f + shrl $8,%ebx + jmp 1b +2: movl %ecx,head(%edx) + movl proc_list(%edx),%ecx + testl %ecx,%ecx + je 3f + movl $0,(%ecx) +3: popl %edx + popl %ecx + ret + +ctrl: movb $0x04,%al + jmp 1f +alt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: orb %al,mode + ret +unctrl: movb $0x04,%al + jmp 1f +unalt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: notb %al + andb %al,mode + ret + +lshift: + orb $0x01,mode + ret +unlshift: + andb $0xfe,mode + ret +rshift: + orb $0x02,mode + ret +unrshift: + andb $0xfd,mode + ret + +caps: testb $0x80,mode + jne 1f + xorb $4,leds + xorb $0x40,mode + orb $0x80,mode +set_leds: + call kb_wait + movb $0xed,%al /* set leds command */ + outb %al,$0x60 + call kb_wait + movb leds,%al + outb %al,$0x60 + ret +uncaps: andb $0x7f,mode + ret +scroll: + xorb $1,leds + jmp set_leds +num: xorb $2,leds + jmp set_leds + +/* + * curosr-key/numeric keypad cursor keys are handled here. + * checking for numeric keypad etc. + */ +cursor: + subb $0x47,%al + jb 1f + cmpb $12,%al + ja 1f + jne cur2 /* check for ctrl-alt-del */ + testb $0x0c,mode + je cur2 + testb $0x30,mode + jne reboot +cur2: cmpb $0x01,e0 /* e0 forces cursor movement */ + je cur + testb $0x02,leds /* not num-lock forces cursor */ + je cur + testb $0x03,mode /* shift forces cursor */ + jne cur + xorl %ebx,%ebx + movb num_table(%eax),%al + jmp put_queue +1: ret + +cur: movb cur_table(%eax),%al + cmpb $'9,%al + ja ok_cur + movb $'~,%ah +ok_cur: shll $16,%eax + movw $0x5b1b,%ax + xorl %ebx,%ebx + jmp put_queue + +#if defined(KBD_FR) +num_table: + .ascii "789 456 1230." +#else +num_table: + .ascii "789 456 1230," +#endif +cur_table: + .ascii "HA5 DGC YB623" + +/* + * this routine handles function keys + */ +func: + pushl %eax + pushl %ecx + pushl %edx + call show_stat + popl %edx + popl %ecx + popl %eax + subb $0x3B,%al + jb end_func + cmpb $9,%al + jbe ok_func + subb $18,%al + cmpb $10,%al + jb end_func + cmpb $11,%al + ja end_func +ok_func: + cmpl $4,%ecx /* check that there is enough room */ + jl end_func + movl func_table(,%eax,4),%eax + xorl %ebx,%ebx + jmp put_queue +end_func: + ret + +/* + * function keys send F1:'esc [ [ A' F2:'esc [ [ B' etc. + */ +func_table: + .long 0x415b5b1b,0x425b5b1b,0x435b5b1b,0x445b5b1b + .long 0x455b5b1b,0x465b5b1b,0x475b5b1b,0x485b5b1b + .long 0x495b5b1b,0x4a5b5b1b,0x4b5b5b1b,0x4c5b5b1b + +#if defined(KBD_FINNISH) +key_map: + .byte 0,27 + .ascii "1234567890+'" + .byte 127,9 + .ascii "qwertyuiop}" + .byte 0,13,0 + .ascii "asdfghjkl|{" + .byte 0,0 + .ascii "'zxcvbnm,.-" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + +shift_map: + .byte 0,27 + .ascii "!\"#$%&/()=?`" + .byte 127,9 + .ascii "QWERTYUIOP]^" + .byte 13,0 + .ascii "ASDFGHJKL\\[" + .byte 0,0 + .ascii "*ZXCVBNM;:_" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + +#elif defined(KBD_US) + +key_map: + .byte 0,27 + .ascii "1234567890-=" + .byte 127,9 + .ascii "qwertyuiop[]" + .byte 13,0 + .ascii "asdfghjkl;'" + .byte '`,0 + .ascii "\\zxcvbnm,./" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + + +shift_map: + .byte 0,27 + .ascii "!@#$%^&*()_+" + .byte 127,9 + .ascii "QWERTYUIOP{}" + .byte 13,0 + .ascii "ASDFGHJKL:\"" + .byte '~,0 + .ascii "|ZXCVBNM<>?" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + +#elif defined(KBD_GR) + +key_map: + .byte 0,27 + .ascii "1234567890\\'" + .byte 127,9 + .ascii "qwertzuiop@+" + .byte 13,0 + .ascii "asdfghjkl[]^" + .byte 0,'# + .ascii "yxcvbnm,.-" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + + +shift_map: + .byte 0,27 + .ascii "!\"#$%&/()=?`" + .byte 127,9 + .ascii "QWERTZUIOP\\*" + .byte 13,0 + .ascii "ASDFGHJKL{}~" + .byte 0,'' + .ascii "YXCVBNM;:_" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte '@,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + + +#elif defined(KBD_FR) + +key_map: + .byte 0,27 + .ascii "&{\"'(-}_/@)=" + .byte 127,9 + .ascii "azertyuiop^$" + .byte 13,0 + .ascii "qsdfghjklm|" + .byte '`,0,42 /* coin sup gauche, don't know, [*|mu] */ + .ascii "wxcvbn,;:!" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + +shift_map: + .byte 0,27 + .ascii "1234567890]+" + .byte 127,9 + .ascii "AZERTYUIOP<>" + .byte 13,0 + .ascii "QSDFGHJKLM%" + .byte '~,0,'# + .ascii "WXCVBN?./\\" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0~#{[|`\\^@]}" + .byte 0,0 + .byte '@,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + +#else +#error "KBD-type not defined" +#endif +/* + * do_self handles "normal" keys, ie keys that don't change meaning + * and which have just one character returns. + */ +do_self: + lea alt_map,%ebx + testb $0x20,mode /* alt-gr */ + jne 1f + lea shift_map,%ebx + testb $0x03,mode + jne 1f + lea key_map,%ebx +1: movb (%ebx,%eax),%al + orb %al,%al + je none + testb $0x4c,mode /* ctrl or caps */ + je 2f + cmpb $'a,%al + jb 2f + cmpb $'},%al + ja 2f + subb $32,%al +2: testb $0x0c,mode /* ctrl */ + je 3f + cmpb $64,%al + jb 3f + cmpb $64+32,%al + jae 3f + subb $64,%al +3: testb $0x10,mode /* left alt */ + je 4f + orb $0x80,%al +4: andl $0xff,%eax + xorl %ebx,%ebx + call put_queue +none: ret + +/* + * minus has a routine of it's own, as a 'E0h' before + * the scan code for minus means that the numeric keypad + * slash was pushed. + */ +minus: cmpb $1,e0 + jne do_self + movl $'/,%eax + xorl %ebx,%ebx + jmp put_queue + +/* + * This table decides which routine to call when a scan-code has been + * gotten. Most routines just call do_self, or none, depending if + * they are make or break. + */ +key_table: + .long none,do_self,do_self,do_self /* 00-03 s0 esc 1 2 */ + .long do_self,do_self,do_self,do_self /* 04-07 3 4 5 6 */ + .long do_self,do_self,do_self,do_self /* 08-0B 7 8 9 0 */ + .long do_self,do_self,do_self,do_self /* 0C-0F + ' bs tab */ + .long do_self,do_self,do_self,do_self /* 10-13 q w e r */ + .long do_self,do_self,do_self,do_self /* 14-17 t y u i */ + .long do_self,do_self,do_self,do_self /* 18-1B o p } ^ */ + .long do_self,ctrl,do_self,do_self /* 1C-1F enter ctrl a s */ + .long do_self,do_self,do_self,do_self /* 20-23 d f g h */ + .long do_self,do_self,do_self,do_self /* 24-27 j k l | */ + .long do_self,do_self,lshift,do_self /* 28-2B { para lshift , */ + .long do_self,do_self,do_self,do_self /* 2C-2F z x c v */ + .long do_self,do_self,do_self,do_self /* 30-33 b n m , */ + .long do_self,minus,rshift,do_self /* 34-37 . - rshift * */ + .long alt,do_self,caps,func /* 38-3B alt sp caps f1 */ + .long func,func,func,func /* 3C-3F f2 f3 f4 f5 */ + .long func,func,func,func /* 40-43 f6 f7 f8 f9 */ + .long func,num,scroll,cursor /* 44-47 f10 num scr home */ + .long cursor,cursor,do_self,cursor /* 48-4B up pgup - left */ + .long cursor,cursor,do_self,cursor /* 4C-4F n5 right + end */ + .long cursor,cursor,cursor,cursor /* 50-53 dn pgdn ins del */ + .long none,none,do_self,func /* 54-57 sysreq ? < f11 */ + .long func,none,none,none /* 58-5B f12 ? ? ? */ + .long none,none,none,none /* 5C-5F ? ? ? ? */ + .long none,none,none,none /* 60-63 ? ? ? ? */ + .long none,none,none,none /* 64-67 ? ? ? ? */ + .long none,none,none,none /* 68-6B ? ? ? ? */ + .long none,none,none,none /* 6C-6F ? ? ? ? */ + .long none,none,none,none /* 70-73 ? ? ? ? */ + .long none,none,none,none /* 74-77 ? ? ? ? */ + .long none,none,none,none /* 78-7B ? ? ? ? */ + .long none,none,none,none /* 7C-7F ? ? ? ? */ + .long none,none,none,none /* 80-83 ? br br br */ + .long none,none,none,none /* 84-87 br br br br */ + .long none,none,none,none /* 88-8B br br br br */ + .long none,none,none,none /* 8C-8F br br br br */ + .long none,none,none,none /* 90-93 br br br br */ + .long none,none,none,none /* 94-97 br br br br */ + .long none,none,none,none /* 98-9B br br br br */ + .long none,unctrl,none,none /* 9C-9F br unctrl br br */ + .long none,none,none,none /* A0-A3 br br br br */ + .long none,none,none,none /* A4-A7 br br br br */ + .long none,none,unlshift,none /* A8-AB br br unlshift br */ + .long none,none,none,none /* AC-AF br br br br */ + .long none,none,none,none /* B0-B3 br br br br */ + .long none,none,unrshift,none /* B4-B7 br br unrshift br */ + .long unalt,none,uncaps,none /* B8-BB unalt br uncaps br */ + .long none,none,none,none /* BC-BF br br br br */ + .long none,none,none,none /* C0-C3 br br br br */ + .long none,none,none,none /* C4-C7 br br br br */ + .long none,none,none,none /* C8-CB br br br br */ + .long none,none,none,none /* CC-CF br br br br */ + .long none,none,none,none /* D0-D3 br br br br */ + .long none,none,none,none /* D4-D7 br br br br */ + .long none,none,none,none /* D8-DB br ? ? ? */ + .long none,none,none,none /* DC-DF ? ? ? ? */ + .long none,none,none,none /* E0-E3 e0 e1 ? ? */ + .long none,none,none,none /* E4-E7 ? ? ? ? */ + .long none,none,none,none /* E8-EB ? ? ? ? */ + .long none,none,none,none /* EC-EF ? ? ? ? */ + .long none,none,none,none /* F0-F3 ? ? ? ? */ + .long none,none,none,none /* F4-F7 ? ? ? ? */ + .long none,none,none,none /* F8-FB ? ? ? ? */ + .long none,none,none,none /* FC-FF ? ? ? ? */ + +/* + * kb_wait waits for the keyboard controller buffer to empty. + * there is no timeout - if the buffer doesn't empty, we hang. + */ +kb_wait: + pushl %eax +1: inb $0x64,%al + testb $0x02,%al + jne 1b + popl %eax + ret +/* + * This routine reboots the machine by asking the keyboard + * controller to pulse the reset-line low. + */ +reboot: + call kb_wait + movw $0x1234,0x472 /* don't do memory check */ + movb $0xfc,%al /* pulse reset and A20 low */ + outb %al,$0x64 +die: jmp die diff --git a/linux-0.11-lab/4/linux/kernel/chr_drv/rs_io.o b/linux-0.11-lab/4/linux/kernel/chr_drv/rs_io.o new file mode 100644 index 0000000000000000000000000000000000000000..9d7d5b3a22aa1a7d33dea95b723af176ee68e951 GIT binary patch literal 1320 zcma)5O=}ZT6upy7lN1_>vDAuUi$oC$(TZ-YF8rt{7SvR*(+bl`=7mYg$1w9^jTe}J1pL8J+VS-DUc@11#5ry}TuH|L!9&O7g8W*$#YU6UjU z!jd2kzZJlJAu zYUu}^X)*0615dy3#7CS5;3%o*n6o2-mX*|mBJ()SkJ>Kxy3mDOdS@N-cB{sLjja`nuw?{k1!T?BECWK1Ur++2eHxq=#!x{gli&& zBRH@@L{yj;>c8RMuaxqliKJ!!PW(mv0M`reH^_6neMo3eLAl-mBy=A^x!y36flz|$ z9Yaq056bmU5ZT?V>*Z0VgF%1b96oaqeG&Pkh$c>dL{JjkL^3ZF1^Vqn>-rt20MOw)mDl`5E4qoh_V zHiu%f3^vy+-ZaTqsdKQH=_9M_uuwBq{86e5Y7L#$RJ8J@4U1NVGqq%B7P>V(VAV>U z?KNO{nOQ2UnY@MR;}pv*t7+mQ_L+$Cmk2hbH&o7BkuiEb(opct5uPWFopkSn(*o}a PoD +#include +#include +#include + +#define WAKEUP_CHARS (TTY_BUF_SIZE/4) + +extern void rs1_interrupt(void); +extern void rs2_interrupt(void); + +static void init(int port) +{ + outb_p(0x80,port+3); /* set DLAB of line control reg */ + outb_p(0x30,port); /* LS of divisor (48 -> 2400 bps */ + outb_p(0x00,port+1); /* MS of divisor */ + outb_p(0x03,port+3); /* reset DLAB */ + outb_p(0x0b,port+4); /* set DTR,RTS, OUT_2 */ + outb_p(0x0d,port+1); /* enable all intrs but writes */ + (void)inb(port); /* read data port to reset things (?) */ +} + +void rs_init(void) +{ + set_intr_gate(0x24,rs1_interrupt); + set_intr_gate(0x23,rs2_interrupt); + init(tty_table[1].read_q.data); + init(tty_table[2].read_q.data); + outb(inb_p(0x21)&0xE7,0x21); +} + +/* + * This routine gets called when tty_write has put something into + * the write_queue. It must check wheter the queue is empty, and + * set the interrupt register accordingly + * + * void _rs_write(struct tty_struct * tty); + */ +void rs_write(struct tty_struct * tty) +{ + cli(); + if (!EMPTY(tty->write_q)) + outb(inb_p(tty->write_q.data+1)|0x02,tty->write_q.data+1); + sti(); +} diff --git a/linux-0.11-lab/4/linux/kernel/chr_drv/serial.o b/linux-0.11-lab/4/linux/kernel/chr_drv/serial.o new file mode 100644 index 0000000000000000000000000000000000000000..bf80e08be94a19c3982f10989e20a6e929a1d240 GIT binary patch literal 6752 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 +#include +#include + +#define ALRMMASK (1<<(SIGALRM-1)) +#define KILLMASK (1<<(SIGKILL-1)) +#define INTMASK (1<<(SIGINT-1)) +#define QUITMASK (1<<(SIGQUIT-1)) +#define TSTPMASK (1<<(SIGTSTP-1)) + +#include +#include +#include +#include + +#define _L_FLAG(tty,f) ((tty)->termios.c_lflag & f) +#define _I_FLAG(tty,f) ((tty)->termios.c_iflag & f) +#define _O_FLAG(tty,f) ((tty)->termios.c_oflag & f) + +#define L_CANON(tty) _L_FLAG((tty),ICANON) +#define L_ISIG(tty) _L_FLAG((tty),ISIG) +#define L_ECHO(tty) _L_FLAG((tty),ECHO) +#define L_ECHOE(tty) _L_FLAG((tty),ECHOE) +#define L_ECHOK(tty) _L_FLAG((tty),ECHOK) +#define L_ECHOCTL(tty) _L_FLAG((tty),ECHOCTL) +#define L_ECHOKE(tty) _L_FLAG((tty),ECHOKE) + +#define I_UCLC(tty) _I_FLAG((tty),IUCLC) +#define I_NLCR(tty) _I_FLAG((tty),INLCR) +#define I_CRNL(tty) _I_FLAG((tty),ICRNL) +#define I_NOCR(tty) _I_FLAG((tty),IGNCR) + +#define O_POST(tty) _O_FLAG((tty),OPOST) +#define O_NLCR(tty) _O_FLAG((tty),ONLCR) +#define O_CRNL(tty) _O_FLAG((tty),OCRNL) +#define O_NLRET(tty) _O_FLAG((tty),ONLRET) +#define O_LCUC(tty) _O_FLAG((tty),OLCUC) + +struct tty_struct tty_table[] = { + { + {ICRNL, /* change incoming CR to NL */ + OPOST|ONLCR, /* change outgoing NL to CRNL */ + 0, + ISIG | ICANON | ECHO | ECHOCTL | ECHOKE, + 0, /* console termio */ + INIT_C_CC}, + 0, /* initial pgrp */ + 0, /* initial stopped */ + con_write, + {0,0,0,0,""}, /* console read-queue */ + {0,0,0,0,""}, /* console write-queue */ + {0,0,0,0,""} /* console secondary queue */ + },{ + {0, /* no translation */ + 0, /* no translation */ + B2400 | CS8, + 0, + 0, + INIT_C_CC}, + 0, + 0, + rs_write, + {0x3f8,0,0,0,""}, /* rs 1 */ + {0x3f8,0,0,0,""}, + {0,0,0,0,""} + },{ + {0, /* no translation */ + 0, /* no translation */ + B2400 | CS8, + 0, + 0, + INIT_C_CC}, + 0, + 0, + rs_write, + {0x2f8,0,0,0,""}, /* rs 2 */ + {0x2f8,0,0,0,""}, + {0,0,0,0,""} + } +}; + +/* + * these are the tables used by the machine code handlers. + * you can implement pseudo-tty's or something by changing + * them. Currently not done. + */ +struct tty_queue * table_list[]={ + &tty_table[0].read_q, &tty_table[0].write_q, + &tty_table[1].read_q, &tty_table[1].write_q, + &tty_table[2].read_q, &tty_table[2].write_q + }; + +void tty_init(void) +{ + rs_init(); + con_init(); +} + +void tty_intr(struct tty_struct * tty, int mask) +{ + int i; + + if (tty->pgrp <= 0) + return; + for (i=0;ipgrp==tty->pgrp) + task[i]->signal |= mask; +} + +static void sleep_if_empty(struct tty_queue * queue) +{ + cli(); + while (!current->signal && EMPTY(*queue)) + interruptible_sleep_on(&queue->proc_list); + sti(); +} + +static void sleep_if_full(struct tty_queue * queue) +{ + if (!FULL(*queue)) + return; + cli(); + while (!current->signal && LEFT(*queue)<128) + interruptible_sleep_on(&queue->proc_list); + sti(); +} + +void wait_for_keypress(void) +{ + sleep_if_empty(&tty_table[0].secondary); +} + +void copy_to_cooked(struct tty_struct * tty) +{ + signed char c; + + while (!EMPTY(tty->read_q) && !FULL(tty->secondary)) { + GETCH(tty->read_q,c); + if (c==13) + if (I_CRNL(tty)) + c=10; + else if (I_NOCR(tty)) + continue; + else ; + else if (c==10 && I_NLCR(tty)) + c=13; + if (I_UCLC(tty)) + c=tolower(c); + if (L_CANON(tty)) { + if (c==KILL_CHAR(tty)) { + /* deal with killing the input line */ + while(!(EMPTY(tty->secondary) || + (c=LAST(tty->secondary))==10 || + c==EOF_CHAR(tty))) { + if (L_ECHO(tty)) { + if (c<32) + PUTCH(127,tty->write_q); + PUTCH(127,tty->write_q); + tty->write(tty); + } + DEC(tty->secondary.head); + } + continue; + } + if (c==ERASE_CHAR(tty)) { + if (EMPTY(tty->secondary) || + (c=LAST(tty->secondary))==10 || + c==EOF_CHAR(tty)) + continue; + if (L_ECHO(tty)) { + if (c<32) + PUTCH(127,tty->write_q); + PUTCH(127,tty->write_q); + tty->write(tty); + } + DEC(tty->secondary.head); + continue; + } + if (c==STOP_CHAR(tty)) { + tty->stopped=1; + continue; + } + if (c==START_CHAR(tty)) { + tty->stopped=0; + continue; + } + } + if (L_ISIG(tty)) { + if (c==INTR_CHAR(tty)) { + tty_intr(tty,INTMASK); + continue; + } + if (c==QUIT_CHAR(tty)) { + tty_intr(tty,QUITMASK); + continue; + } + } + if (c==10 || c==EOF_CHAR(tty)) + tty->secondary.data++; + if (L_ECHO(tty)) { + if (c==10) { + PUTCH(10,tty->write_q); + PUTCH(13,tty->write_q); + } else if (c<32) { + if (L_ECHOCTL(tty)) { + PUTCH('^',tty->write_q); + PUTCH(c+64,tty->write_q); + } + } else + PUTCH(c,tty->write_q); + tty->write(tty); + } + PUTCH(c,tty->secondary); + } + wake_up(&tty->secondary.proc_list); +} + +int tty_read(unsigned channel, char * buf, int nr) +{ + struct tty_struct * tty; + char c, * b=buf; + int minimum,time,flag=0; + long oldalarm; + + if (channel>2 || nr<0) return -1; + tty = &tty_table[channel]; + oldalarm = current->alarm; + time = 10L*tty->termios.c_cc[VTIME]; + minimum = tty->termios.c_cc[VMIN]; + if (time && !minimum) { + minimum=1; + if (flag=(!oldalarm || time+jiffiesalarm = time+jiffies; + } + if (minimum>nr) + minimum=nr; + while (nr>0) { + if (flag && (current->signal & ALRMMASK)) { + current->signal &= ~ALRMMASK; + break; + } + if (current->signal) + break; + if (EMPTY(tty->secondary) || (L_CANON(tty) && + !tty->secondary.data && LEFT(tty->secondary)>20)) { + sleep_if_empty(&tty->secondary); + continue; + } + do { + GETCH(tty->secondary,c); + if (c==EOF_CHAR(tty) || c==10) + tty->secondary.data--; + if (c==EOF_CHAR(tty) && L_CANON(tty)) + return (b-buf); + else { + put_fs_byte(c,b++); + if (!--nr) + break; + } + } while (nr>0 && !EMPTY(tty->secondary)); + if (time && !L_CANON(tty)) + if (flag=(!oldalarm || time+jiffiesalarm = time+jiffies; + else + current->alarm = oldalarm; + if (L_CANON(tty)) { + if (b-buf) + break; + } else if (b-buf >= minimum) + break; + } + current->alarm = oldalarm; + if (current->signal && !(b-buf)) + return -EINTR; + return (b-buf); +} + +int tty_write(unsigned channel, char * buf, int nr) +{ + static cr_flag=0; + struct tty_struct * tty; + char c, *b=buf; + + if (channel>2 || nr<0) return -1; + tty = channel + tty_table; + while (nr>0) { + sleep_if_full(&tty->write_q); + if (current->signal) + break; + while (nr>0 && !FULL(tty->write_q)) { + c=get_fs_byte(b); + if (O_POST(tty)) { + if (c=='\r' && O_CRNL(tty)) + c='\n'; + else if (c=='\n' && O_NLRET(tty)) + c='\r'; + if (c=='\n' && !cr_flag && O_NLCR(tty)) { + cr_flag = 1; + PUTCH(13,tty->write_q); + continue; + } + if (O_LCUC(tty)) + c=toupper(c); + } + b++; nr--; + cr_flag = 0; + PUTCH(c,tty->write_q); + } + tty->write(tty); + if (nr>0) + schedule(); + } + return (b-buf); +} + +/* + * Jeh, sometimes I really like the 386. + * This routine is called from an interrupt, + * and there should be absolutely no problem + * with sleeping even in an interrupt (I hope). + * Of course, if somebody proves me wrong, I'll + * hate intel for all time :-). We'll have to + * be careful and see to reinstating the interrupt + * chips before calling this, though. + * + * I don't think we sleep here under normal circumstances + * anyway, which is good, as the task sleeping might be + * totally innocent. + */ +void do_tty_interrupt(int tty) +{ + copy_to_cooked(tty_table+tty); +} + +void chr_dev_init(void) +{ +} diff --git a/linux-0.11-lab/4/linux/kernel/chr_drv/tty_io.o b/linux-0.11-lab/4/linux/kernel/chr_drv/tty_io.o new file mode 100644 index 0000000000000000000000000000000000000000..37e2b15961ebc5713d826d6c25e53571ac6fbb83 GIT binary patch literal 22504 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 O^kQA0pRj`M3jQCx0hyNo literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/kernel/chr_drv/tty_ioctl.c b/linux-0.11-lab/4/linux/kernel/chr_drv/tty_ioctl.c new file mode 100644 index 0000000..e4e3745 --- /dev/null +++ b/linux-0.11-lab/4/linux/kernel/chr_drv/tty_ioctl.c @@ -0,0 +1,204 @@ +/* + * linux/kernel/chr_drv/tty_ioctl.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include + +#include +#include +#include + +#include +#include +#include + +static unsigned short quotient[] = { + 0, 2304, 1536, 1047, 857, + 768, 576, 384, 192, 96, + 64, 48, 24, 12, 6, 3 +}; + +static void change_speed(struct tty_struct * tty) +{ + unsigned short port,quot; + + if (!(port = tty->read_q.data)) + return; + quot = quotient[tty->termios.c_cflag & CBAUD]; + cli(); + outb_p(0x80,port+3); /* set DLAB */ + outb_p(quot & 0xff,port); /* LS of divisor */ + outb_p(quot >> 8,port+1); /* MS of divisor */ + outb(0x03,port+3); /* reset DLAB */ + sti(); +} + +static void flush(struct tty_queue * queue) +{ + cli(); + queue->head = queue->tail; + sti(); +} + +static void wait_until_sent(struct tty_struct * tty) +{ + /* do nothing - not implemented */ +} + +static void send_break(struct tty_struct * tty) +{ + /* do nothing - not implemented */ +} + +static int get_termios(struct tty_struct * tty, struct termios * termios) +{ + int i; + + verify_area(termios, sizeof (*termios)); + for (i=0 ; i< (sizeof (*termios)) ; i++) + put_fs_byte( ((char *)&tty->termios)[i] , i+(char *)termios ); + return 0; +} + +static int set_termios(struct tty_struct * tty, struct termios * termios) +{ + int i; + + for (i=0 ; i< (sizeof (*termios)) ; i++) + ((char *)&tty->termios)[i]=get_fs_byte(i+(char *)termios); + change_speed(tty); + return 0; +} + +static int get_termio(struct tty_struct * tty, struct termio * termio) +{ + int i; + struct termio tmp_termio; + + verify_area(termio, sizeof (*termio)); + tmp_termio.c_iflag = tty->termios.c_iflag; + tmp_termio.c_oflag = tty->termios.c_oflag; + tmp_termio.c_cflag = tty->termios.c_cflag; + tmp_termio.c_lflag = tty->termios.c_lflag; + tmp_termio.c_line = tty->termios.c_line; + for(i=0 ; i < NCC ; i++) + tmp_termio.c_cc[i] = tty->termios.c_cc[i]; + for (i=0 ; i< (sizeof (*termio)) ; i++) + put_fs_byte( ((char *)&tmp_termio)[i] , i+(char *)termio ); + return 0; +} + +/* + * This only works as the 386 is low-byt-first + */ +static int set_termio(struct tty_struct * tty, struct termio * termio) +{ + int i; + struct termio tmp_termio; + + for (i=0 ; i< (sizeof (*termio)) ; i++) + ((char *)&tmp_termio)[i]=get_fs_byte(i+(char *)termio); + *(unsigned short *)&tty->termios.c_iflag = tmp_termio.c_iflag; + *(unsigned short *)&tty->termios.c_oflag = tmp_termio.c_oflag; + *(unsigned short *)&tty->termios.c_cflag = tmp_termio.c_cflag; + *(unsigned short *)&tty->termios.c_lflag = tmp_termio.c_lflag; + tty->termios.c_line = tmp_termio.c_line; + for(i=0 ; i < NCC ; i++) + tty->termios.c_cc[i] = tmp_termio.c_cc[i]; + change_speed(tty); + return 0; +} + +int tty_ioctl(int dev, int cmd, int arg) +{ + struct tty_struct * tty; + if (MAJOR(dev) == 5) { + dev=current->tty; + if (dev<0) + panic("tty_ioctl: dev<0"); + } else + dev=MINOR(dev); + tty = dev + tty_table; + switch (cmd) { + case TCGETS: + return get_termios(tty,(struct termios *) arg); + case TCSETSF: + flush(&tty->read_q); /* fallthrough */ + case TCSETSW: + wait_until_sent(tty); /* fallthrough */ + case TCSETS: + return set_termios(tty,(struct termios *) arg); + case TCGETA: + return get_termio(tty,(struct termio *) arg); + case TCSETAF: + flush(&tty->read_q); /* fallthrough */ + case TCSETAW: + wait_until_sent(tty); /* fallthrough */ + case TCSETA: + return set_termio(tty,(struct termio *) arg); + case TCSBRK: + if (!arg) { + wait_until_sent(tty); + send_break(tty); + } + return 0; + case TCXONC: + return -EINVAL; /* not implemented */ + case TCFLSH: + if (arg==0) + flush(&tty->read_q); + else if (arg==1) + flush(&tty->write_q); + else if (arg==2) { + flush(&tty->read_q); + flush(&tty->write_q); + } else + return -EINVAL; + return 0; + case TIOCEXCL: + return -EINVAL; /* not implemented */ + case TIOCNXCL: + return -EINVAL; /* not implemented */ + case TIOCSCTTY: + return -EINVAL; /* set controlling term NI */ + case TIOCGPGRP: + verify_area((void *) arg,4); + put_fs_long(tty->pgrp,(unsigned long *) arg); + return 0; + case TIOCSPGRP: + tty->pgrp=get_fs_long((unsigned long *) arg); + return 0; + case TIOCOUTQ: + verify_area((void *) arg,4); + put_fs_long(CHARS(tty->write_q),(unsigned long *) arg); + return 0; + case TIOCINQ: + verify_area((void *) arg,4); + put_fs_long(CHARS(tty->secondary), + (unsigned long *) arg); + return 0; + case TIOCSTI: + return -EINVAL; /* not implemented */ + case TIOCGWINSZ: + return -EINVAL; /* not implemented */ + case TIOCSWINSZ: + return -EINVAL; /* not implemented */ + case TIOCMGET: + return -EINVAL; /* not implemented */ + case TIOCMBIS: + return -EINVAL; /* not implemented */ + case TIOCMBIC: + return -EINVAL; /* not implemented */ + case TIOCMSET: + return -EINVAL; /* not implemented */ + case TIOCGSOFTCAR: + return -EINVAL; /* not implemented */ + case TIOCSSOFTCAR: + return -EINVAL; /* not implemented */ + default: + return -EINVAL; + } +} diff --git a/linux-0.11-lab/4/linux/kernel/chr_drv/tty_ioctl.o b/linux-0.11-lab/4/linux/kernel/chr_drv/tty_ioctl.o new file mode 100644 index 0000000000000000000000000000000000000000..6fcf766d95e129c53038533553e2124de8516b4b GIT binary patch literal 10648 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/kernel/exit.c b/linux-0.11-lab/4/linux/kernel/exit.c new file mode 100644 index 0000000..2406ebe --- /dev/null +++ b/linux-0.11-lab/4/linux/kernel/exit.c @@ -0,0 +1,197 @@ +/* + * linux/kernel/exit.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include +#include + +#include +#include +#include +#include + +int sys_pause(void); +int sys_close(int fd); + +void release(struct task_struct * p) +{ + int i; + + if (!p) + return; + for (i=1 ; i32) + return -EINVAL; + if (priv || (current->euid==p->euid) || suser()) + p->signal |= (1<<(sig-1)); + else + return -EPERM; + return 0; +} + +static void kill_session(void) +{ + struct task_struct **p = NR_TASKS + task; + + while (--p > &FIRST_TASK) { + if (*p && (*p)->session == current->session) + (*p)->signal |= 1<<(SIGHUP-1); + } +} + +/* + * XXX need to check permissions needed to send signals to process + * groups, etc. etc. kill() permissions semantics are tricky! + */ +int sys_kill(int pid,int sig) +{ + struct task_struct **p = NR_TASKS + task; + int err, retval = 0; + + if (!pid) while (--p > &FIRST_TASK) { + if (*p && (*p)->pgrp == current->pid) + if (err=send_sig(sig,*p,1)) + retval = err; + } else if (pid>0) while (--p > &FIRST_TASK) { + if (*p && (*p)->pid == pid) + if (err=send_sig(sig,*p,0)) + retval = err; + } else if (pid == -1) while (--p > &FIRST_TASK) + if (err = send_sig(sig,*p,0)) + retval = err; + else while (--p > &FIRST_TASK) + if (*p && (*p)->pgrp == -pid) + if (err = send_sig(sig,*p,0)) + retval = err; + return retval; +} + +static void tell_father(int pid) +{ + int i; + + if (pid) + for (i=0;ipid != pid) + continue; + task[i]->signal |= (1<<(SIGCHLD-1)); + return; + } +/* if we don't find any fathers, we just release ourselves */ +/* This is not really OK. Must change it to make father 1 */ + printk("BAD BAD - no father found\n\r"); + release(current); +} + +int do_exit(long code) +{ + int i; + + free_page_tables(get_base(current->ldt[1]),get_limit(0x0f)); + free_page_tables(get_base(current->ldt[2]),get_limit(0x17)); + for (i=0 ; ifather == current->pid) { + task[i]->father = 1; + if (task[i]->state == TASK_ZOMBIE) + /* assumption task[1] is always init */ + (void) send_sig(SIGCHLD, task[1], 1); + } + for (i=0 ; ifilp[i]) + sys_close(i); + iput(current->pwd); + current->pwd=NULL; + iput(current->root); + current->root=NULL; + iput(current->executable); + current->executable=NULL; + if (current->leader && current->tty >= 0) + tty_table[current->tty].pgrp = 0; + if (last_task_used_math == current) + last_task_used_math = NULL; + if (current->leader) + kill_session(); + current->state = TASK_ZOMBIE; + current->exit_code = code; + tell_father(current->father); + schedule(); + return (-1); /* just to suppress warnings */ +} + +int sys_exit(int error_code) +{ + return do_exit((error_code&0xff)<<8); +} + +int sys_waitpid(pid_t pid,unsigned long * stat_addr, int options) +{ + int flag, code; + struct task_struct ** p; + + verify_area(stat_addr,4); +repeat: + flag=0; + for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) { + if (!*p || *p == current) + continue; + if ((*p)->father != current->pid) + continue; + if (pid>0) { + if ((*p)->pid != pid) + continue; + } else if (!pid) { + if ((*p)->pgrp != current->pgrp) + continue; + } else if (pid != -1) { + if ((*p)->pgrp != -pid) + continue; + } + switch ((*p)->state) { + case TASK_STOPPED: + if (!(options & WUNTRACED)) + continue; + put_fs_long(0x7f,stat_addr); + return (*p)->pid; + case TASK_ZOMBIE: + current->cutime += (*p)->utime; + current->cstime += (*p)->stime; + flag = (*p)->pid; + code = (*p)->exit_code; + release(*p); + put_fs_long(code,stat_addr); + return flag; + default: + flag=1; + continue; + } + } + if (flag) { + if (options & WNOHANG) + return 0; + current->state=TASK_INTERRUPTIBLE; + schedule(); + if (!(current->signal &= ~(1<<(SIGCHLD-1)))) + goto repeat; + else + return -EINTR; + } + return -ECHILD; +} + + diff --git a/linux-0.11-lab/4/linux/kernel/exit.o b/linux-0.11-lab/4/linux/kernel/exit.o new file mode 100644 index 0000000000000000000000000000000000000000..97c5057fd4da000378b2c23ca0dba2b274e9b855 GIT binary patch literal 11164 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 + +#include +#include +#include +#include + +extern void write_verify(unsigned long address); + +long last_pid=0; + +void verify_area(void * addr,int size) +{ + unsigned long start; + + start = (unsigned long) addr; + size += start & 0xfff; + start &= 0xfffff000; + start += get_base(current->ldt[2]); + while (size>0) { + size -= 4096; + write_verify(start); + start += 4096; + } +} + +int copy_mem(int nr,struct task_struct * p) +{ + unsigned long old_data_base,new_data_base,data_limit; + unsigned long old_code_base,new_code_base,code_limit; + + code_limit=get_limit(0x0f); + data_limit=get_limit(0x17); + old_code_base = get_base(current->ldt[1]); + old_data_base = get_base(current->ldt[2]); + if (old_data_base != old_code_base) + panic("We don't support separate I&D"); + if (data_limit < code_limit) + panic("Bad data_limit"); + new_data_base = new_code_base = nr * 0x4000000; + p->start_code = new_code_base; + set_base(p->ldt[1],new_code_base); + set_base(p->ldt[2],new_data_base); + if (copy_page_tables(old_data_base,new_data_base,data_limit)) { + free_page_tables(new_data_base,data_limit); + return -ENOMEM; + } + return 0; +} + +/* + * Ok, this is the main fork-routine. It copies the system process + * information (task[nr]) and sets up the necessary registers. It + * also copies the data segment in it's entirety. + */ +int copy_process(int nr,long ebp,long edi,long esi,long gs,long none, + long ebx,long ecx,long edx, + long fs,long es,long ds, + long eip,long cs,long eflags,long esp,long ss) +{ + struct task_struct *p; + int i; + struct file *f; + + p = (struct task_struct *) get_free_page(); + if (!p) + return -EAGAIN; + task[nr] = p; + __asm__ volatile ("cld"); /* by wyj */ + *p = *current; /* NOTE! this doesn't copy the supervisor stack */ + p->state = TASK_UNINTERRUPTIBLE; + p->pid = last_pid; + p->father = current->pid; + p->counter = p->priority; + p->signal = 0; + p->alarm = 0; + p->leader = 0; /* process leadership doesn't inherit */ + p->utime = p->stime = 0; + p->cutime = p->cstime = 0; + p->start_time = jiffies; + p->tss.back_link = 0; + p->tss.esp0 = PAGE_SIZE + (long) p; + p->tss.ss0 = 0x10; + p->tss.eip = eip; + p->tss.eflags = eflags; + p->tss.eax = 0; + p->tss.ecx = ecx; + p->tss.edx = edx; + p->tss.ebx = ebx; + p->tss.esp = esp; + p->tss.ebp = ebp; + p->tss.esi = esi; + p->tss.edi = edi; + p->tss.es = es & 0xffff; + p->tss.cs = cs & 0xffff; + p->tss.ss = ss & 0xffff; + p->tss.ds = ds & 0xffff; + p->tss.fs = fs & 0xffff; + p->tss.gs = gs & 0xffff; + p->tss.ldt = _LDT(nr); + p->tss.trace_bitmap = 0x80000000; + if (last_task_used_math == current) + __asm__("clts ; fnsave %0"::"m" (p->tss.i387)); + if (copy_mem(nr,p)) { + task[nr] = NULL; + free_page((long) p); + return -EAGAIN; + } + for (i=0; ifilp[i]) + f->f_count++; + if (current->pwd) + current->pwd->i_count++; + if (current->root) + current->root->i_count++; + if (current->executable) + current->executable->i_count++; + set_tss_desc(gdt+(nr<<1)+FIRST_TSS_ENTRY,&(p->tss)); + set_ldt_desc(gdt+(nr<<1)+FIRST_LDT_ENTRY,&(p->ldt)); + p->state = TASK_RUNNING; /* do this last, just in case */ + return last_pid; +} + +int find_empty_process(void) +{ + int i; + + repeat: + if ((++last_pid)<0) last_pid=1; + for(i=0 ; ipid == last_pid) goto repeat; + for(i=1 ; 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/kernel/math/Makefile b/linux-0.11-lab/4/linux/kernel/math/Makefile new file mode 100644 index 0000000..b35d488 --- /dev/null +++ b/linux-0.11-lab/4/linux/kernel/math/Makefile @@ -0,0 +1,43 @@ +# +# Makefile for the FREAX-kernel character device drivers. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). +# + +AR =ar +AS =as +LD =ld +LDFLAGS =-s -x +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -nostdinc -fno-stack-protector -I../../include +CPP =gcc -E -nostdinc -I../../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< + +OBJS = math_emulate.o + +math.a: $(OBJS) + $(AR) rcs math.a $(OBJS) + sync + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: diff --git a/linux-0.11-lab/4/linux/kernel/math/math.a b/linux-0.11-lab/4/linux/kernel/math/math.a new file mode 100644 index 0000000000000000000000000000000000000000..f92fb43a9c019f8e75bf744c65f88b59c8d4ba88 GIT binary patch literal 6628 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 + +#include +#include +#include + +void math_emulate(long edi, long esi, long ebp, long sys_call_ret, + long eax,long ebx,long ecx,long edx, + unsigned short fs,unsigned short es,unsigned short ds, + unsigned long eip,unsigned short cs,unsigned long eflags, + unsigned short ss, unsigned long esp) +{ + unsigned char first, second; + +/* 0x0007 means user code space */ + if (cs != 0x000F) { + printk("math_emulate: %04x:%08x\n\r",cs,eip); + panic("Math emulation needed in kernel"); + } + first = get_fs_byte((char *)((*&eip)++)); + second = get_fs_byte((char *)((*&eip)++)); + printk("%04x:%08x %02x %02x\n\r",cs,eip-2,first,second); + current->signal |= 1<<(SIGFPE-1); +} + +void math_error(void) +{ + __asm__("fnclex"); + if (last_task_used_math) + last_task_used_math->signal |= 1<<(SIGFPE-1); +} diff --git a/linux-0.11-lab/4/linux/kernel/math/math_emulate.o b/linux-0.11-lab/4/linux/kernel/math/math_emulate.o new file mode 100644 index 0000000000000000000000000000000000000000..8a98b22720edd26bc9b196e2d1b86549665ddef0 GIT binary patch literal 6464 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 + +/* + * This isn't the library routine, it is only used in the kernel. + * as such, we don't care about years<1970 etc, but assume everything + * is ok. Similarly, TZ etc is happily ignored. We just do everything + * as easily as possible. Let's find something public for the library + * routines (although I think minix times is public). + */ +/* + * PS. I hate whoever though up the year 1970 - couldn't they have gotten + * a leap-year instead? I also hate Gregorius, pope or no. I'm grumpy. + */ +#define MINUTE 60 +#define HOUR (60*MINUTE) +#define DAY (24*HOUR) +#define YEAR (365*DAY) + +/* interestingly, we assume leap-years */ +static int month[12] = { + 0, + DAY*(31), + DAY*(31+29), + DAY*(31+29+31), + DAY*(31+29+31+30), + DAY*(31+29+31+30+31), + DAY*(31+29+31+30+31+30), + DAY*(31+29+31+30+31+30+31), + DAY*(31+29+31+30+31+30+31+31), + DAY*(31+29+31+30+31+30+31+31+30), + DAY*(31+29+31+30+31+30+31+31+30+31), + DAY*(31+29+31+30+31+30+31+31+30+31+30) +}; + +long kernel_mktime(struct tm * tm) +{ + long res; + int year; + if (tm->tm_year < 70 ) tm->tm_year += 100; /* gohigh */ + year = tm->tm_year - 70; +/* magic offsets (y+1) needed to get leapyears right.*/ + res = YEAR*year + DAY*((year+1)/4); + res += month[tm->tm_mon]; +/* and (y+2) here. If it wasn't a leap-year, we have to adjust */ + if (tm->tm_mon>1 && ((year+2)%4)) + res -= DAY; + res += DAY*(tm->tm_mday-1); + res += HOUR*tm->tm_hour; + res += MINUTE*tm->tm_min; + res += tm->tm_sec; + return res; +} diff --git a/linux-0.11-lab/4/linux/kernel/mktime.o b/linux-0.11-lab/4/linux/kernel/mktime.o new file mode 100644 index 0000000000000000000000000000000000000000..6694bf8258168567f68b2aba8bfc5ed630e30698 GIT binary patch literal 2872 zcma)8U1%It6h3!mHraGH+f8=c=BL9R=z+QC zJLlZh2X+aMEv_t>trhe7 zs=+FMvsh7H_c`1WH#v6H&lF#_7Ezv9*R)o}g{=tMS}|I;&BYZj{7N|;Z9Xl?_laJb zy7!+sbi64(04lkZ^z#JEw@~X^<|*sGoj9@%qYI3-zKwt5w^gpqUj~T!PEd383^f<8 z5*2O|-T9N6-}eamWL(gJl4$n6A(|h2E>b)kOL|%2Nt}5PFW*T8(P1??!wQYF%COpD zFue+;jqZ;aTKk|*0Ft#II4RZEhrnBa!&WCpF}4Cntxo8-0mrQn^gX~ys}K5K;2vui za3An?3&%40fm0N+LM7Luwrebj!QH%qP@{PFZ$|B0mly;xE>pPX)Jg2cF5~jqj<1=E zhY-iO?9nD!cLZXD-J@6{INm?3=}2O4-(6lqCNC^>iQTb8#EkXFxcneQzY^j ztGFErVTL1-{gDF^k>ECTk{N?AnHY_52(>Xx)Mkr=y}s?i-pK?)jrF|qcrU!#Lu7`1 zFQbQ>HnKtNU{S?{b<<`}KFMAYAtn=WkM5+&M3&Rhc76;Lt)>d3#|T{J#~|E3A@0UH zd6kzHO|T+#TCCnYx$DpU%wJs-Bbgsx@RQRvR@s?bKYSJna`l3rj$BF>73&&%scXkDpCbUrK1xQ`%?p_ zW*V;7@Q;*vxFMzC3&SJ!(8!>#<*R`SFo|;~Nt_Rh{-|ZW&eP)8K+YOAIp2v`(i|5t zd6(__LdDC?kX`p`J}+uibIP{oob|{qJbHHN9lg{A-$Y1?s@gL!-S zBN1mE^5T3tFW>nM@!sQj^Q_aP`$J4UrLA^zH?rA;v#(!9l zgBc)OgxP>F5Bw(!k}2Q7b&W~#cYaM_$_cND?5(5uI+LR7MnXh#w zG`P#%nAqCq-~V;k_#GyCi}wmH8{YxJ+xEdL7= CPoF&i literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/kernel/panic.c b/linux-0.11-lab/4/linux/kernel/panic.c new file mode 100644 index 0000000..7d8a06b --- /dev/null +++ b/linux-0.11-lab/4/linux/kernel/panic.c @@ -0,0 +1,24 @@ +/* + * linux/kernel/panic.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This function is used through-out the kernel (includeinh mm and fs) + * to indicate a major problem. + */ +#include +#include + +void sys_sync(void); /* it's really int */ + +volatile void panic(const char * s) +{ + printk("Kernel panic: %s\n\r",s); + if (current == task[0]) + printk("In swapper task - not syncing\n\r"); + else + sys_sync(); + for(;;); +} diff --git a/linux-0.11-lab/4/linux/kernel/panic.o b/linux-0.11-lab/4/linux/kernel/panic.o new file mode 100644 index 0000000000000000000000000000000000000000..da42b57864ffc04172b2020b3f3f9096af53eb86 GIT binary patch literal 5424 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 D&gTd! literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/kernel/printk.c b/linux-0.11-lab/4/linux/kernel/printk.c new file mode 100644 index 0000000..0daa097 --- /dev/null +++ b/linux-0.11-lab/4/linux/kernel/printk.c @@ -0,0 +1,41 @@ +/* + * linux/kernel/printk.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * When in kernel-mode, we cannot use printf, as fs is liable to + * point to 'interesting' things. Make a printf with fs-saving, and + * all is well. + */ +#include +#include + +#include + +static char buf[1024]; + +extern int vsprintf(char * buf, const char * fmt, va_list args); + +int printk(const char *fmt, ...) +{ + va_list args; + int i; + + va_start(args, fmt); + i=vsprintf(buf,fmt,args); + va_end(args); + __asm__("push %%fs\n\t" + "push %%ds\n\t" + "pop %%fs\n\t" + "pushl %0\n\t" + "pushl $buf\n\t" + "pushl $0\n\t" + "call tty_write\n\t" + "addl $8,%%esp\n\t" + "popl %0\n\t" + "pop %%fs" + ::"r" (i):"ax","cx","dx"); + return i; +} diff --git a/linux-0.11-lab/4/linux/kernel/printk.o b/linux-0.11-lab/4/linux/kernel/printk.o new file mode 100644 index 0000000000000000000000000000000000000000..93ce6e40ca451b8b2b024367e2fd7f575b694368 GIT binary patch literal 2424 zcma)7&2Jk;6o2DgCr+F=bwa44L}e?vC4jtkz$&FcNl74zT1BEwQKbUW+Fsk+*lV-9 zPLry@Ap#ObAoTzO!66j~E?kfhSCAS$gv5Ou_hxtEEfNw>nt8wXJ@aOE z_N^B#y(okrMS?WyOGHgQw3H>Ar3WZWSGNC{eQz;e-d)Vk>@DU?d#m}G-PL>wvi^gf zXV2gNK0G{xoZEXPpBvjhF?RP#ll3=3%l1L)`q*8>=C%)Juisi90ly z>aykdDJiyw91=P9O5ADEu%2|>07X85BF&XXc={4!l&3=tH3#1S8mjc_B(nQ}NevS+ zX2q$@L|V&CXR=~^;Mj4be2}!vx%AWNhz0-DrLfy04cA?ur zdfS82aa)dS7wSE?8aN%-hsx~~{J^TN7rI_2u&Y7GqgKal7(Lf_8m?V4_zbZkpEj(u zmg5KHJGbm$t7}uS*=gHFw^s{_9lzk(H;c&L+bopKxw%5isuWA1qPT8*uH6dra=N4a zR-2X=NkmHv3+Ig4tCgM`^uoOr9`8wM?#;QfSt>sgY6;&}NaEII61P)gdPLWE&{P9z zJ`yH*3>Pw~?ZiT+l(?8lUAUK#--hXLwF9d{rXP4AZz|;3Eiec z$O^M5i?7IF5RtO2K#teF2H_ZVT$lH!>e|3629V~E?;3-Ml+A)1&)0;&c{txNhRXLk zFvsw|nRb!ymk`RCZ9HyAT=~6`G|KE@(H-d7eQUg`kCXV589b>lVJwlj!6Ly5PP@Nmnz+;^@S&-W3E%tEI~ z@kn{1j;@ME+C(083(}ch`{!E#R3zOA&vW cIpTsy{wm_%F-Lt_7ZcwB_FIU!0iJ;T4?BzyrvLx| literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/kernel/sched.c b/linux-0.11-lab/4/linux/kernel/sched.c new file mode 100644 index 0000000..a03c953 --- /dev/null +++ b/linux-0.11-lab/4/linux/kernel/sched.c @@ -0,0 +1,418 @@ +/* + * linux/kernel/sched.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * 'sched.c' is the main kernel file. It contains scheduling primitives + * (sleep_on, wakeup, schedule etc) as well as a number of simple system + * call functions (type getpid(), which just extracts a field from + * current-task + */ +#include +#include +#include +#include +#include +#include +#include + +#include + +#define _S(nr) (1<<((nr)-1)) +#define _BLOCKABLE (~(_S(SIGKILL) | _S(SIGSTOP))) + +void show_task(int nr,struct task_struct * p) +{ + int i,j = 4096-sizeof(struct task_struct); + + printk("%d: pid=%d, state=%d, ",nr,p->pid,p->state); + i=0; + while (i>2 ] ; + +struct { + long * a; + short b; + } stack_start = { & user_stack [PAGE_SIZE>>2] , 0x10 }; +/* + * 'math_state_restore()' saves the current math information in the + * old math state array, and gets the new ones from the current task + */ +void math_state_restore() +{ + if (last_task_used_math == current) + return; + __asm__("fwait"); + if (last_task_used_math) { + __asm__("fnsave %0"::"m" (last_task_used_math->tss.i387)); + } + last_task_used_math=current; + if (current->used_math) { + __asm__("frstor %0"::"m" (current->tss.i387)); + } else { + __asm__("fninit"::); + current->used_math=1; + } +} + +/* + * 'schedule()' is the scheduler function. This is GOOD CODE! There + * probably won't be any reason to change this, as it should work well + * in all circumstances (ie gives IO-bound processes good response etc). + * The one thing you might take a look at is the signal-handler code here. + * + * NOTE!! Task 0 is the 'idle' task, which gets called when no other + * tasks can run. It can not be killed, and it cannot sleep. The 'state' + * information in task[0] is never used. + */ +void schedule(void) +{ + int i,next,c; + struct task_struct ** p; + +/* check alarm, wake up any interruptible tasks that have got a signal */ + + for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) + if (*p) { + if ((*p)->alarm && (*p)->alarm < jiffies) { + (*p)->signal |= (1<<(SIGALRM-1)); + (*p)->alarm = 0; + } + if (((*p)->signal & ~(_BLOCKABLE & (*p)->blocked)) && + (*p)->state==TASK_INTERRUPTIBLE) + (*p)->state=TASK_RUNNING; + } + +/* this is the scheduler proper: */ + + while (1) { + c = -1; + next = 0; + i = NR_TASKS; + p = &task[NR_TASKS]; + while (--i) { + if (!*--p) + continue; + if ((*p)->state == TASK_RUNNING && (*p)->counter > c) + c = (*p)->counter, next = i; + } + if (c) break; + for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) + if (*p) + (*p)->counter = ((*p)->counter >> 1) + + (*p)->priority; + } + switch_to(next); +} + +int sys_pause(void) +{ + current->state = TASK_INTERRUPTIBLE; + schedule(); + return 0; +} + +void sleep_on(struct task_struct **p) +{ + struct task_struct *tmp; + + if (!p) + return; + if (current == &(init_task.task)) + panic("task[0] trying to sleep"); + tmp = *p; + *p = current; + current->state = TASK_UNINTERRUPTIBLE; + schedule(); + if (tmp) + tmp->state=0; +} + +void interruptible_sleep_on(struct task_struct **p) +{ + struct task_struct *tmp; + + if (!p) + return; + if (current == &(init_task.task)) + panic("task[0] trying to sleep"); + tmp=*p; + *p=current; +repeat: current->state = TASK_INTERRUPTIBLE; + schedule(); + if (*p && *p != current) { + (**p).state=0; + goto repeat; + } + *p=NULL; + if (tmp) + tmp->state=0; +} + +void wake_up(struct task_struct **p) +{ + if (p && *p) { + (**p).state=0; + *p=NULL; + } +} + +/* + * OK, here are some floppy things that shouldn't be in the kernel + * proper. They are here because the floppy needs a timer, and this + * was the easiest way of doing it. + */ +static struct task_struct * wait_motor[4] = {NULL,NULL,NULL,NULL}; +static int mon_timer[4]={0,0,0,0}; +static int moff_timer[4]={0,0,0,0}; +unsigned char current_DOR = 0x0C; + +int ticks_to_floppy_on(unsigned int nr) +{ + extern unsigned char selected; + unsigned char mask = 0x10 << nr; + + if (nr>3) + panic("floppy_on: nr>3"); + moff_timer[nr]=10000; /* 100 s = very big :-) */ + cli(); /* use floppy_off to turn it off */ + mask |= current_DOR; + if (!selected) { + mask &= 0xFC; + mask |= nr; + } + if (mask != current_DOR) { + outb(mask,FD_DOR); + if ((mask ^ current_DOR) & 0xf0) + mon_timer[nr] = HZ/2; + else if (mon_timer[nr] < 2) + mon_timer[nr] = 2; + current_DOR = mask; + } + sti(); + return mon_timer[nr]; +} + +void floppy_on(unsigned int nr) +{ + cli(); + while (ticks_to_floppy_on(nr)) + sleep_on(nr+wait_motor); + sti(); +} + +void floppy_off(unsigned int nr) +{ + moff_timer[nr]=3*HZ; +} + +void do_floppy_timer(void) +{ + int i; + unsigned char mask = 0x10; + + for (i=0 ; i<4 ; i++,mask <<= 1) { + if (!(mask & current_DOR)) + continue; + if (mon_timer[i]) { + if (!--mon_timer[i]) + wake_up(i+wait_motor); + } else if (!moff_timer[i]) { + current_DOR &= ~mask; + outb(current_DOR,FD_DOR); + } else + moff_timer[i]--; + } +} + +#define TIME_REQUESTS 64 + +static struct timer_list { + long jiffies; + void (*fn)(); + struct timer_list * next; +} timer_list[TIME_REQUESTS], * next_timer = NULL; + +void add_timer(long jiffies, void (*fn)(void)) +{ + struct timer_list * p; + + if (!fn) + return; + cli(); + if (jiffies <= 0) + (fn)(); + else { + for (p = timer_list ; p < timer_list + TIME_REQUESTS ; p++) + if (!p->fn) + break; + if (p >= timer_list + TIME_REQUESTS) + panic("No more time requests free"); + p->fn = fn; + p->jiffies = jiffies; + p->next = next_timer; + next_timer = p; + while (p->next && p->next->jiffies < p->jiffies) { + p->jiffies -= p->next->jiffies; + fn = p->fn; + p->fn = p->next->fn; + p->next->fn = fn; + jiffies = p->jiffies; + p->jiffies = p->next->jiffies; + p->next->jiffies = jiffies; + p = p->next; + } + } + sti(); +} + +void do_timer(long cpl) +{ + extern int beepcount; + extern void sysbeepstop(void); + + if (beepcount) + if (!--beepcount) + sysbeepstop(); + + if (cpl) + current->utime++; + else + current->stime++; + + if (next_timer) { + next_timer->jiffies--; + while (next_timer && next_timer->jiffies <= 0) { + void (*fn)(void); + + fn = next_timer->fn; + next_timer->fn = NULL; + next_timer = next_timer->next; + (fn)(); + } + } + if (current_DOR & 0xf0) + do_floppy_timer(); + if ((--current->counter)>0) return; + current->counter=0; + if (!cpl) return; + schedule(); +} + +int sys_alarm(long seconds) +{ + int old = current->alarm; + + if (old) + old = (old - jiffies) / HZ; + current->alarm = (seconds>0)?(jiffies+HZ*seconds):0; + return (old); +} + +int sys_getpid(void) +{ + return current->pid; +} + +int sys_getppid(void) +{ + return current->father; +} + +int sys_getuid(void) +{ + return current->uid; +} + +int sys_geteuid(void) +{ + return current->euid; +} + +int sys_getgid(void) +{ + return current->gid; +} + +int sys_getegid(void) +{ + return current->egid; +} + +int sys_nice(long increment) +{ + if (current->priority-increment>0) + current->priority -= increment; + return 0; +} + +void sched_init(void) +{ + int i; + struct desc_struct * p; + + if (sizeof(struct sigaction) != 16) + panic("Struct sigaction MUST be 16 bytes"); + set_tss_desc(gdt+FIRST_TSS_ENTRY,&(init_task.task.tss)); + set_ldt_desc(gdt+FIRST_LDT_ENTRY,&(init_task.task.ldt)); + p = gdt+2+FIRST_TSS_ENTRY; + for(i=1;ia=p->b=0; + p++; + p->a=p->b=0; + p++; + } +/* Clear NT, so that we won't have troubles with that later on */ + __asm__("pushfl ; andl $0xffffbfff,(%esp) ; popfl"); + ltr(0); + lldt(0); + outb_p(0x36,0x43); /* binary, mode 3, LSB/MSB, ch 0 */ + outb_p(LATCH & 0xff , 0x40); /* LSB */ + outb(LATCH >> 8 , 0x40); /* MSB */ + set_intr_gate(0x20,&timer_interrupt); + outb(inb_p(0x21)&~0x01,0x21); + set_system_gate(0x80,&system_call); +} +int sys_sleep(unsigned int seconds){ + sys_signal(SIGALRM, SIG_IGN); + sys_alarm(seconds); + sys_pause(); + return 0; +} \ No newline at end of file diff --git a/linux-0.11-lab/4/linux/kernel/sched.o b/linux-0.11-lab/4/linux/kernel/sched.o new file mode 100644 index 0000000000000000000000000000000000000000..fe016fcc0b7c7670f9d7370abafb7b2f7c8870e9 GIT binary patch literal 23272 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 Qf^P|aEXeaU>n|4kKW&-Du>b%7 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/kernel/signal.c b/linux-0.11-lab/4/linux/kernel/signal.c new file mode 100644 index 0000000..8d5a65f --- /dev/null +++ b/linux-0.11-lab/4/linux/kernel/signal.c @@ -0,0 +1,129 @@ +/* + * linux/kernel/signal.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include +#include +#include +#include + +volatile void do_exit(int error_code); + +int sys_sgetmask() +{ + return current->blocked; +} + +int sys_ssetmask(int newmask) +{ + int old=current->blocked; + + current->blocked = newmask & ~(1<<(SIGKILL-1)); + return old; +} + +int sys_sigpending() +{ + return -ENOSYS; +} + +int sys_sigsuspend() +{ + return -ENOSYS; +} + +static inline void save_old(char * from,char * to) +{ + int i; + + verify_area(to, sizeof(struct sigaction)); + for (i=0 ; i< sizeof(struct sigaction) ; i++) { + put_fs_byte(*from,to); + from++; + to++; + } +} + +static inline void get_new(char * from,char * to) +{ + int i; + + for (i=0 ; i< sizeof(struct sigaction) ; i++) + *(to++) = get_fs_byte(from++); +} + +int sys_signal(int signum, long handler, long restorer) +{ + struct sigaction tmp; + + if (signum<1 || signum>32 || signum==SIGKILL) + return -1; + tmp.sa_handler = (void (*)(int)) handler; + tmp.sa_mask = 0; + tmp.sa_flags = SA_ONESHOT | SA_NOMASK; + tmp.sa_restorer = (void (*)(void)) restorer; + handler = (long) current->sigaction[signum-1].sa_handler; + current->sigaction[signum-1] = tmp; + return handler; +} + +int sys_sigaction(int signum, const struct sigaction * action, + struct sigaction * oldaction) +{ + struct sigaction tmp; + + if (signum<1 || signum>32 || signum==SIGKILL) + return -1; + tmp = current->sigaction[signum-1]; + get_new((char *) action, + (char *) (signum-1+current->sigaction)); + if (oldaction) + save_old((char *) &tmp,(char *) oldaction); + if (current->sigaction[signum-1].sa_flags & SA_NOMASK) + current->sigaction[signum-1].sa_mask = 0; + else + current->sigaction[signum-1].sa_mask |= (1<<(signum-1)); + return 0; +} + +void do_signal(long signr,long eax, long ebx, long ecx, long edx, + long fs, long es, long ds, + long eip, long cs, long eflags, + unsigned long * esp, long ss) +{ + unsigned long sa_handler; + long old_eip=eip; + struct sigaction * sa = current->sigaction + signr - 1; + int longs; + unsigned long * tmp_esp; + + sa_handler = (unsigned long) sa->sa_handler; + if (sa_handler==1) + return; + if (!sa_handler) { + if (signr==SIGCHLD) + return; + else + do_exit(1<<(signr-1)); + } + if (sa->sa_flags & SA_ONESHOT) + sa->sa_handler = NULL; + *(&eip) = sa_handler; + longs = (sa->sa_flags & SA_NOMASK)?7:8; + *(&esp) -= longs; + verify_area(esp,longs*4); + tmp_esp=esp; + put_fs_long((long) sa->sa_restorer,tmp_esp++); + put_fs_long(signr,tmp_esp++); + if (!(sa->sa_flags & SA_NOMASK)) + put_fs_long(current->blocked,tmp_esp++); + put_fs_long(eax,tmp_esp++); + put_fs_long(ecx,tmp_esp++); + put_fs_long(edx,tmp_esp++); + put_fs_long(eflags,tmp_esp++); + put_fs_long(old_eip,tmp_esp++); + current->blocked |= sa->sa_mask; +} diff --git a/linux-0.11-lab/4/linux/kernel/signal.o b/linux-0.11-lab/4/linux/kernel/signal.o new file mode 100644 index 0000000000000000000000000000000000000000..1970f39f72c6b0c63a277c6955a88089975ca4d3 GIT binary patch literal 8960 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/kernel/sys.c b/linux-0.11-lab/4/linux/kernel/sys.c new file mode 100644 index 0000000..695f287 --- /dev/null +++ b/linux-0.11-lab/4/linux/kernel/sys.c @@ -0,0 +1,292 @@ +/* + * linux/kernel/sys.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +#include +#include +#include +#include +#include +#include + +int sys_ftime() +{ + return -ENOSYS; +} + +int sys_break() +{ + return -ENOSYS; +} + +int sys_ptrace() +{ + return -ENOSYS; +} + +int sys_stty() +{ + return -ENOSYS; +} + +int sys_gtty() +{ + return -ENOSYS; +} + +int sys_rename() +{ + return -ENOSYS; +} + +int sys_prof() +{ + return -ENOSYS; +} + +int sys_setregid(int rgid, int egid) +{ + if (rgid>0) { + if ((current->gid == rgid) || + suser()) + current->gid = rgid; + else + return(-EPERM); + } + if (egid>0) { + if ((current->gid == egid) || + (current->egid == egid) || + suser()) { + current->egid = egid; + current->sgid = egid; + } else + return(-EPERM); + } + return 0; +} + +int sys_setgid(int gid) +{ +/* return(sys_setregid(gid, gid)); */ + if (suser()) + current->gid = current->egid = current->sgid = gid; + else if ((gid == current->gid) || (gid == current->sgid)) + current->egid = gid; + else + return -EPERM; + return 0; +} + +int sys_acct() +{ + return -ENOSYS; +} + +int sys_phys() +{ + return -ENOSYS; +} + +int sys_lock() +{ + return -ENOSYS; +} + +int sys_mpx() +{ + return -ENOSYS; +} + +int sys_ulimit() +{ + return -ENOSYS; +} + +int sys_time(long * tloc) +{ + int i; + + i = CURRENT_TIME; + if (tloc) { + verify_area(tloc,4); + put_fs_long(i,(unsigned long *)tloc); + } + return i; +} + +/* + * Unprivileged users may change the real user id to the effective uid + * or vice versa. + */ +int sys_setreuid(int ruid, int euid) +{ + int old_ruid = current->uid; + + if (ruid>0) { + if ((current->euid==ruid) || + (old_ruid == ruid) || + suser()) + current->uid = ruid; + else + return(-EPERM); + } + if (euid>0) { + if ((old_ruid == euid) || + (current->euid == euid) || + suser()) { + current->euid = euid; + current->suid = euid; + } else { + current->uid = old_ruid; + return(-EPERM); + } + } + return 0; +} + +int sys_setuid(int uid) +{ +/* return(sys_setreuid(uid, uid)); */ + if (suser()) + current->uid = current->euid = current->suid = uid; + else if ((uid == current->uid) || (uid == current->suid)) + current->euid = uid; + else + return -EPERM; + return(0); +} + +int sys_stime(long * tptr) +{ + if (!suser()) + return -EPERM; + startup_time = get_fs_long((unsigned long *)tptr) - jiffies/HZ; + return 0; +} + +int sys_times(struct tms * tbuf) +{ + if (tbuf) { + verify_area(tbuf,sizeof *tbuf); + put_fs_long(current->utime,(unsigned long *)&tbuf->tms_utime); + put_fs_long(current->stime,(unsigned long *)&tbuf->tms_stime); + put_fs_long(current->cutime,(unsigned long *)&tbuf->tms_cutime); + put_fs_long(current->cstime,(unsigned long *)&tbuf->tms_cstime); + } + return jiffies; +} + +int sys_brk(unsigned long end_data_seg) +{ + if (end_data_seg >= current->end_code && + end_data_seg < current->start_stack - 16384) + current->brk = end_data_seg; + return current->brk; +} + +/* + * This needs some heave checking ... + * I just haven't get the stomach for it. I also don't fully + * understand sessions/pgrp etc. Let somebody who does explain it. + */ +int sys_setpgid(int pid, int pgid) +{ + int i; + + if (!pid) + pid = current->pid; + if (!pgid) + pgid = current->pid; + for (i=0 ; ipid==pid) { + if (task[i]->leader) + return -EPERM; + if (task[i]->session != current->session) + return -EPERM; + task[i]->pgrp = pgid; + return 0; + } + return -ESRCH; +} + +int sys_getpgrp(void) +{ + return current->pgrp; +} + +int sys_setsid(void) +{ + if (current->leader && !suser()) + return -EPERM; + current->leader = 1; + current->session = current->pgrp = current->pid; + current->tty = -1; + return current->pgrp; +} + +int sys_getgroups() +{ + return -ENOSYS; +} + +int sys_setgroups() +{ + return -ENOSYS; +} + +int sys_uname(struct utsname * name) +{ + static struct utsname thisname = { + "linux .0","nodename","release ","version ","machine " + }; + int i; + + if (!name) return -ERROR; + verify_area(name,sizeof *name); + for(i=0;iumask; + + current->umask = mask & 0777; + return (old); +} diff --git a/linux-0.11-lab/4/linux/kernel/sys.o b/linux-0.11-lab/4/linux/kernel/sys.o new file mode 100644 index 0000000000000000000000000000000000000000..a691166c6ad2230733c9baaa0609d3b8fe779594 GIT binary patch literal 13088 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 M35GC+)VB!!4-!@J2mk;8 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/kernel/system_call.o b/linux-0.11-lab/4/linux/kernel/system_call.o new file mode 100644 index 0000000000000000000000000000000000000000..8ce29cd9d744bf0904c584eb5714b7841f47f6b1 GIT binary patch literal 2640 zcma)8U1%It6h523R*BhEqxGkn6(hzr#w1#;R>d@%)WS+PS(0vR?J(J$?XKC~S!V9W zEC?do5H%zOA4(s5NMHPUQwkD;*u@AcKBPvFDhj1ywFDm)6nzlJ@66BcbxPC&cfRkt z_ndRjJ$o~gmxm)Gfk1#f3s57~6;ZgsS$WuoZrV=Gv|_>5Q%mW?n7sNIL~5!0=ZP18 zzN;m;JT@9zZO8oLcZ;8_?qqT~`V0HSt&Ukv5L% z#oqtoVr9kN|5ClqfAt8q1Vfc~n@~pZ6c;=`am3z3Ir043(pHg{UH5yTE1~&tSEzic z(K&4S)26Fk$g#8#?%GwGT1#D{?Hy(-Gi||lCXS4Io*iq^(J|iAe-v!Ayh)qXzcF_+ zH*9vJ*u2W*O32#aJ{&t5U*9@5)L)si3!beMn^!o_x=@SaL&Vpq*DU3PItdhpgK3W$ zTDDhcGlF`Ps!*wS(lj~8|Fupy^4)521Nct;AYC?YJ=+}^*V)W@oPpqCIgZ`gZ#%}l zu5JXf?Qrj^qa0u6dobAlzx;McKA?8KJ|?btr83G}okHRY#x~6J8M!{bf_w&VPf!ZO zVN?qA^6}bM_RqgY&L?MN-DLNKYj><_UGGsFt5zG(>n%~$x)GZD;aJtW1*FxJSic>d z>vybb-3ij+Nvwy!Z3!fml76bjnN+PXo^t&WXu1Az zXu1C5&~p7L*0sJ@tvqzys#Xa?&i@Luod0!bIsa*B1;eqb^_E9%4A41XJw8AmL-VWB zu>f5F@%q`0U+;V9hDC z19>_B81xxwKQ9+gaUXMTtf!}ade)~GeEJQae$%Jl_UToh{>-P>efpwLU-s!=eOmtG z<@4Q8yBp4VZ}RCqKE2ncDR$_fGW1L&Ov8h58a{wAgb|L@NQ{PK6vp#Vl!gE!k->v8 zIvfcP$D$0e7@0y98YT2%UT6jtjErt%M2XDI$-J6nP!l4f=V>ylC#JL{nW~aj^T{ln zL364(#hA*fCru`XW(wWFV%|{9k}0&Dl2Ef*lP1+9PuPm!l}KyJVpancO3Ki4^+hR+ zI3lGRQzSAu%}_F2q){vgdqJDg64RPQ2PmDCd{SAxP$)?g1=T<;T2`7$YSWp7rsQ>@ zsMBgDt4^Y(gkCW8gl3w$ptmcYY{s~^lq*58p + +#include +#include +#include +#include +#include +#include + +#define get_seg_byte(seg,addr) ({ \ +register char __res; \ +__asm__("push %%fs;mov %%ax,%%fs;movb %%fs:%2,%%al;pop %%fs" \ + :"=a" (__res):"0" (seg),"m" (*(addr))); \ +__res;}) + +#define get_seg_long(seg,addr) ({ \ +register unsigned long __res; \ +__asm__("push %%fs;mov %%ax,%%fs;movl %%fs:%2,%%eax;pop %%fs" \ + :"=a" (__res):"0" (seg),"m" (*(addr))); \ +__res;}) + +#define _fs() ({ \ +register unsigned short __res; \ +__asm__("mov %%fs,%%ax":"=a" (__res):); \ +__res;}) + +int do_exit(long code); + +void page_exception(void); + +void divide_error(void); +void debug(void); +void nmi(void); +void int3(void); +void overflow(void); +void bounds(void); +void invalid_op(void); +void device_not_available(void); +void double_fault(void); +void coprocessor_segment_overrun(void); +void invalid_TSS(void); +void segment_not_present(void); +void stack_segment(void); +void general_protection(void); +void page_fault(void); +void coprocessor_error(void); +void reserved(void); +void parallel_interrupt(void); +void irq13(void); + +static void die(char * str,long esp_ptr,long nr) +{ + long * esp = (long *) esp_ptr; + int i; + + printk("%s: %04x\n\r",str,nr&0xffff); + printk("EIP:\t%04x:%p\nEFLAGS:\t%p\nESP:\t%04x:%p\n", + esp[1],esp[0],esp[2],esp[4],esp[3]); + printk("fs: %04x\n",_fs()); + printk("base: %p, limit: %p\n",get_base(current->ldt[1]),get_limit(0x17)); + if (esp[4] == 0x17) { + printk("Stack: "); + for (i=0;i<4;i++) + printk("%p ",get_seg_long(0x17,i+(long *)esp[3])); + printk("\n"); + } + str(i); + printk("Pid: %d, process nr: %d\n\r",current->pid,0xffff & i); + for(i=0;i<10;i++) + printk("%02x ",0xff & get_seg_byte(esp[1],(i+(char *)esp[0]))); + printk("\n\r"); + do_exit(11); /* play segment exception */ +} + +void do_double_fault(long esp, long error_code) +{ + die("double fault",esp,error_code); +} + +void do_general_protection(long esp, long error_code) +{ + die("general protection",esp,error_code); +} + +void do_divide_error(long esp, long error_code) +{ + die("divide error",esp,error_code); +} + +void do_int3(long * esp, long error_code, + long fs,long es,long ds, + long ebp,long esi,long edi, + long edx,long ecx,long ebx,long eax) +{ + int tr; + + __asm__("str %%ax":"=a" (tr):"0" (0)); + printk("eax\t\tebx\t\tecx\t\tedx\n\r%8x\t%8x\t%8x\t%8x\n\r", + eax,ebx,ecx,edx); + printk("esi\t\tedi\t\tebp\t\tesp\n\r%8x\t%8x\t%8x\t%8x\n\r", + esi,edi,ebp,(long) esp); + printk("\n\rds\tes\tfs\ttr\n\r%4x\t%4x\t%4x\t%4x\n\r", + ds,es,fs,tr); + printk("EIP: %8x CS: %4x EFLAGS: %8x\n\r",esp[0],esp[1],esp[2]); +} + +void do_nmi(long esp, long error_code) +{ + die("nmi",esp,error_code); +} + +void do_debug(long esp, long error_code) +{ + die("debug",esp,error_code); +} + +void do_overflow(long esp, long error_code) +{ + die("overflow",esp,error_code); +} + +void do_bounds(long esp, long error_code) +{ + die("bounds",esp,error_code); +} + +void do_invalid_op(long esp, long error_code) +{ + die("invalid operand",esp,error_code); +} + +void do_device_not_available(long esp, long error_code) +{ + die("device not available",esp,error_code); +} + +void do_coprocessor_segment_overrun(long esp, long error_code) +{ + die("coprocessor segment overrun",esp,error_code); +} + +void do_invalid_TSS(long esp,long error_code) +{ + die("invalid TSS",esp,error_code); +} + +void do_segment_not_present(long esp,long error_code) +{ + die("segment not present",esp,error_code); +} + +void do_stack_segment(long esp,long error_code) +{ + die("stack segment",esp,error_code); +} + +void do_coprocessor_error(long esp, long error_code) +{ + if (last_task_used_math != current) + return; + die("coprocessor error",esp,error_code); +} + +void do_reserved(long esp, long error_code) +{ + die("reserved (15,17-47) error",esp,error_code); +} + +void trap_init(void) +{ + int i; + + set_trap_gate(0,÷_error); + set_trap_gate(1,&debug); + set_trap_gate(2,&nmi); + set_system_gate(3,&int3); /* int3-5 can be called from all */ + set_system_gate(4,&overflow); + set_system_gate(5,&bounds); + set_trap_gate(6,&invalid_op); + set_trap_gate(7,&device_not_available); + set_trap_gate(8,&double_fault); + set_trap_gate(9,&coprocessor_segment_overrun); + set_trap_gate(10,&invalid_TSS); + set_trap_gate(11,&segment_not_present); + set_trap_gate(12,&stack_segment); + set_trap_gate(13,&general_protection); + set_trap_gate(14,&page_fault); + set_trap_gate(15,&reserved); + set_trap_gate(16,&coprocessor_error); + for (i=17;i<48;i++) + set_trap_gate(i,&reserved); + set_trap_gate(45,&irq13); + outb_p(inb_p(0x21)&0xfb,0x21); + outb(inb_p(0xA1)&0xdf,0xA1); + set_trap_gate(39,¶llel_interrupt); +} diff --git a/linux-0.11-lab/4/linux/kernel/traps.o b/linux-0.11-lab/4/linux/kernel/traps.o new file mode 100644 index 0000000000000000000000000000000000000000..51de46fe88ac98ea479385c2c283bf030d1f46cd GIT binary patch literal 12972 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 +#include + +/* we use this so that we can do without the ctype library */ +#define is_digit(c) ((c) >= '0' && (c) <= '9') + +static int skip_atoi(const char **s) +{ + int i=0; + + while (is_digit(**s)) + i = i*10 + *((*s)++) - '0'; + return i; +} + +#define ZEROPAD 1 /* pad with zero */ +#define SIGN 2 /* unsigned/signed long */ +#define PLUS 4 /* show plus */ +#define SPACE 8 /* space if plus */ +#define LEFT 16 /* left justified */ +#define SPECIAL 32 /* 0x */ +#define SMALL 64 /* use 'abcdef' instead of 'ABCDEF' */ + +#define do_div(n,base) ({ \ +int __res; \ +__asm__("divl %4":"=a" (n),"=d" (__res):"0" (n),"1" (0),"r" (base)); \ +__res; }) + +static char * number(char * str, int num, int base, int size, int precision + ,int type) +{ + char c,sign,tmp[36]; + const char *digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + int i; + + if (type&SMALL) digits="0123456789abcdefghijklmnopqrstuvwxyz"; + if (type&LEFT) type &= ~ZEROPAD; + if (base<2 || base>36) + return 0; + c = (type & ZEROPAD) ? '0' : ' ' ; + if (type&SIGN && num<0) { + sign='-'; + num = -num; + } else + sign=(type&PLUS) ? '+' : ((type&SPACE) ? ' ' : 0); + if (sign) size--; + if (type&SPECIAL) + if (base==16) size -= 2; + else if (base==8) size--; + i=0; + if (num==0) + tmp[i++]='0'; + else while (num!=0) + tmp[i++]=digits[do_div(num,base)]; + if (i>precision) precision=i; + size -= precision; + if (!(type&(ZEROPAD+LEFT))) + while(size-->0) + *str++ = ' '; + if (sign) + *str++ = sign; + if (type&SPECIAL) + if (base==8) + *str++ = '0'; + else if (base==16) { + *str++ = '0'; + *str++ = digits[33]; + } + if (!(type&LEFT)) + while(size-->0) + *str++ = c; + while(i0) + *str++ = tmp[i]; + while(size-->0) + *str++ = ' '; + return str; +} + +int vsprintf(char *buf, const char *fmt, va_list args) +{ + int len; + int i; + char * str; + char *s; + int *ip; + + int flags; /* flags to number() */ + + int field_width; /* width of output field */ + int precision; /* min. # of digits for integers; max + number of chars for from string */ + int qualifier; /* 'h', 'l', or 'L' for integer fields */ + + for (str=buf ; *fmt ; ++fmt) { + if (*fmt != '%') { + *str++ = *fmt; + continue; + } + + /* process flags */ + flags = 0; + repeat: + ++fmt; /* this also skips first '%' */ + switch (*fmt) { + case '-': flags |= LEFT; goto repeat; + case '+': flags |= PLUS; goto repeat; + case ' ': flags |= SPACE; goto repeat; + case '#': flags |= SPECIAL; goto repeat; + case '0': flags |= ZEROPAD; goto repeat; + } + + /* get field width */ + field_width = -1; + if (is_digit(*fmt)) + field_width = skip_atoi(&fmt); + else if (*fmt == '*') { + /* it's the next argument */ + field_width = va_arg(args, int); + if (field_width < 0) { + field_width = -field_width; + flags |= LEFT; + } + } + + /* get the precision */ + precision = -1; + if (*fmt == '.') { + ++fmt; + if (is_digit(*fmt)) + precision = skip_atoi(&fmt); + else if (*fmt == '*') { + /* it's the next argument */ + precision = va_arg(args, int); + } + if (precision < 0) + precision = 0; + } + + /* get the conversion qualifier */ + qualifier = -1; + if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L') { + qualifier = *fmt; + ++fmt; + } + + switch (*fmt) { + case 'c': + if (!(flags & LEFT)) + while (--field_width > 0) + *str++ = ' '; + *str++ = (unsigned char) va_arg(args, int); + while (--field_width > 0) + *str++ = ' '; + break; + + case 's': + s = va_arg(args, char *); + len = strlen(s); + if (precision < 0) + precision = len; + else if (len > precision) + len = precision; + + if (!(flags & LEFT)) + while (len < field_width--) + *str++ = ' '; + for (i = 0; i < len; ++i) + *str++ = *s++; + while (len < field_width--) + *str++ = ' '; + break; + + case 'o': + str = number(str, va_arg(args, unsigned long), 8, + field_width, precision, flags); + break; + + case 'p': + if (field_width == -1) { + field_width = 8; + flags |= ZEROPAD; + } + str = number(str, + (unsigned long) va_arg(args, void *), 16, + field_width, precision, flags); + break; + + case 'x': + flags |= SMALL; + case 'X': + str = number(str, va_arg(args, unsigned long), 16, + field_width, precision, flags); + break; + + case 'd': + case 'i': + flags |= SIGN; + case 'u': + str = number(str, va_arg(args, unsigned long), 10, + field_width, precision, flags); + break; + + case 'n': + ip = va_arg(args, int *); + *ip = (str - buf); + break; + + default: + if (*fmt != '%') + *str++ = '%'; + if (*fmt) + *str++ = *fmt; + else + --fmt; + break; + } + } + *str = '\0'; + return str-buf; +} diff --git a/linux-0.11-lab/4/linux/kernel/vsprintf.o b/linux-0.11-lab/4/linux/kernel/vsprintf.o new file mode 100644 index 0000000000000000000000000000000000000000..5acfe6576413e77d5a31e400e048fdd1e4ad4bf8 GIT binary patch literal 6156 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 tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +_exit.s _exit.o : _exit.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +close.s close.o : close.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +ctype.s ctype.o : ctype.c ../include/ctype.h +dup.s dup.o : dup.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +errno.s errno.o : errno.c +execve.s execve.o : execve.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +malloc.s malloc.o : malloc.c ../include/linux/kernel.h ../include/linux/mm.h \ + ../include/asm/system.h +open.s open.o : open.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h ../include/stdarg.h +setsid.s setsid.o : setsid.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +string.s string.o : string.c ../include/string.h +wait.s wait.o : wait.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h ../include/sys/wait.h +write.s write.o : write.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h diff --git a/linux-0.11-lab/4/linux/lib/_exit.c b/linux-0.11-lab/4/linux/lib/_exit.c new file mode 100644 index 0000000..c0c9d69 --- /dev/null +++ b/linux-0.11-lab/4/linux/lib/_exit.c @@ -0,0 +1,13 @@ +/* + * linux/lib/_exit.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include + +volatile void _exit(int exit_code) +{ + __asm__("int $0x80"::"a" (__NR_exit),"b" (exit_code)); +} diff --git a/linux-0.11-lab/4/linux/lib/_exit.o b/linux-0.11-lab/4/linux/lib/_exit.o new file mode 100644 index 0000000000000000000000000000000000000000..94af2a4a5f650db6a742b57da8d85e71ab559bc6 GIT binary patch literal 1988 zcma)7J#QRE7=CB>&OUt35!*q;a)j1Wq8RY*+2nu_629yZ1&}2I5e15@y}R|@3g51^ zAK*lY57B@qPzpo?qKT*}D3G8_ML|VLlfOVs0nal#b6!{QN;A*%e#|>F@6ODAeD#f2 zl~Q6wi7Q8%$hKQ~dK%VbNlwaJKQrRXx6ih|_~Z9a-o2kgYiNH%JquJz=zi1&L3kxj zV|E72X*9nBxQ%9<6yi9uD>SOsSK2olXl>?CfX=Aqz;q7vZSx0EHFp8MbC+~Mo$D;M z-Ofs9K`qXld=&Px(r&*16J{{9g-n5ZaoO!$YCqpTzs%5=PJi>tvPiQjmG%0Pa~cWH zFf*Fn4Vhg&`O|2QJceGWzdI+;>%yTJN_L~exCjOeLt>r9ol~p7IS#_KQ_3WdM@cmF zxN{qykJGI1j=A#qPE_1Jh~(PNO>fKV1s8*!=TE|HFuoFBxcH3ck34@boy3K|mxYta zKS+@=%3zF>{WyvIy)qdTahl{XC8?hm;ov?0AWMsAP^8(>LI&e7ll?Rq=_PRoyMuHX zNq3x1qHaGAqVC)f^Nnw(QcgVrEqB;_WN1%e%%{pVKR!24Pfo;0OXfokWMBM zK30&RbOAm`Rmv(&G~U(aHyipNz@yHa!+SvCovNQN`Y5Yt2bxtK zeQc~jJ?<*5_Y+l!?rq$sCeFIj>M^nEbnRc8IO{$DsovKrlMD3`!H-)Y(A@7tlJy%*FV-y zJpNaqUSA3I`i#_V6{;-m^wwA%i>irxtWq4`u6e0*hezTHD|jTX%uh4028*ngeWa`R zTdzQ&X7lhX6p3{wK4K8R6j9jLDiH^6&DgsJuNd4m_`1Ox2H!Er^UFMAqw~E`&Fb6G M{-p7HK>T0iU+XN)TmS$7 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/lib/close.c b/linux-0.11-lab/4/linux/lib/close.c new file mode 100644 index 0000000..afd8364 --- /dev/null +++ b/linux-0.11-lab/4/linux/lib/close.c @@ -0,0 +1,10 @@ +/* + * linux/lib/close.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include + +_syscall1(int,close,int,fd) diff --git a/linux-0.11-lab/4/linux/lib/close.o b/linux-0.11-lab/4/linux/lib/close.o new file mode 100644 index 0000000000000000000000000000000000000000..b7924357c0fbdb50cd1a60f7d1f6eed36f526f30 GIT binary patch literal 2220 zcma)7O>7%Q6n?Y2cHG!CPQp*DAhAfPNP%4^)Id}y{Yhz6Ks^*HkU)yo>$SbAy_@b2 zq*Z`Q5fW9(p+YD^>IIbxS5Cc`D+h!s^#B*H^uW)714!X}vpe?Y1W!Bff8LvUZ)fJ? zSKl}zgdhcibec#+Kk1pJEy)r+Of&T6_JhWqG88*+EzV#6@%wAnPcPQCw-#%(S>6Hr zYlHD$_iyu@J9~ib?;7vk{T!0PDl)|Lz~U>QZ&?Psm=V&9DdsezbPz;0N`8=#rcFK0 zN>Sk$aQQ|`<)1-}M}frj5nu+6BW~>gmwMe?uid2bXRM!o7FfHP&{T_=ALJx4BM#N) zs(O8)J|kw!jmKbFq-ymQsIY>Ztss*vjyLuC(dtXpr<&*H*!jf#?y07jL$VU-6}Ft4 z)8>iFZOR-oacUwSZ@%0_Zn+&$RT1V?37CHeLnB!w@pt_op+(#k3}M?XKX8X>*CTR= zVeHv1&qxD5PP+CW>t0D?oqj;PhH{B=1vNCZ-XB^CkJH$ZG{@ zH)(}&3t`huYuR2|v4&2k<)%@l0`8CuKxfz1j+#psJ86)l*`lrIQYo!`w9>Yh+lMnP z;eXCRT)jYIt0ER^hVd!N%njnfARBYCUfI^x>hqWDm6Lbt2HEkIQQ~w!lPIGD#YNuG zPQ1;8?5>kIWOw42Y*u!?PTF7hgI)-e36oyZCLC`n-g*HKMC4zk^FH1g0q zJ3tw2v?eQSHpd&R%T{D-|3CN%IPu@bN1B1pdhusu8^Z#|0m)^^z@flLvl#5dhnwX? zxtw1ebO~}1RJ>=PWdHy2K_10s}OE8lLN1hf$2CW_Rn&vgH*$Z|0Q%ba}zy8PpcvV7OZ3SD+|EMh))b^ + +char _ctmp; +unsigned char _ctype[] = {0x00, /* EOF */ +_C,_C,_C,_C,_C,_C,_C,_C, /* 0-7 */ +_C,_C|_S,_C|_S,_C|_S,_C|_S,_C|_S,_C,_C, /* 8-15 */ +_C,_C,_C,_C,_C,_C,_C,_C, /* 16-23 */ +_C,_C,_C,_C,_C,_C,_C,_C, /* 24-31 */ +_S|_SP,_P,_P,_P,_P,_P,_P,_P, /* 32-39 */ +_P,_P,_P,_P,_P,_P,_P,_P, /* 40-47 */ +_D,_D,_D,_D,_D,_D,_D,_D, /* 48-55 */ +_D,_D,_P,_P,_P,_P,_P,_P, /* 56-63 */ +_P,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U, /* 64-71 */ +_U,_U,_U,_U,_U,_U,_U,_U, /* 72-79 */ +_U,_U,_U,_U,_U,_U,_U,_U, /* 80-87 */ +_U,_U,_U,_P,_P,_P,_P,_P, /* 88-95 */ +_P,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L, /* 96-103 */ +_L,_L,_L,_L,_L,_L,_L,_L, /* 104-111 */ +_L,_L,_L,_L,_L,_L,_L,_L, /* 112-119 */ +_L,_L,_L,_P,_P,_P,_P,_C, /* 120-127 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 128-143 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 144-159 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 160-175 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 176-191 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 192-207 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 208-223 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 224-239 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; /* 240-255 */ + diff --git a/linux-0.11-lab/4/linux/lib/ctype.o b/linux-0.11-lab/4/linux/lib/ctype.o new file mode 100644 index 0000000000000000000000000000000000000000..acd65e6a3869dcf4ecb16245dcd9f21e6856c20c GIT binary patch literal 1908 zcmcgtOK;Oa5Z;Yl`bZlRr97$%luE4#2s;S`RJF8FBB+9@9*}xLf?_*PViDVs<3Ni9 z`~q(L0B%U!xbSDVaN!4lxFJ-&+4Ux_=z$X>&CcuFnf2_$Z|?2f=bSS|oM~)qG4@WA zk-89NmS=McD&>@-GLbUI@_qg|=_5+~TY|8Lzeob^3d)>76rVc2n*VRvD5;CGI)4bs z*HdfA+<;+%H5$-ZU7u_~(fO1CG4YX{GZ#n|eV*7M$MlntL+7VH!C<_=S8~OymRro_ z&oP$ayjkQ$?>nnU-72u4kLY+Y6cVm^}~9P?}_=LdCEQ&ajIZ zIscWL!zfMy_MbB+KJ2@uBcPRT=)09**orIRzzEzIm7W(24~(i=s~J7Zu2iK1qs@lF z!0QBVtK@X8Xq0B)y>uxf+jnBW&$f5>N{v$8Ts7+@!?z-*yWw45y;(9kC8HhsUTm}@ z%Xf`_=moJG!RZC4=^E`};KW`S4B!evV-Q=;Gov4cvFpTPMA@l`D9yGTjkQvF&mIQx zP}VZ84TV*EU8|eb`eo_G77Y&l*s>wxNXo9#V)r0sX3L5#X4-=RGb6WWwp@GI+4q8W zh>*}N+m77l>8KT1LC3`e382+09l4q5gud?v$Q@wuCK@6?Ml}52hDF*q@TmkY@9220 zy2nciF1gC=4%sRQy#yw@1g86>a9b%1#g$o2>EtI|o0NnU?kenQ<%FD_Wb7#<&Zszu zbZw~KEwGvcm3@G*NlHR0whLS76#52(j<+HedjLneZVz>-4%LM!YLopKtmZ&vzhRU~ zNl3*!*rd~U6RqGbeU_>iDMlP8QsKS;cSRuNpm47eoC?XiudMN!3UH~tpeW(qj$xy< zQ(k$!WpEw`;w#kC;8`&BIS;0ur1Sj*?ks$YD9=fh_Ur8XQ5tjnZ$bIfD + +_syscall1(int,dup,int,fd) diff --git a/linux-0.11-lab/4/linux/lib/dup.o b/linux-0.11-lab/4/linux/lib/dup.o new file mode 100644 index 0000000000000000000000000000000000000000..3b59d3a90f0a3ea5dd762400b7a6481e5a4cf26d GIT binary patch literal 2200 zcma)7&2Jl35TCcZ{%D*UCn+LUkT6mT39##gS`ZaVQ&Ol3sE0y1z#&@OYkO6DH{B0# ztMDNOq?T}?LMR|{LA~)8^xobO2LwonGdDO;1fmj$@|(Bs#hVk1^xn*GX5P%~ynXMz z_rfbL3L!|7Ad@DD=m#^iv?N=iBQ!&=?)+A}xeUebYm4*OzW?_9Yo`~dceWR&Xlzkj;HYi`~H?cA=tdFxXki&bQaCoqe{n7(EVdOBldSS6MWtMECPX%+k+A;T!m zu~L*jlD5)U5*2?0v%2XPiK$}{nK+L4au;)<*HwDsIu$=){S>D)t|wG_goW?qA~7S5 zR_7{ab)h;VW{b54U|FO}K&cK$+$2 zoH0*SY>`=I#|)Mx@MQhjI&weA`7v}ySkf(E`E?9~xIQ8NsUF5G_Xs;99H;3AonhMb zi16)BhyByQkCU!5$o8%vLz{=hOK7AhmeE1W=>1_75GM^{zaMzr1~)ca9}mJPX&f+k zQ51x9=G=wGMx*7dIjx30a-+`Rgnw-9sfOKe*u8M%Cw4D#N1nYEBA6FJ=?6nU@a$e1 zbP_)dVyJ@9juW?Y(cX%}#OowsM4OwD7o%oXNoU|jGz^2jtSR=dc**50kD7yU53?iMZ+5UU61e?V;OlcG4(QVQ!O*KxZ~KjyIMrw9_C-v#RYUQ;AmJU2Qolt>sM1 z4LiaUNL)EjV!JFBrY-9#+RGcmgGp}4scL!0*r?85s+LdPs#@g4mq&@)22Y}l5403{ zLnraZ2{~Oiami`NF*&U4dhN8o=?A?KCMmn^cI3U4x4MxV^wE{v0&b;VfE?s>!qLdX zwmAVh>0o!V&Sq=8!KU1etoHviKLjT}>qX_vXFUHCvW;m03A*_`FK|mgyV3$ zDGVL&5@cS(-_3Lf;O9(~GuwD6vn zzE@Ts!_P4C-|uL;x~ljao;&- zKHe|*PdSGs9ZzG;^LmT!+|zpI2VXs*{l|*Syf~b^Z){&zya8?i{|k+V^jZJ_ literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/lib/errno.c b/linux-0.11-lab/4/linux/lib/errno.c new file mode 100644 index 0000000..50aca2e --- /dev/null +++ b/linux-0.11-lab/4/linux/lib/errno.c @@ -0,0 +1,7 @@ +/* + * linux/lib/errno.c + * + * (C) 1991 Linus Torvalds + */ + +int errno; diff --git a/linux-0.11-lab/4/linux/lib/errno.o b/linux-0.11-lab/4/linux/lib/errno.o new file mode 100644 index 0000000000000000000000000000000000000000..2b68237de5d516e34b24195231b0aca298879d71 GIT binary patch literal 1472 zcma)6OK;Oa5T1=w3Ydmg1wmB_8L5aA;Z4#;RaIVx3Mvrltw)6HWYZdIyK>f04m|FN zQzg#)0?zylPW%tJawy;IdK)8wV5HfZ`R3c5eT@C~{^JKi2y!CGqe(;*G;F4COq*tD zhF0J=P23c#u;RT5?9d1qnU)x*JchjHRFY|6bK+WS-uGIIt=UUNjXrs;4gZ$^aQ@yx z<1%g4zI(q1Z~h2j6(cu&0sWJ$A$%|qR4VNU>bGy@>F%Qa;Q7` zILy?`&VG`WhhbOtdf|Q)ce)n97~6@owY?K;27S3M`$3pS#bEDFvbw$&gu6jF%F{%L zqasRGc#z{XssNZ|SX70hG8^b5&&GhVJRIw2@H{*ya;*kBFDBdC+T7d-+BC)B- zS4tE0-t_vi+h4XQksQBDbri$u!rDFOX?3Vc4kI0rjK^b=h1!=x6_>kDlWdeDW&9|P z3-zL&jfyDSRhVE2ymRMcZIXjLO%oAA%n@OM*0>xf%W?lD%bcN^;Fz@=wUp6kTr zwgEVwb048-;uCSXM?mUzzo0JH;kwgMSN92gHwP|#hPK(M#N`si?DM%dHD^0`P{Vn9=cGS3H+G;zUhcI0wwV1*e(!;SW6KSHBFC{e%O4g?Ao$4$9}9h4P)$ z*E_(yFvp3j>tbi?c$2;#JDlzBe=d&eJK?xqkz?M?M7)#kwU}pKsGhICB+oxPNy78Y z2`7+8zBwmXVV$EN$0z>-^SiR&i@-<2cO$So-!t2bm0e(qhB5y<;QWRHWd6 + +_syscall3(int,execve,const char *,file,char **,argv,char **,envp) diff --git a/linux-0.11-lab/4/linux/lib/execve.o b/linux-0.11-lab/4/linux/lib/execve.o new file mode 100644 index 0000000000000000000000000000000000000000..90285289762a04e32eddc4b9cc9331a4b1051515 GIT binary patch literal 2336 zcma)7O>7%Q6n?Y2{z;s=PQp*3RAP}_2tQsY)T*M=Us5Q6sz`+jP>aIa9@{JI-LSh3 zX%!Wu2m}fjBoII1)(a;j#HHLotppO{&`UxQfX%J-6NFrLY5=%podAfrp>DjGcE87>UGux-D`?jB}+E+_3{_w^-C#w@% zo7D;0$Zv!FrNa2{n^!pU>TST*^~(8c-$F`qT4D~oC;+{M!EhuYWLSmkU=1txGl*&B zJU=GGD15<6QQT0r!jDSI-vCh=#rOfR44g-N`WbL8Vs@Na<2}mVQqq@7vT}E2q+N1?*1Q?`iJ zIpWx?Sw2*Hv~>UM$}~G4pZV~ySuu?T<|whOOdB&q`Nl4>uowAO;8whkn2e3g$7T=D zVlDf4Js7&G%;_>R|00G#2Z4q7r@RMPbsIevj#KyiR)5%*L~=v6)}_(meYuFa0CtD%gDPAxAVvggk=hkiUv_E&pksHDZqiw$R?@j#*_ zoRtK`rL!b9i(+oVvff7Fxn(>URI5&ui(AHWdFHip@x-;VMNV{a5W7v#I810ybD``z zvD}EsX}hsYPBV(gVP#u3huu}r?*uR@-fcERxt_JUq3d_ChfDyMTnAtda$3P)AhBD= zN5vgHH6c4#=X(em_Wv(GUXPC9B%JSiW>V0$1<2X;^^p7{=y-iO486YN;B^dGIt<}W zW>V0$vye5J(< zq=P_teGDI9WcM+X*~ebk^gbrRXQz4}!WHN==y|hqvh4*tOTUBS&ZRvVoR90yb7u2B ziQ?hj-vOO(N0BmFy+wcA&f0gsxST&b1Iv2XNtCJnxKRd^_zfL_sXCgKxw9iMX<{UR zGYQXC22A1#j=)3(bOt`VQ|J)aRRh;0^9HDwgp#L#>M#kU=kqUscxHhjay-*JQ_4@7 zK-2GKiki-+dKC{po|pYkru6BQs&fSW^Qr7IMV_@(zMRr`Q~F6tzfP%I7Y;D*f#a4_ JYJ(b({{_qc2xI^N literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/lib/lib.a b/linux-0.11-lab/4/linux/lib/lib.a new file mode 100644 index 0000000000000000000000000000000000000000..4265c002fcbfbe27389cec61c503ac616d1f8852 GIT binary patch literal 34150 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 QdMAMCTchqEzQW@F3!BgybN~PV literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/lib/malloc.c b/linux-0.11-lab/4/linux/lib/malloc.c new file mode 100644 index 0000000..d7c95d5 --- /dev/null +++ b/linux-0.11-lab/4/linux/lib/malloc.c @@ -0,0 +1,232 @@ +/* + * malloc.c --- a general purpose kernel memory allocator for Linux. + * + * Written by Theodore Ts'o (tytso@mit.edu), 11/29/91 + * + * This routine is written to be as fast as possible, so that it + * can be called from the interrupt level. + * + * Limitations: maximum size of memory we can allocate using this routine + * is 4k, the size of a page in Linux. + * + * The general game plan is that each page (called a bucket) will only hold + * objects of a given size. When all of the object on a page are released, + * the page can be returned to the general free pool. When malloc() is + * called, it looks for the smallest bucket size which will fulfill its + * request, and allocate a piece of memory from that bucket pool. + * + * Each bucket has as its control block a bucket descriptor which keeps + * track of how many objects are in use on that page, and the free list + * for that page. Like the buckets themselves, bucket descriptors are + * stored on pages requested from get_free_page(). However, unlike buckets, + * pages devoted to bucket descriptor pages are never released back to the + * system. Fortunately, a system should probably only need 1 or 2 bucket + * descriptor pages, since a page can hold 256 bucket descriptors (which + * corresponds to 1 megabyte worth of bucket pages.) If the kernel is using + * that much allocated memory, it's probably doing something wrong. :-) + * + * Note: malloc() and free() both call get_free_page() and free_page() + * in sections of code where interrupts are turned off, to allow + * malloc() and free() to be safely called from an interrupt routine. + * (We will probably need this functionality when networking code, + * particularily things like NFS, is added to Linux.) However, this + * presumes that get_free_page() and free_page() are interrupt-level + * safe, which they may not be once paging is added. If this is the + * case, we will need to modify malloc() to keep a few unused pages + * "pre-allocated" so that it can safely draw upon those pages if + * it is called from an interrupt routine. + * + * Another concern is that get_free_page() should not sleep; if it + * does, the code is carefully ordered so as to avoid any race + * conditions. The catch is that if malloc() is called re-entrantly, + * there is a chance that unecessary pages will be grabbed from the + * system. Except for the pages for the bucket descriptor page, the + * extra pages will eventually get released back to the system, though, + * so it isn't all that bad. + */ + +#include +#include +#include + +struct bucket_desc { /* 16 bytes */ + void *page; + struct bucket_desc *next; + void *freeptr; + unsigned short refcnt; + unsigned short bucket_size; +}; + +struct _bucket_dir { /* 8 bytes */ + int size; + struct bucket_desc *chain; +}; + +/* + * The following is the where we store a pointer to the first bucket + * descriptor for a given size. + * + * If it turns out that the Linux kernel allocates a lot of objects of a + * specific size, then we may want to add that specific size to this list, + * since that will allow the memory to be allocated more efficiently. + * However, since an entire page must be dedicated to each specific size + * on this list, some amount of temperance must be exercised here. + * + * Note that this list *must* be kept in order. + */ +struct _bucket_dir bucket_dir[] = { + { 16, (struct bucket_desc *) 0}, + { 32, (struct bucket_desc *) 0}, + { 64, (struct bucket_desc *) 0}, + { 128, (struct bucket_desc *) 0}, + { 256, (struct bucket_desc *) 0}, + { 512, (struct bucket_desc *) 0}, + { 1024, (struct bucket_desc *) 0}, + { 2048, (struct bucket_desc *) 0}, + { 4096, (struct bucket_desc *) 0}, + { 0, (struct bucket_desc *) 0}}; /* End of list marker */ + +/* + * This contains a linked list of free bucket descriptor blocks + */ +struct bucket_desc *free_bucket_desc = (struct bucket_desc *) 0; + +/* + * This routine initializes a bucket description page. + */ +static inline void init_bucket_desc() +{ + struct bucket_desc *bdesc, *first; + int i; + + first = bdesc = (struct bucket_desc *) get_free_page(); + if (!bdesc) + panic("Out of memory in init_bucket_desc()"); + for (i = PAGE_SIZE/sizeof(struct bucket_desc); i > 1; i--) { + bdesc->next = bdesc+1; + bdesc++; + } + /* + * This is done last, to avoid race conditions in case + * get_free_page() sleeps and this routine gets called again.... + */ + bdesc->next = free_bucket_desc; + free_bucket_desc = first; +} + +void *malloc(unsigned int len) +{ + struct _bucket_dir *bdir; + struct bucket_desc *bdesc; + void *retval; + + /* + * First we search the bucket_dir to find the right bucket change + * for this request. + */ + for (bdir = bucket_dir; bdir->size; bdir++) + if (bdir->size >= len) + break; + if (!bdir->size) { + printk("malloc called with impossibly large argument (%d)\n", + len); + panic("malloc: bad arg"); + } + /* + * Now we search for a bucket descriptor which has free space + */ + cli(); /* Avoid race conditions */ + for (bdesc = bdir->chain; bdesc; bdesc = bdesc->next) + if (bdesc->freeptr) + break; + /* + * If we didn't find a bucket with free space, then we'll + * allocate a new one. + */ + if (!bdesc) { + char *cp; + int i; + + if (!free_bucket_desc) + init_bucket_desc(); + bdesc = free_bucket_desc; + free_bucket_desc = bdesc->next; + bdesc->refcnt = 0; + bdesc->bucket_size = bdir->size; + bdesc->page = bdesc->freeptr = (void *) (cp = get_free_page()); + if (!cp) + panic("Out of memory in kernel malloc()"); + /* Set up the chain of free objects */ + for (i=PAGE_SIZE/bdir->size; i > 1; i--) { + *((char **) cp) = cp + bdir->size; + cp += bdir->size; + } + *((char **) cp) = 0; + bdesc->next = bdir->chain; /* OK, link it in! */ + bdir->chain = bdesc; + } + retval = (void *) bdesc->freeptr; + bdesc->freeptr = *((void **) retval); + bdesc->refcnt++; + sti(); /* OK, we're safe again */ + return(retval); +} + +/* + * Here is the free routine. If you know the size of the object that you + * are freeing, then free_s() will use that information to speed up the + * search for the bucket descriptor. + * + * We will #define a macro so that "free(x)" is becomes "free_s(x, 0)" + */ +void free_s(void *obj, int size) +{ + void *page; + struct _bucket_dir *bdir; + struct bucket_desc *bdesc, *prev; + + /* Calculate what page this object lives in */ + page = (void *) ((unsigned long) obj & 0xfffff000); + /* Now search the buckets looking for that page */ + for (bdir = bucket_dir; bdir->size; bdir++) { + prev = 0; + /* If size is zero then this conditional is always false */ + if (bdir->size < size) + continue; + for (bdesc = bdir->chain; bdesc; bdesc = bdesc->next) { + if (bdesc->page == page) + goto found; + prev = bdesc; + } + } + panic("Bad address passed to kernel free_s()"); +found: + cli(); /* To avoid race conditions */ + *((void **)obj) = bdesc->freeptr; + bdesc->freeptr = obj; + bdesc->refcnt--; + if (bdesc->refcnt == 0) { + /* + * We need to make sure that prev is still accurate. It + * may not be, if someone rudely interrupted us.... + */ + if ((prev && (prev->next != bdesc)) || + (!prev && (bdir->chain != bdesc))) + for (prev = bdir->chain; prev; prev = prev->next) + if (prev->next == bdesc) + break; + if (prev) + prev->next = bdesc->next; + else { + if (bdir->chain != bdesc) + panic("malloc bucket chains corrupted"); + bdir->chain = bdesc->next; + } + free_page((unsigned long) bdesc->page); + bdesc->next = free_bucket_desc; + free_bucket_desc = bdesc; + } + sti(); + return; +} + diff --git a/linux-0.11-lab/4/linux/lib/malloc.o b/linux-0.11-lab/4/linux/lib/malloc.o new file mode 100644 index 0000000000000000000000000000000000000000..83667757057ff0915c7c4ad6ae9f4d0c0160ea5d GIT binary patch literal 4880 zcma)AS!`Ta89sOBdNTId@?Fn#g3%ipE_#~_of1bL9E?Nob`ab!I zi+!(7T-}TyePri5q3N3vn|36JywH3rg7ig|=;VdqFN>4|Y6uD0$b_k=Ozh-m4gGIv zI%LD9cRm58cWNkl@`4|l?@)}?Ahli*ydk0WLLZY-Bqxr*atWsx2y&Iz zQ1g(^z4->@t0pdP##;1&99S)`$%Svb1UW~T9|qN>$66&9Xz+Mw{to(0$ucMAd%z^5 zsx45e1P1PsQe}d~6C!wxTZ1Ve4odw4tl?9LEbGU0OQ?zs$Z02#;(*FHF*VeDKiCAS z-K?TEkDk2Hdh$HH5xPtGEf9AhAMBq*z}?ygU-|`*FUMK ztQwMHeY;T9`P+36j^gt$ylB#2GF+vqk9thnNjbH}1CY=vxtnf0Gl3(3^_R`jIHd8* z8W#_1NDFL@QH>^mWin7}?XuCyX7W@C@xE~mx?b5WIx02> zLEA>-eBN_wHK&@X)i9V}akSy6=ei>`X{hs2NjkalOrczJauv@Ds=k{SJ(#+hwQa3M zSSyK3=UF}9VptKO1z?*sSO$bsFtF|*DZ*bMeP}EFgIxg~u_Au} z6Mq+-b?$9Q4&$><&7*IwWFLi44Io-&J8t<=Zfh zuznSU0PRfU2DBaQ8kyeDA?b9`Sr0OU2D#py6BO)cJS7lTyR|yr84Jf(#@nrqNZYL_ zL8ldt$6^~}n_^ZcR;)#Y<79SrZouN(ts(|!Anb%Xk_5380fbngNgT0g8Zqd^phJo0 zwskX9Cju zNweIX?UuE(lL>Y7h@GANm`>+XX7_Z{UhooUY0ViTWeyGLH}QqUZRjoQM!W^R{I!7S zmOl0A9PLml87BOOu!f?Y!K?_`p&53U+3iDTMRrAw%}qZTZrnUG+b0DNM^4W~x4zOd zcUJLdB42u8`jP3`nak1Z!OL`vZdvM2=^#gDF8}!K-1VLZ!cDuj{c`4s+5WlN{u5Gp zCQ_03a3mc2&dZ2<{T<2s=tIAV1aot9W~9TxTXVCoU7q`DPfy6kyhbZQIWKC3$6VpL zqd6SdEH6aCo2cr0!d#LCPu%yZhn(%sV0uG(&`FgtUT%C#;S(F~bW&qZYP3=+_^DAZ zQ*u+)3eLUjL0Bjk3uQMo8kBQ>p@RD>HCnEuYJMhnFje&`zMJzao*b(FG8X;gm6F?E z4)T6~rIsqYhx-vGIFcGjuUnTYX0rVQN`O9#bdehK_m5UN2mer}C~#eR;^s?UEDiz> zb<-|Rk5iU+tf-AwJl_e*wZd2#cQdarbroa9tC=y^xX6-KJ@=4UW;)r#jsR(Dn0prXBggk@H{;7>{|~kFP%76)3yw1cv>#(bDMt54>`qijVOamt&f}2U75-!=og0Gw}>>uwHJ9zw?*k zVq5;#Fyq&cK;Fz+xr9Z7Fy$*i6k1kU+M82p?76~AExfF9wCBn%wXkSeVnBsu1(rl% zS&4c+F3&k7!}!|a@iDDt=IzM;F3l5I$9r$$9{|s}@Luh}eD>U=e+0a_Td6;AlYZ&d zc;7oz_om8c$nboG#_$)36w0@znkg4@I+Cb*c#IC3mutyL?S&9F)`yXU)gZ)2fg$X_ z&ydIDG8(HyY@X+dusaJ3VMD#B`IpGU@1Nx1XJhWfE{*Ge9Ov`o;eUWU>>IIB8MjD; z{EI-!*J9g{9{`fyP5gimdniZTtVZq*-Z%J91Yu$6c}9r*KN4a$5ixs+*l1i!%GYb$ zs&SV_-ci(NHOjjK{NtMcipJ+O{!rr!M2z!_=6|j6ipGCveJkgWcpuWZR^#17_>XAb z( +#include + +int open(const char * filename, int flag, ...) +{ + register int res; + va_list arg; + + va_start(arg,flag); + __asm__("int $0x80" + :"=a" (res) + :"0" (__NR_open),"b" (filename),"c" (flag), + "d" (va_arg(arg,int))); + if (res>=0) + return res; + errno = -res; + return -1; +} diff --git a/linux-0.11-lab/4/linux/lib/open.o b/linux-0.11-lab/4/linux/lib/open.o new file mode 100644 index 0000000000000000000000000000000000000000..5490bb1a66d83fe50c3618ad8174bf2457ea739e GIT binary patch literal 2364 zcma)7U1%It6h3!mlHFvJZGQYoNWc+NjXyh^*hNZzY-*w0ediYUg}-Pzs2-I+Ku zThdxJ5(|bXng=O@Z+-5Y4;2K3D!x=ue2EA?2@3k4Pd@lizjN>0?(|6ybMN`R-#z!- zd*{CO%;{%^5Tr?vNj;6|6-#+4lFiaRG)iZ;{}_3HX=Zx+OKWFoW@z^`L~v^t-S%(R z?#PWkMDM;dGx6=#&dn=7ZCX3~zZZA*|K7jGC^v3{w!a#A@#ZaP3f~e_kVO&Q4jR+4 zVq{o3jx(&jU%^bP&kqtZjNGSe6#3VsFZZ+5`hNtoVrg>G_gT-O??)q1IK&LZz~Yn7 z(C0W$QDD*7que)A<1k~-$`3?dOk$W-adyCsnn>@w^d-Rk0@5IZ7w$!8elNkrs5n?0 zFPO!t;;0zwAGse$GgK%%1rvf&F^?4QBeQseG_~KBTHg7!yQ!G#aRonO7)m8+?cur2uP+ePZ(1B;uyg3^ZMAmUMMlei_Z61@uDv zQyfMw4+M^ZaGbIq)Y{#;M-*;&fm1^i#Yr9Ya9Vs)x`7W>$yke=$1I4o>#IN9T3Ok9 z!RP}X52c3R_5!!#X&^6(f{;$FowFD1igVbh*rkpe)mq2>Lx-QVOHI4f2s?gKYD5@R z+6b}lUIe2bwEe&)sirx3+{RwnIXT}Zw6l7uC?5V z%B`^Dm4j|QDTi?xINi*LD(bGa;w$CN4SEI3|aU zb+6iOuKPhFgiFe9wHkRBvR*fGgC$vkM_@gpHbvo`!8mC=bdSg-p$1#13# + +_syscall0(pid_t,setsid) diff --git a/linux-0.11-lab/4/linux/lib/setsid.o b/linux-0.11-lab/4/linux/lib/setsid.o new file mode 100644 index 0000000000000000000000000000000000000000..6f70845664bc088cc44b4a210388e0127e8923b0 GIT binary patch literal 2244 zcma)7&2Jk;6o0e3vD4T!&If6%6tSRGgpXY()T*jd+NuHCN~oYp<%X=ay|!1ecf)=_ zQX)W#kXm}G1VSKg<-iq*Lxs4(l>;~a0WOdOZ~+OV@_Vy0_EsF=$@9KHX5RD6zWd_K zF9{(?gCLWp649ZVTUwH=(-O_o!D0R0MabX3ck6|<>cRe6m3B+F!TwTb{Kt=X+4ZPg9t^zoTbunc+?Sct!BM}g&BFb(0l%^>WKvYy{e_7a+ki1O1U=(%0a zknZjHi96&0W?_(|J@B&PjKt;<^xv>VY1RfY`o9|%iezCD3_`zWbDJmGa)y#&6sPtB zE;~W5osu8NVMLd%UbnaGmV4T5+0NLDyTj*$lc!JF&cJs1(Ktw*e(a5XXD32(KZY_0 zM?vU2{VeRJK@=uXg^`n_UU%EsiKEo-rcq4ocI+oOgW6el=*2XO!a=^r;D*m9rRFdi z`^_-xrOha5B5$_qY`B}7&dBRDyIGv8fIB2J(50=dGxqxRP8OzFzH8^%OiG*YY_{Bu z)|0swtz6=M0>q7LB=%>;YSprCqOYvyK{CkUZPk{xYxsM+$=*2iI-qHs)1l^Kf8?hA zZc1*?OFeQs2}a1up5Ms^?I7$&FiGC)bYlO_qScGNaDZkM0=R=Z05!<%M&q%M>A4{q z=wc{&L-QDa*p@@c_xykGqj2IkproAn?ic^4Y-3o(IwH9oE#ZdXM+;c&!ddeS5Q30#NQb1OC5`A7W4fL zKfL!7(D^0`#T4}x{dT`-fAA~G`HK};=IT>0 diff --git a/linux-0.11-lab/4/linux/lib/string.o b/linux-0.11-lab/4/linux/lib/string.o new file mode 100644 index 0000000000000000000000000000000000000000..840f038b2beb337cf418b004cd61fe5f8badc3b6 GIT binary patch literal 6380 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 b$T5+-MNW%6E;57|# +#include + +_syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options) + +pid_t wait(int * wait_stat) +{ + return waitpid(-1,wait_stat,0); +} diff --git a/linux-0.11-lab/4/linux/lib/wait.o b/linux-0.11-lab/4/linux/lib/wait.o new file mode 100644 index 0000000000000000000000000000000000000000..b60510b4f0d32d080f741fe9a4f116ed854eece0 GIT binary patch literal 2580 zcma)8O^6&t6t3#-nVszHPG%ELc1geyCm1!;lQoNmm|r&nd#jb-05Ds zd-BKP4~t;fQ$P(uZXtLQ1wn#G6Nnd);KhR%J^2&CpMyvi;`dco?Q}rU2lc-9Q}4a1 zSJgH1#uG=Llu`;qQrKdk3GthgdZrX?6?cg-@!ZnQ^74`D<|{)mF27tIUw*z?`RdJc z2dg7Xi`5ZvI=>9@mooWZ-(F(mmD`}DYvmJHmu`++KUgi$2!9zt&UL3s_m3-T&dAlD z;7iLoas;yc8*CASG^4l>mNWDdhDym#+_s(hQlVlR!%x1()(xX%t-DG2ATay7g|*n(w#$dVD4p z167DqUN>=DOp%;f@ME{btJn{^angpY>g5!-hvm~aQ<*P(39x4W$e-9#_{efl$B&{Q z6gbC5A`TrrUYV{;xjWsdO0DNbt<07Q zz^~2rgI3ZFgBYeDti_4fdbPF?g^Axv!bq*N0b_#2#of8UZ&z9!FB0`m*z@Z_zn#>> zxQRF%!UJG6AR|+*a7@`Dlh4 z;FMgPe0pkWjNfUfljdUoAKim#XocXrLgM>3LqQXLq)ixWl$5e!LF+O%% zv~B}Q@20TIO}>X<;r#!a$Mu*PCSkr`DQGgj?a;I9+YRLt*totNhFRZ!$R-A&cnivB z6f_y%G3Z97>rs4<6$+Y+kDq?F?#)bJxIa_Zhiqb);zi^;OF@(IdC;@@R-iBs_c4rN z^1TL`G2A!l2Hy*lM2l1xwY)kH4Sx_eL!86$wnk&WWe!FgOzIExJoP+5UctO)O%Ral zBfW=_-G_t4mto^R)?%1_j6u$pIs(Tf*bJGvL{pQ#GMfS;UUV^v!FfZ(u;Sz%OKm zY}LVm!A1wz4iew7b!ZHGVTkeu4D(w}zj;Ra2=o0-e@@hsEb5pmQSv3Ah34{YkYMUR z3i`=2lfb(*@`qC5aPB2yAzQUw<-t7l4FjLj_GdJ{pz#%rO^x$J!Q9@7MSbYi>F| literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/lib/write.c b/linux-0.11-lab/4/linux/lib/write.c new file mode 100644 index 0000000..df52e74 --- /dev/null +++ b/linux-0.11-lab/4/linux/lib/write.c @@ -0,0 +1,10 @@ +/* + * linux/lib/write.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include + +_syscall3(int,write,int,fd,const char *,buf,off_t,count) diff --git a/linux-0.11-lab/4/linux/lib/write.o b/linux-0.11-lab/4/linux/lib/write.o new file mode 100644 index 0000000000000000000000000000000000000000..34f41463fb65e3f733570df99f7edda9cb1b4527 GIT binary patch literal 2376 zcma)7OK%%h6h3!m{79U-c@#*LN(_<<;W6WcS||#Xrle4Us#YqL1r%9hdmIngGwD3q zq>2D3LTVKj&4QQ229;mH0%d{Nv`DZ3i4~RDuwny3z=lN^N?;LN?dfbCo3uiyLzT3XW(laR%)AR9o2V<{ueD18M{GYUU}=|;ix zW74z|*V07!O)yzQGoO%Qr5~iD_#If`OAs-76qJEWich})Ep|JZUE8H%E9pXGyS8hT ziX1iiqSVUeU!*2W@5VG@>_H!W4Wu##qW>ssiwSY0I#toDv(*VPSsZ@=m1)E-cNdUsq%DXbqc$)#qpU`ePm{JiZhp|KYDIPz*j7gUQPqGX`&L;ERWT4;~sV7 zAlBlFqYo3a%Fum$=9wAn^Ds~Ys(!Pi8q9JC)aWdz5O=BvK;=Ea^o4ELJ-^*gI&MAM zjA*D5T@Jn2wcA`E-duMhyT|t>@x3VSK$Z&@B-Ka6OBkUjmcIqlx_@g0tPym(&6wIj zf{D6e=m&J_%z1OgY}ku-!?XrY*zO(kjxIiBT5G1&4F+Cpbwg+1TI&IBfg8f;`F+oK zt#0DCV=wR{nEb$sVyFF^NY*_R5 z!h+RzTJ?4krY6u9MZF-5&HZ$~d-Bx7ifocqBkzjKZJ>VOubFIaHbXZWcInj0%91&E zzJ=o^=^3pj6R9n{z0k1d8;_<|?&l#U0CD9UiLJ7j9W#upXf6+ukwFgdM76xFtyHHk zSIZ}ERt>VF%|Yz6z~eCGJtc*1-;UjlnCy-dJ7l*ajFXKWx0S3lJ--{kC1t183f)V2 zuM;}{8cvf-;Kr*2tU-1=7z|vT+xF3S8?#L3kmk6(rkq{6_y0p5L=e9}{D)-VcPD>o z*~c&o9FbB=uH%n}AIT>LoSz5Qj{rGG2Qpkt**;bE9*2eF|0|C7qjI$21LZpdJ-_Z8lyTU2T|S>$ z*M+QdAkrNumsrR^`5fr^dW%rF4%Zt6s(Rc9&f#-2T*MRbM=DCnKE|z#tGFf_{+NtN ziHdtKi&L&^YA~6B;}|{xvYbA2MDHVRksTTE{un+0=FhR5JI6uz)Hx;~=a;$#|->^d~r8VmbiidfazjGhc55&ASga1*)FX70=rZ`s=Q;Gr#u>&3b+X*43%g zEM4BXVFjJA*&OI{qC}1lOSd3&3v@vj6}9 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/mm/Makefile b/linux-0.11-lab/4/linux/mm/Makefile new file mode 100644 index 0000000..e0bcd73 --- /dev/null +++ b/linux-0.11-lab/4/linux/mm/Makefile @@ -0,0 +1,38 @@ +AR =ar +AS =as +LD =ld +LDFLAGS =-m elf_i386 -Ttext 0 -e startup_32 +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -finline-functions -nostdinc -fno-stack-protector -I../include +CPP =gcc -E -nostdinc -I../include + +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< +.s.o: + $(AS) -o $*.o $< +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< + +OBJS = memory.o page.o + +all: mm.o + +mm.o: $(OBJS) + $(LD) -r -o mm.o $(OBJS) + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +memory.o : memory.c ../include/signal.h ../include/sys/types.h \ + ../include/asm/system.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/linux/mm.h ../include/linux/kernel.h diff --git a/linux-0.11-lab/4/linux/mm/memory.c b/linux-0.11-lab/4/linux/mm/memory.c new file mode 100644 index 0000000..32a7a99 --- /dev/null +++ b/linux-0.11-lab/4/linux/mm/memory.c @@ -0,0 +1,466 @@ +/* + * linux/mm/memory.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * demand-loading started 01.12.91 - seems it is high on the list of + * things wanted, and it should be easy to implement. - Linus + */ + +/* + * Ok, demand-loading was easy, shared pages a little bit tricker. Shared + * pages started 02.12.91, seems to work. - Linus. + * + * Tested sharing by executing about 30 /bin/sh: under the old kernel it + * would have taken more than the 6M I have free, but it worked well as + * far as I could see. + * + * Also corrected some "invalidate()"s - I wasn't doing enough of them. + */ + +#include + +#include + +#include +#include +#include + +volatile void do_exit(long code); + +static inline volatile void oom(void) +{ + printk("out of memory\n\r"); + do_exit(SIGSEGV); +} + +#define invalidate() \ +__asm__("movl %%eax,%%cr3"::"a" (0)) + +/* these are not to be changed without changing head.s etc */ +#define LOW_MEM 0x100000 +#define PAGING_MEMORY (15*1024*1024) +#define PAGING_PAGES (PAGING_MEMORY>>12) +#define MAP_NR(addr) (((addr)-LOW_MEM)>>12) +#define USED 100 + +#define CODE_SPACE(addr) ((((addr)+4095)&~4095) < \ +current->start_code + current->end_code) + +static long HIGH_MEMORY = 0; + +#define copy_page(from,to) \ +__asm__("cld ; rep ; movsl"::"S" (from),"D" (to),"c" (1024)) + +static unsigned char mem_map [ PAGING_PAGES ] = {0,}; + +/* + * Get physical address of first (actually last :-) free page, and mark it + * used. If no free pages left, return 0. + */ +unsigned long get_free_page(void) +{ +register unsigned long __res asm("ax"); + +__asm__("std ; repne ; scasb\n\t" + "jne 1f\n\t" + "movb $1,1(%%edi)\n\t" + "sall $12,%%ecx\n\t" + "addl %2,%%ecx\n\t" + "movl %%ecx,%%edx\n\t" + "movl $1024,%%ecx\n\t" + "leal 4092(%%edx),%%edi\n\t" + "rep ; stosl\n\t" + "movl %%edx,%%eax\n\t" + "1:" + "cld\n\t" /* by wyj */ + :"=a" (__res) + :"0" (0),"i" (LOW_MEM),"c" (PAGING_PAGES), + "D" (mem_map+PAGING_PAGES-1) + ); +return __res; +} + +/* + * Free a page of memory at physical address 'addr'. Used by + * 'free_page_tables()' + */ +void free_page(unsigned long addr) +{ + if (addr < LOW_MEM) return; + if (addr >= HIGH_MEMORY) + panic("trying to free nonexistent page"); + addr -= LOW_MEM; + addr >>= 12; + if (mem_map[addr]--) return; + mem_map[addr]=0; + panic("trying to free free page"); +} + +/* + * This function frees a continuos block of page tables, as needed + * by 'exit()'. As does copy_page_tables(), this handles only 4Mb blocks. + */ +int free_page_tables(unsigned long from,unsigned long size) +{ + unsigned long *pg_table; + unsigned long * dir, nr; + + if (from & 0x3fffff) + panic("free_page_tables called with wrong alignment"); + if (!from) + panic("Trying to free up swapper memory space"); + size = (size + 0x3fffff) >> 22; + dir = (unsigned long *) ((from>>20) & 0xffc); /* _pg_dir = 0 */ + for ( ; size-->0 ; dir++) { + if (!(1 & *dir)) + continue; + pg_table = (unsigned long *) (0xfffff000 & *dir); + for (nr=0 ; nr<1024 ; nr++) { + if (1 & *pg_table) + free_page(0xfffff000 & *pg_table); + *pg_table = 0; + pg_table++; + } + free_page(0xfffff000 & *dir); + *dir = 0; + } + invalidate(); + return 0; +} + +/* + * Well, here is one of the most complicated functions in mm. It + * copies a range of linerar addresses by copying only the pages. + * Let's hope this is bug-free, 'cause this one I don't want to debug :-) + * + * Note! We don't copy just any chunks of memory - addresses have to + * be divisible by 4Mb (one page-directory entry), as this makes the + * function easier. It's used only by fork anyway. + * + * NOTE 2!! When from==0 we are copying kernel space for the first + * fork(). Then we DONT want to copy a full page-directory entry, as + * that would lead to some serious memory waste - we just copy the + * first 160 pages - 640kB. Even that is more than we need, but it + * doesn't take any more memory - we don't copy-on-write in the low + * 1 Mb-range, so the pages can be shared with the kernel. Thus the + * special case for nr=xxxx. + */ +int copy_page_tables(unsigned long from,unsigned long to,long size) +{ + unsigned long * from_page_table; + unsigned long * to_page_table; + unsigned long this_page; + unsigned long * from_dir, * to_dir; + unsigned long nr; + + if ((from&0x3fffff) || (to&0x3fffff)) + panic("copy_page_tables called with wrong alignment"); + from_dir = (unsigned long *) ((from>>20) & 0xffc); /* _pg_dir = 0 */ + to_dir = (unsigned long *) ((to>>20) & 0xffc); + size = ((unsigned) (size+0x3fffff)) >> 22; + for( ; size-->0 ; from_dir++,to_dir++) { + if (1 & *to_dir) + panic("copy_page_tables: already exist"); + if (!(1 & *from_dir)) + continue; + from_page_table = (unsigned long *) (0xfffff000 & *from_dir); + if (!(to_page_table = (unsigned long *) get_free_page())) + return -1; /* Out of memory, see freeing */ + *to_dir = ((unsigned long) to_page_table) | 7; + nr = (from==0)?0xA0:1024; + for ( ; nr-- > 0 ; from_page_table++,to_page_table++) { + this_page = *from_page_table; + if (!(1 & this_page)) + continue; + this_page &= ~2; + *to_page_table = this_page; + if (this_page > LOW_MEM) { + *from_page_table = this_page; + this_page -= LOW_MEM; + this_page >>= 12; + mem_map[this_page]++; + } + } + } + invalidate(); + return 0; +} + +/* + * This function puts a page in memory at the wanted address. + * It returns the physical address of the page gotten, 0 if + * out of memory (either when trying to access page-table or + * page.) + */ +unsigned long put_page(unsigned long page,unsigned long address) +{ + unsigned long tmp, *page_table; + +/* NOTE !!! This uses the fact that _pg_dir=0 */ + + if (page < LOW_MEM || page >= HIGH_MEMORY) + printk("Trying to put page %p at %p\n",page,address); + if (mem_map[(page-LOW_MEM)>>12] != 1) + printk("mem_map disagrees with %p at %p\n",page,address); + page_table = (unsigned long *) ((address>>20) & 0xffc); + if ((*page_table)&1) + page_table = (unsigned long *) (0xfffff000 & *page_table); + else { + if (!(tmp=get_free_page())) + return 0; + *page_table = tmp|7; + page_table = (unsigned long *) tmp; + } + page_table[(address>>12) & 0x3ff] = page | 7; +/* no need for invalidate */ + return page; +} + +void un_wp_page(unsigned long * table_entry) +{ + unsigned long old_page,new_page; + + old_page = 0xfffff000 & *table_entry; + if (old_page >= LOW_MEM && mem_map[MAP_NR(old_page)]==1) { + *table_entry |= 2; + invalidate(); + return; + } + if (!(new_page=get_free_page())) + oom(); + if (old_page >= LOW_MEM) + mem_map[MAP_NR(old_page)]--; + *table_entry = new_page | 7; + invalidate(); + copy_page(old_page,new_page); +} + +/* + * This routine handles present pages, when users try to write + * to a shared page. It is done by copying the page to a new address + * and decrementing the shared-page counter for the old page. + * + * If it's in code space we exit with a segment error. + */ +void do_wp_page(unsigned long error_code,unsigned long address) +{ +#if 0 +/* we cannot do this yet: the estdio library writes to code space */ +/* stupid, stupid. I really want the libc.a from GNU */ + if (CODE_SPACE(address)) + do_exit(SIGSEGV); +#endif + un_wp_page((unsigned long *) + (((address>>10) & 0xffc) + (0xfffff000 & + *((unsigned long *) ((address>>20) &0xffc))))); + +} + +void write_verify(unsigned long address) +{ + unsigned long page; + + if (!( (page = *((unsigned long *) ((address>>20) & 0xffc)) )&1)) + return; + page &= 0xfffff000; + page += ((address>>10) & 0xffc); + if ((3 & *(unsigned long *) page) == 1) /* non-writeable, present */ + un_wp_page((unsigned long *) page); + return; +} + +void get_empty_page(unsigned long address) +{ + unsigned long tmp; + + if (!(tmp=get_free_page()) || !put_page(tmp,address)) { + free_page(tmp); /* 0 is ok - ignored */ + oom(); + } +} + +/* + * try_to_share() checks the page at address "address" in the task "p", + * to see if it exists, and if it is clean. If so, share it with the current + * task. + * + * NOTE! This assumes we have checked that p != current, and that they + * share the same executable. + */ +static int try_to_share(unsigned long address, struct task_struct * p) +{ + unsigned long from; + unsigned long to; + unsigned long from_page; + unsigned long to_page; + unsigned long phys_addr; + + from_page = to_page = ((address>>20) & 0xffc); + from_page += ((p->start_code>>20) & 0xffc); + to_page += ((current->start_code>>20) & 0xffc); +/* is there a page-directory at from? */ + from = *(unsigned long *) from_page; + if (!(from & 1)) + return 0; + from &= 0xfffff000; + from_page = from + ((address>>10) & 0xffc); + phys_addr = *(unsigned long *) from_page; +/* is the page clean and present? */ + if ((phys_addr & 0x41) != 0x01) + return 0; + phys_addr &= 0xfffff000; + if (phys_addr >= HIGH_MEMORY || phys_addr < LOW_MEM) + return 0; + to = *(unsigned long *) to_page; + if (!(to & 1)) + if (to = get_free_page()) + *(unsigned long *) to_page = to | 7; + else + oom(); + to &= 0xfffff000; + to_page = to + ((address>>10) & 0xffc); + if (1 & *(unsigned long *) to_page) + panic("try_to_share: to_page already exists"); +/* share them: write-protect */ + *(unsigned long *) from_page &= ~2; + *(unsigned long *) to_page = *(unsigned long *) from_page; + invalidate(); + phys_addr -= LOW_MEM; + phys_addr >>= 12; + mem_map[phys_addr]++; + return 1; +} + +/* + * share_page() tries to find a process that could share a page with + * the current one. Address is the address of the wanted page relative + * to the current data space. + * + * We first check if it is at all feasible by checking executable->i_count. + * It should be >1 if there are other tasks sharing this inode. + */ +static int share_page(unsigned long address) +{ + struct task_struct ** p; + + if (!current->executable) + return 0; + if (current->executable->i_count < 2) + return 0; + for (p = &LAST_TASK ; p > &FIRST_TASK ; --p) { + if (!*p) + continue; + if (current == *p) + continue; + if ((*p)->executable != current->executable) + continue; + if (try_to_share(address,*p)) + return 1; + } + return 0; +} + +void do_no_page(unsigned long error_code,unsigned long address) +{ + int nr[4]; + unsigned long tmp; + unsigned long page; + int block,i; + + if (current->pid > 5) + printk(" --do_no_page: address=%x, pid=%d\n", address, current->pid); + + address &= 0xfffff000; + tmp = address - current->start_code; + if (!current->executable || tmp >= current->end_data) { + get_empty_page(address); + return; + } + if (share_page(tmp)) + return; + if (!(page = get_free_page())) + oom(); +/* remember that 1 block is used for header */ + block = 1 + tmp/BLOCK_SIZE; + for (i=0 ; i<4 ; block++,i++) + nr[i] = bmap(current->executable,block); + bread_page(page,current->executable->i_dev,nr); + i = tmp + 4096 - current->end_data; + tmp = page + 4096; + while (i-- > 0) { + tmp--; + *(char *)tmp = 0; + } + if (put_page(page,address)) + return; + free_page(page); + oom(); +} +void load_all(unsigned long error_code,unsigned long address) +{ + int nr[4]; + unsigned long tmp; + unsigned long page; + int block,i; + + address &= 0xfffff000; + tmp = address - current->start_code; + if (!current->executable || tmp >= current->end_data) { + get_empty_page(address); + return; + } + if (share_page(tmp)) + return; + if (!(page = get_free_page())) + oom(); +/* remember that 1 block is used for header */ + block = 1 + tmp/BLOCK_SIZE; + for (i=0 ; i<4 ; block++,i++) + nr[i] = bmap(current->executable,block); + bread_page(page,current->executable->i_dev,nr); + i = tmp + 4096 - current->end_data; + tmp = page + 4096; + while (i-- > 0) { + tmp--; + *(char *)tmp = 0; + } + if (put_page(page,address)) + return; + free_page(page); + oom(); +} +void mem_init(long start_mem, long end_mem) +{ + int i; + + HIGH_MEMORY = end_mem; + for (i=0 ; i>= 12; + while (end_mem-->0) + mem_map[i++]=0; +} + +void calc_mem(void) +{ + int i,j,k,free=0; + long * pg_tbl; + + for(i=0 ; ic5C<4R^^C=##-If*4=8ezu$eIcQV25 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 V>I~--A3Lr4*wJYR`&x3K@}JNJF^2#E literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/mm/page.o b/linux-0.11-lab/4/linux/mm/page.o new file mode 100644 index 0000000000000000000000000000000000000000..da4852668a6d8b88d91c428ae8572bb3d4d2090d GIT binary patch literal 640 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 N^|Cbi(V*L${{d;jp)>#h literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/4/linux/tools/build.c b/linux-0.11-lab/4/linux/tools/build.c new file mode 100644 index 0000000..8b8c7ab --- /dev/null +++ b/linux-0.11-lab/4/linux/tools/build.c @@ -0,0 +1,171 @@ +/* + * linux/tools/build.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This file builds a disk-image from three different files: + * + * - bootsect: max 510 bytes of 8086 machine code, loads the rest + * - setup: max 4 sectors of 8086 machine code, sets up system parm + * - system: 80386 code for actual system + * + * It does some checking that all files are of the correct type, and + * just writes the result to stdout, removing headers and padding to + * the right amount. It also writes some system data to stderr. + */ + +/* + * Changes by tytso to allow root device specification + */ + +#include /* fprintf */ +#include +#include /* contains exit */ +#include /* unistd.h needs this */ +#include +#include +#include /* contains read/write */ +#include + +#define MAJOR(a) (((unsigned)(a))>>8) +#define MINOR(a) ((a)&0xff) + +#define MINIX_HEADER 32 +#define GCC_HEADER 0x80 /* 0x1000 */ /* by wyj */ + +#define SYS_SIZE 0x3000 + +#define DEFAULT_MAJOR_ROOT 0x03 //0x02 /* by wyj */ +#define DEFAULT_MINOR_ROOT 0x00 //0x1d + +/* max nr of sectors of setup: don't change unless you also change + * bootsect etc */ +#define SETUP_SECTS 4 + +#define STRINGIFY(x) #x + +void die(char * str) +{ + fprintf(stderr,"%s\n",str); + exit(1); +} + +void usage(void) +{ + die("Usage: build bootsect setup system [rootdev] [> image]"); +} + +int main(int argc, char ** argv) +{ + int i,c,id; + char buf[1024*4]; /* by wyj */ + char major_root, minor_root; + struct stat sb; + + if ((argc != 4) && (argc != 5)) + usage(); + if (argc == 5) { + if (strcmp(argv[4], "FLOPPY")) { + if (stat(argv[4], &sb)) { + perror(argv[4]); + die("Couldn't stat root device."); + } + major_root = MAJOR(sb.st_rdev); + minor_root = MINOR(sb.st_rdev); + } else { + major_root = 0; + minor_root = 0; + } + } else { + major_root = DEFAULT_MAJOR_ROOT; + minor_root = DEFAULT_MINOR_ROOT; + } + fprintf(stderr, "Root device is (%d, %d)\n", major_root, minor_root); + if ((major_root != 2) && (major_root != 3) && + (major_root != 0)) { + fprintf(stderr, "Illegal root device (major = %d)\n", + major_root); + die("Bad root device --- major #"); + } + for (i=0;i0 ; i+=c ) + if (write(1,buf,c)!=c) + die("Write call failed"); + close (id); + if (i > SETUP_SECTS*512) + die("Setup exceeds " STRINGIFY(SETUP_SECTS) + " sectors - rewrite build/boot/setup"); + fprintf(stderr,"Setup is %d bytes.\n",i); + for (c=0 ; c sizeof(buf)) + c = sizeof(buf); + if (write(1,buf,c) != c) + die("Write call failed"); + i += c; + } + + if ((id=open(argv[3],O_RDONLY,0))<0) + die("Unable to open 'system'"); + if (read(id,buf,GCC_HEADER) != GCC_HEADER) + die("Unable to read header of 'system'"); +// if (((long *) buf)[5] != 0) +// die("Non-GCC header of 'system'"); + for (i=0 ; (c=read(id,buf,sizeof buf))>0 ; i+=c ) + if (write(1,buf,c)!=c) + die("Write call failed"); + close(id); + fprintf(stderr,"System is %d bytes.\n",i); + if (i > SYS_SIZE*16) + die("System is too big"); + return(0); +} diff --git a/linux-0.11-lab/4/linux/tools/system b/linux-0.11-lab/4/linux/tools/system new file mode 100644 index 0000000000000000000000000000000000000000..8b17e336b01baf6995caec561aeb9a84a04f8605 GIT binary patch literal 297648 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 Cri=yv literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/Makefile b/linux-0.11-lab/0/linux/Makefile new file mode 100644 index 0000000..ecbcf30 --- /dev/null +++ b/linux-0.11-lab/0/linux/Makefile @@ -0,0 +1,125 @@ +# +# if you want the ram-disk device, define this to be the +# size in blocks. +# +RAMDISK = #-DRAMDISK=512 + +AS86 =as86 -0 -a +LD86 =ld86 -0 + +AS =as +LD =ld +LDFLAGS =-m elf_i386 -Ttext 0 -e startup_32 -Map=System.map.2 -N +CC =gcc -march=i386 $(RAMDISK) +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -fno-stack-protector -mcld +CPP =cpp -nostdinc -Iinclude + +# +# ROOT_DEV specifies the default root-device when making the image. +# This can be either FLOPPY, /dev/xxxx or empty, in which case the +# default of /dev/hd6 is used by 'build'. +# +ROOT_DEV= + +ARCHIVES=kernel/kernel.o mm/mm.o fs/fs.o +DRIVERS =kernel/blk_drv/blk_drv.a kernel/chr_drv/chr_drv.a +MATH =kernel/math/math.a +LIBS =lib/lib.a + +.c.s: + $(CC) $(CFLAGS) \ + -nostdinc -Iinclude -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -nostdinc -Iinclude -c -o $*.o $< + +all: Image + +Image: boot/bootsect boot/setup tools/system tools/build + cp -f tools/system system.tmp + strip system.tmp + tools/build boot/bootsect boot/setup system.tmp $(ROOT_DEV) > Image + rm -f system.tmp + sync + +disk: Image + dd bs=8192 if=Image of=/dev/PS0 + +tools/build: tools/build.c + $(CC) $(CFLAGS) \ + -o tools/build tools/build.c + +boot/head.o: boot/head.s + +tools/system: boot/head.o init/main.o \ + $(ARCHIVES) $(DRIVERS) $(MATH) $(LIBS) + $(LD) $(LDFLAGS) boot/head.o init/main.o \ + $(ARCHIVES) \ + $(DRIVERS) \ + $(MATH) \ + $(LIBS) \ + -o tools/system + nm tools/system | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw]\)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort >System.map + +kernel/math/math.a: FORCE + (cd kernel/math; make) + +kernel/blk_drv/blk_drv.a: FORCE + (cd kernel/blk_drv; make) + +kernel/chr_drv/chr_drv.a: FORCE + (cd kernel/chr_drv; make) + +kernel/kernel.o: FORCE + (cd kernel; make) + +mm/mm.o: FORCE + (cd mm; make) + +fs/fs.o: FORCE + (cd fs; make) + +lib/lib.a: FORCE + (cd lib; make) + +FORCE: + +boot/setup: boot/setup.s + $(AS86) -o boot/setup.o boot/setup.s + $(LD86) -s -o boot/setup boot/setup.o + +boot/bootsect: boot/bootsect.s + $(AS86) -o boot/bootsect.o boot/bootsect.s + $(LD86) -s -o boot/bootsect boot/bootsect.o + +tmp.s: boot/bootsect.s tools/system + (echo -n "SYSSIZE = (";ls -l tools/system | grep system \ + | cut -c25-31 | tr '\012' ' '; echo "+ 15 ) / 16") > tmp.s + cat boot/bootsect.s >> tmp.s + +clean: + rm -f Image System.map tmp_make core System.map.2 + rm -f boot/bootsect boot/setup + rm -f init/*.o tools/system tools/build boot/*.o + (cd mm;make clean) + (cd fs;make clean) + (cd kernel;make clean) + (cd lib;make clean) + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in init/*.c;do echo -n "init/";$(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + (cd fs; make dep) + (cd kernel; make dep) + (cd mm; make dep) + +### Dependencies: +init/main.o : init/main.c include/unistd.h include/sys/stat.h \ + include/sys/types.h include/sys/times.h include/sys/utsname.h \ + include/utime.h include/time.h include/linux/tty.h include/termios.h \ + include/linux/sched.h include/linux/head.h include/linux/fs.h \ + include/linux/mm.h include/signal.h include/asm/system.h include/asm/io.h \ + include/stddef.h include/stdarg.h include/fcntl.h diff --git a/linux-0.11-lab/0/linux/System.map b/linux-0.11-lab/0/linux/System.map new file mode 100644 index 0000000..6e469c2 --- /dev/null +++ b/linux-0.11-lab/0/linux/System.map @@ -0,0 +1,576 @@ +00000000 T pg_dir +00000000 T startup_32 +0000005a t check_x87 +00000073 t setup_idt +00000090 t rp_sidt +000000a3 t setup_gdt +00001000 t pg0 +00002000 t pg1 +00003000 t pg2 +00004000 t pg3 +00005000 T tmp_floppy_area +00005412 t L6 +00005414 t int_msg +00005428 t ignore_int +00005450 t setup_paging +000054ae t idt_descr +000054b6 t gdt_descr +000054c0 T idt +00005cc0 T gdt +000064c0 T fork +000064ef T pause +0000651e T setup +00006555 T sync +00006584 t time_init +00006799 T main +0000690c t printf +0000695b T init +00006bd4 T show_task +00006c59 T show_stat +00006c9f T math_state_restore +00006cfd T schedule +00006eaf T sys_pause +00006ec5 T sleep_on +00006f24 T interruptible_sleep_on +00006fdf T ticks_to_floppy_on +000070aa T floppy_on +000070d9 T floppy_off +000070e9 T do_floppy_timer +000072e1 T do_timer +000073d0 T sys_alarm +0000744f T sys_getpid +0000745b T sys_getppid +00007467 T sys_getuid +00007476 T sys_geteuid +00007486 T sys_getgid +00007496 T sys_getegid +000074a5 T sys_nice +000074d0 T sched_init +00007660 t bad_sys_call +00007668 t reschedule +00007674 T system_call +000076a8 t ret_from_sys_call +000076f0 T coprocessor_error +00007712 T device_not_available +0000774c T timer_interrupt +00007784 T sys_execve +00007794 T sys_fork +000077ac T hd_interrupt +000077e8 T floppy_interrupt +0000781e T parallel_interrupt +00007825 t _get_base +00007857 t die +00007a39 T do_double_fault +00007a5c T do_general_protection +00007a7f T do_divide_error +00007aa2 T do_int3 +00007b6a T do_nmi +00007b8d T do_debug +00007bb0 T do_overflow +00007bd3 T do_bounds +00007bf6 T do_invalid_op +00007c19 T do_device_not_available +00007c3c T do_coprocessor_segment_overrun +00007c5f T do_invalid_TSS +00007c82 T do_segment_not_present +00007ca5 T do_stack_segment +00007cc8 T do_coprocessor_error +00007cfc T do_reserved +00007d1f T trap_init +00008003 T divide_error +00008008 t no_error_code +00008038 T debug +0000803f T nmi +00008046 T int3 +0000804d T overflow +00008054 T bounds +0000805b T invalid_op +00008062 T coprocessor_segment_overrun +00008069 T reserved +00008070 T irq13 +00008085 T double_fault +0000808a t error_code +000080bc T invalid_TSS +000080c3 T segment_not_present +000080ca T stack_segment +000080d1 T general_protection +000080d8 t _get_base +0000810a T verify_area +00008171 T copy_mem +000082cb T copy_process +00008778 T find_empty_process +0000880c T panic +00008847 T printk +00008898 t skip_atoi +000088f3 t number +00008b64 T vsprintf +00008ff0 t get_fs_long +00009006 t put_fs_byte +0000901e t put_fs_long +0000902a T sys_ftime +00009030 T sys_break +00009036 T sys_ptrace +0000903c T sys_stty +00009042 T sys_gtty +00009048 T sys_rename +0000904e T sys_prof +00009054 T sys_setregid +0000910d T sys_setgid +000091a4 T sys_acct +000091aa T sys_phys +000091b0 T sys_lock +000091b6 T sys_mpx +000091bc T sys_ulimit +000091c2 T sys_time +0000921e T sys_setreuid +00009300 T sys_setuid +00009395 T sys_stime +000093eb T sys_times +0000948b T sys_brk +000094cd T sys_setpgid +000095a6 T sys_getpgrp +000095b2 T sys_setsid +0000962c T sys_getgroups +00009632 T sys_setgroups +00009638 T sys_uname +000096a1 T sys_sethostname +000096a7 T sys_getrlimit +000096ad T sys_setrlimit +000096b3 T sys_getrusage +000096b9 T sys_gettimeofday +000096bf T sys_settimeofday +000096c5 T sys_umask +000096f8 t _get_base +0000972a t put_fs_long +00009736 T release +0000979a t send_sig +00009819 t kill_session +00009873 T sys_kill +00009a23 t tell_father +00009aad T do_exit +00009ce1 T sys_exit +00009cfa T sys_waitpid +00009f20 t get_fs_byte +00009f2e t put_fs_byte +00009f46 t put_fs_long +00009f52 T sys_sgetmask +00009f5e T sys_ssetmask +00009f8a T sys_sigpending +00009f90 T sys_sigsuspend +00009f96 t save_old +00009fe9 t get_new +0000a029 T sys_signal +0000a0ad T sys_sigaction +0000a1b7 T do_signal +0000a3a3 T kernel_mktime +0000a4e8 t oom +0000a507 T get_free_page +0000a543 T free_page +0000a5b2 T free_page_tables +0000a6b1 T copy_page_tables +0000a832 T put_page +0000a91e T un_wp_page +0000a9d6 T do_wp_page +0000aa61 T get_empty_page +0000aaa1 t try_to_share +0000ac33 t share_page +0000ace7 T do_no_page +0000ae49 T mem_init +0000aebd T calc_mem +0000afb2 T page_fault +0000afe9 t get_fs_long +0000afff T sys_ustat +0000b005 T sys_utime +0000b0b2 T sys_access +0000b18e T sys_chdir +0000b202 T sys_chroot +0000b276 T sys_chmod +0000b310 T sys_chown +0000b38b T sys_open +0000b62e T sys_creat +0000b651 T sys_close +0000b720 T sys_lseek +0000b837 T sys_read +0000ba2a T sys_write +0000bbd8 t lock_inode +0000bc05 t unlock_inode +0000bc23 T invalidate_inodes +0000bc92 T sync_inodes +0000bce9 t _bmap +0000c0d5 T bmap +0000c0f8 T create_block +0000c11b T iput +0000c28a T get_empty_inode +0000c3df T get_pipe_inode +0000c454 T iget +0000c619 t read_inode +0000c84f T sys_sync +0000c8b2 T sync_dev +0000c9ab T invalidate_buffers +0000ca1d T check_disk_change +0000cac7 t remove_from_queues +0000cbbe t insert_into_queues +0000cc83 t find_buffer +0000cceb T get_hash_table +0000cd6d T getblk +0000cf0b T brelse +0000cf54 T bread +0000cfd9 T bread_page +0000d0fb T breada +0000d1f0 T buffer_init +0000d31f t lock_super +0000d34c t free_super +0000d391 T get_super +0000d400 T put_super +0000d4d3 t read_super +0000d816 T sys_umount +0000d977 T sys_mount +0000dae8 T mount_root +0000dcf6 t get_fs_byte +0000dd04 t put_fs_byte +0000dd1c T block_write +0000de6e T block_read +0000df99 t get_fs_byte +0000dfa7 t put_fs_byte +0000dfbf t rw_ttyx +0000e007 t rw_tty +0000e057 t rw_ram +0000e05d t rw_mem +0000e063 t rw_kmem +0000e069 t rw_port +0000e103 t rw_memory +0000e1d9 T rw_char +0000e243 t get_fs_byte +0000e251 t put_fs_byte +0000e269 T file_read +0000e414 T file_write +0000e60e t put_fs_byte +0000e626 t cp_stat +0000e6fd T sys_stat +0000e747 T sys_lstat +0000e762 T sys_fstat +0000e7bf T sys_readlink +0000e7c5 t _get_base +0000e7f7 t get_fs_byte +0000e805 t get_fs_long +0000e81b t put_fs_byte +0000e833 t put_fs_long +0000e83f t get_fs +0000e853 t get_ds +0000e867 t set_fs +0000e86e T sys_uselib +0000e874 t create_tables +0000e9bf t count +0000e9fe t copy_strings +0000ebba t change_ldt +0000ed3d T do_execve +0000f7bf t get_fs_byte +0000f7cd t put_fs_byte +0000f7e5 t put_fs_long +0000f7f1 T read_pipe +0000fac6 T sys_pipe +0000fcc8 t get_fs_byte +0000fcd6 t permission +0000fd77 t match +0000fddf t find_entry +00010239 t get_dir +00010426 t dir_namei +000104a5 T namei +000105bb T open_namei +0001090e T sys_mknod +00010b3e T sys_mkdir +00010eef t empty_dir +000110cd T sys_rmdir +00011425 T sys_unlink +000116c6 T sys_symlink +000116cc T sys_link +00011926 T free_block +00011a98 T new_block +00011c3c T free_inode +00011da3 T new_inode +00011f7d t dupfd +00012057 T sys_dup2 +0001207e T sys_dup +00012099 T sys_fcntl +000121d8 T sys_ioctl +000122a9 t free_ind +00012348 t free_dind +000123e7 T truncate +0001251c T sys_select +00012522 t lock_buffer +0001254f t unlock_buffer +00012741 t make_request +000128e5 T ll_rw_block +0001293e T blk_dev_init +0001298c t unlock_buffer +000129c1 t end_request +00012a72 T floppy_deselect +00012aa9 T floppy_change +00012b2f t setup_DMA +00012be5 t output_byte +00012c5b t result +00012d18 t bad_flp_intr +00012d77 t rw_interrupt +00012e66 T setup_rw_floppy +00012f27 t seek_interrupt +00012f80 t transfer +000130b5 t recal_interrupt +000130ff T unexpected_floppy_interrupt +00013144 t recalibrate_floppy +000131a6 t reset_interrupt +000131eb t reset_floppy +00013268 t floppy_on_interrupt +000132d3 t do_fd_request +000134d7 T floppy_init +00013529 t unlock_buffer +0001355e t end_request +000135fd T sys_setup +000139b0 t controller_ready +00013a44 t hd_out +00013b31 t drive_busy +00013b97 t reset_controller +00013c14 t reset_hd +00013cac T unexpected_hd_interrupt +00013cbf t bad_rw_intr +00013cfd t read_intr +00013e23 t recal_intr +00013e3d t do_hd_request +0001413e T hd_init +000141b8 t unlock_buffer +000141ed t end_request +0001428c t do_rd_request +000143c2 T rd_init +00014418 T rd_load +000146c4 t get_fs_byte +000146d2 t put_fs_byte +000146ea T tty_init +000146fb T tty_intr +0001476f t sleep_if_empty +000147a7 t sleep_if_full +0001481b T copy_to_cooked +00014dd6 T tty_read +00015144 T tty_write +00015356 T do_tty_interrupt +0001537e T chr_dev_init +0001537f t gotoxy +000153cd t set_origin +00015433 t scrup +00015623 t scrdown +0001571a t lf +00015750 t ri +00015786 t cr +000157a7 t del +000157d9 t csi_J +0001586a t csi_K +0001591c T csi_m +00015983 t set_cursor +000159e9 t respond +00015a41 t insert_char +00015aa4 t insert_line +00015ae8 t delete_char +00015b46 t delete_line +00015b8a t csi_at +00015bc8 t csi_L +00015c06 t csi_P +00015c44 t csi_M +00015c82 t save_cur +00015c97 t restore_cur +00015cb6 T con_write +00016344 T con_init +0001657b T sysbeepstop +000165a4 t sysbeep +00016602 t mode +00016603 t leds +00016604 t e0 +00016605 T keyboard_interrupt +0001662e t e0_e1 +00016659 t set_e0 +00016662 t set_e1 +0001666b t put_queue +000166a4 t ctrl +000166bc t unctrl +000166c0 t unalt +000166d6 t lshift +000166de t unlshift +000166e6 t rshift +000166ee t unrshift +000166f6 t caps +00016718 t set_leds +0001672e t uncaps +00016736 t scroll +0001673f t num +00016748 t cursor +00016768 t cur2 +00016791 t cur +0001679d t ok_cur +000167ab t num_table +000167b8 t cur_table +000167c5 t func +000167e2 t ok_func +000167f5 t end_func +000167f6 t func_table +00016826 t key_map +00016887 t shift_map +00016949 t do_self +000169b1 t none +000169b2 t minus +000169c7 t key_table +00016dc7 t kb_wait +00016dd0 t reboot +00016de2 t die +00016de4 t init +00016e59 T rs_init +00016edc T rs_write +00016f2c T rs1_interrupt +00016f34 T rs2_interrupt +00016f39 t rs_int +00016f50 t rep_int +00016f6d t end +00016f7b t jmp_table +00016f8c t modem_status +00016f94 t line_status +00016f9c t read_char +00017023 t get_fs_byte +00017031 t get_fs_long +00017047 t put_fs_byte +0001705f t put_fs_long +0001706b t change_speed +000170e9 t flush +000170fb t send_break +000170fc t get_termios +00017158 t set_termios +000171a8 t get_termio +00017270 t set_termio +00017334 T tty_ioctl +00017632 t get_fs_byte +00017640 T math_emulate +00017723 T math_error +00017743 T _exit +00017753 T open +0001779c T close +00017810 T dup +00017847 T setsid +00017876 T execve +00017913 T strcpy +0001792f T strncpy +00017954 T strcat +0001797f T strncat +000179b4 T strcmp +000179db T strncmp +00017a09 T strchr +00017a36 T strrchr +00017a65 T strspn +00017aa2 T strcspn +00017adf T strpbrk +00017b16 T strstr +00017b4f T strlen +00017b72 T strtok +00017bf5 T memcpy +00017c15 T memmove +00017c69 T memcmp +00017c93 T memchr +00017ccb T memset +0001bb48 d envp_rc +0001bb5c d envp +0001bb80 D sys_call_table +0001bcdc D NR_syscalls +0001bce0 d init_task +0001cce0 D current +0001cd00 D task +0001ce00 D stack_start +0001ce08 D current_DOR +0001ce20 d thisname.1955 +0001ce60 d month +0001cea0 d last_inode.1935 +0001cea4 D start_buffer +0001cec0 d crw_table +0001cee0 d ioctl_table +0001cf00 d floppy_type +0001cfc0 d cur_spec1 +0001cfc4 d cur_rate +0001cfc8 d floppy +0001cfcc d current_track +0001cfd0 d callable.1844 +0001cfe0 D tty_table +0001f500 D table_list +0001f520 d quotient +0001f540 D _ctype +0001f641 B __bss_start +0001f641 D _edata +0001f660 b printbuf +0001fa60 b memory_end +0001fa64 b buffer_memory_end +0001fa68 b main_memory_start +0001fa80 B jiffies +0001fa84 B startup_time +0001fa88 B last_task_used_math +0001fa9c b mon_timer +0001faac b moff_timer +0001fac0 b timer_list +0001fdc0 b next_timer +0001fdc4 B last_pid +0001fde0 b buf +000201e0 b HIGH_MEMORY +00020200 b mem_map +00021100 B inode_table +00021800 B nr_buffers +00021804 b free_list +00021808 b buffer_wait +0002180c B ROOT_DEV +00021840 B blk_dev +00021878 B do_floppy +0002187c B selected +00021884 b recalibrate +00021888 b reset +0002188c b seek +00021890 b reply_buffer +00021897 b current_drive +00021898 b sector +00021899 b head +0002189a b track +0002189b b seek_track +0002189c b command +000218a0 B do_hd +000218c0 B hd_info +000218f0 b recalibrate +000218f4 b reset +000218f8 b NR_HD +00021900 b hd +00021950 B rd_length +00021954 b cr_flag.1923 +00021960 B beepcount +00021964 b video_type +00021968 b video_num_columns +0002196c b video_size_row +00021970 b video_num_lines +00021974 b video_page +00021978 b video_mem_start +0002197c b video_mem_end +00021980 b video_port_reg +00021982 b video_port_val +00021984 b video_erase_char +00021988 b origin +0002198c b scr_end +00021990 b pos +00021994 b x +00021998 b y +0002199c b top +000219a0 b bottom +000219a4 b state +000219a8 b npar +000219c0 b par +00021a00 b ques +00021a04 b saved_x +00021a08 b saved_y +00021a20 B drive_info +00021a40 B user_stack +00022a40 B hash_table +00022f20 B super_block +00023280 B file_table +00023680 B request +00023b00 B rd_start +00023b04 B _ctmp +00023b08 B errno +00023b0c B ___strtok +00023b10 B end +00023b10 B _end diff --git a/linux-0.11-lab/0/linux/System.map.2 b/linux-0.11-lab/0/linux/System.map.2 new file mode 100644 index 0000000..44e841e --- /dev/null +++ b/linux-0.11-lab/0/linux/System.map.2 @@ -0,0 +1,1075 @@ +Archive member included to satisfy reference by file (symbol) + +kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + fs/fs.o (ll_rw_block) +kernel/blk_drv/blk_drv.a(floppy.o) + kernel/kernel.o (do_floppy) +kernel/blk_drv/blk_drv.a(hd.o) + kernel/kernel.o (do_hd) +kernel/blk_drv/blk_drv.a(ramdisk.o) + kernel/blk_drv/blk_drv.a(hd.o) (rd_load) +kernel/chr_drv/chr_drv.a(tty_io.o) + kernel/kernel.o (tty_table) +kernel/chr_drv/chr_drv.a(console.o) + kernel/chr_drv/chr_drv.a(tty_io.o) (con_write) +kernel/chr_drv/chr_drv.a(keyboard.2.o) + kernel/chr_drv/chr_drv.a(console.o) (keyboard_interrupt) +kernel/chr_drv/chr_drv.a(serial.o) + kernel/chr_drv/chr_drv.a(tty_io.o) (rs_init) +kernel/chr_drv/chr_drv.a(rs_io.o) + kernel/chr_drv/chr_drv.a(serial.o) (rs1_interrupt) +kernel/chr_drv/chr_drv.a(tty_ioctl.o) + fs/fs.o (tty_ioctl) +kernel/math/math.a(math_emulate.o) + kernel/kernel.o (math_emulate) +lib/lib.a(ctype.o) kernel/chr_drv/chr_drv.a(tty_io.o) (_ctmp) +lib/lib.a(_exit.o) init/main.o (_exit) +lib/lib.a(open.o) init/main.o (open) +lib/lib.a(close.o) init/main.o (close) +lib/lib.a(errno.o) init/main.o (errno) +lib/lib.a(write.o) init/main.o (write) +lib/lib.a(dup.o) init/main.o (dup) +lib/lib.a(setsid.o) init/main.o (setsid) +lib/lib.a(execve.o) init/main.o (execve) +lib/lib.a(wait.o) init/main.o (wait) +lib/lib.a(string.o) fs/fs.o (strncpy) + +分配公共符号 +公共符号 大小 文件 + +errno 0x4 lib/lib.a(errno.o) +hash_table 0x4cc fs/fs.o +___strtok 0x4 lib/lib.a(string.o) +rd_start 0x4 kernel/blk_drv/blk_drv.a(ramdisk.o) +request 0x480 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) +user_stack 0x1000 kernel/kernel.o +_ctmp 0x1 lib/lib.a(ctype.o) +super_block 0x360 fs/fs.o +drive_info 0x20 init/main.o +file_table 0x400 fs/fs.o + +Discarded input sections + + .note.GNU-stack + 0x0000000000000000 0x0 init/main.o + .note.GNU-stack + 0x0000000000000000 0x0 kernel/kernel.o + .note.GNU-stack + 0x0000000000000000 0x0 mm/mm.o + .note.GNU-stack + 0x0000000000000000 0x0 fs/fs.o + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(floppy.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(hd.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/blk_drv/blk_drv.a(ramdisk.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(tty_io.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(console.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(serial.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .note.GNU-stack + 0x0000000000000000 0x0 kernel/math/math.a(math_emulate.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(ctype.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(_exit.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(open.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(close.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(errno.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(write.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(dup.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(setsid.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(execve.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(wait.o) + .note.GNU-stack + 0x0000000000000000 0x0 lib/lib.a(string.o) + +内存配置 + +名称 来源 长度 属性 +*default* 0x0000000000000000 0xffffffffffffffff + +Linker script and memory map + +段 .text 的地址设置为 0x0 +LOAD boot/head.o +LOAD init/main.o +LOAD kernel/kernel.o +LOAD mm/mm.o +LOAD fs/fs.o +LOAD kernel/blk_drv/blk_drv.a +LOAD kernel/chr_drv/chr_drv.a +LOAD kernel/math/math.a +LOAD lib/lib.a + 0x0000000008048000 PROVIDE (__executable_start, 0x8048000) + 0x0000000008048074 . = (0x8048000 + SIZEOF_HEADERS) + +.interp + *(.interp) + +.note.gnu.build-id + *(.note.gnu.build-id) + +.hash + *(.hash) + +.gnu.hash + *(.gnu.hash) + +.dynsym + *(.dynsym) + +.dynstr + *(.dynstr) + +.gnu.version + *(.gnu.version) + +.gnu.version_d + *(.gnu.version_d) + +.gnu.version_r + *(.gnu.version_r) + +.rel.init + *(.rel.init) + +.rel.text 0x0000000008048074 0x0 + *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) + .rel.text 0x0000000000000000 0x0 boot/head.o + +.rel.fini + *(.rel.fini) + +.rel.rodata + *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) + +.rel.data.rel.ro + *(.rel.data.rel.ro .rel.data.rel.ro.* .rel.gnu.linkonce.d.rel.ro.*) + +.rel.data 0x0000000008048074 0x0 + *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) + .rel.data 0x0000000000000000 0x0 boot/head.o + +.rel.tdata + *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) + +.rel.tbss + *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) + +.rel.ctors + *(.rel.ctors) + +.rel.dtors + *(.rel.dtors) + +.rel.got + *(.rel.got) + +.rel.bss + *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) + +.rel.ifunc + *(.rel.ifunc) + +.rel.plt 0x0000000008048074 0x0 + *(.rel.plt) + 0x0000000008048074 PROVIDE (__rel_iplt_start, .) + *(.rel.iplt) + .rel.iplt 0x0000000000000000 0x0 boot/head.o + 0x0000000008048074 PROVIDE (__rel_iplt_end, .) + +.init + *(SORT(.init)) + +.plt 0x0000000008048080 0x0 + *(.plt) + *(.iplt) + .iplt 0x0000000000000000 0x0 boot/head.o + +.text 0x0000000000000000 0x17cef + *(.text.unlikely .text.*_unlikely .text.unlikely.*) + *(.text.exit .text.exit.*) + *(.text.startup .text.startup.*) + *(.text.hot .text.hot.*) + *(.text .stub .text.* .gnu.linkonce.t.*) + .text 0x0000000000000000 0x64c0 boot/head.o + 0x0000000000000000 startup_32 + 0x0000000000000000 pg_dir + 0x0000000000005000 tmp_floppy_area + 0x00000000000054c0 idt + 0x0000000000005cc0 gdt + .text 0x00000000000064c0 0x713 init/main.o + 0x00000000000064c0 fork + 0x00000000000064ef pause + 0x000000000000651e setup + 0x0000000000006555 sync + 0x0000000000006799 main + 0x000000000000695b init + *fill* 0x0000000000006bd3 0x1 + .text 0x0000000000006bd4 0x3914 kernel/kernel.o + 0x0000000000006bd4 show_task + 0x0000000000006c59 show_stat + 0x0000000000006c9f math_state_restore + 0x0000000000006cfd schedule + 0x0000000000006eaf sys_pause + 0x0000000000006ec5 sleep_on + 0x0000000000006f24 interruptible_sleep_on + 0x0000000000006fb7 wake_up + 0x0000000000006fdf ticks_to_floppy_on + 0x00000000000070aa floppy_on + 0x00000000000070d9 floppy_off + 0x00000000000070e9 do_floppy_timer + 0x00000000000071bd add_timer + 0x00000000000072e1 do_timer + 0x00000000000073d0 sys_alarm + 0x000000000000744f sys_getpid + 0x000000000000745b sys_getppid + 0x0000000000007467 sys_getuid + 0x0000000000007476 sys_geteuid + 0x0000000000007486 sys_getgid + 0x0000000000007496 sys_getegid + 0x00000000000074a5 sys_nice + 0x00000000000074d0 sched_init + 0x0000000000007674 system_call + 0x00000000000076f0 coprocessor_error + 0x0000000000007712 device_not_available + 0x000000000000774c timer_interrupt + 0x0000000000007784 sys_execve + 0x0000000000007794 sys_fork + 0x00000000000077ac hd_interrupt + 0x00000000000077e8 floppy_interrupt + 0x000000000000781e parallel_interrupt + 0x0000000000007a39 do_double_fault + 0x0000000000007a5c do_general_protection + 0x0000000000007a7f do_divide_error + 0x0000000000007aa2 do_int3 + 0x0000000000007b6a do_nmi + 0x0000000000007b8d do_debug + 0x0000000000007bb0 do_overflow + 0x0000000000007bd3 do_bounds + 0x0000000000007bf6 do_invalid_op + 0x0000000000007c19 do_device_not_available + 0x0000000000007c3c do_coprocessor_segment_overrun + 0x0000000000007c5f do_invalid_TSS + 0x0000000000007c82 do_segment_not_present + 0x0000000000007ca5 do_stack_segment + 0x0000000000007cc8 do_coprocessor_error + 0x0000000000007cfc do_reserved + 0x0000000000007d1f trap_init + 0x0000000000008003 divide_error + 0x0000000000008038 debug + 0x000000000000803f nmi + 0x0000000000008046 int3 + 0x000000000000804d overflow + 0x0000000000008054 bounds + 0x000000000000805b invalid_op + 0x0000000000008062 coprocessor_segment_overrun + 0x0000000000008069 reserved + 0x0000000000008070 irq13 + 0x0000000000008085 double_fault + 0x00000000000080bc invalid_TSS + 0x00000000000080c3 segment_not_present + 0x00000000000080ca stack_segment + 0x00000000000080d1 general_protection + 0x000000000000810a verify_area + 0x0000000000008171 copy_mem + 0x00000000000082cb copy_process + 0x0000000000008778 find_empty_process + 0x000000000000880c panic + 0x0000000000008847 printk + 0x0000000000008b64 vsprintf + 0x000000000000902a sys_ftime + 0x0000000000009030 sys_break + 0x0000000000009036 sys_ptrace + 0x000000000000903c sys_stty + 0x0000000000009042 sys_gtty + 0x0000000000009048 sys_rename + 0x000000000000904e sys_prof + 0x0000000000009054 sys_setregid + 0x000000000000910d sys_setgid + 0x00000000000091a4 sys_acct + 0x00000000000091aa sys_phys + 0x00000000000091b0 sys_lock + 0x00000000000091b6 sys_mpx + 0x00000000000091bc sys_ulimit + 0x00000000000091c2 sys_time + 0x000000000000921e sys_setreuid + 0x0000000000009300 sys_setuid + 0x0000000000009395 sys_stime + 0x00000000000093eb sys_times + 0x000000000000948b sys_brk + 0x00000000000094cd sys_setpgid + 0x00000000000095a6 sys_getpgrp + 0x00000000000095b2 sys_setsid + 0x000000000000962c sys_getgroups + 0x0000000000009632 sys_setgroups + 0x0000000000009638 sys_uname + 0x00000000000096a1 sys_sethostname + 0x00000000000096a7 sys_getrlimit + 0x00000000000096ad sys_setrlimit + 0x00000000000096b3 sys_getrusage + 0x00000000000096b9 sys_gettimeofday + 0x00000000000096bf sys_settimeofday + 0x00000000000096c5 sys_umask + 0x0000000000009736 release + 0x0000000000009873 sys_kill + 0x0000000000009aad do_exit + 0x0000000000009ce1 sys_exit + 0x0000000000009cfa sys_waitpid + 0x0000000000009f52 sys_sgetmask + 0x0000000000009f5e sys_ssetmask + 0x0000000000009f8a sys_sigpending + 0x0000000000009f90 sys_sigsuspend + 0x000000000000a029 sys_signal + 0x000000000000a0ad sys_sigaction + 0x000000000000a1b7 do_signal + 0x000000000000a3a3 kernel_mktime + .text 0x000000000000a4e8 0xb01 mm/mm.o + 0x000000000000a507 get_free_page + 0x000000000000a543 free_page + 0x000000000000a5b2 free_page_tables + 0x000000000000a6b1 copy_page_tables + 0x000000000000a832 put_page + 0x000000000000a91e un_wp_page + 0x000000000000a9d6 do_wp_page + 0x000000000000aa08 write_verify + 0x000000000000aa61 get_empty_page + 0x000000000000ace7 do_no_page + 0x000000000000ae49 mem_init + 0x000000000000aebd calc_mem + 0x000000000000afb2 page_fault + .text 0x000000000000afe9 0x7539 fs/fs.o + 0x000000000000afff sys_ustat + 0x000000000000b005 sys_utime + 0x000000000000b0b2 sys_access + 0x000000000000b18e sys_chdir + 0x000000000000b202 sys_chroot + 0x000000000000b276 sys_chmod + 0x000000000000b310 sys_chown + 0x000000000000b38b sys_open + 0x000000000000b62e sys_creat + 0x000000000000b651 sys_close + 0x000000000000b720 sys_lseek + 0x000000000000b837 sys_read + 0x000000000000ba2a sys_write + 0x000000000000bc23 invalidate_inodes + 0x000000000000bc92 sync_inodes + 0x000000000000c0d5 bmap + 0x000000000000c0f8 create_block + 0x000000000000c11b iput + 0x000000000000c28a get_empty_inode + 0x000000000000c3df get_pipe_inode + 0x000000000000c454 iget + 0x000000000000c84f sys_sync + 0x000000000000c8b2 sync_dev + 0x000000000000c9ab invalidate_buffers + 0x000000000000ca1d check_disk_change + 0x000000000000cceb get_hash_table + 0x000000000000cd6d getblk + 0x000000000000cf0b brelse + 0x000000000000cf54 bread + 0x000000000000cfd9 bread_page + 0x000000000000d0fb breada + 0x000000000000d1f0 buffer_init + 0x000000000000d391 get_super + 0x000000000000d400 put_super + 0x000000000000d816 sys_umount + 0x000000000000d977 sys_mount + 0x000000000000dae8 mount_root + 0x000000000000dd1c block_write + 0x000000000000de6e block_read + 0x000000000000e1d9 rw_char + 0x000000000000e269 file_read + 0x000000000000e414 file_write + 0x000000000000e6fd sys_stat + 0x000000000000e747 sys_lstat + 0x000000000000e762 sys_fstat + 0x000000000000e7bf sys_readlink + 0x000000000000e86e sys_uselib + 0x000000000000ed3d do_execve + 0x000000000000f7f1 read_pipe + 0x000000000000f947 write_pipe + 0x000000000000fac6 sys_pipe + 0x00000000000104a5 namei + 0x00000000000105bb open_namei + 0x000000000001090e sys_mknod + 0x0000000000010b3e sys_mkdir + 0x00000000000110cd sys_rmdir + 0x0000000000011425 sys_unlink + 0x00000000000116c6 sys_symlink + 0x00000000000116cc sys_link + 0x0000000000011926 free_block + 0x0000000000011a98 new_block + 0x0000000000011c3c free_inode + 0x0000000000011da3 new_inode + 0x0000000000012057 sys_dup2 + 0x000000000001207e sys_dup + 0x0000000000012099 sys_fcntl + 0x00000000000121d8 sys_ioctl + 0x00000000000123e7 truncate + 0x000000000001251c sys_select + .text 0x0000000000012522 0x46a kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x00000000000128e5 ll_rw_block + 0x000000000001293e blk_dev_init + .text 0x000000000001298c 0xb9d kernel/blk_drv/blk_drv.a(floppy.o) + 0x0000000000012a72 floppy_deselect + 0x0000000000012aa9 floppy_change + 0x0000000000012e66 setup_rw_floppy + 0x00000000000130ff unexpected_floppy_interrupt + 0x00000000000134d7 floppy_init + .text 0x0000000000013529 0xc8f kernel/blk_drv/blk_drv.a(hd.o) + 0x00000000000135fd sys_setup + 0x0000000000013cac unexpected_hd_interrupt + 0x000000000001413e hd_init + .text 0x00000000000141b8 0x50c kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x00000000000143c2 rd_init + 0x0000000000014418 rd_load + .text 0x00000000000146c4 0xcbb kernel/chr_drv/chr_drv.a(tty_io.o) + 0x00000000000146ea tty_init + 0x00000000000146fb tty_intr + 0x0000000000014808 wait_for_keypress + 0x000000000001481b copy_to_cooked + 0x0000000000014dd6 tty_read + 0x0000000000015144 tty_write + 0x0000000000015356 do_tty_interrupt + 0x000000000001537e chr_dev_init + .text 0x000000000001537f 0x1283 kernel/chr_drv/chr_drv.a(console.o) + 0x000000000001591c csi_m + 0x0000000000015cb6 con_write + 0x0000000000016344 con_init + 0x000000000001657b sysbeepstop + .text 0x0000000000016602 0x7e2 kernel/chr_drv/chr_drv.a(keyboard.2.o) + 0x0000000000016605 keyboard_interrupt + .text 0x0000000000016de4 0x145 kernel/chr_drv/chr_drv.a(serial.o) + 0x0000000000016e59 rs_init + 0x0000000000016edc rs_write + *fill* 0x0000000000016f29 0x3 + .text 0x0000000000016f2c 0xf7 kernel/chr_drv/chr_drv.a(rs_io.o) + 0x0000000000016f2c rs1_interrupt + 0x0000000000016f34 rs2_interrupt + .text 0x0000000000017023 0x60f kernel/chr_drv/chr_drv.a(tty_ioctl.o) + 0x0000000000017334 tty_ioctl + .text 0x0000000000017632 0x111 kernel/math/math.a(math_emulate.o) + 0x0000000000017640 math_emulate + 0x0000000000017723 math_error + .text 0x0000000000017743 0x0 lib/lib.a(ctype.o) + .text 0x0000000000017743 0x10 lib/lib.a(_exit.o) + 0x0000000000017743 _exit + .text 0x0000000000017753 0x49 lib/lib.a(open.o) + 0x0000000000017753 open + .text 0x000000000001779c 0x37 lib/lib.a(close.o) + 0x000000000001779c close + .text 0x00000000000177d3 0x0 lib/lib.a(errno.o) + .text 0x00000000000177d3 0x3d lib/lib.a(write.o) + 0x00000000000177d3 write + .text 0x0000000000017810 0x37 lib/lib.a(dup.o) + 0x0000000000017810 dup + .text 0x0000000000017847 0x2f lib/lib.a(setsid.o) + 0x0000000000017847 setsid + .text 0x0000000000017876 0x3d lib/lib.a(execve.o) + 0x0000000000017876 execve + .text 0x00000000000178b3 0x60 lib/lib.a(wait.o) + 0x00000000000178b3 waitpid + 0x00000000000178f0 wait + .text 0x0000000000017913 0x3dc lib/lib.a(string.o) + 0x0000000000017913 strcpy + 0x000000000001792f strncpy + 0x0000000000017954 strcat + 0x000000000001797f strncat + 0x00000000000179b4 strcmp + 0x00000000000179db strncmp + 0x0000000000017a09 strchr + 0x0000000000017a36 strrchr + 0x0000000000017a65 strspn + 0x0000000000017aa2 strcspn + 0x0000000000017adf strpbrk + 0x0000000000017b16 strstr + 0x0000000000017b4f strlen + 0x0000000000017b72 strtok + 0x0000000000017bf5 memcpy + 0x0000000000017c15 memmove + 0x0000000000017c69 memcmp + 0x0000000000017c93 memchr + 0x0000000000017ccb memset + *(.gnu.warning) + +.fini + *(SORT(.fini)) + 0x0000000000017cef PROVIDE (__etext, .) + 0x0000000000017cef PROVIDE (_etext, .) + 0x0000000000017cef PROVIDE (etext, .) + +.rodata 0x0000000000017cf0 0x13ca + *(.rodata .rodata.* .gnu.linkonce.r.*) + .rodata 0x0000000000017cf0 0xad init/main.o + *fill* 0x0000000000017d9d 0x3 + .rodata 0x0000000000017da0 0x438 kernel/kernel.o + .rodata 0x00000000000181d8 0x18f mm/mm.o + *fill* 0x0000000000018367 0x1 + .rodata 0x0000000000018368 0x62c fs/fs.o + .rodata 0x0000000000018994 0x7a kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + *fill* 0x0000000000018a0e 0x2 + .rodata 0x0000000000018a10 0x133 kernel/blk_drv/blk_drv.a(floppy.o) + *fill* 0x0000000000018b43 0x1 + .rodata 0x0000000000018b44 0x19b kernel/blk_drv/blk_drv.a(hd.o) + *fill* 0x0000000000018cdf 0x1 + .rodata 0x0000000000018ce0 0x188 kernel/blk_drv/blk_drv.a(ramdisk.o) + .rodata 0x0000000000018e68 0x17d kernel/chr_drv/chr_drv.a(console.o) + *fill* 0x0000000000018fe5 0x3 + .rodata 0x0000000000018fe8 0x80 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .rodata 0x0000000000019068 0x52 kernel/math/math.a(math_emulate.o) + +.rodata1 + *(.rodata1) + +.eh_frame_hdr + *(.eh_frame_hdr) + +.eh_frame 0x00000000000190bc 0x2a6c + *(.eh_frame) + .eh_frame 0x00000000000190bc 0xf0 init/main.o + .eh_frame 0x00000000000191ac 0xb04 kernel/kernel.o + 0xbf4 (size before relaxing) + .eh_frame 0x0000000000019cb0 0x194 mm/mm.o + 0x1ac (size before relaxing) + .eh_frame 0x0000000000019e44 0xdd8 fs/fs.o + 0xf70 (size before relaxing) + .eh_frame 0x000000000001ac1c 0x98 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0xb0 (size before relaxing) + .eh_frame 0x000000000001acb4 0x23c kernel/blk_drv/blk_drv.a(floppy.o) + 0x254 (size before relaxing) + .eh_frame 0x000000000001aef0 0x1e8 kernel/blk_drv/blk_drv.a(hd.o) + 0x200 (size before relaxing) + .eh_frame 0x000000000001b0d8 0xac kernel/blk_drv/blk_drv.a(ramdisk.o) + 0xc4 (size before relaxing) + .eh_frame 0x000000000001b184 0x12c kernel/chr_drv/chr_drv.a(tty_io.o) + 0x144 (size before relaxing) + .eh_frame 0x000000000001b2b0 0x2c0 kernel/chr_drv/chr_drv.a(console.o) + 0x2d8 (size before relaxing) + .eh_frame 0x000000000001b570 0x54 kernel/chr_drv/chr_drv.a(serial.o) + 0x6c (size before relaxing) + .eh_frame 0x000000000001b5c4 0x148 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + 0x160 (size before relaxing) + .eh_frame 0x000000000001b70c 0x5c kernel/math/math.a(math_emulate.o) + 0x74 (size before relaxing) + .eh_frame 0x000000000001b768 0x1c lib/lib.a(_exit.o) + 0x34 (size before relaxing) + .eh_frame 0x000000000001b784 0x24 lib/lib.a(open.o) + 0x3c (size before relaxing) + .eh_frame 0x000000000001b7a8 0x20 lib/lib.a(close.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001b7c8 0x20 lib/lib.a(write.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001b7e8 0x20 lib/lib.a(dup.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001b808 0x18 lib/lib.a(setsid.o) + 0x30 (size before relaxing) + .eh_frame 0x000000000001b820 0x20 lib/lib.a(execve.o) + 0x38 (size before relaxing) + .eh_frame 0x000000000001b840 0x38 lib/lib.a(wait.o) + 0x50 (size before relaxing) + .eh_frame 0x000000000001b878 0x2b0 lib/lib.a(string.o) + 0x2c8 (size before relaxing) + +.gcc_except_table + *(.gcc_except_table .gcc_except_table.*) + +.exception_ranges + *(.exception_ranges .exception_ranges*) + 0x000000000001bb28 . = . + +.eh_frame + *(.eh_frame) + +.gcc_except_table + *(.gcc_except_table .gcc_except_table.*) + +.exception_ranges + *(.exception_ranges .exception_ranges*) + +.tdata + *(.tdata .tdata.* .gnu.linkonce.td.*) + +.tbss + *(.tbss .tbss.* .gnu.linkonce.tb.*) + *(.tcommon) + +.preinit_array 0x000000000001bb28 0x0 + 0x000000000001bb28 PROVIDE (__preinit_array_start, .) + *(.preinit_array) + 0x000000000001bb28 PROVIDE (__preinit_array_end, .) + +.init_array 0x000000000001bb28 0x0 + 0x000000000001bb28 PROVIDE (__init_array_start, .) + *(SORT(.init_array.*) SORT(.ctors.*)) + *(.init_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .ctors) + 0x000000000001bb28 PROVIDE (__init_array_end, .) + +.fini_array 0x000000000001bb28 0x0 + 0x000000000001bb28 PROVIDE (__fini_array_start, .) + *(SORT(.fini_array.*) SORT(.dtors.*)) + *(.fini_array EXCLUDE_FILE(*crtend?.o *crtend.o *crtbegin?.o *crtbegin.o) .dtors) + 0x000000000001bb28 PROVIDE (__fini_array_end, .) + +.ctors + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + +.dtors + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + +.jcr + *(.jcr) + +.data.rel.ro + *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) + *(.data.rel.ro .data.rel.ro.* .gnu.linkonce.d.rel.ro.*) + +.dynamic + *(.dynamic) + +.got + *(.got) + *(.igot) + +.got.plt 0x000000000001bb28 0x0 + *(.got.plt) + *(.igot.plt) + .igot.plt 0x0000000000000000 0x0 boot/head.o + +.data 0x000000000001bb40 0x3b01 + *(.data .data.* .gnu.linkonce.d.*) + .data 0x000000000001bb40 0x0 boot/head.o + .data 0x000000000001bb40 0x28 init/main.o + *fill* 0x000000000001bb68 0x18 + .data 0x000000000001bb80 0x1310 kernel/kernel.o + 0x000000000001bb80 sys_call_table + 0x000000000001bcdc NR_syscalls + 0x000000000001cce0 current + 0x000000000001cd00 task + 0x000000000001ce00 stack_start + 0x000000000001ce08 current_DOR + .data 0x000000000001ce90 0x0 mm/mm.o + *fill* 0x000000000001ce90 0x10 + .data 0x000000000001cea0 0x60 fs/fs.o + 0x000000000001cea4 start_buffer + .data 0x000000000001cf00 0x0 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .data 0x000000000001cf00 0xcd kernel/blk_drv/blk_drv.a(floppy.o) + *fill* 0x000000000001cfcd 0x3 + .data 0x000000000001cfd0 0x4 kernel/blk_drv/blk_drv.a(hd.o) + .data 0x000000000001cfd4 0x0 kernel/blk_drv/blk_drv.a(ramdisk.o) + *fill* 0x000000000001cfd4 0xc + .data 0x000000000001cfe0 0x2538 kernel/chr_drv/chr_drv.a(tty_io.o) + 0x000000000001cfe0 tty_table + 0x000000000001f500 table_list + .data 0x000000000001f518 0x1 kernel/chr_drv/chr_drv.a(console.o) + .data 0x000000000001f519 0x0 kernel/chr_drv/chr_drv.a(keyboard.2.o) + .data 0x000000000001f519 0x0 kernel/chr_drv/chr_drv.a(serial.o) + .data 0x000000000001f519 0x0 kernel/chr_drv/chr_drv.a(rs_io.o) + *fill* 0x000000000001f519 0x7 + .data 0x000000000001f520 0x20 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .data 0x000000000001f540 0x0 kernel/math/math.a(math_emulate.o) + .data 0x000000000001f540 0x101 lib/lib.a(ctype.o) + 0x000000000001f540 _ctype + .data 0x000000000001f641 0x0 lib/lib.a(_exit.o) + .data 0x000000000001f641 0x0 lib/lib.a(open.o) + .data 0x000000000001f641 0x0 lib/lib.a(close.o) + .data 0x000000000001f641 0x0 lib/lib.a(errno.o) + .data 0x000000000001f641 0x0 lib/lib.a(write.o) + .data 0x000000000001f641 0x0 lib/lib.a(dup.o) + .data 0x000000000001f641 0x0 lib/lib.a(setsid.o) + .data 0x000000000001f641 0x0 lib/lib.a(execve.o) + .data 0x000000000001f641 0x0 lib/lib.a(wait.o) + .data 0x000000000001f641 0x0 lib/lib.a(string.o) + +.data1 + *(.data1) + 0x000000000001f641 _edata = . + 0x000000000001f641 PROVIDE (edata, .) + 0x000000000001f641 . = . + 0x000000000001f641 __bss_start = . + +.bss 0x000000000001f660 0x44b0 + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + .bss 0x000000000001f660 0x0 boot/head.o + .bss 0x000000000001f660 0x40c init/main.o + *fill* 0x000000000001fa6c 0x14 + .bss 0x000000000001fa80 0x760 kernel/kernel.o + 0x000000000001fa80 jiffies + 0x000000000001fa84 startup_time + 0x000000000001fa88 last_task_used_math + 0x000000000001fdc4 last_pid + .bss 0x00000000000201e0 0xf20 mm/mm.o + .bss 0x0000000000021100 0x710 fs/fs.o + 0x0000000000021100 inode_table + 0x0000000000021800 nr_buffers + 0x000000000002180c ROOT_DEV + *fill* 0x0000000000021810 0x10 + .bss 0x0000000000021820 0x58 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x0000000000021820 wait_for_request + 0x0000000000021840 blk_dev + .bss 0x0000000000021878 0x25 kernel/blk_drv/blk_drv.a(floppy.o) + 0x0000000000021878 do_floppy + 0x000000000002187c selected + 0x0000000000021880 wait_on_floppy_select + *fill* 0x000000000002189d 0x3 + .bss 0x00000000000218a0 0xb0 kernel/blk_drv/blk_drv.a(hd.o) + 0x00000000000218a0 do_hd + 0x00000000000218c0 hd_info + .bss 0x0000000000021950 0x4 kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x0000000000021950 rd_length + .bss 0x0000000000021954 0x4 kernel/chr_drv/chr_drv.a(tty_io.o) + *fill* 0x0000000000021958 0x8 + .bss 0x0000000000021960 0xac kernel/chr_drv/chr_drv.a(console.o) + 0x0000000000021960 beepcount + .bss 0x0000000000021a0c 0x0 kernel/chr_drv/chr_drv.a(keyboard.2.o) + .bss 0x0000000000021a0c 0x0 kernel/chr_drv/chr_drv.a(serial.o) + .bss 0x0000000000021a0c 0x0 kernel/chr_drv/chr_drv.a(rs_io.o) + .bss 0x0000000000021a0c 0x0 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .bss 0x0000000000021a0c 0x0 kernel/math/math.a(math_emulate.o) + .bss 0x0000000000021a0c 0x0 lib/lib.a(ctype.o) + .bss 0x0000000000021a0c 0x0 lib/lib.a(_exit.o) + .bss 0x0000000000021a0c 0x0 lib/lib.a(open.o) + .bss 0x0000000000021a0c 0x0 lib/lib.a(close.o) + .bss 0x0000000000021a0c 0x0 lib/lib.a(errno.o) + .bss 0x0000000000021a0c 0x0 lib/lib.a(write.o) + .bss 0x0000000000021a0c 0x0 lib/lib.a(dup.o) + .bss 0x0000000000021a0c 0x0 lib/lib.a(setsid.o) + .bss 0x0000000000021a0c 0x0 lib/lib.a(execve.o) + .bss 0x0000000000021a0c 0x0 lib/lib.a(wait.o) + .bss 0x0000000000021a0c 0x0 lib/lib.a(string.o) + *(COMMON) + *fill* 0x0000000000021a0c 0x14 + COMMON 0x0000000000021a20 0x20 init/main.o + 0x0000000000021a20 drive_info + COMMON 0x0000000000021a40 0x1000 kernel/kernel.o + 0x0000000000021a40 user_stack + COMMON 0x0000000000022a40 0xc40 fs/fs.o + 0x0000000000022a40 hash_table + 0x0000000000022f20 super_block + 0x0000000000023280 file_table + COMMON 0x0000000000023680 0x480 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x0000000000023680 request + COMMON 0x0000000000023b00 0x4 kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x0000000000023b00 rd_start + COMMON 0x0000000000023b04 0x1 lib/lib.a(ctype.o) + 0x0000000000023b04 _ctmp + *fill* 0x0000000000023b05 0x3 + COMMON 0x0000000000023b08 0x4 lib/lib.a(errno.o) + 0x0000000000023b08 errno + COMMON 0x0000000000023b0c 0x4 lib/lib.a(string.o) + 0x0000000000023b0c ___strtok + 0x0000000000023b10 . = ALIGN ((. != 0x0)?0x4:0x1) + 0x0000000000023b10 . = ALIGN (0x4) + 0x0000000000023b10 . = SEGMENT_START ("ldata-segment", .) + 0x0000000000023b10 . = ALIGN (0x4) + 0x0000000000023b10 _end = . + 0x0000000000023b10 PROVIDE (end, .) + +.stab + *(.stab) + +.stabstr + *(.stabstr) + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x0000000000000000 0x29 + *(.comment) + .comment 0x0000000000000000 0x29 init/main.o + 0x2a (size before relaxing) + .comment 0x0000000000000000 0x1a4 kernel/kernel.o + .comment 0x0000000000000000 0x2a mm/mm.o + .comment 0x0000000000000000 0x2f4 fs/fs.o + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(floppy.o) + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(hd.o) + .comment 0x0000000000000000 0x2a kernel/blk_drv/blk_drv.a(ramdisk.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(tty_io.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(console.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(serial.o) + .comment 0x0000000000000000 0x2a kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .comment 0x0000000000000000 0x2a kernel/math/math.a(math_emulate.o) + .comment 0x0000000000000000 0x2a lib/lib.a(ctype.o) + .comment 0x0000000000000000 0x2a lib/lib.a(_exit.o) + .comment 0x0000000000000000 0x2a lib/lib.a(open.o) + .comment 0x0000000000000000 0x2a lib/lib.a(close.o) + .comment 0x0000000000000000 0x2a lib/lib.a(errno.o) + .comment 0x0000000000000000 0x2a lib/lib.a(write.o) + .comment 0x0000000000000000 0x2a lib/lib.a(dup.o) + .comment 0x0000000000000000 0x2a lib/lib.a(setsid.o) + .comment 0x0000000000000000 0x2a lib/lib.a(execve.o) + .comment 0x0000000000000000 0x2a lib/lib.a(wait.o) + .comment 0x0000000000000000 0x2a lib/lib.a(string.o) + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x0000000000000000 0x628 + *(.debug_aranges) + .debug_aranges + 0x0000000000000000 0x20 init/main.o + .debug_aranges + 0x0000000000000020 0x140 kernel/kernel.o + .debug_aranges + 0x0000000000000160 0x20 mm/mm.o + .debug_aranges + 0x0000000000000180 0x238 fs/fs.o + .debug_aranges + 0x00000000000003b8 0x20 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_aranges + 0x00000000000003d8 0x20 kernel/blk_drv/blk_drv.a(floppy.o) + .debug_aranges + 0x00000000000003f8 0x20 kernel/blk_drv/blk_drv.a(hd.o) + .debug_aranges + 0x0000000000000418 0x20 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_aranges + 0x0000000000000438 0x20 kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_aranges + 0x0000000000000458 0x20 kernel/chr_drv/chr_drv.a(console.o) + .debug_aranges + 0x0000000000000478 0x20 kernel/chr_drv/chr_drv.a(serial.o) + .debug_aranges + 0x0000000000000498 0x20 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_aranges + 0x00000000000004b8 0x20 kernel/math/math.a(math_emulate.o) + .debug_aranges + 0x00000000000004d8 0x18 lib/lib.a(ctype.o) + .debug_aranges + 0x00000000000004f0 0x20 lib/lib.a(_exit.o) + .debug_aranges + 0x0000000000000510 0x20 lib/lib.a(open.o) + .debug_aranges + 0x0000000000000530 0x20 lib/lib.a(close.o) + .debug_aranges + 0x0000000000000550 0x18 lib/lib.a(errno.o) + .debug_aranges + 0x0000000000000568 0x20 lib/lib.a(write.o) + .debug_aranges + 0x0000000000000588 0x20 lib/lib.a(dup.o) + .debug_aranges + 0x00000000000005a8 0x20 lib/lib.a(setsid.o) + .debug_aranges + 0x00000000000005c8 0x20 lib/lib.a(execve.o) + .debug_aranges + 0x00000000000005e8 0x20 lib/lib.a(wait.o) + .debug_aranges + 0x0000000000000608 0x20 lib/lib.a(string.o) + +.debug_pubnames + *(.debug_pubnames) + +.debug_info 0x0000000000000000 0x16d23 + *(.debug_info .gnu.linkonce.wi.*) + .debug_info 0x0000000000000000 0x553 init/main.o + .debug_info 0x0000000000000553 0x4cb6 kernel/kernel.o + .debug_info 0x0000000000005209 0xb2b mm/mm.o + .debug_info 0x0000000000005d34 0xa290 fs/fs.o + .debug_info 0x000000000000ffc4 0x932 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_info 0x00000000000108f6 0xc9f kernel/blk_drv/blk_drv.a(floppy.o) + .debug_info 0x0000000000011595 0xd5f kernel/blk_drv/blk_drv.a(hd.o) + .debug_info 0x00000000000122f4 0xad5 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_info 0x0000000000012dc9 0xacd kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_info 0x0000000000013896 0xdb0 kernel/chr_drv/chr_drv.a(console.o) + .debug_info 0x0000000000014646 0x85c kernel/chr_drv/chr_drv.a(serial.o) + .debug_info 0x0000000000014ea2 0xb47 kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_info 0x00000000000159e9 0x7b5 kernel/math/math.a(math_emulate.o) + .debug_info 0x000000000001619e 0x66 lib/lib.a(ctype.o) + .debug_info 0x0000000000016204 0x77 lib/lib.a(_exit.o) + .debug_info 0x000000000001627b 0xd0 lib/lib.a(open.o) + .debug_info 0x000000000001634b 0x97 lib/lib.a(close.o) + .debug_info 0x00000000000163e2 0x36 lib/lib.a(errno.o) + .debug_info 0x0000000000016418 0xc9 lib/lib.a(write.o) + .debug_info 0x00000000000164e1 0x97 lib/lib.a(dup.o) + .debug_info 0x0000000000016578 0x95 lib/lib.a(setsid.o) + .debug_info 0x000000000001660d 0xcb lib/lib.a(execve.o) + .debug_info 0x00000000000166d8 0xed lib/lib.a(wait.o) + .debug_info 0x00000000000167c5 0x55e lib/lib.a(string.o) + +.debug_abbrev 0x0000000000000000 0x43b9 + *(.debug_abbrev) + .debug_abbrev 0x0000000000000000 0x1d3 init/main.o + .debug_abbrev 0x00000000000001d3 0xf63 kernel/kernel.o + .debug_abbrev 0x0000000000001136 0x20b mm/mm.o + .debug_abbrev 0x0000000000001341 0x19f1 fs/fs.o + .debug_abbrev 0x0000000000002d32 0x169 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_abbrev 0x0000000000002e9b 0x27d kernel/blk_drv/blk_drv.a(floppy.o) + .debug_abbrev 0x0000000000003118 0x23c kernel/blk_drv/blk_drv.a(hd.o) + .debug_abbrev 0x0000000000003354 0x1a8 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_abbrev 0x00000000000034fc 0x279 kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_abbrev 0x0000000000003775 0x26b kernel/chr_drv/chr_drv.a(console.o) + .debug_abbrev 0x00000000000039e0 0x175 kernel/chr_drv/chr_drv.a(serial.o) + .debug_abbrev 0x0000000000003b55 0x18d kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_abbrev 0x0000000000003ce2 0x163 kernel/math/math.a(math_emulate.o) + .debug_abbrev 0x0000000000003e45 0x3e lib/lib.a(ctype.o) + .debug_abbrev 0x0000000000003e83 0x51 lib/lib.a(_exit.o) + .debug_abbrev 0x0000000000003ed4 0x97 lib/lib.a(open.o) + .debug_abbrev 0x0000000000003f6b 0x75 lib/lib.a(close.o) + .debug_abbrev 0x0000000000003fe0 0x2c lib/lib.a(errno.o) + .debug_abbrev 0x000000000000400c 0xa1 lib/lib.a(write.o) + .debug_abbrev 0x00000000000040ad 0x75 lib/lib.a(dup.o) + .debug_abbrev 0x0000000000004122 0x73 lib/lib.a(setsid.o) + .debug_abbrev 0x0000000000004195 0x85 lib/lib.a(execve.o) + .debug_abbrev 0x000000000000421a 0xb6 lib/lib.a(wait.o) + .debug_abbrev 0x00000000000042d0 0xe9 lib/lib.a(string.o) + +.debug_line 0x0000000000000000 0x4599 + *(.debug_line .debug_line.* .debug_line_end) + .debug_line 0x0000000000000000 0x1a7 init/main.o + .debug_line 0x00000000000001a7 0xe86 kernel/kernel.o + .debug_line 0x000000000000102d 0x274 mm/mm.o + .debug_line 0x00000000000012a1 0x1c50 fs/fs.o + .debug_line 0x0000000000002ef1 0x197 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + .debug_line 0x0000000000003088 0x24c kernel/blk_drv/blk_drv.a(floppy.o) + .debug_line 0x00000000000032d4 0x2bf kernel/blk_drv/blk_drv.a(hd.o) + .debug_line 0x0000000000003593 0x160 kernel/blk_drv/blk_drv.a(ramdisk.o) + .debug_line 0x00000000000036f3 0x33b kernel/chr_drv/chr_drv.a(tty_io.o) + .debug_line 0x0000000000003a2e 0x3ab kernel/chr_drv/chr_drv.a(console.o) + .debug_line 0x0000000000003dd9 0xd9 kernel/chr_drv/chr_drv.a(serial.o) + .debug_line 0x0000000000003eb2 0x1db kernel/chr_drv/chr_drv.a(tty_ioctl.o) + .debug_line 0x000000000000408d 0xe1 kernel/math/math.a(math_emulate.o) + .debug_line 0x000000000000416e 0x28 lib/lib.a(ctype.o) + .debug_line 0x0000000000004196 0x39 lib/lib.a(_exit.o) + .debug_line 0x00000000000041cf 0x62 lib/lib.a(open.o) + .debug_line 0x0000000000004231 0x5c lib/lib.a(close.o) + .debug_line 0x000000000000428d 0x28 lib/lib.a(errno.o) + .debug_line 0x00000000000042b5 0x76 lib/lib.a(write.o) + .debug_line 0x000000000000432b 0x5a lib/lib.a(dup.o) + .debug_line 0x0000000000004385 0x77 lib/lib.a(setsid.o) + .debug_line 0x00000000000043fc 0x5d lib/lib.a(execve.o) + .debug_line 0x0000000000004459 0x7a lib/lib.a(wait.o) + .debug_line 0x00000000000044d3 0xc6 lib/lib.a(string.o) + +.debug_frame + *(.debug_frame) + +.debug_str 0x0000000000000000 0x2093 + *(.debug_str) + .debug_str 0x0000000000000000 0x1c0 init/main.o + 0x1ff (size before relaxing) + .debug_str 0x00000000000001c0 0xac0 kernel/kernel.o + 0x2332 (size before relaxing) + .debug_str 0x0000000000000c80 0x185 mm/mm.o + 0x4e0 (size before relaxing) + .debug_str 0x0000000000000e05 0x904 fs/fs.o + 0x49ab (size before relaxing) + .debug_str 0x0000000000001709 0xf0 kernel/blk_drv/blk_drv.a(ll_rw_blk.o) + 0x491 (size before relaxing) + .debug_str 0x00000000000017f9 0x1cf kernel/blk_drv/blk_drv.a(floppy.o) + 0x673 (size before relaxing) + .debug_str 0x00000000000019c8 0x15e kernel/blk_drv/blk_drv.a(hd.o) + 0x5e8 (size before relaxing) + .debug_str 0x0000000000001b26 0x43 kernel/blk_drv/blk_drv.a(ramdisk.o) + 0x58a (size before relaxing) + .debug_str 0x0000000000001b69 0xfb kernel/chr_drv/chr_drv.a(tty_io.o) + 0x4e3 (size before relaxing) + .debug_str 0x0000000000001c64 0x1b9 kernel/chr_drv/chr_drv.a(console.o) + 0x5b7 (size before relaxing) + .debug_str 0x0000000000001e1d 0x1a kernel/chr_drv/chr_drv.a(serial.o) + 0x3fc (size before relaxing) + .debug_str 0x0000000000001e37 0x8b kernel/chr_drv/chr_drv.a(tty_ioctl.o) + 0x4a7 (size before relaxing) + .debug_str 0x0000000000001ec2 0x70 kernel/math/math.a(math_emulate.o) + 0x392 (size before relaxing) + .debug_str 0x0000000000001f32 0x8d lib/lib.a(ctype.o) + 0xb6 (size before relaxing) + .debug_str 0x0000000000001fbf 0x8 lib/lib.a(_exit.o) + 0xe2 (size before relaxing) + .debug_str 0x0000000000000000 0x8 lib/lib.a(open.o) + 0xf2 (size before relaxing) + .debug_str 0x0000000000001fc7 0x8 lib/lib.a(close.o) + 0xe4 (size before relaxing) + .debug_str 0x0000000000001fcf 0x8 lib/lib.a(errno.o) + 0x93 (size before relaxing) + .debug_str 0x0000000000000000 0x8 lib/lib.a(write.o) + 0xf0 (size before relaxing) + .debug_str 0x0000000000001fd7 0x6 lib/lib.a(dup.o) + 0xdc (size before relaxing) + .debug_str 0x0000000000001fdd 0x9 lib/lib.a(setsid.o) + 0xec (size before relaxing) + .debug_str 0x0000000000001fe6 0x9 lib/lib.a(execve.o) + 0xf5 (size before relaxing) + .debug_str 0x0000000000001fef 0x11 lib/lib.a(wait.o) + 0x102 (size before relaxing) + .debug_str 0x0000000000002000 0x93 lib/lib.a(string.o) + 0x147 (size before relaxing) + +.debug_loc + *(.debug_loc) + +.debug_macinfo + *(.debug_macinfo) + +.debug_weaknames + *(.debug_weaknames) + +.debug_funcnames + *(.debug_funcnames) + +.debug_typenames + *(.debug_typenames) + +.debug_varnames + *(.debug_varnames) + +.debug_pubtypes + *(.debug_pubtypes) + +.debug_ranges 0x0000000000000000 0x18 + *(.debug_ranges) + .debug_ranges 0x0000000000000000 0x18 init/main.o + +.debug_macro + *(.debug_macro) + +.gnu.attributes + *(.gnu.attributes) + +/DISCARD/ + *(.note.GNU-stack) + *(.gnu_debuglink) + *(.gnu.lto_*) +OUTPUT(tools/system elf32-i386) diff --git a/linux-0.11-lab/0/linux/boot/bootsect b/linux-0.11-lab/0/linux/boot/bootsect new file mode 100644 index 0000000000000000000000000000000000000000..4fbb8f823afe23687f1887d48deeb19fdcf83049 GIT binary patch literal 544 zcmZQ%7GP0e00JfufdrZ$>>UT#`)=%Dn9z4%Cj+DAH_iW_m%fre~uHUSwNXN9*i=ymehGJ;Ln!ff#WtiVnQ zhTZH8d+ix_Fbba)*ufysci@E)!;7N~dJF$B+A=VditBaD0d;UNHUH)>;o2bsq=ibD zUjNfu{D<)s1B1c@RhzFW-(_8 zyWs)N8wX!-zAym_G6SXbtl4ZCONDkYGHA2SVkl+#&o+l)@hk?z1B+)cfHa*h-qdq| z733tt+pm`g1P2Cni_Kx^=9|Ib*m1R6Y!*YuwM`6-j~E!Y0DW7;8WkBGaTw@dps&vg zgE+6x1nv67yn*3e)L{k&UM`>f#FWgubcN!|;*!){1wB1IUM^lPq<|j0Og84wRRH+h BgWdoD literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/boot/bootsect.o b/linux-0.11-lab/0/linux/boot/bootsect.o new file mode 100644 index 0000000000000000000000000000000000000000..e35422ec017a165928bfcbec5f9f0363b4a9e75c GIT binary patch literal 923 zcmYjPe@GKy7=FH+PB$=@gOrLGSb;@HGl?KZQ#V8qHK&qRjLn^EOg*`~_2a*bAQEj2 z`bR7R8DjO1Ax5YD;D!W64T2~X>5mFT9P~#*1c~eYW`BB3fn$y+MeVjqc)FB7D{5ZwQc zlnx;W9UDX^enV$llvLXoyfYO9Z}$=84ic;$V`O7tS=LmkPeZ`p+0`EKHzCjy2sHQl zw}lpeD-uHysXwTY5sDOw1Y=|-4_TXAn>%^rd%=iw84Yc11;O9ydW>fq~$ltjP-a7_y>584mLI>~!sq4M`D5Ly@qm@(>AWA%vwU zr%{<_+X|nde;^cvTBwf1Bxp*gFV1T;>8i$^g?NcKSG5q0@!xcE+`au;IbOSyoY+a~ z{!PR`f4ixx+SO^8CCMcNsiZj%R`aVSzcIBg=v7dW8hevmN}95U=#^i zr)no|09j{lb(WIStn(?vkzMq|I|{AlEXVU%$9xr@m*6E`j|&EKW*r6`Npr0hYp)?r zZZZ#$s1!#JP?cts3OD|gYj$Hl#R^TxZHehkwhp*b#dJ@BG4oNrJhA0o88bcbDr`}l zq`HQqR(%{jBbm%s8(UUwT8Z1NS<0;0*6J{lvGC1C@wAnkO^FJFf$S6TC5rM^{XXi` zL>k>@nq232gLmrem|4t+bg$&5+XH7iM)#1fVRRQc{Pnj!5uJed*5_GV{{}WkC!rMg z_MAVrNM}JOl67*Dd*89})A9sAdKZB*dkfv2*ih7^UQ;z`&?SnZugqR%-#z8CTDl%r F<1c(7E-?TA literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/boot/bootsect.s b/linux-0.11-lab/0/linux/boot/bootsect.s new file mode 100644 index 0000000..711f103 --- /dev/null +++ b/linux-0.11-lab/0/linux/boot/bootsect.s @@ -0,0 +1,260 @@ +! +! SYS_SIZE is the number of clicks (16 bytes) to be loaded. +! 0x3000 is 0x30000 bytes = 196kB, more than enough for current +! versions of linux +! +SYSSIZE = 0x3000 +! +! bootsect.s (C) 1991 Linus Torvalds +! +! bootsect.s is loaded at 0x7c00 by the bios-startup routines, and moves +! iself out of the way to address 0x90000, and jumps there. +! +! It then loads 'setup' directly after itself (0x90200), and the system +! at 0x10000, using BIOS interrupts. +! +! NOTE! currently system is at most 8*65536 bytes long. This should be no +! problem, even in the future. I want to keep it simple. This 512 kB +! kernel size should be enough, especially as this doesn't contain the +! buffer cache as in minix +! +! The loader has been made as simple as possible, and continuos +! read errors will result in a unbreakable loop. Reboot by hand. It +! loads pretty fast by getting whole sectors at a time whenever possible. + +.globl begtext, begdata, begbss, endtext, enddata, endbss +.text +begtext: +.data +begdata: +.bss +begbss: +.text + +SETUPLEN = 4 ! nr of setup-sectors +BOOTSEG = 0x07c0 ! original address of boot-sector +INITSEG = 0x9000 ! we move boot here - out of the way +SETUPSEG = 0x9020 ! setup starts here +SYSSEG = 0x1000 ! system loaded at 0x10000 (65536). +ENDSEG = SYSSEG + SYSSIZE ! where to stop loading + +! ROOT_DEV: 0x000 - same type of floppy as boot. +! 0x301 - first partition on first drive etc +ROOT_DEV = 0x306 + +entry start +start: + mov ax,#BOOTSEG + mov ds,ax + mov ax,#INITSEG + mov es,ax + mov cx,#256 + sub si,si + sub di,di + rep + movw + jmpi go,INITSEG +go: mov ax,cs + mov ds,ax + mov es,ax +! put stack at 0x9ff00. + mov ss,ax + mov sp,#0xFF00 ! arbitrary value >>512 + +! load the setup-sectors directly after the bootblock. +! Note that 'es' is already set up. + +load_setup: + mov dx,#0x0000 ! drive 0, head 0 + mov cx,#0x0002 ! sector 2, track 0 + mov bx,#0x0200 ! address = 512, in INITSEG + mov ax,#0x0200+SETUPLEN ! service 2, nr of sectors + int 0x13 ! read it + jnc ok_load_setup ! ok - continue + mov dx,#0x0000 + mov ax,#0x0000 ! reset the diskette + int 0x13 + j load_setup + +ok_load_setup: + +! Get disk drive parameters, specifically nr of sectors/track + + mov dl,#0x00 + mov ax,#0x0800 ! AH=8 is get drive parameters + int 0x13 + mov ch,#0x00 + seg cs + mov sectors,cx + mov ax,#INITSEG + mov es,ax + +! Print some inane message + + mov ah,#0x03 ! read cursor pos + xor bh,bh + int 0x10 + + mov cx,#24 + mov bx,#0x0007 ! page 0, attribute 7 (normal) + mov bp,#msg1 + mov ax,#0x1301 ! write string, move cursor + int 0x10 + +! ok, we've written the message, now +! we want to load the system (at 0x10000) + + mov ax,#SYSSEG + mov es,ax ! segment of 0x010000 + call read_it + call kill_motor + +! After that we check which root-device to use. If the device is +! defined (!= 0), nothing is done and the given device is used. +! Otherwise, either /dev/PS0 (2,28) or /dev/at0 (2,8), depending +! on the number of sectors that the BIOS reports currently. + + seg cs + mov ax,root_dev + cmp ax,#0 + jne root_defined + seg cs + mov bx,sectors + mov ax,#0x0208 ! /dev/ps0 - 1.2Mb + cmp bx,#15 + je root_defined + mov ax,#0x021c ! /dev/PS0 - 1.44Mb + cmp bx,#18 + je root_defined +undef_root: + jmp undef_root +root_defined: + seg cs + mov root_dev,ax + +! after that (everyting loaded), we jump to +! the setup-routine loaded directly after +! the bootblock: + + jmpi 0,SETUPSEG + +! This routine loads the system at address 0x10000, making sure +! no 64kB boundaries are crossed. We try to load it as fast as +! possible, loading whole tracks whenever we can. +! +! in: es - starting address segment (normally 0x1000) +! +sread: .word 1+SETUPLEN ! sectors read of current track +head: .word 0 ! current head +track: .word 0 ! current track + +read_it: + mov ax,es + test ax,#0x0fff +die: jne die ! es must be at 64kB boundary + xor bx,bx ! bx is starting address within segment +rp_read: + mov ax,es + cmp ax,#ENDSEG ! have we loaded all yet? + jb ok1_read + ret +ok1_read: + seg cs + mov ax,sectors + sub ax,sread + mov cx,ax + shl cx,#9 + add cx,bx + jnc ok2_read + je ok2_read + xor ax,ax + sub ax,bx + shr ax,#9 +ok2_read: + call read_track + mov cx,ax + add ax,sread + seg cs + cmp ax,sectors + jne ok3_read + mov ax,#1 + sub ax,head + jne ok4_read + inc track +ok4_read: + mov head,ax + xor ax,ax +ok3_read: + mov sread,ax + shl cx,#9 + add bx,cx + jnc rp_read + mov ax,es + add ax,#0x1000 + mov es,ax + xor bx,bx + jmp rp_read + +read_track: + push ax + push bx + push cx + push dx + mov dx,track + mov cx,sread + inc cx + mov ch,dl + mov dx,head + mov dh,dl + mov dl,#0 + and dx,#0x0100 + mov ah,#2 + int 0x13 + jc bad_rt + pop dx + pop cx + pop bx + pop ax + ret +bad_rt: mov ax,#0 + mov dx,#0 + int 0x13 + pop dx + pop cx + pop bx + pop ax + jmp read_track + +/* + * This procedure turns off the floppy drive motor, so + * that we enter the kernel in a known state, and + * don't have to worry about it later. + */ +kill_motor: + push dx + mov dx,#0x3f2 + mov al,#0 + outb + pop dx + ret + +sectors: + .word 0 + +msg1: + .byte 13,10 + .ascii "Loading system ..." + .byte 13,10,13,10 + +.org 508 +root_dev: + .word ROOT_DEV +boot_flag: + .word 0xAA55 + +.text +endtext: +.data +enddata: +.bss +endbss: diff --git a/linux-0.11-lab/0/linux/boot/head.o b/linux-0.11-lab/0/linux/boot/head.o new file mode 100644 index 0000000000000000000000000000000000000000..a4c55649c84336692e2f017e7d3b9dc5fd3082ba GIT binary patch literal 27012 zcmeI5O=ule7>2)-rn#v$OwS%uL!8 z6a%qn7P*Sc3jRisn&iB4& z&iUrdGdG*FIOn4m54>cIk-Qk$Ah(^!ke}VzorWRlmW`=8*Nf1++Dw|)n=8(lL2X<) zq}4H0_qtn3hEHg(eMrzN@gL4WGWd|l-26`+&h}(Q)Bb+)4UucVe)-Gw{Sx<}!~D%I z+*?{aEZ2TpTI?Ts6R8Drs4QHmT#)ACbDHqHPI#fPaIkZJx%=grzZ~<#59qk$nEtaG zwGRskkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@ zkN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg011!)36KB@kN^pg z011!)36KB@kN^pg011!)36KB@{I3YSFZx$|7#nQXbmBLjzwysojfuwek;Xv15&K~{ z6T}bn$jEE2Z|!ovS+gN%tq)^XR$HyssPk=M+o88dFJpht^U^0$N=mKOKTj>|UZ7II z4x`H(J5>#+>Q=Qw)n--0B9~TQ#eSfLn=SeK)YI5gR6e{_N}TOiv2kb*y3Aqg&{f?# zRHRiv)sBntlbK~r0wh2JBtQZrur3L-9K81NMAG<0vMw3$rAdGUNPq-LVBHWXMn|V& zZ%m3&9A>eWtI(e;#{O(9#j+QBQXGq-`^K^jJ@x#QE<0i`Vp6sSL02)fJdSHqsHM(blD3iP(3Pv78q7&_8 zM*5-k_?fI2(eEHwXv&I_5`-Qfll%P;pXV0YUx3zAW3po86$m{&CikN%^o7%6cM$*qTtc_Ysx=5yrWmz#Y0Wq@1&%*1%SXPY8K_u4qV*JPI(}(IbjC`7P zOl$R@sT#=|)qkDIv{wK99Ukv?m%n(Im&lK20=Hg{t*Sze*ZlDbcXsa{@hVv2a|5sH zyZGms^dqTP8`GihV(m}Dz>RbuF1PGQ!HL`fm@lJ4uYeu7y6z=u@~z6cI{M&Nu>=k<<%P!gh--%^>djmB1Ic# zG~x&OiAMa0zq0GKeRF1UbBAE`q28r)_-9Aob|_S NJgpJWKc}%z4Mb on a 4Mb machine). + * + * NOTE! Although all physical memory should be identity + * mapped by this routine, only the kernel page functions + * use the >1Mb addresses directly. All "normal" functions + * use just the lower 1Mb, or the local data space, which + * will be mapped to some other place - mm keeps track of + * that. + * + * For those with more memory than 16 Mb - tough luck. I've + * not got it, why should you :-) The source is here. Change + * it. (Seriously - it shouldn't be too difficult. Mostly + * change some constants etc. I left it at 16Mb, as my machine + * even cannot be extended past that (ok, but it was cheap :-) + * I've tried to show which constants to change by having + * some kind of marker at them (search for "16Mb"), but I + * won't guarantee that's all :-( ) + */ +.align 4 +setup_paging: + movl $1024*5,%ecx /* 5 pages - pg_dir+4 page tables */ + xorl %eax,%eax + xorl %edi,%edi /* pg_dir is at 0x000 */ + cld;rep;stosl + movl $pg0+7,pg_dir /* set present bit/user r/w */ + movl $pg1+7,pg_dir+4 /* --------- " " --------- */ + movl $pg2+7,pg_dir+8 /* --------- " " --------- */ + movl $pg3+7,pg_dir+12 /* --------- " " --------- */ + movl $pg3+4092,%edi + movl $0xfff007,%eax /* 16Mb - 4096 + 7 (r/w user,p) */ + std +1: stosl /* fill pages backwards - more efficient :-) */ + subl $0x1000,%eax + jge 1b + xorl %eax,%eax /* pg_dir is at 0x0000 */ + movl %eax,%cr3 /* cr3 - page directory start */ + movl %cr0,%eax + orl $0x80000000,%eax + movl %eax,%cr0 /* set paging (PG) bit */ + cld /* by wyj */ + ret /* this also flushes prefetch-queue */ + +.align 4 +.word 0 +idt_descr: + .word 256*8-1 # idt contains 256 entries + .long idt +.align 4 +.word 0 +gdt_descr: + .word 256*8-1 # so does gdt (not that that's any + .long gdt # magic number, but it works for me :^) + + .align 8 +idt: .fill 256,8,0 # idt is uninitialized + +gdt: .quad 0x0000000000000000 /* NULL descriptor */ + .quad 0x00c09a0000000fff /* 16Mb */ + .quad 0x00c0920000000fff /* 16Mb */ + .quad 0x0000000000000000 /* TEMPORARY - don't use */ + .fill 252,8,0 /* space for LDT's and TSS's etc */ diff --git a/linux-0.11-lab/0/linux/boot/setup b/linux-0.11-lab/0/linux/boot/setup new file mode 100644 index 0000000000000000000000000000000000000000..0e70f4846819f560fb2e22a8eb1e7186c7956ab0 GIT binary patch literal 344 zcmZQ%7GP0eU|_Id1QJNVq7lN`!7!ok#ujFS|7Qg{#TXd2bet7k%*3#TAIOzsVOY$@ zutjLIz*&LC91NXuTnwFjJPbP+82WA;HDh4}X+5yNfnlcr!{;SXQ3*l_<@!izwL4T8@UUNgLAc(wpUZcuop2&OfjEda<7{%Xg;=gL$t<~Tutazx3hbYqSrLZVca%ibUp9b?$HkVw;4TnF?Rz@46w`UObliF2LrIX1l zD$%Xa$Sgt^u2&7@|GQ@O1M(N{a&->*XRca94ek$5^Qt@KbHx4WGu-r2)9WkibQgy407%ZoGynhq literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/boot/setup.s b/linux-0.11-lab/0/linux/boot/setup.s new file mode 100644 index 0000000..2329d00 --- /dev/null +++ b/linux-0.11-lab/0/linux/boot/setup.s @@ -0,0 +1,231 @@ +! +! setup.s (C) 1991 Linus Torvalds +! +! setup.s is responsible for getting the system data from the BIOS, +! and putting them into the appropriate places in system memory. +! both setup.s and system has been loaded by the bootblock. +! +! This code asks the bios for memory/disk/other parameters, and +! puts them in a "safe" place: 0x90000-0x901FF, ie where the +! boot-block used to be. It is then up to the protected mode +! system to read them from there before the area is overwritten +! for buffer-blocks. +! + +! NOTE! These had better be the same as in bootsect.s! + +INITSEG = 0x9000 ! we move boot here - out of the way +SYSSEG = 0x1000 ! system loaded at 0x10000 (65536). +SETUPSEG = 0x9020 ! this is the current segment + +.globl begtext, begdata, begbss, endtext, enddata, endbss +.text +begtext: +.data +begdata: +.bss +begbss: +.text + +entry start +start: + +! ok, the read went well so we get current cursor position and save it for +! posterity. + + mov ax,#INITSEG ! this is done in bootsect already, but... + mov ds,ax + mov ah,#0x03 ! read cursor pos + xor bh,bh + int 0x10 ! save it in known place, con_init fetches + mov [0],dx ! it from 0x90000. + +! Get memory size (extended mem, kB) + + mov ah,#0x88 + int 0x15 + mov [2],ax + +! Get video-card data: + + mov ah,#0x0f + int 0x10 + mov [4],bx ! bh = display page + mov [6],ax ! al = video mode, ah = window width + +! check for EGA/VGA and some config parameters + + mov ah,#0x12 + mov bl,#0x10 + int 0x10 + mov [8],ax + mov [10],bx + mov [12],cx + +! Get hd0 data + + mov ax,#0x0000 + mov ds,ax + lds si,[4*0x41] + mov ax,#INITSEG + mov es,ax + mov di,#0x0080 + mov cx,#0x10 + rep + movsb + +! Get hd1 data + + mov ax,#0x0000 + mov ds,ax + lds si,[4*0x46] + mov ax,#INITSEG + mov es,ax + mov di,#0x0090 + mov cx,#0x10 + rep + movsb + +! Check that there IS a hd1 :-) + + mov ax,#0x01500 + mov dl,#0x81 + int 0x13 + jc no_disk1 + cmp ah,#3 + je is_disk1 +no_disk1: + mov ax,#INITSEG + mov es,ax + mov di,#0x0090 + mov cx,#0x10 + mov ax,#0x00 + rep + stosb +is_disk1: + +! now we want to move to protected mode ... + + cli ! no interrupts allowed ! + +! first we move the system to it's rightful place + + mov ax,#0x0000 + cld ! 'direction'=0, movs moves forward +do_move: + mov es,ax ! destination segment + add ax,#0x1000 + cmp ax,#0x9000 + jz end_move + mov ds,ax ! source segment + sub di,di + sub si,si + mov cx,#0x8000 + rep + movsw + jmp do_move + +! then we load the segment descriptors + +end_move: + mov ax,#SETUPSEG ! right, forgot this at first. didn't work :-) + mov ds,ax + lidt idt_48 ! load idt with 0,0 + lgdt gdt_48 ! load gdt with whatever appropriate + +! that was painless, now we enable A20 + + call empty_8042 + mov al,#0xD1 ! command write + out #0x64,al + call empty_8042 + mov al,#0xDF ! A20 on + out #0x60,al + call empty_8042 + +! well, that went ok, I hope. Now we have to reprogram the interrupts :-( +! we put them right after the intel-reserved hardware interrupts, at +! int 0x20-0x2F. There they won't mess up anything. Sadly IBM really +! messed this up with the original PC, and they haven't been able to +! rectify it afterwards. Thus the bios puts interrupts at 0x08-0x0f, +! which is used for the internal hardware interrupts as well. We just +! have to reprogram the 8259's, and it isn't fun. + + mov al,#0x11 ! initialization sequence + out #0x20,al ! send it to 8259A-1 + .word 0x00eb,0x00eb ! jmp $+2, jmp $+2 + out #0xA0,al ! and to 8259A-2 + .word 0x00eb,0x00eb + mov al,#0x20 ! start of hardware int's (0x20) + out #0x21,al + .word 0x00eb,0x00eb + mov al,#0x28 ! start of hardware int's 2 (0x28) + out #0xA1,al + .word 0x00eb,0x00eb + mov al,#0x04 ! 8259-1 is master + out #0x21,al + .word 0x00eb,0x00eb + mov al,#0x02 ! 8259-2 is slave + out #0xA1,al + .word 0x00eb,0x00eb + mov al,#0x01 ! 8086 mode for both + out #0x21,al + .word 0x00eb,0x00eb + out #0xA1,al + .word 0x00eb,0x00eb + mov al,#0xFF ! mask off all interrupts for now + out #0x21,al + .word 0x00eb,0x00eb + out #0xA1,al + +! well, that certainly wasn't fun :-(. Hopefully it works, and we don't +! need no steenking BIOS anyway (except for the initial loading :-). +! The BIOS-routine wants lots of unnecessary data, and it's less +! "interesting" anyway. This is how REAL programmers do it. +! +! Well, now's the time to actually move into protected mode. To make +! things as simple as possible, we do no register set-up or anything, +! we let the gnu-compiled 32-bit programs do that. We just jump to +! absolute address 0x00000, in 32-bit protected mode. + + mov ax,#0x0001 ! protected mode (PE) bit + lmsw ax ! This is it! + jmpi 0,8 ! jmp offset 0 of segment 8 (cs) + +! This routine checks that the keyboard command queue is empty +! No timeout is used - if this hangs there is something wrong with +! the machine, and we probably couldn't proceed anyway. +empty_8042: + .word 0x00eb,0x00eb + in al,#0x64 ! 8042 status port + test al,#2 ! is input buffer full? + jnz empty_8042 ! yes - loop + ret + +gdt: + .word 0,0,0,0 ! dummy + + .word 0x07FF ! 8Mb - limit=2047 (2048*4096=8Mb) + .word 0x0000 ! base address=0 + .word 0x9A00 ! code read/exec + .word 0x00C0 ! granularity=4096, 386 + + .word 0x07FF ! 8Mb - limit=2047 (2048*4096=8Mb) + .word 0x0000 ! base address=0 + .word 0x9200 ! data read/write + .word 0x00C0 ! granularity=4096, 386 + +idt_48: + .word 0 ! idt limit=0 + .word 0,0 ! idt base=0L + +gdt_48: + .word 0x800 ! gdt limit=2048, 256 GDT entries + .word 512+gdt,0x9 ! gdt base = 0X9xxxx + +.text +endtext: +.data +enddata: +.bss +endbss: diff --git a/linux-0.11-lab/0/linux/fs/Makefile b/linux-0.11-lab/0/linux/fs/Makefile new file mode 100644 index 0000000..970acd4 --- /dev/null +++ b/linux-0.11-lab/0/linux/fs/Makefile @@ -0,0 +1,101 @@ +AR =ar +AS =as +LD =ld +LDFLAGS =-s -x +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -finline-functions -nostdinc -fno-stack-protector -I../include +CPP =gcc -E -nostdinc -I../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< +.s.o: + $(AS) -o $*.o $< + +OBJS= open.o read_write.o inode.o file_table.o buffer.o super.o \ + block_dev.o char_dev.o file_dev.o stat.o exec.o pipe.o namei.o \ + bitmap.o fcntl.o ioctl.o truncate.o select.o + +fs.o: $(OBJS) + $(LD) -r -o fs.o $(OBJS) + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +bitmap.o : bitmap.c ../include/string.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h +block_dev.o : block_dev.c ../include/errno.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h ../include/asm/system.h +buffer.o : buffer.c ../include/stdarg.h ../include/linux/config.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/sys/types.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/system.h ../include/asm/io.h +char_dev.o : char_dev.c ../include/errno.h ../include/sys/types.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h ../include/asm/io.h +exec.o : exec.c ../include/errno.h ../include/string.h \ + ../include/sys/stat.h ../include/sys/types.h ../include/a.out.h \ + ../include/linux/fs.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h +fcntl.o : fcntl.c ../include/string.h ../include/errno.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/sys/types.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/segment.h ../include/fcntl.h \ + ../include/sys/stat.h +file_dev.o : file_dev.c ../include/errno.h ../include/fcntl.h \ + ../include/sys/types.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/segment.h +file_table.o : file_table.c ../include/linux/fs.h ../include/sys/types.h +inode.o : inode.c ../include/string.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/system.h +ioctl.o : ioctl.c ../include/string.h ../include/errno.h \ + ../include/sys/stat.h ../include/sys/types.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \ + ../include/signal.h +namei.o : namei.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/linux/kernel.h ../include/asm/segment.h \ + ../include/string.h ../include/fcntl.h ../include/errno.h \ + ../include/const.h ../include/sys/stat.h +open.o : open.c ../include/string.h ../include/errno.h ../include/fcntl.h \ + ../include/sys/types.h ../include/utime.h ../include/sys/stat.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/tty.h \ + ../include/termios.h ../include/linux/kernel.h ../include/asm/segment.h +pipe.o : pipe.c ../include/signal.h ../include/sys/types.h \ + ../include/linux/sched.h ../include/linux/head.h ../include/linux/fs.h \ + ../include/linux/mm.h ../include/asm/segment.h +read_write.o : read_write.c ../include/sys/stat.h ../include/sys/types.h \ + ../include/errno.h ../include/linux/kernel.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \ + ../include/signal.h ../include/asm/segment.h +stat.o : stat.c ../include/errno.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/linux/fs.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/mm.h ../include/signal.h \ + ../include/linux/kernel.h ../include/asm/segment.h +super.o : super.c ../include/linux/config.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/system.h ../include/errno.h ../include/sys/stat.h +truncate.o : truncate.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/sys/stat.h diff --git a/linux-0.11-lab/0/linux/fs/bitmap.c b/linux-0.11-lab/0/linux/fs/bitmap.c new file mode 100644 index 0000000..73951a8 --- /dev/null +++ b/linux-0.11-lab/0/linux/fs/bitmap.c @@ -0,0 +1,168 @@ +/* + * linux/fs/bitmap.c + * + * (C) 1991 Linus Torvalds + */ + +/* bitmap.c contains the code that handles the inode and block bitmaps */ +#include + +#include +#include + +#define clear_block(addr) \ +__asm__ __volatile__ ("cld\n\t" \ + "rep\n\t" \ + "stosl" \ + ::"a" (0),"c" (BLOCK_SIZE/4),"D" ((long) (addr))) + +#define set_bit(nr,addr) ({\ +register int res __asm__("ax"); \ +__asm__ __volatile__("btsl %2,%3\n\tsetb %%al": \ +"=a" (res):"0" (0),"r" (nr),"m" (*(addr))); \ +res;}) + +#define clear_bit(nr,addr) ({\ +register int res __asm__("ax"); \ +__asm__ __volatile__("btrl %2,%3\n\tsetnb %%al": \ +"=a" (res):"0" (0),"r" (nr),"m" (*(addr))); \ +res;}) + +#define find_first_zero(addr) ({ \ +int __res; \ +__asm__ __volatile__ ("cld\n" \ + "1:\tlodsl\n\t" \ + "notl %%eax\n\t" \ + "bsfl %%eax,%%edx\n\t" \ + "je 2f\n\t" \ + "addl %%edx,%%ecx\n\t" \ + "jmp 3f\n" \ + "2:\taddl $32,%%ecx\n\t" \ + "cmpl $8192,%%ecx\n\t" \ + "jl 1b\n" \ + "3:" \ + :"=c" (__res):"c" (0),"S" (addr)); \ +__res;}) + +void free_block(int dev, int block) +{ + struct super_block * sb; + struct buffer_head * bh; + + if (!(sb = get_super(dev))) + panic("trying to free block on nonexistent device"); + if (block < sb->s_firstdatazone || block >= sb->s_nzones) + panic("trying to free block not in datazone"); + bh = get_hash_table(dev,block); + if (bh) { + if (bh->b_count != 1) { + printk("trying to free block (%04x:%d), count=%d\n", + dev,block,bh->b_count); + return; + } + bh->b_dirt=0; + bh->b_uptodate=0; + brelse(bh); + } + block -= sb->s_firstdatazone - 1 ; + if (clear_bit(block&8191,sb->s_zmap[block/8192]->b_data)) { + printk("block (%04x:%d) ",dev,block+sb->s_firstdatazone-1); + panic("free_block: bit already cleared"); + } + sb->s_zmap[block/8192]->b_dirt = 1; +} + +int new_block(int dev) +{ + struct buffer_head * bh; + struct super_block * sb; + int i,j; + + if (!(sb = get_super(dev))) + panic("trying to get new block from nonexistant device"); + j = 8192; + for (i=0 ; i<8 ; i++) + if (bh=sb->s_zmap[i]) + if ((j=find_first_zero(bh->b_data))<8192) + break; + if (i>=8 || !bh || j>=8192) + return 0; + if (set_bit(j,bh->b_data)) + panic("new_block: bit already set"); + bh->b_dirt = 1; + j += i*8192 + sb->s_firstdatazone-1; + if (j >= sb->s_nzones) + return 0; + if (!(bh=getblk(dev,j))) + panic("new_block: cannot get block"); + if (bh->b_count != 1) + panic("new block: count is != 1"); + clear_block(bh->b_data); + bh->b_uptodate = 1; + bh->b_dirt = 1; + brelse(bh); + return j; +} + +void free_inode(struct m_inode * inode) +{ + struct super_block * sb; + struct buffer_head * bh; + + if (!inode) + return; + if (!inode->i_dev) { + memset(inode,0,sizeof(*inode)); + return; + } + if (inode->i_count>1) { + printk("trying to free inode with count=%d\n",inode->i_count); + panic("free_inode"); + } + if (inode->i_nlinks) + panic("trying to free inode with links"); + if (!(sb = get_super(inode->i_dev))) + panic("trying to free inode on nonexistent device"); + if (inode->i_num < 1 || inode->i_num > sb->s_ninodes) + panic("trying to free inode 0 or nonexistant inode"); + if (!(bh=sb->s_imap[inode->i_num>>13])) + panic("nonexistent imap in superblock"); + if (clear_bit(inode->i_num&8191,bh->b_data)) + printk("free_inode: bit already cleared.\n\r"); + bh->b_dirt = 1; + memset(inode,0,sizeof(*inode)); +} + +struct m_inode * new_inode(int dev) +{ + struct m_inode * inode; + struct super_block * sb; + struct buffer_head * bh; + int i,j; + + if (!(inode=get_empty_inode())) + return NULL; + if (!(sb = get_super(dev))) + panic("new_inode with unknown device"); + j = 8192; + for (i=0 ; i<8 ; i++) + if (bh=sb->s_imap[i]) + if ((j=find_first_zero(bh->b_data))<8192) + break; + if (!bh || j >= 8192 || j+i*8192 > sb->s_ninodes) { + iput(inode); + return NULL; + } + if (set_bit(j,bh->b_data)) + panic("new_inode: bit already set"); + bh->b_dirt = 1; + inode->i_count=1; + inode->i_nlinks=1; + inode->i_dev=dev; + inode->i_uid=current->euid; + inode->i_gid=current->egid; + inode->i_dirt=1; + inode->i_num = j + i*8192; + inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME; + return inode; +} diff --git a/linux-0.11-lab/0/linux/fs/bitmap.o b/linux-0.11-lab/0/linux/fs/bitmap.o new file mode 100644 index 0000000000000000000000000000000000000000..501d3c5e3fb1a044792589a0bdde55cbb41cfaa2 GIT binary patch literal 10280 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 J@|j5fe*vQQ&y@fG literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/fs/block_dev.c b/linux-0.11-lab/0/linux/fs/block_dev.c new file mode 100644 index 0000000..a50ae3f --- /dev/null +++ b/linux-0.11-lab/0/linux/fs/block_dev.c @@ -0,0 +1,73 @@ +/* + * linux/fs/block_dev.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +#include +#include +#include +#include + +int block_write(int dev, long * pos, char * buf, int count) +{ + int block = *pos >> BLOCK_SIZE_BITS; + int offset = *pos & (BLOCK_SIZE-1); + int chars; + int written = 0; + struct buffer_head * bh; + register char * p; + + while (count>0) { + chars = BLOCK_SIZE - offset; + if (chars > count) + chars=count; + if (chars == BLOCK_SIZE) + bh = getblk(dev,block); + else + bh = breada(dev,block,block+1,block+2,-1); + block++; + if (!bh) + return written?written:-EIO; + p = offset + bh->b_data; + offset = 0; + *pos += chars; + written += chars; + count -= chars; + while (chars-->0) + *(p++) = get_fs_byte(buf++); + bh->b_dirt = 1; + brelse(bh); + } + return written; +} + +int block_read(int dev, unsigned long * pos, char * buf, int count) +{ + int block = *pos >> BLOCK_SIZE_BITS; + int offset = *pos & (BLOCK_SIZE-1); + int chars; + int read = 0; + struct buffer_head * bh; + register char * p; + + while (count>0) { + chars = BLOCK_SIZE-offset; + if (chars > count) + chars = count; + if (!(bh = breada(dev,block,block+1,block+2,-1))) + return read?read:-EIO; + block++; + p = offset + bh->b_data; + offset = 0; + *pos += chars; + read += chars; + count -= chars; + while (chars-->0) + put_fs_byte(*(p++),buf++); + brelse(bh); + } + return read; +} diff --git a/linux-0.11-lab/0/linux/fs/block_dev.o b/linux-0.11-lab/0/linux/fs/block_dev.o new file mode 100644 index 0000000000000000000000000000000000000000..e5e9334ce9a4697061730271c4c9d92fcf4aa105 GIT binary patch literal 7296 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 + +#include +#include +#include +#include +#include + +extern void put_super(int dev); +extern void invalidate_inodes(int dev); + +extern int end; +struct buffer_head * start_buffer = (struct buffer_head *) &end; +struct buffer_head * hash_table[NR_HASH]; +static struct buffer_head * free_list; +static struct task_struct * buffer_wait = NULL; +int NR_BUFFERS = 0; + +static inline void wait_on_buffer(struct buffer_head * bh) +{ + cli(); + while (bh->b_lock) + sleep_on(&bh->b_wait); + sti(); +} + +int sys_sync(void) +{ + int i; + struct buffer_head * bh; + + sync_inodes(); /* write out inodes into buffers */ + bh = start_buffer; + for (i=0 ; ib_dirt) + ll_rw_block(WRITE,bh); + } + return 0; +} + +int sync_dev(int dev) +{ + int i; + struct buffer_head * bh; + + bh = start_buffer; + for (i=0 ; ib_dev != dev) + continue; + wait_on_buffer(bh); + if (bh->b_dev == dev && bh->b_dirt) + ll_rw_block(WRITE,bh); + } + sync_inodes(); + bh = start_buffer; + for (i=0 ; ib_dev != dev) + continue; + wait_on_buffer(bh); + if (bh->b_dev == dev && bh->b_dirt) + ll_rw_block(WRITE,bh); + } + return 0; +} + +void inline invalidate_buffers(int dev) +{ + int i; + struct buffer_head * bh; + + bh = start_buffer; + for (i=0 ; ib_dev != dev) + continue; + wait_on_buffer(bh); + if (bh->b_dev == dev) + bh->b_uptodate = bh->b_dirt = 0; + } +} + +/* + * This routine checks whether a floppy has been changed, and + * invalidates all buffer-cache-entries in that case. This + * is a relatively slow routine, so we have to try to minimize using + * it. Thus it is called only upon a 'mount' or 'open'. This + * is the best way of combining speed and utility, I think. + * People changing diskettes in the middle of an operation deserve + * to loose :-) + * + * NOTE! Although currently this is only for floppies, the idea is + * that any additional removable block-device will use this routine, + * and that mount/open needn't know that floppies/whatever are + * special. + */ +void check_disk_change(int dev) +{ + int i; + + if (MAJOR(dev) != 2) + return; + if (!floppy_change(dev & 0x03)) + return; + for (i=0 ; ib_next) + bh->b_next->b_prev = bh->b_prev; + if (bh->b_prev) + bh->b_prev->b_next = bh->b_next; + if (hash(bh->b_dev,bh->b_blocknr) == bh) + hash(bh->b_dev,bh->b_blocknr) = bh->b_next; +/* remove from free list */ + if (!(bh->b_prev_free) || !(bh->b_next_free)) + panic("Free block list corrupted"); + bh->b_prev_free->b_next_free = bh->b_next_free; + bh->b_next_free->b_prev_free = bh->b_prev_free; + if (free_list == bh) + free_list = bh->b_next_free; +} + +static inline void insert_into_queues(struct buffer_head * bh) +{ +/* put at end of free list */ + bh->b_next_free = free_list; + bh->b_prev_free = free_list->b_prev_free; + free_list->b_prev_free->b_next_free = bh; + free_list->b_prev_free = bh; +/* put the buffer in new hash-queue if it has a device */ + bh->b_prev = NULL; + bh->b_next = NULL; + if (!bh->b_dev) + return; + bh->b_next = hash(bh->b_dev,bh->b_blocknr); + hash(bh->b_dev,bh->b_blocknr) = bh; + bh->b_next->b_prev = bh; +} + +static struct buffer_head * find_buffer(int dev, int block) +{ + struct buffer_head * tmp; + + for (tmp = hash(dev,block) ; tmp != NULL ; tmp = tmp->b_next) + if (tmp->b_dev==dev && tmp->b_blocknr==block) + return tmp; + return NULL; +} + +/* + * Why like this, I hear you say... The reason is race-conditions. + * As we don't lock buffers (unless we are readint them, that is), + * something might happen to it while we sleep (ie a read-error + * will force it bad). This shouldn't really happen currently, but + * the code is ready. + */ +struct buffer_head * get_hash_table(int dev, int block) +{ + struct buffer_head * bh; + + for (;;) { + if (!(bh=find_buffer(dev,block))) + return NULL; + bh->b_count++; + wait_on_buffer(bh); + if (bh->b_dev == dev && bh->b_blocknr == block) + return bh; + bh->b_count--; + } +} + +/* + * Ok, this is getblk, and it isn't very clear, again to hinder + * race-conditions. Most of the code is seldom used, (ie repeating), + * so it should be much more efficient than it looks. + * + * The algoritm is changed: hopefully better, and an elusive bug removed. + */ +#define BADNESS(bh) (((bh)->b_dirt<<1)+(bh)->b_lock) +struct buffer_head * getblk(int dev,int block) +{ + struct buffer_head * tmp, * bh; + +repeat: + if (bh = get_hash_table(dev,block)) + return bh; + tmp = free_list; + do { + if (tmp->b_count) + continue; + if (!bh || BADNESS(tmp)b_next_free) != free_list); + if (!bh) { + sleep_on(&buffer_wait); + goto repeat; + } + wait_on_buffer(bh); + if (bh->b_count) + goto repeat; + while (bh->b_dirt) { + sync_dev(bh->b_dev); + wait_on_buffer(bh); + if (bh->b_count) + goto repeat; + } +/* NOTE!! While we slept waiting for this block, somebody else might */ +/* already have added "this" block to the cache. check it */ + if (find_buffer(dev,block)) + goto repeat; +/* OK, FINALLY we know that this buffer is the only one of it's kind, */ +/* and that it's unused (b_count=0), unlocked (b_lock=0), and clean */ + bh->b_count=1; + bh->b_dirt=0; + bh->b_uptodate=0; + remove_from_queues(bh); + bh->b_dev=dev; + bh->b_blocknr=block; + insert_into_queues(bh); + return bh; +} + +void brelse(struct buffer_head * buf) +{ + if (!buf) + return; + wait_on_buffer(buf); + if (!(buf->b_count--)) + panic("Trying to free free buffer"); + wake_up(&buffer_wait); +} + +/* + * bread() reads a specified block and returns the buffer that contains + * it. It returns NULL if the block was unreadable. + */ +struct buffer_head * bread(int dev,int block) +{ + struct buffer_head * bh; + + if (!(bh=getblk(dev,block))) + panic("bread: getblk returned NULL\n"); + if (bh->b_uptodate) + return bh; + ll_rw_block(READ,bh); + wait_on_buffer(bh); + if (bh->b_uptodate) + return bh; + brelse(bh); + return NULL; +} + +#define COPYBLK(from,to) \ +__asm__("cld\n\t" \ + "rep\n\t" \ + "movsl\n\t" \ + ::"c" (BLOCK_SIZE/4),"S" (from),"D" (to) \ + ) + +/* + * bread_page reads four buffers into memory at the desired address. It's + * a function of its own, as there is some speed to be got by reading them + * all at the same time, not waiting for one to be read, and then another + * etc. + */ +void bread_page(unsigned long address,int dev,int b[4]) +{ + struct buffer_head * bh[4]; + int i; + + for (i=0 ; i<4 ; i++) + if (b[i]) { + if (bh[i] = getblk(dev,b[i])) + if (!bh[i]->b_uptodate) + ll_rw_block(READ,bh[i]); + } else + bh[i] = NULL; + for (i=0 ; i<4 ; i++,address += BLOCK_SIZE) + if (bh[i]) { + wait_on_buffer(bh[i]); + if (bh[i]->b_uptodate) + COPYBLK((unsigned long) bh[i]->b_data,address); + brelse(bh[i]); + } +} + +/* + * Ok, breada can be used as bread, but additionally to mark other + * blocks for reading as well. End the argument list with a negative + * number. + */ +struct buffer_head * breada(int dev,int first, ...) +{ + va_list args; + struct buffer_head * bh, *tmp; + + va_start(args,first); + if (!(bh=getblk(dev,first))) + panic("bread: getblk returned NULL\n"); + if (!bh->b_uptodate) + ll_rw_block(READ,bh); + while ((first=va_arg(args,int))>=0) { + tmp=getblk(dev,first); + if (tmp) { + if (!tmp->b_uptodate) + ll_rw_block(READA,bh); + tmp->b_count--; + } + } + va_end(args); + wait_on_buffer(bh); + if (bh->b_uptodate) + return bh; + brelse(bh); + return (NULL); +} + +void buffer_init(long buffer_end) +{ + struct buffer_head * h = start_buffer; + void * b; + int i; + + if (buffer_end == 1<<20) + b = (void *) (640*1024); + else + b = (void *) buffer_end; + while ( (b -= BLOCK_SIZE) >= ((void *) (h+1)) ) { + h->b_dev = 0; + h->b_dirt = 0; + h->b_count = 0; + h->b_lock = 0; + h->b_uptodate = 0; + h->b_wait = NULL; + h->b_next = NULL; + h->b_prev = NULL; + h->b_data = (char *) b; + h->b_prev_free = h-1; + h->b_next_free = h+1; + h++; + NR_BUFFERS++; + if (b == (void *) 0x100000) + b = (void *) 0xA0000; + } + h--; + free_list = start_buffer; + free_list->b_prev_free = h; + h->b_next_free = free_list; + for (i=0;iQ6+~nZ1VPZCP{pdlWadpWGMO3Y4-glv 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 +#include + +#include +#include + +#include +#include + +extern int tty_read(unsigned minor,char * buf,int count); +extern int tty_write(unsigned minor,char * buf,int count); + +typedef (*crw_ptr)(int rw,unsigned minor,char * buf,int count,off_t * pos); + +static int rw_ttyx(int rw,unsigned minor,char * buf,int count,off_t * pos) +{ + return ((rw==READ)?tty_read(minor,buf,count): + tty_write(minor,buf,count)); +} + +static int rw_tty(int rw,unsigned minor,char * buf,int count, off_t * pos) +{ + if (current->tty<0) + return -EPERM; + return rw_ttyx(rw,current->tty,buf,count,pos); +} + +static int rw_ram(int rw,char * buf, int count, off_t *pos) +{ + return -EIO; +} + +static int rw_mem(int rw,char * buf, int count, off_t * pos) +{ + return -EIO; +} + +static int rw_kmem(int rw,char * buf, int count, off_t * pos) +{ + return -EIO; +} + +static int rw_port(int rw,char * buf, int count, off_t * pos) +{ + int i=*pos; + + while (count-->0 && i<65536) { + if (rw==READ) + put_fs_byte(inb(i),buf++); + else + outb(get_fs_byte(buf++),i); + i++; + } + i -= *pos; + *pos += i; + return i; +} + +static int rw_memory(int rw, unsigned minor, char * buf, int count, off_t * pos) +{ + switch(minor) { + case 0: + return rw_ram(rw,buf,count,pos); + case 1: + return rw_mem(rw,buf,count,pos); + case 2: + return rw_kmem(rw,buf,count,pos); + case 3: + return (rw==READ)?0:count; /* rw_null */ + case 4: + return rw_port(rw,buf,count,pos); + default: + return -EIO; + } +} + +#define NRDEVS ((sizeof (crw_table))/(sizeof (crw_ptr))) + +static crw_ptr crw_table[]={ + NULL, /* nodev */ + rw_memory, /* /dev/mem etc */ + NULL, /* /dev/fd */ + NULL, /* /dev/hd */ + rw_ttyx, /* /dev/ttyx */ + rw_tty, /* /dev/tty */ + NULL, /* /dev/lp */ + NULL}; /* unnamed pipes */ + +int rw_char(int rw,int dev, char * buf, int count, off_t * pos) +{ + crw_ptr call_addr; + + if (MAJOR(dev)>=NRDEVS) + return -ENODEV; + if (!(call_addr=crw_table[MAJOR(dev)])) + return -ENODEV; + return call_addr(rw,MINOR(dev),buf,count,pos); +} diff --git a/linux-0.11-lab/0/linux/fs/char_dev.o b/linux-0.11-lab/0/linux/fs/char_dev.o new file mode 100644 index 0000000000000000000000000000000000000000..2977060a7c0b215e10aa16a8395ed973d52837cd GIT binary patch literal 8288 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 O%Ys)0UlIH-!T$wZ8WjQn literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/fs/exec.c b/linux-0.11-lab/0/linux/fs/exec.c new file mode 100644 index 0000000..2ff220e --- /dev/null +++ b/linux-0.11-lab/0/linux/fs/exec.c @@ -0,0 +1,359 @@ +/* + * linux/fs/exec.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * #!-checking implemented by tytso. + */ + +/* + * Demand-loading implemented 01.12.91 - no need to read anything but + * the header into memory. The inode of the executable is put into + * "current->executable", and page faults do the actual loading. Clean. + * + * Once more I can proudly say that linux stood up to being changed: it + * was less than 2 hours work to get demand-loading completely implemented. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +extern int sys_exit(int exit_code); +extern int sys_close(int fd); + +/* + * MAX_ARG_PAGES defines the number of pages allocated for arguments + * and envelope for the new program. 32 should suffice, this gives + * a maximum env+arg of 128kB ! + */ +#define MAX_ARG_PAGES 32 + + +int sys_uselib() +{ + return -ENOSYS; +} + +/* + * create_tables() parses the env- and arg-strings in new user + * memory and creates the pointer tables from them, and puts their + * addresses on the "stack", returning the new stack pointer value. + */ +static unsigned long * create_tables(char * p,int argc,int envc) +{ + unsigned long *argv,*envp; + unsigned long * sp; + + sp = (unsigned long *) (0xfffffffc & (unsigned long) p); + sp -= envc+1; + envp = sp; + sp -= argc+1; + argv = sp; + put_fs_long((unsigned long)envp,--sp); + put_fs_long((unsigned long)argv,--sp); + put_fs_long((unsigned long)argc,--sp); + while (argc-->0) { + put_fs_long((unsigned long) p,argv++); + while (get_fs_byte(p++)) /* nothing */ ; + } + put_fs_long(0,argv); + while (envc-->0) { + put_fs_long((unsigned long) p,envp++); + while (get_fs_byte(p++)) /* nothing */ ; + } + put_fs_long(0,envp); + return sp; +} + +/* + * count() counts the number of arguments/envelopes + */ +static int count(char ** argv) +{ + int i=0; + char ** tmp; + + if (tmp = argv) + while (get_fs_long((unsigned long *) (tmp++))) + i++; + + return i; +} + +/* + * 'copy_string()' copies argument/envelope strings from user + * memory to free pages in kernel mem. These are in a format ready + * to be put directly into the top of new user memory. + * + * Modified by TYT, 11/24/91 to add the from_kmem argument, which specifies + * whether the string and the string array are from user or kernel segments: + * + * from_kmem argv * argv ** + * 0 user space user space + * 1 kernel space user space + * 2 kernel space kernel space + * + * We do this by playing games with the fs segment register. Since it + * it is expensive to load a segment register, we try to avoid calling + * set_fs() unless we absolutely have to. + */ +static unsigned long copy_strings(int argc,char ** argv,unsigned long *page, + unsigned long p, int from_kmem) +{ + char *tmp, *pag; + int len, offset = 0; + unsigned long old_fs, new_fs; + + if (!p) + return 0; /* bullet-proofing */ + new_fs = get_ds(); + old_fs = get_fs(); + if (from_kmem==2) + set_fs(new_fs); + while (argc-- > 0) { + if (from_kmem == 1) + set_fs(new_fs); + if (!(tmp = (char *)get_fs_long(((unsigned long *)argv)+argc))) + panic("argc is wrong"); + if (from_kmem == 1) + set_fs(old_fs); + len=0; /* remember zero-padding */ + do { + len++; + } while (get_fs_byte(tmp++)); + if (p-len < 0) { /* this shouldn't happen - 128kB */ + set_fs(old_fs); + return 0; + } + while (len) { + --p; --tmp; --len; + if (--offset < 0) { + offset = p % PAGE_SIZE; + if (from_kmem==2) + set_fs(old_fs); + if (!(pag = (char *) page[p/PAGE_SIZE]) && + !(pag = (char *) (page[p/PAGE_SIZE] = + (unsigned long *) get_free_page()))) + return 0; + if (from_kmem==2) + set_fs(new_fs); + + } + *(pag + offset) = get_fs_byte(tmp); + } + } + if (from_kmem==2) + set_fs(old_fs); + return p; +} + +static unsigned long change_ldt(unsigned long text_size,unsigned long * page) +{ + unsigned long code_limit,data_limit,code_base,data_base; + int i; + + code_limit = text_size+PAGE_SIZE -1; + code_limit &= 0xFFFFF000; + data_limit = 0x4000000; + code_base = get_base(current->ldt[1]); + data_base = code_base; + set_base(current->ldt[1],code_base); + set_limit(current->ldt[1],code_limit); + set_base(current->ldt[2],data_base); + set_limit(current->ldt[2],data_limit); +/* make sure fs points to the NEW data segment */ + __asm__("pushl $0x17\n\tpop %%fs"::); + data_base += data_limit; + for (i=MAX_ARG_PAGES-1 ; i>=0 ; i--) { + data_base -= PAGE_SIZE; + if (page[i]) + put_page(page[i],data_base); + } + return data_limit; +} + +/* + * 'do_execve()' executes a new program. + */ +int do_execve(unsigned long * eip,long tmp,char * filename, + char ** argv, char ** envp) +{ + struct m_inode * inode; + struct buffer_head * bh; + struct exec ex; + unsigned long page[MAX_ARG_PAGES]; + int i,argc,envc; + int e_uid, e_gid; + int retval; + int sh_bang = 0; + unsigned long p=PAGE_SIZE*MAX_ARG_PAGES-4; + + if ((0xffff & eip[1]) != 0x000f) + panic("execve called from supervisor mode"); + for (i=0 ; ii_mode)) { /* must be regular file */ + retval = -EACCES; + goto exec_error2; + } + i = inode->i_mode; + e_uid = (i & S_ISUID) ? inode->i_uid : current->euid; + e_gid = (i & S_ISGID) ? inode->i_gid : current->egid; + if (current->euid == inode->i_uid) + i >>= 6; + else if (current->egid == inode->i_gid) + i >>= 3; + if (!(i & 1) && + !((inode->i_mode & 0111) && suser())) { + retval = -ENOEXEC; + goto exec_error2; + } + if (!(bh = bread(inode->i_dev,inode->i_zone[0]))) { + retval = -EACCES; + goto exec_error2; + } + ex = *((struct exec *) bh->b_data); /* read exec-header */ + if ((bh->b_data[0] == '#') && (bh->b_data[1] == '!') && (!sh_bang)) { + /* + * This section does the #! interpretation. + * Sorta complicated, but hopefully it will work. -TYT + */ + + char buf[1023], *cp, *interp, *i_name, *i_arg; + unsigned long old_fs; + + strncpy(buf, bh->b_data+2, 1022); + brelse(bh); + iput(inode); + buf[1022] = '\0'; + if (cp = strchr(buf, '\n')) { + *cp = '\0'; + for (cp = buf; (*cp == ' ') || (*cp == '\t'); cp++); + } + if (!cp || *cp == '\0') { + retval = -ENOEXEC; /* No interpreter name found */ + goto exec_error1; + } + interp = i_name = cp; + i_arg = 0; + for ( ; *cp && (*cp != ' ') && (*cp != '\t'); cp++) { + if (*cp == '/') + i_name = cp+1; + } + if (*cp) { + *cp++ = '\0'; + i_arg = cp; + } + /* + * OK, we've parsed out the interpreter name and + * (optional) argument. + */ + if (sh_bang++ == 0) { + p = copy_strings(envc, envp, page, p, 0); + p = copy_strings(--argc, argv+1, page, p, 0); + } + /* + * Splice in (1) the interpreter's name for argv[0] + * (2) (optional) argument to interpreter + * (3) filename of shell script + * + * This is done in reverse order, because of how the + * user environment and arguments are stored. + */ + p = copy_strings(1, &filename, page, p, 1); + argc++; + if (i_arg) { + p = copy_strings(1, &i_arg, page, p, 2); + argc++; + } + p = copy_strings(1, &i_name, page, p, 2); + argc++; + if (!p) { + retval = -ENOMEM; + goto exec_error1; + } + /* + * OK, now restart the process with the interpreter's inode. + */ + old_fs = get_fs(); + set_fs(get_ds()); + if (!(inode=namei(interp))) { /* get executables inode */ + set_fs(old_fs); + retval = -ENOENT; + goto exec_error1; + } + set_fs(old_fs); + goto restart_interp; + } + brelse(bh); + if (N_MAGIC(ex) != ZMAGIC || ex.a_trsize || ex.a_drsize || + ex.a_text+ex.a_data+ex.a_bss>0x3000000 || + inode->i_size < ex.a_text+ex.a_data+ex.a_syms+N_TXTOFF(ex)) { + retval = -ENOEXEC; + goto exec_error2; + } + if (N_TXTOFF(ex) != BLOCK_SIZE) { + printk("%s: N_TXTOFF != BLOCK_SIZE. See a.out.h.", filename); + retval = -ENOEXEC; + goto exec_error2; + } + if (!sh_bang) { + p = copy_strings(envc,envp,page,p,0); + p = copy_strings(argc,argv,page,p,0); + if (!p) { + retval = -ENOMEM; + goto exec_error2; + } + } +/* OK, This is the point of no return */ + if (current->executable) + iput(current->executable); + current->executable = inode; + for (i=0 ; i<32 ; i++) + current->sigaction[i].sa_handler = NULL; + for (i=0 ; iclose_on_exec>>i)&1) + sys_close(i); + current->close_on_exec = 0; + free_page_tables(get_base(current->ldt[1]),get_limit(0x0f)); + free_page_tables(get_base(current->ldt[2]),get_limit(0x17)); + if (last_task_used_math == current) + last_task_used_math = NULL; + current->used_math = 0; + p += change_ldt(ex.a_text,page)-MAX_ARG_PAGES*PAGE_SIZE; + p = (unsigned long) create_tables((char *)p,argc,envc); + current->brk = ex.a_bss + + (current->end_data = ex.a_data + + (current->end_code = ex.a_text)); + current->start_stack = p & 0xfffff000; + current->euid = e_uid; + current->egid = e_gid; + i = ex.a_text+ex.a_data; + while (i&0xfff) + put_fs_byte(0,(char *) (i++)); + eip[0] = ex.a_entry; /* eip, magic happens :-) */ + eip[3] = p; /* stack pointer */ + return 0; +exec_error2: + iput(inode); +exec_error1: + for (i=0 ; ifk_u6V*Yk91+DAroFcU|k2`}@7; zf07~6?H--;`+vXx_y2yJ_nh$HtsP4Y!%*I3D4!bRlzQ`8SJSGYK}}YZ)XIT3Ylap_ z>IROOL#rZn!)yIR9pH{m*fVQS=;*68$)TFT(}Rm6K^O%Gj@PU^wi1+`*rRqI+x_CY zW3GE`Vn~%3LF%W~ZhvHtKZ3Zy#BOuoxc?Z0ez108(4=Sbp)*OiRaJi%Hw1TOFJ3I8 z&lk=dJNVLt3m0He2flvb%!krkWVq8f$o_od^wBe>A&ElCUWNadvUVUH2{OeRCO5b$ z;ve)!&fSL=JVkA(;?@#HxKz;y#rfHYQ#;)0M;Ln5qjCRWZRA`vlzXA8M;6f4vxy)4 z;lhQTM~bgQjN~pr9Nu;0!S6Ey-A?)=?8~|5VW#8OxN({0Xx#5YIX-UpSX@+uaU&A9 zrZnyYFhg4y$U2m=_9P0x_8_W*S#aQiNKh57Jnz5Y)-UL`9vnpGA-L{3QalUWnt|iB z$1ri);2)+x{5n*zT#v)+k6_B3n+P=anBuHD7xAQu~_2a&_W|EZ%k!oE=zgI={h`!L7>({Q zG*aCLHHP8r>rDAVN2CM4M*Jf9g%K*Ost0$vO?S+=P^~z*DMuHWrEVgD7@#|jo(qm8 zy3{zWS3(1f8&t97qXxtE<~b%j=o|7Osu)htwL2dhYeQE;u?@@-glT{yK&QV20e1Uf z8&TD}<{=mq?e4I*?>bWb@RKOuSR|e8({N!j1IOFe9lHmE*Giv&^ewU@fmm6k&j&i;5dv`S9!dcijrX5~tmN2VJ{D%7`X!B?8P7Y2y`cE~xL%Zj!9kU&p z%ocV$!zPB8Tj*qD`O!CmFs^~|o>|*}`L_Me?up`YhE`rvn(>;_jBcuN@Dfc??KP!M zbyML>Hg*4$>c^3C7@J5V=1#*jBzS(wjx^>PRtYo>W8;hoIiz+SDNMhF7=3BP0@Pay zM;dd=9px?GVfcaLt?TYP_UU_8?s&5%pwx#acSb(+vlvQ&d>`b87YsGDGZKb&;D~=n zRe$%$!28t&&UY?XJ$+zmL(l8{R2Y*vxpQZ$M7rQg1`cb*v~53wNdrsTRXwsqIP?YLK0R z{9VRucVmv)As~~5D`AGR6$@D-p^`)GCi;86T2Gba(DsEGK?vaWrrV(F1sYz};o^HthuX#3JppL4L2NP8Knq?P1N&lJm#x&^Y%&v0G$()FUCG_%Fb2MwDaIAdTd zY!y3qfX*yKJ`+o`PO@84iT7EFIq2$G0(k13_9C=5vWq2i2HkxPsbhQys_4bh6@6=h zjzi6m8r~my3dG>CgNUvMUl@F4@aVf=MPOIGN6npHz3U6U5|4JsuBzU(6*9!vbFX?= zy3_)P0W1Lf50GKG`-c}tW_lAx0++BHSdTriGjbjCg}1*PSn7!`y$2ndB&b3gLXkQl zW-fPr0;Vp-qD8LZ!kc4ES>flS5h_Q;*vq{N=}P~bH5vfTwz%O4;LZRrDvbbM=ckWG zncH0CgktOM;x;~+okt3nkJ*O{V=2rnD?UA{f!Wo<@Ts%k>!`>OoXvw{^<4{6*t>V_ zMouW7`&@SS1B^j%cxR*)79ef7>7|GogXA(~`P1k);&T6hlq(ny?+Xv<#rt2!^ckWmJKAHq7C;JAwilwlK(XhJycr+T8M*Gr7 zqW#GbdW=gFy5}PyFnidSu_g5$m*zJhI(Pr?boMWk&XGnnwgJ(7P8zb8+B?J0(}(&y zVJ=Ia8|vQI?}DO4-wgfhCqB?Ixj?;`FnJ2>yb6@DxCPvE;IPMJK%REV_|X2yL6DFf z1{lwPI6~s|Jaosmc@cQM$#(jO9=gc#C^W}uNn)%SoH-yoA2=9>zwzu%&*U#!L%ZD_ zVbs2G4ZKSRoNp1{qllZmUU(}n+Eo4;CLA)r9~pIoyu@67jKz27+@EykOy{IQByR@C z#@sJG+9Q~TdZ!-R-VYL!GgQKQW8#YT>!J?sr6ER^+dr@K(>ygL3y;3)H%_0_n(>d` z7fQWuaJ}|EfN02=zPpe9-!}$N>qm-yo>AtdaB-~AwxinpcJ(3# zbLdeG+G_OlHuW7;bN$$P&v_((lV`{%qH9}MmdliSX_@%G@32+(zPv)S<~550qX8)&6Zq{!$^ zgh>v5P9GOM8P5@r>C?f*%kVVP$7eV zc+?x@5s1WaXAl(YGHAN51-OTt&p3oq=rbJ2?E%4KVBZ3?e+oN%luTP!s7G^t+&@fyLdE5Gq~xEmY5y@2h3 z*9V-pxJ>_qvj!n>C&1?qq%s9%niForc$kLmgNy%3XeNXkUF$cr!s>@2PzFWVZ~Zeg z);A#cPavtRo9JcF0O_~Bf(HF%q;2ajNSBiiT5D)iLAu8JCFvmPT5A#R{z}qy)*jkd zk*;T=lhDKj|5~u78K`Fh(_jz@EPfDqSS^qTZv8Rt%Ccb@Si)rd7C*TJZo3(G+qyLX zdg%htWHOD~SMs<)niaS9V|p=}K!h;s-hgaIdjC*x>Dhplhw&r0*bIXRW3E zouuon#~7!RbXeK-XzZ}hxP$K2GH8rW)=*g=hqrMTX}|S2yp6j_+g3N_D@g~fd*NiP zYQQpQ60REc-V)e0nyRTC?nnWLC4Eb!OS^G}BDIS=IrW%Y@DHuG~gpB4*jg zMl}s)d0#4_j5Q41XqG)fjb>WRvJ8{aOsiRzXK2l|nPm@;YUY~dMFv>Q>bAp&oz%=i zv+MzM-(?n?<=r$}N3$h}#sHdGYL*2US~JVdvLBII&vZJ>vO%VEFPToW>;!!@v&t;< zF|=k@n`M79s#$NA9U5gem}QSMzKQ%FG(x|~^o1!Qe^|whH_nG1>z6?gdyp{0DTZ%6bceK$O;|wGi%s4emt#K5b&8 zZRAR71i}fDmX~w_adWv)}>DgA)0G%P-YVq(H$dbOnx{`Ds={eQ_<9~+q zjVjOt=bAu)^|V&gsK^GCwTtv7(x&x3>CL45)_NwHFnEV*jhK^X3tuQyRvx5v#)0eztshSJ)1Mc zwmNCkx)%4Ks-kH%J^)licEev0;Dk$Qt(z7RoK?eQ2F`GMt zb%KViv`|(K6*q1m?XS$|Ta+<}v~6vs{6^A2$Y&{|jdYFmFz&`pq-!C+UKux&uB(ja zW-H^9r0XjkCO(&R*t!RmH0F_xR64PKW!yr#q0)(abYrEH@aUFGr^};TE1f*z%%^=D zBW#MV-d-vl`Pj{k{!rW8Ml(`tW1DhLUL7Q669?pS66m} zTuO3%rCyrLNN=z<;%+P_ov<2Nu@xIo!yZ*p0pL>BrJbfKmV)L_N&CGoTHL)F0Ok;s~RB5kgJulNB z39s7dCT03)Wvs-c`)5ceuLU3TMr+6KGW?83ZG3jnjhYildhQ{&&3^b-K|Go4 zWebp-IrScpb=vnw3X{wvPUtM+@l`^MipbTn{&7&UE-3FxX=~S5e z{7e^yb$?){%_O(tSF3&hCrotLW^sX=`?jjOVTPYWvoDOA{U6V)%`>}f7R}~80TYx0 zeg4g87W3$fKC7vD*!ZsHI{i9+`2GO9%lYQxYh`ZV0<{7r#-mw$51Y~lv5e8AFJe%9 zt@K0(CY?p*9%qNLm>j-2Zs+<#-Kd|(6>2e^eK)$QK6N?VmG3S_`2fw#2O5ul8%<5p zA?_l{u}LZ4O1G*0+CncPta3F4RE`N<{wc=Euv<4FlfydY6u#xSX=YqsiJEbJ{gbX^ z(it}wo1M$LbqP*-h?=bHRpYk!8Mou<+P+w~@(I^dn|3nFhh@(^6QL0nMYs*2gN%}Q zW3CSIq2h7t)#Xpn^f4-b2gQKS_!rE$oW;`$^xVzyF*iql=v_v9!i|^+{SSr^ZbRrx zj4#~!5MS**F3tLV#m%utUBOZI9VXk4rap%@jYt0%Ch8P!S-!(=TWX4~^IZn5CUk<9Kj0I{+?THH>QTNUJlvW47S}rc%6Bxz=J)M?Fr>@> z3|j`fjX55Z97B3?36}`z$t7H8=pB^Gcigq?2sN-;!YvJLqwXJF-GJIK{#X#xpC^nA@~iDCCYA54@9I>CH`T@w z>n*nyt3oXt6XDuJCq_BnzP;N*6Pbcm`u07v&7BdyVHUo9haXfQ`##uWg&w}PX7kFVGMHq zP5&&(JtUPe(U?&cs_<1^Q8m$+WYr)KGlGr%7Ko6Dkf?(HGUcnfx#E)*%R+d7hYVj; zMFm*{tW`OxYpcLUQ;h&Lv$a{kGb<}GLodt0+HS-)uoZ@}EW~KRtJJbkGvZX17=W#s zY+N&y2Gs!=;0ZigT{9IsdlPbDm}{mk3$YLFb$_)`+f53Lre$K&4z*sy)`FGhsh#|B z9rUuXXcxtrf>;li#_>vF z0%Sf`fq|Q3u^Q8)TY+UE_9N_SFbQ-SQP``;4CYUri;7JjD}*b+DG9@lABI`qdGp?L zNw;CDnEE+j7{9NoRQO9hl2G^=O-;?IOgvpoIL+x)rr57a1hIT?30p!o=eOjQ%Ex=0 zL{ksLf8CY{Wf1z%_ z&$lrgTGP-zVy_tB|N6gX`v6|04J)kgcH*2p?-HUFo%42`ZKlaGJGH_$d3ndK;(>kp ziiZvq51EnBq2eLxcJj8u-niz_*;B5>ewQM91@E8cZO7(f@p~kEIs0=OKl7w7Y&R7T ztys7I)WCqfX285DWL_WA_u3T$2L|kJb9yyRt>xC16}?{@`KCRO&6%fov!`iQ!FtR- zd%#{}ud|CIYi*sX^$rbq^S#EKRn(?hss%rBrS`}H`_KS&FYxw@6?SN3t=Wc~tp%3d zWckX>s}1z@?AZZxMu;Udt!HVCk0XBHv(`V6w!Ungg44)I^Ql)gPo=5Np0%DkWzT!r z9x&&JeC6gc!<-u`j^MV5#DS4}51q2lo*n72=bzP{OwF+DH3WMH4u9axS(AXKZgDjz zpEa{%WbF%fH*N@v{|}6;KWjJJSJBL^PF{PWI;ZRxBq!_fv*ryU{D1bq3ubf3Yz&<` zWbgR#F1u*Y!++hncJ^=Id)IE>^vkhGdiX3vDw^e3De-I(ABGaysQZaZ#dA)q;6w|t zt~5^R`9dsLh~ggKsJfyFXA|$SLQEx`d>ryzFlynCXZS zizd@C5QSVU?nJv%h2B`7N<}kRkQ?(LVue(%ql)^DH;L<2u{W0AsFJZlkCRiyypxFb zf>yWP@u~2laBEXrQ)_r;Z!8z@nU|W~HV1S(oe0nD4$n+xdsBs($y}`0nc0`c7cVCV zVTvs|Gn2(kypYOf@(^XRGj*qC_T{n#Ctk?r^s-ht$L+CpWs-Tv*$C*>RYGewVlOB} z@lFzrvV(;zwYu|gEI2BS?|or@YD>ZgU-eSazEq!ss=0M`_*n(JOBB6Ir@GKyfrs>@ zRHz%V@#@2NyyA96GfqER%sGzACX>+ucN6AN&>0u?K&dVaP?YsleMP1hWgZy4Xuc0M zSH%psAbfdbW=@nzBqgI%6h%S#yP{p`Yu7k2HiYn6UJP{)7iWe&1UpuMtxER^b#?g%%(W%w$5ObsgDNq zd~}zpws9@7)99Te--Ahs`LDxE2~p_W7I<>*r`&nh8+FSTcefsP$6d-;6MDVtV#_Ay z=m|eIM`m$fLuQFI((S?wE@br_hLoE~Hpgm71Ne04EoXFW6ZQ^w_T}AV^lZvyvjwGY zTeRrraKop%uqPMYoo?p!Ma|9HHmkL%rS%i8l&25Adh;^2-mQ!WY~zZc-@hA&6`q#( zoeFsg%qrp<`WLTxccQ zSdNQ?j-w8I=y?ukOEtx_y*$OLrVO5WO?aBR&p_A5>A_CT9q+$=@gH%a6#9bqhn4l>&RDZ3Wf&_^G! zfh~x4FVMT#E-$VHFE;sM*q!$#bBV4EbZI}Hoz2g$Za?_B!t2M<5+9JN|4P)zOQJ-_ z*WuE3x1pe6$h^zbam|&sd-^7KeXxF%d+qju_IyC9FC*SuuSg}j6zI};XAqC|WIVjb zj>g*pn(T~Y?sj^zFhGVk(2m$pe=Ym-v{8%flH<~KmL z%eZW_G~R3Ixc)afkn{55x!l;jRPI;5y)dR>yizUs(iX`3^%&8Id%6kxNkVfEC(pnC zwd2Qqn>@$B+po#b0q^b8HN`%!zYps~w0+FMuVyJ)0Y56;xF%ct-es^s!1d>$*ge0t=@1U^-z z2EcwDKejvx`LXZb#c|&6F+lRHg?EwvhQ|QOe+NJBxxjee8>c@ujz2Yy|Is-9#c}-4 z#__L>aY|N`{E}UOtZZj%s6vdO5Z0vt8*4zVygj`o1BjX#(D2aaN&*yra6 zE)wh%%nEK5d|dFGg8I+f@PA48vw~6VwJdy{w)-!FuL+i8 z(Nf+i_!mI)D*Q1R8@+k8QlBJFS86#ig3njP8A|cHCgTnep}!f=LAE;|Xnq{)ojl^= zTdBq=K>F7U|4G5m2tGpnHP}am|B2vlC~v^?2Adb-MS$e5CI1QJA@ZAqUnu;Of(Hfv zQSe>CAaZ5Au;90W%5sTXY?OR95GM;xC1Pw*DrG>3l(fECaGu~|LGGFK zzen(1!7jm!Aop3?eO~a-1-~rFy@dLw1)mY*o_jo|MECtxkpE+jZj@H)X8 z1s4hO-vrTqonW^h|I|kLc0v9XkNlSezbg1`!S4y468wqaF9hEf{7=Cts4e5o61+ul zh2UyI{l{+DJt+K_1ivQu9l;}l`rmNC{w3jmCHS78;d9%)LhuH`g@Shqt`~ev@JYdg zg2x3<3%)FPPVhZJ9v0ZoprGC#z(<5{5u7WyRB)Bx2Enu-|5X;_?G(hHV>SP`f?pT> z2f?F)KNLJ8XmB54UV?Rk5y2M0xq>mlqk^vpz9IPk1gp63AnwNn?-8uw{sVcvU{o+g z#Mtx;|9Qc`6g(jMZwmjs;432kweYprw;2C&BI4aB{1U+qk*9>;Cb(PVUlsma!apbc zzY71h@E-^tD0ADZCZfG-g>MsFBDhMhPjD*{_JhJ76nsYHKN9}ug1;7=Q0}%jU+{Lp zb%OT`7Kn&HApAbT1A-%hhXhXvz9#q<5&l!L@3WrQ2;LyLNH8t%D+1AM+fUoJSChab4 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/fs/fcntl.c b/linux-0.11-lab/0/linux/fs/fcntl.c new file mode 100644 index 0000000..c201aa8 --- /dev/null +++ b/linux-0.11-lab/0/linux/fs/fcntl.c @@ -0,0 +1,75 @@ +/* + * linux/fs/fcntl.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include +#include +#include +#include + +#include +#include + +extern int sys_close(int fd); + +static int dupfd(unsigned int fd, unsigned int arg) +{ + if (fd >= NR_OPEN || !current->filp[fd]) + return -EBADF; + if (arg >= NR_OPEN) + return -EINVAL; + while (arg < NR_OPEN) + if (current->filp[arg]) + arg++; + else + break; + if (arg >= NR_OPEN) + return -EMFILE; + current->close_on_exec &= ~(1<filp[arg] = current->filp[fd])->f_count++; + return arg; +} + +int sys_dup2(unsigned int oldfd, unsigned int newfd) +{ + sys_close(newfd); + return dupfd(oldfd,newfd); +} + +int sys_dup(unsigned int fildes) +{ + return dupfd(fildes,0); +} + +int sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + struct file * filp; + + if (fd >= NR_OPEN || !(filp = current->filp[fd])) + return -EBADF; + switch (cmd) { + case F_DUPFD: + return dupfd(fd,arg); + case F_GETFD: + return (current->close_on_exec>>fd)&1; + case F_SETFD: + if (arg&1) + current->close_on_exec |= (1<close_on_exec &= ~(1<f_flags; + case F_SETFL: + filp->f_flags &= ~(O_APPEND | O_NONBLOCK); + filp->f_flags |= arg & (O_APPEND | O_NONBLOCK); + return 0; + case F_GETLK: case F_SETLK: case F_SETLKW: + return -1; + default: + return -1; + } +} diff --git a/linux-0.11-lab/0/linux/fs/fcntl.o b/linux-0.11-lab/0/linux/fs/fcntl.o new file mode 100644 index 0000000000000000000000000000000000000000..17a6ecacd50cb07b4337da65f94d880d02b367a8 GIT binary patch literal 6748 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/fs/file_dev.c b/linux-0.11-lab/0/linux/fs/file_dev.c new file mode 100644 index 0000000..0c50eaa --- /dev/null +++ b/linux-0.11-lab/0/linux/fs/file_dev.c @@ -0,0 +1,90 @@ +/* + * linux/fs/file_dev.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include + +#include +#include +#include + +#define MIN(a,b) (((a)<(b))?(a):(b)) +#define MAX(a,b) (((a)>(b))?(a):(b)) + +int file_read(struct m_inode * inode, struct file * filp, char * buf, int count) +{ + int left,chars,nr; + struct buffer_head * bh; + + if ((left=count)<=0) + return 0; + while (left) { + if (nr = bmap(inode,(filp->f_pos)/BLOCK_SIZE)) { + if (!(bh=bread(inode->i_dev,nr))) + break; + } else + bh = NULL; + nr = filp->f_pos % BLOCK_SIZE; + chars = MIN( BLOCK_SIZE-nr , left ); + filp->f_pos += chars; + left -= chars; + if (bh) { + char * p = nr + bh->b_data; + while (chars-->0) + put_fs_byte(*(p++),buf++); + brelse(bh); + } else { + while (chars-->0) + put_fs_byte(0,buf++); + } + } + inode->i_atime = CURRENT_TIME; + return (count-left)?(count-left):-ERROR; +} + +int file_write(struct m_inode * inode, struct file * filp, char * buf, int count) +{ + off_t pos; + int block,c; + struct buffer_head * bh; + char * p; + int i=0; + +/* + * ok, append may not work when many processes are writing at the same time + * but so what. That way leads to madness anyway. + */ + if (filp->f_flags & O_APPEND) + pos = inode->i_size; + else + pos = filp->f_pos; + while (ii_dev,block))) + break; + c = pos % BLOCK_SIZE; + p = c + bh->b_data; + bh->b_dirt = 1; + c = BLOCK_SIZE-c; + if (c > count-i) c = count-i; + pos += c; + if (pos > inode->i_size) { + inode->i_size = pos; + inode->i_dirt = 1; + } + i += c; + while (c-->0) + *(p++) = get_fs_byte(buf++); + brelse(bh); + } + inode->i_mtime = CURRENT_TIME; + if (!(filp->f_flags & O_APPEND)) { + filp->f_pos = pos; + inode->i_ctime = CURRENT_TIME; + } + return (i?i:-1); +} diff --git a/linux-0.11-lab/0/linux/fs/file_dev.o b/linux-0.11-lab/0/linux/fs/file_dev.o new file mode 100644 index 0000000000000000000000000000000000000000..e1ba8a5aa9f848cbe07cc40a116357db631d2c89 GIT binary patch literal 7828 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 SclH@D3RwcTDjZc + +struct file file_table[NR_FILE]; diff --git a/linux-0.11-lab/0/linux/fs/file_table.o b/linux-0.11-lab/0/linux/fs/file_table.o new file mode 100644 index 0000000000000000000000000000000000000000..422bcb331f1423abef699440aa5b0f0ff3a8b671 GIT binary patch literal 2644 zcma)8ONbmr7_OR`-P!Hgo!w=9BnF`a8xkecvzttkb&W;|x+aF`!4(DLY)?=3Ogq!v zV?VOl_&SK&K#0s-B=xPW^?j%FhrbeTlMCJwT9?XVawWCSbyVX|l2jSv>;r0{YaW6k_^T zz^c43M3{C3LO#m~p?wD-+vFv!O1}9tWJUXp+$5jUK4*OA9`G6MD!D~It9?Y?9e~%h zNpi;q*R@lSvd7#dtx0>I{E+r8?Jnm!to=&<9J!$#WXynkS-U~|kmDcG>f|2zQB7xz zPu|k*q&*-%ra=ffB0sKOX3X>CC&cs`U|z-_!=_!MBjE%>dy4!bc}e?}e2cuIh2)nQ zKBe73zWo5~GpHxaSY_e9qLcMJC2H@1m#062oG8PB_yu{OzE~^Q_tocb$KXq%R=Xc6 z!W5mtG`ERzeXVwH?aU$)7onWoi!GZ&EG<G-(`FDL5GCjLkzBG)c>s!O5Yd43kpIj0J zL$ni?^gGLma)}S#8gV?s>Amp;_i=x>NJiF;9-MAS< z4d33%KD)7OtgJMKW~aHF8JbRnjKu9i4g+f-0>^2`Q2fM$^wI?~uoxN5N}`rr)!X zkOgp0bB?ivVFjLNqo#(BEj4ghvMo+e;Qti+cm>cWRebh7?!!!*IMC1w&2`!#>Rb)&9ZYkHg8gkiQ-5obM!ho&zcta4TOYQ7!kK zhn{n~t|E>PMc#7XSs04*p2N$^c{neB7xH;8faf`&;yT9LBvCE*xzNe^-E4CxbDRBJaN~jlSq|VjswDS1$X0~#=Lq&ga zCz+rAOpXJ}=@*Vw_-pAt>oj4i1@Xtt-Oowk-9QNMj)Y*HB&K4`iTsa2WPK#+q${0w zg!W?!)3XcxL8Yf>6#9nJ`D4X+Q{jsW-%$9r!fOgYRQQR)FBEb=InIv?e^L0SLLMmk uXB6&HxTJ7d;Yo#$D11WUrb18Qw!+sGzNPRTh3_l;TH*IZ6fvzQ&gs8hV_9GT literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/fs/fs.o b/linux-0.11-lab/0/linux/fs/fs.o new file mode 100644 index 0000000000000000000000000000000000000000..86ce3ba38e0ee4154487cb990d4dbcff00fb67a3 GIT binary patch literal 142937 zcmeFa3wTu3xi`M|o;`cd43lIaql^+^&_RO)93VhY&;cSwj2I;-Dry2rOe6+`374u| z3@AfHv9-3f>4n(Z4Ys%+SXQUJ%{i2TbDgM7cTAp zd;b6D`9B{IGxM%@z3YA7^{#iV^{&g_*>G{~T+=iS{m(Q4Mj>SwuYOCWDg{BgG2Dn7 zT}NWw)v0(>w~?z(MFB>;_Q#&u^~%wsN1y6CQUOFdXQvK-h%^Y|U3aA7MrUN#{~+DF z1$=<0G_qqrS4q0ZC0!ZQU3+Yz9+s#?{@m^&3f?tpOa99DdiQ=1%ssRB{ZV80?IhMb z2=)mSOW?PxyB;5i%hja-5)ClKpQkgEO_5Ye?PB4s{S{QUt0`6KBGa#N0tzOm@t>*j z*Fg+|M7L4$y**=&!W=>xB(ieM$tk`E1C{ z+_PYY3-IZ5g`W9IlI=#aZP~J?^9;~cb{#Ue?8y!R81FiC zDL_RW6gsQAA=h86GE}R~09!Uh{tAkdbu!*DjG0EpFtVjY=CqlPknS8Meg(wq9EpOx zb32Ik+Y=1_&&kXVE|ch!mf5MzJ{zT2J=HAPl*-u13>daw<=OW6Dio+3bF>6i-^a4u z#u($BqesIB>1-`Ii#X+71+)3Q3;D;k#?>dGz$7Xlh0Uh4s;xqgt##~n#}<9{g03U7 ze%%|}Q9XF>dk2N@js}kd@ER(aFVhVf-?Z=ZKy=$X;9ypM$Wi(gx^3zDU&)`yt~c2i zW`UP1a|#)BKYRy`TAzwPX(GAxxfgz)`_p^RkA5Y$gBg%hMl$>+_?sV2rMojW-Pp>< zASKZSOpN{QqV=!IA0_G~aP-vMzU}iUPdnt|TPaWJ8{g4A+s?G)X4~7VQ!(^MnxzWA z?Dv)Uwejn30ok?JjrBN7MhEO2RFLYm9LU%LO7t#(3P8pDy(9@^Zuyy{jlq?QTlO9f zwRF92cP^JaH_kxKx9lm|{0$H(RI5bgKEra-a$w8SXc&wExw}XqiMJNO9hJc5o-y~B z&+I)E%_8?8y=l&P*Z$P?H)8DNXq{qP!9Q#@XeM(? z;jaB05*E2sDtSjbxT^}qC>{wFExQ)$n;ACpM+el$MAC_jxJuxW8a zOlPbR@HMjLv*}&RpY;ID2?3~(u7?_@WR2woK*bJ=w^v*NOk6#FurwZ)Q_n?_1f+(fii2 zuNmuH(XI1qMLA5Gxw>e+NhHJolQ0i%*`tXT`0*TtqNJWGuu!Ou#y|l!D42&l<|70} zeJVt9C6F^Nsv+Wrt|K!*pDA6F!cUE{_6%*EjKA3`kXgYwS&T#9Ges0pLj)VA_e(&4 zXAPuNkLsLqBfu4Gjp|f6z;bCAj_MVnQ_E>|B+@L&L8Dr6D9<9|jor3ldkqIN&2Ip&+LW!; z>;38=d@`8IPay-pvKzs?iOjo&vNdQbwqiN_dHTN9rwULsA`BKCyD!I>&&HiF67K>iaAF-dFZYlyNB z@+IJw?AqfEy-aS)OxnDs^Y?%6!Z3`H`nW`-e>yYC)Wj;y{^(~bSykv@0KXzQ5P_%& zp_ikZp-ci}8>U5s!0FC&Wjf99j016Q! z_XEUDW04%3)llNLWhP^=WN4BQ!$T+CTTo1j3}CxYv4xOIV;xmmu2tFulw;Y(dScgW zED4>G`|m>bhb^LJa~VDxK5A7ACFkTF~UG=N0!akUj4Niz0UG zbgr(PKPoycNQ7y7&k8`Bb}W3TGgmYv_m|7=1qB<0yi6HYTPR_+N6x1j0xnM8>25&< zeYBwCFV_5e$)bAr{wM++#jxai2PGtg))z)Pj3(Z~4AwMyZ;*u&-HbCT5hWdL5#t>Q zImx3cv+#oz&-p%vsuqf-%*b*%RbW9CRbUVQ8p36xa0RYqnbmt3cG?8f84xaoECoJ| zk$)r&b~O{yfpdKg#!*O<{ZkgxBGim`6BN-bPu^x@WhqtRz3+zyGh4MZ+suJ=DVQyZ z%syO>XF17FPt|C<0%!DuGR%+Od{$^>HR*h$AV@4=22*&h6mU_2ZEiq2pE;1v@l*zN zne6Lj7(zmHIG`A=a<)t6!2d6Z3%ca^ND^3f0Lk+O5~!FoI)lB7WeW%ncYYweD%qXk z2-nGhV+XkCP!ppt_+S54s1<_F)x-L8&0kN< zwoDPGn9~Wel3wPq%=-N~D z2!BOlrr{dK%E*BrG5ja6sxd~31RWkC%7h-BMH1xH$VGCk9+18${jUQ;#-a~<468vR+_{`v$h`Kn;)_SqxH&8;DMXZw%ua8>)C_Ll|jixd=SZ><;FhoM9 z?!?%x;WLm!SZe<(g0glcTVBN`5WThv-0%y#7K-V?j!uJx97?I4Ahdx=t5RdoMMm`o7qK^10bFK?W0**$DRkp!u33q)t z8u&Gkh#CSFH?j;z;zC(H2R%w2;NT%WXX_)Xj$|2|PKBulnpL9a)KJD1+Mr#Sw zD=uOPk6G8DQP^R;O@ z-<7qMBN-c$>T$HCgNnk>fTZ`g(qPB6N=EC9lK)>>#pJA+&OJ52Br05D#L1Q)V4~Ns zqpD2gUs1$z1yiayK`%Qhga_<|VYua<@I1E?>_t@eZ7+l$f>|Oi&~nWQLwRGTSQg0L z(CM(-9ec%aqyqVY+!?}Q4HA;WMmlTdxds&Ss+GJ#u9yh1Zum#!f9@F7I*#BUp&#~D z>z@*Q{EA=RR{|=|y(m%f%LdBlh5^gWsPFSNs88_`N^o4tCo- z|KjkU?BsNK0%{>Nk&BB$lDrIpX={{B!eAW9njt}tl|b_#47w(BbxB1h5!i_>+i7E1 z7t%Qpk;fy%bYZ6LK7|mlHVO*5?z%FWl*J_HLM}&ENpT<}juS|HAS0$ff-nR}IV<0$ zQqnBI4>XHcL$IV3S@<~Q6kRAHn+GN12p3`~&DM$^!}J(PqWLt45Ot_79v5+MRPA8m zIL=|VIII8>&lXj@^F!5tVhl?_)8~L;6UK(Z9Htg8Tt6c`h;FZAL{p}YZE|q-vl zTKQH z7FKqfMF5N8TpS7nO781`wpu-Lh^0AmN|UTmr@L`XqSMk!+>;U6xXG|@7h}%u#i>kg zZ|!O#p~Owqsf>Zu5}LOnu>QfW{b|O07!Pm&S;^ZAusFC5)?#Y+ibJ-) z#o(W4fKD-=4yf^!VtaHjZZee3awv;S4*vKDyHnnrfNTsvta=>72NywX5Om59A&y>L zi9?=G;aBvc2Dv1XS_wZ&0shP%e(_ zQ18cNf{Q-n0*zIk2p#YnRp}!2D|%g2tPUk*qSWRwI_wKDOA!`kCw*ns46NZNI4&Jg^L+aPn1X` z!ALBf#W;;_CT42XmD|xa`?(NBYIX-5JNG+b#Y;+y8m21CQAcX_e>!}BBj)4L?eGzr(~Z$NLX8M#F#VeQVee%!ebCb?vjet9RI%e<9TSwWqg_HhK(NEp0udVI#>~ zxuUaU3qtK*rsM{TR~HoWVEDQmm&Np3*84vCp;o}NnBwy)@=%t|z&L5y4l-h0Fu&9@ z<3MH+JxPMxH&9@M2A|Hf3Dnb>Tf}b;rh5pp8YJ2 zDTWO00t3;cy%#{i4}r%02daf7Ul2@vtKb;v*_mJ=JkcCx&qeR&H%>&IJ6v1$`TFn_!ttp64V^5fY~PdGi; zuXRqDzhE?ayELwkw!gP41OJ-b`Zmjh|4i>eQ`kP3aR;J93QLL+r{?sPoN^XKAo9DZ3*TI-6nn@qkA@T7WK_p z#0sH|R{=jP+KFS-i41({KVx8+bJ zuFJ~S`KB)5J6g!7mM)MAMeg?5p$!Ws2v>s{mq!I+wt9XsP%+WA;znP;+zVMiv~a&% z3d$!%S*#v&b!3B^qf@vf5I0Eu2KW3yxaHnMHb+JSoe6^&dZY00i`Ks`JW_6XhzYSm z`;&Gm5zOSzqzJDkLRhQtlmnS2a)mp^Io-y^bo-*(Mk8&LriE-+E8VpxfblS4re%9k;B9~mZ2Xh zejy~eB{uwBKRx&7?W@?6 z7GWm@YKVbu9|qp70n%V~0wk6p8(v1T0!stZR^(KTpv+=iQTV-#0n=Ukt8sr2M+!9{ zqCpQI*Pw4g#S<75eEwl$9otY_A&{nI6_l~c{t;u1MnTU`uWY~0+%~M_$>-V3xj3%I zBbWk#&t?ZHDA(6kL(tqn!&WudpQMXoeS$h+&qAzE*k3NNLmu&vR{VdMZTjvvjRgZD-{cukRk88!oj z%JfLXIK5)}!S$B7M_Dd3l9xn<&s5_wEO6yxrP)$O_G%%TS9O~r+b z?ek2yak9^7@C&pQ`ACl~#|Zi?`Q%hB^A&k61T+^Y=xqglZa~SGP}K_DZhw+FC%(y* z;e$442Fy(rSw?#msB$eYj>2_5BRVe{wCf0`wxqV2n#jj+`oh8}hGMWimSm}l-l{^& ziFCP4SDaKc;%1E_>5tu(-j>6wvJEQ+X+XA=yw_ANnt@dmH^Fqna?B%9Qr8ysFTax& z@i2;_98(}|Qh_{H61QwibuuURjWgutGp`Qbd ze`Sz_BDE#=K6}!w#}T}`Z-aF5#IKr4(mzki2g>0!$-)4GcE_k)b?iu}>qspe!lp++ zR((!+D&RVvi=*NrE_Bz_8AUnIsnRG#2nt;Lle0V&d6K;3=F- zf*dY6E&$nw4w)}*YV@_1J~A&@@}8CnP7IV+%px2%!R@1euemlIukEU-^(zs{DsChoS0 z+e-Jo7HjE_i4l#X7jEdp21XYw-v8OaV}->awIL?dl(RT@w%mJ&4Tq;<@Fiy+;C|j0 z$1?XF@*X#2D1gW2K14a{gt^-kRT|6dHt1JEQDll9daTSi_j_q>MkG<)&^OZTDuXK` zFXLig27A4iQGty7Wblb^ud~61rNk7UL*!P1%pKHLj_IQ1xvz=M-(H{*kuVBQVhn$h z9H6r|SicA|!8a!PQcaKV_mJ72@683ig=j|bjrsZB0W!!!Lo#;Zbt+uR5*@Q}?3q0y z&m|e{hrM;yDw=~&mZB(DYrg|J*0n$0XQYRd)_VJ;;;dsbs3ExQ@Tn4@W7b*X3XHJB zIY9T$#Q@$r3t!AM#XW4189^q*WC{mP)fk(h!~KYb!BqtwT-NUPmS!Fc;pqoJiQ0+T z8Z|B)3@_rdB=E*^qTT;h7_h)eX!~6hp|)bI=KU-VhMAyv)DiaC)C6AGPC0;jqTaR` zZ-PIEb#pM+%h=*$YoZ9fP;UE+-0d}1fpq&KU%Blo_|Q*TZr@ccxuJWXjcqO6I`z5& zt$ZwQ(>{vWKF>iVQ}gz|83l0+#M>rr{QWzjKW!bVN*p4U79|o|lt>6s6@!UlwiYEw zg{b79qHY;pvJ)yNIgP^(<=DY6@^f)yRDm-j13Be|c7{WW6VS5;L8C4edPw0&4xf_l zuLc6-q#@+P?iFWQYA_OL<3lQb{??-#5 zqN=J4s)b@V$~P?S2Xb1Ly#u{{ar&ozL2i*N&sO_>yc`oqT$8Y8>@N zX&VpI82*xI!FOeq_+w3h*icF^RE?k#rl?z>y*&~HSIQttYEjbi!d@Gc}5lMuMDnQoL-<$W(z9J2zP$h%K_P$ zD#2OjL0wUW19OT;iq@ADgfMn*;cgPlC+B539-s}P+c&2wK>;v?VxlX;#sJw3Y5sOp z9DF%`0LvbX$@}QNqVpb~AIB;bVJ|16vkHt@&V)Y5CEtE}KqWDxKo88sq&xgyxN@PC zfaTPtV^Lw;WF;g-p7DCdtmoxr=`>6ZHg+bF&oa!v0_1A&?b9Gf*8acKw|NpM0xX>>HAjo=|fxPh~UxV@#H=Y{*G@d;$Sa2-hw`Z$|u2?O@^Oi zv^rQ0;>(|>@ukn5usA)PP6JNbgBuIQ2XF1ip}H8UyEm={2DfR@Z8mdmoxrfW3NcTtiZGMp3kz{Hk zzs+}Yn^O3dMWr^IUSrUk+fhy``HBGDEGW>oe~P+3BaOgN54*}T=HtWVvdTG2EN%1ikoHfrevdjsaqX7D z-{77zYW*)j#$LKzyMr5qAnI8*!rpx=VN^LhsGoXh6`DN z84DV)C^Ml)ffaHSB2~u)F1B7#xin5enS$;yp@hbX3-LI4;Sp9PkO{dZo5(#!itejy z^VvSTvs{^zt6YlVs^fMmAwEo{jsxtxx>U}dZJ0jbv6Kyp>gBsb;kmJ1;13FC5*m7*sRpe?P7mLZp6TvxWy}V#jFB=_TW*Yor6zYgq13A*c#zpUqYkHfffU+T#EM}2ssqs zA`};p2)so?JisM3T5*?zkFl!#8u<<&yyHu~Y)V{Q;EIv&0E;?#6(q=2CAi9UDhc=s zuqY41d7Uvj8uP!4K`oK(zk-A$6GlU~#y9qhW8!%;apS*~rSS+n*O_#*Sn+zLR)(pf z4P?#1E@mFwma(uVQQ4z`=a9%vU#uI+7}k!7ThL8^{!+<cPtc;th^&b&ySQ;wb!Q(CErIWJ&d5BJhe{sa-fjO zAfs-yb!yF8B63Q7lo3M^a20zGJ7TDVUfO4sEHyXss8BQoUz)&H?nkCnDk8HkM2Gmv z&p|?I1BmAh;y?($>>M>Y=&=)HC~U_LPz$apVXE?cIj$t(MhTc8qXMcYOYTj}8NyRv zxhLQCLaG^_UsOp4s-gqIvQ?g&{7G6?&oR(LT~|_ud|u^yc8~R|q_hRLuE5#oeFWsN zp}4jO1@QVla1>tNjkrgeJYI6oM$j@lS1@~m<$)`s*`+noI(vXt>Mb;wgp}!zp_RDy zDNSFtqqkF9tDsaF<`!=@o4#-5rI3#+VM>vVmn+W=Yd_1RK0)kP9gF?xcP2_h{ z#n{J%>GBh43C34|Nr-YsOAtbJ5d%t1otZdAU+t$1KBQQgm%ay#m=jY9@Wu=W1#w zlF6ZYQ&4zob!yzkJ5uA$>paCLlAZyLGWj!^XQ)B9dm}kAFRy$`G&aXd-%x@46eP$A zLcOCWgGDTK{qECk~7B#i<2neyiP=$kp|UOQ%tb;plED89*7QQ0|ipmZx!WrD3}Je zEMI~O4nMDxqmn@IR~ki>UWg3_7-cxAjLsL}Vrfv6aan+P8(^jIxGH3nN#CQd@j?O& zl7xg1ezoet%#ElT^+8!Y`>6+#U&1tG3=D0Z=w-}9rbr}lJRHZR3?2aTyp>y{!U{iy za!9L_DYm(1963B~kzCm|WnfWG8qeHxsft{|++Jzmd0x#SI;HaqI%mhDHzvBz0CV-u z)I8sr`tv^TOr1sM=$hiCsCZlrhxN1ykkw-lG_gy?n82gCsB^HZHdSq^&eD!-s9SiK zWX+~p%=8HskojA2EwLAvW>MnsB?u^z=ukJKi|hxJ!X!O+sT21q_sJDDYW;S zlF;+EU3s)o@282Cu}m3SAl9!11oh?I>C-JxvSq$0B%)Fo2<_Vmq2kfrOOzybS%5|k z#y9XR)BtL6h;f>tRt=^a3i8xU+gHFF6!3d!Ak3%^F;IbW#2Y-s|}0$E!BH? zzl35SK*$0Q^bNGU%ddQuS`gf}aT*4HUfGa6MHpi;Hg?gNjFLU$h(!z@u{-gcST1in zc|C-qtj7kh-#lKI@;5i5a<#tWV+H6ZBILp^$08dnGC5TJS8|XRkt?*-{YBb4shqKl zlw#Z#uDe_2@s|~u9Y76xAML%5)bb2Dh0c@c*Lei*7;NQr9voftZO(#t(SkFT z_~Z43LJ{GD5m|&cjg;TRu_=czhiN`-m7;fqiRoa$wEA%=(YPURt9?mawr<4GxaH*Q;h~rUgr?q=|ujr z9nP%$WWb#DxEu-+U@GS<;StxP1TdVl`p!Kfcc#qc3pG4{IR*Q>1E__+l#u!a)7>HN z4(q{ofWLT?m+bLR%CS>Vb_4o*UyX&obju>;*nogTh+#mClmDzQ^mSF~h2rHy;+31+ z+~J_==?(bU1FUd@-d^d^(#t?D*N+ETQVCOIw_3QV&64{5Vvbwx_GuwfKDhD6>=*rJHQtI%f=>dSFW$fNJ@0p-&Ki>W#2nwEAf}GOGjt)@I~PD? zoY{ri>8TE{Eh(BUr%Nv!(uG;V2M^L=k2Al;Gm=l&@pl7IRiaU4)gGNqqkYPm}pv3r*Iih37Eh=B$_ORHdT8-)C5TjO-yc$ znj5^Ew<<|l$X!~<&7M#bhQtTZ-O(%gcv33a`xqeb#N@2k)~PkO5s@o6irB`0E;u#^Yy=ztqi6X3|E5Iw~wJJ-*=jacE+IF7B%QIEU)zun`>RT zi7u{0?PNI>uKDKgNwC$i=I=8w@3K;0%F$QN-v&wmbBy`>H95NVnZLIn&{gBHH;IU7 zrT5#UKEeE5hgbJQ3*Yjiz(h;|%cV$e7fRQ}HrcUVlL3Io0C1r*W zr^S56y95Q%3G3tqF`Y4eUv@%2?p|XIl*HyCo9;UHEb2_Z7xAtd{HgNi!_*c0_`> z@ua$XtM1GYf!E_oS$fp-8jtezn5kBSWf&3XaYS4UN?^m z_yk?&l-?6`otI_n|3B_Jq91NkF4(8*+_sZe*F6M%sX-z1u>$8Z{%MiyCH*qIKW_04 z^a59^FkoGEa{ed=fc;RH?JdtjE>d90cb_4|c~_1xIui2jmtbDH*XOMCM?U&@e5W0- z);;-Hkghst7gd4y40W$uZHQ!Yh3HfbrfNh_OUIM1k@u}e8N7NuOb*yVkizHtZ;w=y z_giwHPNJ0d@Iq;^({MmG4}<&u>#(HOPRjX=q)f`eu|f`xA{h4w`zZGohmuxR$lrm& zzY`sZ;s!4%6q~@3g-w`LzjdT2`3yLrOUns+!1y>gbFrr6t3Jh6mR@))#&WseF31=D z%g0<8XK;pM1+kF~<;t(35DCKH#G|Hum*~SpxSDtvm80T`mm7F)hAxJ&R_v}7+7jY% zS|^^1sQ^JbS8yy90P*_zE?-~3?517~R=Gi(9jQi7l^aO>hL2c3*5T)?&W5gr zIKD$`hACb z9#aI{whLRn^7U09&EyJ3SG(Y}W2@$dK9Dk!BD57pZ~2>0C<(7AS4u-AISOQFAqNll zicy2_i~8{K_YRiqKA5%5=ki0k_9i#|jg0Q-%{_xMWguqnPvK$G6pgV#{)rvYE!_1F zW8qNlZWxN63M0!WP6g3=b?ER4tSh92gfu#F$ybJoXXV8e@K0*>Nu>RG?;-h+eNs9R z%!$TfT%Rm>QA+<^2cEX-{Wrgj)QCqLeakOIIup@9^`o&ak%z}W;G48^&+#2vUy({h zL>E%Zd7Xk{ySx`@q562qPO!Hgg^|M(H7>+QAApBe!3Ow+G?|xE4cU8+M=ahtv6>Hn z@otRVQ|GehuvQT;?@Z|fjI@}ngas3Rw2FfZp5p7CRenM-iokQZ(!il*otScQ(1yqS zXqu)0w0jR1saRXTtq9!;wZ`Ex3+(7$fZLqjYZLHHqG|Y(fi=c0ut^39X zcByjh&5yuII%Tq@+9-g5`D zUCL*>u=?|9`4dtW{?wXqbMdY~aped@hj@jPNNjxL&#-S?oizy*(iOPt8Z`{@r|d+Y zWDymyq`EcOwLc*mfD-|pI`xb<$Wy1<#d>62IhBhw4J;-4whEDx*xna^YQ?wRul^p(`K@YaD0B*C@aT?hm5XA1jfz`J^DmyZSupVX_Ot|eo!<;MM)1cVymP4-x7iJMm91*c*gMV~f#F&KJ~`1^Ji zhOGpi;WE}AAhTS-lLyHCe@nf;arOC6tA|>o)rwUd+H6Ft(hhx)86bn=C0($ayi0PK zpg~CAqW<=c2>a4#9Ep+Bqq<9@4?9(`DX9+NZ{`$UvE;1(n&6lz8?!H-I_Cq;cTD7AJU;i%k88cjSnTRETXVAFc+cIql0=HJ_hsX=`sz zE?wT)kxjO(N~VqStC|~|#_s1h#=Hl3+Y- zA}hd_D3o7AvkYX=wzS!p%SwnkC)?XrWnt)*D?3*}DWiUniZ1DFX=z?*ETO#flc>&; z_GJ*B?OfS`YRq3)TMNBcE=LV$)aERtE^Te>xVahBD^@nIXj}=4Enk^zTzP9FkWI@w zV0di>7SZI%@yYC}Rm&>Gw~xlNRFW+Z>&;9M7#+at_#x%+H74}&LHGDYPw7?lv6AhygpL_6m z9G|^Rue^CF-F3~% za*i5n8drAEO~)sfz;&A1RyHrqE?>EhZV%5%(p4ik*_uFR&9|<|uJh5r50f43Z5_)- z&zzJjAJa4zG}X=R%~>++Sl-dR7LL-4?kIX@xo~?>RV2qWiMA;Co#-LbxggkI6iU$h zd_L-c(Z?YG_O(pL9~)qx)JqNN`qoBcB`7RhA(SrV+ZR&mO?i3By@gZG(#&-^vM@C zkS;EUi9)SJ9YoFmTlnbNXsZV2cXIZZywXYdq`%@)u*R_I+b~wLjf4}+`bj$r(n0M! z0eyw`@#)*yv8-eH8sU=k1~0d7c^dYARv55#RmCENdGu7bBfc}my2!U8}Rud zKCj{<@IROMwMhO8&s} z`2z5dpo}rAICQr)t2o*ffM$VDTgA~?PZft|J&pQMM_!-27?n8-Fmz1b1Uz|^0pAKd zuMhR*VIAN0y} znKa01flI@=-(nf~$UXFty92X|V_h~~_>JNi{3HrL3C%iy8nMhqlo^SK8P6iWfn@@x znSBefuKahb_L_xC57u5Sz%OM%DguWjAGX&If&ZJv|3%{2Ui(f%{Gjn2h4!jE-7p^0 z_%BKPgGm1x`1d3}Y5lp_MiUud#ph=uU@PMBk23e*^DrE%6~E9WZZ%0BKS$ES9niZZ zK5ea+_I?NH&A@+F+xy`{8%2RT6I+v)$}&moV#zB7{4(ITXkMF&ZQ7bwq2B@iO!69F z>r5aqh^<$EcGzgc_>1QCN2wRbH1|xyIFG#8562bsBI&W(XDS@Gf4`{&{ZinQEC^p) z?CVcm!1r%Yw$G!$57wWCrwro-$tP|7RMwmA^Cs|f0sscoI~|xF=<8!}3DKX%W6(q46qCNahxfFQLsu9`gK{g zPq7gFr3#-B$Ri#2h3b(3wTwD^CIf#JbwHiG@whH9&-4wZNn~@J*@6IToTBZr<`mZj z#+c}ao*a-IQ@3xNcWm9BM4n$a>P+2U0=|Y!Id)V_zogHPgd;Mawy|nuKiP<62k?6S ziy_T6%l5-P3fxD0ILg|M&qmv^fe5hULM{uYVHk*vfs z+23b%+gvy4*!6Ekp1=Nt>+snK{8yxZWCH&x{UZr{J3iwo4dVk}TVw+7p0F)gSNh4A zseR=U4|c{(;9tfs>RM;LAnU~OEk4aK=1F|onk(^5NZ$xNh9=QI*QowRKUoL-4HBQW zu9fZcAkr@ZuiJ+*`LDmds2@MCf)>?RzC5Qm(JnoWwwZxXan<1VT!g$bi#`woycM5$z(Ku5SYAck$^4jt}?3#$|y^3gcZ2xR<6I#zn|NUgCDhOad$i{*?3Kqb!3y%6^v# zeAjF1a-cb9K6e2&FBOf~k28VW{r$KSv}-|AKNE9AMDp{`uXBq(9|?3u`VM3u6L!FF z|F&YC*j6uHGI(2{s>U10BOU7G*}M+P4}sS?JPJ?65tVhb_0K^&u*DO%(EM5=y%UAGz`A5qu^hc2lTj3no7`&xfXGm zvaR&Nb1gs3BG4?n-Y~w|htF3$KCIszpmAp&m=Byevu7{(%1-si)0 z0pDCiKKnsC0}iuO+we2ePNLr-?^i8_ewPIOyTH8;+;x5QulMvnkx$HQLmUSl!Y@0d z&S@m8@cB9>fiE(zU)!^K2($VGtJJ+6p9T23S@T<3@NEzn z@%bO%r)YalEc6Sq=s#w~fTK>6u_)1FGwJ@Be~bJ+Jo>nB!DNLP-PSi|_gl>gUC|G)4M_B#&2*xeD|{Ng^0{wMRliCqzy z&%BQnNJYQ3jM3OpkVx*UtcmKI-hHu$7DqXh2npi&gWX-N1W%>Kbil#1v;PcIqzlY ze=>jVVx7;}_=6IitMyxoSxV~9cq|<3pU)jena>#KMlx0ZB>y3I>3q(2*Z2lUnIE`U z=X0L9en9;$|CrAA#``|}o3Ol+@;Sb*8c=@z7j%CAvH5Y&BW!a$c$%xh=PqSH?Le08 zJ`I}%rT`xp0t*?I9pq}&wu5aQSp6v1TrUS6)#!2OeIoQ z(NHg^+$vtt)?_%>l68eu)XW@_NLxh-DkBn=R?*qiMkK1NqA6a^46C@446b8aW~`z* zR#GHpTSc#vOeCtU;+si!J;~-;MQ1QaBxG+0ILWN;&eHd)2l>^j3~pxs)nA_T&Q)5x55*kBEG zTXG*tuCR*UCWEC+WUZo|RHuoFwN_CN6>X-i@34yaT280s$7r67R&je%)^J*1L*gLh ztXgF_x7-%Qtv3sva6af=3aUp5;gTUExD6bu+#4>YtWm(bLP^896A1SvQd`bQ7Hpt6 z+i50EBjJ$4`}FRTTF^wD8hpD;2^TrPCBCT|l*JD3-?=UHyQFg^X>MlOl=C`ywh}IP zR+7GrvMQVa>2D!C!TA*7WrWjC7vXmDpXAgMzLoG~=K}KSAYAE~gqIVZ;(UN_cLm|8 z&O-9Pjqo%h_$pM1xmjA$VNY>8DFE$3cr{_m`6b~sgl*?16tUx#54oqLE) zGX@TVcgP(BRFM577E1HokIwfitZ8#l-Cq0O7+rf};geJ4;L(V?pE8oI*)F>fo zjCe36hoM94Kj0_$5vbDcls5*^-EkgjIAiIBMtBwBa|zqwEa7p4L*bUT6^2tmI2vwQ ziuNB*I2LYMzT9vo5RL-|{yf47=ikBKNs~SPUKvqz7vUVGMsPlA^rADFUEldC2`foq zICD{HX9{6EylPe2aHbLtIhPSXjc^qBiH1`}IOfz5Kb>$K_(_IyKH)@o>B`B5a{=M9 za5EL3K{)CBo%Ayar^3yRYYpc@!sX%Sr5dgXH#ccG9d2Ht;mUCHD)708^i{wE&Jdmf ze4F9SBAh{4z_STg18+EU2-bvYu4;m{(9&=&CRi740yvjoeYgeSB?K3RZw6RHaB*1l zxl0K*IM{wMoOy(soG>kR*}G`PR>S=qe%MEaX-66EtAP1YrXFIm2fCaD{-m*%5uA$# zNQI|ff(Xdzf>FZL*kd3W-{C64w$n;@I^mG>0^#!sN1X{M8@_;EA9ETA&mfzjhD+2n z0EOt75iJIJ%#Or%QVJjDiVT%f9zsTBn3TfD&LX8!3ODj2arWtG7`G>k$SFK>0VkgR zG(;oggCTID?vV+sjp1+vkDN#MPC2Xb9Z3@|cOD|wiKl|R!uc+_PNHJzqTMVznQ+D~ zdWQunnWzgHB{2}k_=S!_jfdEjHtc+GGNsK5sUAmU%qZDIUWaAV@Os7|u9Ar$VwWw|g8< zr3JQ;;}-xi$~Svn^EhtPTD|R&ful6NC}cgLINmEcHpE*DYdiZp3?FYZtoz8?dZ0Dl z0wq+U$w&-iMV?@uKJ+$w5(s-s+1%C>TC8YeK?bo#B1$dxu#`R$H+wEeso`Y4XN-_! zoW?l8+NX3dPUq9bLrP6C1#;|ZLjf@&Tx5*k^Y-o|*8(#lj4Wpx`}&CA;>+pY25cD} zb;L`|x|g8Kj`%OgIKvpR3RID44cK1LpCz`9hxHItEuTahQ3SVT1vR)m9!Oq5xX1m%gGq&0+5uuP<^2v!CvQEm-k6dbsg ztShX@EzA*#v=w=o+(e?%iqL{GQ3VaW#0+Z)ojh>e`CyQ-BEzYUNX)h(OHqB9sJ4dC z`vcdLY_1h~l?+6p#)|xnWkh106=8h?i>Xen6}gh?+`vSg6>-Q-Bu{tMR%AI@FJ&TY zMW#}nCMMQek)JcsOk3Xp!&6SnXrMM)LpUP`TBjj#5OOe=2X1*9?uKE)weJUgl!Cqt zFDT*y4pH!E2&uAfco>YsX>hWIl14ZVynPd?t?(b9qTN7ocKBM-G!hPlyCBA1G7E4t zoFUCp!bRZ{(lmVvQi{W^9jgb`Y)%A0q$dgr|gmL3jn>so}4X<~G8Jg1?NyF*{33 zh6Bv#qyQsaMtC)0E8IwU4PiTcJq52Nc__S#g4fjmk0q{6Gur?biNJrVW} zSEH0Ok;`Kv93?!75wsm14Yi!fZ2D063gRp0fF^1bleC0*FeZnXYtP0{Fa`eYf%5MH zb{GW*#?lK7hf#3gT*9`)C^#^VaL8d49H<~1br=N)#uJV?jDiCb2*&{fe;(mP_%iSh zq{+U_h!RD25zc`qm|@e4fywL&;aMcCB!v;~Av}e!?Jx=sOeGu&?<9U2;VAGEjX)LQ zSollCPbVA)ev%P5pK!uq6dbsKaGAp>I52~7GCT@$12YMy97e%`3kjDyjDjUx;V=r8 zaN1!MEa6IrQE=cQ(pLcwI74^_@NGt57U2xa0-jB{8h9fxhhU9Eb5#?pg_cI(VuE!J zqTs+>g7prf;J_sW7deQ612qH}JEG5BO1L3>F4{LRk8o4?FyYHCg*{u1C<6=jQDNFq zMsy-zew3+Qn>{evh=P}BtYr-SHemBKx&?*4CdlE-Q65PNr?MS$==#1e?gn`hi19Y&pOcLLCuZ$Al=!hHK5M4F-VKxTi4 z9B;m@$5d{a&X150d<32K1oLe(_ym`rOe#=)Hk!)qL7BkC1P%8xDm0hlo$WqE{3RS- zLT-Bz;F?*0Bkn__xs>n__v=(~9^t5anE1;G7rCp!KTw-Sbz<&XC>FSUD&V+#gz$XA z3HN!@UqQIceTRJN2q&@Eb{%+xFNet80ee1~xF1EnErS8Kjuw!?fI9?oY#9u=4-+qg z0r&I7*GEu;Sfqon4hH5hp@RW~2^|dV@Dd0HzK)VIM+E~ifnZ>pm!pCKTTJ-~2Hs(g zNFW&4No7O=!N5MU76}9cfA(@zFktIo;Crm34hD9k`ZA${0b2(HUm^n?4BSB0IvDtG zCUh|H8>*v&ff3}UgMkaZ1cHH|v5XD|VqOk{f%nM39}L(!7|6c=0|A18kX>QI`|KS2A$ToV zCj$#ULw9%r%mVdvO~V}vd|)AA%k8EcT`k@BU+G@g5DvNDC%j0y=}#aiaIJLH9Qj;F zmc=sWcpRXPIi`YfRp5rtLVqbx#vD?hj5(x08FRR=lbMV;q`)OUfimWBg}^2u(0zuA zx6r+l?#on4#vJY(Dl20SH%^{1=5RN_XaN~>xEHgmj5*x%2+NqmwF%3Z!+n&-kTHk5 zmavRD+*=6Cn8SUWvUJR`2m)e(EE~+-Ng^3@xUUkHF^78r3&@zm-9}++Ngi^Wsho;A zLN?79Jb+^DfjgeZ=fl{EG4cgQnGbr-oWkk2;4i(Rh7 z0^Q`<;J!-uUbab-yO;Fa*@ms|XQ;z{gxlOM;_oMXixK6J^%_J8r*RD%s|6isaSTGB zbuN6_ZA2Mo;uL^}JDTt$7P8%4&`$+g?i%7NXMhHQ7D;8G6|%`87P2qEPw)*I)h_=! zU=e89zCg=9w*vfSpk@04E!!7p*}g!__61tD47A)a(BDpzy$ZD071it?Y;X(rouKsjt(U zJ&$|L@9o1}kcnNJa@zF)meQB)&7Rl2QV;YgCCFH+^i-PdA$<+s>=}l%ti(gA#A*9k ziLakE44e}O3GZW$zMXIOT!SLgp8I8y_EW!4vj1c%hzd$mJ}v9lY9zKW_YLOiYy4)< z29L?_6%!*dgm!qBNqw!~?D;Ry$!2|5@-yNcD?ud_w$$UVip8m0XmOQlI(@_`^5Xjl zSUY5Db&RsFfv0)4shY@<;!&RV{8$sX#%NA&fiLa`X7ml@XQJ{&geC$zkM%3;}_s<8!w=&ZH~Z& zMe`b52-pDNBNzY>>i-rXLjALVErj|*kV2^cW8~SpNRUi{6{!D)21KYolKHk3+gKKhIXhBX#%ZzBPoo?S5U;fiLe#Z6?k3!{3~+Je71Fmf15QRt3E#}JsYrk{t%S=X>xgfotcu8! zgl{1{A@X;^%Lu0<-z3~l{*xlFQJ-50Pma7xdMZzlxPmRo{tlJ1r zGs49v5HqviVTH5I=%fH6QbBk%VJoto@EXE)WG>;gBo9U2qOf%t;G?i7&FIo_KVl~B zd66;Xc8~|cPXHrb!kEH#H?BoX+U6~|v1ZodYFvA%Vd$GHudtEdWHIqjM!=p5PPXZc z1zqrGz+L@eCVn0lsbB;@uH1&TEjPtHGxSMFwK_RlRR=|;viL${<2@eU4 zCjC6Z(a`0@Uq-knbcAs21?V)f&@Ul7c=;^A@z4bFnNK(onns!{2$zMHkWU@qq!Io) zhs122K4-EUEAnWL6=GJ&PtZZAhI?VM}L8cVxt(YP{!rQL^A zK;&R)SK%eFw3~u@$sDz`bFQOxGuVG+B}D@JydeymGNG1s&h;e2KCejzB7uG0A5m+O zz&>vawEqp^;D~xI{Ya2+}N-4*O@~n=XNr;!qq_3AWJtk|F-J!{E&dF5$!r1No9t6aKS=uvH%EFx#V1(uqUQO5v{ebWq!glBl3R^44L(fpT zb@u}wg*|D;;B=6-2k*E8qfclAv+tDbKFtolUb1t@VuNJ&aq6;>uoL+& zdV+Gh$+IDJCClE+HfahKk$yXE(;5nq=03u0plMAk=WvP&Lu2YUd}kea*NxkAS}1Io$-X_7Pm8ju-xKy&Lf-% zeG&YfG}&Y2MHG9As2sMqFDk{#%bCnkFZ3V@D@kF5=D<466vA?g+nGu@6sjS98ezG` z?Nkwtg)V{zI@1Zum6vlqVY$WaTtHZEaXT{zCqsc!(9a|+x44}P3Ck^R3Coq2gyqUh z!gA&1Tts@g#qDGW%Pnqa7Gb%??aU@Dwz!=+1jQD&Q%z88aXS|i6kFWRT!LbY+qs0G z*y46-2+A#P=TgEAp<>o_9^s}?FX79MpcS$5`UHMBJPFfc<@F+9ew3*LHiw-k9=$Q% z)L5*%s=>lMhx7Uv$a^Y3_rBY;^N6*m@pqf2gyx}<6oJcf}mRV$y zEP_?i3^<;7A@lUJsbkpb3ZknuB^r5T*kLk8FA2UyLXC%wXAB2Bc-%%pxc*6iW-l&tfYmE^=>T2rO$xHu8`isZ4@D1D2X|3D;h@se9N zX3rBIk012mp;ERm{cg#k9W2QIIVSZZw`R|9#O+dz=lZZvDW%2>iicpR60N6=U`zb$ z9^L~zJxvyqGVc2LxJTGkaa3@;Ix!BXZfkxIzdsOlW3tnQf z3!yUz$u+7bts_Mn>tvHLdMoX7lc}FPHhUg}gflA1@+NbYtk_7{qET^JI}+7eVv@>w zAj^s@Rf?=I&a}_UQubN2elTF8XP>p3oKl=|f`Jea(NCb`{~D!5HC-dcX*Br7p8zvv z5*==|EDXuUm^Y~07+OcJ1`A6E=8Nn&XPyd_S~%dHoe1#1 z523dCBTRPYi^Fl=jlo4HTDH(B7CB}ibk@DLM=SX-V*;y%nXtG_cn3ku!D?X|8C=fPn80eGhh;g{|R5jdh03W!C)RsGwZq*>& z`QxN%Bph;Up-ceB?{t+ds7zp~blVhZns^1P*u9i4ug+=iBhAe$n{rK-Z6#dpK1R5W zvMStBlzR)|3GT~;ml008-zD5m{*&BogmKD^)q;B+b>s7XIIrNASztNgDehRpD+o_@ z?;`)(2v0Mt_n;ikX=qP(0f{;(z;GWTyqd7({*CY&!nQk-6kDe-p^j<_8Z-$mO* zU5jNm6CZQOlIPtN6?f-T);)w#Z{oL-rrw=Oo;j+!$lXpp+Xydq-zEQU@@#PLV_9`h zGn@3=X`5De25Igi+~y7^{(i#hoMsb538%qo;ol)J9{A{6UZp=q;f56_x%t zVcQjzeu%KD^d|_bN`I2Ds`RIPm42A`nBnY3EgZKV35(+q4uyD6%KZxr<4oj@6~p}k z;Yn1-c9%mpXEM83$Q^=8IF&V^!P11JCB&oY$N`5!yoO;8g-m88IZel&$Wg|Hpq?HhY4;gGwU_-TZrz)v*nD#9_h2er1R z6OIEv$*|8SoCxstjeP;(vH)-2*fR(x-Ac%{XA({Yc>Bh_kZ^f`w{Ij|5#a3`38w?R zeIwz@0B_&e7m>aSc)%ILGk|Y1>{)~}C<}Nt;cDOwdk(>x0L@iRuohYx_QeG20=Ru+ z&m~wN!0j9R5`v2YxP4>S5L_JK?Hl`2!VT_P)^r}>Cbx4&#wy_V7a9Fz&98BE+Rh$i5c^hh71>X8BSO zCI#UqHDS3X9C`!X&`fuMgi;VxYm&4kDP2aADkk-NSM@Q& zT*A?`Uy+iUz!ll*_kq<(3P*|PwVvt;-~#V`>OWHMzZ*1-p4A%x?@7gE@d zl(6BCky53agy-W)^JqIC{b^nW`Xdk|d&973eaon)_tFFYY zAbU?rY&eYv!T4`{59LpvO9Krx$-=BNMtoW2N&Ik)H=>+K4snIRIeC;(_BtvN_ySdk z(r5p!vo12qeh8L~SDwm%o26Xi49-O62nQG$C!cYUh%+c%BFeJhYj5NEyzwX; z!Zw=GTDJK*MoIH}ti6iy(T{z$K?MH#3I{wLLkGMVT0$a*{$K=H*zOKI8-Sk|L@Kxh zKZO|jH0GJ1^TFNu5^@|JLw^w%>$AvB+43^gt&nG{%T(`>m5QNnCSJwR=Z*xdV(2J2 zs~CD6=~WCppLi8R{~KX_nF<1Jb(!irgjEb(K^hf9KTJM-W9VXt+#LwY%T$YzA5<~) zeDDaW7`hESf+~jo81X8GK1h5$FZsnHj}g`}^xaJ87@AM226YU*$4elF-iW%(92G;$ z1Y+pxy&M%o2Ssp<82WkUhy-HjhpCK6Acp=eS&IZ>=-pn9ilKudY(@;diIvnb^rfi2 zOsE(-D8gpM(4Qj%9YcSLtVIGbbci`RhTcncbPW9}b94-S)Jq_SewPe%4E>y!gBbc3 zWZ;jXgF1%(F?0MebWq383#qk^p})iWG_jK+hF(iKI)=WPa$5GIc~lG?Y<&d@6+;Ja zX~V42?=sbZ82UZ%!2N0wL%#y%GTb-ZH-WcR484$UrDEv6lSakRrG!-s{TM1^s~GzG z#H$#3K3!hL(BCJGilGmar;4Fhl3vBo8z@)B&<@M082TOJRSf+sVHHEKBp($+*AP}Q z^enk={_H>t#NX5{16IL)!9SQLdlli)X;j!@^`b^E1}Ad>aQBc< zMR?V~2YnGi5o>J^#&8jPYa!1fIGAYXqy98Myj#D)%?7V#y;kY#~gbDWi$)WEdkuL{N#Rm>Mcm zt%+~_Z}#213tsO=boDohTH%NpaeldD+CY}hX^<#0Yyb6fQHP8gd`@p3~C(+ z`kXb^R&A-lu}*QSb-Gx!&sNiFomy$tTB}mEgSMqwt+xK(xA)rTo|}O|^!2^}|IyrU zk896suf6tg7&2Ges`AgHUqaiKC7|nc^0XkgG|_B1LrLB~5yfLS8h#<87BR4S^Uhv> zGvorDPvsHhvxpu+K8rH)DIq1FQ*`Q*&#Brb`BZ}z7XtG~VAwj-!ugyY%ICf+pKOLB zkU5;8z^J!)3N>QCgoyST`1!EVvdj|{*FomNiH`g6CI(J}90y3B2C)$ir$NR*(;B$| zK3*ZkGlXta9^M*wL~n-~a?V=#;4pz3T(r`r2!n4zT)AlVDxy%O##8C>d2pAr)$t-G zA{VU=1xYzu9WST5T(o+C?sC!UVw%m_>QiYsX&(#y&dHiVi#c2U?Z5(Y;Cz(5@3Yml zflr`PV^JXv{D?m41U1BgCT2!iAPzi5(#isH;HqR!8Y;Ex8An+bI$6&I7Kj7CBLU?DmD;xgABY3p zB+%#C>W%a%XLbUW8m|&Sr8a`OHW#ffV|L6%tEEiGoUJ~D>4Yy@MZy=YBHOrV^(10r z>s?*6dK_e<`p|RyLAXctq38JFNINPQt=?rAxoGuQx>w9b)(6CIMlqst(druvBNwd_ zC`42)THVDka?z@raqHG1?u7U}hL?+0$1`2IX!R1!`p|RyQJVFk=lJC`>qF1+3estu z4LZ}}GicU_p5s$!Zl?Rb@gmYUho1LCWNf{&j^j%hD9O6F;%zj`MXM)hmWx&%3m_M* z4r0P`=vgjWtp)9vzG%g90zqI3SbqE+gpA2WtMAb)7p*Qw6~yGC)!*p8t&3J?A}dh! z1Q)Ho;W_tz<>Ztgj-C-Ma zA%EyTh#m+y2fw*TBBpK6hS9w6YOntR{1bmEqz8?dDb@9Rm!Tj+#3I!A4P6Y|usnt; zFb}}m>-lQHa4ka6A0mV%RKV1E4mSTil-3!_eDKLN<^lKpAt?-RStafiSzb_~m~TWH zt|W+|nuMQNjJneloQ?s*m8>z8MRGa@TlsaYiIF64UYWJm-($!t_kjG!4Dus0$V*5e zKhluTeXbDXcO!Z8SgpO@hWwy%uiQai=XWscLqW66M}mig86r|MyHVAIg_zB z55$IeT#BsR1Ai@mw$8y|Ys9rAUqaTeYHcXOWalD>mta zWf|nfPso=E`H{yJf_k}9z;`rQ18CTSysHDmF>B;`tj`m8U_9y~q&2D(4iSA3@If?G z#F{q%zxEB7Q0%<12!RrsC&!+F7eu!E;0$?iZ$MfejE;k&?eC4?ku%^E$b)Ap5AP~? z;O(jd0MUa%9AY7hqr^fQc*fL?(xk+~UxP&SB1DA>YoZN?u^-|@4yVzIJqORo5h`qK z3f<*CptA?eav$(xhLQV#hte$f0S^Gph};Lfj^=s$xttN3neq9>Fz3atrTJ)@^JDo8 za}3R+VpU^dUO;mpWN5OO_#Y9JDl8I-?E(L&+y^|21(o}NCxAv&?gO^dUG4*Jr2E1Y znrLv=w`evpYYQz#W}QpRB9=Da$+|PJKxUnbvTL6}g~eb{VeKCH1S%|%Sv%-sWY&wA z86&ekOVUPW-4OT$Dy#!Q8Zv7M3u$E5Jy7G?5~#2k3^MEGBw%FL^GMprtpB9N$gJlu zJ4R-Gm~o8E`dVOt%=!l77@761zy~txH6#$0S)=AY;KlR_%dF9gOCw5VoyuHS($eN+ zUB&WL(Xtv33NW2&R^pjXRvFW&;jU7k!ulO7feNcRDk`jf&@27O6^Nyt2;ghDYP{jl z=r2G6Dl9(D68i~=%M$^yr{FG61jI%o2a#pEJHNv)iH5Q{;ORh1CW-YnKW|O{=T<0M&R9LLf*mMTcl51=M&02DeJw~%!*DGKF zRx`LCD`mpLbv;&N! ze}+3$SPZJ<4>S}hK!ru+M|2VBLxr_03I@bY%4q23S~PTXEgHJH77g88i-vBlMMF2& zqH=TXHqehwCV8l^I0V^gROi6?$zP6x2wcC zu2H$Uc0PN0NOFyaZmvZ`H`k&Ek!E4+2c#2{T%)0zYuc>OPinJ1KdH_7{A4tAb1fRW zxfY#G`uhB2G<|a|n!dRfP2XILrf;rA(>K?m>6>fO(9N}|++17AlFH4sL9DToEfJ-{ z;>9$z|9d=gfKAF*QK$Tqs`eusfdlH``B&o#6;>6xj+Q?;#c37R?vU4VKST}LHjSL> zl?rP%;zIuPBVU7S9-05paST;p9^kjvSHMS9SoEg~OA#vIv_<)I_(jOGqvT`rJiomj zr$wyX4?xNp!eM{}bIEy}AO(m zS*mqboVxgK)QO0|jejby#%jXLAX7CncaurXd>{Z1I0dP5r1R{ z&=;C6hhxOz-PnkIJ*vcRnt-O*6Vl7R*fT`!k3!=@bmw!!q_J>6#*V~R zA|h@{T>&D|^~hpj#G8qXc^0BZV)Y1Qc`-zY_-%~feU31Z_}MT=JU)gQ$-0O^yl*f} z_Te!5-bT6)I0@z~?*f{0NN0d|4AP1W{3gtUy(4HI#0tyvW-_h8H0OJD3_pZsJmDAl z9uS%QDTwz#BUBPqn!9LD7N+~bh7y1k+zI;;`;?Y6L6CT4-rMxd!Bnc z@r&uBER&u1S`zLvq@T6<~s2cNI;(bjGxWysP{YFtv<3&ifJL*3mq{o5k?;OlxoNG^Tqh z&6B)$XkJe9WbXx<8%Teux1Qz|H1FdbO*)MDe~S%1n17%lI9koBjMM8sP}dh#ylt_(A6 z48lO%VbDPbBREnf1-yt<2#D4puMl^xf;mTvJLFDQ4$ovo^}C=sJd+jG?}Fy=OjcCC z3!1|-SyBBiXb#V0MfJO&FvDHm1-%LMqmxN~l$A}=>`wzWzyNXQ&nOYZ9r6b6+YBi0 zg2vz;)$fAl@Jv=z-US^%cl|CX+^1Mkc^7mD-S;Q;Jh)G_q6g5NpTjd*QT;Ax4$ovo zUTkNa3(9N-v!OVnXIUO7c>WFvZDH3&>S@= zJ=;Rx%#-iMJhJMDueHtEwGsW%JcA{z+BGA{?UGx8R2|jBnVDh3Yt=I$Wi= zhfWb^uZodL{aB^>h>*R0tZ!%(WzZ-R8rHDKn7}lqyao+)GSFV%f>?a8$(go0>_Ks+ znc`sYa9`Fd3ZOHwpUwoXw~r>dnIvbvOoSIGUx#D#A~G=RodFo3)^sSCB6jp^NbHeG zc(n?DuOW3lz+Q+yOu3Y$p-s6BLDJfk>*;9wCnI>ogE?k)*ABy0E2M}Q;SsGwltMf; zjKsVM+#@j>E$iVb1g3r1@x?^S%2S z{ur7^dH*Dx1vD30{z@da(Y23ebniy^*jh8=orBo6*35XHBDSqHGu{()*P0pcL8NRi zoPd@e96yg{(aglB(;}Lg_+J=%(a%v%NHO1|kFr3Dxdo-x7Lj7K1yaoFz(=GQTd7{EXe6)A>YGZuLhv9hU`>O@}{a6Al?wLzkxtd+NM)e+D(Td)_Z51tGE6Pwj`J2X zZXL}Nya5caH8Wlp>1)l5*T}e9Gvggiv)0Ub18LTp8Si1{O>1VnvuJK&ex`e?Xx5q; z?>9`#Xl5=z0@zbzeR}sXkk-t2zol7gW;_lB*;Di$U}CEo-1jbJ=7K#%R%5gSW%9j< zg{p=u<3(8_$}-x7GmKPsh%Ce51X*Sd!g^PMtUu*=7%guPnlXX1em9byS{?e{?R1~E z819f|7*wlnuxkV}WEma_ioTD0H`o)Ng;~imwpQIJS;p3?8zsxwT6Lpj8GCPJ${L_# z8C$Dvlq_Rw)s2#6Y^}QSsC2O>lRRV@Mq{s1y(eKsx#{!^dmnNLrRlb{>c)G9k+kYY z$uhQ9-FPq1U8`=CEMsfcjrSf(ZSPO&T9&c3>PE>jwpQIJS;p3?8}A;}q+QJLT9&c3 z>PE>j+N@<6ZPv1kHfveN)~XvN%h+0VqhuL-HfhdMvW%@&H;t-7HsV{6q7Wf@zm zZYayxT6IHN#@4DE$}+ZA-6&bc)~Xxt$1JH<-FWAt>Fknas87f;*#Hh@Rke_1=D^H9 zsp?pSLo}Ob&`vR~kY%oBg}%a0$N3c68_ecc!9RBobXEHmPDGr}3s_&TF&J*&Swp@J zPe*Mynoj`Q>z_8U9GgbO;)bJ>-f;XmT-Ao-kjIgzGlbO4R|4(zK1B#7>I|XLL{I26 zSA+cwg!52ZhkXaRaSF_r1nu>Q!$)mcIt4~yq$m~W>_@C&?8nYn^Nm5gJ`}_ls}qp4 z$I^o$TP#BN{6$Quh(_}*LVNv92%?HMg}l(|INi#B2Myuu%V6fyg!cNMnP4+auwfT7 zSh4v^p*~r!^Ia^tunL|<7@`3N~faH-D%95`E(&}0>r6mg0r+y?q4P` zkXG|Va%Upv#^xuwG0xn5b>UVgo}i!D+VUWpyZdRcW^2S^CUq>Syu3djMq&E*BB@+O z;#eBlHh8@Bc%9U0b${1gsD0W{bIj0)yGf^!#Ttt8Z^Q&*ujip{oy|raSEx4XxRKoR z&`fTl&I`62Ew@S6%YfY9)2B(t8mv=1O&7c&uerPy_ouY2F0Y}w(Q>hbVLq!8F&12G z%M!UPc&nzlDDj(+ZK*ZlGuGb*dcJU=rM}~c4Mpa-iZql5O0M&`LFX}&m`@rvXo^*d zO(Y?xx}_0F^_HYqz*YRv6kf&+nmI&*qwi@{gx#r z(eEePwiLG%+^2NSEgDtFa4(L)I$)P77OdP}dnC*kFhZr>0rRf!qBAxi-;Ky$9#0dv z??0%rdg;nMoJw}z*LATlaS`()wpocnl2bOfz2q$2BR*g*+>VWBTf2Vy za8x^Nmw@u*beM z^Hg?;h&K=^L`0T2g6`8&aEBU(L47zNTM<&oiboy+L_a}=;X_GEP~?Y_Xt1*Rp(L6j z%>1dyPFyX21}p{zz7({@LAtLXEl-vf4Z%AGCgG}G~Y#HFnky3&nSfU3BHSj4uyk?IY%;% zEG=^WN@}vS$T=ji;JZj!D3|sLzKg^uV3w2fFA|WYMb4*;qb$L9kr)i$Mf!+7vb4yF z1QvW3=^rE@ON*QXX;Etid>3gf6IB*`7wKNcQ5Jj`>EytI?;_;~!In8WN0WdoE#$jM z@aA`sX46NO7V=#rJ`#@aBCRKZN?Pz;q*1KiDq8Seq_=3PW+mdgNIzqua!^sei=8V@r4amWvz zv*AHPZxREFOn(c_TBgs|-z`#!dw0-X%k*&PcZ=vg*t>`BTBe6PzgtB2{A}tcJuTB` zbAt3lrr!(cdRnH>*555+_zBtiyG1nbovpuHMDyfq{oNv(r)BH!7STKd?)+{M%?H7q z-z}nf7UJ@|MKm7^Is@l=kAihG*KdI_?gd=3o69~lvO3D>7{qv{@y&cPm zV<3F(^=H68w?%o-2tg)eJ2oCU7p{6c_S>j;yWnj^)#}ZM;L~F}RuL+A50oh@51qjn zV?RTT0V*+GZ_qKuax775QZdHTgE8W2iWpvlUhL%HC-~|#KB^N#MjMb(Cx_h|arNDU z97!$r9k6E|2^T8!C!)HXK_tPA+qKAuvDM{UBrkqd*6=fE<@6SO$J$>1Opw~18L91= zk(!DWr1rIp)WlYo|0eS+Hl+3dGj=3{nlED8>-WI~pF5s;JW|($m9I*Aluo-U0X^wl z2Etn{393^|4po+g321=lNwSGk19P435e%f--nLX}j}O_|K`M=Xrd9AOq#nDGAqwUq z!`?+?g4SMxIXiF2#jibg8X9v9etwDt;cw@mws6Dbl>{>NJaVv&>y}%lgG40uOK7?Q zHz`~6JrGM@x7?q8w*L{RdnY46aNY83taqFb;cKp2b|XD=-SQVCCD$z}c$({$Be6&^ z*DZ5N`KV@;Cp%^_yj-`epu1eRq_*5#x156n&2`HwX_o7j^B7*PTOLa~nb$2pMbO~7 z@xo&xF;1irxs|SHuxGjlF2(DW$ zLXG!*-LioM%yr9mSOjz3@=2y+u3HXccFc9lZpJa!E&mi)a8~U*jAO1_{xI-ahR0b* zpwH`;d(x+zxt9AC!F9{!%(c00c^b=8bw1b&&Z^zTj8-3kI5?{|h3VA1kLC%^szoqX zg0pJh00Z0Bb<4Lw!(6xIZoav0xe4y(y5(!gsJU)=8^g$T%YBd;bKUY&c5^IjpqGn{ zWSA=bWJwjfyj-^&NIG)e@)>s3Iu>L??0nLZ>z2nbUAb<#g=V>K`5T%WNPlYVL7L^d zy}T_EY~gfX9488_t84%l(ao5p(aO`%{lqXBL^%#*SOYWt+JXvxqY08r&dy~#Z>^VzgKViD^WXTPT zD^Hf3%<%GLNdd#ilO-rtiY5!Bn@$ainSDlc{~iCxDGTCqta&`D><8n6~F55TA{ z6y`t-M{eX|D)|ad_5GXi2P2`_lsLL7&iJCRv8jv{iET!qV(N~YAKQarrVU0IsD>GI zPzBTTBcy;+eS_fS6oWptx!YlO^)@#-3N$Eco113+^vD;znED;ik4`3extPk~WiFN6~L$uQI> zE~Y+#HYHCp7gPTYGyi&DOw9wcQ?3rab`ZS;RXSu}^dNmdmBN6QCXYd|+{aK+woPLo zO_G_Y!+j^fHILnO$P37bGl8A!&xn3K1FXM}(b>zL2^>n44;#?JIvC``q3e*Qvlk;_ zGu;}(QxwijS}&W=0+9yaGaN=;pY|XPjumI7&QJumL}6hl2yR2)C;8c=fR`@($hoMH z;bR$m3Ga1&1giTvr25S`s8-eE#NQGc1FB1fYVO_4*;1V|KledqZ0UDY$N@v2CBaj) z-?E`6Fl3pwEusJ?<_2|4Z<)SNT9;rp%XK!Z60H@MQ*pf_w-niA<@gbL>PKFN-^*g$ z%%~F=KzF3FJP|5No#mTNWvYs}B_qqXWMugklVz1j^+t-*v5c7%v(Dsg;Y{8xnY4zV z#Zte`#1WHT}Cfw+mHuyr)xI zHdNK`A9Q9L67@WLDYm6UZ)c5)ZIPf<5EM90?Jnx4GDzhQxs!RDrMOGQANJvtfkl79&*>{IrxGVJ`g$3pMHx z1}##48RRiAIZR?5xhP< zO`g9;?$D2>+qym$TBELDPdQc*e(?m$;vsO1J1oz1eH?2tR8Ya3>wv5eHS&zrFPOy^ zJ^CpP=~pfD=;Iv@(Oi>gjz^>yyAlfY8Dos#=yI)57^e@k`# zj8*6F`i%VDAo*Kljf$`ipHq}5&flvl`*r3|b-w2^^QQwMe>y`ih_6)Gi;^K}?w3q+ z>kJvI&d@JRhDM&r<~CNggysA)=nVM{tiRC?dzn{eS+A?!xd5!ZK()eXM;ONl4!1EX z99GjK6>~7wr6Uxx-A#O#sTLdS2!~K9j&lr)7`2!wmZ-3AFXL-jY_S)aq8e}|jxY&b z1@px!ZE|#wh8l9mNcN;nj8#{`0?C0M0LMxW&?Yu>aJ8azP!%Q~)n^tCGC8<9GY8jZ z=HT0zIrvUy4vbajV0}goz8mCV*Lyj3UQm>NQ-hjUENN7VE%mZ;eG9IORlfN6ZoyI7 zM{1^ET-X{>75pnx!6Rc3-<)4dwuChqt8SWCOw;HpepL#%R1eG7q=1X8(JN6=QT6K5 z=#l8h(Tj%+hFX-u-RLMrSM(AZ$83O?pRo5p*RlSN2`XaoHTsDCFJ#1?Uu;?T9|X=@ zkEh;I&OP&yyGShmK*)-n2!MA^F~ee!gV#-Iz!FDHYD?f4ghTLbP{6jve?b{6+5#LO zznFfu{|5ZLKhj6#3`e)-AWgRb&gOyBYmksDk26hY%15X)V^`8$9%p);k>qivMurh> z!F8Z)9yq<9?xHQ22>RxM(_xG&k29S}vuF#hV|dXP{FZbwwFOThXz;-4x$rj+oW2j* z=7H1aK*Kz6x+fx-2Tn^EW+A_yI5=x}nvJ&LpNwF%1y9nlh^5VUvJPZ0Wf|pU-GQ=e zi`;C}7Tjz*Kkx}&V^{(L&=&lOK1N$GnVB)#f)ylfv;`*zKEZ1YXnkr6ZebzK<4hy5 zqu2KXr_)KmXbbX4+Gq>zqQz(nUS)QSw%{DbG1`I~0}HeTS2B*#79;~7XbZNGKv-K4 zJaGDZ`h>Lw!2_q0m}{dg_$SL_v;}`+U01WNp)DA~bZYq0uV@P*bPJaBpn#zMc^ z0*DFN>TtgU8s>r18Wh4jaC#Zs%>$>Wvs*3G-FXAUl+*0T&O>HgXsfxZ{V59Lind@H z!-%$EJc{Cqw%{d(sb$=8v5AaZNArZ(uV@x+!7fZ!v;{w)S+oUL(Jb16Mw&%ia5eKL z+JXw2MO(n_EAzluCfb76Nm{f85!Q`p3ue+?v;}uCEA6bC0kJsaind@4X^OVs z1g0h0f^+CD+JZdN6m7weNJq2<5r)5*G?&G$rCGEEg$ys+f+X`G+JX<6ZZB;CJ59{; z{tCkSi@z>e1l}C&#)>BP65@DM_+0}mnQ5NNg$`bxLH^8}qwmpu+N*HK!kuy6@fDoTWhD9H6inzg>qj0z6 z&Cv+BNo1>4ir1ByacPS$!ze6ix z;m@yOkUgoY#dW@JnE5AFEiY2-jTC=tT(N(2JGzKn#L2uxNs5PHg`*z;Eusj?)&5u& zMB5_j<;p1xCFe`*sUj8*9d#G@;_`<;OQzR;|j&UXXGUw=##zMLbq%uLzg3(Uh}n1(xFh(Y1!?ut!-> z7cl-K2=R&{{9_Q-)p>!=l$EcNQH%o1aFxu(I+>-a@R#UhcxuSLRL4=}6?4__@r}B? z{O+AD@3(ZYMb^*<;Fm7%dXu$+Dr8N*k2WI7uCHXk5ueg{@jDH6AeFf<%S=+a(g^sW-V03Co`@Vs^T8aTBwSD z&b0IvO#B798=-0w62KM=>o~qAJ+x32KZIs2RK@>`W-V03H!v}I=;}3QPJ}A`(3Lk1 zP9k4$oIt*q0u~m(5V1UY=;|<<<)N#Sku8xg;#bi<K8ASeBtUBFO_`Z>K8ASeBtg*CNx0F7p{KsQpp#te(_St7p|5s;-`VWYaY5{ zw4WeVBVV-6f_&lXhpuWFP|FwbAJH6=FI@fNW&A0+hvW-azjzschVJ{5dY+OmT>avu zk}q8S;-!)=+=CdVFn&1Fb&F{pr{oJ)zj&$S3vJ$8$rsu@S;-gLJWa_Lu72@S$rrAE z@lwebu72@S$rrAE@sjd|t6#jNeBtUBFDYNRY5Bs{FJ4lau@ zyaw&-YWX5QkfrYR&=o~D$QR~(id1zh!V$;|4C;J}a&`E8&EG*}$R6k^wt50w05t0T2>5-YEIR@#PGf2MUW z#`-2=ja0Gt21(vp#@b6_S&0uBP6;{pARI5i+3TmqBuhmmOO-2-L9s=228$@zbEDx+ zQkcSea5|c;VWU7FlkA1?9lji1u6`mY0h$r($l>_4cRd6#at?>_Fw6SjG|PGcfg47E zKqO`#N{D_JLDDBZ_obulPe$;_OYn)Blb+vD9^NW=M1PEgG5xLuEsts!8ua%kX;NyJ zT@hTKjC>hUf|>Mc&~)`l%=p3ZaP>*dcmu+_`jS_?hVJ?#X1ts3GLzm;vz)}tx{ww* ziJ4VS%OWNYCB?&m1xkt+kX7vy%%lv4ne^enCzwgumoSs&FpqK)GiwDiBPTJlULk2^ znSpnr1D{|fg_K7n#UmsjCo!{zqV}~Vm`NE7GieJ6$Vtqs^&~Bqyt3{m0Xd18Wz!-j zF|%%B965=Z^;BTNO!^@SD4(TH*0q5TX3{(okdv6%ysGY+=XYZC2|vFR%%o$OYcrGn zn!(IWdIr;}UW+0?NwI|KZ1+sca;us2co=XJ^D)FWGwDkpD-Z9)?}NKMyc53yX-DMA z$j=z2oJsrf$uw7>4e?~;UjXv(PW(Q)%S<|g9babBPZ*|_amU4nF-#rJ6XHpl<;lop zOjn=8jQ^ZweG)VN5Y74|X8cN;^-0Wl7xSi1V#eEP)+aIJXVR=sV#XJdzB!3`1R|T6 z^cDuvCo$uX(X3Bm#s@NjK8YERvH&uZp1_2I>s_qI$n^-SXVNIgiJ3{?M@Tc1-cGa3 zq_3a~XV-8!-Xzyz2I~#SL$x);T>1s-txFo zclAk6k1KUI^ze?WPkP2b2K`_rB{?;dvUA|1=O0iaGn2m0fcm6o{3y7)`lP4FmAb2M zZ^e(Md+6aESD*BZA5V9E(i7pQT5jm!9ao?9^wd=debO`jBZk)}Jw2|}-O$53+N>Ym z(PsVdjyCIucihm!JFY(I>2am*>XV)xSL$y1;T<>q@Q#~)c*oTzJw2?{U47EiQ!^XV-Fx6r<>KIs|1m^IdGCS}!zXHs3&GLx3WlP5jZb3E9hFF_Zv2laR| z@-zfc=K#|`R_@zK%-)q9$V@Tz`qvSV#|-UVcZWNd^=f7lTO^^T-d)!!KR=Ir#4gk` zTf1ETP&;9!LB!^Zf7POxAEn)$BqDrNNgFR0a@xsoaT*cRY%I(`dS+wc2MFoPF~q5KmyLzrAd=Zwc$Z;hW8q+$ z& zW@BL<-Q^hK2D-~vA5N#)tbR|V#jJiO(PEAvUJ+O@XP2PteSbM^kHDwr#=<4^F{|I> znHgol>i1rfHml$Iz^CWN0_#24Son;=!mD4seSkT85q-?+x1OZU>i5^QnAPtY%#K<8 zu4Npv`n@Z#V9tJ$am?y>Rp5g;`x_(>Ui}6e3+K}(y!s6`7W|{&Q+a-bw&5bfQH#vxE;jJ#=^C5HyaBhkONn~ z`tUP`DTf0#7CxZ6Y%H9L!nm@ra3RCU#)6Han2m*2hLK~4U5qQo5D#H^*;tsxbj`*B z&9br3NwaJ$G}9~_3;U6dY%Ju^EE@|R&2kKJchZ+Nurmgc&BnrH29k}15}IXW;bxj; zW8v>iOg0uK(VVfd;GKq`@?9^E7R=ngK(obOL`YA*`p`kMeDz@=s=(;j-=+JuzWQ)H z=tIXIeD&eW{;t>Mpdab)s}B#OM9{ITuRff|fTCm1gL_}!^(vry=y09+uGhIJ^^Sbk z>sr#$YhX8|V|PP3b~mJBcSAaMH>6{Sd!S>7d!S=S+(5?;ccWu>A?WPvcfC$#Nkzv# zlr^?tPEhjueVMgIob={EDs3*CvA zj-(?w8ptv;Q*?N|FS7^2M=t&~LJgq{ zF?8UWKMDjl(8uGF#5mjQWgTqc!&SQvOk}$QM-Cif=X!&&mUhPB7W~0*!dM<=xdRW# zJ}~>J1d)5nI7mlFh=fx}uc+de8mcYlm^RH6tjaRl%+9R|o!?okUb z1tBTY9-s(D4Z)lcK?EBZiVo|bq4xL!(jOcJeKgciYdoqTcM>v13gZioO0Y1q@~=Kb zg-b+({5g<{@}>p3p>^mUipsD__RNBQ2n+`S$v5n_!Vm6%z; zk0p*w`)h|$(^c}jj6wTst2xpw5DB+TAI%Y}?U<=#96Uj*1(nQ3k({bV30c`RnRPzE zv}ulM(}AWH@S+!6VX$t6A$`@2v_o!YHTKagp_&_-*-CvjkJS0_o^|@w)MKcE(20Fh zt+cb%d+bPhTkY#vl9wT1 zWFxY{OLD<<*u&ZV(B(;bl#q^&FUZK>E>aK)wyR`FtfSLbJxmJI8J<}{y0}|qDnf_Y zO%J4S+xKK={f-}y;^6d5oA$xNGFe`@mC+fp!V`Nt5)b#YbWifaeKMBWt^R`??kntHJ(@W*cd*8Lb}P-)C~Smgat0h} z*c~p$Wb&b1!VV1j|E{(&^%t7c!}C$P$Fk^oTDBV6&+s0WIY(i%_ZGp-Je020e(O}a zH3ipn5C7jQDN%sZg7VIbu6=XQ%<9EdZi1Ocl*%nIoq5DoS|B93vITne`#!t*PB+Pa ziY1vE`p{}qGjmRdjzRe5+G$ei%=(w#X&tn4Z0Zly!_Wc`yY!+k=Hj~fL&tNzRD z=%MA;_N>yrk~$BSmD60$^+meyil4(8YLoQRxz85ty=>OOdL&uUPsM{78L}pZ@T-wq zY1L6-NpKgjM7cuQH9eV!mKQ8mq2YgHjC{45lpCU*9&aJpO*?!wy}&H0eZ8oTn~|8M zSJ&ZHIY!iusZGrI9BjrX*6KYgI5hVD1GD<}4YmKXVy@}MJ5qP@Qg7Pmw8GP=*L`KfJV}tU+~#1c&YGx#_<7e`Gb1 z?!=~2g{@F$8>&<)ctSPRQ~3H~6_?rT{@$3dRdrE$>k2DmZC%qEvWARB4fT!5)i_mB zUAv;Xv29Wv2{koWH%_VqQLAlDb9E~m9m`6#)vu_A(Y36)>hda>u-DaESywH_8iu1& zeQjfTgAUkM-Lj&-i5`fB<9rgLt);%PRy#sx3ffrj53y%35d;i8F8*)ZW6M){?Gd>HL{~ZPG7Et@MjF_hDf;&tL2L z353`LdOAF8scza%_S-vsoRnm+x!$T|C(>>2RMtnli3+dqR>Jvf38yIGmv(-`Z^y=% zqB_a*i~J6!D9<0WIR&p(eu-byo$BoBDyc8_yXG%Z)cjP^FHNQVuH@!Y$3u(FRc*Ky z<=$Ew>Za+x6|EMuL)og9`nGD_TGB2cZrTM#)h@tLQ-+&}4X_`!Cfx#imMT-5=S)Zh zr7P~-)amag9?7oB+9TIX`o)v|PB^Sg&JW^^OLQhX{o<}J73y#Jb^NFC>n`$2{SxQE z1b+4r+H*ZrRfk`iOgeky`R%1WsBD$SWD?pVfmluiHCTlnE z3hk#NTYL2CpJIx1^X%d=MXZgt?iw>cFt)?ozIpzv_RiE6bc>Oyx~}lfR4&SLr`PqM zxUQK$E1Bv{={jxm{4vgygfl*|&YxGhNd;;1QmBk}XMA3YeYDe0igVIW`6cU8SGJ42 z8_^i7yVKbl!E_gILsMd4txKV&?w)`-6uDzvs$@R9vHDA*3#Ym^`(34*JKNhAr?xC+ zXMePN%jB+9O8spaGyf2brS{J54n+l}a8IA4jB`CV-o}hM8~Ed2&R=JrA>z4eW2#7{ z{LnpH{I1TD`7^g9G3Hl-SUW7qR7ZQM3i>w;y;N#($bU>Ns;eCl zof!JrQuHv#I`ND2v%W@QO?^XkSzCEUgLFEpSoPzJc94FUnUl?1coMp%x}_IKXsg0G zMlf9@VtO!`av%LW;0_2$?l2nysXIR0k!O{5phNoms}{M!yBCAEqjQUHK<{r}m%pF* zd>;Y(c9$4i{NqhfcgWnCsZzhFs1x1P*>kXR2R}}w798B=C-A>B2@E(-xua*L`~+N6 z^YgklZ{FC|l_~;rM!()Pb|zX@1^Sz}xk^H>Ds{8w&hj@UF$oyIT0c?bX4AFf$}TlX zJ@CH$6YYNY6u%>xTAb=CE%L|ck+<-EKe?oxU7?F(B3Xo?l}a5u)8CZps`ZQUlPYxw z&poxYldN9pbMo?M!teibFT&Ek$&$w?Q$&xvB$weFr;G zQ4it3YE3rx?mvBW6w{56YS3rUrPyco9g99QI^Ac;@y4`o4)MS-7}d%4qAjT{wd4r4 zyJpcXrSoTZVf@vWcBLk#RQc48k5^pO+>FmCNV(HasWJ1{Bs)`nZAW`&XKJ?;stm2< zw)%fN*^MviOl{b$+Mk^2h9MnUPwI2M5WT>uz0=t@F$ZspM(n-*5ioJyo)5HdxqZ^pg!K-GZK9#~x+fn2uCUtg39Jh6DY4`8XFYWHcWOSu7Em0yfA}a$=%PM)K z8!}vbyBhZX<-cb=+3t!*+@W`t)R#zP2rR1R+QRWl!V&-adlj$c5qI#NB~BD`#9pe> z)_;|iR#{ix(pQ~@>dI8#R_g4YqRcuweXe3eo+_-C+C2ZR`Nf-)5ZUHKD%bxPZzxJS zU(3@n#^J0O?``kqPJavqg$>T0d64Gtf3JF*49CUpAh7tP-=0LzQ(bJ{S6^Fdmfh(d z#_#!td)Ugkvo?2@azffYvAEsu^f3ptC%35X{zQ5dRy8zcde7&`IhcvjgPo_FM|r?YX~JO zV7g;^rK{##1WdE`tOs_gH+`?KI*U0vPy5C2$AiiJ758zJ#Zy>KfAn=JN=(+h?oh^@t?=%bE}5jX=0 zIo93VsDoa7DwB`(5~@tOP{HZy09UGBU0tcGqkK|RlIv$va)eB;$IL+Nu|Dp(X5hDn z+*fS-*ksaO)AmoShu!sOEh1;jo`mJ`{Laqf5?yXq;lbel{7ckETz7e4qI3deijsEz zul_3%;l5D!r>b}T;y#>878IYiS#{K-{Q44i=-hedB|AGH`E({z&bR~wX+~eipAvt0 zX=-z~cJa5+$uHsWN&Go?RWkV~4Q`9SR^e%Px`qCvWU6Gz((d+lzqB24l`}P=e)CG& zJKG^9jUB|GSaPo^S#e9(U1)vS9VOfNdPZyWHu#&dHusnK$*#q|%BrW9mHctv=8va& zyK+?yFKbtuQzsRtbc~#m)@;_ty=rq{xlemP zrP;gA>qexmuA=TYm0gWG73^v6nQp)MHNV}NnQ*h5qipA(M6wG%D{1KLIyu$tZ{FNh z=g*|*V0+9OhPPVD_~%mkusvr=F3?daE`rJRCeG_xyveV{56I&G&aS1Kp=F@PL29Q} z#YF9N`FUEMlAgL=X zURPSQSuZ=^aQ4iH@Ptm*-o6P-)M8b3XR2Z&ZWEdD=92j(DuR~2^`s|~0VOEgJ^gK` zXoR2CR5qgvmS`#yHI)@_yTd?b$tjR9ik%6vSYf@kQG>*Iekt@wN2->Zt3B303j{sY zhAo}`FR%1VRw8dD9UW{PtraQ(cW|tmcdYh%F|tf{9%ff)+{W@1)%9Oo*b4ZS2wr>% zmra2t*lkkr&s1R_@wzz0`yG10j$!5}l3aexRNl~F6d47DpIGyxe<-8^H~XOEx-Ff_ z4Jyc;p0j(NU()#@M*XJlSI`QW_E4kH{OJ)5bq51J>~H9rOb$_}l5(5py16f788&e4 z>>HEopouD_N~5!#(lh30rQqmt^9tR@MH~F$4k!;Wk!~Svm8_bX{exh3sk3msr<60q z>UN}1vc!$gJxsa0jUwn(q%!%no1uQp>)fcgjpswNl~k(@unvTGoZWJvK7^7G8plnW zpnTY@ssoZf)<3E$&hdYS;+CL}j)m^6v%LeqAfW;$$(q)cU@dd3O8jZBs}xER6|TE; zLuvy|Sp9Bbn&@8mDej^#SGuVUo3UW+RD`-a{Y|=@zUq#inqmF7=A~Am2B5MmU2?3S z=u~tyH4*^{MU;WLV%d@ci&5lL?WvWdp4xi6c59_7A0#M2#gk zq*5z&w`iK{CeSVBm-SJ+4UoQ2Mn%n+*;4f_|G>q_h*0qDqua-zYHH|6pyEquVemM`%y(3s)RUcC74>Z^%9}HI1_*DzIw0T~5RAya`JR?r zWJAesG%;+pWb&?7XKdc$_V$es4InJ+nb_!WnZF#Nz)CwX4Sr2E(p+z~La-62Fj4!^ zA)~KDpOV6;;G%mL^pt+rVswd(a7*b#p5~B6w@9%swnL-208F@F(%>(sV-W8|Yhe1M zv~p-dFYw+&A-)7r~;gW-<{fMX=_O~R+jhPW-+Z4YPfzHj6I*X z+}vz?cCr+#7%HpFQ~|E=uHT48>DyJ$nVeEeO0mdB$NZg&1fkjA3|86!UJnM#U65(2 zsH6KTDwZq_)s?brV@`ODEML}3<(1snvmiEZsYg!<=Ol)qdZ^WJ=9P61_^~4&qOIv+YV=J5*nRWY! zrgE#wtEyVcNV%q&6;CPHYO1M$6PK7twNGGGzzcC3m+P&+(~z&SR)nv%l8uz1tE*J@ zKwl+QQ&y=xWR+lw3maz^{5%ofQ>~FA=q>v#?FBx%F5V&ZB5H9 z+3B|0T3bz%R<^2PfOfAW6=hL-jH-9&24$;TMRiRps*4(vRc%F0trHuoSLub*#L1JU zOqtkFUQskzI~3tvji3Rj1=O`vb{fW&8n~*7*gsXXW4y6atW)c2YUwqU%7Xhfw4liXq4m1N0NLT|N2``uvJANk(&ydg;AwU?8SWNl5#GP+fUrRReMX zBc9d7cvm^nG*BTeZOLZjoTFbSvZ}nk%~Cu7VbFSdaHx==zk}?KIpO|0E3YrUm$5hB z4-@=qnO|S*ZTs1oVq=DPku{no*a}nXn;Z4yLW+w9{g~ZVvzgZ39Hw8cg351D%v-l! zU;L#%-jT^RF!uZ87M$$*<`F#^f{dEp13z=jfAK+{F__uyG;fsQoF2bmuC?{xVM>=0 z8op}O%78`Vp}45+Zc>J$6sq%BY84dZ&^JS7XURQganTY<$_-d96K+C zs7dKRG78lWm*z<_Al1}L;UOe;RIg}O6XUjpjSAt4YJ9eWnXVQIg`2izYR*%&swV!v z#&1PgWA$oG+!O@#SPsTONYbcpPGSZP#EtD6*%dl{d_99wL9Lp1b?$nP`3weK-?*~8 zp`HSRo&s7ew7i;0%37*0|2I%*P^?_BRa2duociDz6=lsW)hl%g(;TEiPcngIqKIGx z);|YnEjt~ZQ)yK1WHm$}G#rs@0p7#2n#P?kSSJ~45XQ31;paECM_6;gch(rcJ>;Hpz4$jN6A+gu(hnF zzNHmMc-qRfFk4oSQyN;Z;aG$8RIl4w%Qt3aqxgxG&WKlr@dOiLSin*eqglay)$$3M z{*Ls$jA=>pF5P`h2M?qQ)f1#f0!O`aqYx|$HzQ#Jb$j=gK=kC9Uiax0LvMCw+Ad%( ztjOSWmkiWERFw5&It+58+BGdJDc)wL$-45^I^hyKF=MVQ*Xzz;{oYc&qG@F{7-iE6 zz3AP(CB5dDnycyMp6RUO_8*yOaZ-e5N$Rm!K%+I*a)#}_z9)AG)#mod!~a7wuFMkk zjbPa6iMK+nF?M$PZG>c?P6f7V9Y)5G=rz?sxl$$JQHMJ@$+lKw{g08?WO`Wt^Q|gt zS#vp>uE*5dj~bx0ui2JMYAO|^KKqc5 znJjZ@FZocDyj~CVKgH@f75%@WVR`RGLgv(pmca4~N+va}s&*;YvuoxIs^(U5ahYOt zegdJY-$|6hr|7`8y7Ujpg_<-NR9G9ZqcbZ`z;ey8Lv!g4u2odg)CtP3c-f)^_^L9M zlt`st^?co%o$d_(Y+0o=qx!h1lz`oECs!`V9dpdWvcnEPF~mf7mVNe~?tAgfGOD0< zmRl2%;;Q=234(@(DhfA)%U+rF{;Mx zT(RuzDn-fAB0ps;PcnHXgm7IP)MPW(3S32^Nx44Rt_6u=)R_#@2u8ZSD11oEft~Ay zR=;H;wQpT3!~E4FL;b5v)#_NMU}W1czr>o}q`#w_a|fAbZ`CSB3~Cd<{VH@+9c!Ix zAffiX!^Dc_U<>av{pU11eTkVn%oo47rY0>b?kJnz6lex9+5Grj*{zkyV%3y6Meq%(7AK!t5-Q(Yz#sz33i|eh*fxcnTSSsk03JLY+(- zcANU)Gn%s~&aaifnOx>8((3A^$2K{IS^D>knUjHzpsK?((S&3TG$ns?ppd-=Ybw}w^xghqMM}&+u(g@Q2QR+ip2&B zj;)OB@`i>oHKw+2j0gH>)%(*swmmhW;cb9^M>)!cqXK;_%Q6Q07hi~F4Diq%On7K( znZXD-$SN*Gv(xi~Ch2We)wrUHtfVim0-|-cE(9Q8Gj`&)DhBj5_xH13%7mNSxRWc2 z#-3X>Ut}i#KRx*I`Hcwbr-p6%4{>C?>Z zDU1djvTdlZfbzZ#hbnkPPaSgP6ogN7g->$nMdY?lf~2{StP03x*lYSYcv`LaR(cat zclh+Nklq|hq!6{~6Vwd*bQv>TQO={7y?15x9IA6JbF0c#|9S|u$Eg;bx)m~c7bLB(gv4IoIGUw~Vsq6q{)h#VeEmPH*Ohr*P zZ?>{Qm9Y%#_dptQ!0wcB6vVJS942K^%FC+sFe)#r;CWl-QWXv!)W@l#6p90+PiUL< z(w8VOL1Txnn1b2ku@$zW)!e=9#Yxq|ish1)$W)df3s8*9 z*<7_zT*hz6Z>J6g`|uUmTvlhIO%>wMtU67uMWnu%FN>q6MZ<=}?6z7l@pK=VLcV4W zw{Al?3r%P!*h=sY-TQjUYrWTTUqotS)%Mi9{zrEEIgP2q_kHovzGbx?lF+nd7Lv)( zYt;#&KpC@bZrGC#_U3-F_@cbj2baqj{yTiWUacmzPN6^El_`W_9POa&)eqAN^+_3L zeejZ<(7T{)q5gVLA?`w=R72RP&V_Rtf zw5yS+Y3aI)f^;eN(BiY>aMuU74vahC`DUoA-b8vQs2 zyP{s-*4Q3KkSRa)eV`W8s9v6IZF?GGgPzy>KVYk_K7^PG>s_k=(oz<0MktX3`=@;h zSy+xrW2x0AZv*w@G--*e=Rw?7$}+tfkrIk}Xoj%vle4$#K#=Yqs)XC6GwNR!>q`RD zl2=+P$lTgyJ*jTkuNWprftX3&bqP3ITU~vtZaNB;!8$W6d$AUAf|d1X6wu~$ZjT)% z++3@yvwGhe(tF;$&*g$}%L?Qjcg}Qw)aO#^VgxjDE80UmllfV(90yj7l+xoskrv1} z>=^OO(PXJ4Rla!oqVJnS8Apr4TvoSC|9UNTMyXRtfUTfdxxLrSxdxuzA4nt6v|M-EbkdE_=238ag^JM#NA@6UP=-XzewL3r$-+Xa zyRf*)nX4*^>%W1v4mr{4r@jyJWHPFL1kA5itn5pI+#bfXqr3S#%3*r*k$$DFw4|j} zoZGQOpO&-!hn9xur!|mgj55C0C26xj{Nk%Z^Pon?01xfYi`HHDP<6dq#prz!I=mE2 z%O2>~D8SAL9S|@S1+9n)4_8qwghnll!D`a140~yGv>1(FoTv$p!vBBp^-|uDF{wvL zzO+5HKGZckJ`Ded2H#gX>@tR%s$w}#qTU)vUrz2dd8Xz5{%+&x{@w2#f~{|Jg~yl9 zmR5yrW00AbYPLGqwtbX!ho(KnwELO+LJ!aU@0c2xfEJx{8BV{{ox zX2Qx2yXji;>US0m?NQgX>Z?P-Wj2~hq|@5#B63!EfIc&qB3Tz?K>c^ zMtPfRielR`8oI)}%(fmoy2*(eEco zxax{zE%xhplM-P`v`RVEH`X*+VlJ=1-LREmU#QWLkPeBg;Weu5{HGqSLRfr%T>ay7 zR{P_bD)SF-&Z&PR@f#O2q3uE2nviE%Lt$nZzD$YlV_JKP9j}Y3f6bt^w;>J}^@1gE zcl?Fvt^b*A)xnMQ_+p)*HyviuH}uw@VOh~{s8Iwka;lJhhGiKTuZblD!bg#u z#t}GizHKcSm3A=U_&9Dj-9L?RtP9}Abcf*2l;c*I8OPM~*XwQT4&=}LqaXhm$Fv#! zCVbzvzE6YvGwBjT)oQhkbgV*D+%UMGj6bG37=O%LnBG<6@v*2-zc=*8Bb;$o$_^jYxi74wwK<8@o2aI9TI|Rsh%P`1^-vc@r1n&_sMrNVmox3dS0^%)buPorD zmQ@5Ky=k;xYgxzBj`&a04jwi-8;E$d#B(g`1|mAtLqNuRly<~>mAC?(0)37+mH3!t z%?8?amUTK2;m@W!!rvqA_=K=>&jqqPW5qr}?57Yfu&j2v--LQ3R$103;yx0CneJ1F zaBl%R-?Oa8h={j^c)Mlo1zt@1d?3SD5)u9ux+DBY;y)3Cgy9zv;r=}$;=Lj6OEDl> zj&dOLdj=8Zyo1<==ZZwGJlnD!1lkegOYlj-ZepEfy&(2qiv1O_zauyu zpYCP2;{-XLCQS^p%i0w2K~hzIkn)j-DkI_(IzmI(jL=nnc@ z1P>Yt`^}bBMnw23Ak$ezOj_0@g5Lu&+!I8^e_7n$7W=VaK+YwoZy@Q^(T;S#PelFx zSloXq?y=!;NB!3l5pNBU@y??CYRl>-BHpXw{)V{kg|84X-f_eg7`Mb5@U1$aU29pl z(%xlR571t2S<08x!OMv#-&H`CFGV|e!n1;#1m6<;o1l%khv60yLGQl= z9}>KJ7tpK6I0G`={<~^CR`5h1>*-?Rw^47S;g5Wr1Y|x=p&jumX@3mmBer9%r8~lX zlXirAgot{5i-`K)zfgy3Bf|afM7U2LqumbyGX9aYBYq7L;m#8OTgCoQBI0H5hVW>I zyNKoBn}Y9&`};)XbBmxgR@+ArQ7=aVSF)62FQHgPdn0ik9OquecF-Vk7%z$Irh|e7?AN#5lj-%KhGti z{jVh=o!7%l)K0dKdge-UB7rbydACZ2_MoDBSiW$gxJIx_?(PtkM-PX$IS>v5oSzh!ME zqCIcf2MD^Gft+tXC01daPJ{ccmUS-?;Vz%9!`%pExQB@d_nz247yE*J5$<%%$NK@7 zTh_6}q-C8(e8{ra0hzz=8~{Z5Hvn0G#~ujm#5e@fKldPwqXqXCED=0W@auvX30^Ju zfZ!8?2Nr|=so*0(rh5hLNcTA+^11S0o!%XSj|=`@aPOJgzX{0t@Mi(9vaI1m)ZZRN zl=BecBj5*z0ztQo2>)S+>2yZ|*}gB+j&g1m+(LK6|5)t957++l1y=%{Q!t;2{XW5; z(fv-#dPnTm5!&tn?K_YUBGMTu_Fct(f#6kw*9$%;_^#k*f|nkt^LG!i&9Zi%0|cL% zOI!iIe3Z7IDR>!>>0TxH-*iW~=jZBhp8+}kMwMt>MMU^Z1%Dwpcpk$4(6Yt=>A#oY zsQKD{kYJ^dwb(Bq!v6*!^ZgJJ`TjfcO7OK4b-bSmej+&ZB)C^& zeL+lG)`38VzfJ5v5PXw}^xhZyUW>GSUn1g_6OsOnK-R-g#Qi1Ok)QX7$WKlw!Zo6O zflTLo+7bVL!B2=tC%Ra>k0By|GsJ#2ko3Mu1iinCdvu8oUnF>-;E_boTMT4+4~YBQ zf_pC2{?m!b$FW4DS10z1flTjuBGP+??iX0rpT$4xWF4=Vi2k%t>`7vWWnC%u7{)a7 zF&xNzG}4arE+-<~jbeX8@K1st6A^Dt84&dAfUMsYv|o$zh&@I7jh6KbvHx1^e-ryZ zXh-^j6p{^k=wAKzk7c%9(wf}4m4_m`l0e2kop!jNEB5ngzZ&a(BGP$I+hi(vI-Yi~W~ke}{Mp zo-9>Mzs9}*nk>2QMu^91t+M+p`RjuV_<+%2S!bY=+76GRr2`9TqxKqc!A&s!CwgeNw6@g>C6yZAXq1O zj^H(d&j`LN7(x4}b`e}C*dTa~;4cLKBIw6-yh6blg7XBI3APDdB6ySFF9iQ0==)M1 zg4BaDU#kVL5WH3Jalu~+M&c4*Q0Yq%f05Xm1=k6#7rbBaX~EY7KNcLErRggDD(Ec} z`#pls2)-@&v0z@djyFT_Ou=ge?-6`M@H4^u0g|5JJi%tcs{|hsd`<9U!Ere{{w%?T zf>#LMDfouqXM!^Z>Uc{9+XOEWd|uERq{HP4P8O^Z#4uHQ3v^G*J`a3~hAw_ByejCH4!%ex2BF75fjx{K*hT<|?|U3SwGN_HzX<6~q*) z+;0|qQt)SjFA8oFd`s{H!OsLov%E<6K*2eJ3k8=6HVCd3TqoEesOlMX?hyM!f-egG zN$?XvkM)W03Biei2M8_{EEjAPJVWpT!EXxQAgK1SKzF0qUl#m};J*a3!1tN{aKRG< zxvxd{6@qI7&lBtr{I1|_f*7{Q5x`wJc+c%0xV zf@(hv@mGp{t>8BWIZu)Poq`VuJ}LOT;D>@IU>;)l7D2V&2Kz-~zd`U3!9NJzgn_|$ z_Xutg{9G^_^9uck3yu{m5y)B=}pwKMH;4RAb6@^ z8xi5##oi&fLGX6*e^~5K3BD}&hWLLV_J0XxgLg6g5rX50NM|3hpDfrQxKjMj6Zy@M^)E1n(96 zq2R9s|0ejk-~h-0%uj*fK7y1Z=)PF6R0-(M}jWo3eq1e zxQpNt!CJvq!LtP~7Q9;UM!~xUQ-V(kz9jft!9NQAL(ql%!h8%894R#|8f)csm3I z#(O~U6G1l@?&zn7M~V9a!BYgQ1y2=RC8+k#kst1#vs||b-XZv);C~A~C-|!1 zJAzvTKNrl-)AWW5juk8tJW%jx!6kyVg025gU3UVfQ`!G<{EV??Uy6_>*_SLM6cSM+ z`@Uq%a*r9an$={h5Ji@xjjS!QL`Ak9DTERt3PUMnFG`kD{@>rZK6gCxdj9A2s`vf9 z&bgLz&UMZV?)yGC7AND&_y)d*8}SSL39n-@{o-f)cRSX=2eC5_#SDB3r{Zi}jH~fe z+>NI&^fuRTDZB&g;9wkvS@<+g#n?n?VLXAq<8>@rp7VisV*_k~k6=%Xzy!?3 zaX1ZU%tMU*bVCPQTZXuVRrqT|X5~-RHx|)v-3#H+6q+LT-T_u^aZrD2&Hc%tZhF zESk@A$cu3mZo-}TEgr}7cnu4Ox&0`IVOS5FV>|4IgD?&=@F{#AU&S}^J^T-Tk7vyf z^!L`Lj_2Q$=ex^|uOQxHhUo8eO&!T%4 z_jnesVE(FZ{H3rm*2bpT7Q5g8jKwq@i&OAbdAv}Q>G30JHo=R8?+hSK7gz=b# z<8V5@j!SS09>p_w1q)Pj{ddIP7>P-kgA;HDzK-wUYWxJh#Dn+~UckSxNOd=kTk$Te zkN*3gbe%m+?tz1G7-r$KI13lxa$JX7@hd!nr|=I9so}qIy{OG)O7t0#G#mulW`I5!{=+cdaq(G{$Pf9-gR=3+AcRXb(~w0)5$sH zmE;e}-;;kPht_fRi|<&_0_3^4#4Moqk&`!&_mB_c33I6Doh4r}BlY`peOXNZ z4s0gs@2AaM^!GB9x4_o;kg0KWGK+d%H_FrT3497C;Y;{BF2ohM3OC_S{1%VndAx>& z@6k9k{&EH5gQ++gpTn2& z4SWwb;urWW{)WXGy8ds+8W@h*I1Z=bYo0@{04u-U-2(2)X4Q;7VpHm*bE=S zt~e0mFaw{&DfkM$fopIx?#9D-0)NNrShTSlXL-CE8(<531bboxCSW#>!)dq-*Wwo3 zgSmJTFQOOj##Ib&$7p3OFC2sZ`$|=B z9{Dpf`=B~dQ*akbBZ|ePwba#e~iU+d>&uJRrm?+!ozqH|G<1LT)!o;GB(9-_&5&3Y}|m`a36k$ zXYewHwxmC-gf%f7TciK}WgVBk$xrE9kDMC#%N5%Y#fF2a0#x# z&A1y6;|cs7y|!+g#jzsR#5On(<1iDS#yR*7ZpJ-$1W)5-%>R(y zuATCxwht$F#YD_v{R`xG@eAC~`s?J%9bLOMOtssMoP^nwFCcHk?UesUuK1{{-`Ldg zZb|M(&cGQsoAvw1zha3_u6{)`zy5xZ+|ay5e;y*Yz}EPXsquF*i|Y3R%KPI`OvZG4 z5+~wRoQWUe2Hb}G@H;$%mofA)jYG$wBv!(j7>=#66As1%%*Jsz4QJ!qxC%ePU3eJ( zz>=Naxctv$6!W~=< zc)pA4@iW|uNAWaX!hBs_{SsIaYhYu103XFZ7=*J}$$xxCQrME}q1T==FBvE`}AbJ~qbI*a`b$G^XH4oP@K` z|2&b7&kFJm{1MON-*`(OH?C^f2s>dv3}70L#VPnIzJ(v)mv{m%Vn|=tZwY)1`(X^G z;wYSiFXDV$hHG&P?!jCn*7N5r%rrLYe)O}$-#rI%#Fp3rd*KjF#1S|ir{f%4jH_@H?!<5LIG)FASR~So?^e7E>*Iac z9{XVqj>qXZ2N&ZiJc##2x&HcK6ei;{I2U)}q-a;~Mf?VjnIWEcp8O9Mk8#_VH?_V7 z`7!K6d4N0xU!Z&ic_VJ2{22KXdI8t|9j4BAO>#T(qvSYp8hJE%B6%TsC2qu>coKgz zwLc-TuD^zOzp3($!TH2G;qzd4+i)-bXx^gl4=RB=Xd~rz+doBEST-aSq7_M9c+qiF#;1X8(+kExD?mmX55VzvDXOK z|8N|Q&*B1Hho^8+j;prxKbvD)%Da;zFbPNDGp6bD8=UjPH^S&~MVKpw@*J3fx_n2Ar}RGf{AaW(G7Q+NqO z$Gh>A!aCRtyW?O?z!5kBU%+{|4Afg#gef5q{3td5Pa z6?Vkl7>P-kgA;HD&c!A8A%2Rx@DQHEE0}*e=LIWcE$ocT@pC+YKj5EOW`=98EndUI zFSzo~*aHWdnzs|lGsyGF@8W-O8|x2{f5KlWuQ}88(-hlcPgB=VfAV0A!dO$|NH%r- zWKuo~pTimW5-!3exB~a$5j>5T(7vqu;4y=RCupM^C!8ih6zF2yyt z8F%AhJc$?4d)bY%7*@b)*bLiZ7aV}Gn1(OoWi0oKYd;L@VLKdzQ}E$e-S$0j7JiI7 zOwHSn*W7k@U`y;^=GXVek^AE?Q`bW(ITLemw5fI{n7SUGqkK88!VUN-?!j*`7f<0Y z_$L;et@d>tl))-k2b*GB?1BR@7SnJH&cM021V6-2aTgxK6L=9r=D6{dz*^WAyW${> z$8k6vm*5)Qf?wfLJcC!T!0Q|ztcMR{PaJ|t_#XZTci?_JhUf4q7MSb$D~)$xZM+xT zU}x-)0UVB_@mZXO3-MiCkDuXQJc<|a8Wx`C##s)-upV~D_iz^;!k_UUyluW~?_u;7 zxLgdoVsA4<@1G?v!}lrQO%7e?>K8FX^zWABaC``RnYs=KkRvb}hnlLNV(L1~pnMGF zdp)?%cGD8-Y3FWQLj7;Ax=|47Kf&eZ zT#QD7o_BA*Da-062Piu8}{#|VSUH>L~cFKk8wUzC=TB=Li zzM1@0xjwnAtgLfUh1^wEDX-^Q=up}A1C>3Uqq90xmLn}|(XCvmkf*;+_Zn(2zerm@ zN(L9}Uw^#$cd@KrkG%Xktge0$Pq!D(zEdxl7b~~XxektZjq*{Q^UKoO|6K0ZIp0b? zB45+Fk0YOw!NvN!pwRU08~b}rIa)bPT6=}GpY~bSV1KtNpRT6wmt=p#l!J@4S5LXP z4xXl~U*Db^Q%PAv_H(=cvHi*h|Gm9^rYpF8S8ablxdZk4DpzT!_s5b4D<>=KGVxG85SKdG!AYyS45lq)t;ALM70!}Qwzv-3AyIk*J(Z$RV!9&em-aJ;kg zY;XHtz3Gkh3zb_bf1^h2_%6w_{d>x}&GdW$*4yzc(fme#Hoq$?YfAa`t^LNz!TvWW zKdP)L>#yIY+(+521M6>>^01roe&sRBb|u^TT;<8iouuW{^1yxicP`eSSHAUreXkko z|CV31&>SHb*8MHG1drE&M{bPY#(P}30`1v&uPFz|Tk?O@|L(CH^~-DhIpqb^uc|z? z^NsmkOZk#=Gil=wm-V~pdL_4#-Fm1E#@k-m-jg_%_PQz;jLK%wSXyu6eMLDU{YGAxXM1h-?_%Rws`Yi7 z==-BJ-ZHBHp>muqhTYoA@+M{bE`zG9|3X=}18+I&_bc1UxBE+JuZZ`(ax>-fY=2t0 zP*uG@jC{$qXDKB^bst!tr2S`oapm5+DZVGIfBRlLYumM7$g8I8FY3ekYp9&>4t>wN z3T^w=!S%}4eh1}`bbfB5{VvL3D&MIFOMAav@1JM;DCK{2{O)D@1m){>G=DU1Yd=eQ zg66l~FDyT$yhE>Z$y1cO=py@_`m>a$>W9Q|@;v3>V&k*#-D_N0KlfSxu5ym9-^aDi z+Fz@@pp1?Q>+O4ApVwII{$uO+DhC&9FE>vP@+6_vy5>wWp;8p;dR#vy(3w?a!Ba^3gomz6bJrBmIoiwzfaNDaYz~Mw9MZOtA(Gt=tVirXI1fYU*#jQH`YhnhAg(f!<27V+ZlRo?PV&zsbdw)_FTE( zV%yJ9zN9}JXqWu$=jU0!Sozc2HQ!mkLAiQ={f^4`y_D2I@;%Ys&_G5+Y8J`i6k{sb4I-8ghoxsb?l$fv zU--SQao30*FB^#PpVzGR-4k>5!hb+)VtjfAMG@BXzumjd)JjrHRzMFtO-YIvo*Bpt zq-&t*fi&wXBPCcAs|Nx{P$NAvHISy}{lWUd_2ga#_s%8%0JxV?{`N6}ELG(gMdf4! zywptpc=@mG>9-MXleFxJjEtNSp3~4HS&gKCPXeZfM;Mc?hbq|M)M_9ygCnezlBq9$k4{O= zQG03e$wO5XXODf2NYtBBQsYzYY$xjhvhh;KDk(laJw7GbONz{hj?=hwDD@Os4K^|+ z_{w^XiBI$NUxZ)N3nZmx>?-O$UL*q{{&mNZRKZx1WgK0HcQzM54{K8ECIpWD_oOK-vZJC%J2qXk& zQ+%>!(|N-M?u~dSW1ustd*o z?wyxpCmHy9c*_k zS>5Qkq?8y>^N+!01=8YUbM$cEK&0m`OgqbdBYJ*sg8#ywBYqvfXO4eLOu%z9|HkpQ z8-*8}n3Adqd$!n5}$4C2} zXS&0js_P-c4oGseUC6pH0=mD&#HS|&cQqy@!Y;rpclg|pbS>*jbGHSXw>M^CvcE(A z+>CUs`e#X}I3q1uZxtLC9~&F5dzQaL93FSP{k`@p1~1#lH{hD_Bl?Ml(v$==^q_uRsH*J oY)V>0LLetK%`O6)1=c>7WOigiAVR0?rh&Pu(p@e|2^yvMfA<-mj{pDw literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/fs/inode.c b/linux-0.11-lab/0/linux/fs/inode.c new file mode 100644 index 0000000..9bb10b3 --- /dev/null +++ b/linux-0.11-lab/0/linux/fs/inode.c @@ -0,0 +1,340 @@ +/* + * linux/fs/inode.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include + +#include +#include +#include +#include + +struct m_inode inode_table[NR_INODE]={{0,},}; + +static void read_inode(struct m_inode * inode); +static void write_inode(struct m_inode * inode); + +static inline void wait_on_inode(struct m_inode * inode) +{ + cli(); + while (inode->i_lock) + sleep_on(&inode->i_wait); + sti(); +} + +static inline void lock_inode(struct m_inode * inode) +{ + cli(); + while (inode->i_lock) + sleep_on(&inode->i_wait); + inode->i_lock=1; + sti(); +} + +static inline void unlock_inode(struct m_inode * inode) +{ + inode->i_lock=0; + wake_up(&inode->i_wait); +} + +void invalidate_inodes(int dev) +{ + int i; + struct m_inode * inode; + + inode = 0+inode_table; + for(i=0 ; ii_dev == dev) { + if (inode->i_count) + printk("inode in use on removed disk\n\r"); + inode->i_dev = inode->i_dirt = 0; + } + } +} + +void sync_inodes(void) +{ + int i; + struct m_inode * inode; + + inode = 0+inode_table; + for(i=0 ; ii_dirt && !inode->i_pipe) + write_inode(inode); + } +} + +static int _bmap(struct m_inode * inode,int block,int create) +{ + struct buffer_head * bh; + int i; + + if (block<0) + panic("_bmap: block<0"); + if (block >= 7+512+512*512) + panic("_bmap: block>big"); + if (block<7) { + if (create && !inode->i_zone[block]) + if (inode->i_zone[block]=new_block(inode->i_dev)) { + inode->i_ctime=CURRENT_TIME; + inode->i_dirt=1; + } + return inode->i_zone[block]; + } + block -= 7; + if (block<512) { + if (create && !inode->i_zone[7]) + if (inode->i_zone[7]=new_block(inode->i_dev)) { + inode->i_dirt=1; + inode->i_ctime=CURRENT_TIME; + } + if (!inode->i_zone[7]) + return 0; + if (!(bh = bread(inode->i_dev,inode->i_zone[7]))) + return 0; + i = ((unsigned short *) (bh->b_data))[block]; + if (create && !i) + if (i=new_block(inode->i_dev)) { + ((unsigned short *) (bh->b_data))[block]=i; + bh->b_dirt=1; + } + brelse(bh); + return i; + } + block -= 512; + if (create && !inode->i_zone[8]) + if (inode->i_zone[8]=new_block(inode->i_dev)) { + inode->i_dirt=1; + inode->i_ctime=CURRENT_TIME; + } + if (!inode->i_zone[8]) + return 0; + if (!(bh=bread(inode->i_dev,inode->i_zone[8]))) + return 0; + i = ((unsigned short *)bh->b_data)[block>>9]; + if (create && !i) + if (i=new_block(inode->i_dev)) { + ((unsigned short *) (bh->b_data))[block>>9]=i; + bh->b_dirt=1; + } + brelse(bh); + if (!i) + return 0; + if (!(bh=bread(inode->i_dev,i))) + return 0; + i = ((unsigned short *)bh->b_data)[block&511]; + if (create && !i) + if (i=new_block(inode->i_dev)) { + ((unsigned short *) (bh->b_data))[block&511]=i; + bh->b_dirt=1; + } + brelse(bh); + return i; +} + +int bmap(struct m_inode * inode,int block) +{ + return _bmap(inode,block,0); +} + +int create_block(struct m_inode * inode, int block) +{ + return _bmap(inode,block,1); +} + +void iput(struct m_inode * inode) +{ + if (!inode) + return; + wait_on_inode(inode); + if (!inode->i_count) + panic("iput: trying to free free inode"); + if (inode->i_pipe) { + wake_up(&inode->i_wait); + if (--inode->i_count) + return; + free_page(inode->i_size); + inode->i_count=0; + inode->i_dirt=0; + inode->i_pipe=0; + return; + } + if (!inode->i_dev) { + inode->i_count--; + return; + } + if (S_ISBLK(inode->i_mode)) { + sync_dev(inode->i_zone[0]); + wait_on_inode(inode); + } +repeat: + if (inode->i_count>1) { + inode->i_count--; + return; + } + if (!inode->i_nlinks) { + truncate(inode); + free_inode(inode); + return; + } + if (inode->i_dirt) { + write_inode(inode); /* we can sleep - so do again */ + wait_on_inode(inode); + goto repeat; + } + inode->i_count--; + return; +} + +struct m_inode * get_empty_inode(void) +{ + struct m_inode * inode; + static struct m_inode * last_inode = inode_table; + int i; + + do { + inode = NULL; + for (i = NR_INODE; i ; i--) { + if (++last_inode >= inode_table + NR_INODE) + last_inode = inode_table; + if (!last_inode->i_count) { + inode = last_inode; + if (!inode->i_dirt && !inode->i_lock) + break; + } + } + if (!inode) { + for (i=0 ; ii_dirt) { + write_inode(inode); + wait_on_inode(inode); + } + } while (inode->i_count); + memset(inode,0,sizeof(*inode)); + inode->i_count = 1; + return inode; +} + +struct m_inode * get_pipe_inode(void) +{ + struct m_inode * inode; + + if (!(inode = get_empty_inode())) + return NULL; + if (!(inode->i_size=get_free_page())) { + inode->i_count = 0; + return NULL; + } + inode->i_count = 2; /* sum of readers/writers */ + PIPE_HEAD(*inode) = PIPE_TAIL(*inode) = 0; + inode->i_pipe = 1; + return inode; +} + +struct m_inode * iget(int dev,int nr) +{ + struct m_inode * inode, * empty; + + if (!dev) + panic("iget with dev==0"); + empty = get_empty_inode(); + inode = inode_table; + while (inode < NR_INODE+inode_table) { + if (inode->i_dev != dev || inode->i_num != nr) { + inode++; + continue; + } + wait_on_inode(inode); + if (inode->i_dev != dev || inode->i_num != nr) { + inode = inode_table; + continue; + } + inode->i_count++; + if (inode->i_mount) { + int i; + + for (i = 0 ; i= NR_SUPER) { + printk("Mounted inode hasn't got sb\n"); + if (empty) + iput(empty); + return inode; + } + iput(inode); + dev = super_block[i].s_dev; + nr = ROOT_INO; + inode = inode_table; + continue; + } + if (empty) + iput(empty); + return inode; + } + if (!empty) + return (NULL); + inode=empty; + inode->i_dev = dev; + inode->i_num = nr; + read_inode(inode); + return inode; +} + +static void read_inode(struct m_inode * inode) +{ + struct super_block * sb; + struct buffer_head * bh; + int block; + + lock_inode(inode); + if (!(sb=get_super(inode->i_dev))) + panic("trying to read inode without dev"); + block = 2 + sb->s_imap_blocks + sb->s_zmap_blocks + + (inode->i_num-1)/INODES_PER_BLOCK; + if (!(bh=bread(inode->i_dev,block))) + panic("unable to read i-node block"); + __asm__ volatile ("cld"); /* by wyj */ + *(struct d_inode *)inode = + ((struct d_inode *)bh->b_data) + [(inode->i_num-1)%INODES_PER_BLOCK]; + brelse(bh); + unlock_inode(inode); +} + +static void write_inode(struct m_inode * inode) +{ + struct super_block * sb; + struct buffer_head * bh; + int block; + + lock_inode(inode); + if (!inode->i_dirt || !inode->i_dev) { + unlock_inode(inode); + return; + } + if (!(sb=get_super(inode->i_dev))) + panic("trying to write inode without device"); + block = 2 + sb->s_imap_blocks + sb->s_zmap_blocks + + (inode->i_num-1)/INODES_PER_BLOCK; + if (!(bh=bread(inode->i_dev,block))) + panic("unable to read i-node block"); + __asm__ volatile ("cld"); /* by wyj */ + ((struct d_inode *)bh->b_data) + [(inode->i_num-1)%INODES_PER_BLOCK] = + *(struct d_inode *)inode; + bh->b_dirt=1; + inode->i_dirt=0; + brelse(bh); + unlock_inode(inode); +} diff --git a/linux-0.11-lab/0/linux/fs/inode.o b/linux-0.11-lab/0/linux/fs/inode.o new file mode 100644 index 0000000000000000000000000000000000000000..dd67bfa4d43e1073c47e0226043fc43f5f0e9153 GIT binary patch literal 14072 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 I1a}MmH>)TywEzGB literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/fs/ioctl.c b/linux-0.11-lab/0/linux/fs/ioctl.c new file mode 100644 index 0000000..36fc976 --- /dev/null +++ b/linux-0.11-lab/0/linux/fs/ioctl.c @@ -0,0 +1,46 @@ +/* + * linux/fs/ioctl.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include +#include + +#include + +extern int tty_ioctl(int dev, int cmd, int arg); + +typedef int (*ioctl_ptr)(int dev,int cmd,int arg); + +#define NRDEVS ((sizeof (ioctl_table))/(sizeof (ioctl_ptr))) + +static ioctl_ptr ioctl_table[]={ + NULL, /* nodev */ + NULL, /* /dev/mem */ + NULL, /* /dev/fd */ + NULL, /* /dev/hd */ + tty_ioctl, /* /dev/ttyx */ + tty_ioctl, /* /dev/tty */ + NULL, /* /dev/lp */ + NULL}; /* named pipes */ + + +int sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + struct file * filp; + int dev,mode; + + if (fd >= NR_OPEN || !(filp = current->filp[fd])) + return -EBADF; + mode=filp->f_inode->i_mode; + if (!S_ISCHR(mode) && !S_ISBLK(mode)) + return -EINVAL; + dev = filp->f_inode->i_zone[0]; + if (MAJOR(dev) >= NRDEVS) + return -ENODEV; + if (!ioctl_table[MAJOR(dev)]) + return -ENOTTY; + return ioctl_table[MAJOR(dev)](dev,cmd,arg); +} diff --git a/linux-0.11-lab/0/linux/fs/ioctl.o b/linux-0.11-lab/0/linux/fs/ioctl.o new file mode 100644 index 0000000000000000000000000000000000000000..1f1f33c5568ad7f154251149e1ecc40766da48c1 GIT binary patch literal 5828 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 +#include +#include + +#include +#include +#include +#include +#include + +#define ACC_MODE(x) ("\004\002\006\377"[(x)&O_ACCMODE]) + +/* + * comment out this line if you want names > NAME_LEN chars to be + * truncated. Else they will be disallowed. + */ +/* #define NO_TRUNCATE */ + +#define MAY_EXEC 1 +#define MAY_WRITE 2 +#define MAY_READ 4 + +/* + * permission() + * + * is used to check for read/write/execute permissions on a file. + * I don't know if we should look at just the euid or both euid and + * uid, but that should be easily changed. + */ +static int permission(struct m_inode * inode,int mask) +{ + int mode = inode->i_mode; + +/* special case: not even root can read/write a deleted file */ + if (inode->i_dev && !inode->i_nlinks) + return 0; + else if (current->euid==inode->i_uid) + mode >>= 6; + else if (current->egid==inode->i_gid) + mode >>= 3; + if (((mode & mask & 0007) == mask) || suser()) + return 1; + return 0; +} + +/* + * ok, we cannot use strncmp, as the name is not in our data space. + * Thus we'll have to use match. No big problem. Match also makes + * some sanity tests. + * + * NOTE! unlike strncmp, match returns 1 for success, 0 for failure. + */ +static int match(int len,const char * name,struct dir_entry * de) +{ + register int same __asm__("ax"); + + if (!de || !de->inode || len > NAME_LEN) + return 0; + if (len < NAME_LEN && de->name[len]) + return 0; + __asm__("cld\n\t" + "fs ; repe ; cmpsb\n\t" + "setz %%al" + :"=a" (same) + :"0" (0),"S" ((long) name),"D" ((long) de->name),"c" (len) + ); + return same; +} + +/* + * find_entry() + * + * finds an entry in the specified directory with the wanted name. It + * returns the cache buffer in which the entry was found, and the entry + * itself (as a parameter - res_dir). It does NOT read the inode of the + * entry - you'll have to do that yourself if you want to. + * + * This also takes care of the few special cases due to '..'-traversal + * over a pseudo-root and a mount point. + */ +static struct buffer_head * find_entry(struct m_inode ** dir, + const char * name, int namelen, struct dir_entry ** res_dir) +{ + int entries; + int block,i; + struct buffer_head * bh; + struct dir_entry * de; + struct super_block * sb; + +#ifdef NO_TRUNCATE + if (namelen > NAME_LEN) + return NULL; +#else + if (namelen > NAME_LEN) + namelen = NAME_LEN; +#endif + entries = (*dir)->i_size / (sizeof (struct dir_entry)); + *res_dir = NULL; + if (!namelen) + return NULL; +/* check for '..', as we might have to do some "magic" for it */ + if (namelen==2 && get_fs_byte(name)=='.' && get_fs_byte(name+1)=='.') { +/* '..' in a pseudo-root results in a faked '.' (just change namelen) */ + if ((*dir) == current->root) + namelen=1; + else if ((*dir)->i_num == ROOT_INO) { +/* '..' over a mount-point results in 'dir' being exchanged for the mounted + directory-inode. NOTE! We set mounted, so that we can iput the new dir */ + sb=get_super((*dir)->i_dev); + if (sb->s_imount) { + iput(*dir); + (*dir)=sb->s_imount; + (*dir)->i_count++; + } + } + } + if (!(block = (*dir)->i_zone[0])) + return NULL; + if (!(bh = bread((*dir)->i_dev,block))) + return NULL; + i = 0; + de = (struct dir_entry *) bh->b_data; + while (i < entries) { + if ((char *)de >= BLOCK_SIZE+bh->b_data) { + brelse(bh); + bh = NULL; + if (!(block = bmap(*dir,i/DIR_ENTRIES_PER_BLOCK)) || + !(bh = bread((*dir)->i_dev,block))) { + i += DIR_ENTRIES_PER_BLOCK; + continue; + } + de = (struct dir_entry *) bh->b_data; + } + if (match(namelen,name,de)) { + *res_dir = de; + return bh; + } + de++; + i++; + } + brelse(bh); + return NULL; +} + +/* + * add_entry() + * + * adds a file entry to the specified directory, using the same + * semantics as find_entry(). It returns NULL if it failed. + * + * NOTE!! The inode part of 'de' is left at 0 - which means you + * may not sleep between calling this and putting something into + * the entry, as someone else might have used it while you slept. + */ +static struct buffer_head * add_entry(struct m_inode * dir, + const char * name, int namelen, struct dir_entry ** res_dir) +{ + int block,i; + struct buffer_head * bh; + struct dir_entry * de; + + *res_dir = NULL; +#ifdef NO_TRUNCATE + if (namelen > NAME_LEN) + return NULL; +#else + if (namelen > NAME_LEN) + namelen = NAME_LEN; +#endif + if (!namelen) + return NULL; + if (!(block = dir->i_zone[0])) + return NULL; + if (!(bh = bread(dir->i_dev,block))) + return NULL; + i = 0; + de = (struct dir_entry *) bh->b_data; + while (1) { + if ((char *)de >= BLOCK_SIZE+bh->b_data) { + brelse(bh); + bh = NULL; + block = create_block(dir,i/DIR_ENTRIES_PER_BLOCK); + if (!block) + return NULL; + if (!(bh = bread(dir->i_dev,block))) { + i += DIR_ENTRIES_PER_BLOCK; + continue; + } + de = (struct dir_entry *) bh->b_data; + } + if (i*sizeof(struct dir_entry) >= dir->i_size) { + de->inode=0; + dir->i_size = (i+1)*sizeof(struct dir_entry); + dir->i_dirt = 1; + dir->i_ctime = CURRENT_TIME; + } + if (!de->inode) { + dir->i_mtime = CURRENT_TIME; + for (i=0; i < NAME_LEN ; i++) + de->name[i]=(ib_dirt = 1; + *res_dir = de; + return bh; + } + de++; + i++; + } + brelse(bh); + return NULL; +} + +/* + * get_dir() + * + * Getdir traverses the pathname until it hits the topmost directory. + * It returns NULL on failure. + */ +static struct m_inode * get_dir(const char * pathname) +{ + char c; + const char * thisname; + struct m_inode * inode; + struct buffer_head * bh; + int namelen,inr,idev; + struct dir_entry * de; + + if (!current->root || !current->root->i_count) + panic("No root inode"); + if (!current->pwd || !current->pwd->i_count) + panic("No cwd inode"); + if ((c=get_fs_byte(pathname))=='/') { + inode = current->root; + pathname++; + } else if (c) + inode = current->pwd; + else + return NULL; /* empty name is bad */ + inode->i_count++; + while (1) { + thisname = pathname; + if (!S_ISDIR(inode->i_mode) || !permission(inode,MAY_EXEC)) { + iput(inode); + return NULL; + } + for(namelen=0;(c=get_fs_byte(pathname++))&&(c!='/');namelen++) + /* nothing */ ; + if (!c) + return inode; + if (!(bh = find_entry(&inode,thisname,namelen,&de))) { + iput(inode); + return NULL; + } + inr = de->inode; + idev = inode->i_dev; + brelse(bh); + iput(inode); + if (!(inode = iget(idev,inr))) + return NULL; + } +} + +/* + * dir_namei() + * + * dir_namei() returns the inode of the directory of the + * specified name, and the name within that directory. + */ +static struct m_inode * dir_namei(const char * pathname, + int * namelen, const char ** name) +{ + char c; + const char * basename; + struct m_inode * dir; + + if (!(dir = get_dir(pathname))) + return NULL; + basename = pathname; + while (c=get_fs_byte(pathname++)) + if (c=='/') + basename=pathname; + *namelen = pathname-basename-1; + *name = basename; + return dir; +} + +/* + * namei() + * + * is used by most simple commands to get the inode of a specified name. + * Open, link etc use their own routines, but this is enough for things + * like 'chmod' etc. + */ +struct m_inode * namei(const char * pathname) +{ + const char * basename; + int inr,dev,namelen; + struct m_inode * dir; + struct buffer_head * bh; + struct dir_entry * de; + + if (!(dir = dir_namei(pathname,&namelen,&basename))) + return NULL; + if (!namelen) /* special case: '/usr/' etc */ + return dir; + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + iput(dir); + return NULL; + } + inr = de->inode; + dev = dir->i_dev; + brelse(bh); + iput(dir); + dir=iget(dev,inr); + if (dir) { + dir->i_atime=CURRENT_TIME; + dir->i_dirt=1; + } + return dir; +} + +/* + * open_namei() + * + * namei for open - this is in fact almost the whole open-routine. + */ +int open_namei(const char * pathname, int flag, int mode, + struct m_inode ** res_inode) +{ + const char * basename; + int inr,dev,namelen; + struct m_inode * dir, *inode; + struct buffer_head * bh; + struct dir_entry * de; + + if ((flag & O_TRUNC) && !(flag & O_ACCMODE)) + flag |= O_WRONLY; + mode &= 0777 & ~current->umask; + mode |= I_REGULAR; + if (!(dir = dir_namei(pathname,&namelen,&basename))) + return -ENOENT; + if (!namelen) { /* special case: '/usr/' etc */ + if (!(flag & (O_ACCMODE|O_CREAT|O_TRUNC))) { + *res_inode=dir; + return 0; + } + iput(dir); + return -EISDIR; + } + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + if (!(flag & O_CREAT)) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EACCES; + } + inode = new_inode(dir->i_dev); + if (!inode) { + iput(dir); + return -ENOSPC; + } + inode->i_uid = current->euid; + inode->i_mode = mode; + inode->i_dirt = 1; + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + inode->i_nlinks--; + iput(inode); + iput(dir); + return -ENOSPC; + } + de->inode = inode->i_num; + bh->b_dirt = 1; + brelse(bh); + iput(dir); + *res_inode = inode; + return 0; + } + inr = de->inode; + dev = dir->i_dev; + brelse(bh); + iput(dir); + if (flag & O_EXCL) + return -EEXIST; + if (!(inode=iget(dev,inr))) + return -EACCES; + if ((S_ISDIR(inode->i_mode) && (flag & O_ACCMODE)) || + !permission(inode,ACC_MODE(flag))) { + iput(inode); + return -EPERM; + } + inode->i_atime = CURRENT_TIME; + if (flag & O_TRUNC) + truncate(inode); + *res_inode = inode; + return 0; +} + +int sys_mknod(const char * filename, int mode, int dev) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh; + struct dir_entry * de; + + if (!suser()) + return -EPERM; + if (!(dir = dir_namei(filename,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (bh) { + brelse(bh); + iput(dir); + return -EEXIST; + } + inode = new_inode(dir->i_dev); + if (!inode) { + iput(dir); + return -ENOSPC; + } + inode->i_mode = mode; + if (S_ISBLK(mode) || S_ISCHR(mode)) + inode->i_zone[0] = dev; + inode->i_mtime = inode->i_atime = CURRENT_TIME; + inode->i_dirt = 1; + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + iput(dir); + inode->i_nlinks=0; + iput(inode); + return -ENOSPC; + } + de->inode = inode->i_num; + bh->b_dirt = 1; + iput(dir); + iput(inode); + brelse(bh); + return 0; +} + +int sys_mkdir(const char * pathname, int mode) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh, *dir_block; + struct dir_entry * de; + + if (!suser()) + return -EPERM; + if (!(dir = dir_namei(pathname,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (bh) { + brelse(bh); + iput(dir); + return -EEXIST; + } + inode = new_inode(dir->i_dev); + if (!inode) { + iput(dir); + return -ENOSPC; + } + inode->i_size = 32; + inode->i_dirt = 1; + inode->i_mtime = inode->i_atime = CURRENT_TIME; + if (!(inode->i_zone[0]=new_block(inode->i_dev))) { + iput(dir); + inode->i_nlinks--; + iput(inode); + return -ENOSPC; + } + inode->i_dirt = 1; + if (!(dir_block=bread(inode->i_dev,inode->i_zone[0]))) { + iput(dir); + free_block(inode->i_dev,inode->i_zone[0]); + inode->i_nlinks--; + iput(inode); + return -ERROR; + } + de = (struct dir_entry *) dir_block->b_data; + de->inode=inode->i_num; + strcpy(de->name,"."); + de++; + de->inode = dir->i_num; + strcpy(de->name,".."); + inode->i_nlinks = 2; + dir_block->b_dirt = 1; + brelse(dir_block); + inode->i_mode = I_DIRECTORY | (mode & 0777 & ~current->umask); + inode->i_dirt = 1; + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + iput(dir); + free_block(inode->i_dev,inode->i_zone[0]); + inode->i_nlinks=0; + iput(inode); + return -ENOSPC; + } + de->inode = inode->i_num; + bh->b_dirt = 1; + dir->i_nlinks++; + dir->i_dirt = 1; + iput(dir); + iput(inode); + brelse(bh); + return 0; +} + +/* + * routine to check that the specified directory is empty (for rmdir) + */ +static int empty_dir(struct m_inode * inode) +{ + int nr,block; + int len; + struct buffer_head * bh; + struct dir_entry * de; + + len = inode->i_size / sizeof (struct dir_entry); + if (len<2 || !inode->i_zone[0] || + !(bh=bread(inode->i_dev,inode->i_zone[0]))) { + printk("warning - bad directory on dev %04x\n",inode->i_dev); + return 0; + } + de = (struct dir_entry *) bh->b_data; + if (de[0].inode != inode->i_num || !de[1].inode || + strcmp(".",de[0].name) || strcmp("..",de[1].name)) { + printk("warning - bad directory on dev %04x\n",inode->i_dev); + return 0; + } + nr = 2; + de += 2; + while (nr= (void *) (bh->b_data+BLOCK_SIZE)) { + brelse(bh); + block=bmap(inode,nr/DIR_ENTRIES_PER_BLOCK); + if (!block) { + nr += DIR_ENTRIES_PER_BLOCK; + continue; + } + if (!(bh=bread(inode->i_dev,block))) + return 0; + de = (struct dir_entry *) bh->b_data; + } + if (de->inode) { + brelse(bh); + return 0; + } + de++; + nr++; + } + brelse(bh); + return 1; +} + +int sys_rmdir(const char * name) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh; + struct dir_entry * de; + + if (!suser()) + return -EPERM; + if (!(dir = dir_namei(name,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + iput(dir); + return -ENOENT; + } + if (!(inode = iget(dir->i_dev, de->inode))) { + iput(dir); + brelse(bh); + return -EPERM; + } + if ((dir->i_mode & S_ISVTX) && current->euid && + inode->i_uid != current->euid) { + iput(dir); + iput(inode); + brelse(bh); + return -EPERM; + } + if (inode->i_dev != dir->i_dev || inode->i_count>1) { + iput(dir); + iput(inode); + brelse(bh); + return -EPERM; + } + if (inode == dir) { /* we may not delete ".", but "../dir" is ok */ + iput(inode); + iput(dir); + brelse(bh); + return -EPERM; + } + if (!S_ISDIR(inode->i_mode)) { + iput(inode); + iput(dir); + brelse(bh); + return -ENOTDIR; + } + if (!empty_dir(inode)) { + iput(inode); + iput(dir); + brelse(bh); + return -ENOTEMPTY; + } + if (inode->i_nlinks != 2) + printk("empty directory has nlink!=2 (%d)",inode->i_nlinks); + de->inode = 0; + bh->b_dirt = 1; + brelse(bh); + inode->i_nlinks=0; + inode->i_dirt=1; + dir->i_nlinks--; + dir->i_ctime = dir->i_mtime = CURRENT_TIME; + dir->i_dirt=1; + iput(dir); + iput(inode); + return 0; +} + +int sys_unlink(const char * name) +{ + const char * basename; + int namelen; + struct m_inode * dir, * inode; + struct buffer_head * bh; + struct dir_entry * de; + + if (!(dir = dir_namei(name,&namelen,&basename))) + return -ENOENT; + if (!namelen) { + iput(dir); + return -ENOENT; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + return -EPERM; + } + bh = find_entry(&dir,basename,namelen,&de); + if (!bh) { + iput(dir); + return -ENOENT; + } + if (!(inode = iget(dir->i_dev, de->inode))) { + iput(dir); + brelse(bh); + return -ENOENT; + } + if ((dir->i_mode & S_ISVTX) && !suser() && + current->euid != inode->i_uid && + current->euid != dir->i_uid) { + iput(dir); + iput(inode); + brelse(bh); + return -EPERM; + } + if (S_ISDIR(inode->i_mode)) { + iput(inode); + iput(dir); + brelse(bh); + return -EPERM; + } + if (!inode->i_nlinks) { + printk("Deleting nonexistent file (%04x:%d), %d\n", + inode->i_dev,inode->i_num,inode->i_nlinks); + inode->i_nlinks=1; + } + de->inode = 0; + bh->b_dirt = 1; + brelse(bh); + inode->i_nlinks--; + inode->i_dirt = 1; + inode->i_ctime = CURRENT_TIME; + iput(inode); + iput(dir); + return 0; +} + +int sys_symlink() +{ + return -ENOSYS; +} + +int sys_link(const char * oldname, const char * newname) +{ + struct dir_entry * de; + struct m_inode * oldinode, * dir; + struct buffer_head * bh; + const char * basename; + int namelen; + + oldinode=namei(oldname); + if (!oldinode) + return -ENOENT; + if (S_ISDIR(oldinode->i_mode)) { + iput(oldinode); + return -EPERM; + } + dir = dir_namei(newname,&namelen,&basename); + if (!dir) { + iput(oldinode); + return -EACCES; + } + if (!namelen) { + iput(oldinode); + iput(dir); + return -EPERM; + } + if (dir->i_dev != oldinode->i_dev) { + iput(dir); + iput(oldinode); + return -EXDEV; + } + if (!permission(dir,MAY_WRITE)) { + iput(dir); + iput(oldinode); + return -EACCES; + } + bh = find_entry(&dir,basename,namelen,&de); + if (bh) { + brelse(bh); + iput(dir); + iput(oldinode); + return -EEXIST; + } + bh = add_entry(dir,basename,namelen,&de); + if (!bh) { + iput(dir); + iput(oldinode); + return -ENOSPC; + } + de->inode = oldinode->i_num; + bh->b_dirt = 1; + brelse(bh); + iput(dir); + oldinode->i_nlinks++; + oldinode->i_ctime = CURRENT_TIME; + oldinode->i_dirt = 1; + iput(oldinode); + return 0; +} diff --git a/linux-0.11-lab/0/linux/fs/namei.o b/linux-0.11-lab/0/linux/fs/namei.o new file mode 100644 index 0000000000000000000000000000000000000000..0514463113d5878e35d040844344865d47c7032e GIT binary patch literal 20756 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 a@7aEaV1r +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +int sys_ustat(int dev, struct ustat * ubuf) +{ + return -ENOSYS; +} + +int sys_utime(char * filename, struct utimbuf * times) +{ + struct m_inode * inode; + long actime,modtime; + + if (!(inode=namei(filename))) + return -ENOENT; + if (times) { + actime = get_fs_long((unsigned long *) ×->actime); + modtime = get_fs_long((unsigned long *) ×->modtime); + } else + actime = modtime = CURRENT_TIME; + inode->i_atime = actime; + inode->i_mtime = modtime; + inode->i_dirt = 1; + iput(inode); + return 0; +} + +/* + * XXX should we use the real or effective uid? BSD uses the real uid, + * so as to make this call useful to setuid programs. + */ +int sys_access(const char * filename,int mode) +{ + struct m_inode * inode; + int res, i_mode; + + mode &= 0007; + if (!(inode=namei(filename))) + return -EACCES; + i_mode = res = inode->i_mode & 0777; + iput(inode); + if (current->uid == inode->i_uid) + res >>= 6; + else if (current->gid == inode->i_gid) + res >>= 6; + if ((res & 0007 & mode) == mode) + return 0; + /* + * XXX we are doing this test last because we really should be + * swapping the effective with the real user id (temporarily), + * and then calling suser() routine. If we do call the + * suser() routine, it needs to be called last. + */ + if ((!current->uid) && + (!(mode & 1) || (i_mode & 0111))) + return 0; + return -EACCES; +} + +int sys_chdir(const char * filename) +{ + struct m_inode * inode; + + if (!(inode = namei(filename))) + return -ENOENT; + if (!S_ISDIR(inode->i_mode)) { + iput(inode); + return -ENOTDIR; + } + iput(current->pwd); + current->pwd = inode; + return (0); +} + +int sys_chroot(const char * filename) +{ + struct m_inode * inode; + + if (!(inode=namei(filename))) + return -ENOENT; + if (!S_ISDIR(inode->i_mode)) { + iput(inode); + return -ENOTDIR; + } + iput(current->root); + current->root = inode; + return (0); +} + +int sys_chmod(const char * filename,int mode) +{ + struct m_inode * inode; + + if (!(inode=namei(filename))) + return -ENOENT; + if ((current->euid != inode->i_uid) && !suser()) { + iput(inode); + return -EACCES; + } + inode->i_mode = (mode & 07777) | (inode->i_mode & ~07777); + inode->i_dirt = 1; + iput(inode); + return 0; +} + +int sys_chown(const char * filename,int uid,int gid) +{ + struct m_inode * inode; + + if (!(inode=namei(filename))) + return -ENOENT; + if (!suser()) { + iput(inode); + return -EACCES; + } + inode->i_uid=uid; + inode->i_gid=gid; + inode->i_dirt=1; + iput(inode); + return 0; +} + +int sys_open(const char * filename,int flag,int mode) +{ + struct m_inode * inode; + struct file * f; + int i,fd; + + mode &= 0777 & ~current->umask; + for(fd=0 ; fdfilp[fd]) + break; + if (fd>=NR_OPEN) + return -EINVAL; + current->close_on_exec &= ~(1<f_count) break; + if (i>=NR_FILE) + return -EINVAL; + (current->filp[fd]=f)->f_count++; + if ((i=open_namei(filename,flag,mode,&inode))<0) { + current->filp[fd]=NULL; + f->f_count=0; + return i; + } +/* ttys are somewhat special (ttyxx major==4, tty major==5) */ + if (S_ISCHR(inode->i_mode)) + if (MAJOR(inode->i_zone[0])==4) { + if (current->leader && current->tty<0) { + current->tty = MINOR(inode->i_zone[0]); + tty_table[current->tty].pgrp = current->pgrp; + } + } else if (MAJOR(inode->i_zone[0])==5) + if (current->tty<0) { + iput(inode); + current->filp[fd]=NULL; + f->f_count=0; + return -EPERM; + } +/* Likewise with block-devices: check for floppy_change */ + if (S_ISBLK(inode->i_mode)) + check_disk_change(inode->i_zone[0]); + f->f_mode = inode->i_mode; + f->f_flags = flag; + f->f_count = 1; + f->f_inode = inode; + f->f_pos = 0; + return (fd); +} + +int sys_creat(const char * pathname, int mode) +{ + return sys_open(pathname, O_CREAT | O_TRUNC, mode); +} + +int sys_close(unsigned int fd) +{ + struct file * filp; + + if (fd >= NR_OPEN) + return -EINVAL; + current->close_on_exec &= ~(1<filp[fd])) + return -EINVAL; + current->filp[fd] = NULL; + if (filp->f_count == 0) + panic("Close: file count is 0"); + if (--filp->f_count) + return (0); + iput(filp->f_inode); + return (0); +} diff --git a/linux-0.11-lab/0/linux/fs/open.o b/linux-0.11-lab/0/linux/fs/open.o new file mode 100644 index 0000000000000000000000000000000000000000..aceb4b8d44365ee59ea3c9bb01413542e9cf0177 GIT binary patch literal 11184 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/fs/pipe.c b/linux-0.11-lab/0/linux/fs/pipe.c new file mode 100644 index 0000000..dfc4480 --- /dev/null +++ b/linux-0.11-lab/0/linux/fs/pipe.c @@ -0,0 +1,111 @@ +/* + * linux/fs/pipe.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +#include +#include /* for get_free_page */ +#include + +int read_pipe(struct m_inode * inode, char * buf, int count) +{ + int chars, size, read = 0; + + while (count>0) { + while (!(size=PIPE_SIZE(*inode))) { + wake_up(&inode->i_wait); + if (inode->i_count != 2) /* are there any writers? */ + return read; + sleep_on(&inode->i_wait); + } + chars = PAGE_SIZE-PIPE_TAIL(*inode); + if (chars > count) + chars = count; + if (chars > size) + chars = size; + count -= chars; + read += chars; + size = PIPE_TAIL(*inode); + PIPE_TAIL(*inode) += chars; + PIPE_TAIL(*inode) &= (PAGE_SIZE-1); + while (chars-->0) + put_fs_byte(((char *)inode->i_size)[size++],buf++); + } + wake_up(&inode->i_wait); + return read; +} + +int write_pipe(struct m_inode * inode, char * buf, int count) +{ + int chars, size, written = 0; + + while (count>0) { + while (!(size=(PAGE_SIZE-1)-PIPE_SIZE(*inode))) { + wake_up(&inode->i_wait); + if (inode->i_count != 2) { /* no readers */ + current->signal |= (1<<(SIGPIPE-1)); + return written?written:-1; + } + sleep_on(&inode->i_wait); + } + chars = PAGE_SIZE-PIPE_HEAD(*inode); + if (chars > count) + chars = count; + if (chars > size) + chars = size; + count -= chars; + written += chars; + size = PIPE_HEAD(*inode); + PIPE_HEAD(*inode) += chars; + PIPE_HEAD(*inode) &= (PAGE_SIZE-1); + while (chars-->0) + ((char *)inode->i_size)[size++]=get_fs_byte(buf++); + } + wake_up(&inode->i_wait); + return written; +} + +int sys_pipe(unsigned long * fildes) +{ + struct m_inode * inode; + struct file * f[2]; + int fd[2]; + int i,j; + + j=0; + for(i=0;j<2 && if_count++; + if (j==1) + f[0]->f_count=0; + if (j<2) + return -1; + j=0; + for(i=0;j<2 && ifilp[i]) { + current->filp[ fd[j]=i ] = f[j]; + j++; + } + if (j==1) + current->filp[fd[0]]=NULL; + if (j<2) { + f[0]->f_count=f[1]->f_count=0; + return -1; + } + if (!(inode=get_pipe_inode())) { + current->filp[fd[0]] = + current->filp[fd[1]] = NULL; + f[0]->f_count = f[1]->f_count = 0; + return -1; + } + f[0]->f_inode = f[1]->f_inode = inode; + f[0]->f_pos = f[1]->f_pos = 0; + f[0]->f_mode = 1; /* read */ + f[1]->f_mode = 2; /* write */ + put_fs_long(fd[0],0+fildes); + put_fs_long(fd[1],1+fildes); + return 0; +} diff --git a/linux-0.11-lab/0/linux/fs/pipe.o b/linux-0.11-lab/0/linux/fs/pipe.o new file mode 100644 index 0000000000000000000000000000000000000000..d5b5db26c38f6881a408d3b6291aeb9d28c67659 GIT binary patch literal 8104 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 Jg} +#include +#include + +#include +#include +#include + +extern int rw_char(int rw,int dev, char * buf, int count, off_t * pos); +extern int read_pipe(struct m_inode * inode, char * buf, int count); +extern int write_pipe(struct m_inode * inode, char * buf, int count); +extern int block_read(int dev, off_t * pos, char * buf, int count); +extern int block_write(int dev, off_t * pos, char * buf, int count); +extern int file_read(struct m_inode * inode, struct file * filp, + char * buf, int count); +extern int file_write(struct m_inode * inode, struct file * filp, + char * buf, int count); + +int sys_lseek(unsigned int fd,off_t offset, int origin) +{ + struct file * file; + int tmp; + + if (fd >= NR_OPEN || !(file=current->filp[fd]) || !(file->f_inode) + || !IS_SEEKABLE(MAJOR(file->f_inode->i_dev))) + return -EBADF; + if (file->f_inode->i_pipe) + return -ESPIPE; + switch (origin) { + case 0: + if (offset<0) return -EINVAL; + file->f_pos=offset; + break; + case 1: + if (file->f_pos+offset<0) return -EINVAL; + file->f_pos += offset; + break; + case 2: + if ((tmp=file->f_inode->i_size+offset) < 0) + return -EINVAL; + file->f_pos = tmp; + break; + default: + return -EINVAL; + } + return file->f_pos; +} + +int sys_read(unsigned int fd,char * buf,int count) +{ + struct file * file; + struct m_inode * inode; + + if (fd>=NR_OPEN || count<0 || !(file=current->filp[fd])) + return -EINVAL; + if (!count) + return 0; + verify_area(buf,count); + inode = file->f_inode; + if (inode->i_pipe) + return (file->f_mode&1)?read_pipe(inode,buf,count):-EIO; + if (S_ISCHR(inode->i_mode)) + return rw_char(READ,inode->i_zone[0],buf,count,&file->f_pos); + if (S_ISBLK(inode->i_mode)) + return block_read(inode->i_zone[0],&file->f_pos,buf,count); + if (S_ISDIR(inode->i_mode) || S_ISREG(inode->i_mode)) { + if (count+file->f_pos > inode->i_size) + count = inode->i_size - file->f_pos; + if (count<=0) + return 0; + return file_read(inode,file,buf,count); + } + printk("(Read)inode->i_mode=%06o\n\r",inode->i_mode); + return -EINVAL; +} + +int sys_write(unsigned int fd,char * buf,int count) +{ + struct file * file; + struct m_inode * inode; + + if (fd>=NR_OPEN || count <0 || !(file=current->filp[fd])) + return -EINVAL; + if (!count) + return 0; + inode=file->f_inode; + if (inode->i_pipe) + return (file->f_mode&2)?write_pipe(inode,buf,count):-EIO; + if (S_ISCHR(inode->i_mode)) + return rw_char(WRITE,inode->i_zone[0],buf,count,&file->f_pos); + if (S_ISBLK(inode->i_mode)) + return block_write(inode->i_zone[0],&file->f_pos,buf,count); + if (S_ISREG(inode->i_mode)) + return file_write(inode,file,buf,count); + printk("(Write)inode->i_mode=%06o\n\r",inode->i_mode); + return -EINVAL; +} diff --git a/linux-0.11-lab/0/linux/fs/read_write.o b/linux-0.11-lab/0/linux/fs/read_write.o new file mode 100644 index 0000000000000000000000000000000000000000..998aad95c9e243e4bfcae9647b34d9235f717844 GIT binary patch literal 7520 zcmbVQYiu0Xb-wf1;mmSLQCvzEBRN?cD{Ezw%cVq1v`kvGMN5?Yh^&V#Id)e2nB}gu zukOx@q+v9+7!{=nR}lg_n!NhJNvN*AKtHNnh1&}46z~!@%^Y@GbSM+Hi&+) z_;%mobMb-b+=o9$?eekszzdgui_HAQ(sVq6%82lGEQ2mj+2<~K+Z0`%8Y+DCs$GC; zV2x_=J>yLH^>=UFxN+@EjO6>iI5qb1OJ4Z(A5i~kU%zGXJdej%Du+ZXEIWMdE6BC9h62MA z*FFygV$Ps-_G5ajP3=Mn;$%Hxqn(z}dF12FaS1v7nUqezq2$`NXa9Tx3EU5_B zL$CjYX`J?3NG#KDtN2$TCPhq$*1Zh&l1x{kusqd^+NERhKFsb6Fan$gvIpkZ%{V(N zJ9h0yU~pX(?-b(gl<{Vm{vh7}iuG{ZTvFY;_QjjTnG(X=ur~Pf2%cx~W!c#o?aC5o zF|j;l-gEiPMoHx)B4Ls3mzS=f%QG^`AM27yzCH~b=81h{o|vy84vfA_LB5zxe^jjM z9J8Fe#WyB?t|@!ilpGHtFFl zG?T&>J^VrFd?BWHXB(%L5ZA*9sf2{yT`%Q@agw2j^l+UuQb_6H?=qSc#`N%HTNp>8+rvEJx4)o5!!}`*qrI4X_Fzhoh5X`%-#!?RyM(FD@9{_~zL|4j2;x%w9$JMc&t58@?@;k{*%Ok&w+_nm(x-f>wBUT}Y`5z|l zvkJAEFp}g0;LwkdZ*m?(d?Us1TSSB^E*H5tq9XJNM)WtvPHuhY01d}zA)MbPznk2& zn$46jc9Gl8%hc~Ck3c^vjB)Zl=ZnmvPvfOOI$1JyrID2V74n6o3`2_SOVcbtX1z+$7$fuzf z#y-*+i|LvseHgtI#)G7Xtvu*{(qmQu^Z@AzYZi2d^eId3xr5}VoD`nMA@aP#H>UB> zLFBV2B0s`pbC1f@en><{!TD3E?lQRpBN@0H2(-Fb|3^riHYk?`YIr1RpZPrM`wMyK zx$5)_BKi)}r44df>KDxDH>E@${enHf<*sdJOZtWR4PK=#v@L#}CpJ#PNZU=3q2H0= zLwI$`@Viy`{%orNt0fg4pnTfl@A1Qz2WHvW9_|(WLQ!n|1Byo(J`5F43+*%cApFr) z;g7BgFMZnKkFN^H=1fZEM%|d~h12YwZX1EEo#gGu) z9YG*QH0@xN!Fz5K2csjf@7D7k2pa5;4Px7%5bKlL-a$Xmw!wo@j$&%lryh`& z{h@Zp^i4uUA*v2g92i?AZh)vp!P<>Ci~Fm7+*?*W_YO{=6F38qIQ)<(`Q#(Gu8<$X z9O~jMn5O-tw+B!8iN~2uCPzxuT)CBZN6MvYYhH9HnhVViQHTaERp~iipOQI-EkaHf z1;R9QMOV>6(^q*5b(a+VYL;fJnKC$*6Q)o0)ELyJaNE%=&(af7$?T+MPhR}?Mf-MD z(RwxISM*ygdopETgyKx=k+xqvda-rUo_zIHY4t-qb^9B58Yiri_Cxx;Q9O34*oQ3p zA^U=TvenY>7_b*lu8Hz9W26}9jwrlz6S>RPTDb8wy-dSP(njZDr>XG>lsQy0i-nt2qZbQK9d-2};arHU(B^0_LwP87g;d-OyxjC=aK!2L9dm2!Y<3!}$)RmrfIcCol zrke6DakVbaq-CWDdWXrC|B6De`0AbV3 zI&vghRW21bucG^jE~U|1-O>dyJwbU2k99UU%bvLh*9F@l#|I|sR9rXghZux<(^B%33bI~Q|P$2|hd zI=WPCRRjhAP>qn_(w-a3FZ#M!xarHmwlsj9X z9E{rcG6Zg*9mQzx!l0frx>Af)nPNQ7^hz-V7E4Dl1SY$q7&4 + +int sys_select() +{ + return -ENOSYS; +} + diff --git a/linux-0.11-lab/0/linux/fs/select.o b/linux-0.11-lab/0/linux/fs/select.o new file mode 100644 index 0000000000000000000000000000000000000000..d61f73a39bf58c107d845f3825c695fe69663502 GIT binary patch literal 1776 zcma)7&ubG=5T2J!Yc*|X8^x9irr?h%?k3TorD`oLDvI>~7iJXeveV zCY}@#J&1bs?8UqPfKX4Kdi3hqL;YsoPO~}bz`U9HX5P%3>16x#`kfm}DH2j-P~Rf@ zl+m7QEas>{P2kmV>r<>uh}!akeCds_eOT8?M2Wg)X97y zXXIz{6KZmJ{3ubzqHEJeej#@`cdNkQ($w4KX(HnU<#LNTV+09~f%U6&dCo2MSm&o^ z=r~TL{^ZAS#{HoyMWNGi>XB9FIHI9A%~auDMj@)y@?EFobsJI14^7W`RO+<7ZqF=R zm5SN1Yo)RVO3jdNuC5hVidAdgsuoSx4(hF|?F;i4q1QW&qPbBto4(tQ%w}M_j=AZh zUncKQJrYawEG&Ru~0ZwnU4Z zUPM;Ij%>1OVMtcsbgYI`>u#*Ky`~RWtlPC(;57dvg*F;I@kis zL)RAOsi&aRIIZ<~a{8_RbIu@$_g4DiB@mtO%TCWGy1^hwHd9;uxYGc5+5Qz*MvUa< z9Gq{Nm4w8{zmS6hLcYY~mLMmkQ0ApQ$Ac%gz;MoiD`Am=g*R7#1j7tNTI!1mRP(~3C{b&IOkWGJ +#include + +#include +#include +#include +#include + +static void cp_stat(struct m_inode * inode, struct stat * statbuf) +{ + struct stat tmp; + int i; + + verify_area(statbuf,sizeof (* statbuf)); + tmp.st_dev = inode->i_dev; + tmp.st_ino = inode->i_num; + tmp.st_mode = inode->i_mode; + tmp.st_nlink = inode->i_nlinks; + tmp.st_uid = inode->i_uid; + tmp.st_gid = inode->i_gid; + tmp.st_rdev = inode->i_zone[0]; + tmp.st_size = inode->i_size; + tmp.st_atime = inode->i_atime; + tmp.st_mtime = inode->i_mtime; + tmp.st_ctime = inode->i_ctime; + for (i=0 ; i= NR_OPEN || !(f=current->filp[fd]) || !(inode=f->f_inode)) + return -EBADF; + cp_stat(inode,statbuf); + return 0; +} + +int sys_readlink() +{ + return -ENOSYS; +} diff --git a/linux-0.11-lab/0/linux/fs/stat.o b/linux-0.11-lab/0/linux/fs/stat.o new file mode 100644 index 0000000000000000000000000000000000000000..fdb41d331a01a0b46c2a069b24d4be4631d5abd0 GIT binary patch literal 7212 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 +#include +#include +#include + +#include +#include + +int sync_dev(int dev); +void wait_for_keypress(void); + +/* set_bit uses setb, as gas doesn't recognize setc */ +#define set_bit(bitnr,addr) ({ \ +register int __res __asm__("ax"); \ +__asm__("bt %2,%3;setb %%al":"=a" (__res):"a" (0),"r" (bitnr),"m" (*(addr))); \ +__res; }) + +struct super_block super_block[NR_SUPER]; +/* this is initialized in init/main.c */ +int ROOT_DEV = 0; + +static void lock_super(struct super_block * sb) +{ + cli(); + while (sb->s_lock) + sleep_on(&(sb->s_wait)); + sb->s_lock = 1; + sti(); +} + +static void free_super(struct super_block * sb) +{ + cli(); + sb->s_lock = 0; + wake_up(&(sb->s_wait)); + sti(); +} + +static void wait_on_super(struct super_block * sb) +{ + cli(); + while (sb->s_lock) + sleep_on(&(sb->s_wait)); + sti(); +} + +struct super_block * get_super(int dev) +{ + struct super_block * s; + + if (!dev) + return NULL; + s = 0+super_block; + while (s < NR_SUPER+super_block) + if (s->s_dev == dev) { + wait_on_super(s); + if (s->s_dev == dev) + return s; + s = 0+super_block; + } else + s++; + return NULL; +} + +void put_super(int dev) +{ + struct super_block * sb; +/* struct m_inode * inode; */ + int i; + + if (dev == ROOT_DEV) { + printk("root diskette changed: prepare for armageddon\n\r"); + return; + } + if (!(sb = get_super(dev))) + return; + if (sb->s_imount) { + printk("Mounted disk changed - tssk, tssk\n\r"); + return; + } + lock_super(sb); + sb->s_dev = 0; + for(i=0;is_imap[i]); + for(i=0;is_zmap[i]); + free_super(sb); + return; +} + +static struct super_block * read_super(int dev) +{ + struct super_block * s; + struct buffer_head * bh; + int i,block; + + if (!dev) + return NULL; + check_disk_change(dev); + if (s = get_super(dev)) + return s; + for (s = 0+super_block ;; s++) { + if (s >= NR_SUPER+super_block) + return NULL; + if (!s->s_dev) + break; + } + s->s_dev = dev; + s->s_isup = NULL; + s->s_imount = NULL; + s->s_time = 0; + s->s_rd_only = 0; + s->s_dirt = 0; + lock_super(s); + if (!(bh = bread(dev,1))) { + s->s_dev=0; + free_super(s); + return NULL; + } + __asm__ volatile ("cld"); /* by wyj */ + *((struct d_super_block *) s) = + *((struct d_super_block *) bh->b_data); + brelse(bh); + if (s->s_magic != SUPER_MAGIC) { + s->s_dev = 0; + free_super(s); + return NULL; + } + for (i=0;is_imap[i] = NULL; + for (i=0;is_zmap[i] = NULL; + block=2; + for (i=0 ; i < s->s_imap_blocks ; i++) + if (s->s_imap[i]=bread(dev,block)) + block++; + else + break; + for (i=0 ; i < s->s_zmap_blocks ; i++) + if (s->s_zmap[i]=bread(dev,block)) + block++; + else + break; + if (block != 2+s->s_imap_blocks+s->s_zmap_blocks) { + for(i=0;is_imap[i]); + for(i=0;is_zmap[i]); + s->s_dev=0; + free_super(s); + return NULL; + } + s->s_imap[0]->b_data[0] |= 1; + s->s_zmap[0]->b_data[0] |= 1; + free_super(s); + return s; +} + +int sys_umount(char * dev_name) +{ + struct m_inode * inode; + struct super_block * sb; + int dev; + + if (!(inode=namei(dev_name))) + return -ENOENT; + dev = inode->i_zone[0]; + if (!S_ISBLK(inode->i_mode)) { + iput(inode); + return -ENOTBLK; + } + iput(inode); + if (dev==ROOT_DEV) + return -EBUSY; + if (!(sb=get_super(dev)) || !(sb->s_imount)) + return -ENOENT; + if (!sb->s_imount->i_mount) + printk("Mounted inode has i_mount=0\n"); + for (inode=inode_table+0 ; inodei_dev==dev && inode->i_count) + return -EBUSY; + sb->s_imount->i_mount=0; + iput(sb->s_imount); + sb->s_imount = NULL; + iput(sb->s_isup); + sb->s_isup = NULL; + put_super(dev); + sync_dev(dev); + return 0; +} + +int sys_mount(char * dev_name, char * dir_name, int rw_flag) +{ + struct m_inode * dev_i, * dir_i; + struct super_block * sb; + int dev; + + if (!(dev_i=namei(dev_name))) + return -ENOENT; + dev = dev_i->i_zone[0]; + if (!S_ISBLK(dev_i->i_mode)) { + iput(dev_i); + return -EPERM; + } + iput(dev_i); + if (!(dir_i=namei(dir_name))) + return -ENOENT; + if (dir_i->i_count != 1 || dir_i->i_num == ROOT_INO) { + iput(dir_i); + return -EBUSY; + } + if (!S_ISDIR(dir_i->i_mode)) { + iput(dir_i); + return -EPERM; + } + if (!(sb=read_super(dev))) { + iput(dir_i); + return -EBUSY; + } + if (sb->s_imount) { + iput(dir_i); + return -EBUSY; + } + if (dir_i->i_mount) { + iput(dir_i); + return -EPERM; + } + sb->s_imount=dir_i; + dir_i->i_mount=1; + dir_i->i_dirt=1; /* NOTE! we don't iput(dir_i) */ + return 0; /* we do that in umount */ +} + +void mount_root(void) +{ + int i,free; + struct super_block * p; + struct m_inode * mi; + + if (32 != sizeof (struct d_inode)) + panic("bad i-node size"); + for(i=0;is_dev = 0; + p->s_lock = 0; + p->s_wait = NULL; + } + if (!(p=read_super(ROOT_DEV))) + panic("Unable to mount root"); + if (!(mi=iget(ROOT_DEV,ROOT_INO))) + panic("Unable to read root i-node"); + mi->i_count += 3 ; /* NOTE! it is logically used 4 times, not 1 */ + p->s_isup = p->s_imount = mi; + current->pwd = mi; + current->root = mi; + free=0; + i=p->s_nzones; + while (-- i >= 0) + if (!set_bit(i&8191,p->s_zmap[i>>13]->b_data)) + free++; + printk("%d/%d free blocks\n\r",free,p->s_nzones); + free=0; + i=p->s_ninodes+1; + while (-- i >= 0) + if (!set_bit(i&8191,p->s_imap[i>>13]->b_data)) + free++; + printk("%d/%d free inodes\n\r",free,p->s_ninodes); +} diff --git a/linux-0.11-lab/0/linux/fs/super.o b/linux-0.11-lab/0/linux/fs/super.o new file mode 100644 index 0000000000000000000000000000000000000000..b551798da16bfa699c2dc2848c061720be0e1b2a GIT binary patch literal 12284 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 + +#include + +static void free_ind(int dev,int block) +{ + struct buffer_head * bh; + unsigned short * p; + int i; + + if (!block) + return; + if (bh=bread(dev,block)) { + p = (unsigned short *) bh->b_data; + for (i=0;i<512;i++,p++) + if (*p) + free_block(dev,*p); + brelse(bh); + } + free_block(dev,block); +} + +static void free_dind(int dev,int block) +{ + struct buffer_head * bh; + unsigned short * p; + int i; + + if (!block) + return; + if (bh=bread(dev,block)) { + p = (unsigned short *) bh->b_data; + for (i=0;i<512;i++,p++) + if (*p) + free_ind(dev,*p); + brelse(bh); + } + free_block(dev,block); +} + +void truncate(struct m_inode * inode) +{ + int i; + + if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode))) + return; + for (i=0;i<7;i++) + if (inode->i_zone[i]) { + free_block(inode->i_dev,inode->i_zone[i]); + inode->i_zone[i]=0; + } + free_ind(inode->i_dev,inode->i_zone[7]); + free_dind(inode->i_dev,inode->i_zone[8]); + inode->i_zone[7] = inode->i_zone[8] = 0; + inode->i_size = 0; + inode->i_dirt = 1; + inode->i_mtime = inode->i_ctime = CURRENT_TIME; +} + diff --git a/linux-0.11-lab/0/linux/fs/truncate.o b/linux-0.11-lab/0/linux/fs/truncate.o new file mode 100644 index 0000000000000000000000000000000000000000..8975b924958105c719b40601717933b390dce7b0 GIT binary patch literal 6848 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 T&knY~U11EUL+(?^{YLp;_3Udb literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/include/a.out.h b/linux-0.11-lab/0/linux/include/a.out.h new file mode 100644 index 0000000..3e67974 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/a.out.h @@ -0,0 +1,220 @@ +#ifndef _A_OUT_H +#define _A_OUT_H + +#define __GNU_EXEC_MACROS__ + +struct exec { + unsigned long a_magic; /* Use macros N_MAGIC, etc for access */ + unsigned a_text; /* length of text, in bytes */ + unsigned a_data; /* length of data, in bytes */ + unsigned a_bss; /* length of uninitialized data area for file, in bytes */ + unsigned a_syms; /* length of symbol table data in file, in bytes */ + unsigned a_entry; /* start address */ + unsigned a_trsize; /* length of relocation info for text, in bytes */ + unsigned a_drsize; /* length of relocation info for data, in bytes */ +}; + +#ifndef N_MAGIC +#define N_MAGIC(exec) ((exec).a_magic) +#endif + +#ifndef OMAGIC +/* Code indicating object file or impure executable. */ +#define OMAGIC 0407 +/* Code indicating pure executable. */ +#define NMAGIC 0410 +/* Code indicating demand-paged executable. */ +#define ZMAGIC 0413 +#endif /* not OMAGIC */ + +#ifndef N_BADMAG +#define N_BADMAG(x) \ + (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \ + && N_MAGIC(x) != ZMAGIC) +#endif + +#define _N_BADMAG(x) \ + (N_MAGIC(x) != OMAGIC && N_MAGIC(x) != NMAGIC \ + && N_MAGIC(x) != ZMAGIC) + +#define _N_HDROFF(x) (SEGMENT_SIZE - sizeof (struct exec)) + +#ifndef N_TXTOFF +#define N_TXTOFF(x) \ + (N_MAGIC(x) == ZMAGIC ? _N_HDROFF((x)) + sizeof (struct exec) : sizeof (struct exec)) +#endif + +#ifndef N_DATOFF +#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text) +#endif + +#ifndef N_TRELOFF +#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data) +#endif + +#ifndef N_DRELOFF +#define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize) +#endif + +#ifndef N_SYMOFF +#define N_SYMOFF(x) (N_DRELOFF(x) + (x).a_drsize) +#endif + +#ifndef N_STROFF +#define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms) +#endif + +/* Address of text segment in memory after it is loaded. */ +#ifndef N_TXTADDR +#define N_TXTADDR(x) 0 +#endif + +/* Address of data segment in memory after it is loaded. + Note that it is up to you to define SEGMENT_SIZE + on machines not listed here. */ +#if defined(vax) || defined(hp300) || defined(pyr) +#define SEGMENT_SIZE PAGE_SIZE +#endif +#ifdef hp300 +#define PAGE_SIZE 4096 +#endif +#ifdef sony +#define SEGMENT_SIZE 0x2000 +#endif /* Sony. */ +#ifdef is68k +#define SEGMENT_SIZE 0x20000 +#endif +#if defined(m68k) && defined(PORTAR) +#define PAGE_SIZE 0x400 +#define SEGMENT_SIZE PAGE_SIZE +#endif + +#define PAGE_SIZE 4096 +#define SEGMENT_SIZE 1024 + +#define _N_SEGMENT_ROUND(x) (((x) + SEGMENT_SIZE - 1) & ~(SEGMENT_SIZE - 1)) + +#define _N_TXTENDADDR(x) (N_TXTADDR(x)+(x).a_text) + +#ifndef N_DATADDR +#define N_DATADDR(x) \ + (N_MAGIC(x)==OMAGIC? (_N_TXTENDADDR(x)) \ + : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x)))) +#endif + +/* Address of bss segment in memory after it is loaded. */ +#ifndef N_BSSADDR +#define N_BSSADDR(x) (N_DATADDR(x) + (x).a_data) +#endif + +#ifndef N_NLIST_DECLARED +struct nlist { + union { + char *n_name; + struct nlist *n_next; + long n_strx; + } n_un; + unsigned char n_type; + char n_other; + short n_desc; + unsigned long n_value; +}; +#endif + +#ifndef N_UNDF +#define N_UNDF 0 +#endif +#ifndef N_ABS +#define N_ABS 2 +#endif +#ifndef N_TEXT +#define N_TEXT 4 +#endif +#ifndef N_DATA +#define N_DATA 6 +#endif +#ifndef N_BSS +#define N_BSS 8 +#endif +#ifndef N_COMM +#define N_COMM 18 +#endif +#ifndef N_FN +#define N_FN 15 +#endif + +#ifndef N_EXT +#define N_EXT 1 +#endif +#ifndef N_TYPE +#define N_TYPE 036 +#endif +#ifndef N_STAB +#define N_STAB 0340 +#endif + +/* The following type indicates the definition of a symbol as being + an indirect reference to another symbol. The other symbol + appears as an undefined reference, immediately following this symbol. + + Indirection is asymmetrical. The other symbol's value will be used + to satisfy requests for the indirect symbol, but not vice versa. + If the other symbol does not have a definition, libraries will + be searched to find a definition. */ +#define N_INDR 0xa + +/* The following symbols refer to set elements. + All the N_SET[ATDB] symbols with the same name form one set. + Space is allocated for the set in the text section, and each set + element's value is stored into one word of the space. + The first word of the space is the length of the set (number of elements). + + The address of the set is made into an N_SETV symbol + whose name is the same as the name of the set. + This symbol acts like a N_DATA global symbol + in that it can satisfy undefined external references. */ + +/* These appear as input to LD, in a .o file. */ +#define N_SETA 0x14 /* Absolute set element symbol */ +#define N_SETT 0x16 /* Text set element symbol */ +#define N_SETD 0x18 /* Data set element symbol */ +#define N_SETB 0x1A /* Bss set element symbol */ + +/* This is output from LD. */ +#define N_SETV 0x1C /* Pointer to set vector in data area. */ + +#ifndef N_RELOCATION_INFO_DECLARED + +/* This structure describes a single relocation to be performed. + The text-relocation section of the file is a vector of these structures, + all of which apply to the text section. + Likewise, the data-relocation section applies to the data section. */ + +struct relocation_info +{ + /* Address (within segment) to be relocated. */ + int r_address; + /* The meaning of r_symbolnum depends on r_extern. */ + unsigned int r_symbolnum:24; + /* Nonzero means value is a pc-relative offset + and it should be relocated for changes in its own address + as well as for changes in the symbol or section specified. */ + unsigned int r_pcrel:1; + /* Length (as exponent of 2) of the field to be relocated. + Thus, a value of 2 indicates 1<<2 bytes. */ + unsigned int r_length:2; + /* 1 => relocate with value of symbol. + r_symbolnum is the index of the symbol + in file's the symbol table. + 0 => relocate with the address of a segment. + r_symbolnum is N_TEXT, N_DATA, N_BSS or N_ABS + (the N_EXT bit may be set also, but signifies nothing). */ + unsigned int r_extern:1; + /* Four bits that aren't used, but when writing an object file + it is desirable to clear them. */ + unsigned int r_pad:4; +}; +#endif /* no N_RELOCATION_INFO_DECLARED. */ + + +#endif /* __A_OUT_GNU_H__ */ diff --git a/linux-0.11-lab/0/linux/include/asm/io.h b/linux-0.11-lab/0/linux/include/asm/io.h new file mode 100644 index 0000000..d5cc42a --- /dev/null +++ b/linux-0.11-lab/0/linux/include/asm/io.h @@ -0,0 +1,24 @@ +#define outb(value,port) \ +__asm__ ("outb %%al,%%dx"::"a" (value),"d" (port)) + + +#define inb(port) ({ \ +unsigned char _v; \ +__asm__ volatile ("inb %%dx,%%al":"=a" (_v):"d" (port)); \ +_v; \ +}) + +#define outb_p(value,port) \ +__asm__ ("outb %%al,%%dx\n" \ + "\tjmp 1f\n" \ + "1:\tjmp 1f\n" \ + "1:"::"a" (value),"d" (port)) + +#define inb_p(port) ({ \ +unsigned char _v; \ +__asm__ volatile ("inb %%dx,%%al\n" \ + "\tjmp 1f\n" \ + "1:\tjmp 1f\n" \ + "1:":"=a" (_v):"d" (port)); \ +_v; \ +}) diff --git a/linux-0.11-lab/0/linux/include/asm/memory.h b/linux-0.11-lab/0/linux/include/asm/memory.h new file mode 100644 index 0000000..51b69e7 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/asm/memory.h @@ -0,0 +1,15 @@ +/* + * NOTE!!! memcpy(dest,src,n) assumes ds=es=normal data segment. This + * goes for all kernel functions (ds=es=kernel space, fs=local data, + * gs=null), as well as for all well-behaving user programs (ds=es= + * user data space). This is NOT a bug, as any user program that changes + * es deserves to die if it isn't careful. + */ +#define memcpy(dest,src,n) ({ \ +void * _res = dest; \ +__asm__ ("cld;rep;movsb" \ + ::"D" ((long)(_res)),"S" ((long)(src)),"c" ((long) (n)) \ + ); \ +_res; \ +}) + diff --git a/linux-0.11-lab/0/linux/include/asm/segment.h b/linux-0.11-lab/0/linux/include/asm/segment.h new file mode 100644 index 0000000..94dd102 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/asm/segment.h @@ -0,0 +1,65 @@ +static inline unsigned char get_fs_byte(const char * addr) +{ + unsigned register char _v; + + __asm__ ("movb %%fs:%1,%0":"=r" (_v):"m" (*addr)); + return _v; +} + +static inline unsigned short get_fs_word(const unsigned short *addr) +{ + unsigned short _v; + + __asm__ ("movw %%fs:%1,%0":"=r" (_v):"m" (*addr)); + return _v; +} + +static inline unsigned long get_fs_long(const unsigned long *addr) +{ + unsigned long _v; + + __asm__ ("movl %%fs:%1,%0":"=r" (_v):"m" (*addr)); \ + return _v; +} + +static inline void put_fs_byte(char val,char *addr) +{ +__asm__ ("movb %0,%%fs:%1"::"r" (val),"m" (*addr)); +} + +static inline void put_fs_word(short val,short * addr) +{ +__asm__ ("movw %0,%%fs:%1"::"r" (val),"m" (*addr)); +} + +static inline void put_fs_long(unsigned long val,unsigned long * addr) +{ +__asm__ ("movl %0,%%fs:%1"::"r" (val),"m" (*addr)); +} + +/* + * Someone who knows GNU asm better than I should double check the followig. + * It seems to work, but I don't know if I'm doing something subtly wrong. + * --- TYT, 11/24/91 + * [ nothing wrong here, Linus ] + */ + +static inline unsigned long get_fs() +{ + unsigned short _v; + __asm__("mov %%fs,%%ax":"=a" (_v):); + return _v; +} + +static inline unsigned long get_ds() +{ + unsigned short _v; + __asm__("mov %%ds,%%ax":"=a" (_v):); + return _v; +} + +static inline void set_fs(unsigned long val) +{ + __asm__("mov %0,%%fs"::"a" ((unsigned short) val)); +} + diff --git a/linux-0.11-lab/0/linux/include/asm/system.h b/linux-0.11-lab/0/linux/include/asm/system.h new file mode 100644 index 0000000..0b5a21d --- /dev/null +++ b/linux-0.11-lab/0/linux/include/asm/system.h @@ -0,0 +1,66 @@ +#define move_to_user_mode() \ +__asm__ ("movl %%esp,%%eax\n\t" \ + "pushl $0x17\n\t" \ + "pushl %%eax\n\t" \ + "pushfl\n\t" \ + "pushl $0x0f\n\t" \ + "pushl $1f\n\t" \ + "iret\n" \ + "1:\tmovl $0x17,%%eax\n\t" \ + "movw %%ax,%%ds\n\t" \ + "movw %%ax,%%es\n\t" \ + "movw %%ax,%%fs\n\t" \ + "movw %%ax,%%gs" \ + :::"ax") + +#define sti() __asm__ ("sti"::) +#define cli() __asm__ ("cli"::) +#define nop() __asm__ ("nop"::) + +#define iret() __asm__ ("iret"::) + +#define _set_gate(gate_addr,type,dpl,addr) \ +__asm__ ("movw %%dx,%%ax\n\t" \ + "movw %0,%%dx\n\t" \ + "movl %%eax,%1\n\t" \ + "movl %%edx,%2" \ + : \ + : "i" ((short) (0x8000+(dpl<<13)+(type<<8))), \ + "o" (*((char *) (gate_addr))), \ + "o" (*(4+(char *) (gate_addr))), \ + "d" ((char *) (addr)),"a" (0x00080000)) + +#define set_intr_gate(n,addr) \ + _set_gate(&idt[n],14,0,addr) + +#define set_trap_gate(n,addr) \ + _set_gate(&idt[n],15,0,addr) + +#define set_system_gate(n,addr) \ + _set_gate(&idt[n],15,3,addr) + +#define _set_seg_desc(gate_addr,type,dpl,base,limit) {\ + *(gate_addr) = ((base) & 0xff000000) | \ + (((base) & 0x00ff0000)>>16) | \ + ((limit) & 0xf0000) | \ + ((dpl)<<13) | \ + (0x00408000) | \ + ((type)<<8); \ + *((gate_addr)+1) = (((base) & 0x0000ffff)<<16) | \ + ((limit) & 0x0ffff); } + +#define _set_tssldt_desc(n,addr,type) \ +__asm__ ("movw $104,%1\n\t" \ + "movw %%ax,%2\n\t" \ + "rorl $16,%%eax\n\t" \ + "movb %%al,%3\n\t" \ + "movb $" type ",%4\n\t" \ + "movb $0x00,%5\n\t" \ + "movb %%ah,%6\n\t" \ + "rorl $16,%%eax" \ + ::"a" (addr), "m" (*(n)), "m" (*(n+2)), "m" (*(n+4)), \ + "m" (*(n+5)), "m" (*(n+6)), "m" (*(n+7)) \ + ) + +#define set_tss_desc(n,addr) _set_tssldt_desc(((char *) (n)),addr,"0x89") +#define set_ldt_desc(n,addr) _set_tssldt_desc(((char *) (n)),addr,"0x82") diff --git a/linux-0.11-lab/0/linux/include/const.h b/linux-0.11-lab/0/linux/include/const.h new file mode 100644 index 0000000..7828e61 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/const.h @@ -0,0 +1,15 @@ +#ifndef _CONST_H +#define _CONST_H + +#define BUFFER_END 0x200000 + +#define I_TYPE 0170000 +#define I_DIRECTORY 0040000 +#define I_REGULAR 0100000 +#define I_BLOCK_SPECIAL 0060000 +#define I_CHAR_SPECIAL 0020000 +#define I_NAMED_PIPE 0010000 +#define I_SET_UID_BIT 0004000 +#define I_SET_GID_BIT 0002000 + +#endif diff --git a/linux-0.11-lab/0/linux/include/ctype.h b/linux-0.11-lab/0/linux/include/ctype.h new file mode 100644 index 0000000..7acf55d --- /dev/null +++ b/linux-0.11-lab/0/linux/include/ctype.h @@ -0,0 +1,34 @@ +#ifndef _CTYPE_H +#define _CTYPE_H + +#define _U 0x01 /* upper */ +#define _L 0x02 /* lower */ +#define _D 0x04 /* digit */ +#define _C 0x08 /* cntrl */ +#define _P 0x10 /* punct */ +#define _S 0x20 /* white space (space/lf/tab) */ +#define _X 0x40 /* hex digit */ +#define _SP 0x80 /* hard space (0x20) */ + +extern unsigned char _ctype[]; +extern char _ctmp; + +#define isalnum(c) ((_ctype+1)[c]&(_U|_L|_D)) +#define isalpha(c) ((_ctype+1)[c]&(_U|_L)) +#define iscntrl(c) ((_ctype+1)[c]&(_C)) +#define isdigit(c) ((_ctype+1)[c]&(_D)) +#define isgraph(c) ((_ctype+1)[c]&(_P|_U|_L|_D)) +#define islower(c) ((_ctype+1)[c]&(_L)) +#define isprint(c) ((_ctype+1)[c]&(_P|_U|_L|_D|_SP)) +#define ispunct(c) ((_ctype+1)[c]&(_P)) +#define isspace(c) ((_ctype+1)[c]&(_S)) +#define isupper(c) ((_ctype+1)[c]&(_U)) +#define isxdigit(c) ((_ctype+1)[c]&(_D|_X)) + +#define isascii(c) (((unsigned) c)<=0x7f) +#define toascii(c) (((unsigned) c)&0x7f) + +#define tolower(c) (_ctmp=c,isupper(_ctmp)?_ctmp-('A'-'a'):_ctmp) +#define toupper(c) (_ctmp=c,islower(_ctmp)?_ctmp-('a'-'A'):_ctmp) + +#endif diff --git a/linux-0.11-lab/0/linux/include/errno.h b/linux-0.11-lab/0/linux/include/errno.h new file mode 100644 index 0000000..c282f69 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/errno.h @@ -0,0 +1,60 @@ +#ifndef _ERRNO_H +#define _ERRNO_H + +/* + * ok, as I hadn't got any other source of information about + * possible error numbers, I was forced to use the same numbers + * as minix. + * Hopefully these are posix or something. I wouldn't know (and posix + * isn't telling me - they want $$$ for their f***ing standard). + * + * We don't use the _SIGN cludge of minix, so kernel returns must + * see to the sign by themselves. + * + * NOTE! Remember to change strerror() if you change this file! + */ + +extern int errno; + +#define ERROR 99 +#define EPERM 1 +#define ENOENT 2 +#define ESRCH 3 +#define EINTR 4 +#define EIO 5 +#define ENXIO 6 +#define E2BIG 7 +#define ENOEXEC 8 +#define EBADF 9 +#define ECHILD 10 +#define EAGAIN 11 +#define ENOMEM 12 +#define EACCES 13 +#define EFAULT 14 +#define ENOTBLK 15 +#define EBUSY 16 +#define EEXIST 17 +#define EXDEV 18 +#define ENODEV 19 +#define ENOTDIR 20 +#define EISDIR 21 +#define EINVAL 22 +#define ENFILE 23 +#define EMFILE 24 +#define ENOTTY 25 +#define ETXTBSY 26 +#define EFBIG 27 +#define ENOSPC 28 +#define ESPIPE 29 +#define EROFS 30 +#define EMLINK 31 +#define EPIPE 32 +#define EDOM 33 +#define ERANGE 34 +#define EDEADLK 35 +#define ENAMETOOLONG 36 +#define ENOLCK 37 +#define ENOSYS 38 +#define ENOTEMPTY 39 + +#endif diff --git a/linux-0.11-lab/0/linux/include/fcntl.h b/linux-0.11-lab/0/linux/include/fcntl.h new file mode 100644 index 0000000..a5bf9af --- /dev/null +++ b/linux-0.11-lab/0/linux/include/fcntl.h @@ -0,0 +1,55 @@ +#ifndef _FCNTL_H +#define _FCNTL_H + +#include + +/* open/fcntl - NOCTTY, NDELAY isn't implemented yet */ +#define O_ACCMODE 00003 +#define O_RDONLY 00 +#define O_WRONLY 01 +#define O_RDWR 02 +#define O_CREAT 00100 /* not fcntl */ +#define O_EXCL 00200 /* not fcntl */ +#define O_NOCTTY 00400 /* not fcntl */ +#define O_TRUNC 01000 /* not fcntl */ +#define O_APPEND 02000 +#define O_NONBLOCK 04000 /* not fcntl */ +#define O_NDELAY O_NONBLOCK + +/* Defines for fcntl-commands. Note that currently + * locking isn't supported, and other things aren't really + * tested. + */ +#define F_DUPFD 0 /* dup */ +#define F_GETFD 1 /* get f_flags */ +#define F_SETFD 2 /* set f_flags */ +#define F_GETFL 3 /* more flags (cloexec) */ +#define F_SETFL 4 +#define F_GETLK 5 /* not implemented */ +#define F_SETLK 6 +#define F_SETLKW 7 + +/* for F_[GET|SET]FL */ +#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ + +/* Ok, these are locking features, and aren't implemented at any + * level. POSIX wants them. + */ +#define F_RDLCK 0 +#define F_WRLCK 1 +#define F_UNLCK 2 + +/* Once again - not implemented, but ... */ +struct flock { + short l_type; + short l_whence; + off_t l_start; + off_t l_len; + pid_t l_pid; +}; + +extern int creat(const char * filename,mode_t mode); +extern int fcntl(int fildes,int cmd, ...); +extern int open(const char * filename, int flags, ...); + +#endif diff --git a/linux-0.11-lab/0/linux/include/linux/config.h b/linux-0.11-lab/0/linux/include/linux/config.h new file mode 100644 index 0000000..c979fb3 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/linux/config.h @@ -0,0 +1,48 @@ +#ifndef _CONFIG_H +#define _CONFIG_H + +/* + * The root-device is no longer hard-coded. You can change the default + * root-device by changing the line ROOT_DEV = XXX in boot/bootsect.s + */ + +/* + * define your keyboard here - + * KBD_FINNISH for Finnish keyboards + * KBD_US for US-type + * KBD_GR for German keyboards + * KBD_FR for Frech keyboard + */ +#define KBD_US +/*#define KBD_GR */ +/*#define KBD_FR */ +/*#define KBD_FINNISH */ + +/* + * Normally, Linux can get the drive parameters from the BIOS at + * startup, but if this for some unfathomable reason fails, you'd + * be left stranded. For this case, you can define HD_TYPE, which + * contains all necessary info on your harddisk. + * + * The HD_TYPE macro should look like this: + * + * #define HD_TYPE { head, sect, cyl, wpcom, lzone, ctl} + * + * In case of two harddisks, the info should be sepatated by + * commas: + * + * #define HD_TYPE { h,s,c,wpcom,lz,ctl },{ h,s,c,wpcom,lz,ctl } + */ +/* + This is an example, two drives, first is type 2, second is type 3: + +#define HD_TYPE { 4,17,615,300,615,8 }, { 6,17,615,300,615,0 } + + NOTE: ctl is 0 for all drives with heads<=8, and ctl=8 for drives + with more than 8 heads. + + If you want the BIOS to tell what kind of drive you have, just + leave HD_TYPE undefined. This is the normal thing to do. +*/ + +#endif diff --git a/linux-0.11-lab/0/linux/include/linux/fdreg.h b/linux-0.11-lab/0/linux/include/linux/fdreg.h new file mode 100644 index 0000000..01355af --- /dev/null +++ b/linux-0.11-lab/0/linux/include/linux/fdreg.h @@ -0,0 +1,71 @@ +/* + * This file contains some defines for the floppy disk controller. + * Various sources. Mostly "IBM Microcomputers: A Programmers + * Handbook", Sanches and Canton. + */ +#ifndef _FDREG_H +#define _FDREG_H + +extern int ticks_to_floppy_on(unsigned int nr); +extern void floppy_on(unsigned int nr); +extern void floppy_off(unsigned int nr); +extern void floppy_select(unsigned int nr); +extern void floppy_deselect(unsigned int nr); + +/* Fd controller regs. S&C, about page 340 */ +#define FD_STATUS 0x3f4 +#define FD_DATA 0x3f5 +#define FD_DOR 0x3f2 /* Digital Output Register */ +#define FD_DIR 0x3f7 /* Digital Input Register (read) */ +#define FD_DCR 0x3f7 /* Diskette Control Register (write)*/ + +/* Bits of main status register */ +#define STATUS_BUSYMASK 0x0F /* drive busy mask */ +#define STATUS_BUSY 0x10 /* FDC busy */ +#define STATUS_DMA 0x20 /* 0- DMA mode */ +#define STATUS_DIR 0x40 /* 0- cpu->fdc */ +#define STATUS_READY 0x80 /* Data reg ready */ + +/* Bits of FD_ST0 */ +#define ST0_DS 0x03 /* drive select mask */ +#define ST0_HA 0x04 /* Head (Address) */ +#define ST0_NR 0x08 /* Not Ready */ +#define ST0_ECE 0x10 /* Equipment chech error */ +#define ST0_SE 0x20 /* Seek end */ +#define ST0_INTR 0xC0 /* Interrupt code mask */ + +/* Bits of FD_ST1 */ +#define ST1_MAM 0x01 /* Missing Address Mark */ +#define ST1_WP 0x02 /* Write Protect */ +#define ST1_ND 0x04 /* No Data - unreadable */ +#define ST1_OR 0x10 /* OverRun */ +#define ST1_CRC 0x20 /* CRC error in data or addr */ +#define ST1_EOC 0x80 /* End Of Cylinder */ + +/* Bits of FD_ST2 */ +#define ST2_MAM 0x01 /* Missing Addess Mark (again) */ +#define ST2_BC 0x02 /* Bad Cylinder */ +#define ST2_SNS 0x04 /* Scan Not Satisfied */ +#define ST2_SEH 0x08 /* Scan Equal Hit */ +#define ST2_WC 0x10 /* Wrong Cylinder */ +#define ST2_CRC 0x20 /* CRC error in data field */ +#define ST2_CM 0x40 /* Control Mark = deleted */ + +/* Bits of FD_ST3 */ +#define ST3_HA 0x04 /* Head (Address) */ +#define ST3_TZ 0x10 /* Track Zero signal (1=track 0) */ +#define ST3_WP 0x40 /* Write Protect */ + +/* Values for FD_COMMAND */ +#define FD_RECALIBRATE 0x07 /* move to track 0 */ +#define FD_SEEK 0x0F /* seek track */ +#define FD_READ 0xE6 /* read with MT, MFM, SKip deleted */ +#define FD_WRITE 0xC5 /* write with MT, MFM */ +#define FD_SENSEI 0x08 /* Sense Interrupt Status */ +#define FD_SPECIFY 0x03 /* specify HUT etc */ + +/* DMA commands */ +#define DMA_READ 0x46 +#define DMA_WRITE 0x4A + +#endif diff --git a/linux-0.11-lab/0/linux/include/linux/fs.h b/linux-0.11-lab/0/linux/include/linux/fs.h new file mode 100644 index 0000000..7a90b10 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/linux/fs.h @@ -0,0 +1,202 @@ +/* + * This file has definitions for some important file table + * structures etc. + */ + +#ifndef _FS_H +#define _FS_H + +#include + +/* devices are as follows: (same as minix, so we can use the minix + * file system. These are major numbers.) + * + * 0 - unused (nodev) + * 1 - /dev/mem + * 2 - /dev/fd + * 3 - /dev/hd + * 4 - /dev/ttyx + * 5 - /dev/tty + * 6 - /dev/lp + * 7 - unnamed pipes + */ + +#define IS_SEEKABLE(x) ((x)>=1 && (x)<=3) + +#define READ 0 +#define WRITE 1 +#define READA 2 /* read-ahead - don't pause */ +#define WRITEA 3 /* "write-ahead" - silly, but somewhat useful */ + +void buffer_init(long buffer_end); + +#define MAJOR(a) (((unsigned)(a))>>8) +#define MINOR(a) ((a)&0xff) + +#define NAME_LEN 14 +#define ROOT_INO 1 + +#define I_MAP_SLOTS 8 +#define Z_MAP_SLOTS 8 +#define SUPER_MAGIC 0x137F + +#define NR_OPEN 20 +#define NR_INODE 32 +#define NR_FILE 64 +#define NR_SUPER 8 +#define NR_HASH 307 +#define NR_BUFFERS nr_buffers +#define BLOCK_SIZE 1024 +#define BLOCK_SIZE_BITS 10 +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#define INODES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct d_inode))) +#define DIR_ENTRIES_PER_BLOCK ((BLOCK_SIZE)/(sizeof (struct dir_entry))) + +#define PIPE_HEAD(inode) ((inode).i_zone[0]) +#define PIPE_TAIL(inode) ((inode).i_zone[1]) +#define PIPE_SIZE(inode) ((PIPE_HEAD(inode)-PIPE_TAIL(inode))&(PAGE_SIZE-1)) +#define PIPE_EMPTY(inode) (PIPE_HEAD(inode)==PIPE_TAIL(inode)) +#define PIPE_FULL(inode) (PIPE_SIZE(inode)==(PAGE_SIZE-1)) +#define INC_PIPE(head) \ +__asm__("incl %0\n\tandl $4095,%0"::"m" (head)) + +typedef char buffer_block[BLOCK_SIZE]; + +struct buffer_head { + char * b_data; /* pointer to data block (1024 bytes) */ + unsigned long b_blocknr; /* block number */ + unsigned short b_dev; /* device (0 = free) */ + unsigned char b_uptodate; + unsigned char b_dirt; /* 0-clean,1-dirty */ + unsigned char b_count; /* users using this block */ + unsigned char b_lock; /* 0 - ok, 1 -locked */ + struct task_struct * b_wait; + struct buffer_head * b_prev; + struct buffer_head * b_next; + struct buffer_head * b_prev_free; + struct buffer_head * b_next_free; +}; + +struct d_inode { + unsigned short i_mode; + unsigned short i_uid; + unsigned long i_size; + unsigned long i_time; + unsigned char i_gid; + unsigned char i_nlinks; + unsigned short i_zone[9]; +}; + +struct m_inode { + unsigned short i_mode; + unsigned short i_uid; + unsigned long i_size; + unsigned long i_mtime; + unsigned char i_gid; + unsigned char i_nlinks; + unsigned short i_zone[9]; +/* these are in memory also */ + struct task_struct * i_wait; + unsigned long i_atime; + unsigned long i_ctime; + unsigned short i_dev; + unsigned short i_num; + unsigned short i_count; + unsigned char i_lock; + unsigned char i_dirt; + unsigned char i_pipe; + unsigned char i_mount; + unsigned char i_seek; + unsigned char i_update; +}; + +struct file { + unsigned short f_mode; + unsigned short f_flags; + unsigned short f_count; + struct m_inode * f_inode; + off_t f_pos; +}; + +struct super_block { + unsigned short s_ninodes; + unsigned short s_nzones; + unsigned short s_imap_blocks; + unsigned short s_zmap_blocks; + unsigned short s_firstdatazone; + unsigned short s_log_zone_size; + unsigned long s_max_size; + unsigned short s_magic; +/* These are only in memory */ + struct buffer_head * s_imap[8]; + struct buffer_head * s_zmap[8]; + unsigned short s_dev; + struct m_inode * s_isup; + struct m_inode * s_imount; + unsigned long s_time; + struct task_struct * s_wait; + unsigned char s_lock; + unsigned char s_rd_only; + unsigned char s_dirt; +}; + +struct d_super_block { + unsigned short s_ninodes; + unsigned short s_nzones; + unsigned short s_imap_blocks; + unsigned short s_zmap_blocks; + unsigned short s_firstdatazone; + unsigned short s_log_zone_size; + unsigned long s_max_size; + unsigned short s_magic; +}; + +struct dir_entry { + unsigned short inode; + char name[NAME_LEN]; +}; + +extern struct m_inode inode_table[NR_INODE]; +extern struct file file_table[NR_FILE]; +extern struct super_block super_block[NR_SUPER]; +extern struct buffer_head * start_buffer; +extern int nr_buffers; + +extern void check_disk_change(int dev); +extern int floppy_change(unsigned int nr); +extern int ticks_to_floppy_on(unsigned int dev); +extern void floppy_on(unsigned int dev); +extern void floppy_off(unsigned int dev); +extern void truncate(struct m_inode * inode); +extern void sync_inodes(void); +extern void wait_on(struct m_inode * inode); +extern int bmap(struct m_inode * inode,int block); +extern int create_block(struct m_inode * inode,int block); +extern struct m_inode * namei(const char * pathname); +extern int open_namei(const char * pathname, int flag, int mode, + struct m_inode ** res_inode); +extern void iput(struct m_inode * inode); +extern struct m_inode * iget(int dev,int nr); +extern struct m_inode * get_empty_inode(void); +extern struct m_inode * get_pipe_inode(void); +extern struct buffer_head * get_hash_table(int dev, int block); +extern struct buffer_head * getblk(int dev, int block); +extern void ll_rw_block(int rw, struct buffer_head * bh); +extern void brelse(struct buffer_head * buf); +extern struct buffer_head * bread(int dev,int block); +extern void bread_page(unsigned long addr,int dev,int b[4]); +extern struct buffer_head * breada(int dev,int block,...); +extern int new_block(int dev); +extern void free_block(int dev, int block); +extern struct m_inode * new_inode(int dev); +extern void free_inode(struct m_inode * inode); +extern int sync_dev(int dev); +extern struct super_block * get_super(int dev); +extern int ROOT_DEV; + +extern void mount_root(void); + +#endif diff --git a/linux-0.11-lab/0/linux/include/linux/hdreg.h b/linux-0.11-lab/0/linux/include/linux/hdreg.h new file mode 100644 index 0000000..e6c593f --- /dev/null +++ b/linux-0.11-lab/0/linux/include/linux/hdreg.h @@ -0,0 +1,65 @@ +/* + * This file contains some defines for the AT-hd-controller. + * Various sources. Check out some definitions (see comments with + * a ques). + */ +#ifndef _HDREG_H +#define _HDREG_H + +/* Hd controller regs. Ref: IBM AT Bios-listing */ +#define HD_DATA 0x1f0 /* _CTL when writing */ +#define HD_ERROR 0x1f1 /* see err-bits */ +#define HD_NSECTOR 0x1f2 /* nr of sectors to read/write */ +#define HD_SECTOR 0x1f3 /* starting sector */ +#define HD_LCYL 0x1f4 /* starting cylinder */ +#define HD_HCYL 0x1f5 /* high byte of starting cyl */ +#define HD_CURRENT 0x1f6 /* 101dhhhh , d=drive, hhhh=head */ +#define HD_STATUS 0x1f7 /* see status-bits */ +#define HD_PRECOMP HD_ERROR /* same io address, read=error, write=precomp */ +#define HD_COMMAND HD_STATUS /* same io address, read=status, write=cmd */ + +#define HD_CMD 0x3f6 + +/* Bits of HD_STATUS */ +#define ERR_STAT 0x01 +#define INDEX_STAT 0x02 +#define ECC_STAT 0x04 /* Corrected error */ +#define DRQ_STAT 0x08 +#define SEEK_STAT 0x10 +#define WRERR_STAT 0x20 +#define READY_STAT 0x40 +#define BUSY_STAT 0x80 + +/* Values for HD_COMMAND */ +#define WIN_RESTORE 0x10 +#define WIN_READ 0x20 +#define WIN_WRITE 0x30 +#define WIN_VERIFY 0x40 +#define WIN_FORMAT 0x50 +#define WIN_INIT 0x60 +#define WIN_SEEK 0x70 +#define WIN_DIAGNOSE 0x90 +#define WIN_SPECIFY 0x91 + +/* Bits for HD_ERROR */ +#define MARK_ERR 0x01 /* Bad address mark ? */ +#define TRK0_ERR 0x02 /* couldn't find track 0 */ +#define ABRT_ERR 0x04 /* ? */ +#define ID_ERR 0x10 /* ? */ +#define ECC_ERR 0x40 /* ? */ +#define BBD_ERR 0x80 /* ? */ + +struct partition { + unsigned char boot_ind; /* 0x80 - active (unused) */ + unsigned char head; /* ? */ + unsigned char sector; /* ? */ + unsigned char cyl; /* ? */ + unsigned char sys_ind; /* ? */ + unsigned char end_head; /* ? */ + unsigned char end_sector; /* ? */ + unsigned char end_cyl; /* ? */ + unsigned int start_sect; /* starting sector counting from 0 */ + unsigned int nr_sects; /* nr of sectors in partition */ +}; + +#endif diff --git a/linux-0.11-lab/0/linux/include/linux/head.h b/linux-0.11-lab/0/linux/include/linux/head.h new file mode 100644 index 0000000..db3dda2 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/linux/head.h @@ -0,0 +1,20 @@ +#ifndef _HEAD_H +#define _HEAD_H + +typedef struct desc_struct { + unsigned long a,b; +} desc_table[256]; + +extern unsigned long pg_dir[1024]; +extern desc_table idt,gdt; + +#define GDT_NUL 0 +#define GDT_CODE 1 +#define GDT_DATA 2 +#define GDT_TMP 3 + +#define LDT_NUL 0 +#define LDT_CODE 1 +#define LDT_DATA 2 + +#endif diff --git a/linux-0.11-lab/0/linux/include/linux/kernel.h b/linux-0.11-lab/0/linux/include/linux/kernel.h new file mode 100644 index 0000000..cb40dd5 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/linux/kernel.h @@ -0,0 +1,22 @@ +/* + * 'kernel.h' contains some often-used function prototypes etc + */ +void verify_area(void * addr,int count); +volatile void panic(const char * str); +int printf(const char * fmt, ...); +int printk(const char * fmt, ...); +int tty_write(unsigned ch,char * buf,int count); +void * malloc(unsigned int size); +void free_s(void * obj, int size); + +#define free(x) free_s((x), 0) + +/* + * This is defined as a macro, but at some point this might become a + * real subroutine that sets a flag if it returns true (to do + * BSD-style accounting where the process is flagged if it uses root + * privs). The implication of this is that you should do normal + * permissions checks first, and check suser() last. + */ +#define suser() (current->euid == 0) + diff --git a/linux-0.11-lab/0/linux/include/linux/mm.h b/linux-0.11-lab/0/linux/include/linux/mm.h new file mode 100644 index 0000000..5a160f3 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/linux/mm.h @@ -0,0 +1,10 @@ +#ifndef _MM_H +#define _MM_H + +#define PAGE_SIZE 4096 + +extern unsigned long get_free_page(void); +extern unsigned long put_page(unsigned long page,unsigned long address); +extern void free_page(unsigned long addr); + +#endif diff --git a/linux-0.11-lab/0/linux/include/linux/sched.h b/linux-0.11-lab/0/linux/include/linux/sched.h new file mode 100644 index 0000000..772646a --- /dev/null +++ b/linux-0.11-lab/0/linux/include/linux/sched.h @@ -0,0 +1,239 @@ +#ifndef _SCHED_H +#define _SCHED_H + +#define NR_TASKS 64 +#define HZ 100 + +#define FIRST_TASK task[0] +#define LAST_TASK task[NR_TASKS-1] + +#include +#include +#include +#include + +#if (NR_OPEN > 32) +#error "Currently the close-on-exec-flags are in one word, max 32 files/proc" +#endif + +#define TASK_RUNNING 0 +#define TASK_INTERRUPTIBLE 1 +#define TASK_UNINTERRUPTIBLE 2 +#define TASK_ZOMBIE 3 +#define TASK_STOPPED 4 + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +extern int copy_page_tables(unsigned long from, unsigned long to, long size); +extern int free_page_tables(unsigned long from, unsigned long size); + +extern void sched_init(void); +extern void schedule(void); +extern void trap_init(void); +extern void panic(const char * str); +extern int tty_write(unsigned minor,char * buf,int count); + +typedef int (*fn_ptr)(); + +struct i387_struct { + long cwd; + long swd; + long twd; + long fip; + long fcs; + long foo; + long fos; + long st_space[20]; /* 8*10 bytes for each FP-reg = 80 bytes */ +}; + +struct tss_struct { + long back_link; /* 16 high bits zero */ + long esp0; + long ss0; /* 16 high bits zero */ + long esp1; + long ss1; /* 16 high bits zero */ + long esp2; + long ss2; /* 16 high bits zero */ + long cr3; + long eip; + long eflags; + long eax,ecx,edx,ebx; + long esp; + long ebp; + long esi; + long edi; + long es; /* 16 high bits zero */ + long cs; /* 16 high bits zero */ + long ss; /* 16 high bits zero */ + long ds; /* 16 high bits zero */ + long fs; /* 16 high bits zero */ + long gs; /* 16 high bits zero */ + long ldt; /* 16 high bits zero */ + long trace_bitmap; /* bits: trace 0, bitmap 16-31 */ + struct i387_struct i387; +}; + +struct task_struct { +/* these are hardcoded - don't touch */ + long state; /* -1 unrunnable, 0 runnable, >0 stopped */ + long counter; + long priority; + long signal; + struct sigaction sigaction[32]; + long blocked; /* bitmap of masked signals */ +/* various fields */ + int exit_code; + unsigned long start_code,end_code,end_data,brk,start_stack; + long pid,father,pgrp,session,leader; + unsigned short uid,euid,suid; + unsigned short gid,egid,sgid; + long alarm; + long utime,stime,cutime,cstime,start_time; + unsigned short used_math; +/* file system info */ + int tty; /* -1 if no tty, so it must be signed */ + unsigned short umask; + struct m_inode * pwd; + struct m_inode * root; + struct m_inode * executable; + unsigned long close_on_exec; + struct file * filp[NR_OPEN]; +/* ldt for this task 0 - zero 1 - cs 2 - ds&ss */ + struct desc_struct ldt[3]; +/* tss for this task */ + struct tss_struct tss; +}; + +/* + * INIT_TASK is used to set up the first task table, touch at + * your own risk!. Base=0, limit=0x9ffff (=640kB) + */ +#define INIT_TASK \ +/* state etc */ { 0,15,15, \ +/* signals */ 0,{{},},0, \ +/* ec,brk... */ 0,0,0,0,0,0, \ +/* pid etc.. */ 0,-1,0,0,0, \ +/* uid etc */ 0,0,0,0,0,0, \ +/* alarm */ 0,0,0,0,0,0, \ +/* math */ 0, \ +/* fs info */ -1,0022,NULL,NULL,NULL,0, \ +/* filp */ {NULL,}, \ + { \ + {0,0}, \ +/* ldt */ {0x9f,0xc0fa00}, \ + {0x9f,0xc0f200}, \ + }, \ +/*tss*/ {0,PAGE_SIZE+(long)&init_task,0x10,0,0,0,0,(long)&pg_dir,\ + 0,0,0,0,0,0,0,0, \ + 0,0,0x17,0x17,0x17,0x17,0x17,0x17, \ + _LDT(0),0x80000000, \ + {} \ + }, \ +} + +extern struct task_struct *task[NR_TASKS]; +extern struct task_struct *last_task_used_math; +extern struct task_struct *current; +extern long volatile jiffies; +extern long startup_time; + +#define CURRENT_TIME (startup_time+jiffies/HZ) + +extern void add_timer(long jiffies, void (*fn)(void)); +extern void sleep_on(struct task_struct ** p); +extern void interruptible_sleep_on(struct task_struct ** p); +extern void wake_up(struct task_struct ** p); + +/* + * Entry into gdt where to find first TSS. 0-nul, 1-cs, 2-ds, 3-syscall + * 4-TSS0, 5-LDT0, 6-TSS1 etc ... + */ +#define FIRST_TSS_ENTRY 4 +#define FIRST_LDT_ENTRY (FIRST_TSS_ENTRY+1) +#define _TSS(n) ((((unsigned long) n)<<4)+(FIRST_TSS_ENTRY<<3)) +#define _LDT(n) ((((unsigned long) n)<<4)+(FIRST_LDT_ENTRY<<3)) +#define ltr(n) __asm__("ltr %%ax"::"a" (_TSS(n))) +#define lldt(n) __asm__("lldt %%ax"::"a" (_LDT(n))) +#define str(n) \ +__asm__("str %%ax\n\t" \ + "subl %2,%%eax\n\t" \ + "shrl $4,%%eax" \ + :"=a" (n) \ + :"a" (0),"i" (FIRST_TSS_ENTRY<<3)) +/* + * switch_to(n) should switch tasks to task nr n, first + * checking that n isn't the current task, in which case it does nothing. + * This also clears the TS-flag if the task we switched to has used + * tha math co-processor latest. + */ +#define switch_to(n) {\ +struct {long a,b;} __tmp; \ +__asm__("cmpl %%ecx,current\n\t" \ + "je 1f\n\t" \ + "movw %%dx,%1\n\t" \ + "xchgl %%ecx,current\n\t" \ + "ljmp *%0\n\t" \ + "cmpl %%ecx,last_task_used_math\n\t" \ + "jne 1f\n\t" \ + "clts\n" \ + "1:" \ + ::"m" (*&__tmp.a),"m" (*&__tmp.b), \ + "d" (_TSS(n)),"c" ((long) task[n])); \ +} + +#define PAGE_ALIGN(n) (((n)+0xfff)&0xfffff000) + +#define _set_base(addr,base) \ +__asm__ ("push %%edx\n\t" \ + "movw %%dx,%0\n\t" \ + "rorl $16,%%edx\n\t" \ + "movb %%dl,%1\n\t" \ + "movb %%dh,%2\n\t" \ + "pop %%edx" \ + ::"m" (*((addr)+2)), \ + "m" (*((addr)+4)), \ + "m" (*((addr)+7)), \ + "d" (base) \ + ) + +#define _set_limit(addr,limit) \ +__asm__ ("push %%edx\n\t" \ + "movw %%dx,%0\n\t" \ + "rorl $16,%%edx\n\t" \ + "movb %1,%%dh\n\t" \ + "andb $0xf0,%%dh\n\t" \ + "orb %%dh,%%dl\n\t" \ + "movb %%dl,%1\n\t" \ + "pop %%edx" \ + ::"m" (*(addr)), \ + "m" (*((addr)+6)), \ + "d" (limit) \ + ) + +#define set_base(ldt,base) _set_base( ((char *)&(ldt)) , (base) ) +#define set_limit(ldt,limit) _set_limit( ((char *)&(ldt)) , (limit-1)>>12 ) + +static inline unsigned long _get_base(char * addr) +{ + unsigned long __base; + __asm__("movb %3,%%dh\n\t" + "movb %2,%%dl\n\t" + "shll $16,%%edx\n\t" + "movw %1,%%dx" + :"=&d" (__base) + :"m" (*((addr)+2)), + "m" (*((addr)+4)), + "m" (*((addr)+7))); + return __base; +} + +#define get_base(ldt) _get_base( ((char *)&(ldt)) ) + +#define get_limit(segment) ({ \ +unsigned long __limit; \ +__asm__("lsll %1,%0\n\tincl %0":"=r" (__limit):"r" (segment)); \ +__limit;}) + +#endif diff --git a/linux-0.11-lab/0/linux/include/linux/sys.h b/linux-0.11-lab/0/linux/include/linux/sys.h new file mode 100644 index 0000000..2a1c8be --- /dev/null +++ b/linux-0.11-lab/0/linux/include/linux/sys.h @@ -0,0 +1,111 @@ +/* + * Why isn't this a .c file? Enquiring minds.... + */ + +extern int sys_setup(); +extern int sys_exit(); +extern int sys_fork(); +extern int sys_read(); +extern int sys_write(); +extern int sys_open(); +extern int sys_close(); +extern int sys_waitpid(); +extern int sys_creat(); +extern int sys_link(); +extern int sys_unlink(); +extern int sys_execve(); +extern int sys_chdir(); +extern int sys_time(); +extern int sys_mknod(); +extern int sys_chmod(); +extern int sys_chown(); +extern int sys_break(); +extern int sys_stat(); +extern int sys_lseek(); +extern int sys_getpid(); +extern int sys_mount(); +extern int sys_umount(); +extern int sys_setuid(); +extern int sys_getuid(); +extern int sys_stime(); +extern int sys_ptrace(); +extern int sys_alarm(); +extern int sys_fstat(); +extern int sys_pause(); +extern int sys_utime(); +extern int sys_stty(); +extern int sys_gtty(); +extern int sys_access(); +extern int sys_nice(); +extern int sys_ftime(); +extern int sys_sync(); +extern int sys_kill(); +extern int sys_rename(); +extern int sys_mkdir(); +extern int sys_rmdir(); +extern int sys_dup(); +extern int sys_pipe(); +extern int sys_times(); +extern int sys_prof(); +extern int sys_brk(); +extern int sys_setgid(); +extern int sys_getgid(); +extern int sys_signal(); +extern int sys_geteuid(); +extern int sys_getegid(); +extern int sys_acct(); +extern int sys_phys(); +extern int sys_lock(); +extern int sys_ioctl(); +extern int sys_fcntl(); +extern int sys_mpx(); +extern int sys_setpgid(); +extern int sys_ulimit(); +extern int sys_uname(); +extern int sys_umask(); +extern int sys_chroot(); +extern int sys_ustat(); +extern int sys_dup2(); +extern int sys_getppid(); +extern int sys_getpgrp(); +extern int sys_setsid(); +extern int sys_sigaction(); +extern int sys_sgetmask(); +extern int sys_ssetmask(); +extern int sys_setreuid(); +extern int sys_setregid(); +extern int sys_sigpending(); +extern int sys_sigsuspend(); +extern int sys_sethostname(); +extern int sys_setrlimit(); +extern int sys_getrlimit(); +extern int sys_getrusage(); +extern int sys_gettimeofday(); +extern int sys_settimeofday(); +extern int sys_getgroups(); +extern int sys_setgroups(); +extern int sys_select(); +extern int sys_symlink(); +extern int sys_lstat(); +extern int sys_readlink(); +extern int sys_uselib(); + +fn_ptr sys_call_table[] = { sys_setup, sys_exit, sys_fork, sys_read, +sys_write, sys_open, sys_close, sys_waitpid, sys_creat, sys_link, +sys_unlink, sys_execve, sys_chdir, sys_time, sys_mknod, sys_chmod, +sys_chown, sys_break, sys_stat, sys_lseek, sys_getpid, sys_mount, +sys_umount, sys_setuid, sys_getuid, sys_stime, sys_ptrace, sys_alarm, +sys_fstat, sys_pause, sys_utime, sys_stty, sys_gtty, sys_access, +sys_nice, sys_ftime, sys_sync, sys_kill, sys_rename, sys_mkdir, +sys_rmdir, sys_dup, sys_pipe, sys_times, sys_prof, sys_brk, sys_setgid, +sys_getgid, sys_signal, sys_geteuid, sys_getegid, sys_acct, sys_phys, +sys_lock, sys_ioctl, sys_fcntl, sys_mpx, sys_setpgid, sys_ulimit, +sys_uname, sys_umask, sys_chroot, sys_ustat, sys_dup2, sys_getppid, +sys_getpgrp, sys_setsid, sys_sigaction, sys_sgetmask, sys_ssetmask, +sys_setreuid,sys_setregid, sys_sigsuspend, sys_sigpending, sys_sethostname, +sys_setrlimit, sys_getrlimit, sys_getrusage, sys_gettimeofday, +sys_settimeofday, sys_getgroups, sys_setgroups, sys_select, sys_symlink, +sys_lstat, sys_readlink, sys_uselib }; + +/* So we don't have to do any more manual updating.... */ +int NR_syscalls = sizeof(sys_call_table)/sizeof(fn_ptr); diff --git a/linux-0.11-lab/0/linux/include/linux/tty.h b/linux-0.11-lab/0/linux/include/linux/tty.h new file mode 100644 index 0000000..ad846b3 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/linux/tty.h @@ -0,0 +1,77 @@ +/* + * 'tty.h' defines some structures used by tty_io.c and some defines. + * + * NOTE! Don't touch this without checking that nothing in rs_io.s or + * con_io.s breaks. Some constants are hardwired into the system (mainly + * offsets into 'tty_queue' + */ + +#ifndef _TTY_H +#define _TTY_H + +#include + +#define TTY_BUF_SIZE 1024 + +struct tty_queue { + unsigned long data; + unsigned long head; + unsigned long tail; + struct task_struct * proc_list; + char buf[TTY_BUF_SIZE]; +}; + +#define INC(a) ((a) = ((a)+1) & (TTY_BUF_SIZE-1)) +#define DEC(a) ((a) = ((a)-1) & (TTY_BUF_SIZE-1)) +#define EMPTY(a) ((a).head == (a).tail) +#define LEFT(a) (((a).tail-(a).head-1)&(TTY_BUF_SIZE-1)) +#define LAST(a) ((a).buf[(TTY_BUF_SIZE-1)&((a).head-1)]) +#define FULL(a) (!LEFT(a)) +#define CHARS(a) (((a).head-(a).tail)&(TTY_BUF_SIZE-1)) +#define GETCH(queue,c) \ +(void)({c=(queue).buf[(queue).tail];INC((queue).tail);}) +#define PUTCH(c,queue) \ +(void)({(queue).buf[(queue).head]=(c);INC((queue).head);}) + +#define INTR_CHAR(tty) ((tty)->termios.c_cc[VINTR]) +#define QUIT_CHAR(tty) ((tty)->termios.c_cc[VQUIT]) +#define ERASE_CHAR(tty) ((tty)->termios.c_cc[VERASE]) +#define KILL_CHAR(tty) ((tty)->termios.c_cc[VKILL]) +#define EOF_CHAR(tty) ((tty)->termios.c_cc[VEOF]) +#define START_CHAR(tty) ((tty)->termios.c_cc[VSTART]) +#define STOP_CHAR(tty) ((tty)->termios.c_cc[VSTOP]) +#define SUSPEND_CHAR(tty) ((tty)->termios.c_cc[VSUSP]) + +struct tty_struct { + struct termios termios; + int pgrp; + int stopped; + void (*write)(struct tty_struct * tty); + struct tty_queue read_q; + struct tty_queue write_q; + struct tty_queue secondary; + }; + +extern struct tty_struct tty_table[]; + +/* intr=^C quit=^| erase=del kill=^U + eof=^D vtime=\0 vmin=\1 sxtc=\0 + start=^Q stop=^S susp=^Z eol=\0 + reprint=^R discard=^U werase=^W lnext=^V + eol2=\0 +*/ +#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0" + +void rs_init(void); +void con_init(void); +void tty_init(void); + +int tty_read(unsigned c, char * buf, int n); +int tty_write(unsigned c, char * buf, int n); + +void rs_write(struct tty_struct * tty); +void con_write(struct tty_struct * tty); + +void copy_to_cooked(struct tty_struct * tty); + +#endif diff --git a/linux-0.11-lab/0/linux/include/signal.h b/linux-0.11-lab/0/linux/include/signal.h new file mode 100644 index 0000000..0eea9a3 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/signal.h @@ -0,0 +1,68 @@ +#ifndef _SIGNAL_H +#define _SIGNAL_H + +#include + +typedef int sig_atomic_t; +typedef unsigned int sigset_t; /* 32 bits */ + +#define _NSIG 32 +#define NSIG _NSIG + +#define SIGHUP 1 +#define SIGINT 2 +#define SIGQUIT 3 +#define SIGILL 4 +#define SIGTRAP 5 +#define SIGABRT 6 +#define SIGIOT 6 +#define SIGUNUSED 7 +#define SIGFPE 8 +#define SIGKILL 9 +#define SIGUSR1 10 +#define SIGSEGV 11 +#define SIGUSR2 12 +#define SIGPIPE 13 +#define SIGALRM 14 +#define SIGTERM 15 +#define SIGSTKFLT 16 +#define SIGCHLD 17 +#define SIGCONT 18 +#define SIGSTOP 19 +#define SIGTSTP 20 +#define SIGTTIN 21 +#define SIGTTOU 22 + +/* Ok, I haven't implemented sigactions, but trying to keep headers POSIX */ +#define SA_NOCLDSTOP 1 +#define SA_NOMASK 0x40000000 +#define SA_ONESHOT 0x80000000 + +#define SIG_BLOCK 0 /* for blocking signals */ +#define SIG_UNBLOCK 1 /* for unblocking signals */ +#define SIG_SETMASK 2 /* for setting the signal mask */ + +#define SIG_DFL ((void (*)(int))0) /* default signal handling */ +#define SIG_IGN ((void (*)(int))1) /* ignore signal */ + +struct sigaction { + void (*sa_handler)(int); + sigset_t sa_mask; + int sa_flags; + void (*sa_restorer)(void); +}; + +void (*signal(int _sig, void (*_func)(int)))(int); +int raise(int sig); +int kill(pid_t pid, int sig); +int sigaddset(sigset_t *mask, int signo); +int sigdelset(sigset_t *mask, int signo); +int sigemptyset(sigset_t *mask); +int sigfillset(sigset_t *mask); +int sigismember(sigset_t *mask, int signo); /* 1 - is, 0 - not, -1 error */ +int sigpending(sigset_t *set); +int sigprocmask(int how, sigset_t *set, sigset_t *oldset); +int sigsuspend(sigset_t *sigmask); +int sigaction(int sig, struct sigaction *act, struct sigaction *oldact); + +#endif /* _SIGNAL_H */ diff --git a/linux-0.11-lab/0/linux/include/stdarg.h b/linux-0.11-lab/0/linux/include/stdarg.h new file mode 100644 index 0000000..fd79ec0 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/stdarg.h @@ -0,0 +1,28 @@ +#ifndef _STDARG_H +#define _STDARG_H + +typedef char *va_list; + +/* Amount of space required in an argument list for an arg of type TYPE. + TYPE may alternatively be an expression whose type is used. */ + +#define __va_rounded_size(TYPE) \ + (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int)) + +#ifndef __sparc__ +#define va_start(AP, LASTARG) \ + (AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG))) +#else +#define va_start(AP, LASTARG) \ + (__builtin_saveregs (), \ + AP = ((char *) &(LASTARG) + __va_rounded_size (LASTARG))) +#endif + +void va_end (va_list); /* Defined in gnulib */ +#define va_end(AP) + +#define va_arg(AP, TYPE) \ + (AP += __va_rounded_size (TYPE), \ + *((TYPE *) (AP - __va_rounded_size (TYPE)))) + +#endif /* _STDARG_H */ diff --git a/linux-0.11-lab/0/linux/include/stddef.h b/linux-0.11-lab/0/linux/include/stddef.h new file mode 100644 index 0000000..97f72ff --- /dev/null +++ b/linux-0.11-lab/0/linux/include/stddef.h @@ -0,0 +1,19 @@ +#ifndef _STDDEF_H +#define _STDDEF_H + +#ifndef _PTRDIFF_T +#define _PTRDIFF_T +typedef long ptrdiff_t; +#endif + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned long size_t; +#endif + +#undef NULL +#define NULL ((void *)0) + +#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) + +#endif diff --git a/linux-0.11-lab/0/linux/include/string.h b/linux-0.11-lab/0/linux/include/string.h new file mode 100644 index 0000000..48b91e5 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/string.h @@ -0,0 +1,405 @@ +#ifndef _STRING_H_ +#define _STRING_H_ + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif + +extern char * strerror(int errno); + +/* + * This string-include defines all string functions as inline + * functions. Use gcc. It also assumes ds=es=data space, this should be + * normal. Most of the string-functions are rather heavily hand-optimized, + * see especially strtok,strstr,str[c]spn. They should work, but are not + * very easy to understand. Everything is done entirely within the register + * set, making the functions fast and clean. String instructions have been + * used through-out, making for "slightly" unclear code :-) + * + * (C) 1991 Linus Torvalds + */ + +extern inline char * strcpy(char * dest,const char *src) +{ +__asm__("cld\n" + "1:\tlodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b" + ::"S" (src),"D" (dest)); +return dest; +} + +extern inline char * strncpy(char * dest,const char *src,int count) +{ +__asm__("cld\n" + "1:\tdecl %2\n\t" + "js 2f\n\t" + "lodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n\t" + "rep\n\t" + "stosb\n" + "2:" + ::"S" (src),"D" (dest),"c" (count)); +return dest; +} + +extern inline char * strcat(char * dest,const char * src) +{ +__asm__("cld\n\t" + "repne\n\t" + "scasb\n\t" + "decl %1\n" + "1:\tlodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b" + ::"S" (src),"D" (dest),"a" (0),"c" (0xffffffff)); +return dest; +} + +extern inline char * strncat(char * dest,const char * src,int count) +{ +__asm__("cld\n\t" + "repne\n\t" + "scasb\n\t" + "decl %1\n\t" + "movl %4,%3\n" + "1:\tdecl %3\n\t" + "js 2f\n\t" + "lodsb\n\t" + "stosb\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n" + "2:\txorl %2,%2\n\t" + "stosb" + ::"S" (src),"D" (dest),"a" (0),"c" (0xffffffff),"g" (count) + ); +return dest; +} + +extern inline int strcmp(const char * cs,const char * ct) +{ +register int __res __asm__("ax"); +__asm__("cld\n" + "1:\tlodsb\n\t" + "scasb\n\t" + "jne 2f\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n\t" + "xorl %%eax,%%eax\n\t" + "jmp 3f\n" + "2:\tmovl $1,%%eax\n\t" + "jl 3f\n\t" + "negl %%eax\n" + "3:" + :"=a" (__res):"D" (cs),"S" (ct)); +return __res; +} + +extern inline int strncmp(const char * cs,const char * ct,int count) +{ +register int __res __asm__("ax"); +__asm__("cld\n" + "1:\tdecl %3\n\t" + "js 2f\n\t" + "lodsb\n\t" + "scasb\n\t" + "jne 3f\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n" + "2:\txorl %%eax,%%eax\n\t" + "jmp 4f\n" + "3:\tmovl $1,%%eax\n\t" + "jl 4f\n\t" + "negl %%eax\n" + "4:" + :"=a" (__res):"D" (cs),"S" (ct),"c" (count)); +return __res; +} + +extern inline char * strchr(const char * s,char c) +{ +register char * __res __asm__("ax"); +__asm__("cld\n\t" + "movb %%al,%%ah\n" + "1:\tlodsb\n\t" + "cmpb %%ah,%%al\n\t" + "je 2f\n\t" + "testb %%al,%%al\n\t" + "jne 1b\n\t" + "movl $1,%1\n" + "2:\tmovl %1,%0\n\t" + "decl %0" + :"=a" (__res):"S" (s),"0" (c)); +return __res; +} + +extern inline char * strrchr(const char * s,char c) +{ +register char * __res __asm__("dx"); +__asm__("cld\n\t" + "movb %%al,%%ah\n" + "1:\tlodsb\n\t" + "cmpb %%ah,%%al\n\t" + "jne 2f\n\t" + "movl %%esi,%0\n\t" + "decl %0\n" + "2:\ttestb %%al,%%al\n\t" + "jne 1b" + :"=d" (__res):"0" (0),"S" (s),"a" (c)); +return __res; +} + +extern inline int strspn(const char * cs, const char * ct) +{ +register char * __res __asm__("si"); +__asm__("cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "movl %%ecx,%%edx\n" + "1:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 2f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "je 1b\n" + "2:\tdecl %0" + :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) + ); +return __res-cs; +} + +extern inline int strcspn(const char * cs, const char * ct) +{ +register char * __res __asm__("si"); +__asm__("cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "movl %%ecx,%%edx\n" + "1:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 2f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "jne 1b\n" + "2:\tdecl %0" + :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) + ); +return __res-cs; +} + +extern inline char * strpbrk(const char * cs,const char * ct) +{ +register char * __res __asm__("si"); +__asm__("cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "movl %%ecx,%%edx\n" + "1:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 2f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "jne 1b\n\t" + "decl %0\n\t" + "jmp 3f\n" + "2:\txorl %0,%0\n" + "3:" + :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct) + ); +return __res; +} + +extern inline char * strstr(const char * cs,const char * ct) +{ +register char * __res __asm__("ax"); +__asm__("cld\n\t" \ + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */ + "movl %%ecx,%%edx\n" + "1:\tmovl %4,%%edi\n\t" + "movl %%esi,%%eax\n\t" + "movl %%edx,%%ecx\n\t" + "repe\n\t" + "cmpsb\n\t" + "je 2f\n\t" /* also works for empty string, see above */ + "xchgl %%eax,%%esi\n\t" + "incl %%esi\n\t" + "cmpb $0,-1(%%eax)\n\t" + "jne 1b\n\t" + "xorl %%eax,%%eax\n\t" + "2:" + :"=a" (__res):"0" (0),"c" (0xffffffff),"S" (cs),"g" (ct) + ); +return __res; +} + +extern inline int strlen(const char * s) +{ +register int __res ; +__asm__("cld\n\t" + "repne\n\t" + "scasb\n\t" + "notl %0\n\t" + "decl %0" + :"=c" (__res):"D" (s),"a" (0),"0" (0xffffffff)); +return __res; +} + +extern char * ___strtok; + +extern inline char * strtok(char * s,const char * ct) +{ +register char * __res __asm__("si"); +__asm__("testl %1,%1\n\t" + "jne 1f\n\t" + "testl %0,%0\n\t" + "je 8f\n\t" + "movl %0,%1\n" + "1:\txorl %0,%0\n\t" + "movl $-1,%%ecx\n\t" + "xorl %%eax,%%eax\n\t" + "cld\n\t" + "movl %4,%%edi\n\t" + "repne\n\t" + "scasb\n\t" + "notl %%ecx\n\t" + "decl %%ecx\n\t" + "je 7f\n\t" /* empty delimeter-string */ + "movl %%ecx,%%edx\n" + "2:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 7f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "je 2b\n\t" + "decl %1\n\t" + "cmpb $0,(%1)\n\t" + "je 7f\n\t" + "movl %1,%0\n" + "3:\tlodsb\n\t" + "testb %%al,%%al\n\t" + "je 5f\n\t" + "movl %4,%%edi\n\t" + "movl %%edx,%%ecx\n\t" + "repne\n\t" + "scasb\n\t" + "jne 3b\n\t" + "decl %1\n\t" + "cmpb $0,(%1)\n\t" + "je 5f\n\t" + "movb $0,(%1)\n\t" + "incl %1\n\t" + "jmp 6f\n" + "5:\txorl %1,%1\n" + "6:\tcmpb $0,(%0)\n\t" + "jne 7f\n\t" + "xorl %0,%0\n" + "7:\ttestl %0,%0\n\t" + "jne 8f\n\t" + "movl %0,%1\n" + "8:" + :"=b" (__res),"=S" (___strtok) + :"0" (___strtok),"1" (s),"g" (ct) + ); +return __res; +} + +extern inline void * memcpy(void * dest,const void * src, int n) +{ +__asm__("cld\n\t" + "rep\n\t" + "movsb" + ::"c" (n),"S" (src),"D" (dest) + ); +return dest; +} + +extern inline void * memmove(void * dest,const void * src, int n) +{ +if (dest + +struct stat { + dev_t st_dev; + ino_t st_ino; + umode_t st_mode; + nlink_t st_nlink; + uid_t st_uid; + gid_t st_gid; + dev_t st_rdev; + off_t st_size; + time_t st_atime; + time_t st_mtime; + time_t st_ctime; +}; + +#define S_IFMT 00170000 +#define S_IFLNK 0120000 +#define S_IFREG 0100000 +#define S_IFBLK 0060000 +#define S_IFDIR 0040000 +#define S_IFCHR 0020000 +#define S_IFIFO 0010000 +#define S_ISUID 0004000 +#define S_ISGID 0002000 +#define S_ISVTX 0001000 + +#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) + +#define S_IRWXU 00700 +#define S_IRUSR 00400 +#define S_IWUSR 00200 +#define S_IXUSR 00100 + +#define S_IRWXG 00070 +#define S_IRGRP 00040 +#define S_IWGRP 00020 +#define S_IXGRP 00010 + +#define S_IRWXO 00007 +#define S_IROTH 00004 +#define S_IWOTH 00002 +#define S_IXOTH 00001 + +extern int chmod(const char *_path, mode_t mode); +extern int fstat(int fildes, struct stat *stat_buf); +extern int mkdir(const char *_path, mode_t mode); +extern int mkfifo(const char *_path, mode_t mode); +extern int stat(const char *filename, struct stat *stat_buf); +extern mode_t umask(mode_t mask); + +#endif diff --git a/linux-0.11-lab/0/linux/include/sys/times.h b/linux-0.11-lab/0/linux/include/sys/times.h new file mode 100644 index 0000000..68d5bfb --- /dev/null +++ b/linux-0.11-lab/0/linux/include/sys/times.h @@ -0,0 +1,15 @@ +#ifndef _TIMES_H +#define _TIMES_H + +#include + +struct tms { + time_t tms_utime; + time_t tms_stime; + time_t tms_cutime; + time_t tms_cstime; +}; + +extern time_t times(struct tms * tp); + +#endif diff --git a/linux-0.11-lab/0/linux/include/sys/types.h b/linux-0.11-lab/0/linux/include/sys/types.h new file mode 100644 index 0000000..557aa31 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/sys/types.h @@ -0,0 +1,46 @@ +#ifndef _SYS_TYPES_H +#define _SYS_TYPES_H + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif + +#ifndef _TIME_T +#define _TIME_T +typedef long time_t; +#endif + +#ifndef _PTRDIFF_T +#define _PTRDIFF_T +typedef long ptrdiff_t; +#endif + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +typedef int pid_t; +typedef unsigned short uid_t; +typedef unsigned char gid_t; +typedef unsigned short dev_t; +typedef unsigned short ino_t; +typedef unsigned short mode_t; +typedef unsigned short umode_t; +typedef unsigned char nlink_t; +typedef int daddr_t; +typedef long off_t; +typedef unsigned char u_char; +typedef unsigned short ushort; + +typedef struct { int quot,rem; } div_t; +typedef struct { long quot,rem; } ldiv_t; + +struct ustat { + daddr_t f_tfree; + ino_t f_tinode; + char f_fname[6]; + char f_fpack[6]; +}; + +#endif diff --git a/linux-0.11-lab/0/linux/include/sys/utsname.h b/linux-0.11-lab/0/linux/include/sys/utsname.h new file mode 100644 index 0000000..0a1c5a0 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/sys/utsname.h @@ -0,0 +1,16 @@ +#ifndef _SYS_UTSNAME_H +#define _SYS_UTSNAME_H + +#include + +struct utsname { + char sysname[9]; + char nodename[9]; + char release[9]; + char version[9]; + char machine[9]; +}; + +extern int uname(struct utsname * utsbuf); + +#endif diff --git a/linux-0.11-lab/0/linux/include/sys/wait.h b/linux-0.11-lab/0/linux/include/sys/wait.h new file mode 100644 index 0000000..53190c2 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/sys/wait.h @@ -0,0 +1,23 @@ +#ifndef _SYS_WAIT_H +#define _SYS_WAIT_H + +#include + +#define _LOW(v) ( (v) & 0377) +#define _HIGH(v) ( ((v) >> 8) & 0377) + +/* options for waitpid, WUNTRACED not supported */ +#define WNOHANG 1 +#define WUNTRACED 2 + +#define WIFEXITED(s) (!((s)&0xFF) +#define WIFSTOPPED(s) (((s)&0xFF)==0x7F) +#define WEXITSTATUS(s) (((s)>>8)&0xFF) +#define WTERMSIG(s) ((s)&0x7F) +#define WSTOPSIG(s) (((s)>>8)&0xFF) +#define WIFSIGNALED(s) (((unsigned int)(s)-1 & 0xFFFF) < 0xFF) + +pid_t wait(int *stat_loc); +pid_t waitpid(pid_t pid, int *stat_loc, int options); + +#endif diff --git a/linux-0.11-lab/0/linux/include/termios.h b/linux-0.11-lab/0/linux/include/termios.h new file mode 100644 index 0000000..2b7b913 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/termios.h @@ -0,0 +1,228 @@ +#ifndef _TERMIOS_H +#define _TERMIOS_H + +#define TTY_BUF_SIZE 1024 + +/* 0x54 is just a magic number to make these relatively uniqe ('T') */ + +#define TCGETS 0x5401 +#define TCSETS 0x5402 +#define TCSETSW 0x5403 +#define TCSETSF 0x5404 +#define TCGETA 0x5405 +#define TCSETA 0x5406 +#define TCSETAW 0x5407 +#define TCSETAF 0x5408 +#define TCSBRK 0x5409 +#define TCXONC 0x540A +#define TCFLSH 0x540B +#define TIOCEXCL 0x540C +#define TIOCNXCL 0x540D +#define TIOCSCTTY 0x540E +#define TIOCGPGRP 0x540F +#define TIOCSPGRP 0x5410 +#define TIOCOUTQ 0x5411 +#define TIOCSTI 0x5412 +#define TIOCGWINSZ 0x5413 +#define TIOCSWINSZ 0x5414 +#define TIOCMGET 0x5415 +#define TIOCMBIS 0x5416 +#define TIOCMBIC 0x5417 +#define TIOCMSET 0x5418 +#define TIOCGSOFTCAR 0x5419 +#define TIOCSSOFTCAR 0x541A +#define TIOCINQ 0x541B + +struct winsize { + unsigned short ws_row; + unsigned short ws_col; + unsigned short ws_xpixel; + unsigned short ws_ypixel; +}; + +#define NCC 8 +struct termio { + unsigned short c_iflag; /* input mode flags */ + unsigned short c_oflag; /* output mode flags */ + unsigned short c_cflag; /* control mode flags */ + unsigned short c_lflag; /* local mode flags */ + unsigned char c_line; /* line discipline */ + unsigned char c_cc[NCC]; /* control characters */ +}; + +#define NCCS 17 +struct termios { + unsigned long c_iflag; /* input mode flags */ + unsigned long c_oflag; /* output mode flags */ + unsigned long c_cflag; /* control mode flags */ + unsigned long c_lflag; /* local mode flags */ + unsigned char c_line; /* line discipline */ + unsigned char c_cc[NCCS]; /* control characters */ +}; + +/* c_cc characters */ +#define VINTR 0 +#define VQUIT 1 +#define VERASE 2 +#define VKILL 3 +#define VEOF 4 +#define VTIME 5 +#define VMIN 6 +#define VSWTC 7 +#define VSTART 8 +#define VSTOP 9 +#define VSUSP 10 +#define VEOL 11 +#define VREPRINT 12 +#define VDISCARD 13 +#define VWERASE 14 +#define VLNEXT 15 +#define VEOL2 16 + +/* c_iflag bits */ +#define IGNBRK 0000001 +#define BRKINT 0000002 +#define IGNPAR 0000004 +#define PARMRK 0000010 +#define INPCK 0000020 +#define ISTRIP 0000040 +#define INLCR 0000100 +#define IGNCR 0000200 +#define ICRNL 0000400 +#define IUCLC 0001000 +#define IXON 0002000 +#define IXANY 0004000 +#define IXOFF 0010000 +#define IMAXBEL 0020000 + +/* c_oflag bits */ +#define OPOST 0000001 +#define OLCUC 0000002 +#define ONLCR 0000004 +#define OCRNL 0000010 +#define ONOCR 0000020 +#define ONLRET 0000040 +#define OFILL 0000100 +#define OFDEL 0000200 +#define NLDLY 0000400 +#define NL0 0000000 +#define NL1 0000400 +#define CRDLY 0003000 +#define CR0 0000000 +#define CR1 0001000 +#define CR2 0002000 +#define CR3 0003000 +#define TABDLY 0014000 +#define TAB0 0000000 +#define TAB1 0004000 +#define TAB2 0010000 +#define TAB3 0014000 +#define XTABS 0014000 +#define BSDLY 0020000 +#define BS0 0000000 +#define BS1 0020000 +#define VTDLY 0040000 +#define VT0 0000000 +#define VT1 0040000 +#define FFDLY 0040000 +#define FF0 0000000 +#define FF1 0040000 + +/* c_cflag bit meaning */ +#define CBAUD 0000017 +#define B0 0000000 /* hang up */ +#define B50 0000001 +#define B75 0000002 +#define B110 0000003 +#define B134 0000004 +#define B150 0000005 +#define B200 0000006 +#define B300 0000007 +#define B600 0000010 +#define B1200 0000011 +#define B1800 0000012 +#define B2400 0000013 +#define B4800 0000014 +#define B9600 0000015 +#define B19200 0000016 +#define B38400 0000017 +#define EXTA B19200 +#define EXTB B38400 +#define CSIZE 0000060 +#define CS5 0000000 +#define CS6 0000020 +#define CS7 0000040 +#define CS8 0000060 +#define CSTOPB 0000100 +#define CREAD 0000200 +#define CPARENB 0000400 +#define CPARODD 0001000 +#define HUPCL 0002000 +#define CLOCAL 0004000 +#define CIBAUD 03600000 /* input baud rate (not used) */ +#define CRTSCTS 020000000000 /* flow control */ + +#define PARENB CPARENB +#define PARODD CPARODD + +/* c_lflag bits */ +#define ISIG 0000001 +#define ICANON 0000002 +#define XCASE 0000004 +#define ECHO 0000010 +#define ECHOE 0000020 +#define ECHOK 0000040 +#define ECHONL 0000100 +#define NOFLSH 0000200 +#define TOSTOP 0000400 +#define ECHOCTL 0001000 +#define ECHOPRT 0002000 +#define ECHOKE 0004000 +#define FLUSHO 0010000 +#define PENDIN 0040000 +#define IEXTEN 0100000 + +/* modem lines */ +#define TIOCM_LE 0x001 +#define TIOCM_DTR 0x002 +#define TIOCM_RTS 0x004 +#define TIOCM_ST 0x008 +#define TIOCM_SR 0x010 +#define TIOCM_CTS 0x020 +#define TIOCM_CAR 0x040 +#define TIOCM_RNG 0x080 +#define TIOCM_DSR 0x100 +#define TIOCM_CD TIOCM_CAR +#define TIOCM_RI TIOCM_RNG + +/* tcflow() and TCXONC use these */ +#define TCOOFF 0 +#define TCOON 1 +#define TCIOFF 2 +#define TCION 3 + +/* tcflush() and TCFLSH use these */ +#define TCIFLUSH 0 +#define TCOFLUSH 1 +#define TCIOFLUSH 2 + +/* tcsetattr uses these */ +#define TCSANOW 0 +#define TCSADRAIN 1 +#define TCSAFLUSH 2 + +typedef int speed_t; + +extern speed_t cfgetispeed(struct termios *termios_p); +extern speed_t cfgetospeed(struct termios *termios_p); +extern int cfsetispeed(struct termios *termios_p, speed_t speed); +extern int cfsetospeed(struct termios *termios_p, speed_t speed); +extern int tcdrain(int fildes); +extern int tcflow(int fildes, int action); +extern int tcflush(int fildes, int queue_selector); +extern int tcgetattr(int fildes, struct termios *termios_p); +extern int tcsendbreak(int fildes, int duration); +extern int tcsetattr(int fildes, int optional_actions, + struct termios *termios_p); + +#endif diff --git a/linux-0.11-lab/0/linux/include/time.h b/linux-0.11-lab/0/linux/include/time.h new file mode 100644 index 0000000..d0a765d --- /dev/null +++ b/linux-0.11-lab/0/linux/include/time.h @@ -0,0 +1,42 @@ +#ifndef _TIME_H +#define _TIME_H + +#ifndef _TIME_T +#define _TIME_T +typedef long time_t; +#endif + +#ifndef _SIZE_T +#define _SIZE_T +typedef unsigned int size_t; +#endif + +#define CLOCKS_PER_SEC 100 + +typedef long clock_t; + +struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; +}; + +clock_t clock(void); +time_t time(time_t * tp); +double difftime(time_t time2, time_t time1); +time_t mktime(struct tm * tp); + +char * asctime(const struct tm * tp); +char * ctime(const time_t * tp); +struct tm * gmtime(const time_t *tp); +struct tm *localtime(const time_t * tp); +size_t strftime(char * s, size_t smax, const char * fmt, const struct tm * tp); +void tzset(void); + +#endif diff --git a/linux-0.11-lab/0/linux/include/unistd.h b/linux-0.11-lab/0/linux/include/unistd.h new file mode 100644 index 0000000..dcbc754 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/unistd.h @@ -0,0 +1,269 @@ +#ifndef _UNISTD_H +#define _UNISTD_H + +/* ok, this may be a joke, but I'm working on it */ +#define _POSIX_VERSION 198808L + +#define _POSIX_CHOWN_RESTRICTED /* only root can do a chown (I think..) */ +#define _POSIX_NO_TRUNC /* no pathname truncation (but see in kernel) */ +#define _POSIX_VDISABLE '\0' /* character to disable things like ^C */ +/*#define _POSIX_SAVED_IDS */ /* we'll get to this yet */ +/*#define _POSIX_JOB_CONTROL */ /* we aren't there quite yet. Soon hopefully */ + +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#define STDERR_FILENO 2 + +#ifndef NULL +#define NULL ((void *)0) +#endif + +/* access */ +#define F_OK 0 +#define X_OK 1 +#define W_OK 2 +#define R_OK 4 + +/* lseek */ +#define SEEK_SET 0 +#define SEEK_CUR 1 +#define SEEK_END 2 + +/* _SC stands for System Configuration. We don't use them much */ +#define _SC_ARG_MAX 1 +#define _SC_CHILD_MAX 2 +#define _SC_CLOCKS_PER_SEC 3 +#define _SC_NGROUPS_MAX 4 +#define _SC_OPEN_MAX 5 +#define _SC_JOB_CONTROL 6 +#define _SC_SAVED_IDS 7 +#define _SC_VERSION 8 + +/* more (possibly) configurable things - now pathnames */ +#define _PC_LINK_MAX 1 +#define _PC_MAX_CANON 2 +#define _PC_MAX_INPUT 3 +#define _PC_NAME_MAX 4 +#define _PC_PATH_MAX 5 +#define _PC_PIPE_BUF 6 +#define _PC_NO_TRUNC 7 +#define _PC_VDISABLE 8 +#define _PC_CHOWN_RESTRICTED 9 + +#include +#include +#include +#include + +#ifdef __LIBRARY__ + +#define __NR_setup 0 /* used only by init, to get system going */ +#define __NR_exit 1 +#define __NR_fork 2 +#define __NR_read 3 +#define __NR_write 4 +#define __NR_open 5 +#define __NR_close 6 +#define __NR_waitpid 7 +#define __NR_creat 8 +#define __NR_link 9 +#define __NR_unlink 10 +#define __NR_execve 11 +#define __NR_chdir 12 +#define __NR_time 13 +#define __NR_mknod 14 +#define __NR_chmod 15 +#define __NR_chown 16 +#define __NR_break 17 +#define __NR_stat 18 +#define __NR_lseek 19 +#define __NR_getpid 20 +#define __NR_mount 21 +#define __NR_umount 22 +#define __NR_setuid 23 +#define __NR_getuid 24 +#define __NR_stime 25 +#define __NR_ptrace 26 +#define __NR_alarm 27 +#define __NR_fstat 28 +#define __NR_pause 29 +#define __NR_utime 30 +#define __NR_stty 31 +#define __NR_gtty 32 +#define __NR_access 33 +#define __NR_nice 34 +#define __NR_ftime 35 +#define __NR_sync 36 +#define __NR_kill 37 +#define __NR_rename 38 +#define __NR_mkdir 39 +#define __NR_rmdir 40 +#define __NR_dup 41 +#define __NR_pipe 42 +#define __NR_times 43 +#define __NR_prof 44 +#define __NR_brk 45 +#define __NR_setgid 46 +#define __NR_getgid 47 +#define __NR_signal 48 +#define __NR_geteuid 49 +#define __NR_getegid 50 +#define __NR_acct 51 +#define __NR_phys 52 +#define __NR_lock 53 +#define __NR_ioctl 54 +#define __NR_fcntl 55 +#define __NR_mpx 56 +#define __NR_setpgid 57 +#define __NR_ulimit 58 +#define __NR_uname 59 +#define __NR_umask 60 +#define __NR_chroot 61 +#define __NR_ustat 62 +#define __NR_dup2 63 +#define __NR_getppid 64 +#define __NR_getpgrp 65 +#define __NR_setsid 66 +#define __NR_sigaction 67 +#define __NR_sgetmask 68 +#define __NR_ssetmask 69 +#define __NR_setreuid 70 +#define __NR_setregid 71 +#define __NR_sigsuspend 72 +#define __NR_sigpending 73 +#define __NR_sethostname 74 +#define __NR_setrlimit 75 +#define __NR_getrlimit 76 +#define __NR_getrusage 77 +#define __NR_gettimeofday 78 +#define __NR_settimeofday 79 +#define __NR_getgroups 80 +#define __NR_setgroups 81 +#define __NR_select 82 +#define __NR_symlink 83 +#define __NR_lstat 84 +#define __NR_readlink 85 +#define __NR_uselib 86 +#define _syscall0(type,name) \ +type name(void) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name)); \ +if (__res >= 0) \ + return (type) __res; \ +errno = -__res; \ +return -1; \ +} + +#define _syscall1(type,name,atype,a) \ +type name(atype a) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(a))); \ +if (__res >= 0) \ + return (type) __res; \ +errno = -__res; \ +return -1; \ +} + +#define _syscall2(type,name,atype,a,btype,b) \ +type name(atype a,btype b) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(a)),"c" ((long)(b))); \ +if (__res >= 0) \ + return (type) __res; \ +errno = -__res; \ +return -1; \ +} + +#define _syscall3(type,name,atype,a,btype,b,ctype,c) \ +type name(atype a,btype b,ctype c) \ +{ \ +long __res; \ +__asm__ volatile ("int $0x80" \ + : "=a" (__res) \ + : "0" (__NR_##name),"b" ((long)(a)),"c" ((long)(b)),"d" ((long)(c))); \ +if (__res>=0) \ + return (type) __res; \ +errno=-__res; \ +return -1; \ +} + +#endif /* __LIBRARY__ */ + +extern int errno; + +int access(const char * filename, mode_t mode); +int acct(const char * filename); +int alarm(int sec); +int brk(void * end_data_segment); +void * sbrk(ptrdiff_t increment); +int chdir(const char * filename); +int chmod(const char * filename, mode_t mode); +int chown(const char * filename, uid_t owner, gid_t group); +int chroot(const char * filename); +int close(int fildes); +int creat(const char * filename, mode_t mode); +int dup(int fildes); +int execve(const char * filename, char ** argv, char ** envp); +int execv(const char * pathname, char ** argv); +int execvp(const char * file, char ** argv); +int execl(const char * pathname, char * arg0, ...); +int execlp(const char * file, char * arg0, ...); +int execle(const char * pathname, char * arg0, ...); +volatile void exit(int status); +volatile void _exit(int status); +int fcntl(int fildes, int cmd, ...); +int fork(void); +int getpid(void); +int getuid(void); +int geteuid(void); +int getgid(void); +int getegid(void); +int ioctl(int fildes, int cmd, ...); +int kill(pid_t pid, int signal); +int link(const char * filename1, const char * filename2); +int lseek(int fildes, off_t offset, int origin); +int mknod(const char * filename, mode_t mode, dev_t dev); +int mount(const char * specialfile, const char * dir, int rwflag); +int nice(int val); +int open(const char * filename, int flag, ...); +int pause(void); +int pipe(int * fildes); +int read(int fildes, char * buf, off_t count); +int setpgrp(void); +int setpgid(pid_t pid,pid_t pgid); +int setuid(uid_t uid); +int setgid(gid_t gid); +void (*signal(int sig, void (*fn)(int)))(int); +int stat(const char * filename, struct stat * stat_buf); +int fstat(int fildes, struct stat * stat_buf); +int stime(time_t * tptr); +int sync(void); +time_t time(time_t * tloc); +time_t times(struct tms * tbuf); +int ulimit(int cmd, long limit); +mode_t umask(mode_t mask); +int umount(const char * specialfile); +int uname(struct utsname * name); +int unlink(const char * filename); +int ustat(dev_t dev, struct ustat * ubuf); +int utime(const char * filename, struct utimbuf * times); +pid_t waitpid(pid_t pid,int * wait_stat,int options); +pid_t wait(int * wait_stat); +int write(int fildes, const char * buf, off_t count); +int dup2(int oldfd, int newfd); +int getppid(void); +pid_t getpgrp(void); +pid_t setsid(void); + +#define __always_inline inline __attribute__((always_inline)) + +#endif diff --git a/linux-0.11-lab/0/linux/include/utime.h b/linux-0.11-lab/0/linux/include/utime.h new file mode 100644 index 0000000..83f07c7 --- /dev/null +++ b/linux-0.11-lab/0/linux/include/utime.h @@ -0,0 +1,13 @@ +#ifndef _UTIME_H +#define _UTIME_H + +#include /* I know - shouldn't do this, but .. */ + +struct utimbuf { + time_t actime; + time_t modtime; +}; + +extern int utime(const char *filename, struct utimbuf *times); + +#endif diff --git a/linux-0.11-lab/0/linux/init/main.c b/linux-0.11-lab/0/linux/init/main.c new file mode 100644 index 0000000..0892fdc --- /dev/null +++ b/linux-0.11-lab/0/linux/init/main.c @@ -0,0 +1,210 @@ +/* + * linux/init/main.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include +#include + +/* + * we need this inline - forking from kernel space will result + * in NO COPY ON WRITE (!!!), until an execve is executed. This + * is no problem, but for the stack. This is handled by not letting + * main() use the stack at all after fork(). Thus, no function + * calls - which means inline code for fork too, as otherwise we + * would use the stack upon exit from 'fork()'. + * + * Actually only pause and fork are needed inline, so that there + * won't be any messing with the stack from main(), but we define + * some others too. + */ + +__always_inline _syscall0(int,fork) +__always_inline _syscall0(int,pause) +__always_inline _syscall1(int,setup,void *,BIOS) +__always_inline _syscall0(int,sync) + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +static char printbuf[1024]; + +extern int vsprintf(); +extern void init(void); +extern void blk_dev_init(void); +extern void chr_dev_init(void); +extern void hd_init(void); +extern void floppy_init(void); +extern void mem_init(long start, long end); +extern long rd_init(long mem_start, int length); +extern long kernel_mktime(struct tm * tm); +extern long startup_time; + +/* + * This is set up by the setup-routine at boot-time + */ +#define EXT_MEM_K (*(unsigned short *)0x90002) +#define DRIVE_INFO (*(struct drive_info *)0x90080) +#define ORIG_ROOT_DEV (*(unsigned short *)0x901FC) + +/* + * Yeah, yeah, it's ugly, but I cannot find how to do this correctly + * and this seems to work. I anybody has more info on the real-time + * clock I'd be interested. Most of this was trial and error, and some + * bios-listing reading. Urghh. + */ + +#define CMOS_READ(addr) ({ \ +outb_p(0x80|addr,0x70); \ +inb_p(0x71); \ +}) + +#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10) + +static void time_init(void) +{ + struct tm time; + + do { + time.tm_sec = CMOS_READ(0); + time.tm_min = CMOS_READ(2); + time.tm_hour = CMOS_READ(4); + time.tm_mday = CMOS_READ(7); + time.tm_mon = CMOS_READ(8); + time.tm_year = CMOS_READ(9); + } while (time.tm_sec != CMOS_READ(0)); + BCD_TO_BIN(time.tm_sec); + BCD_TO_BIN(time.tm_min); + BCD_TO_BIN(time.tm_hour); + BCD_TO_BIN(time.tm_mday); + BCD_TO_BIN(time.tm_mon); + BCD_TO_BIN(time.tm_year); + time.tm_mon--; + startup_time = kernel_mktime(&time); +} + +static long memory_end = 0; +static long buffer_memory_end = 0; +static long main_memory_start = 0; + +struct drive_info { char dummy[32]; } drive_info; + +void main(void) /* This really IS void, no error here. */ +{ /* The startup routine assumes (well, ...) this */ +/* + * Interrupts are still disabled. Do necessary setups, then + * enable them + */ + ROOT_DEV = ORIG_ROOT_DEV; + __asm__ volatile ("cld"); /* by wyj */ + drive_info = DRIVE_INFO; + memory_end = (1<<20) + (EXT_MEM_K<<10); + memory_end &= 0xfffff000; + if (memory_end > 16*1024*1024) + memory_end = 16*1024*1024; + if (memory_end > 12*1024*1024) + buffer_memory_end = 4*1024*1024; + else if (memory_end > 6*1024*1024) + buffer_memory_end = 2*1024*1024; + else + buffer_memory_end = 1*1024*1024; + main_memory_start = buffer_memory_end; +#ifdef RAMDISK + main_memory_start += rd_init(main_memory_start, RAMDISK*1024); +#endif + mem_init(main_memory_start,memory_end); + trap_init(); + blk_dev_init(); + chr_dev_init(); + tty_init(); + time_init(); + sched_init(); + buffer_init(buffer_memory_end); + hd_init(); + floppy_init(); + sti(); + move_to_user_mode(); + if (!fork()) { /* we count on this going ok */ + init(); + } +/* + * NOTE!! For any other task 'pause()' would mean we have to get a + * signal to awaken, but task0 is the sole exception (see 'schedule()') + * as task 0 gets activated at every idle moment (when no other tasks + * can run). For task0 'pause()' just means we go check if some other + * task can run, and if not we return here. + */ + for(;;) pause(); +} + +static int printf(const char *fmt, ...) +{ + va_list args; + int i; + + va_start(args, fmt); + write(1,printbuf,i=vsprintf(printbuf, fmt, args)); + va_end(args); + return i; +} + +static char * argv_rc[] = { "/bin/sh", NULL }; +static char * envp_rc[] = { "HOME=/", NULL, NULL }; + +static char * argv[] = { "-/bin/sh",NULL }; +static char * envp[] = { "HOME=/usr/root", NULL, NULL }; + +void init(void) +{ + int pid,i; + + setup((void *) &drive_info); + (void) open("/dev/tty0",O_RDWR,0); + (void) dup(0); + (void) dup(0); + printf("%d buffers = %d bytes buffer space\n\r",NR_BUFFERS, + NR_BUFFERS*BLOCK_SIZE); + printf("Free mem: %d bytes\n\r",memory_end-main_memory_start); + if (!(pid=fork())) { + close(0); + if (open("/etc/rc",O_RDONLY,0)) + _exit(1); + execve("/bin/sh",argv_rc,envp_rc); + _exit(2); + } + if (pid>0) + while (pid != wait(&i)) + /* nothing */; + while (1) { + if ((pid=fork())<0) { + printf("Fork failed in init\r\n"); + continue; + } + if (!pid) { + close(0);close(1);close(2); + setsid(); + (void) open("/dev/tty0",O_RDWR,0); + (void) dup(0); + (void) dup(0); + _exit(execve("/bin/sh",argv,envp)); + } + while (1) + if (pid == wait(&i)) + break; + printf("\n\rchild %d died with code %04x\n\r",pid,i); + sync(); + } + _exit(0); /* NOTE! _exit, not exit() */ +} diff --git a/linux-0.11-lab/0/linux/init/main.o b/linux-0.11-lab/0/linux/init/main.o new file mode 100644 index 0000000000000000000000000000000000000000..20bade066c6c637fb950d7858a4e12b8dcd54564 GIT binary patch literal 9040 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 UIUey|!5+cgf` tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + (cd chr_drv; make dep) + (cd blk_drv; make dep) + +### Dependencies: +exit.s exit.o : exit.c ../include/errno.h ../include/signal.h \ + ../include/sys/types.h ../include/sys/wait.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/linux/mm.h \ + ../include/linux/kernel.h ../include/linux/tty.h ../include/termios.h \ + ../include/asm/segment.h +fork.s fork.o : fork.c ../include/errno.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/segment.h ../include/asm/system.h +mktime.s mktime.o : mktime.c ../include/time.h +panic.s panic.o : panic.c ../include/linux/kernel.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h +printk.s printk.o : printk.c ../include/stdarg.h ../include/stddef.h \ + ../include/linux/kernel.h +sched.s sched.o : sched.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/linux/kernel.h ../include/linux/sys.h \ + ../include/linux/fdreg.h ../include/asm/system.h ../include/asm/io.h \ + ../include/asm/segment.h +signal.s signal.o : signal.c ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/sys/types.h ../include/linux/mm.h \ + ../include/signal.h ../include/linux/kernel.h ../include/asm/segment.h +sys.s sys.o : sys.c ../include/errno.h ../include/linux/sched.h \ + ../include/linux/head.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/tty.h \ + ../include/termios.h ../include/linux/kernel.h ../include/asm/segment.h \ + ../include/sys/times.h ../include/sys/utsname.h +traps.s traps.o : traps.c ../include/string.h ../include/linux/head.h \ + ../include/linux/sched.h ../include/linux/fs.h ../include/sys/types.h \ + ../include/linux/mm.h ../include/signal.h ../include/linux/kernel.h \ + ../include/asm/system.h ../include/asm/segment.h ../include/asm/io.h +vsprintf.s vsprintf.o : vsprintf.c ../include/stdarg.h ../include/string.h diff --git a/linux-0.11-lab/0/linux/kernel/asm.o b/linux-0.11-lab/0/linux/kernel/asm.o new file mode 100644 index 0000000000000000000000000000000000000000..a89ec75e6e7dea54ae5b8d9b94ba28158b48a77f GIT binary patch literal 1740 zcma)+O=uHQ5XWcRv}sSZ2!7VKN<_gLTB@F^9;`i75B*Zxid{F^*K{@67k4+Yil|sH zrv|)<7wbhmD2RBl?IjkWde90*5b+=$0#XkiyeY()eY^2xiRgpv|Nnb$W-{}d&9$S) z`xHe1e<@H4e+Zz*gMDtmZfJlym?EDGMTQ55PMti_THiEx4rWIp9YYK2@F4#&zm)${ zdN=d3q3K?@?aYKaK6ZL^#Z6j!Eo4c^qL61o9t*iIN>a0?YOGAXEIm;+mxxDna!+$#}~zPg>(|qFzDh#3ziNdZhm7_Gt$HGtt5$ zJb2(2L6$5XS6!9gLaHZMBo4WC>dM&)G@;K)yrt}^F9miX@AvkI_oDBSxC{Lei4UOf zm-sOHL5cg&k4j8uHzb}wuS$Fw{k+6C(HA7XgML}!hv?r*yy$rny5~3eqzG`)Jgcaa zE(!kRc@m2M7T_NN{u$t~^pB$a<^Z<^_)viR13VsJBf!@Kd@I0Ua+O&Yx70Y-8Aw() zvWCvYA?PfYNr0I$z%ZR|;8|u(Ciz8(@r %eax + xchgl %ebx,(%esp) # &function <-> %ebx + pushl %ecx + pushl %edx + pushl %edi + pushl %esi + pushl %ebp + push %ds + push %es + push %fs + pushl %eax # error code + lea 44(%esp),%eax # offset + pushl %eax + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + mov %ax,%fs + call *%ebx + addl $8,%esp + pop %fs + pop %es + pop %ds + popl %ebp + popl %esi + popl %edi + popl %edx + popl %ecx + popl %ebx + popl %eax + iret + +invalid_TSS: + pushl $do_invalid_TSS + jmp error_code + +segment_not_present: + pushl $do_segment_not_present + jmp error_code + +stack_segment: + pushl $do_stack_segment + jmp error_code + +general_protection: + pushl $do_general_protection + jmp error_code + diff --git a/linux-0.11-lab/0/linux/kernel/blk_drv/Makefile b/linux-0.11-lab/0/linux/kernel/blk_drv/Makefile new file mode 100644 index 0000000..1fb57f9 --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/blk_drv/Makefile @@ -0,0 +1,58 @@ +# +# Makefile for the FREAX-kernel block device drivers. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). +# + +AR =ar +AS =as +LD =ld +LDFLAGS =-s -x +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -finline-functions -nostdinc -fno-stack-protector -I../../include +CPP =gcc -E -nostdinc -I../../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< + +OBJS = ll_rw_blk.o floppy.o hd.o ramdisk.o + +blk_drv.a: $(OBJS) + $(AR) rcs blk_drv.a $(OBJS) + sync + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +floppy.s floppy.o : floppy.c ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/sys/types.h ../../include/linux/mm.h \ + ../../include/signal.h ../../include/linux/kernel.h \ + ../../include/linux/fdreg.h ../../include/asm/system.h \ + ../../include/asm/io.h ../../include/asm/segment.h blk.h +hd.s hd.o : hd.c ../../include/linux/config.h ../../include/linux/sched.h \ + ../../include/linux/head.h ../../include/linux/fs.h \ + ../../include/sys/types.h ../../include/linux/mm.h ../../include/signal.h \ + ../../include/linux/kernel.h ../../include/linux/hdreg.h \ + ../../include/asm/system.h ../../include/asm/io.h \ + ../../include/asm/segment.h blk.h +ll_rw_blk.s ll_rw_blk.o : ll_rw_blk.c ../../include/errno.h ../../include/linux/sched.h \ + ../../include/linux/head.h ../../include/linux/fs.h \ + ../../include/sys/types.h ../../include/linux/mm.h ../../include/signal.h \ + ../../include/linux/kernel.h ../../include/asm/system.h blk.h diff --git a/linux-0.11-lab/0/linux/kernel/blk_drv/blk.h b/linux-0.11-lab/0/linux/kernel/blk_drv/blk.h new file mode 100644 index 0000000..7a69b71 --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/blk_drv/blk.h @@ -0,0 +1,140 @@ +#ifndef _BLK_H +#define _BLK_H + +#define NR_BLK_DEV 7 +/* + * NR_REQUEST is the number of entries in the request-queue. + * NOTE that writes may use only the low 2/3 of these: reads + * take precedence. + * + * 32 seems to be a reasonable number: enough to get some benefit + * from the elevator-mechanism, but not so much as to lock a lot of + * buffers when they are in the queue. 64 seems to be too many (easily + * long pauses in reading when heavy writing/syncing is going on) + */ +#define NR_REQUEST 32 + +/* + * Ok, this is an expanded form so that we can use the same + * request for paging requests when that is implemented. In + * paging, 'bh' is NULL, and 'waiting' is used to wait for + * read/write completion. + */ +struct request { + int dev; /* -1 if no request */ + int cmd; /* READ or WRITE */ + int errors; + unsigned long sector; + unsigned long nr_sectors; + char * buffer; + struct task_struct * waiting; + struct buffer_head * bh; + struct request * next; +}; + +/* + * This is used in the elevator algorithm: Note that + * reads always go before writes. This is natural: reads + * are much more time-critical than writes. + */ +#define IN_ORDER(s1,s2) \ +((s1)->cmd<(s2)->cmd || (s1)->cmd==(s2)->cmd && \ +((s1)->dev < (s2)->dev || ((s1)->dev == (s2)->dev && \ +(s1)->sector < (s2)->sector))) + +struct blk_dev_struct { + void (*request_fn)(void); + struct request * current_request; +}; + +extern struct blk_dev_struct blk_dev[NR_BLK_DEV]; +extern struct request request[NR_REQUEST]; +extern struct task_struct * wait_for_request; + +#ifdef MAJOR_NR + +/* + * Add entries as needed. Currently the only block devices + * supported are hard-disks and floppies. + */ + +#if (MAJOR_NR == 1) +/* ram disk */ +#define DEVICE_NAME "ramdisk" +#define DEVICE_REQUEST do_rd_request +#define DEVICE_NR(device) ((device) & 7) +#define DEVICE_ON(device) +#define DEVICE_OFF(device) + +#elif (MAJOR_NR == 2) +/* floppy */ +#define DEVICE_NAME "floppy" +#define DEVICE_INTR do_floppy +#define DEVICE_REQUEST do_fd_request +#define DEVICE_NR(device) ((device) & 3) +#define DEVICE_ON(device) floppy_on(DEVICE_NR(device)) +#define DEVICE_OFF(device) floppy_off(DEVICE_NR(device)) + +#elif (MAJOR_NR == 3) +/* harddisk */ +#define DEVICE_NAME "harddisk" +#define DEVICE_INTR do_hd +#define DEVICE_REQUEST do_hd_request +#define DEVICE_NR(device) (MINOR(device)/5) +#define DEVICE_ON(device) +#define DEVICE_OFF(device) + +#elif (MAJOR_NR > 3) +/* unknown blk device */ +#error "unknown blk device" + +#endif + +#define CURRENT (blk_dev[MAJOR_NR].current_request) +#define CURRENT_DEV DEVICE_NR(CURRENT->dev) + +#ifdef DEVICE_INTR +void (*DEVICE_INTR)(void) = NULL; +#endif +static void (DEVICE_REQUEST)(void); + +static inline void unlock_buffer(struct buffer_head * bh) +{ + if (!bh->b_lock) + printk(DEVICE_NAME ": free buffer being unlocked\n"); + bh->b_lock=0; + wake_up(&bh->b_wait); +} + +static inline void end_request(int uptodate) +{ + DEVICE_OFF(CURRENT->dev); + if (CURRENT->bh) { + CURRENT->bh->b_uptodate = uptodate; + unlock_buffer(CURRENT->bh); + } + if (!uptodate) { + printk(DEVICE_NAME " I/O error\n\r"); + printk("dev %04x, block %d\n\r",CURRENT->dev, + CURRENT->bh->b_blocknr); + } + wake_up(&CURRENT->waiting); + wake_up(&wait_for_request); + CURRENT->dev = -1; + CURRENT = CURRENT->next; +} + +#define INIT_REQUEST \ +repeat: \ + if (!CURRENT) \ + return; \ + if (MAJOR(CURRENT->dev) != MAJOR_NR) \ + panic(DEVICE_NAME ": request list destroyed"); \ + if (CURRENT->bh) { \ + if (!CURRENT->bh->b_lock) \ + panic(DEVICE_NAME ": block not locked"); \ + } + +#endif + +#endif diff --git a/linux-0.11-lab/0/linux/kernel/blk_drv/blk_drv.a b/linux-0.11-lab/0/linux/kernel/blk_drv/blk_drv.a new file mode 100644 index 0000000000000000000000000000000000000000..02751f123aa0c72fe90e820ca24599de825468be GIT binary patch literal 52212 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 +#include +#include +#include +#include +#include +#include + +#define MAJOR_NR 2 +#include "blk.h" + +static int recalibrate = 0; +static int reset = 0; +static int seek = 0; + +extern unsigned char current_DOR; + +#define immoutb_p(val,port) \ +__asm__("outb %0,%1\n\tjmp 1f\n1:\tjmp 1f\n1:"::"a" ((char) (val)),"i" (port)) + +#define TYPE(x) ((x)>>2) +#define DRIVE(x) ((x)&0x03) +/* + * Note that MAX_ERRORS=8 doesn't imply that we retry every bad read + * max 8 times - some types of errors increase the errorcount by 2, + * so we might actually retry only 5-6 times before giving up. + */ +#define MAX_ERRORS 8 + +/* + * globals used by 'result()' + */ +#define MAX_REPLIES 7 +static unsigned char reply_buffer[MAX_REPLIES]; +#define ST0 (reply_buffer[0]) +#define ST1 (reply_buffer[1]) +#define ST2 (reply_buffer[2]) +#define ST3 (reply_buffer[3]) + +/* + * This struct defines the different floppy types. Unlike minix + * linux doesn't have a "search for right type"-type, as the code + * for that is convoluted and weird. I've got enough problems with + * this driver as it is. + * + * The 'stretch' tells if the tracks need to be boubled for some + * types (ie 360kB diskette in 1.2MB drive etc). Others should + * be self-explanatory. + */ +static struct floppy_struct { + unsigned int size, sect, head, track, stretch; + unsigned char gap,rate,spec1; +} floppy_type[] = { + { 0, 0,0, 0,0,0x00,0x00,0x00 }, /* no testing */ + { 720, 9,2,40,0,0x2A,0x02,0xDF }, /* 360kB PC diskettes */ + { 2400,15,2,80,0,0x1B,0x00,0xDF }, /* 1.2 MB AT-diskettes */ + { 720, 9,2,40,1,0x2A,0x02,0xDF }, /* 360kB in 720kB drive */ + { 1440, 9,2,80,0,0x2A,0x02,0xDF }, /* 3.5" 720kB diskette */ + { 720, 9,2,40,1,0x23,0x01,0xDF }, /* 360kB in 1.2MB drive */ + { 1440, 9,2,80,0,0x23,0x01,0xDF }, /* 720kB in 1.2MB drive */ + { 2880,18,2,80,0,0x1B,0x00,0xCF }, /* 1.44MB diskette */ +}; +/* + * Rate is 0 for 500kb/s, 2 for 300kbps, 1 for 250kbps + * Spec1 is 0xSH, where S is stepping rate (F=1ms, E=2ms, D=3ms etc), + * H is head unload time (1=16ms, 2=32ms, etc) + * + * Spec2 is (HLD<<1 | ND), where HLD is head load time (1=2ms, 2=4 ms etc) + * and ND is set means no DMA. Hardcoded to 6 (HLD=6ms, use DMA). + */ + +extern void floppy_interrupt(void); +extern char tmp_floppy_area[1024]; + +/* + * These are global variables, as that's the easiest way to give + * information to interrupts. They are the data used for the current + * request. + */ +static int cur_spec1 = -1; +static int cur_rate = -1; +static struct floppy_struct * floppy = floppy_type; +static unsigned char current_drive = 0; +static unsigned char sector = 0; +static unsigned char head = 0; +static unsigned char track = 0; +static unsigned char seek_track = 0; +static unsigned char current_track = 255; +static unsigned char command = 0; +unsigned char selected = 0; +struct task_struct * wait_on_floppy_select = NULL; + +void floppy_deselect(unsigned int nr) +{ + if (nr != (current_DOR & 3)) + printk("floppy_deselect: drive not selected\n\r"); + selected = 0; + wake_up(&wait_on_floppy_select); +} + +/* + * floppy-change is never called from an interrupt, so we can relax a bit + * here, sleep etc. Note that floppy-on tries to set current_DOR to point + * to the desired drive, but it will probably not survive the sleep if + * several floppies are used at the same time: thus the loop. + */ +int floppy_change(unsigned int nr) +{ +repeat: + floppy_on(nr); + while ((current_DOR & 3) != nr && selected) + interruptible_sleep_on(&wait_on_floppy_select); + if ((current_DOR & 3) != nr) + goto repeat; + if (inb(FD_DIR) & 0x80) { + floppy_off(nr); + return 1; + } + floppy_off(nr); + return 0; +} + +#define copy_buffer(from,to) \ +__asm__("cld ; rep ; movsl" \ + ::"c" (BLOCK_SIZE/4),"S" ((long)(from)),"D" ((long)(to)) \ + ) + +static void setup_DMA(void) +{ + long addr = (long) CURRENT->buffer; + + cli(); + if (addr >= 0x100000) { + addr = (long) tmp_floppy_area; + if (command == FD_WRITE) + copy_buffer(CURRENT->buffer,tmp_floppy_area); + } +/* mask DMA 2 */ + immoutb_p(4|2,10); +/* output command byte. I don't know why, but everyone (minix, */ +/* sanches & canton) output this twice, first to 12 then to 11 */ + __asm__("outb %%al,$12\n\tjmp 1f\n1:\tjmp 1f\n1:\t" + "outb %%al,$11\n\tjmp 1f\n1:\tjmp 1f\n1:":: + "a" ((char) ((command == FD_READ)?DMA_READ:DMA_WRITE))); +/* 8 low bits of addr */ + immoutb_p(addr,4); + addr >>= 8; +/* bits 8-15 of addr */ + immoutb_p(addr,4); + addr >>= 8; +/* bits 16-19 of addr */ + immoutb_p(addr,0x81); +/* low 8 bits of count-1 (1024-1=0x3ff) */ + immoutb_p(0xff,5); +/* high 8 bits of count-1 */ + immoutb_p(3,5); +/* activate DMA 2 */ + immoutb_p(0|2,10); + sti(); +} + +static void output_byte(char byte) +{ + int counter; + unsigned char status; + + if (reset) + return; + for(counter = 0 ; counter < 10000 ; counter++) { + status = inb_p(FD_STATUS) & (STATUS_READY | STATUS_DIR); + if (status == STATUS_READY) { + outb(byte,FD_DATA); + return; + } + } + reset = 1; + printk("Unable to send byte to FDC\n\r"); +} + +static int result(void) +{ + int i = 0, counter, status; + + if (reset) + return -1; + for (counter = 0 ; counter < 10000 ; counter++) { + status = inb_p(FD_STATUS)&(STATUS_DIR|STATUS_READY|STATUS_BUSY); + if (status == STATUS_READY) + return i; + if (status == (STATUS_DIR|STATUS_READY|STATUS_BUSY)) { + if (i >= MAX_REPLIES) + break; + reply_buffer[i++] = inb_p(FD_DATA); + } + } + reset = 1; + printk("Getstatus times out\n\r"); + return -1; +} + +static void bad_flp_intr(void) +{ + CURRENT->errors++; + if (CURRENT->errors > MAX_ERRORS) { + floppy_deselect(current_drive); + end_request(0); + } + if (CURRENT->errors > MAX_ERRORS/2) + reset = 1; + else + recalibrate = 1; +} + +/* + * Ok, this interrupt is called after a DMA read/write has succeeded, + * so we check the results, and copy any buffers. + */ +static void rw_interrupt(void) +{ + if (result() != 7 || (ST0 & 0xf8) || (ST1 & 0xbf) || (ST2 & 0x73)) { + if (ST1 & 0x02) { + printk("Drive %d is write protected\n\r",current_drive); + floppy_deselect(current_drive); + end_request(0); + } else + bad_flp_intr(); + do_fd_request(); + return; + } + if (command == FD_READ && (unsigned long)(CURRENT->buffer) >= 0x100000) + copy_buffer(tmp_floppy_area,CURRENT->buffer); + floppy_deselect(current_drive); + end_request(1); + do_fd_request(); +} + +inline void setup_rw_floppy(void) +{ + setup_DMA(); + do_floppy = rw_interrupt; + output_byte(command); + output_byte(head<<2 | current_drive); + output_byte(track); + output_byte(head); + output_byte(sector); + output_byte(2); /* sector size = 512 */ + output_byte(floppy->sect); + output_byte(floppy->gap); + output_byte(0xFF); /* sector size (0xff when n!=0 ?) */ + if (reset) + do_fd_request(); +} + +/* + * This is the routine called after every seek (or recalibrate) interrupt + * from the floppy controller. Note that the "unexpected interrupt" routine + * also does a recalibrate, but doesn't come here. + */ +static void seek_interrupt(void) +{ +/* sense drive status */ + output_byte(FD_SENSEI); + if (result() != 2 || (ST0 & 0xF8) != 0x20 || ST1 != seek_track) { + bad_flp_intr(); + do_fd_request(); + return; + } + current_track = ST1; + setup_rw_floppy(); +} + +/* + * This routine is called when everything should be correctly set up + * for the transfer (ie floppy motor is on and the correct floppy is + * selected). + */ +static void transfer(void) +{ + if (cur_spec1 != floppy->spec1) { + cur_spec1 = floppy->spec1; + output_byte(FD_SPECIFY); + output_byte(cur_spec1); /* hut etc */ + output_byte(6); /* Head load time =6ms, DMA */ + } + if (cur_rate != floppy->rate) + outb_p(cur_rate = floppy->rate,FD_DCR); + if (reset) { + do_fd_request(); + return; + } + if (!seek) { + setup_rw_floppy(); + return; + } + do_floppy = seek_interrupt; + if (seek_track) { + output_byte(FD_SEEK); + output_byte(head<<2 | current_drive); + output_byte(seek_track); + } else { + output_byte(FD_RECALIBRATE); + output_byte(head<<2 | current_drive); + } + if (reset) + do_fd_request(); +} + +/* + * Special case - used after a unexpected interrupt (or reset) + */ +static void recal_interrupt(void) +{ + output_byte(FD_SENSEI); + if (result()!=2 || (ST0 & 0xE0) == 0x60) + reset = 1; + else + recalibrate = 0; + do_fd_request(); +} + +void unexpected_floppy_interrupt(void) +{ + output_byte(FD_SENSEI); + if (result()!=2 || (ST0 & 0xE0) == 0x60) + reset = 1; + else + recalibrate = 1; +} + +static void recalibrate_floppy(void) +{ + recalibrate = 0; + current_track = 0; + current_drive = 1; /* by wyj, ?? */ + do_floppy = recal_interrupt; + output_byte(FD_RECALIBRATE); + output_byte(head<<2 | current_drive); + if (reset) + do_fd_request(); +} + +static void reset_interrupt(void) +{ + output_byte(FD_SENSEI); + (void) result(); + output_byte(FD_SPECIFY); + output_byte(cur_spec1); /* hut etc */ + output_byte(6); /* Head load time =6ms, DMA */ + do_fd_request(); +} + +/* + * reset is done by pulling bit 2 of DOR low for a while. + */ +static void reset_floppy(void) +{ + int i; + + reset = 0; + cur_spec1 = -1; + cur_rate = -1; + recalibrate = 1; + printk("Reset-floppy called\n\r"); + cli(); + do_floppy = reset_interrupt; + outb_p(current_DOR & ~0x04,FD_DOR); + for (i=0 ; i<100 ; i++) + __asm__("nop"); + outb(current_DOR,FD_DOR); + sti(); +} + +static void floppy_on_interrupt(void) +{ +/* We cannot do a floppy-select, as that might sleep. We just force it */ + selected = 1; + if (current_drive != (current_DOR & 3)) { + current_DOR &= 0xFC; + current_DOR |= current_drive; + outb(current_DOR,FD_DOR); + add_timer(2,&transfer); + } else + transfer(); +} + +void do_fd_request(void) +{ + unsigned int block; + + seek = 0; + if (reset) { + reset_floppy(); + return; + } + if (recalibrate) { + recalibrate_floppy(); + return; + } + INIT_REQUEST; + floppy = (MINOR(CURRENT->dev)>>2) + floppy_type; + if (current_drive != CURRENT_DEV) + seek = 1; + current_drive = CURRENT_DEV; + block = CURRENT->sector; + if (block+2 > floppy->size) { + end_request(0); + goto repeat; + } + sector = block % floppy->sect; + block /= floppy->sect; + head = block % floppy->head; + track = block / floppy->head; + seek_track = track << floppy->stretch; + if (seek_track != current_track) + seek = 1; + sector++; + if (CURRENT->cmd == READ) + command = FD_READ; + else if (CURRENT->cmd == WRITE) + command = FD_WRITE; + else + panic("do_fd_request: unknown command"); + add_timer(ticks_to_floppy_on(current_drive),&floppy_on_interrupt); +} + +void floppy_init(void) +{ + blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; + set_trap_gate(0x26,&floppy_interrupt); + outb(inb_p(0x21)&~0x40,0x21); +} diff --git a/linux-0.11-lab/0/linux/kernel/blk_drv/floppy.o b/linux-0.11-lab/0/linux/kernel/blk_drv/floppy.o new file mode 100644 index 0000000000000000000000000000000000000000..33235bcdcc660371f0cfe6077089e24f2a1c3a96 GIT binary patch literal 16612 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/kernel/blk_drv/hd.c b/linux-0.11-lab/0/linux/kernel/blk_drv/hd.c new file mode 100644 index 0000000..c0e908f --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/blk_drv/hd.c @@ -0,0 +1,351 @@ +/* + * linux/kernel/hd.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This is the low-level hd interrupt support. It traverses the + * request-list, using interrupts to jump between functions. As + * all the functions are called within interrupts, we may not + * sleep. Special care is recommended. + * + * modified by Drew Eckhardt to check nr of hd's from the CMOS. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAJOR_NR 3 +#include "blk.h" + +#define CMOS_READ(addr) ({ \ +outb_p(0x80|addr,0x70); \ +inb_p(0x71); \ +}) + +/* Max read/write errors/sector */ +#define MAX_ERRORS 7 +#define MAX_HD 2 + +static void recal_intr(void); + +static int recalibrate = 0; /* 1, wen */ +static int reset = 0; + +/* + * This struct defines the HD's and their types. + */ +struct hd_i_struct { + int head,sect,cyl,wpcom,lzone,ctl; + }; +#ifdef HD_TYPE +struct hd_i_struct hd_info[] = { HD_TYPE }; +#define NR_HD ((sizeof (hd_info))/(sizeof (struct hd_i_struct))) +#else +struct hd_i_struct hd_info[] = { {0,0,0,0,0,0},{0,0,0,0,0,0} }; +static int NR_HD = 0; +#endif + +static struct hd_struct { + long start_sect; + long nr_sects; +} hd[5*MAX_HD]={{0,0},}; + +#define port_read(port,buf,nr) \ +__asm__("cld;rep;insw"::"d" (port),"D" (buf),"c" (nr)) + +#define port_write(port,buf,nr) \ +__asm__("cld;rep;outsw"::"d" (port),"S" (buf),"c" (nr)) + +extern void hd_interrupt(void); +extern void rd_load(void); + +/* This may be used only once, enforced by 'static int callable' */ +int sys_setup(void * BIOS) +{ + static int callable = 1; + int i,drive; + unsigned char cmos_disks; + struct partition *p; + struct buffer_head * bh; + + if (!callable) + return -1; + callable = 0; +#ifndef HD_TYPE + for (drive=0 ; drive<2 ; drive++) { + hd_info[drive].cyl = *(unsigned short *) BIOS; + hd_info[drive].head = *(unsigned char *) (2+BIOS); + hd_info[drive].wpcom = *(unsigned short *) (5+BIOS); + hd_info[drive].ctl = *(unsigned char *) (8+BIOS); + hd_info[drive].lzone = *(unsigned short *) (12+BIOS); + hd_info[drive].sect = *(unsigned char *) (14+BIOS); + BIOS += 16; + } + if (hd_info[1].cyl) + NR_HD=2; + else + NR_HD=1; +#endif + for (i=0 ; i are the primary drives in the system, and + the ones reflected as drive 1 or 2. + + The first drive is stored in the high nibble of CMOS + byte 0x12, the second in the low nibble. This will be + either a 4 bit drive type or 0xf indicating use byte 0x19 + for an 8 bit type, drive 1, 0x1a for drive 2 in CMOS. + + Needless to say, a non-zero value means we have + an AT controller hard disk for that drive. + + + */ + + if ((cmos_disks = CMOS_READ(0x12)) & 0xf0) + if (cmos_disks & 0x0f) + NR_HD = 2; + else + NR_HD = 1; + else + NR_HD = 0; + for (i = NR_HD ; i < 2 ; i++) { + hd[i*5].start_sect = 0; + hd[i*5].nr_sects = 0; + } + for (drive=0 ; driveb_data[510] != 0x55 || (unsigned char) + bh->b_data[511] != 0xAA) { + printk("Bad partition table on drive %d\n\r",drive); + panic(""); + } + p = 0x1BE + (void *)bh->b_data; + for (i=1;i<5;i++,p++) { + hd[i+5*drive].start_sect = p->start_sect; + hd[i+5*drive].nr_sects = p->nr_sects; + } + brelse(bh); + } + if (NR_HD) + printk("Partition table%s ok.\n\r",(NR_HD>1)?"s":""); + rd_load(); + mount_root(); + return (0); +} + +static int controller_ready(void) +{ + /* int retries=10000; */ + int retries=100000; + + /* while (--retries && (inb_p(HD_STATUS)&0xc0)!=0x40); */ + while (--retries && (inb_p(HD_STATUS)&0x80)); + return (retries); +} + +static int win_result(void) +{ + int i=inb_p(HD_STATUS); + + if ((i & (BUSY_STAT | READY_STAT | WRERR_STAT | SEEK_STAT | ERR_STAT)) + == (READY_STAT | SEEK_STAT)) + return(0); /* ok */ + if (i&1) i=inb(HD_ERROR); + return (1); +} + +static void hd_out(unsigned int drive,unsigned int nsect,unsigned int sect, + unsigned int head,unsigned int cyl,unsigned int cmd, + void (*intr_addr)(void)) +{ + register int port asm("dx"); + + if (drive>1 || head>15) + panic("Trying to write bad sector"); + if (!controller_ready()) + panic("HD controller not ready"); + do_hd = intr_addr; + outb_p(hd_info[drive].ctl,HD_CMD); + port=HD_DATA; + outb_p(hd_info[drive].wpcom>>2,++port); + outb_p(nsect,++port); + outb_p(sect,++port); + outb_p(cyl,++port); + outb_p(cyl>>8,++port); + outb_p(0xA0|(drive<<4)|head,++port); + outb(cmd,++port); +} + +static int drive_busy(void) +{ + unsigned int i; + + for (i = 0; i < 10000; i++) + if (READY_STAT == (inb_p(HD_STATUS) & (BUSY_STAT|READY_STAT))) + break; + i = inb(HD_STATUS); + i &= BUSY_STAT | READY_STAT | SEEK_STAT; + if (i == READY_STAT | SEEK_STAT) + return(0); + printk("HD controller times out\n\r"); + return(1); +} + +static void reset_controller(void) +{ + int i; + + outb(4,HD_CMD); + for(i = 0; i < 100; i++) nop(); + outb(hd_info[0].ctl & 0x0f ,HD_CMD); + if (drive_busy()) + printk("HD-controller still busy\n\r"); + if ((i = inb(HD_ERROR)) != 1) + printk("HD-controller reset failed: %02x\n\r",i); +} + +static void reset_hd(int nr) +{ + reset_controller(); + hd_out(nr,hd_info[nr].sect,hd_info[nr].sect,hd_info[nr].head-1, + hd_info[nr].cyl,WIN_SPECIFY,&recal_intr); +} + +void unexpected_hd_interrupt(void) +{ + printk("Unexpected HD interrupt\n\r"); +} + +static void bad_rw_intr(void) +{ + if (++CURRENT->errors >= MAX_ERRORS) + end_request(0); + if (CURRENT->errors > MAX_ERRORS/2) + reset = 1; +} + +static void read_intr(void) +{ + if (win_result()) { + bad_rw_intr(); + do_hd_request(); + return; + } + port_read(HD_DATA,CURRENT->buffer,256); + CURRENT->errors = 0; + CURRENT->buffer += 512; + CURRENT->sector++; + if (--CURRENT->nr_sectors) { + do_hd = &read_intr; + return; + } + end_request(1); + do_hd_request(); +} + +static void write_intr(void) +{ + if (win_result()) { + bad_rw_intr(); + do_hd_request(); + return; + } + if (--CURRENT->nr_sectors) { + CURRENT->sector++; + CURRENT->buffer += 512; + do_hd = &write_intr; + port_write(HD_DATA,CURRENT->buffer,256); + return; + } + end_request(1); + do_hd_request(); +} + +static void recal_intr(void) +{ + if (win_result()) + bad_rw_intr(); + do_hd_request(); +} + +void do_hd_request(void) +{ + int i,r; + unsigned int block,dev; + unsigned int sec,head,cyl; + unsigned int nsect; + + INIT_REQUEST; + dev = MINOR(CURRENT->dev); + block = CURRENT->sector; + if (dev >= 5*NR_HD || block+2 > hd[dev].nr_sects) { + end_request(0); + goto repeat; + } + block += hd[dev].start_sect; + dev /= 5; + __asm__("divl %4":"=a" (block),"=d" (sec):"0" (block),"1" (0), + "r" (hd_info[dev].sect)); + __asm__("divl %4":"=a" (cyl),"=d" (head):"0" (block),"1" (0), + "r" (hd_info[dev].head)); + sec++; + nsect = CURRENT->nr_sectors; + if (reset) { + reset = 0; + recalibrate = 1; + reset_hd(CURRENT_DEV); + return; + } + if (recalibrate) { + recalibrate = 0; + hd_out(dev,hd_info[CURRENT_DEV].sect,0,0,0, + WIN_RESTORE,&recal_intr); + return; + } + if (CURRENT->cmd == WRITE) { + hd_out(dev,nsect,sec,head,cyl,WIN_WRITE,&write_intr); + for(i=0 ; i<3000 && !(r=inb_p(HD_STATUS)&DRQ_STAT) ; i++) + /* nothing */ ; + if (!r) { + bad_rw_intr(); + goto repeat; + } + port_write(HD_DATA,CURRENT->buffer,256); + } else if (CURRENT->cmd == READ) { + hd_out(dev,nsect,sec,head,cyl,WIN_READ,&read_intr); + } else + panic("unknown hd-command"); +} + +void hd_init(void) +{ + blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; + set_intr_gate(0x2E,&hd_interrupt); + outb_p(inb_p(0x21)&0xfb,0x21); + outb(inb_p(0xA1)&0xbf,0xA1); +} diff --git a/linux-0.11-lab/0/linux/kernel/blk_drv/hd.o b/linux-0.11-lab/0/linux/kernel/blk_drv/hd.o new file mode 100644 index 0000000000000000000000000000000000000000..bf2b0d10bc58477ea1758f63f765ba3eab8d6225 GIT binary patch literal 15520 zcmb7r4S1B*weJ4D`N{VsLlQ^=0ip~z(WvAHj5hLTKm-CoqeaVK874CmGG;Op=Ld*d zstvZpv}$_psXY~ooN`V*ZK#jN~fe*L!GKpQ`ErQ zHABlo!3SF>?LL|hobZNNHu}-|^XDmkzIBo!4je5X^oF!};JKRPsI4;;1rnw%%2xy!Eewdy7$R}w_EmuRu3G_7ayX^TaS8_I^m;?pA*YNb;P$`#smFp?HW>L zKRh+m9;zFB!8mHXaO{jnD-U*9EFL&&KB&r`zL-L}Q||lA76OijbrB2YXnwH6>nH>+ zWJVqz+S+@0Gup8k6t0xbw=4kbqq@oWf-2o3Ez59CcbBj9hymj7|aEzvv*JUyP%d`hzk* z&{7TR)u?7 zVZ7xVU>M)v;3;>)a1sx-dJq2r>7vv8@bAzDR-53&)n=$QaO|8pcx>=g>)^A4FKAUw z!)|B-S2uxc(j1hUj*VIqt3wz(cE($R90)uyvBG5~b`>=hRTRmUCCsXdC) zfpe{S^K2>7AaFlMsq6}+w*SnnfKV1Al*LXc1NX;5fm5g>~?fUqdLx5#k`?+P@scfFmf}|+)SrAZNSJ?qR%ywa{VGqO8G(J3Zfm7r8i-^^#!Q&SZw|WPUU0lqG)`X5#|IyNGL*+2659UJU zgPTKv!FFtN>q6c^%%!jY2|MF+p-o#5lp1udaop8{4YtEt#yzOj8aU_QHMTw9dv0vk zLxE=(mi2XL#!1|oJrm!A?%Fz|BV^ita!zexLG(Xf)V6W}t&3()xXGiaa(~j~59s4ypmL7Lz z1)T|sGYorRbmT)FBj4x{ma$Q0=D>3S?dCdd5fj|^)+oB~*jJceh__D0c63mumQ$qP zgl4+*`0G^fL^V}=9*rP7my2oubn8$RS5Vni7NT(bRHRYsmpV+q@*(d}xF}!$>~_W# zlp4L~4|u29$V_(1w?b&p(7Mp_LodJd(o66EC#;Q{Y>2W8l6{qatzPU~We@zlQ>&Ueh1!)(;8CLmHTf3S4CMRVA|Qj)RA}*~56+)Qop!c( z){8i`V}We{VTn?ot#ubjd9i84s?~^9Yv2rDdRJk8S*3C>YseRm{ux>M*1cFC9M>+I z)pxjVBSn{>)oM;WdK~=!@OTD1KFd{wLm=zqI;==oKgv(|s$r?p#yZi5(vch( zTdHgDRM%nk(4a9`acDO5#y4qq2d@1P;=?S{yVIfl6SPVZfKmjY_8Dri47*VIrsEUN zE09k3bVo9=SR&iAAlQ|O$Ag{uuC90{*cnfxwgvO4WIEatj}0%>|PQJYt|S>Hc`EK*5O^{c=LA@~NIwdPgeQ9fO0ty^&N*ZGul+ zKJheO!qez7lsf82)Wdob;s~-DC6>p#0^o@#kB@}%bPDBFUT@K6EVjOB6#Ka*`fKs% z#Q8)8{Cd+Uc>*_aK&5&amcrP zDGF?!fqgfTRQ6J~xq{Ak?FPzM?#9!yzlAfPZ`Ba!Vmn2hHqs^b=TOVHnsmTEPWc+r zlkClGwtWqr<#r1i^sT)WbftZO^v$HJ?Ss_6g>;Sm&$QD)I;e`hkJI+OX!3~1e>08P z++zG4?18fR?&!Z&_s0G;Z1`^@ZQ0$h?f)d{fPFW0*8R+n_5j zX$F4I+UwcdYBO*rOEgns2JV2&VS?tQ&P63sN3 zfi#`bOtTqyjHWfyVg|lFRyHT^%3_QqAYG#=kIF0T*%yM(mHmYr++6ps} zqXEsVG6Of#v}RVDf&V14neMckfzQ*OPm}2|12bq%GwaO2rZHx{892c@x@5B%C>tx; zY6iYX16$Z=%$$_V^(+5Y#;w~79AHU=B}v3!2YlwC?>Y{>jwuVHxZGbbfuIpy#EFEFRjPByFjckYH6ylWJDSHeWG_W;}5jmI_^ z(dlm~^OMkN@qKzdOxgbpa-Vip*$W}}g{f`YVN~~RWuspEr__m%w(KFMUZ<0`c}RRw zCvBtDiG2#sQu}|PJ*1oL zcG5}OpKn{Fdr4no-$UP0q?_&ANT*3(Yu`k=kMwo+zta9)q(7m|Kf{%BUykv#xdr+1 zY(UwMlHN|*wCAzH4$@xx7#rJ3b<6hP>FehWLjdt)7=6#9T2WD&)i_(qi<;hnlD!YL zist$ol~T2gau}wC@?x(-iTNb#C;fE{g(u1! zxsti4JXz9Lk@k9Wq^~AzdAbsP%0HKMz|$2)7Sxk2_jIMx%HKe`5;WwEq^s=;bk*NP z^EJv(5tBwIM};!Kiypn|zlIBdZBwzC8p{3=>1#=QJ=tuN@?S^VvVTnZCrAe%pQrpS zq|5EE;OW1fbS32Tm45;0YELwCjq)!fUE_(<@kOMAb{6gW7n2To;*p)ozl3z1Cmwa_ zxt@5;rJFqQPM2=>#Ivw-1NB=V2i;0~5#$NwUrM?abwMv9y&Q7ozmeoB55u*bWIMc6 z{+md4cw!(|kX+~K0=bgpde1hHt4MD4=$Y3>daKP%#lM<#%-)Eh^RFpFJiC?u`xsNs zR2|w`%Kr{%ekIh!Ud}+hIr;G3rKP4azX(I+R`Y`p+52G5x|Uh2?0zU)*O4~t-yrDL zCrF!~Xn#^!Eu=kmCmOb{C+)S*Q-1+zpN&S9wUD&mewa2FkuI|Dqn*XfWXs;ex=Tn0 zlz9!9kTK1~8>|PfJ<6!odFqMw#*{IgwAWsP%Ek;Quj!C6a|J8g^=R0rAzf~tBYg>X z$V!_xCB~&(7OFj+-O8BdY+xs#Xaw03H!ybFW0P?cc){hxY2&IJ9M7h2|YPU@t~phc5R-b4j5qm3b$FV77ddMj0Ga zXRy-2F?9xe)#M-1r8pc?*WzpJ{a0vDVUObMk%`0lO79|3ssEKZ{r8iic@sB}wR2Eu!CTRP#Zu)YODBS35?MRTQ{fcU2v{H}!jj zIovt5PnqraYa_9#@XpjP66WycX%E4VN?HnUSLSD!3FdGV!Soh;nTXRpY=1wS_ySzK z4ruIs9)_ysu;75x_ReXKqj1d3HytxOP<<)A_%^lv1sYp)^-GH##}7J{b2Io_$I5;d z(2s+TfqT@n4^hOEmll8D5oZz8%ON+Po(b!}(Kf$9=v4n$CMx^CfZ?CRG=udq0%U z{nRnOb4C@4*tyr;&b{JBXW9xBjdkwlju=bFZv4m4VEusnkrHw%-}R&@x=c-kO^z`2ANPSmFq7V~;=L z>F;l};F3HAWd={MUvebh;MmVLcq27KOD;Xh0M!{h-5Dq}_I?_#=(CWWR~h2;EV$t^ z-N8<_dbQyMY3nR5D`RYI7S1usoGYc9gL<@FcHJyJTrRslsK>cplsjhcqUAoA1t;&;9e5JdjAeLGoyQAZ<*PS;Qt}=hNhJuW>YY=s@V%HZR72`b{=&+nBi#B<(Um?yt%Q)@Ve6=O%*t=)FmSI zO^{wH4HZghdzSd;YpY<-g5tffvx}V;e3OwTbH;i-W<-3wY`l{DAk$lY3Qcm?pQ-qBQ94Ufx%pVUpxyEEp`zh%0|26QkqR{OGT0pV~%vkGVyJW z1~OQ??|D-hiw}+ryt#JC$eX{$HBp$)`C7 z@5K(J;5RIKD&8sV{B}d3w^uajMZY@5d%{uKkUcRdJAMx+>^c|L}o+)n(Yx3)OnmIf? z>;3O-*sx*K5{e(7)c+m7m0z=VvGv3+@)VNaw&9i=G@bM3M}|j+tf8knFRDDOe1ZwOh3LNANUtbl)JQyLH%a?R#%T7h4T} zYs1LKH?1XBn>Ei`Xf>@F8Q!@ZV#lmu(cJpoFRm*YVmyL$?J)X+ua3>eWGuop%!`!>@jN~HB zRI(__1V7TyLaLCBiAphMp{lNG{PES9$#$yFpYq z*34J>RxXU~BHtUy_NcB%t~;Jl`D{EE?gfqVXe62F%tUf=m5T4osg*b19=tKw+|bg{ z9IWq+WTM@R6W6p{2RfRJ1?#s3>$}puiCleGCejAay*o2Ch<7Upj*^;{|P)x1y>O;~VCvpc~8aH^+A(wAw0%lxwj{ z-knatQM&EiriZ&>024#srNc1}2in$ZdT8lX+?f&RS48I;jWZg)^^J$Q9JBirBXIXYsEX}o{ zu{+%xZ%pN5xyE$1J{8~L?6dVv4fE#JV|F$+IfBNXcqSE3HtO0LtYJ>vI4If^BnUIp zNk<(+C!$!u^y(AsO=qE!#iHd-EhHTJu_KX!-`RYU1FaLW7lGh7W8QI0*bmNN#86g8 zOdUPrb6D0~nS?g0QaU^J5Ok##n(xLB1o&kGQ5c^Z5jKe*KRATanhwWU1haH4;pATi zYlu=SZ@h6qu z0^f%C;rU+OSQ@;m)T`yqBIB8#a`UlLZxCcVzOUlTGrn3{Y7Lk-mbQ8hdP=RO$5B<+ z?L(1!+(zBXjM&@*xqFVL+}v2|r4LWw>z;*mTW>k?Ly)^iQ?1|W$WKA;9xowpGW$!t zb&!qX>z*Fz+vm-trGWttH6AGqz&~s0^RADT=)Zf6WSh5$kNkTf_cTfQ-H_Ava>(67 zC2fDfwH-8v#r6r>rY?UU?6sWZ<^(^2<^vb{u@}1TK@{zk-y!Ysw-EO@I>E+P&j)6K zks#VT16}tlNL`LewV88=1b5Nd{$6Yuz+A?`ZkNi$lMOlUwGDcEZ|KC;VMB%sb_9sR zSiCd84JnD-6*|({$(5p@G?Iy=wqZpr5OD)`E1)gaz+c9&B&Y`ba29XC&hG5TPMvr+ z_5keR=*<7)XBPC(ZG{t!{xDw)-{M)u&rE!AmLB_TorkMZj1x{Ex<1bU7%EjOJky$= z=Ww27nfr0+t0ADit9J%^|L7_KgF-g}>4S69z!*XAG1n=`U3-f}51>Ey;Dj2+LD&7b zRazh@?8lRsuv^i2_Jc8S`>_hNTL+~24+LP5>qJ4>#sZppQ!gF&oxE$~4$y_|T5z}= zGPX;(+iovtw+={k9qc`Gk#-X(E3{V)dyFUT;aECmuOBq+F^>HFR}k~tr%C-_8Na&) zUAe<6?`r@lwEfp+&4+GqZ{dkJ|i9qt}NJ_+94JILcUcWlofzX!a#SCGdo_Sia1 zelK`;A0YoEcz69L|9$Z8`b_>Pcz4YwU-yb7A{0aMW5 zl7cSN8{XTvAM(>K;4i&^zx)Dz9(Z?uru{bX?jA?})(iA+zkqj6XcOP5`EKaG>lL0g zopY3PPR1LkdkSor*V5el@xw&H`=Pu=7aY1i_Ok2=+I@)+G_#a96bAm4k{&%8Bep>;~KyDbdN-Y%JEch8g{xr$* zX9RyK_$Cn(=v~3d*ayg8LxlcH!LVRb%K3`}^_~^{so;MIzApHo;AHqn{k1?7`wf4Y zXB?8`XX8##_?_hIl==tZ`TI7@e<1u}DgWQ(VQ(_NME;6tV&Az=c>ZQW`OSj-?UwC@ z1@9E(pRdq_>rWjhB2pCLm3I1&0UhDyUU0uZx_5nFf8SJg#WVOV>zhdb5bA$3H$b@CRjA3N{e&{(@o0FY)}b z9#|vm3b0Ce6zTdHV*E0%)a4>?6TDflN093a?eq(NLGU3#z0RQg3E}@v@Oy&)B6w2p z-vs}s;BN#!5cC=1x8Nm$R|;M$xJrXOP_3jbeBly>Xe=GQu;1R)-f_gne{XYp`>~ZW( z6ATG<3+4px6a1p!R|O9U{-fX#!50Ky6+9#Ow%|EIFLIv!DHp5}tP^Y&Y!z%5+#nbi zyi4#if`fwm<4M|oQt+PypAmdf@U-CTf)?fm>vao0AjqG9DSup$e_2KTWx+oQ{*db= z=Mif?h+gld`fUc@Py#c1z!{VgP>kl;fG#VfwQ^( z0UHDt2(A#^B6z3ZfZ)S|dYwi6Cx!nm5xMoE@UIAeM)-FGKM=Xa^$_)^3eF)SH?9$W zsbDt|cJ~PXW#RV=|CI12gnvc&w*`x2eVj!^d$qzh3$NE-$UB7JBBE&ScW-zWT#@Lv}Gap4aL|CI1g3;&w% z0j}F<_bS2b1zU;m|0cmLB99B76MRJQAEf*TM9h)H!apzki^884{(Zq|I1aJ>IfC_q z*As(yuMvJDu~zn%YUlh+{|<2720~StK%PB`9fCQ*FA7qh#@^1+KANZZ>Jpcdz literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/kernel/blk_drv/ll_rw_blk.c b/linux-0.11-lab/0/linux/kernel/blk_drv/ll_rw_blk.c new file mode 100644 index 0000000..f57d998 --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/blk_drv/ll_rw_blk.c @@ -0,0 +1,165 @@ +/* + * linux/kernel/blk_dev/ll_rw.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This handles all read/write requests to block devices + */ +#include +#include +#include +#include + +#include "blk.h" + +/* + * The request-struct contains all necessary data + * to load a nr of sectors into memory + */ +struct request request[NR_REQUEST]; + +/* + * used to wait on when there are no free requests + */ +struct task_struct * wait_for_request = NULL; + +/* blk_dev_struct is: + * do_request-address + * next-request + */ +struct blk_dev_struct blk_dev[NR_BLK_DEV] = { + { NULL, NULL }, /* no_dev */ + { NULL, NULL }, /* dev mem */ + { NULL, NULL }, /* dev fd */ + { NULL, NULL }, /* dev hd */ + { NULL, NULL }, /* dev ttyx */ + { NULL, NULL }, /* dev tty */ + { NULL, NULL } /* dev lp */ +}; + +static inline void lock_buffer(struct buffer_head * bh) +{ + cli(); + while (bh->b_lock) + sleep_on(&bh->b_wait); + bh->b_lock=1; + sti(); +} + +static inline void unlock_buffer(struct buffer_head * bh) +{ + if (!bh->b_lock) + printk("ll_rw_block.c: buffer not locked\n\r"); + bh->b_lock = 0; + wake_up(&bh->b_wait); +} + +/* + * add-request adds a request to the linked list. + * It disables interrupts so that it can muck with the + * request-lists in peace. + */ +static void add_request(struct blk_dev_struct * dev, struct request * req) +{ + struct request * tmp; + + req->next = NULL; + cli(); + if (req->bh) + req->bh->b_dirt = 0; + if (!(tmp = dev->current_request)) { + dev->current_request = req; + sti(); + (dev->request_fn)(); + return; + } + for ( ; tmp->next ; tmp=tmp->next) + if ((IN_ORDER(tmp,req) || + !IN_ORDER(tmp,tmp->next)) && + IN_ORDER(req,tmp->next)) + break; + req->next=tmp->next; + tmp->next=req; + sti(); +} + +static void make_request(int major,int rw, struct buffer_head * bh) +{ + struct request * req; + int rw_ahead; + +/* WRITEA/READA is special case - it is not really needed, so if the */ +/* buffer is locked, we just forget about it, else it's a normal read */ + if (rw_ahead = (rw == READA || rw == WRITEA)) { + if (bh->b_lock) + return; + if (rw == READA) + rw = READ; + else + rw = WRITE; + } + if (rw!=READ && rw!=WRITE) + panic("Bad block dev command, must be R/W/RA/WA"); + lock_buffer(bh); + if ((rw == WRITE && !bh->b_dirt) || (rw == READ && bh->b_uptodate)) { + unlock_buffer(bh); + return; + } +repeat: +/* we don't allow the write-requests to fill up the queue completely: + * we want some room for reads: they take precedence. The last third + * of the requests are only for reads. + */ + if (rw == READ) + req = request+NR_REQUEST; + else + req = request+((NR_REQUEST*2)/3); +/* find an empty request */ + while (--req >= request) + if (req->dev<0) + break; +/* if none found, sleep on new requests: check for rw_ahead */ + if (req < request) { + if (rw_ahead) { + unlock_buffer(bh); + return; + } + sleep_on(&wait_for_request); + goto repeat; + } +/* fill up the request-info, and add it to the queue */ + req->dev = bh->b_dev; + req->cmd = rw; + req->errors=0; + req->sector = bh->b_blocknr<<1; + req->nr_sectors = 2; + req->buffer = bh->b_data; + req->waiting = NULL; + req->bh = bh; + req->next = NULL; + add_request(major+blk_dev,req); +} + +void ll_rw_block(int rw, struct buffer_head * bh) +{ + unsigned int major; + + if ((major=MAJOR(bh->b_dev)) >= NR_BLK_DEV || + !(blk_dev[major].request_fn)) { + printk("Trying to read nonexistent block-device\n\r"); + return; + } + make_request(major,rw,bh); +} + +void blk_dev_init(void) +{ + int i; + + for (i=0 ; iYkGs}N`|^F* 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 + +#include +#include +#include +#include +#include +#include +#include + +#define MAJOR_NR 1 +#include "blk.h" + +char *rd_start; +int rd_length = 0; + +void do_rd_request(void) +{ + int len; + char *addr; + + INIT_REQUEST; + addr = rd_start + (CURRENT->sector << 9); + len = CURRENT->nr_sectors << 9; + if ((MINOR(CURRENT->dev) != 1) || (addr+len > rd_start+rd_length)) { + end_request(0); + goto repeat; + } + if (CURRENT-> cmd == WRITE) { + (void ) memcpy(addr, + CURRENT->buffer, + len); + } else if (CURRENT->cmd == READ) { + (void) memcpy(CURRENT->buffer, + addr, + len); + } else + panic("unknown ramdisk-command"); + end_request(1); + goto repeat; +} + +/* + * Returns amount of memory which needs to be reserved. + */ +long rd_init(long mem_start, int length) +{ + int i; + char *cp; + + blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST; + rd_start = (char *) mem_start; + rd_length = length; + cp = rd_start; + for (i=0; i < length; i++) + *cp++ = '\0'; + return(length); +} + +/* + * If the root device is the ram disk, try to load it. + * In order to do this, the root device is originally set to the + * floppy, and we later change it to be ram disk. + */ +void rd_load(void) +{ + struct buffer_head *bh; + struct super_block s; + int block = 256; /* Start at block 256 */ + int i = 1; + int nblocks; + char *cp; /* Move pointer */ + + if (!rd_length) + return; + printk("Ram disk: %d bytes, starting at 0x%x\n", rd_length, + (int) rd_start); + if (MAJOR(ROOT_DEV) != 2) + return; + bh = breada(ROOT_DEV,block+1,block,block+2,-1); + if (!bh) { + printk("Disk error while looking for ramdisk!\n"); + return; + } + __asm__ volatile ("cld"); /* by wyj */ + *((struct d_super_block *) &s) = *((struct d_super_block *) bh->b_data); + brelse(bh); + if (s.s_magic != SUPER_MAGIC) + /* No ram disk image present, assume normal floppy boot */ + return; + nblocks = s.s_nzones << s.s_log_zone_size; + if (nblocks > (rd_length >> BLOCK_SIZE_BITS)) { + printk("Ram disk image too big! (%d blocks, %d avail)\n", + nblocks, rd_length >> BLOCK_SIZE_BITS); + return; + } + printk("Loading %d bytes into ram disk... 0000k", + nblocks << BLOCK_SIZE_BITS); + cp = rd_start; + while (nblocks) { + if (nblocks > 2) + bh = breada(ROOT_DEV, block, block+1, block+2, -1); + else + bh = bread(ROOT_DEV, block); + if (!bh) { + printk("I/O error on block %d, aborting load\n", + block); + return; + } + (void) memcpy(cp, bh->b_data, BLOCK_SIZE); + brelse(bh); + printk("\010\010\010\010\010%4dk",i); + cp += BLOCK_SIZE; + block++; + nblocks--; + i++; + } + printk("\010\010\010\010\010done \n"); + ROOT_DEV=0x0101; +} diff --git a/linux-0.11-lab/0/linux/kernel/blk_drv/ramdisk.o b/linux-0.11-lab/0/linux/kernel/blk_drv/ramdisk.o new file mode 100644 index 0000000000000000000000000000000000000000..d37a922496b20c46741e78e22466958ee16e9dcd GIT binary patch literal 10664 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 azd^gt2s%I$JikGRTt|uA(-65=A^s1$?rygL literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/kernel/chr_drv/Makefile b/linux-0.11-lab/0/linux/kernel/chr_drv/Makefile new file mode 100644 index 0000000..9d4d8d1 --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/chr_drv/Makefile @@ -0,0 +1,68 @@ +# +# Makefile for the FREAX-kernel character device drivers. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). +# + +AR =ar +AS =as +LD =ld +LDFLAGS =-s -x +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -finline-functions -nostdinc -fno-stack-protector -I../../include +CPP =gcc -E -nostdinc -I../../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< + +OBJS = tty_io.o console.o keyboard.2.o serial.o rs_io.o \ + tty_ioctl.o + +chr_drv.a: $(OBJS) + $(AR) rcs chr_drv.a $(OBJS) + sync + +keyboard.2.s: keyboard.S ../../include/linux/config.h + $(CPP) -traditional keyboard.S -o keyboard.2.s + +clean: + rm -f core *.o *.a tmp_make keyboard.2.s + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +console.s console.o : console.c ../../include/linux/sched.h \ + ../../include/linux/head.h ../../include/linux/fs.h \ + ../../include/sys/types.h ../../include/linux/mm.h ../../include/signal.h \ + ../../include/linux/tty.h ../../include/termios.h ../../include/asm/io.h \ + ../../include/asm/system.h +serial.s serial.o : serial.c ../../include/linux/tty.h ../../include/termios.h \ + ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/sys/types.h ../../include/linux/mm.h \ + ../../include/signal.h ../../include/asm/system.h ../../include/asm/io.h +tty_io.s tty_io.o : tty_io.c ../../include/ctype.h ../../include/errno.h \ + ../../include/signal.h ../../include/sys/types.h \ + ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/linux/mm.h ../../include/linux/tty.h \ + ../../include/termios.h ../../include/asm/segment.h \ + ../../include/asm/system.h +tty_ioctl.s tty_ioctl.o : tty_ioctl.c ../../include/errno.h ../../include/termios.h \ + ../../include/linux/sched.h ../../include/linux/head.h \ + ../../include/linux/fs.h ../../include/sys/types.h ../../include/linux/mm.h \ + ../../include/signal.h ../../include/linux/kernel.h \ + ../../include/linux/tty.h ../../include/asm/io.h \ + ../../include/asm/segment.h ../../include/asm/system.h diff --git a/linux-0.11-lab/0/linux/kernel/chr_drv/chr_drv.a b/linux-0.11-lab/0/linux/kernel/chr_drv/chr_drv.a new file mode 100644 index 0000000000000000000000000000000000000000..d2f3869a9d5cd226117476be64275b50d1cf4aa7 GIT binary patch literal 68902 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ਞ(_ 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 E8yu$yWB>pF literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/kernel/chr_drv/console.c b/linux-0.11-lab/0/linux/kernel/chr_drv/console.c new file mode 100644 index 0000000..a12ffbf --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/chr_drv/console.c @@ -0,0 +1,710 @@ +/* + * linux/kernel/console.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * console.c + * + * This module implements the console io functions + * 'void con_init(void)' + * 'void con_write(struct tty_queue * queue)' + * Hopefully this will be a rather complete VT102 implementation. + * + * Beeping thanks to John T Kohl. + */ + +/* + * NOTE!!! We sometimes disable and enable interrupts for a short while + * (to put a word in video IO), but this will work even for keyboard + * interrupts. We know interrupts aren't enabled when getting a keyboard + * interrupt, as we use trap-gates. Hopefully all is well. + */ + +/* + * Code to check for different video-cards mostly by Galen Hunt, + * + */ + +#include +#include +#include +#include + +/* + * These are set up by the setup-routine at boot-time: + */ + +#define ORIG_X (*(unsigned char *)0x90000) +#define ORIG_Y (*(unsigned char *)0x90001) +#define ORIG_VIDEO_PAGE (*(unsigned short *)0x90004) +#define ORIG_VIDEO_MODE ((*(unsigned short *)0x90006) & 0xff) +#define ORIG_VIDEO_COLS (((*(unsigned short *)0x90006) & 0xff00) >> 8) +#define ORIG_VIDEO_LINES (25) +#define ORIG_VIDEO_EGA_AX (*(unsigned short *)0x90008) +#define ORIG_VIDEO_EGA_BX (*(unsigned short *)0x9000a) +#define ORIG_VIDEO_EGA_CX (*(unsigned short *)0x9000c) + +#define VIDEO_TYPE_MDA 0x10 /* Monochrome Text Display */ +#define VIDEO_TYPE_CGA 0x11 /* CGA Display */ +#define VIDEO_TYPE_EGAM 0x20 /* EGA/VGA in Monochrome Mode */ +#define VIDEO_TYPE_EGAC 0x21 /* EGA/VGA in Color Mode */ + +#define NPAR 16 + +extern void keyboard_interrupt(void); + +static unsigned char video_type; /* Type of display being used */ +static unsigned long video_num_columns; /* Number of text columns */ +static unsigned long video_size_row; /* Bytes per row */ +static unsigned long video_num_lines; /* Number of test lines */ +static unsigned char video_page; /* Initial video page */ +static unsigned long video_mem_start; /* Start of video RAM */ +static unsigned long video_mem_end; /* End of video RAM (sort of) */ +static unsigned short video_port_reg; /* Video register select port */ +static unsigned short video_port_val; /* Video register value port */ +static unsigned short video_erase_char; /* Char+Attrib to erase with */ + +static unsigned long origin; /* Used for EGA/VGA fast scroll */ +static unsigned long scr_end; /* Used for EGA/VGA fast scroll */ +static unsigned long pos; +static unsigned long x,y; +static unsigned long top,bottom; +static unsigned long state=0; +static unsigned long npar,par[NPAR]; +static unsigned long ques=0; +static unsigned char attr=0x07; + +static void sysbeep(void); + +/* + * this is what the terminal answers to a ESC-Z or csi0c + * query (= vt100 response). + */ +#define RESPONSE "\033[?1;2c" + +/* NOTE! gotoxy thinks x==video_num_columns is ok */ +static inline void gotoxy(unsigned int new_x,unsigned int new_y) +{ + if (new_x > video_num_columns || new_y >= video_num_lines) + return; + x=new_x; + y=new_y; + pos=origin + y*video_size_row + (x<<1); +} + +static inline void set_origin(void) +{ + cli(); + outb_p(12, video_port_reg); + outb_p(0xff&((origin-video_mem_start)>>9), video_port_val); + outb_p(13, video_port_reg); + outb_p(0xff&((origin-video_mem_start)>>1), video_port_val); + sti(); +} + +static void scrup(void) +{ + if (video_type == VIDEO_TYPE_EGAC || video_type == VIDEO_TYPE_EGAM) + { + if (!top && bottom == video_num_lines) { + origin += video_size_row; + pos += video_size_row; + scr_end += video_size_row; + if (scr_end > video_mem_end) { + __asm__("cld\n\t" + "rep\n\t" + "movsl\n\t" + "movl video_num_columns,%1\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((video_num_lines-1)*video_num_columns>>1), + "D" (video_mem_start), + "S" (origin) + ); + scr_end -= origin-video_mem_start; + pos -= origin-video_mem_start; + origin = video_mem_start; + } else { + __asm__("cld\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" (video_num_columns), + "D" (scr_end-video_size_row) + ); + } + set_origin(); + } else { + __asm__("cld\n\t" + "rep\n\t" + "movsl\n\t" + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*top), + "S" (origin+video_size_row*(top+1)) + ); + } + } + else /* Not EGA/VGA */ + { + __asm__("cld\n\t" + "rep\n\t" + "movsl\n\t" + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*top), + "S" (origin+video_size_row*(top+1)) + ); + } +} + +static void scrdown(void) +{ + if (video_type == VIDEO_TYPE_EGAC || video_type == VIDEO_TYPE_EGAM) + { + __asm__("std\n\t" + "rep\n\t" + "movsl\n\t" + "addl $2,%%edi\n\t" /* %edi has been decremented by 4 */ + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*bottom-4), + "S" (origin+video_size_row*(bottom-1)-4) + ); + } + else /* Not EGA/VGA */ + { + __asm__("std\n\t" + "rep\n\t" + "movsl\n\t" + "addl $2,%%edi\n\t" /* %edi has been decremented by 4 */ + "movl video_num_columns,%%ecx\n\t" + "rep\n\t" + "stosw" + ::"a" (video_erase_char), + "c" ((bottom-top-1)*video_num_columns>>1), + "D" (origin+video_size_row*bottom-4), + "S" (origin+video_size_row*(bottom-1)-4) + ); + } +} + +static void lf(void) +{ + if (y+1top) { + y--; + pos -= video_size_row; + return; + } + scrdown(); +} + +static void cr(void) +{ + pos -= x<<1; + x=0; +} + +static void del(void) +{ + if (x) { + pos -= 2; + x--; + *(unsigned short *)pos = video_erase_char; + } +} + +static void csi_J(int par) +{ + long count __asm__("cx"); + long start __asm__("di"); + + switch (par) { + case 0: /* erase from cursor to end of display */ + count = (scr_end-pos)>>1; + start = pos; + break; + case 1: /* erase from start to cursor */ + count = (pos-origin)>>1; + start = origin; + break; + case 2: /* erase whole display */ + count = video_num_columns * video_num_lines; + start = origin; + break; + default: + return; + } + __asm__("cld\n\t" + "rep\n\t" + "stosw\n\t" + ::"c" (count), + "D" (start),"a" (video_erase_char) + ); +} + +static void csi_K(int par) +{ + long count __asm__("cx"); + long start __asm__("di"); + + switch (par) { + case 0: /* erase from cursor to end of line */ + if (x>=video_num_columns) + return; + count = video_num_columns-x; + start = pos; + break; + case 1: /* erase from start of line to cursor */ + start = pos - (x<<1); + count = (x>9), video_port_val); + outb_p(15, video_port_reg); + outb_p(0xff&((pos-video_mem_start)>>1), video_port_val); + sti(); +} + +static void respond(struct tty_struct * tty) +{ + char * p = RESPONSE; + + cli(); + while (*p) { + PUTCH(*p,tty->read_q); + p++; + } + sti(); + copy_to_cooked(tty); +} + +static void insert_char(void) +{ + int i=x; + unsigned short tmp, old = video_erase_char; + unsigned short * p = (unsigned short *) pos; + + while (i++=video_num_columns) + return; + i = x; + while (++i < video_num_columns) { + *p = *(p+1); + p++; + } + *p = video_erase_char; +} + +static void delete_line(void) +{ + int oldtop,oldbottom; + + oldtop=top; + oldbottom=bottom; + top=y; + bottom = video_num_lines; + scrup(); + top=oldtop; + bottom=oldbottom; +} + +static void csi_at(unsigned int nr) +{ + if (nr > video_num_columns) + nr = video_num_columns; + else if (!nr) + nr = 1; + while (nr--) + insert_char(); +} + +static void csi_L(unsigned int nr) +{ + if (nr > video_num_lines) + nr = video_num_lines; + else if (!nr) + nr = 1; + while (nr--) + insert_line(); +} + +static void csi_P(unsigned int nr) +{ + if (nr > video_num_columns) + nr = video_num_columns; + else if (!nr) + nr = 1; + while (nr--) + delete_char(); +} + +static void csi_M(unsigned int nr) +{ + if (nr > video_num_lines) + nr = video_num_lines; + else if (!nr) + nr=1; + while (nr--) + delete_line(); +} + +static int saved_x=0; +static int saved_y=0; + +static void save_cur(void) +{ + saved_x=x; + saved_y=y; +} + +static void restore_cur(void) +{ + gotoxy(saved_x, saved_y); +} + +void con_write(struct tty_struct * tty) +{ + int nr; + char c; + + nr = CHARS(tty->write_q); + while (nr--) { + GETCH(tty->write_q,c); + switch(state) { + case 0: + if (c>31 && c<127) { + if (x>=video_num_columns) { + x -= video_num_columns; + pos -= video_size_row; + lf(); + } + __asm__("movb attr,%%ah\n\t" + "movw %%ax,%1\n\t" + ::"a" (c),"m" (*(short *)pos) + ); + pos += 2; + x++; + } else if (c==27) + state=1; + else if (c==10 || c==11 || c==12) + lf(); + else if (c==13) + cr(); + else if (c==ERASE_CHAR(tty)) + del(); + else if (c==8) { + if (x) { + x--; + pos -= 2; + } + } else if (c==9) { + c=8-(x&7); + x += c; + pos += c<<1; + if (x>video_num_columns) { + x -= video_num_columns; + pos -= video_size_row; + lf(); + } + c=9; + } else if (c==7) + sysbeep(); + break; + case 1: + state=0; + if (c=='[') + state=2; + else if (c=='E') + gotoxy(0,y+1); + else if (c=='M') + ri(); + else if (c=='D') + lf(); + else if (c=='Z') + respond(tty); + else if (x=='7') + save_cur(); + else if (x=='8') + restore_cur(); + break; + case 2: + for(npar=0;npar='0' && c<='9') { + par[npar]=10*par[npar]+c-'0'; + break; + } else state=4; + case 4: + state=0; + switch(c) { + case 'G': case '`': + if (par[0]) par[0]--; + gotoxy(par[0],y); + break; + case 'A': + if (!par[0]) par[0]++; + gotoxy(x,y-par[0]); + break; + case 'B': case 'e': + if (!par[0]) par[0]++; + gotoxy(x,y+par[0]); + break; + case 'C': case 'a': + if (!par[0]) par[0]++; + gotoxy(x+par[0],y); + break; + case 'D': + if (!par[0]) par[0]++; + gotoxy(x-par[0],y); + break; + case 'E': + if (!par[0]) par[0]++; + gotoxy(0,y+par[0]); + break; + case 'F': + if (!par[0]) par[0]++; + gotoxy(0,y-par[0]); + break; + case 'd': + if (par[0]) par[0]--; + gotoxy(x,par[0]); + break; + case 'H': case 'f': + if (par[0]) par[0]--; + if (par[1]) par[1]--; + gotoxy(par[1],par[0]); + break; + case 'J': + csi_J(par[0]); + break; + case 'K': + csi_K(par[0]); + break; + case 'L': + csi_L(par[0]); + break; + case 'M': + csi_M(par[0]); + break; + case 'P': + csi_P(par[0]); + break; + case '@': + csi_at(par[0]); + break; + case 'm': + csi_m(); + break; + case 'r': + if (par[0]) par[0]--; + if (!par[1]) par[1] = video_num_lines; + if (par[0] < par[1] && + par[1] <= video_num_lines) { + top=par[0]; + bottom=par[1]; + } + break; + case 's': + save_cur(); + break; + case 'u': + restore_cur(); + break; + } + } + } + set_cursor(); +} + +/* + * void con_init(void); + * + * This routine initalizes console interrupts, and does nothing + * else. If you want the screen to clear, call tty_write with + * the appropriate escape-sequece. + * + * Reads the information preserved by setup.s to determine the current display + * type and sets everything accordingly. + */ +void con_init(void) +{ + register unsigned char a; + char *display_desc = "????"; + char *display_ptr; + + video_num_columns = ORIG_VIDEO_COLS; + video_size_row = video_num_columns * 2; + video_num_lines = ORIG_VIDEO_LINES; + video_page = ORIG_VIDEO_PAGE; + video_erase_char = 0x0720; + + if (ORIG_VIDEO_MODE == 7) /* Is this a monochrome display? */ + { + video_mem_start = 0xb0000; + video_port_reg = 0x3b4; + video_port_val = 0x3b5; + if ((ORIG_VIDEO_EGA_BX & 0xff) != 0x10) + { + video_type = VIDEO_TYPE_EGAM; + video_mem_end = 0xb8000; + display_desc = "EGAm"; + } + else + { + video_type = VIDEO_TYPE_MDA; + video_mem_end = 0xb2000; + display_desc = "*MDA"; + } + } + else /* If not, it is color. */ + { + video_mem_start = 0xb8000; + video_port_reg = 0x3d4; + video_port_val = 0x3d5; + if ((ORIG_VIDEO_EGA_BX & 0xff) != 0x10) + { + video_type = VIDEO_TYPE_EGAC; + video_mem_end = 0xbc000; + display_desc = "EGAc"; + } + else + { + video_type = VIDEO_TYPE_CGA; + video_mem_end = 0xba000; + display_desc = "*CGA"; + } + } + + /* Let the user known what kind of display driver we are using */ + + display_ptr = ((char *)video_mem_start) + video_size_row - 8; + while (*display_desc) + { + *display_ptr++ = *display_desc++; + display_ptr++; + } + + /* Initialize the variables used for scrolling (mostly EGA/VGA) */ + + origin = video_mem_start; + scr_end = video_mem_start + video_num_lines * video_size_row; + top = 0; + bottom = video_num_lines; + + gotoxy(ORIG_X,ORIG_Y); + set_trap_gate(0x21,&keyboard_interrupt); + outb_p(inb_p(0x21)&0xfd,0x21); + a=inb_p(0x61); + outb_p(a|0x80,0x61); + outb(a,0x61); +} +/* from bsd-net-2: */ + +void sysbeepstop(void) +{ + /* disable counter 2 */ + outb(inb_p(0x61)&0xFC, 0x61); +} + +int beepcount = 0; + +static void sysbeep(void) +{ + /* enable counter 2 */ + outb_p(inb_p(0x61)|3, 0x61); + /* set command for counter 2, 2 byte write */ + outb_p(0xB6, 0x43); + /* send 0x637 for 750 HZ */ + outb_p(0x37, 0x42); + outb(0x06, 0x42); + /* 1/8 second */ + beepcount = HZ/8; +} diff --git a/linux-0.11-lab/0/linux/kernel/chr_drv/console.o b/linux-0.11-lab/0/linux/kernel/chr_drv/console.o new file mode 100644 index 0000000000000000000000000000000000000000..cdb09cf249a683c556a1bd6a57bcc3dbe96270a4 GIT binary patch literal 20896 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" +# 1 "" +# 1 "keyboard.S" + + + + + + + + + + + + + +# 1 "../../include/linux/config.h" 1 + + + + + + + + + + + + + + + + + + + + + +# 36 "../../include/linux/config.h" + +# 47 "../../include/linux/config.h" + +# 14 "keyboard.S" 2 + +.text +.globl keyboard_interrupt + + + + +size = 1024 + +head = 4 +tail = 8 +proc_list = 12 +buf = 16 + +mode: .byte 0 +leds: .byte 2 +e0: .byte 0 + + + + + + +keyboard_interrupt: + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + push %ds + push %es + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + xor %al,%al + inb $0x60,%al + cmpb $0xe0,%al + je set_e0 + cmpb $0xe1,%al + je set_e1 + call key_table(,%eax,4) + movb $0,e0 +e0_e1: inb $0x61,%al + jmp 1f +1: jmp 1f +1: orb $0x80,%al + jmp 1f +1: jmp 1f +1: outb %al,$0x61 + jmp 1f +1: jmp 1f +1: andb $0x7F,%al + outb %al,$0x61 + movb $0x20,%al + outb %al,$0x20 + pushl $0 + call do_tty_interrupt + addl $4,%esp + pop %es + pop %ds + popl %edx + popl %ecx + popl %ebx + popl %eax + iret +set_e0: movb $1,e0 + jmp e0_e1 +set_e1: movb $2,e0 + jmp e0_e1 + + + + + + +put_queue: + pushl %ecx + pushl %edx + movl table_list,%edx # read-queue for console + movl head(%edx),%ecx +1: movb %al,buf(%edx,%ecx) + incl %ecx + andl $size-1,%ecx + cmpl tail(%edx),%ecx # buffer full - discard everything + je 3f + shrdl $8,%ebx,%eax + je 2f + shrl $8,%ebx + jmp 1b +2: movl %ecx,head(%edx) + movl proc_list(%edx),%ecx + testl %ecx,%ecx + je 3f + movl $0,(%ecx) +3: popl %edx + popl %ecx + ret + +ctrl: movb $0x04,%al + jmp 1f +alt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: orb %al,mode + ret +unctrl: movb $0x04,%al + jmp 1f +unalt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: notb %al + andb %al,mode + ret + +lshift: + orb $0x01,mode + ret +unlshift: + andb $0xfe,mode + ret +rshift: + orb $0x02,mode + ret +unrshift: + andb $0xfd,mode + ret + +caps: testb $0x80,mode + jne 1f + xorb $4,leds + xorb $0x40,mode + orb $0x80,mode +set_leds: + call kb_wait + movb $0xed,%al + outb %al,$0x60 + call kb_wait + movb leds,%al + outb %al,$0x60 + ret +uncaps: andb $0x7f,mode + ret +scroll: + xorb $1,leds + jmp set_leds +num: xorb $2,leds + jmp set_leds + + + + + +cursor: + subb $0x47,%al + jb 1f + cmpb $12,%al + ja 1f + jne cur2 + testb $0x0c,mode + je cur2 + testb $0x30,mode + jne reboot +cur2: cmpb $0x01,e0 + je cur + testb $0x02,leds + je cur + testb $0x03,mode + jne cur + xorl %ebx,%ebx + movb num_table(%eax),%al + jmp put_queue +1: ret + +cur: movb cur_table(%eax),%al + cmpb $'9,%al + ja ok_cur + movb $'~,%ah +ok_cur: shll $16,%eax + movw $0x5b1b,%ax + xorl %ebx,%ebx + jmp put_queue + + + + + +num_table: + .ascii "789 456 1230," + +cur_table: + .ascii "HA5 DGC YB623" + + + + +func: + pushl %eax + pushl %ecx + pushl %edx + call show_stat + popl %edx + popl %ecx + popl %eax + subb $0x3B,%al + jb end_func + cmpb $9,%al + jbe ok_func + subb $18,%al + cmpb $10,%al + jb end_func + cmpb $11,%al + ja end_func +ok_func: + cmpl $4,%ecx + jl end_func + movl func_table(,%eax,4),%eax + xorl %ebx,%ebx + jmp put_queue +end_func: + ret + + + + +func_table: + .long 0x415b5b1b,0x425b5b1b,0x435b5b1b,0x445b5b1b + .long 0x455b5b1b,0x465b5b1b,0x475b5b1b,0x485b5b1b + .long 0x495b5b1b,0x4a5b5b1b,0x4b5b5b1b,0x4c5b5b1b + +# 294 "keyboard.S" + +key_map: + .byte 0,27 + .ascii "1234567890-=" + .byte 127,9 + .ascii "qwertyuiop[]" + .byte 13,0 + .ascii "asdfghjkl;'" + .byte '`,0 + .ascii "\\zxcvbnm,./" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 + .byte '-,0,0,0,'+ + .byte 0,0,0,0,0,0,0 + .byte '< + .fill 10,1,0 + + +shift_map: + .byte 0,27 + .ascii "!@#$%^&*()_+" + .byte 127,9 + .ascii "QWERTYUIOP{}" + .byte 13,0 + .ascii "ASDFGHJKL:\"" + .byte '~,0 + .ascii "|ZXCVBNM<>?" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 + .byte '-,0,0,0,'+ + .byte 0,0,0,0,0,0,0 + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 + .fill 16,1,0 + .byte 0,0,0,0,0 + .byte 0,0,0,0,0,0,0 + .byte '| + .fill 10,1,0 + +# 449 "keyboard.S" + + + + +do_self: + lea alt_map,%ebx + testb $0x20,mode + jne 1f + lea shift_map,%ebx + testb $0x03,mode + jne 1f + lea key_map,%ebx +1: movb (%ebx,%eax),%al + orb %al,%al + je none + testb $0x4c,mode + je 2f + cmpb $'a,%al + jb 2f + cmpb $'},%al + ja 2f + subb $32,%al +2: testb $0x0c,mode + je 3f + cmpb $64,%al + jb 3f + cmpb $64+32,%al + jae 3f + subb $64,%al +3: testb $0x10,mode + je 4f + orb $0x80,%al +4: andl $0xff,%eax + xorl %ebx,%ebx + call put_queue +none: ret + + + + + + +minus: cmpb $1,e0 + jne do_self + movl $'/,%eax + xorl %ebx,%ebx + jmp put_queue + + + + + + +key_table: + .long none,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,ctrl,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,lshift,do_self + .long do_self,do_self,do_self,do_self + .long do_self,do_self,do_self,do_self + .long do_self,minus,rshift,do_self + .long alt,do_self,caps,func + .long func,func,func,func + .long func,func,func,func + .long func,num,scroll,cursor + .long cursor,cursor,do_self,cursor + .long cursor,cursor,do_self,cursor + .long cursor,cursor,cursor,cursor + .long none,none,do_self,func + .long func,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,unctrl,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,unlshift,none + .long none,none,none,none + .long none,none,none,none + .long none,none,unrshift,none + .long unalt,none,uncaps,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + .long none,none,none,none + + + + + +kb_wait: + pushl %eax +1: inb $0x64,%al + testb $0x02,%al + jne 1b + popl %eax + ret + + + + +reboot: + call kb_wait + movw $0x1234,0x472 + movb $0xfc,%al + outb %al,$0x64 +die: jmp die diff --git a/linux-0.11-lab/0/linux/kernel/chr_drv/keyboard.S b/linux-0.11-lab/0/linux/kernel/chr_drv/keyboard.S new file mode 100644 index 0000000..25210b4 --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/chr_drv/keyboard.S @@ -0,0 +1,588 @@ +/* + * linux/kernel/keyboard.S + * + * (C) 1991 Linus Torvalds + */ + +/* + * Thanks to Alfred Leung for US keyboard patches + * Wolfgang Thiel for German keyboard patches + * Marc Corsini for the French keyboard + */ + +#include + +.text +.globl keyboard_interrupt + +/* + * these are for the keyboard read functions + */ +size = 1024 /* must be a power of two ! And MUST be the same + as in tty_io.c !!!! */ +head = 4 +tail = 8 +proc_list = 12 +buf = 16 + +mode: .byte 0 /* caps, alt, ctrl and shift mode */ +leds: .byte 2 /* num-lock, caps, scroll-lock mode (nom-lock on) */ +e0: .byte 0 + +/* + * con_int is the real interrupt routine that reads the + * keyboard scan-code and converts it into the appropriate + * ascii character(s). + */ +keyboard_interrupt: + pushl %eax + pushl %ebx + pushl %ecx + pushl %edx + push %ds + push %es + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + xor %al,%al /* %eax is scan code */ + inb $0x60,%al + cmpb $0xe0,%al + je set_e0 + cmpb $0xe1,%al + je set_e1 + call key_table(,%eax,4) + movb $0,e0 +e0_e1: inb $0x61,%al + jmp 1f +1: jmp 1f +1: orb $0x80,%al + jmp 1f +1: jmp 1f +1: outb %al,$0x61 + jmp 1f +1: jmp 1f +1: andb $0x7F,%al + outb %al,$0x61 + movb $0x20,%al + outb %al,$0x20 + pushl $0 + call do_tty_interrupt + addl $4,%esp + pop %es + pop %ds + popl %edx + popl %ecx + popl %ebx + popl %eax + iret +set_e0: movb $1,e0 + jmp e0_e1 +set_e1: movb $2,e0 + jmp e0_e1 + +/* + * This routine fills the buffer with max 8 bytes, taken from + * %ebx:%eax. (%edx is high). The bytes are written in the + * order %al,%ah,%eal,%eah,%bl,%bh ... until %eax is zero. + */ +put_queue: + pushl %ecx + pushl %edx + movl table_list,%edx # read-queue for console + movl head(%edx),%ecx +1: movb %al,buf(%edx,%ecx) + incl %ecx + andl $size-1,%ecx + cmpl tail(%edx),%ecx # buffer full - discard everything + je 3f + shrdl $8,%ebx,%eax + je 2f + shrl $8,%ebx + jmp 1b +2: movl %ecx,head(%edx) + movl proc_list(%edx),%ecx + testl %ecx,%ecx + je 3f + movl $0,(%ecx) +3: popl %edx + popl %ecx + ret + +ctrl: movb $0x04,%al + jmp 1f +alt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: orb %al,mode + ret +unctrl: movb $0x04,%al + jmp 1f +unalt: movb $0x10,%al +1: cmpb $0,e0 + je 2f + addb %al,%al +2: notb %al + andb %al,mode + ret + +lshift: + orb $0x01,mode + ret +unlshift: + andb $0xfe,mode + ret +rshift: + orb $0x02,mode + ret +unrshift: + andb $0xfd,mode + ret + +caps: testb $0x80,mode + jne 1f + xorb $4,leds + xorb $0x40,mode + orb $0x80,mode +set_leds: + call kb_wait + movb $0xed,%al /* set leds command */ + outb %al,$0x60 + call kb_wait + movb leds,%al + outb %al,$0x60 + ret +uncaps: andb $0x7f,mode + ret +scroll: + xorb $1,leds + jmp set_leds +num: xorb $2,leds + jmp set_leds + +/* + * curosr-key/numeric keypad cursor keys are handled here. + * checking for numeric keypad etc. + */ +cursor: + subb $0x47,%al + jb 1f + cmpb $12,%al + ja 1f + jne cur2 /* check for ctrl-alt-del */ + testb $0x0c,mode + je cur2 + testb $0x30,mode + jne reboot +cur2: cmpb $0x01,e0 /* e0 forces cursor movement */ + je cur + testb $0x02,leds /* not num-lock forces cursor */ + je cur + testb $0x03,mode /* shift forces cursor */ + jne cur + xorl %ebx,%ebx + movb num_table(%eax),%al + jmp put_queue +1: ret + +cur: movb cur_table(%eax),%al + cmpb $'9,%al + ja ok_cur + movb $'~,%ah +ok_cur: shll $16,%eax + movw $0x5b1b,%ax + xorl %ebx,%ebx + jmp put_queue + +#if defined(KBD_FR) +num_table: + .ascii "789 456 1230." +#else +num_table: + .ascii "789 456 1230," +#endif +cur_table: + .ascii "HA5 DGC YB623" + +/* + * this routine handles function keys + */ +func: + pushl %eax + pushl %ecx + pushl %edx + call show_stat + popl %edx + popl %ecx + popl %eax + subb $0x3B,%al + jb end_func + cmpb $9,%al + jbe ok_func + subb $18,%al + cmpb $10,%al + jb end_func + cmpb $11,%al + ja end_func +ok_func: + cmpl $4,%ecx /* check that there is enough room */ + jl end_func + movl func_table(,%eax,4),%eax + xorl %ebx,%ebx + jmp put_queue +end_func: + ret + +/* + * function keys send F1:'esc [ [ A' F2:'esc [ [ B' etc. + */ +func_table: + .long 0x415b5b1b,0x425b5b1b,0x435b5b1b,0x445b5b1b + .long 0x455b5b1b,0x465b5b1b,0x475b5b1b,0x485b5b1b + .long 0x495b5b1b,0x4a5b5b1b,0x4b5b5b1b,0x4c5b5b1b + +#if defined(KBD_FINNISH) +key_map: + .byte 0,27 + .ascii "1234567890+'" + .byte 127,9 + .ascii "qwertyuiop}" + .byte 0,13,0 + .ascii "asdfghjkl|{" + .byte 0,0 + .ascii "'zxcvbnm,.-" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + +shift_map: + .byte 0,27 + .ascii "!\"#$%&/()=?`" + .byte 127,9 + .ascii "QWERTYUIOP]^" + .byte 13,0 + .ascii "ASDFGHJKL\\[" + .byte 0,0 + .ascii "*ZXCVBNM;:_" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + +#elif defined(KBD_US) + +key_map: + .byte 0,27 + .ascii "1234567890-=" + .byte 127,9 + .ascii "qwertyuiop[]" + .byte 13,0 + .ascii "asdfghjkl;'" + .byte '`,0 + .ascii "\\zxcvbnm,./" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + + +shift_map: + .byte 0,27 + .ascii "!@#$%^&*()_+" + .byte 127,9 + .ascii "QWERTYUIOP{}" + .byte 13,0 + .ascii "ASDFGHJKL:\"" + .byte '~,0 + .ascii "|ZXCVBNM<>?" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + +#elif defined(KBD_GR) + +key_map: + .byte 0,27 + .ascii "1234567890\\'" + .byte 127,9 + .ascii "qwertzuiop@+" + .byte 13,0 + .ascii "asdfghjkl[]^" + .byte 0,'# + .ascii "yxcvbnm,.-" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + + +shift_map: + .byte 0,27 + .ascii "!\"#$%&/()=?`" + .byte 127,9 + .ascii "QWERTZUIOP\\*" + .byte 13,0 + .ascii "ASDFGHJKL{}~" + .byte 0,'' + .ascii "YXCVBNM;:_" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0@\0$\0\0{[]}\\\0" + .byte 0,0 + .byte '@,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + + +#elif defined(KBD_FR) + +key_map: + .byte 0,27 + .ascii "&{\"'(-}_/@)=" + .byte 127,9 + .ascii "azertyuiop^$" + .byte 13,0 + .ascii "qsdfghjklm|" + .byte '`,0,42 /* coin sup gauche, don't know, [*|mu] */ + .ascii "wxcvbn,;:!" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '< + .fill 10,1,0 + +shift_map: + .byte 0,27 + .ascii "1234567890]+" + .byte 127,9 + .ascii "AZERTYUIOP<>" + .byte 13,0 + .ascii "QSDFGHJKLM%" + .byte '~,0,'# + .ascii "WXCVBN?./\\" + .byte 0,'*,0,32 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte '-,0,0,0,'+ /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '> + .fill 10,1,0 + +alt_map: + .byte 0,0 + .ascii "\0~#{[|`\\^@]}" + .byte 0,0 + .byte '@,0,0,0,0,0,0,0,0,0,0 + .byte '~,13,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0 + .byte 0,0,0,0,0,0,0,0,0,0,0 + .byte 0,0,0,0 /* 36-39 */ + .fill 16,1,0 /* 3A-49 */ + .byte 0,0,0,0,0 /* 4A-4E */ + .byte 0,0,0,0,0,0,0 /* 4F-55 */ + .byte '| + .fill 10,1,0 + +#else +#error "KBD-type not defined" +#endif +/* + * do_self handles "normal" keys, ie keys that don't change meaning + * and which have just one character returns. + */ +do_self: + lea alt_map,%ebx + testb $0x20,mode /* alt-gr */ + jne 1f + lea shift_map,%ebx + testb $0x03,mode + jne 1f + lea key_map,%ebx +1: movb (%ebx,%eax),%al + orb %al,%al + je none + testb $0x4c,mode /* ctrl or caps */ + je 2f + cmpb $'a,%al + jb 2f + cmpb $'},%al + ja 2f + subb $32,%al +2: testb $0x0c,mode /* ctrl */ + je 3f + cmpb $64,%al + jb 3f + cmpb $64+32,%al + jae 3f + subb $64,%al +3: testb $0x10,mode /* left alt */ + je 4f + orb $0x80,%al +4: andl $0xff,%eax + xorl %ebx,%ebx + call put_queue +none: ret + +/* + * minus has a routine of it's own, as a 'E0h' before + * the scan code for minus means that the numeric keypad + * slash was pushed. + */ +minus: cmpb $1,e0 + jne do_self + movl $'/,%eax + xorl %ebx,%ebx + jmp put_queue + +/* + * This table decides which routine to call when a scan-code has been + * gotten. Most routines just call do_self, or none, depending if + * they are make or break. + */ +key_table: + .long none,do_self,do_self,do_self /* 00-03 s0 esc 1 2 */ + .long do_self,do_self,do_self,do_self /* 04-07 3 4 5 6 */ + .long do_self,do_self,do_self,do_self /* 08-0B 7 8 9 0 */ + .long do_self,do_self,do_self,do_self /* 0C-0F + ' bs tab */ + .long do_self,do_self,do_self,do_self /* 10-13 q w e r */ + .long do_self,do_self,do_self,do_self /* 14-17 t y u i */ + .long do_self,do_self,do_self,do_self /* 18-1B o p } ^ */ + .long do_self,ctrl,do_self,do_self /* 1C-1F enter ctrl a s */ + .long do_self,do_self,do_self,do_self /* 20-23 d f g h */ + .long do_self,do_self,do_self,do_self /* 24-27 j k l | */ + .long do_self,do_self,lshift,do_self /* 28-2B { para lshift , */ + .long do_self,do_self,do_self,do_self /* 2C-2F z x c v */ + .long do_self,do_self,do_self,do_self /* 30-33 b n m , */ + .long do_self,minus,rshift,do_self /* 34-37 . - rshift * */ + .long alt,do_self,caps,func /* 38-3B alt sp caps f1 */ + .long func,func,func,func /* 3C-3F f2 f3 f4 f5 */ + .long func,func,func,func /* 40-43 f6 f7 f8 f9 */ + .long func,num,scroll,cursor /* 44-47 f10 num scr home */ + .long cursor,cursor,do_self,cursor /* 48-4B up pgup - left */ + .long cursor,cursor,do_self,cursor /* 4C-4F n5 right + end */ + .long cursor,cursor,cursor,cursor /* 50-53 dn pgdn ins del */ + .long none,none,do_self,func /* 54-57 sysreq ? < f11 */ + .long func,none,none,none /* 58-5B f12 ? ? ? */ + .long none,none,none,none /* 5C-5F ? ? ? ? */ + .long none,none,none,none /* 60-63 ? ? ? ? */ + .long none,none,none,none /* 64-67 ? ? ? ? */ + .long none,none,none,none /* 68-6B ? ? ? ? */ + .long none,none,none,none /* 6C-6F ? ? ? ? */ + .long none,none,none,none /* 70-73 ? ? ? ? */ + .long none,none,none,none /* 74-77 ? ? ? ? */ + .long none,none,none,none /* 78-7B ? ? ? ? */ + .long none,none,none,none /* 7C-7F ? ? ? ? */ + .long none,none,none,none /* 80-83 ? br br br */ + .long none,none,none,none /* 84-87 br br br br */ + .long none,none,none,none /* 88-8B br br br br */ + .long none,none,none,none /* 8C-8F br br br br */ + .long none,none,none,none /* 90-93 br br br br */ + .long none,none,none,none /* 94-97 br br br br */ + .long none,none,none,none /* 98-9B br br br br */ + .long none,unctrl,none,none /* 9C-9F br unctrl br br */ + .long none,none,none,none /* A0-A3 br br br br */ + .long none,none,none,none /* A4-A7 br br br br */ + .long none,none,unlshift,none /* A8-AB br br unlshift br */ + .long none,none,none,none /* AC-AF br br br br */ + .long none,none,none,none /* B0-B3 br br br br */ + .long none,none,unrshift,none /* B4-B7 br br unrshift br */ + .long unalt,none,uncaps,none /* B8-BB unalt br uncaps br */ + .long none,none,none,none /* BC-BF br br br br */ + .long none,none,none,none /* C0-C3 br br br br */ + .long none,none,none,none /* C4-C7 br br br br */ + .long none,none,none,none /* C8-CB br br br br */ + .long none,none,none,none /* CC-CF br br br br */ + .long none,none,none,none /* D0-D3 br br br br */ + .long none,none,none,none /* D4-D7 br br br br */ + .long none,none,none,none /* D8-DB br ? ? ? */ + .long none,none,none,none /* DC-DF ? ? ? ? */ + .long none,none,none,none /* E0-E3 e0 e1 ? ? */ + .long none,none,none,none /* E4-E7 ? ? ? ? */ + .long none,none,none,none /* E8-EB ? ? ? ? */ + .long none,none,none,none /* EC-EF ? ? ? ? */ + .long none,none,none,none /* F0-F3 ? ? ? ? */ + .long none,none,none,none /* F4-F7 ? ? ? ? */ + .long none,none,none,none /* F8-FB ? ? ? ? */ + .long none,none,none,none /* FC-FF ? ? ? ? */ + +/* + * kb_wait waits for the keyboard controller buffer to empty. + * there is no timeout - if the buffer doesn't empty, we hang. + */ +kb_wait: + pushl %eax +1: inb $0x64,%al + testb $0x02,%al + jne 1b + popl %eax + ret +/* + * This routine reboots the machine by asking the keyboard + * controller to pulse the reset-line low. + */ +reboot: + call kb_wait + movw $0x1234,0x472 /* don't do memory check */ + movb $0xfc,%al /* pulse reset and A20 low */ + outb %al,$0x64 +die: jmp die diff --git a/linux-0.11-lab/0/linux/kernel/chr_drv/rs_io.o b/linux-0.11-lab/0/linux/kernel/chr_drv/rs_io.o new file mode 100644 index 0000000000000000000000000000000000000000..9d7d5b3a22aa1a7d33dea95b723af176ee68e951 GIT binary patch literal 1320 zcma)5O=}ZT6upy7lN1_>vDAuUi$oC$(TZ-YF8rt{7SvR*(+bl`=7mYg$1w9^jTe}J1pL8J+VS-DUc@11#5ry}TuH|L!9&O7g8W*$#YU6UjU z!jd2kzZJlJAu zYUu}^X)*0615dy3#7CS5;3%o*n6o2-mX*|mBJ()SkJ>Kxy3mDOdS@N-cB{sLjja`nuw?{k1!T?BECWK1Ur++2eHxq=#!x{gli&& zBRH@@L{yj;>c8RMuaxqliKJ!!PW(mv0M`reH^_6neMo3eLAl-mBy=A^x!y36flz|$ z9Yaq056bmU5ZT?V>*Z0VgF%1b96oaqeG&Pkh$c>dL{JjkL^3ZF1^Vqn>-rt20MOw)mDl`5E4qoh_V zHiu%f3^vy+-ZaTqsdKQH=_9M_uuwBq{86e5Y7L#$RJ8J@4U1NVGqq%B7P>V(VAV>U z?KNO{nOQ2UnY@MR;}pv*t7+mQ_L+$Cmk2hbH&o7BkuiEb(opct5uPWFopkSn(*o}a PoD +#include +#include +#include + +#define WAKEUP_CHARS (TTY_BUF_SIZE/4) + +extern void rs1_interrupt(void); +extern void rs2_interrupt(void); + +static void init(int port) +{ + outb_p(0x80,port+3); /* set DLAB of line control reg */ + outb_p(0x30,port); /* LS of divisor (48 -> 2400 bps */ + outb_p(0x00,port+1); /* MS of divisor */ + outb_p(0x03,port+3); /* reset DLAB */ + outb_p(0x0b,port+4); /* set DTR,RTS, OUT_2 */ + outb_p(0x0d,port+1); /* enable all intrs but writes */ + (void)inb(port); /* read data port to reset things (?) */ +} + +void rs_init(void) +{ + set_intr_gate(0x24,rs1_interrupt); + set_intr_gate(0x23,rs2_interrupt); + init(tty_table[1].read_q.data); + init(tty_table[2].read_q.data); + outb(inb_p(0x21)&0xE7,0x21); +} + +/* + * This routine gets called when tty_write has put something into + * the write_queue. It must check wheter the queue is empty, and + * set the interrupt register accordingly + * + * void _rs_write(struct tty_struct * tty); + */ +void rs_write(struct tty_struct * tty) +{ + cli(); + if (!EMPTY(tty->write_q)) + outb(inb_p(tty->write_q.data+1)|0x02,tty->write_q.data+1); + sti(); +} diff --git a/linux-0.11-lab/0/linux/kernel/chr_drv/serial.o b/linux-0.11-lab/0/linux/kernel/chr_drv/serial.o new file mode 100644 index 0000000000000000000000000000000000000000..bf80e08be94a19c3982f10989e20a6e929a1d240 GIT binary patch literal 6752 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 +#include +#include + +#define ALRMMASK (1<<(SIGALRM-1)) +#define KILLMASK (1<<(SIGKILL-1)) +#define INTMASK (1<<(SIGINT-1)) +#define QUITMASK (1<<(SIGQUIT-1)) +#define TSTPMASK (1<<(SIGTSTP-1)) + +#include +#include +#include +#include + +#define _L_FLAG(tty,f) ((tty)->termios.c_lflag & f) +#define _I_FLAG(tty,f) ((tty)->termios.c_iflag & f) +#define _O_FLAG(tty,f) ((tty)->termios.c_oflag & f) + +#define L_CANON(tty) _L_FLAG((tty),ICANON) +#define L_ISIG(tty) _L_FLAG((tty),ISIG) +#define L_ECHO(tty) _L_FLAG((tty),ECHO) +#define L_ECHOE(tty) _L_FLAG((tty),ECHOE) +#define L_ECHOK(tty) _L_FLAG((tty),ECHOK) +#define L_ECHOCTL(tty) _L_FLAG((tty),ECHOCTL) +#define L_ECHOKE(tty) _L_FLAG((tty),ECHOKE) + +#define I_UCLC(tty) _I_FLAG((tty),IUCLC) +#define I_NLCR(tty) _I_FLAG((tty),INLCR) +#define I_CRNL(tty) _I_FLAG((tty),ICRNL) +#define I_NOCR(tty) _I_FLAG((tty),IGNCR) + +#define O_POST(tty) _O_FLAG((tty),OPOST) +#define O_NLCR(tty) _O_FLAG((tty),ONLCR) +#define O_CRNL(tty) _O_FLAG((tty),OCRNL) +#define O_NLRET(tty) _O_FLAG((tty),ONLRET) +#define O_LCUC(tty) _O_FLAG((tty),OLCUC) + +struct tty_struct tty_table[] = { + { + {ICRNL, /* change incoming CR to NL */ + OPOST|ONLCR, /* change outgoing NL to CRNL */ + 0, + ISIG | ICANON | ECHO | ECHOCTL | ECHOKE, + 0, /* console termio */ + INIT_C_CC}, + 0, /* initial pgrp */ + 0, /* initial stopped */ + con_write, + {0,0,0,0,""}, /* console read-queue */ + {0,0,0,0,""}, /* console write-queue */ + {0,0,0,0,""} /* console secondary queue */ + },{ + {0, /* no translation */ + 0, /* no translation */ + B2400 | CS8, + 0, + 0, + INIT_C_CC}, + 0, + 0, + rs_write, + {0x3f8,0,0,0,""}, /* rs 1 */ + {0x3f8,0,0,0,""}, + {0,0,0,0,""} + },{ + {0, /* no translation */ + 0, /* no translation */ + B2400 | CS8, + 0, + 0, + INIT_C_CC}, + 0, + 0, + rs_write, + {0x2f8,0,0,0,""}, /* rs 2 */ + {0x2f8,0,0,0,""}, + {0,0,0,0,""} + } +}; + +/* + * these are the tables used by the machine code handlers. + * you can implement pseudo-tty's or something by changing + * them. Currently not done. + */ +struct tty_queue * table_list[]={ + &tty_table[0].read_q, &tty_table[0].write_q, + &tty_table[1].read_q, &tty_table[1].write_q, + &tty_table[2].read_q, &tty_table[2].write_q + }; + +void tty_init(void) +{ + rs_init(); + con_init(); +} + +void tty_intr(struct tty_struct * tty, int mask) +{ + int i; + + if (tty->pgrp <= 0) + return; + for (i=0;ipgrp==tty->pgrp) + task[i]->signal |= mask; +} + +static void sleep_if_empty(struct tty_queue * queue) +{ + cli(); + while (!current->signal && EMPTY(*queue)) + interruptible_sleep_on(&queue->proc_list); + sti(); +} + +static void sleep_if_full(struct tty_queue * queue) +{ + if (!FULL(*queue)) + return; + cli(); + while (!current->signal && LEFT(*queue)<128) + interruptible_sleep_on(&queue->proc_list); + sti(); +} + +void wait_for_keypress(void) +{ + sleep_if_empty(&tty_table[0].secondary); +} + +void copy_to_cooked(struct tty_struct * tty) +{ + signed char c; + + while (!EMPTY(tty->read_q) && !FULL(tty->secondary)) { + GETCH(tty->read_q,c); + if (c==13) + if (I_CRNL(tty)) + c=10; + else if (I_NOCR(tty)) + continue; + else ; + else if (c==10 && I_NLCR(tty)) + c=13; + if (I_UCLC(tty)) + c=tolower(c); + if (L_CANON(tty)) { + if (c==KILL_CHAR(tty)) { + /* deal with killing the input line */ + while(!(EMPTY(tty->secondary) || + (c=LAST(tty->secondary))==10 || + c==EOF_CHAR(tty))) { + if (L_ECHO(tty)) { + if (c<32) + PUTCH(127,tty->write_q); + PUTCH(127,tty->write_q); + tty->write(tty); + } + DEC(tty->secondary.head); + } + continue; + } + if (c==ERASE_CHAR(tty)) { + if (EMPTY(tty->secondary) || + (c=LAST(tty->secondary))==10 || + c==EOF_CHAR(tty)) + continue; + if (L_ECHO(tty)) { + if (c<32) + PUTCH(127,tty->write_q); + PUTCH(127,tty->write_q); + tty->write(tty); + } + DEC(tty->secondary.head); + continue; + } + if (c==STOP_CHAR(tty)) { + tty->stopped=1; + continue; + } + if (c==START_CHAR(tty)) { + tty->stopped=0; + continue; + } + } + if (L_ISIG(tty)) { + if (c==INTR_CHAR(tty)) { + tty_intr(tty,INTMASK); + continue; + } + if (c==QUIT_CHAR(tty)) { + tty_intr(tty,QUITMASK); + continue; + } + } + if (c==10 || c==EOF_CHAR(tty)) + tty->secondary.data++; + if (L_ECHO(tty)) { + if (c==10) { + PUTCH(10,tty->write_q); + PUTCH(13,tty->write_q); + } else if (c<32) { + if (L_ECHOCTL(tty)) { + PUTCH('^',tty->write_q); + PUTCH(c+64,tty->write_q); + } + } else + PUTCH(c,tty->write_q); + tty->write(tty); + } + PUTCH(c,tty->secondary); + } + wake_up(&tty->secondary.proc_list); +} + +int tty_read(unsigned channel, char * buf, int nr) +{ + struct tty_struct * tty; + char c, * b=buf; + int minimum,time,flag=0; + long oldalarm; + + if (channel>2 || nr<0) return -1; + tty = &tty_table[channel]; + oldalarm = current->alarm; + time = 10L*tty->termios.c_cc[VTIME]; + minimum = tty->termios.c_cc[VMIN]; + if (time && !minimum) { + minimum=1; + if (flag=(!oldalarm || time+jiffiesalarm = time+jiffies; + } + if (minimum>nr) + minimum=nr; + while (nr>0) { + if (flag && (current->signal & ALRMMASK)) { + current->signal &= ~ALRMMASK; + break; + } + if (current->signal) + break; + if (EMPTY(tty->secondary) || (L_CANON(tty) && + !tty->secondary.data && LEFT(tty->secondary)>20)) { + sleep_if_empty(&tty->secondary); + continue; + } + do { + GETCH(tty->secondary,c); + if (c==EOF_CHAR(tty) || c==10) + tty->secondary.data--; + if (c==EOF_CHAR(tty) && L_CANON(tty)) + return (b-buf); + else { + put_fs_byte(c,b++); + if (!--nr) + break; + } + } while (nr>0 && !EMPTY(tty->secondary)); + if (time && !L_CANON(tty)) + if (flag=(!oldalarm || time+jiffiesalarm = time+jiffies; + else + current->alarm = oldalarm; + if (L_CANON(tty)) { + if (b-buf) + break; + } else if (b-buf >= minimum) + break; + } + current->alarm = oldalarm; + if (current->signal && !(b-buf)) + return -EINTR; + return (b-buf); +} + +int tty_write(unsigned channel, char * buf, int nr) +{ + static cr_flag=0; + struct tty_struct * tty; + char c, *b=buf; + + if (channel>2 || nr<0) return -1; + tty = channel + tty_table; + while (nr>0) { + sleep_if_full(&tty->write_q); + if (current->signal) + break; + while (nr>0 && !FULL(tty->write_q)) { + c=get_fs_byte(b); + if (O_POST(tty)) { + if (c=='\r' && O_CRNL(tty)) + c='\n'; + else if (c=='\n' && O_NLRET(tty)) + c='\r'; + if (c=='\n' && !cr_flag && O_NLCR(tty)) { + cr_flag = 1; + PUTCH(13,tty->write_q); + continue; + } + if (O_LCUC(tty)) + c=toupper(c); + } + b++; nr--; + cr_flag = 0; + PUTCH(c,tty->write_q); + } + tty->write(tty); + if (nr>0) + schedule(); + } + return (b-buf); +} + +/* + * Jeh, sometimes I really like the 386. + * This routine is called from an interrupt, + * and there should be absolutely no problem + * with sleeping even in an interrupt (I hope). + * Of course, if somebody proves me wrong, I'll + * hate intel for all time :-). We'll have to + * be careful and see to reinstating the interrupt + * chips before calling this, though. + * + * I don't think we sleep here under normal circumstances + * anyway, which is good, as the task sleeping might be + * totally innocent. + */ +void do_tty_interrupt(int tty) +{ + copy_to_cooked(tty_table+tty); +} + +void chr_dev_init(void) +{ +} diff --git a/linux-0.11-lab/0/linux/kernel/chr_drv/tty_io.o b/linux-0.11-lab/0/linux/kernel/chr_drv/tty_io.o new file mode 100644 index 0000000000000000000000000000000000000000..37e2b15961ebc5713d826d6c25e53571ac6fbb83 GIT binary patch literal 22504 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 O^kQA0pRj`M3jQCx0hyNo literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/kernel/chr_drv/tty_ioctl.c b/linux-0.11-lab/0/linux/kernel/chr_drv/tty_ioctl.c new file mode 100644 index 0000000..e4e3745 --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/chr_drv/tty_ioctl.c @@ -0,0 +1,204 @@ +/* + * linux/kernel/chr_drv/tty_ioctl.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include + +#include +#include +#include + +#include +#include +#include + +static unsigned short quotient[] = { + 0, 2304, 1536, 1047, 857, + 768, 576, 384, 192, 96, + 64, 48, 24, 12, 6, 3 +}; + +static void change_speed(struct tty_struct * tty) +{ + unsigned short port,quot; + + if (!(port = tty->read_q.data)) + return; + quot = quotient[tty->termios.c_cflag & CBAUD]; + cli(); + outb_p(0x80,port+3); /* set DLAB */ + outb_p(quot & 0xff,port); /* LS of divisor */ + outb_p(quot >> 8,port+1); /* MS of divisor */ + outb(0x03,port+3); /* reset DLAB */ + sti(); +} + +static void flush(struct tty_queue * queue) +{ + cli(); + queue->head = queue->tail; + sti(); +} + +static void wait_until_sent(struct tty_struct * tty) +{ + /* do nothing - not implemented */ +} + +static void send_break(struct tty_struct * tty) +{ + /* do nothing - not implemented */ +} + +static int get_termios(struct tty_struct * tty, struct termios * termios) +{ + int i; + + verify_area(termios, sizeof (*termios)); + for (i=0 ; i< (sizeof (*termios)) ; i++) + put_fs_byte( ((char *)&tty->termios)[i] , i+(char *)termios ); + return 0; +} + +static int set_termios(struct tty_struct * tty, struct termios * termios) +{ + int i; + + for (i=0 ; i< (sizeof (*termios)) ; i++) + ((char *)&tty->termios)[i]=get_fs_byte(i+(char *)termios); + change_speed(tty); + return 0; +} + +static int get_termio(struct tty_struct * tty, struct termio * termio) +{ + int i; + struct termio tmp_termio; + + verify_area(termio, sizeof (*termio)); + tmp_termio.c_iflag = tty->termios.c_iflag; + tmp_termio.c_oflag = tty->termios.c_oflag; + tmp_termio.c_cflag = tty->termios.c_cflag; + tmp_termio.c_lflag = tty->termios.c_lflag; + tmp_termio.c_line = tty->termios.c_line; + for(i=0 ; i < NCC ; i++) + tmp_termio.c_cc[i] = tty->termios.c_cc[i]; + for (i=0 ; i< (sizeof (*termio)) ; i++) + put_fs_byte( ((char *)&tmp_termio)[i] , i+(char *)termio ); + return 0; +} + +/* + * This only works as the 386 is low-byt-first + */ +static int set_termio(struct tty_struct * tty, struct termio * termio) +{ + int i; + struct termio tmp_termio; + + for (i=0 ; i< (sizeof (*termio)) ; i++) + ((char *)&tmp_termio)[i]=get_fs_byte(i+(char *)termio); + *(unsigned short *)&tty->termios.c_iflag = tmp_termio.c_iflag; + *(unsigned short *)&tty->termios.c_oflag = tmp_termio.c_oflag; + *(unsigned short *)&tty->termios.c_cflag = tmp_termio.c_cflag; + *(unsigned short *)&tty->termios.c_lflag = tmp_termio.c_lflag; + tty->termios.c_line = tmp_termio.c_line; + for(i=0 ; i < NCC ; i++) + tty->termios.c_cc[i] = tmp_termio.c_cc[i]; + change_speed(tty); + return 0; +} + +int tty_ioctl(int dev, int cmd, int arg) +{ + struct tty_struct * tty; + if (MAJOR(dev) == 5) { + dev=current->tty; + if (dev<0) + panic("tty_ioctl: dev<0"); + } else + dev=MINOR(dev); + tty = dev + tty_table; + switch (cmd) { + case TCGETS: + return get_termios(tty,(struct termios *) arg); + case TCSETSF: + flush(&tty->read_q); /* fallthrough */ + case TCSETSW: + wait_until_sent(tty); /* fallthrough */ + case TCSETS: + return set_termios(tty,(struct termios *) arg); + case TCGETA: + return get_termio(tty,(struct termio *) arg); + case TCSETAF: + flush(&tty->read_q); /* fallthrough */ + case TCSETAW: + wait_until_sent(tty); /* fallthrough */ + case TCSETA: + return set_termio(tty,(struct termio *) arg); + case TCSBRK: + if (!arg) { + wait_until_sent(tty); + send_break(tty); + } + return 0; + case TCXONC: + return -EINVAL; /* not implemented */ + case TCFLSH: + if (arg==0) + flush(&tty->read_q); + else if (arg==1) + flush(&tty->write_q); + else if (arg==2) { + flush(&tty->read_q); + flush(&tty->write_q); + } else + return -EINVAL; + return 0; + case TIOCEXCL: + return -EINVAL; /* not implemented */ + case TIOCNXCL: + return -EINVAL; /* not implemented */ + case TIOCSCTTY: + return -EINVAL; /* set controlling term NI */ + case TIOCGPGRP: + verify_area((void *) arg,4); + put_fs_long(tty->pgrp,(unsigned long *) arg); + return 0; + case TIOCSPGRP: + tty->pgrp=get_fs_long((unsigned long *) arg); + return 0; + case TIOCOUTQ: + verify_area((void *) arg,4); + put_fs_long(CHARS(tty->write_q),(unsigned long *) arg); + return 0; + case TIOCINQ: + verify_area((void *) arg,4); + put_fs_long(CHARS(tty->secondary), + (unsigned long *) arg); + return 0; + case TIOCSTI: + return -EINVAL; /* not implemented */ + case TIOCGWINSZ: + return -EINVAL; /* not implemented */ + case TIOCSWINSZ: + return -EINVAL; /* not implemented */ + case TIOCMGET: + return -EINVAL; /* not implemented */ + case TIOCMBIS: + return -EINVAL; /* not implemented */ + case TIOCMBIC: + return -EINVAL; /* not implemented */ + case TIOCMSET: + return -EINVAL; /* not implemented */ + case TIOCGSOFTCAR: + return -EINVAL; /* not implemented */ + case TIOCSSOFTCAR: + return -EINVAL; /* not implemented */ + default: + return -EINVAL; + } +} diff --git a/linux-0.11-lab/0/linux/kernel/chr_drv/tty_ioctl.o b/linux-0.11-lab/0/linux/kernel/chr_drv/tty_ioctl.o new file mode 100644 index 0000000000000000000000000000000000000000..6fcf766d95e129c53038533553e2124de8516b4b GIT binary patch literal 10648 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/kernel/exit.c b/linux-0.11-lab/0/linux/kernel/exit.c new file mode 100644 index 0000000..2406ebe --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/exit.c @@ -0,0 +1,197 @@ +/* + * linux/kernel/exit.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include +#include + +#include +#include +#include +#include + +int sys_pause(void); +int sys_close(int fd); + +void release(struct task_struct * p) +{ + int i; + + if (!p) + return; + for (i=1 ; i32) + return -EINVAL; + if (priv || (current->euid==p->euid) || suser()) + p->signal |= (1<<(sig-1)); + else + return -EPERM; + return 0; +} + +static void kill_session(void) +{ + struct task_struct **p = NR_TASKS + task; + + while (--p > &FIRST_TASK) { + if (*p && (*p)->session == current->session) + (*p)->signal |= 1<<(SIGHUP-1); + } +} + +/* + * XXX need to check permissions needed to send signals to process + * groups, etc. etc. kill() permissions semantics are tricky! + */ +int sys_kill(int pid,int sig) +{ + struct task_struct **p = NR_TASKS + task; + int err, retval = 0; + + if (!pid) while (--p > &FIRST_TASK) { + if (*p && (*p)->pgrp == current->pid) + if (err=send_sig(sig,*p,1)) + retval = err; + } else if (pid>0) while (--p > &FIRST_TASK) { + if (*p && (*p)->pid == pid) + if (err=send_sig(sig,*p,0)) + retval = err; + } else if (pid == -1) while (--p > &FIRST_TASK) + if (err = send_sig(sig,*p,0)) + retval = err; + else while (--p > &FIRST_TASK) + if (*p && (*p)->pgrp == -pid) + if (err = send_sig(sig,*p,0)) + retval = err; + return retval; +} + +static void tell_father(int pid) +{ + int i; + + if (pid) + for (i=0;ipid != pid) + continue; + task[i]->signal |= (1<<(SIGCHLD-1)); + return; + } +/* if we don't find any fathers, we just release ourselves */ +/* This is not really OK. Must change it to make father 1 */ + printk("BAD BAD - no father found\n\r"); + release(current); +} + +int do_exit(long code) +{ + int i; + + free_page_tables(get_base(current->ldt[1]),get_limit(0x0f)); + free_page_tables(get_base(current->ldt[2]),get_limit(0x17)); + for (i=0 ; ifather == current->pid) { + task[i]->father = 1; + if (task[i]->state == TASK_ZOMBIE) + /* assumption task[1] is always init */ + (void) send_sig(SIGCHLD, task[1], 1); + } + for (i=0 ; ifilp[i]) + sys_close(i); + iput(current->pwd); + current->pwd=NULL; + iput(current->root); + current->root=NULL; + iput(current->executable); + current->executable=NULL; + if (current->leader && current->tty >= 0) + tty_table[current->tty].pgrp = 0; + if (last_task_used_math == current) + last_task_used_math = NULL; + if (current->leader) + kill_session(); + current->state = TASK_ZOMBIE; + current->exit_code = code; + tell_father(current->father); + schedule(); + return (-1); /* just to suppress warnings */ +} + +int sys_exit(int error_code) +{ + return do_exit((error_code&0xff)<<8); +} + +int sys_waitpid(pid_t pid,unsigned long * stat_addr, int options) +{ + int flag, code; + struct task_struct ** p; + + verify_area(stat_addr,4); +repeat: + flag=0; + for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) { + if (!*p || *p == current) + continue; + if ((*p)->father != current->pid) + continue; + if (pid>0) { + if ((*p)->pid != pid) + continue; + } else if (!pid) { + if ((*p)->pgrp != current->pgrp) + continue; + } else if (pid != -1) { + if ((*p)->pgrp != -pid) + continue; + } + switch ((*p)->state) { + case TASK_STOPPED: + if (!(options & WUNTRACED)) + continue; + put_fs_long(0x7f,stat_addr); + return (*p)->pid; + case TASK_ZOMBIE: + current->cutime += (*p)->utime; + current->cstime += (*p)->stime; + flag = (*p)->pid; + code = (*p)->exit_code; + release(*p); + put_fs_long(code,stat_addr); + return flag; + default: + flag=1; + continue; + } + } + if (flag) { + if (options & WNOHANG) + return 0; + current->state=TASK_INTERRUPTIBLE; + schedule(); + if (!(current->signal &= ~(1<<(SIGCHLD-1)))) + goto repeat; + else + return -EINTR; + } + return -ECHILD; +} + + diff --git a/linux-0.11-lab/0/linux/kernel/exit.o b/linux-0.11-lab/0/linux/kernel/exit.o new file mode 100644 index 0000000000000000000000000000000000000000..97c5057fd4da000378b2c23ca0dba2b274e9b855 GIT binary patch literal 11164 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 + +#include +#include +#include +#include + +extern void write_verify(unsigned long address); + +long last_pid=0; + +void verify_area(void * addr,int size) +{ + unsigned long start; + + start = (unsigned long) addr; + size += start & 0xfff; + start &= 0xfffff000; + start += get_base(current->ldt[2]); + while (size>0) { + size -= 4096; + write_verify(start); + start += 4096; + } +} + +int copy_mem(int nr,struct task_struct * p) +{ + unsigned long old_data_base,new_data_base,data_limit; + unsigned long old_code_base,new_code_base,code_limit; + + code_limit=get_limit(0x0f); + data_limit=get_limit(0x17); + old_code_base = get_base(current->ldt[1]); + old_data_base = get_base(current->ldt[2]); + if (old_data_base != old_code_base) + panic("We don't support separate I&D"); + if (data_limit < code_limit) + panic("Bad data_limit"); + new_data_base = new_code_base = nr * 0x4000000; + p->start_code = new_code_base; + set_base(p->ldt[1],new_code_base); + set_base(p->ldt[2],new_data_base); + if (copy_page_tables(old_data_base,new_data_base,data_limit)) { + free_page_tables(new_data_base,data_limit); + return -ENOMEM; + } + return 0; +} + +/* + * Ok, this is the main fork-routine. It copies the system process + * information (task[nr]) and sets up the necessary registers. It + * also copies the data segment in it's entirety. + */ +int copy_process(int nr,long ebp,long edi,long esi,long gs,long none, + long ebx,long ecx,long edx, + long fs,long es,long ds, + long eip,long cs,long eflags,long esp,long ss) +{ + struct task_struct *p; + int i; + struct file *f; + + p = (struct task_struct *) get_free_page(); + if (!p) + return -EAGAIN; + task[nr] = p; + __asm__ volatile ("cld"); /* by wyj */ + *p = *current; /* NOTE! this doesn't copy the supervisor stack */ + p->state = TASK_UNINTERRUPTIBLE; + p->pid = last_pid; + p->father = current->pid; + p->counter = p->priority; + p->signal = 0; + p->alarm = 0; + p->leader = 0; /* process leadership doesn't inherit */ + p->utime = p->stime = 0; + p->cutime = p->cstime = 0; + p->start_time = jiffies; + p->tss.back_link = 0; + p->tss.esp0 = PAGE_SIZE + (long) p; + p->tss.ss0 = 0x10; + p->tss.eip = eip; + p->tss.eflags = eflags; + p->tss.eax = 0; + p->tss.ecx = ecx; + p->tss.edx = edx; + p->tss.ebx = ebx; + p->tss.esp = esp; + p->tss.ebp = ebp; + p->tss.esi = esi; + p->tss.edi = edi; + p->tss.es = es & 0xffff; + p->tss.cs = cs & 0xffff; + p->tss.ss = ss & 0xffff; + p->tss.ds = ds & 0xffff; + p->tss.fs = fs & 0xffff; + p->tss.gs = gs & 0xffff; + p->tss.ldt = _LDT(nr); + p->tss.trace_bitmap = 0x80000000; + if (last_task_used_math == current) + __asm__("clts ; fnsave %0"::"m" (p->tss.i387)); + if (copy_mem(nr,p)) { + task[nr] = NULL; + free_page((long) p); + return -EAGAIN; + } + for (i=0; ifilp[i]) + f->f_count++; + if (current->pwd) + current->pwd->i_count++; + if (current->root) + current->root->i_count++; + if (current->executable) + current->executable->i_count++; + set_tss_desc(gdt+(nr<<1)+FIRST_TSS_ENTRY,&(p->tss)); + set_ldt_desc(gdt+(nr<<1)+FIRST_LDT_ENTRY,&(p->ldt)); + p->state = TASK_RUNNING; /* do this last, just in case */ + return last_pid; +} + +int find_empty_process(void) +{ + int i; + + repeat: + if ((++last_pid)<0) last_pid=1; + for(i=0 ; ipid == last_pid) goto repeat; + for(i=1 ; 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 Mi^Z-!?KYSAen*aa+ literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/kernel/math/Makefile b/linux-0.11-lab/0/linux/kernel/math/Makefile new file mode 100644 index 0000000..b35d488 --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/math/Makefile @@ -0,0 +1,43 @@ +# +# Makefile for the FREAX-kernel character device drivers. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). +# + +AR =ar +AS =as +LD =ld +LDFLAGS =-s -x +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -nostdinc -fno-stack-protector -I../../include +CPP =gcc -E -nostdinc -I../../include + +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< +.s.o: + $(AS) -o $*.o $< +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< + +OBJS = math_emulate.o + +math.a: $(OBJS) + $(AR) rcs math.a $(OBJS) + sync + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: diff --git a/linux-0.11-lab/0/linux/kernel/math/math.a b/linux-0.11-lab/0/linux/kernel/math/math.a new file mode 100644 index 0000000000000000000000000000000000000000..f92fb43a9c019f8e75bf744c65f88b59c8d4ba88 GIT binary patch literal 6628 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 + +#include +#include +#include + +void math_emulate(long edi, long esi, long ebp, long sys_call_ret, + long eax,long ebx,long ecx,long edx, + unsigned short fs,unsigned short es,unsigned short ds, + unsigned long eip,unsigned short cs,unsigned long eflags, + unsigned short ss, unsigned long esp) +{ + unsigned char first, second; + +/* 0x0007 means user code space */ + if (cs != 0x000F) { + printk("math_emulate: %04x:%08x\n\r",cs,eip); + panic("Math emulation needed in kernel"); + } + first = get_fs_byte((char *)((*&eip)++)); + second = get_fs_byte((char *)((*&eip)++)); + printk("%04x:%08x %02x %02x\n\r",cs,eip-2,first,second); + current->signal |= 1<<(SIGFPE-1); +} + +void math_error(void) +{ + __asm__("fnclex"); + if (last_task_used_math) + last_task_used_math->signal |= 1<<(SIGFPE-1); +} diff --git a/linux-0.11-lab/0/linux/kernel/math/math_emulate.o b/linux-0.11-lab/0/linux/kernel/math/math_emulate.o new file mode 100644 index 0000000000000000000000000000000000000000..8a98b22720edd26bc9b196e2d1b86549665ddef0 GIT binary patch literal 6464 zcma)AYiu0V8ND;RzTRXXcI?=3lvFHYLmY_Lc4CMLNr;IP5-<=F1AzoKv%9mqgZIVG zY+^%HKmnQ%rD{+_D+;2hNNs6Ul~M{6R0V>lTB%jkRuwI@DzueCA3qRO{ZZQVoI7{y zb%fN8Jaf+XxZnNmcONtB2ewXZGYmrnmmxx8P7>lvoxWv6LBHq`U1ImK@l+)Lm^gCg z$UA$_+_wAh-^P!5srs>fDeu@sYWmp8)PwLo_HgP5pm5Yntu7qhm+CJZok*n$M<-Ls z!qM^6^1|Umsbq(@>eyuJP{+&TsU$2B7{Wger_fHE`}F+z^We(^j$RKP-)X?@(9v+} z+yR)6jHj--K%Mc`n>v0lk-}qAJM8(7-^WC%69Hn#C+KTK5dT^BdaOr1cf}t3>4Qgi z#ty$VzW44k?|z_ckDT@vf0ol3G^to#DPvcfWy`bICsz!OOs`)tG&;R74%>~eC4HMy zt0t?qowxHzr<$Cy8&$h3X1&pF&9r);-3#qPgqe&88)r-*jIZDk!p&=uo+C5d{s}}g z-1a0O6mD~>o-ob!Rj`{z%e!7Q-Xb7XAPbwM1JR ziHK%33nS}xjw5zEg1sJ+H~k$+$&>JrJDIJJRVr>F56cWZ7G|j31_OJJVWh#wRK4VFG<-{Pe7_+>G}@=Ub9yBHNhKLdxXKX`$at)SbML zcQEv7M59FsLuULtOhySKX8e7IR>G(mug(e^%tVs`?p%+So6Y#k44{N-&GVHVo}!3_;CivQSi+8 zuj!VjFm1-0?8j!U4`Fc3ps)=<}VuA@(m zJT70QKL0U16Y^2UDRA8-`+fI=W$r180 zqOfDbkN!Ev6AxZbZW8#Azvpy zKyFH&*6jz$!*Yh5P18Lh?`Lu|TnsVPlVxms3qo1;e;4*>jQIGs` z@<_Dc)P-D49*Y)on4bai&S;@lL($0>gF`<^-Y5TxryOGV<)VWsPN$l@ZqfD;^8A%t z%dIKjr{f4cgxmnVyn;L&b=@H$uOyGiG3wWm$Dkh;a+JJNZlnGx^2N}v5pq3wUo_WP zE9BMW%cC|E-$0&}KcW9d@>JBeriI)@-XFDd0bd=p^8p`<+S!1QL~R#wuA%=Z^x&Jx zH$d+QIYz!2ZNaZ4ABSGZEu`C{EY~>c1hN!zE9uT?9&{V&WV8T!9qFEE5p+B0zNp$0 zJIMFT%kY%fljr3_{j?#uyUgy?1L#=5y5+QoN5>N#b=-o<8rR85cLh1AQzn_Wy1 zO?z3EKnnM=V1X3rV$OjS>*Yk4-F~}Hc+N?SdpR+Itq(oSNy~dtG;^_9_b2wDyIEmR zFDe^YCVM&mX3qyIt<}Al3bV&=w6lxLAux^fVrtA@-!y@EXw~bt+OXsmRK@ILAX##2j2;VqBy=vew8dXSHi3S*J6BGDZUC6*-?8C|k-30kE@ zG`a~Y9BrCLu=IOHD6u|zb#zBJ_Gz~fN<^a+4Tv&6Ya5MXPxlxrmr@^T6ZBrtfq*0n zd&J76*v)W{_@U??Q^DGTVDXk@9 z+&Q;vmTrIoCk<+f8#PoGq-d_`j%;+g2Tw#cng)jBdRD{B;F+5e zdE3o_Hkvt4*wuU{Z+Vt*txTb8;f(PbR?g039j{{5g_Efw|0x&5@|=n-n*Ot5xl^Km zPgJ`hny#JCa71u&ZF@?fBAJ|3E@v9H2VJGs#P_AMc61$zkgHYm^mFdB1+wvMQLa^s z_^$Ot0iJmq#=29tg;lm16=CxWsGu`rh#>D;p^!oL({`@uS=q8JvKU#0xgu=Ftz!(L zS!F5JS2LsM{5&!_H3Ze|JP#+s?beD%H+y5*Ur?c8Rm&(9qrB0bHatIdUT4e?O`<8axFJy=jW{s1iY_S zwbeYSo@{@XFft1Rsa4^i%I4axOEK4MG_cMDzLbJmJ^`T0Q0u&s~ zOd(Up+aI(piWq0X&17d#JuIzeW!_k^6a2L=>cvJ~*ep)LX}F$Hv9G)7*5sDtNP09q zk{qa5ja+FXR>YOyxpF=^P)rUKY8A&DC^W2!Jy5SM&HhuYXJ&!whQ_)?d-I)ru7SL<>SPEFfE~hXPZR~ zyikLS;#M}>z{W_=S*?auE#l?eqQdsIg9hkJq;s_j4^5G-V&>9V0RBw+ZR}D;O|{DQ z|9V^mFCOdoT2a>so~>^I+ITI)y+ASlaRk5b_kiM+r`q%E#p_t`S1{Y)pjOw`Ab^$w z@p8!Y|6hJX@L?POO@;462)iH$7yISK|2_nw`QgEpYzW;DvRC<4kaynxg1dkcj~lISb2-3Ga}-%h-OxyINp^+CTC@SqK-_yyv< zPol5D=0I+Zmqa|)lkxENF&l3NoNZV~UN6G{~T zWpNwW$VH%u1glzhDPs}+T+6@I_ID_E3GsW4pAfNF{;e^D38&1n!N3NK5m9EYMHI1h + +/* + * This isn't the library routine, it is only used in the kernel. + * as such, we don't care about years<1970 etc, but assume everything + * is ok. Similarly, TZ etc is happily ignored. We just do everything + * as easily as possible. Let's find something public for the library + * routines (although I think minix times is public). + */ +/* + * PS. I hate whoever though up the year 1970 - couldn't they have gotten + * a leap-year instead? I also hate Gregorius, pope or no. I'm grumpy. + */ +#define MINUTE 60 +#define HOUR (60*MINUTE) +#define DAY (24*HOUR) +#define YEAR (365*DAY) + +/* interestingly, we assume leap-years */ +static int month[12] = { + 0, + DAY*(31), + DAY*(31+29), + DAY*(31+29+31), + DAY*(31+29+31+30), + DAY*(31+29+31+30+31), + DAY*(31+29+31+30+31+30), + DAY*(31+29+31+30+31+30+31), + DAY*(31+29+31+30+31+30+31+31), + DAY*(31+29+31+30+31+30+31+31+30), + DAY*(31+29+31+30+31+30+31+31+30+31), + DAY*(31+29+31+30+31+30+31+31+30+31+30) +}; + +long kernel_mktime(struct tm * tm) +{ + long res; + int year; + if (tm->tm_year < 70 ) tm->tm_year += 100; /* gohigh */ + year = tm->tm_year - 70; +/* magic offsets (y+1) needed to get leapyears right.*/ + res = YEAR*year + DAY*((year+1)/4); + res += month[tm->tm_mon]; +/* and (y+2) here. If it wasn't a leap-year, we have to adjust */ + if (tm->tm_mon>1 && ((year+2)%4)) + res -= DAY; + res += DAY*(tm->tm_mday-1); + res += HOUR*tm->tm_hour; + res += MINUTE*tm->tm_min; + res += tm->tm_sec; + return res; +} diff --git a/linux-0.11-lab/0/linux/kernel/mktime.o b/linux-0.11-lab/0/linux/kernel/mktime.o new file mode 100644 index 0000000000000000000000000000000000000000..6694bf8258168567f68b2aba8bfc5ed630e30698 GIT binary patch literal 2872 zcma)8U1%It6h3!mHraGH+f8=c=BL9R=z+QC zJLlZh2X+aMEv_t>trhe7 zs=+FMvsh7H_c`1WH#v6H&lF#_7Ezv9*R)o}g{=tMS}|I;&BYZj{7N|;Z9Xl?_laJb zy7!+sbi64(04lkZ^z#JEw@~X^<|*sGoj9@%qYI3-zKwt5w^gpqUj~T!PEd383^f<8 z5*2O|-T9N6-}eamWL(gJl4$n6A(|h2E>b)kOL|%2Nt}5PFW*T8(P1??!wQYF%COpD zFue+;jqZ;aTKk|*0Ft#II4RZEhrnBa!&WCpF}4Cntxo8-0mrQn^gX~ys}K5K;2vui za3An?3&%40fm0N+LM7Luwrebj!QH%qP@{PFZ$|B0mly;xE>pPX)Jg2cF5~jqj<1=E zhY-iO?9nD!cLZXD-J@6{INm?3=}2O4-(6lqCNC^>iQTb8#EkXFxcneQzY^j ztGFErVTL1-{gDF^k>ECTk{N?AnHY_52(>Xx)Mkr=y}s?i-pK?)jrF|qcrU!#Lu7`1 zFQbQ>HnKtNU{S?{b<<`}KFMAYAtn=WkM5+&M3&Rhc76;Lt)>d3#|T{J#~|E3A@0UH zd6kzHO|T+#TCCnYx$DpU%wJs-Bbgsx@RQRvR@s?bKYSJna`l3rj$BF>73&&%scXkDpCbUrK1xQ`%?p_ zW*V;7@Q;*vxFMzC3&SJ!(8!>#<*R`SFo|;~Nt_Rh{-|ZW&eP)8K+YOAIp2v`(i|5t zd6(__LdDC?kX`p`J}+uibIP{oob|{qJbHHN9lg{A-$Y1?s@gL!-S zBN1mE^5T3tFW>nM@!sQj^Q_aP`$J4UrLA^zH?rA;v#(!9l zgBc)OgxP>F5Bw(!k}2Q7b&W~#cYaM_$_cND?5(5uI+LR7MnXh#w zG`P#%nAqCq-~V;k_#GyCi}wmH8{YxJ+xEdL7= CPoF&i literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/kernel/panic.c b/linux-0.11-lab/0/linux/kernel/panic.c new file mode 100644 index 0000000..7d8a06b --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/panic.c @@ -0,0 +1,24 @@ +/* + * linux/kernel/panic.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This function is used through-out the kernel (includeinh mm and fs) + * to indicate a major problem. + */ +#include +#include + +void sys_sync(void); /* it's really int */ + +volatile void panic(const char * s) +{ + printk("Kernel panic: %s\n\r",s); + if (current == task[0]) + printk("In swapper task - not syncing\n\r"); + else + sys_sync(); + for(;;); +} diff --git a/linux-0.11-lab/0/linux/kernel/panic.o b/linux-0.11-lab/0/linux/kernel/panic.o new file mode 100644 index 0000000000000000000000000000000000000000..da42b57864ffc04172b2020b3f3f9096af53eb86 GIT binary patch literal 5424 zcma)AZEPIH8J^u)+q=HA2%ii9eZ}EL~ zcMsbrg{mJC1n~nEs8rDk1pP&;qW(cusRUJ9P$kq>MWU7Zfdr^jg|-w`YN3!m&+M#o z>7RC_+vj=TdEa+t-kI5%z5A~_dc-gckrqQpaZwWD=s;3aR4^viiZ$X(?{0kP@M!MA z!=u*A)+j69`S*nj7am$m`V=3#f7BU7)d;An`g2bLpNJd%u<6%xZMPYCdvaT%e#D<^ z=AuQn-S)#=>_!W@e6HDwbJ23s3!3vVc%)Ydi(!Rj+>NL4IC^-wsWf750>aFK*rs&^ zAYEbhkO*1U%o3K>SA`$o_X*4?==l@OdaRzH84JtoyN^o4z8}$hH-Y!$?m)d|^u7R1 z-)bqu3sN3?7=ryK;~!_Wu&I!rRi^gyaFaKa+xD~6-$I_XN61fPFqk3dAGA41{gCOr zM&Y(Hgb~yEHic8{{5sRI=%R#;rn3&ZM97)_<#0g@qo#ujEsUA{?Vuv$X@=frI;UBq zgbCC69-}FtXgViXgelW`X+@Ye`#TJ9djQWF)9Gb*lyJ~=rZN0PIBfRM)9enK9WkBf z89)iMrt?SoDB%Y5jl!Mm&Qa5uWp~a{IBq(BppOzxn2yQNN;qXY?UkB4k)0Lctm&L( zfVXap z)g&+4KPPXIUt_;Q-X`B^Kh5}`Bi|*=$KX6<#muDrcN%rrfUq+(x`*7fZzW$Ox9lQ2 zv82rHue0IhMd-80C)3#bE=+s-PSB0}WTbQ!lP{@ew9chay( z3t>M(ehs-Lqi90No#eKC3{Sa>JPZA#kW=JC_BUz2n|uWN?LzJ$UnjkAhmd>8H%gx! zpC-@Q187(7BOjH%yCmeb8xbB4wD{5FNM60^th~m9w9v;tDx7Do|5yRv!r)Qwddx@&)QexDQ_UJ z*sqh{cnJBdiR@o6+1#TlwVOnCD>#2T)ftOBFuMgV2U4vmR!<;t#t@Y1xGbSr_>^o zgPF{p%-)PK48s8-Z3=V4QyEP0sK{ilg#!*1O>HdP%Y+I4>VXvYsHo8g;-rM_ODMG zxN<$mFthIQgUW7A&q`<$r_S&d%59{$(w+V5rx5^49fQUXgHumF_O37?o&Yz+=kYX* zj|Kb zE&2Isr|HE(s~JJnY~@vt^X;$|`(E4%(T~XY7XXb`2iF)x-bGz-uPfw zGU0wjx8Wt-D51~Dj%xf8i=f2ILsV;paqf}|q;O(ox*=>wPdjZ)g&GLv%46@_VbBT# z9R5M6;@=~@dMolvt!9ZmMRx;j#_@AWh)A^-%twBV@s#T=Z^5s?`QBF3S97hR`pHaV zAg;=_7_YS&{&=%fiN{+}zUeO}D>Xk+n4HYl-SYTEq8MLLcUlBgxsCiN!c+;b6NWxg zj@v_;P%lymfnl<2(yVzkHxw#qSTxlDnXZ=FI9x#0YU?!gf)?%huq}L!NBPvT9pJ)S zGm{a7F(({(Qt^}4u!hx|L?+=DlsJ6RCsU76=O~su{Dt7mwuB(BR-u_>9`!J{+9dt?UZiU?4F3vr*#+X0q({>x+sSl_)gLqGp=#th2 zkh|mM5Rds}JRGwt@s`2q!#uKl45ORUq(f#Me_z&^+TDOpSYCY6lG;5C1$kOxe(H9W zwC*YB$kTbF-L@_}j+f;d_;rtCtZN)Ys7v#L<+id`K*f`Y_biDnX}jHRvg%O;;f;&? z9Jd`6k8#;%R~p2R(Li_q(s(etq;%^o@&1MG%1i&PVEpbDD5s-NyrjTgsjJA9U6|H$ zMlTk5Nv0T&Gkvj0fj=<1iWIB5B-(T27mGwj(%f^;ufdFUd(ir_i{{Fk?}46w*ToSE>^KP*L+?AO&2rCK~27jyL1WiI|V8h^Q~<`fG^TuiU2w z_9K>nF#2(M)QF{{WEBSsZ!={K@CvP;(|BCtZ5r>=Sl1Y7T+;XzjpsFfP2F z8ei7x!<7tgmjn8O&P9y(@qCY=Mi2Qei_=d)JHU3khh3&xlA&na~@}rr0 zewGtwG#=G>N@GQ1TjM#64`_T$<5L>Hqw)J1f1>f18sF0RSB)QO?87!?KZZ4K(s)?o zGa6sg_^QU=XnbFzgSE>zyET5G@q)&KSjeoOB_c=nYx%rJfH3gjzGD4(jX5B`8N`18 D&gTd! literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/kernel/printk.c b/linux-0.11-lab/0/linux/kernel/printk.c new file mode 100644 index 0000000..0daa097 --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/printk.c @@ -0,0 +1,41 @@ +/* + * linux/kernel/printk.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * When in kernel-mode, we cannot use printf, as fs is liable to + * point to 'interesting' things. Make a printf with fs-saving, and + * all is well. + */ +#include +#include + +#include + +static char buf[1024]; + +extern int vsprintf(char * buf, const char * fmt, va_list args); + +int printk(const char *fmt, ...) +{ + va_list args; + int i; + + va_start(args, fmt); + i=vsprintf(buf,fmt,args); + va_end(args); + __asm__("push %%fs\n\t" + "push %%ds\n\t" + "pop %%fs\n\t" + "pushl %0\n\t" + "pushl $buf\n\t" + "pushl $0\n\t" + "call tty_write\n\t" + "addl $8,%%esp\n\t" + "popl %0\n\t" + "pop %%fs" + ::"r" (i):"ax","cx","dx"); + return i; +} diff --git a/linux-0.11-lab/0/linux/kernel/printk.o b/linux-0.11-lab/0/linux/kernel/printk.o new file mode 100644 index 0000000000000000000000000000000000000000..93ce6e40ca451b8b2b024367e2fd7f575b694368 GIT binary patch literal 2424 zcma)7&2Jk;6o2DgCr+F=bwa44L}e?vC4jtkz$&FcNl74zT1BEwQKbUW+Fsk+*lV-9 zPLry@Ap#ObAoTzO!66j~E?kfhSCAS$gv5Ou_hxtEEfNw>nt8wXJ@aOE z_N^B#y(okrMS?WyOGHgQw3H>Ar3WZWSGNC{eQz;e-d)Vk>@DU?d#m}G-PL>wvi^gf zXV2gNK0G{xoZEXPpBvjhF?RP#ll3=3%l1L)`q*8>=C%)Juisi90ly z>aykdDJiyw91=P9O5ADEu%2|>07X85BF&XXc={4!l&3=tH3#1S8mjc_B(nQ}NevS+ zX2q$@L|V&CXR=~^;Mj4be2}!vx%AWNhz0-DrLfy04cA?ur zdfS82aa)dS7wSE?8aN%-hsx~~{J^TN7rI_2u&Y7GqgKal7(Lf_8m?V4_zbZkpEj(u zmg5KHJGbm$t7}uS*=gHFw^s{_9lzk(H;c&L+bopKxw%5isuWA1qPT8*uH6dra=N4a zR-2X=NkmHv3+Ig4tCgM`^uoOr9`8wM?#;QfSt>sgY6;&}NaEII61P)gdPLWE&{P9z zJ`yH*3>Pw~?ZiT+l(?8lUAUK#--hXLwF9d{rXP4AZz|;3Eiec z$O^M5i?7IF5RtO2K#teF2H_ZVT$lH!>e|3629V~E?;3-Ml+A)1&)0;&c{txNhRXLk zFvsw|nRb!ymk`RCZ9HyAT=~6`G|KE@(H-d7eQUg`kCXV589b>lVJwlj!6Ly5PP@Nmnz+;^@S&-W3E%tEI~ z@kn{1j;@ME+C(083(}ch`{!E#R3zOA&vW cIpTsy{wm_%F-Lt_7ZcwB_FIU!0iJ;T4?BzyrvLx| literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/kernel/sched.c b/linux-0.11-lab/0/linux/kernel/sched.c new file mode 100644 index 0000000..15d839b --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/sched.c @@ -0,0 +1,412 @@ +/* + * linux/kernel/sched.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * 'sched.c' is the main kernel file. It contains scheduling primitives + * (sleep_on, wakeup, schedule etc) as well as a number of simple system + * call functions (type getpid(), which just extracts a field from + * current-task + */ +#include +#include +#include +#include +#include +#include +#include + +#include + +#define _S(nr) (1<<((nr)-1)) +#define _BLOCKABLE (~(_S(SIGKILL) | _S(SIGSTOP))) + +void show_task(int nr,struct task_struct * p) +{ + int i,j = 4096-sizeof(struct task_struct); + + printk("%d: pid=%d, state=%d, ",nr,p->pid,p->state); + i=0; + while (i>2 ] ; + +struct { + long * a; + short b; + } stack_start = { & user_stack [PAGE_SIZE>>2] , 0x10 }; +/* + * 'math_state_restore()' saves the current math information in the + * old math state array, and gets the new ones from the current task + */ +void math_state_restore() +{ + if (last_task_used_math == current) + return; + __asm__("fwait"); + if (last_task_used_math) { + __asm__("fnsave %0"::"m" (last_task_used_math->tss.i387)); + } + last_task_used_math=current; + if (current->used_math) { + __asm__("frstor %0"::"m" (current->tss.i387)); + } else { + __asm__("fninit"::); + current->used_math=1; + } +} + +/* + * 'schedule()' is the scheduler function. This is GOOD CODE! There + * probably won't be any reason to change this, as it should work well + * in all circumstances (ie gives IO-bound processes good response etc). + * The one thing you might take a look at is the signal-handler code here. + * + * NOTE!! Task 0 is the 'idle' task, which gets called when no other + * tasks can run. It can not be killed, and it cannot sleep. The 'state' + * information in task[0] is never used. + */ +void schedule(void) +{ + int i,next,c; + struct task_struct ** p; + +/* check alarm, wake up any interruptible tasks that have got a signal */ + + for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) + if (*p) { + if ((*p)->alarm && (*p)->alarm < jiffies) { + (*p)->signal |= (1<<(SIGALRM-1)); + (*p)->alarm = 0; + } + if (((*p)->signal & ~(_BLOCKABLE & (*p)->blocked)) && + (*p)->state==TASK_INTERRUPTIBLE) + (*p)->state=TASK_RUNNING; + } + +/* this is the scheduler proper: */ + + while (1) { + c = -1; + next = 0; + i = NR_TASKS; + p = &task[NR_TASKS]; + while (--i) { + if (!*--p) + continue; + if ((*p)->state == TASK_RUNNING && (*p)->counter > c) + c = (*p)->counter, next = i; + } + if (c) break; + for(p = &LAST_TASK ; p > &FIRST_TASK ; --p) + if (*p) + (*p)->counter = ((*p)->counter >> 1) + + (*p)->priority; + } + switch_to(next); +} + +int sys_pause(void) +{ + current->state = TASK_INTERRUPTIBLE; + schedule(); + return 0; +} + +void sleep_on(struct task_struct **p) +{ + struct task_struct *tmp; + + if (!p) + return; + if (current == &(init_task.task)) + panic("task[0] trying to sleep"); + tmp = *p; + *p = current; + current->state = TASK_UNINTERRUPTIBLE; + schedule(); + if (tmp) + tmp->state=0; +} + +void interruptible_sleep_on(struct task_struct **p) +{ + struct task_struct *tmp; + + if (!p) + return; + if (current == &(init_task.task)) + panic("task[0] trying to sleep"); + tmp=*p; + *p=current; +repeat: current->state = TASK_INTERRUPTIBLE; + schedule(); + if (*p && *p != current) { + (**p).state=0; + goto repeat; + } + *p=NULL; + if (tmp) + tmp->state=0; +} + +void wake_up(struct task_struct **p) +{ + if (p && *p) { + (**p).state=0; + *p=NULL; + } +} + +/* + * OK, here are some floppy things that shouldn't be in the kernel + * proper. They are here because the floppy needs a timer, and this + * was the easiest way of doing it. + */ +static struct task_struct * wait_motor[4] = {NULL,NULL,NULL,NULL}; +static int mon_timer[4]={0,0,0,0}; +static int moff_timer[4]={0,0,0,0}; +unsigned char current_DOR = 0x0C; + +int ticks_to_floppy_on(unsigned int nr) +{ + extern unsigned char selected; + unsigned char mask = 0x10 << nr; + + if (nr>3) + panic("floppy_on: nr>3"); + moff_timer[nr]=10000; /* 100 s = very big :-) */ + cli(); /* use floppy_off to turn it off */ + mask |= current_DOR; + if (!selected) { + mask &= 0xFC; + mask |= nr; + } + if (mask != current_DOR) { + outb(mask,FD_DOR); + if ((mask ^ current_DOR) & 0xf0) + mon_timer[nr] = HZ/2; + else if (mon_timer[nr] < 2) + mon_timer[nr] = 2; + current_DOR = mask; + } + sti(); + return mon_timer[nr]; +} + +void floppy_on(unsigned int nr) +{ + cli(); + while (ticks_to_floppy_on(nr)) + sleep_on(nr+wait_motor); + sti(); +} + +void floppy_off(unsigned int nr) +{ + moff_timer[nr]=3*HZ; +} + +void do_floppy_timer(void) +{ + int i; + unsigned char mask = 0x10; + + for (i=0 ; i<4 ; i++,mask <<= 1) { + if (!(mask & current_DOR)) + continue; + if (mon_timer[i]) { + if (!--mon_timer[i]) + wake_up(i+wait_motor); + } else if (!moff_timer[i]) { + current_DOR &= ~mask; + outb(current_DOR,FD_DOR); + } else + moff_timer[i]--; + } +} + +#define TIME_REQUESTS 64 + +static struct timer_list { + long jiffies; + void (*fn)(); + struct timer_list * next; +} timer_list[TIME_REQUESTS], * next_timer = NULL; + +void add_timer(long jiffies, void (*fn)(void)) +{ + struct timer_list * p; + + if (!fn) + return; + cli(); + if (jiffies <= 0) + (fn)(); + else { + for (p = timer_list ; p < timer_list + TIME_REQUESTS ; p++) + if (!p->fn) + break; + if (p >= timer_list + TIME_REQUESTS) + panic("No more time requests free"); + p->fn = fn; + p->jiffies = jiffies; + p->next = next_timer; + next_timer = p; + while (p->next && p->next->jiffies < p->jiffies) { + p->jiffies -= p->next->jiffies; + fn = p->fn; + p->fn = p->next->fn; + p->next->fn = fn; + jiffies = p->jiffies; + p->jiffies = p->next->jiffies; + p->next->jiffies = jiffies; + p = p->next; + } + } + sti(); +} + +void do_timer(long cpl) +{ + extern int beepcount; + extern void sysbeepstop(void); + + if (beepcount) + if (!--beepcount) + sysbeepstop(); + + if (cpl) + current->utime++; + else + current->stime++; + + if (next_timer) { + next_timer->jiffies--; + while (next_timer && next_timer->jiffies <= 0) { + void (*fn)(void); + + fn = next_timer->fn; + next_timer->fn = NULL; + next_timer = next_timer->next; + (fn)(); + } + } + if (current_DOR & 0xf0) + do_floppy_timer(); + if ((--current->counter)>0) return; + current->counter=0; + if (!cpl) return; + schedule(); +} + +int sys_alarm(long seconds) +{ + int old = current->alarm; + + if (old) + old = (old - jiffies) / HZ; + current->alarm = (seconds>0)?(jiffies+HZ*seconds):0; + return (old); +} + +int sys_getpid(void) +{ + return current->pid; +} + +int sys_getppid(void) +{ + return current->father; +} + +int sys_getuid(void) +{ + return current->uid; +} + +int sys_geteuid(void) +{ + return current->euid; +} + +int sys_getgid(void) +{ + return current->gid; +} + +int sys_getegid(void) +{ + return current->egid; +} + +int sys_nice(long increment) +{ + if (current->priority-increment>0) + current->priority -= increment; + return 0; +} + +void sched_init(void) +{ + int i; + struct desc_struct * p; + + if (sizeof(struct sigaction) != 16) + panic("Struct sigaction MUST be 16 bytes"); + set_tss_desc(gdt+FIRST_TSS_ENTRY,&(init_task.task.tss)); + set_ldt_desc(gdt+FIRST_LDT_ENTRY,&(init_task.task.ldt)); + p = gdt+2+FIRST_TSS_ENTRY; + for(i=1;ia=p->b=0; + p++; + p->a=p->b=0; + p++; + } +/* Clear NT, so that we won't have troubles with that later on */ + __asm__("pushfl ; andl $0xffffbfff,(%esp) ; popfl"); + ltr(0); + lldt(0); + outb_p(0x36,0x43); /* binary, mode 3, LSB/MSB, ch 0 */ + outb_p(LATCH & 0xff , 0x40); /* LSB */ + outb(LATCH >> 8 , 0x40); /* MSB */ + set_intr_gate(0x20,&timer_interrupt); + outb(inb_p(0x21)&~0x01,0x21); + set_system_gate(0x80,&system_call); +} diff --git a/linux-0.11-lab/0/linux/kernel/sched.o b/linux-0.11-lab/0/linux/kernel/sched.o new file mode 100644 index 0000000000000000000000000000000000000000..8907e54fae556c36d88e61cb2d6e7dbb043a4216 GIT binary patch literal 22732 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 U-~)n>3HAxTA^3?P_htI|KkS5JegFUf literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/kernel/signal.c b/linux-0.11-lab/0/linux/kernel/signal.c new file mode 100644 index 0000000..8d5a65f --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/signal.c @@ -0,0 +1,129 @@ +/* + * linux/kernel/signal.c + * + * (C) 1991 Linus Torvalds + */ + +#include +#include +#include +#include +#include + +volatile void do_exit(int error_code); + +int sys_sgetmask() +{ + return current->blocked; +} + +int sys_ssetmask(int newmask) +{ + int old=current->blocked; + + current->blocked = newmask & ~(1<<(SIGKILL-1)); + return old; +} + +int sys_sigpending() +{ + return -ENOSYS; +} + +int sys_sigsuspend() +{ + return -ENOSYS; +} + +static inline void save_old(char * from,char * to) +{ + int i; + + verify_area(to, sizeof(struct sigaction)); + for (i=0 ; i< sizeof(struct sigaction) ; i++) { + put_fs_byte(*from,to); + from++; + to++; + } +} + +static inline void get_new(char * from,char * to) +{ + int i; + + for (i=0 ; i< sizeof(struct sigaction) ; i++) + *(to++) = get_fs_byte(from++); +} + +int sys_signal(int signum, long handler, long restorer) +{ + struct sigaction tmp; + + if (signum<1 || signum>32 || signum==SIGKILL) + return -1; + tmp.sa_handler = (void (*)(int)) handler; + tmp.sa_mask = 0; + tmp.sa_flags = SA_ONESHOT | SA_NOMASK; + tmp.sa_restorer = (void (*)(void)) restorer; + handler = (long) current->sigaction[signum-1].sa_handler; + current->sigaction[signum-1] = tmp; + return handler; +} + +int sys_sigaction(int signum, const struct sigaction * action, + struct sigaction * oldaction) +{ + struct sigaction tmp; + + if (signum<1 || signum>32 || signum==SIGKILL) + return -1; + tmp = current->sigaction[signum-1]; + get_new((char *) action, + (char *) (signum-1+current->sigaction)); + if (oldaction) + save_old((char *) &tmp,(char *) oldaction); + if (current->sigaction[signum-1].sa_flags & SA_NOMASK) + current->sigaction[signum-1].sa_mask = 0; + else + current->sigaction[signum-1].sa_mask |= (1<<(signum-1)); + return 0; +} + +void do_signal(long signr,long eax, long ebx, long ecx, long edx, + long fs, long es, long ds, + long eip, long cs, long eflags, + unsigned long * esp, long ss) +{ + unsigned long sa_handler; + long old_eip=eip; + struct sigaction * sa = current->sigaction + signr - 1; + int longs; + unsigned long * tmp_esp; + + sa_handler = (unsigned long) sa->sa_handler; + if (sa_handler==1) + return; + if (!sa_handler) { + if (signr==SIGCHLD) + return; + else + do_exit(1<<(signr-1)); + } + if (sa->sa_flags & SA_ONESHOT) + sa->sa_handler = NULL; + *(&eip) = sa_handler; + longs = (sa->sa_flags & SA_NOMASK)?7:8; + *(&esp) -= longs; + verify_area(esp,longs*4); + tmp_esp=esp; + put_fs_long((long) sa->sa_restorer,tmp_esp++); + put_fs_long(signr,tmp_esp++); + if (!(sa->sa_flags & SA_NOMASK)) + put_fs_long(current->blocked,tmp_esp++); + put_fs_long(eax,tmp_esp++); + put_fs_long(ecx,tmp_esp++); + put_fs_long(edx,tmp_esp++); + put_fs_long(eflags,tmp_esp++); + put_fs_long(old_eip,tmp_esp++); + current->blocked |= sa->sa_mask; +} diff --git a/linux-0.11-lab/0/linux/kernel/signal.o b/linux-0.11-lab/0/linux/kernel/signal.o new file mode 100644 index 0000000000000000000000000000000000000000..1970f39f72c6b0c63a277c6955a88089975ca4d3 GIT binary patch literal 8960 zcma)BdyrJsoj&(5GktrSre}H>85y;a7A88=(+s1qI>-zlI)I3P5rok6}?%E$_PW(gdc<=Pa+L;dcGo*MwJhd$xISH-oey#y$h?0Vo1=KUF*4v32^+FCs$VkG1>4A@OBDA#{HW!K$_#VZ-m=1&1&~ zFmtv7^Z<@R+|$_g(CX#K-ZHh5Qv%YkTM$<|`O4(mN9aHK`sBY(9y|LiqoO`rx5u0u zLd+rRD+_(cHM}Q?n?WS{sgzjvV`)sr{n% ziaB*D#xlD4=NdHoes${fcA<9IRn;6-cxu?A(y7jCG@J* zruGC1sC~r{;$4mzu9~9}dJh& z%~yn}xBNAQnx_pdG~W)oIkXjFOs)BDNLtJX!FYZL@+HGu_h*P>&7i}28VTzPD9qcX zgEhcLHjwsMTPWX1+Go8)`KGpJAp+i~NZ&zuK=+o&+?fE=p?epQ*~~7?*1bQhGu^tE zd$Xen>8**qEsIW~JUbMzgInTcvw#29V4xy7y6rmdtA1do=@WV>)Yf zZ;I)BiOhQ4dx$=g*`#|<)S1n?_rDoHYPRX#gLTag-MgOwwzJWc-dd^b5$28rn2hfI zQ)=SW2cfX1-@93BbkHX%^hMt4_j9Wo?gnkU(OPap)Er9j6kT=OBh4m8%nqsup zt!A{{w1dr=mPvV>w8wgx@siK0eG^Z=bvasZN^{k~Yi3Z$>K zJ|tZveVuhVt z{QF1;jC7$O%n0cY(2)0&o^3sX_-2&hyM>P;P8T^jfYZg}H=u!0JLA^G`^3Kt3SM>q*ZxlBGq$yn%GLVKea| z(jn`ov|ma(Y}oPL!n~1mk6|ZWy4SE%E*&-Ogi8+^b{TP&(S8Z!pod8hL7o-n2J5ODX= z4t< zp;|qnR50S5Q0SvnFyeiTxcY07QxVs?5nIej$UDfkn0(H8o^5UW27J!Q@K0Mv_*I6G zuQ`P8D3_VtiPhsW-JM+H`gW%t zp-wC}mkGCX$-7(+LclQQ%(321EJi)%ctyLpv+D8%gt~S2l1n(cOt2gmdeSLJN`7_e zse~;4w(e_LINOPs6PNunnltzFwIsAQ?J9q;)$q^pw`uLoflFW*)C_-X>-DWSv}!?Y zwljp`Au}3W(h9$@Xl=a_4tN6_`!nW>(O^I9{j;g&bJI^lb8bTfL3d7jp#u&*bAMRoBClsJT*So@NqL9TJ!4WCvUx#tfPKg2_N6OOH!5Q*Q?c9t>)R{IlE?e zU3OTX*YUweRnJn-3D48|NN~&E8*857!__U->Rq0R7Y?%(t@%U7t>9s7=A)U-8lHan zWOD}149^Kia8{oe^c;5o=~o7I6IIU@@_2uujxlt-Xy;Se{Fo?L;-yLq&*V;7k?Oce z+2tf8rE0PwU=>TnD{)bd$I`ht{41q+(vBsvmGO8{WMg>@)Xp-9cqKb-i>iELBU$J+ z6i-&Ng}kVa$IClKI$p`xB~dNgsn|GZar3%6LMuXpktLDAP~UjGl*}y6E?ROO=wvPx z>KhC7r3>TPN?*DZAGiC81$=$kB?z-@*X~PK^D=xHqI{uGcB8LYDpc%brBFgvW!v5f z7%x=u*@noADa-D)+3$)iSdtLG=+ZDr*-#d+~O3{ z=~zXm4%)lzWVI4c_LZ+YE<-R3gdQvzM87^7s`FereCh6zG!6O!oFNQ z(I0gL{X6Ya-ps*3STmkQ&~_?B(V z0}N~?o=@eVN#+V=J66cYSPo(D&Za`95v6&)iS5LNS0+;;U_VkN?{th z1CY$bkvi+o&Sf!#$T!CKW;#~Hu^pnK7(<>ILs@3bdn^=6P+hf?h~ikOC~Wph##0Gk zUlKWNNrvKGo&2v~V&p1W0s1T=h zIX;1s<2YBrNYuL@kGW%lsOLvcg(x$u%n+TBZDwP;;@OHQ6$%xchF7e(KGbtZ0^zI9 z>g*e+N^aqo7Y;_EgI{o@*ls(x=i<`#ZV=ji9&L`#H1}ak#;ZcU8K~n~Sd92RHGS>0 zA1?{|EKzdWi4}g&CMW_R*W;d#n=Z`AxpbPU3dYr%ui*{M~!~o)Kgoh3-FbyT?!JAJIqrzONc1 z{y@!K;ScG1{Q;QzMqY)>YsiT{VbsGtU|#GK#UIx%bYe|5!^b@}BEMnd9gU^K7kYWm zIQAJ}rQ~47rAl@#Qn7beL`3e{kp#|g5eidwqB@45PZyw)bUcwLVM#Y=fV`pM=n`V;#zv~K^p_}z_83f&Ua-fda9NaiI z*RMA&6XG#&?YL>fy5KM<|GG>bZ+Ch9r7W0Y0B*c%K-2#JvSU834@kjyKWs?E)p3j) z#3FOK5FywyKO8CR`3-}1eL#vN7RE0d1TMMZb9Rvc;?Y4}uH8EDjqUEc(wXmUm;H0= zVuN;lK#FyU$2IC+E*XcQG2Wje9^){c7q=Vl9?1;E6P>VA zHU!u1VMV*Dt6|r8(T>+Qag&y3HDE97imnp8o5GWz8~gDz`mqBt_G2b)w;xEmJ_kUG zL--1LhJ?D@(2Z?UwF49KD1`VJkTDq#C6#Tua|)~oVV=H7LS1e=mv^yIZi)}ixpLx# zzr2xeY=OKf$A-4tXLVGF9+cz5q5|0D43MgQ|}^2S3!<2met1E2eT zuAdip1b5%N?$JfQjNRjuIy=-4>CTzmJX`d$F%hXxDEx`S*A=$wjy|ezjl#_epHX-gsAG+6$5dt9qd>;p zj)g)@DU^Rv!WTBjS;K_odL;4}3L?KQHN=`roZ-x2%14!cy}~;cZdaI7SXRih0{!GZ z1AI*JPbqv(;ZGGFQ}}lZ|4HF#g=ZCFYRI_!ZHMs}C>&9^PT^LC8HEojd{p6c3SU$> zt?;D6-za=f;l~P1)*J1%DZEDEO$s+Cj48}1d|u&;3SUw9_X^)scv|6y3O`fm<#?jq zPK8%0j40%fBh;@_xIrQ31LgdUj5wk2L4{va_-%#XSNLOvFDv||!q*kPr|`cNYMft) zKSN=cLjJZx`D%sFD|}7iDTTjP__0F#;Ya!{Q}~I(CQM+)yG7v!B5D*@{38kvDEae> z|0{(rEBU`D{sV=dDtR-uTE-6$5%&tk4=G%wjHA|jtPir=DeOyQFXzfFYQ^NJs^oOoLmW)(i9@NtFTQHU}K v4X+dKxs3CDg(090en=tT2jnvfdF~+pgu)*vd`aQ26@H|!2kVLU+Z6r}gG3co literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/kernel/sys.c b/linux-0.11-lab/0/linux/kernel/sys.c new file mode 100644 index 0000000..695f287 --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/sys.c @@ -0,0 +1,292 @@ +/* + * linux/kernel/sys.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +#include +#include +#include +#include +#include +#include + +int sys_ftime() +{ + return -ENOSYS; +} + +int sys_break() +{ + return -ENOSYS; +} + +int sys_ptrace() +{ + return -ENOSYS; +} + +int sys_stty() +{ + return -ENOSYS; +} + +int sys_gtty() +{ + return -ENOSYS; +} + +int sys_rename() +{ + return -ENOSYS; +} + +int sys_prof() +{ + return -ENOSYS; +} + +int sys_setregid(int rgid, int egid) +{ + if (rgid>0) { + if ((current->gid == rgid) || + suser()) + current->gid = rgid; + else + return(-EPERM); + } + if (egid>0) { + if ((current->gid == egid) || + (current->egid == egid) || + suser()) { + current->egid = egid; + current->sgid = egid; + } else + return(-EPERM); + } + return 0; +} + +int sys_setgid(int gid) +{ +/* return(sys_setregid(gid, gid)); */ + if (suser()) + current->gid = current->egid = current->sgid = gid; + else if ((gid == current->gid) || (gid == current->sgid)) + current->egid = gid; + else + return -EPERM; + return 0; +} + +int sys_acct() +{ + return -ENOSYS; +} + +int sys_phys() +{ + return -ENOSYS; +} + +int sys_lock() +{ + return -ENOSYS; +} + +int sys_mpx() +{ + return -ENOSYS; +} + +int sys_ulimit() +{ + return -ENOSYS; +} + +int sys_time(long * tloc) +{ + int i; + + i = CURRENT_TIME; + if (tloc) { + verify_area(tloc,4); + put_fs_long(i,(unsigned long *)tloc); + } + return i; +} + +/* + * Unprivileged users may change the real user id to the effective uid + * or vice versa. + */ +int sys_setreuid(int ruid, int euid) +{ + int old_ruid = current->uid; + + if (ruid>0) { + if ((current->euid==ruid) || + (old_ruid == ruid) || + suser()) + current->uid = ruid; + else + return(-EPERM); + } + if (euid>0) { + if ((old_ruid == euid) || + (current->euid == euid) || + suser()) { + current->euid = euid; + current->suid = euid; + } else { + current->uid = old_ruid; + return(-EPERM); + } + } + return 0; +} + +int sys_setuid(int uid) +{ +/* return(sys_setreuid(uid, uid)); */ + if (suser()) + current->uid = current->euid = current->suid = uid; + else if ((uid == current->uid) || (uid == current->suid)) + current->euid = uid; + else + return -EPERM; + return(0); +} + +int sys_stime(long * tptr) +{ + if (!suser()) + return -EPERM; + startup_time = get_fs_long((unsigned long *)tptr) - jiffies/HZ; + return 0; +} + +int sys_times(struct tms * tbuf) +{ + if (tbuf) { + verify_area(tbuf,sizeof *tbuf); + put_fs_long(current->utime,(unsigned long *)&tbuf->tms_utime); + put_fs_long(current->stime,(unsigned long *)&tbuf->tms_stime); + put_fs_long(current->cutime,(unsigned long *)&tbuf->tms_cutime); + put_fs_long(current->cstime,(unsigned long *)&tbuf->tms_cstime); + } + return jiffies; +} + +int sys_brk(unsigned long end_data_seg) +{ + if (end_data_seg >= current->end_code && + end_data_seg < current->start_stack - 16384) + current->brk = end_data_seg; + return current->brk; +} + +/* + * This needs some heave checking ... + * I just haven't get the stomach for it. I also don't fully + * understand sessions/pgrp etc. Let somebody who does explain it. + */ +int sys_setpgid(int pid, int pgid) +{ + int i; + + if (!pid) + pid = current->pid; + if (!pgid) + pgid = current->pid; + for (i=0 ; ipid==pid) { + if (task[i]->leader) + return -EPERM; + if (task[i]->session != current->session) + return -EPERM; + task[i]->pgrp = pgid; + return 0; + } + return -ESRCH; +} + +int sys_getpgrp(void) +{ + return current->pgrp; +} + +int sys_setsid(void) +{ + if (current->leader && !suser()) + return -EPERM; + current->leader = 1; + current->session = current->pgrp = current->pid; + current->tty = -1; + return current->pgrp; +} + +int sys_getgroups() +{ + return -ENOSYS; +} + +int sys_setgroups() +{ + return -ENOSYS; +} + +int sys_uname(struct utsname * name) +{ + static struct utsname thisname = { + "linux .0","nodename","release ","version ","machine " + }; + int i; + + if (!name) return -ERROR; + verify_area(name,sizeof *name); + for(i=0;iumask; + + current->umask = mask & 0777; + return (old); +} diff --git a/linux-0.11-lab/0/linux/kernel/sys.o b/linux-0.11-lab/0/linux/kernel/sys.o new file mode 100644 index 0000000000000000000000000000000000000000..a691166c6ad2230733c9baaa0609d3b8fe779594 GIT binary patch literal 13088 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 M35GC+)VB!!4-!@J2mk;8 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/kernel/system_call.o b/linux-0.11-lab/0/linux/kernel/system_call.o new file mode 100644 index 0000000000000000000000000000000000000000..ddce0649262248d052f5c003cc697385b7d0d869 GIT binary patch literal 2520 zcma);U1%It6vxlzt5st*N@_%FyJCv5#+YcU6+wvEqzNo^(C8hE#)L@xkZzL2X~8v@an@S&Rx&BsEWdJp{#SsXi)OAGkh-}qT;9JQX7e?%TKm*uNczHFZD&j#eUX- z-eP1q*|~hG8>|2R#l2sJKm1H|g)d%yBiT7J^%Jj{Og?k`MEJ~(y{N-mHooev`{hb? z)m?Y1S>L}#gge5K>bW*l5q_OhPtP24mr$O6ZhhO_j$8Km$koVlv@cTLYK^;d${)8~ z+lL&Lx1xQ!8(r&q#T{L&mb$`cXO2z#BR%W!siRz6uyiCoeVwk;@aEDkKA*+SV*47K zs}X0Dw|(Mxa%20sk>To+Ti{}~*uKj1oGXo4Ty%1S2JMBMP-mgSs%yq~mSzkJtt4nL ztqPR}XKkBv{NJ`0f&2`0coX>9`9ylC_^7$vjq4`Y)o(+9v#>mm!#Qpzu6-W2Lb?4Z zGTofcfoW0^;UE4 zf$8xP;}Q5fCB6@Sx5W3uMnH zzs}q^_nMOjH(SkF0Lb}Y1Izi}1k3r~0ngy7x0>^wZ(R-1MQC$=h%SLA8ZjZd0`H$^ zH~xCxf)98P1M?5ypS^hI-{AYCadc5k;#=WQNxTRClElOC7o>dS;EKdaFP6Lb+|&RU z0$d94%K=^r@Y?}?H^3JHycXc~0Dm6ftpNWL;9moLOXFFn?{`;#DKU9i8J&nlX>24( zV^8B6#T8A`c!I_f6vcfqPNR_V*vR1o9f?K95^*eA+-TY)-Z3Sam}^X|u63TbLFG^Oj;S*h0%GDb+A+ znpM->;SwP#mC@2gLxUBHZkf5}pfrtmhHhGOB(gcpQnFm6RV)a1Kr3mfd5tn@sb4qD zLSaGbD5w_J*9@sEt<7gsnvyq#qRy*XL!Ct(DYIaiDb2P`OTii@w&$1Vm#yIY!jVPG z((-}??>%iQ-cjXLk@04_);(DNJg7dJD;j*-FJyH+tJyr+-4`2gGkP|kRK}y literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/kernel/system_call.s b/linux-0.11-lab/0/linux/kernel/system_call.s new file mode 100644 index 0000000..b7987f0 --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/system_call.s @@ -0,0 +1,285 @@ +/* + * linux/kernel/system_call.s + * + * (C) 1991 Linus Torvalds + */ + +/* + * system_call.s contains the system-call low-level handling routines. + * This also contains the timer-interrupt handler, as some of the code is + * the same. The hd- and flopppy-interrupts are also here. + * + * NOTE: This code handles signal-recognition, which happens every time + * after a timer-interrupt and after each system call. Ordinary interrupts + * don't handle signal-recognition, as that would clutter them up totally + * unnecessarily. + * + * Stack layout in 'ret_from_system_call': + * + * 0(%esp) - %eax + * 4(%esp) - %ebx + * 8(%esp) - %ecx + * C(%esp) - %edx + * 10(%esp) - %fs + * 14(%esp) - %es + * 18(%esp) - %ds + * 1C(%esp) - %eip + * 20(%esp) - %cs + * 24(%esp) - %eflags + * 28(%esp) - %oldesp + * 2C(%esp) - %oldss + */ + +SIG_CHLD = 17 + +EAX = 0x00 +EBX = 0x04 +ECX = 0x08 +EDX = 0x0C +FS = 0x10 +ES = 0x14 +DS = 0x18 +EIP = 0x1C +CS = 0x20 +EFLAGS = 0x24 +OLDESP = 0x28 +OLDSS = 0x2C + +state = 0 # these are offsets into the task-struct. +counter = 4 +priority = 8 +signal = 12 +sigaction = 16 # MUST be 16 (=len of sigaction) +blocked = (33*16) + +# offsets within sigaction +sa_handler = 0 +sa_mask = 4 +sa_flags = 8 +sa_restorer = 12 + +nr_system_calls = 86 /* 72 */ + +/* + * Ok, I get parallel printer interrupts while using the floppy for some + * strange reason. Urgel. Now I just ignore them. + */ +.globl system_call,sys_fork,timer_interrupt,sys_execve +.globl hd_interrupt,floppy_interrupt,parallel_interrupt +.globl device_not_available, coprocessor_error + +.align 4 +bad_sys_call: + movl $-1,%eax + iret +.align 4 +reschedule: + pushl $ret_from_sys_call + jmp schedule +.align 4 +system_call: + cmpl $nr_system_calls-1,%eax + ja bad_sys_call + push %ds + push %es + push %fs + pushl %edx + pushl %ecx # push %ebx,%ecx,%edx as parameters + pushl %ebx # to the system call + movl $0x10,%edx # set up ds,es to kernel space + mov %dx,%ds + mov %dx,%es + movl $0x17,%edx # fs points to local data space + mov %dx,%fs + call sys_call_table(,%eax,4) + pushl %eax + movl current,%eax + cmpl $0,state(%eax) # state + jne reschedule + cmpl $0,counter(%eax) # counter + je reschedule +ret_from_sys_call: + movl current,%eax # task[0] cannot have signals + cmpl task,%eax + je 3f + cmpw $0x0f,CS(%esp) # was old code segment supervisor ? + jne 3f + cmpw $0x17,OLDSS(%esp) # was stack segment = 0x17 ? + jne 3f + movl signal(%eax),%ebx + movl blocked(%eax),%ecx + notl %ecx + andl %ebx,%ecx + bsfl %ecx,%ecx + je 3f + btrl %ecx,%ebx + movl %ebx,signal(%eax) + incl %ecx + pushl %ecx + call do_signal + popl %eax +3: popl %eax + popl %ebx + popl %ecx + popl %edx + pop %fs + pop %es + pop %ds + iret + +.align 4 +coprocessor_error: + push %ds + push %es + push %fs + pushl %edx + pushl %ecx + pushl %ebx + pushl %eax + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + movl $0x17,%eax + mov %ax,%fs + pushl $ret_from_sys_call + jmp math_error + +.align 2 +device_not_available: + push %ds + push %es + push %fs + pushl %edx + pushl %ecx + pushl %ebx + pushl %eax + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + movl $0x17,%eax + mov %ax,%fs + pushl $ret_from_sys_call + clts # clear TS so that we can use math + movl %cr0,%eax + testl $0x4,%eax # EM (math emulation bit) + je math_state_restore + pushl %ebp + pushl %esi + pushl %edi + call math_emulate + popl %edi + popl %esi + popl %ebp + ret + +.align 4 +timer_interrupt: + push %ds # save ds,es and put kernel data space + push %es # into them. %fs is used by _system_call + push %fs + pushl %edx # we save %eax,%ecx,%edx as gcc doesn't + pushl %ecx # save those across function calls. %ebx + pushl %ebx # is saved as we use that in ret_sys_call + pushl %eax + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + movl $0x17,%eax + mov %ax,%fs + incl jiffies + movb $0x20,%al # EOI to interrupt controller #1 + outb %al,$0x20 + movl CS(%esp),%eax + andl $3,%eax # %eax is CPL (0 or 3, 0=supervisor) + pushl %eax + call do_timer # 'do_timer(long CPL)' does everything from + addl $4,%esp # task switching to accounting ... + jmp ret_from_sys_call + +.align 4 +sys_execve: + lea EIP(%esp),%eax + pushl %eax + call do_execve + addl $4,%esp + ret + +.align 4 +sys_fork: + call find_empty_process + testl %eax,%eax + js 1f + push %gs + pushl %esi + pushl %edi + pushl %ebp + pushl %eax + call copy_process + addl $20,%esp +1: ret + +hd_interrupt: + pushl %eax + pushl %ecx + pushl %edx + push %ds + push %es + push %fs + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + movl $0x17,%eax + mov %ax,%fs + movb $0x20,%al + outb %al,$0xA0 # EOI to interrupt controller #1 + jmp 1f # give port chance to breathe +1: jmp 1f +1: xorl %edx,%edx + xchgl do_hd,%edx + testl %edx,%edx + jne 1f + movl $unexpected_hd_interrupt,%edx +1: outb %al,$0x20 + call *%edx # "interesting" way of handling intr. + pop %fs + pop %es + pop %ds + popl %edx + popl %ecx + popl %eax + iret + +floppy_interrupt: + pushl %eax + pushl %ecx + pushl %edx + push %ds + push %es + push %fs + movl $0x10,%eax + mov %ax,%ds + mov %ax,%es + movl $0x17,%eax + mov %ax,%fs + movb $0x20,%al + outb %al,$0x20 # EOI to interrupt controller #1 + xorl %eax,%eax + xchgl do_floppy,%eax + testl %eax,%eax + jne 1f + movl $unexpected_floppy_interrupt,%eax +1: call *%eax # "interesting" way of handling intr. + pop %fs + pop %es + pop %ds + popl %edx + popl %ecx + popl %eax + iret + +parallel_interrupt: + pushl %eax + movb $0x20,%al + outb %al,$0x20 + popl %eax + iret diff --git a/linux-0.11-lab/0/linux/kernel/traps.c b/linux-0.11-lab/0/linux/kernel/traps.c new file mode 100644 index 0000000..f9bd8f1 --- /dev/null +++ b/linux-0.11-lab/0/linux/kernel/traps.c @@ -0,0 +1,208 @@ +/* + * linux/kernel/traps.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * 'Traps.c' handles hardware traps and faults after we have saved some + * state in 'asm.s'. Currently mostly a debugging-aid, will be extended + * to mainly kill the offending process (probably by giving it a signal, + * but possibly by killing it outright if necessary). + */ +#include + +#include +#include +#include +#include +#include +#include + +#define get_seg_byte(seg,addr) ({ \ +register char __res; \ +__asm__("push %%fs;mov %%ax,%%fs;movb %%fs:%2,%%al;pop %%fs" \ + :"=a" (__res):"0" (seg),"m" (*(addr))); \ +__res;}) + +#define get_seg_long(seg,addr) ({ \ +register unsigned long __res; \ +__asm__("push %%fs;mov %%ax,%%fs;movl %%fs:%2,%%eax;pop %%fs" \ + :"=a" (__res):"0" (seg),"m" (*(addr))); \ +__res;}) + +#define _fs() ({ \ +register unsigned short __res; \ +__asm__("mov %%fs,%%ax":"=a" (__res):); \ +__res;}) + +int do_exit(long code); + +void page_exception(void); + +void divide_error(void); +void debug(void); +void nmi(void); +void int3(void); +void overflow(void); +void bounds(void); +void invalid_op(void); +void device_not_available(void); +void double_fault(void); +void coprocessor_segment_overrun(void); +void invalid_TSS(void); +void segment_not_present(void); +void stack_segment(void); +void general_protection(void); +void page_fault(void); +void coprocessor_error(void); +void reserved(void); +void parallel_interrupt(void); +void irq13(void); + +static void die(char * str,long esp_ptr,long nr) +{ + long * esp = (long *) esp_ptr; + int i; + + printk("%s: %04x\n\r",str,nr&0xffff); + printk("EIP:\t%04x:%p\nEFLAGS:\t%p\nESP:\t%04x:%p\n", + esp[1],esp[0],esp[2],esp[4],esp[3]); + printk("fs: %04x\n",_fs()); + printk("base: %p, limit: %p\n",get_base(current->ldt[1]),get_limit(0x17)); + if (esp[4] == 0x17) { + printk("Stack: "); + for (i=0;i<4;i++) + printk("%p ",get_seg_long(0x17,i+(long *)esp[3])); + printk("\n"); + } + str(i); + printk("Pid: %d, process nr: %d\n\r",current->pid,0xffff & i); + for(i=0;i<10;i++) + printk("%02x ",0xff & get_seg_byte(esp[1],(i+(char *)esp[0]))); + printk("\n\r"); + do_exit(11); /* play segment exception */ +} + +void do_double_fault(long esp, long error_code) +{ + die("double fault",esp,error_code); +} + +void do_general_protection(long esp, long error_code) +{ + die("general protection",esp,error_code); +} + +void do_divide_error(long esp, long error_code) +{ + die("divide error",esp,error_code); +} + +void do_int3(long * esp, long error_code, + long fs,long es,long ds, + long ebp,long esi,long edi, + long edx,long ecx,long ebx,long eax) +{ + int tr; + + __asm__("str %%ax":"=a" (tr):"0" (0)); + printk("eax\t\tebx\t\tecx\t\tedx\n\r%8x\t%8x\t%8x\t%8x\n\r", + eax,ebx,ecx,edx); + printk("esi\t\tedi\t\tebp\t\tesp\n\r%8x\t%8x\t%8x\t%8x\n\r", + esi,edi,ebp,(long) esp); + printk("\n\rds\tes\tfs\ttr\n\r%4x\t%4x\t%4x\t%4x\n\r", + ds,es,fs,tr); + printk("EIP: %8x CS: %4x EFLAGS: %8x\n\r",esp[0],esp[1],esp[2]); +} + +void do_nmi(long esp, long error_code) +{ + die("nmi",esp,error_code); +} + +void do_debug(long esp, long error_code) +{ + die("debug",esp,error_code); +} + +void do_overflow(long esp, long error_code) +{ + die("overflow",esp,error_code); +} + +void do_bounds(long esp, long error_code) +{ + die("bounds",esp,error_code); +} + +void do_invalid_op(long esp, long error_code) +{ + die("invalid operand",esp,error_code); +} + +void do_device_not_available(long esp, long error_code) +{ + die("device not available",esp,error_code); +} + +void do_coprocessor_segment_overrun(long esp, long error_code) +{ + die("coprocessor segment overrun",esp,error_code); +} + +void do_invalid_TSS(long esp,long error_code) +{ + die("invalid TSS",esp,error_code); +} + +void do_segment_not_present(long esp,long error_code) +{ + die("segment not present",esp,error_code); +} + +void do_stack_segment(long esp,long error_code) +{ + die("stack segment",esp,error_code); +} + +void do_coprocessor_error(long esp, long error_code) +{ + if (last_task_used_math != current) + return; + die("coprocessor error",esp,error_code); +} + +void do_reserved(long esp, long error_code) +{ + die("reserved (15,17-47) error",esp,error_code); +} + +void trap_init(void) +{ + int i; + + set_trap_gate(0,÷_error); + set_trap_gate(1,&debug); + set_trap_gate(2,&nmi); + set_system_gate(3,&int3); /* int3-5 can be called from all */ + set_system_gate(4,&overflow); + set_system_gate(5,&bounds); + set_trap_gate(6,&invalid_op); + set_trap_gate(7,&device_not_available); + set_trap_gate(8,&double_fault); + set_trap_gate(9,&coprocessor_segment_overrun); + set_trap_gate(10,&invalid_TSS); + set_trap_gate(11,&segment_not_present); + set_trap_gate(12,&stack_segment); + set_trap_gate(13,&general_protection); + set_trap_gate(14,&page_fault); + set_trap_gate(15,&reserved); + set_trap_gate(16,&coprocessor_error); + for (i=17;i<48;i++) + set_trap_gate(i,&reserved); + set_trap_gate(45,&irq13); + outb_p(inb_p(0x21)&0xfb,0x21); + outb(inb_p(0xA1)&0xdf,0xA1); + set_trap_gate(39,¶llel_interrupt); +} diff --git a/linux-0.11-lab/0/linux/kernel/traps.o b/linux-0.11-lab/0/linux/kernel/traps.o new file mode 100644 index 0000000000000000000000000000000000000000..51de46fe88ac98ea479385c2c283bf030d1f46cd GIT binary patch literal 12972 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 +#include + +/* we use this so that we can do without the ctype library */ +#define is_digit(c) ((c) >= '0' && (c) <= '9') + +static int skip_atoi(const char **s) +{ + int i=0; + + while (is_digit(**s)) + i = i*10 + *((*s)++) - '0'; + return i; +} + +#define ZEROPAD 1 /* pad with zero */ +#define SIGN 2 /* unsigned/signed long */ +#define PLUS 4 /* show plus */ +#define SPACE 8 /* space if plus */ +#define LEFT 16 /* left justified */ +#define SPECIAL 32 /* 0x */ +#define SMALL 64 /* use 'abcdef' instead of 'ABCDEF' */ + +#define do_div(n,base) ({ \ +int __res; \ +__asm__("divl %4":"=a" (n),"=d" (__res):"0" (n),"1" (0),"r" (base)); \ +__res; }) + +static char * number(char * str, int num, int base, int size, int precision + ,int type) +{ + char c,sign,tmp[36]; + const char *digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + int i; + + if (type&SMALL) digits="0123456789abcdefghijklmnopqrstuvwxyz"; + if (type&LEFT) type &= ~ZEROPAD; + if (base<2 || base>36) + return 0; + c = (type & ZEROPAD) ? '0' : ' ' ; + if (type&SIGN && num<0) { + sign='-'; + num = -num; + } else + sign=(type&PLUS) ? '+' : ((type&SPACE) ? ' ' : 0); + if (sign) size--; + if (type&SPECIAL) + if (base==16) size -= 2; + else if (base==8) size--; + i=0; + if (num==0) + tmp[i++]='0'; + else while (num!=0) + tmp[i++]=digits[do_div(num,base)]; + if (i>precision) precision=i; + size -= precision; + if (!(type&(ZEROPAD+LEFT))) + while(size-->0) + *str++ = ' '; + if (sign) + *str++ = sign; + if (type&SPECIAL) + if (base==8) + *str++ = '0'; + else if (base==16) { + *str++ = '0'; + *str++ = digits[33]; + } + if (!(type&LEFT)) + while(size-->0) + *str++ = c; + while(i0) + *str++ = tmp[i]; + while(size-->0) + *str++ = ' '; + return str; +} + +int vsprintf(char *buf, const char *fmt, va_list args) +{ + int len; + int i; + char * str; + char *s; + int *ip; + + int flags; /* flags to number() */ + + int field_width; /* width of output field */ + int precision; /* min. # of digits for integers; max + number of chars for from string */ + int qualifier; /* 'h', 'l', or 'L' for integer fields */ + + for (str=buf ; *fmt ; ++fmt) { + if (*fmt != '%') { + *str++ = *fmt; + continue; + } + + /* process flags */ + flags = 0; + repeat: + ++fmt; /* this also skips first '%' */ + switch (*fmt) { + case '-': flags |= LEFT; goto repeat; + case '+': flags |= PLUS; goto repeat; + case ' ': flags |= SPACE; goto repeat; + case '#': flags |= SPECIAL; goto repeat; + case '0': flags |= ZEROPAD; goto repeat; + } + + /* get field width */ + field_width = -1; + if (is_digit(*fmt)) + field_width = skip_atoi(&fmt); + else if (*fmt == '*') { + /* it's the next argument */ + field_width = va_arg(args, int); + if (field_width < 0) { + field_width = -field_width; + flags |= LEFT; + } + } + + /* get the precision */ + precision = -1; + if (*fmt == '.') { + ++fmt; + if (is_digit(*fmt)) + precision = skip_atoi(&fmt); + else if (*fmt == '*') { + /* it's the next argument */ + precision = va_arg(args, int); + } + if (precision < 0) + precision = 0; + } + + /* get the conversion qualifier */ + qualifier = -1; + if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L') { + qualifier = *fmt; + ++fmt; + } + + switch (*fmt) { + case 'c': + if (!(flags & LEFT)) + while (--field_width > 0) + *str++ = ' '; + *str++ = (unsigned char) va_arg(args, int); + while (--field_width > 0) + *str++ = ' '; + break; + + case 's': + s = va_arg(args, char *); + len = strlen(s); + if (precision < 0) + precision = len; + else if (len > precision) + len = precision; + + if (!(flags & LEFT)) + while (len < field_width--) + *str++ = ' '; + for (i = 0; i < len; ++i) + *str++ = *s++; + while (len < field_width--) + *str++ = ' '; + break; + + case 'o': + str = number(str, va_arg(args, unsigned long), 8, + field_width, precision, flags); + break; + + case 'p': + if (field_width == -1) { + field_width = 8; + flags |= ZEROPAD; + } + str = number(str, + (unsigned long) va_arg(args, void *), 16, + field_width, precision, flags); + break; + + case 'x': + flags |= SMALL; + case 'X': + str = number(str, va_arg(args, unsigned long), 16, + field_width, precision, flags); + break; + + case 'd': + case 'i': + flags |= SIGN; + case 'u': + str = number(str, va_arg(args, unsigned long), 10, + field_width, precision, flags); + break; + + case 'n': + ip = va_arg(args, int *); + *ip = (str - buf); + break; + + default: + if (*fmt != '%') + *str++ = '%'; + if (*fmt) + *str++ = *fmt; + else + --fmt; + break; + } + } + *str = '\0'; + return str-buf; +} diff --git a/linux-0.11-lab/0/linux/kernel/vsprintf.o b/linux-0.11-lab/0/linux/kernel/vsprintf.o new file mode 100644 index 0000000000000000000000000000000000000000..5acfe6576413e77d5a31e400e048fdd1e4ad4bf8 GIT binary patch literal 6156 zcmbVQdu&_P89(>>#<`7C$9d4DD+32y)|S{wS_3YG)@@yyHXa0;LLh4QgH?oSOxhoX^$-3)fTpl^_ThLI~&egP$N_3+l`+fJE zo7`k*t9GP&e&6?STX&U;*vlc%u!oDGfUEKgu@P=ZU?3s9R8%Z z(iUSP>QfOXD7`yYWx7InX=*`C?feo~OJ`1Qj5FcR)5hg4(0ft8$fZXVbLS+mKUZtD z5J!0BB8ZZp7?ucxH8fPjky^k>TC8CKO|6! zzavnKZxeWnZxTqw*Jx+Yp>ZcT7dHxO<8ajk9FHo#i^s0b%^^^zxK50%)4fK-mr}r{ z#>3ZW3=0xshn8V8hsZOX&!Ek3K&S0t&-bfC)$vfl;@9Uxd6t9 zQc9~4rWvhFP*Hsar%)s$OY3S+#VlQian)P#^cWppW#n12d{ApPW@zuMGMCd@4s2wc zK|bZ-zgX#6qgbqz@mFOW>-Ar(F2xYZG8IJ(BVc$G1xFF6;88wPnne_But;Y(N;`4> z&_y8;Io2(WhM^GOks;Vbhd)83T4?7KZ^Do*-SEUNX*B8!(-xb94n|wZ;xOOEmL@;H zi(OuN4wv=(G>nVNIK%v#aSCeaXaGIH5U?E4RTa@O6WTbDQA~8=U*<$3mv)mIY@s=Q zIrKuLXKv8zcTMjJyX*Cq>#M?7`2Y8H;h!SSlfsvL{l3bUqkAsEkJ%5&^5ZS46C{P$h3BYO%8MOk|-{t;TF^)ah#|yQIo)}Nxbv>i#w}a7MYi9!qh;r=*66qHf1vHbhjzE`dH9izM<2s% z*n(cHC!R?5_NCI_?#~QlbA$Wx1x??7;NYPrN$)NPV^Q&JveA~zj*Vh`txaz`=)0VF zrC#Tg!tFTp6}n#~dkcEUOBnkIkLCXz*b{Boe5?l@!BNE!nj$@pUivM%Pl-qCDCH=> z4wRKf^bX}t^or!XpFlAcN@}pfrKO6a~>;J7!XtjRRuoLcrL8&_U- z+QxaxD2B9_Yu1#;nRGizDm6>Am-|SRqVzFN?=4MZHa!$ao{YMxDTf3% z>T;1=sh4vdF0)#FoNIUOrm-~V+B`Q=8U?2VLWe@a$_SCw5=CKBrL@{z?Q*zRxhthA zr{`-3wt_j_cf0O!?LidgM{#1+1|a%VMJg=>Gfb)^JtX9;tt+*Gb* ztTecYRfP-Oq|0t&G^Dff zjGjm`w!bi#$64qN#L1|jC1Ux$K#G1RU_H}WL8Dk^EJu~pdZYnoQIhK`0kZQo=Nqk# z%8uv=37sdMhQLQn)SUVh7oeASp>qVNbGCA+Q-3tYDUzN!x$MXnQ?l*Q#{1WowKw0)YK6n zS8HG_Qw?PG8Pm@$=L=Rco$}V2PTlDIKn~u}`52fk>Y8R}o2EXRQk(pfj;DvcrqOYy z;~M)=e_d9vj(WC`?#m_&?Xa3Jlj$PcqMFl=Y^QnMC)2bV5t9o>(Et zv_pf*`PGJ5H`Z6n^|N>?mS_9)SSAgVJlk>q9`819Fc1m^z5an%KAyTay&-fb=y)dK z_4j%Gy}5z3=I_nN29o~49CAqJAxvj8>1@*9t7qd{I+ra#l+F1IS}fl0AI#^pWL(ST z+5T8}CSB0jU_Kd77oazv5%ymq-Ivx1NdL(sYe?k=k_}lsp*7?R{%rC<1KjHe{f&X9 zCVwW@)6mET4gJY{Hko0C{`6pXOv|NNJ~^0-X$;$#yE5m^c5K^rw|C8+9zCn+e0Kiz zy2&*SH3b8W!L?jUhoFW!H0jBQm~>c`R+THtQ5*;_WOVAN(d&V2ajS;B&0Q<+ajRQS zyXhQy@r3bMuMbP7#nCTYO1L3d0*`eEvu*CZj-!fc&jN)*16r&Hh~+UcWl{NLCZHt` zYAle5X)zY)DHK?Mg!vp75S>W&=zZPkY;O)~CLQbP$tU-7O(Dt0vVGV!rZE@M;#mfW z#{%)(z(5lFE0D$71+XjlT5_9Ys@q(DOyWA*&Co*$8E!$d(a#I}ZAD|$=xw&lq5G$sbM0@)zY|^t@fhx9?{b1GHj2 zVWVmIk9f&=i4e`wqmRu+aq+_RKt^%tv)YQg542?il6?t(f3OKGasXp?f0yBp>Q4UX z&m_wqeT|Wg`O*fS$Ct|n%ZV5x_NbsOJy!)|>mail>CiJN(30N)J$tiU{~SW1ttALS z@32jg@}u@sJob59!93`^(mX2hSo0v-+EXCeEAaPAB1E&|+GEnt`*{0%A;h*Z>rMWs z?iADR?+OC?A+wt0&*Ck#%N6#IIZIBs_}@O_?GcDq%(Wq1y02ujLd5arz>cQvXx(N1 zIllPNITlrp{L@ZaXpZ@4T;^c-2(vYZS&0RK!>qWSuVCK*Yu%ew$oIB|VQy{vo>_P& zh!>+ZMxQqH9g7ynBjHk_4@$yYQ6j<~EDYf%KpBhOM&sB#?E*Ulb_v`oFd;A{Fe7kK zpeFF3K-z=k_bGu#1e*IF@?(NOF7R1_KN5IC;0pp@6!;5)Ck37o_=><+1->D0THqOh zZwq`+;5mWs3p_9IV}UaQKNWaU;AMe-7kEYBRe{$8($=FoC<0Z1{=75sy3THX+|AFf4Gpzy}DS|BT>&EO@gX@b`NmpAq;sfo7f< z_fdYpO(M@7f=>&~3Op#re tmp_make + (for i in *.c;do echo -n `echo $$i | sed 's,\.c,\.s,'`" "; \ + $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +_exit.s _exit.o : _exit.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +close.s close.o : close.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +ctype.s ctype.o : ctype.c ../include/ctype.h +dup.s dup.o : dup.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +errno.s errno.o : errno.c +execve.s execve.o : execve.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +malloc.s malloc.o : malloc.c ../include/linux/kernel.h ../include/linux/mm.h \ + ../include/asm/system.h +open.s open.o : open.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h ../include/stdarg.h +setsid.s setsid.o : setsid.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h +string.s string.o : string.c ../include/string.h +wait.s wait.o : wait.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h ../include/sys/wait.h +write.s write.o : write.c ../include/unistd.h ../include/sys/stat.h \ + ../include/sys/types.h ../include/sys/times.h ../include/sys/utsname.h \ + ../include/utime.h diff --git a/linux-0.11-lab/0/linux/lib/_exit.c b/linux-0.11-lab/0/linux/lib/_exit.c new file mode 100644 index 0000000..c0c9d69 --- /dev/null +++ b/linux-0.11-lab/0/linux/lib/_exit.c @@ -0,0 +1,13 @@ +/* + * linux/lib/_exit.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include + +volatile void _exit(int exit_code) +{ + __asm__("int $0x80"::"a" (__NR_exit),"b" (exit_code)); +} diff --git a/linux-0.11-lab/0/linux/lib/_exit.o b/linux-0.11-lab/0/linux/lib/_exit.o new file mode 100644 index 0000000000000000000000000000000000000000..04229e90d130407cf5356bdac84c753b533235f4 GIT binary patch literal 1992 zcma)7&u<$=6n^8i6BDOylYnRxgf>!919aC8HK-H{g%ko5MWRq~s8F=FC-#bXH|(xy zS|NUj3y4z>hzkduN(oKlttQ8~1Zabz`rqA-Gz>6dHxVy`)-w zeh#QsZ~O}8)f;hANUb)%Mx|>0WNh;{j5PND z#>g0MH$<*{;%6~x@;GLt{%)VZY#N7VDB0DAaS;yahQKC@x1iR4sny_Sj51B~c$Da& z&z(E}e4J*5f6UYwrxV>tro*C>=0T!wcJ||BdKh%W&COsx>UX-O0&`#T__i)?9cbC! zx$bZIz3@WV^Mgs04aS$^^B11;gOMNXrIWY__OfWAgM$?5bp~aeAg&Jfrpcg)(e$sgLJ6H=w*9r>!QDLy+2KgX<0?^%+yGm zpKkWTZtuxb%l16X38Zdc6ZJ_`tu5B;U!jZc8_;I@{z|*~Wo_qvn@1tcZ%vA*4_;&? zA3Id&!$QJgR74W?^IXDA?}tO(pN@9pWG{uu;Hclv^v6|eltsx%A6vkdxCMwW;UJw% zG(K3Epd%r=Tz04oqsP0ZtE~9{5sy1>5AOnr_o{lvXd|s-5Zmh~SE#Iz^E(S2j`)B2 zb>ZXIFbw0}B(UUc=O91il;GWYkwfq$41NX<=6eyttpSuDG2S7tbH$6{*>`3C+GKt^>e0=$_K@Xv)aG4e$HF~ly7Y5%KAumFsl3bxv~$uaaRP&R*>~ow#`BT)By^5kJSRI|)z{^(f1IBD z_@9MxwGztJjFep$$|&CK);JkORmeNmDXwo-tdzOKBl3hDJR(mPXA#(gWp>Lw)a4s) zDp2UzBJ2uHV&BOhu^hh@QP|cxIS$;0)psnvWcd}#uUdZ1^7k$0`DL83mHA$%M)_^1 Mf7;r8aQtKBUyA6>L;wH) literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/lib/close.c b/linux-0.11-lab/0/linux/lib/close.c new file mode 100644 index 0000000..afd8364 --- /dev/null +++ b/linux-0.11-lab/0/linux/lib/close.c @@ -0,0 +1,10 @@ +/* + * linux/lib/close.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include + +_syscall1(int,close,int,fd) diff --git a/linux-0.11-lab/0/linux/lib/close.o b/linux-0.11-lab/0/linux/lib/close.o new file mode 100644 index 0000000000000000000000000000000000000000..a80ba5284931b40ab6a906bea4c618b8b4d73713 GIT binary patch literal 2224 zcma)7&2Jk;6o0e3{%D*UCn=C9NGwt+Qef8!H4v4Sexy(pP!EL)B#@%Dy|!1ichmi# zX%(PSghUk%R0u^#9FTh9PpCLmDi;p)QVF=hfg2nO95`?&zc)J*Z%**!c^|*`=DnFW zp4ksye*G081Zfgv(%2&U#mqe|DHiDfP0<@$zc+4`0c^jyFnj&p_t&nUUYOk4T$rSd z@;21p8qELx=_b#)^#HW>ZR4FgpTV*iB1^Qv#a*x_+n^V6L55Xf&9F-QAxx_jgee(D z@iRp6VQFs=pR(lB$R-n`>D!JnLoLN6od$IQ9+}RlpJ~6vm5 z^@%#eDDmA6&&a|cNxSYKKfRK{n7L29idKqp6+N_!-k(MZnX)hm`k~*oxwXS6>`O(a zqGS-osl6wnIfzDnGt9baGfJG$zuX)KVYcBcxy#GW&}%oBasa$dejJApojG^GUbS29 zirccCkr#Ic$AZHv&)ZJlc6!k$NS$8njeKW4!V>%#U=Sjy@AR^;lLk?k016`~NxjZR zXFZNmzmrBWt*ym=f}N`McLrX(+kzyx>Ze!MeUd1hSzSG1FJ5S8VVdPDah}bjwfw_u=%-D|gF|GlEui@mUqofal=d-Md< zAh#2ZMm`SE4bdGJ9nZU!&+!Lqvcvh>{||p0L45D|S~Kx|Fa9C*n=lW29|tI^;$q-O z(-<7X7o6>b%2v+@U4&gEo$qOY9RFW&ydFJ=^KiZ$RupO9671so8c2Q(7_YB{q1Sf; zx}F0SZwsyvD~h!5JZ!DA>oN?R6-C;24tBBbr>NTi#&vmrx-Ks5o_sqkq8ozDYM z%=ZAJ<5(udE*eJFT?iN6?} zkNeIwi}~&&?qOh>bUtlsS;Q^+fMK29xBsZ5J@*iSC-1 z&nG)3lP1RoG?VZ_Dv(Ls!7-WWfbKQl-D#XqF@pQD`(Ebneg0kpK7=8Vp6|Z^`#=G^>I;ot?WOg Jqz!4n{ulF`_R9bO literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/lib/ctype.c b/linux-0.11-lab/0/linux/lib/ctype.c new file mode 100644 index 0000000..877e629 --- /dev/null +++ b/linux-0.11-lab/0/linux/lib/ctype.c @@ -0,0 +1,35 @@ +/* + * linux/lib/ctype.c + * + * (C) 1991 Linus Torvalds + */ + +#include + +char _ctmp; +unsigned char _ctype[] = {0x00, /* EOF */ +_C,_C,_C,_C,_C,_C,_C,_C, /* 0-7 */ +_C,_C|_S,_C|_S,_C|_S,_C|_S,_C|_S,_C,_C, /* 8-15 */ +_C,_C,_C,_C,_C,_C,_C,_C, /* 16-23 */ +_C,_C,_C,_C,_C,_C,_C,_C, /* 24-31 */ +_S|_SP,_P,_P,_P,_P,_P,_P,_P, /* 32-39 */ +_P,_P,_P,_P,_P,_P,_P,_P, /* 40-47 */ +_D,_D,_D,_D,_D,_D,_D,_D, /* 48-55 */ +_D,_D,_P,_P,_P,_P,_P,_P, /* 56-63 */ +_P,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U|_X,_U, /* 64-71 */ +_U,_U,_U,_U,_U,_U,_U,_U, /* 72-79 */ +_U,_U,_U,_U,_U,_U,_U,_U, /* 80-87 */ +_U,_U,_U,_P,_P,_P,_P,_P, /* 88-95 */ +_P,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L|_X,_L, /* 96-103 */ +_L,_L,_L,_L,_L,_L,_L,_L, /* 104-111 */ +_L,_L,_L,_L,_L,_L,_L,_L, /* 112-119 */ +_L,_L,_L,_P,_P,_P,_P,_C, /* 120-127 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 128-143 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 144-159 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 160-175 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 176-191 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 192-207 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 208-223 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 224-239 */ +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; /* 240-255 */ + diff --git a/linux-0.11-lab/0/linux/lib/ctype.o b/linux-0.11-lab/0/linux/lib/ctype.o new file mode 100644 index 0000000000000000000000000000000000000000..acd65e6a3869dcf4ecb16245dcd9f21e6856c20c GIT binary patch literal 1908 zcmcgtOK;Oa5Z;Yl`bZlRr97$%luE4#2s;S`RJF8FBB+9@9*}xLf?_*PViDVs<3Ni9 z`~q(L0B%U!xbSDVaN!4lxFJ-&+4Ux_=z$X>&CcuFnf2_$Z|?2f=bSS|oM~)qG4@WA zk-89NmS=McD&>@-GLbUI@_qg|=_5+~TY|8Lzeob^3d)>76rVc2n*VRvD5;CGI)4bs z*HdfA+<;+%H5$-ZU7u_~(fO1CG4YX{GZ#n|eV*7M$MlntL+7VH!C<_=S8~OymRro_ z&oP$ayjkQ$?>nnU-72u4kLY+Y6cVm^}~9P?}_=LdCEQ&ajIZ zIscWL!zfMy_MbB+KJ2@uBcPRT=)09**orIRzzEzIm7W(24~(i=s~J7Zu2iK1qs@lF z!0QBVtK@X8Xq0B)y>uxf+jnBW&$f5>N{v$8Ts7+@!?z-*yWw45y;(9kC8HhsUTm}@ z%Xf`_=moJG!RZC4=^E`};KW`S4B!evV-Q=;Gov4cvFpTPMA@l`D9yGTjkQvF&mIQx zP}VZ84TV*EU8|eb`eo_G77Y&l*s>wxNXo9#V)r0sX3L5#X4-=RGb6WWwp@GI+4q8W zh>*}N+m77l>8KT1LC3`e382+09l4q5gud?v$Q@wuCK@6?Ml}52hDF*q@TmkY@9220 zy2nciF1gC=4%sRQy#yw@1g86>a9b%1#g$o2>EtI|o0NnU?kenQ<%FD_Wb7#<&Zszu zbZw~KEwGvcm3@G*NlHR0whLS76#52(j<+HedjLneZVz>-4%LM!YLopKtmZ&vzhRU~ zNl3*!*rd~U6RqGbeU_>iDMlP8QsKS;cSRuNpm47eoC?XiudMN!3UH~tpeW(qj$xy< zQ(k$!WpEw`;w#kC;8`&BIS;0ur1Sj*?ks$YD9=fh_Ur8XQ5tjnZ$bIfD + +_syscall1(int,dup,int,fd) diff --git a/linux-0.11-lab/0/linux/lib/dup.o b/linux-0.11-lab/0/linux/lib/dup.o new file mode 100644 index 0000000000000000000000000000000000000000..db9a7a81905d536743a71bac0ad2fb102e9303dc GIT binary patch literal 2200 zcma)7&2Jl35TCcZ{%D*UCjpTtNEj)F1lYAhEr<%GDJfJ1)I&>=fJ3yl*Y>LRZn_`T zt-^;CA+-tzDuf~=Zv6{5(R<;*pJngp3NK}0{9nWZJ!GCfQ)bbjZL+N~8RcHdf>zy9N$kFTFvn%>!7nx=7a z7vk?Vp6~r~lh@pO0NVMs_TKH!fh<;$CEmd-4r6+fG3bSikztisGOWUPV5U{@gM6QKj-SRH#6SWn^;1i3PKKtny;zsf9Ch?7Tj|_sW7mZG{45 zmNRq4JW;VlW|bW?Sen2S3ok7o_hXzNLwAHFE?v{x5Den_g!rd=7_&ShoQ!ash97i> zY1bpd-klDwNdrGly3QawyMhdD9ulvkk)l{e2Q8!bmr+2RG>H9v;C1WV*lc|~2&1Ha zz|a_kBd-yp-J}u5cHmuZ4E-P-+f8S6)gHR-Ml(}jZj%>9K}e_1UZ`)>Th5x(s@o$s z>I{ziN7tUO+x@!T3rBup_ab-X*;^qpdl8g=fS{h;OM_10hd~Tg5ZZC#b}rgmQJ8q0 zB#dZtGxB0=P?g;oxDgG*pf5KN`&Yf>%9ck`O{X_Dj@6ehw9_C-vr_EmQi)bSTx~hc z)=H)&e8(AytLI2;m&M|=WnDvi`Cxc3$pblAE$gPcw{ z8hJQ2CqQ!?G(2low#FN5$_8h(|DXABIPqOCDrdgq`HxV)1B=ifQa;S?3GjT$^QT4$Mxtn9EaoWv7kuXn!x$`IQSSkuCIWh>syDc*FeO3 zf{Vj~B5gYdtYtP`2B@>3NZZZ==ktz{w+0>O<^AcrxTpu>?IFOs&}q`~TqyGKt|17= z;doORI^HG7yoUG9bQj>)Oq4U*cx)@K{qEpdcv^a7llJ>W`DxR=>}Aq$zxFScpEloz zu(t1&)yMD)jQl=6%kASK*z`VTAnR`cA~gYSvY?3TV`8pzGX5JM?4RIxcZvTY9FP0X zIrH&;!*|L#H0gL6Yo6CzboYVQGe7t@WSq~yn6ppFlwVvP%m3NF!jvbv53!z4c0wji zPXHv7@Ds|BN!-B+ndpGdz;|~R-KtE?vM=hH=O1PERKvc4ArPAHzQDv;1scfxV*ZHY z{Ie2h{u9h`j>}5lQ2e;!rxbrfae0Rj$7PK5A1M8&ip#vXoP2IiZUFxaTkQ2g literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/lib/errno.c b/linux-0.11-lab/0/linux/lib/errno.c new file mode 100644 index 0000000..50aca2e --- /dev/null +++ b/linux-0.11-lab/0/linux/lib/errno.c @@ -0,0 +1,7 @@ +/* + * linux/lib/errno.c + * + * (C) 1991 Linus Torvalds + */ + +int errno; diff --git a/linux-0.11-lab/0/linux/lib/errno.o b/linux-0.11-lab/0/linux/lib/errno.o new file mode 100644 index 0000000000000000000000000000000000000000..2b68237de5d516e34b24195231b0aca298879d71 GIT binary patch literal 1472 zcma)6OK;Oa5T1=w3Ydmg1wmB_8L5aA;Z4#;RaIVx3Mvrltw)6HWYZdIyK>f04m|FN zQzg#)0?zylPW%tJawy;IdK)8wV5HfZ`R3c5eT@C~{^JKi2y!CGqe(;*G;F4COq*tD zhF0J=P23c#u;RT5?9d1qnU)x*JchjHRFY|6bK+WS-uGIIt=UUNjXrs;4gZ$^aQ@yx z<1%g4zI(q1Z~h2j6(cu&0sWJ$A$%|qR4VNU>bGy@>F%Qa;Q7` zILy?`&VG`WhhbOtdf|Q)ce)n97~6@owY?K;27S3M`$3pS#bEDFvbw$&gu6jF%F{%L zqasRGc#z{XssNZ|SX70hG8^b5&&GhVJRIw2@H{*ya;*kBFDBdC+T7d-+BC)B- zS4tE0-t_vi+h4XQksQBDbri$u!rDFOX?3Vc4kI0rjK^b=h1!=x6_>kDlWdeDW&9|P z3-zL&jfyDSRhVE2ymRMcZIXjLO%oAA%n@OM*0>xf%W?lD%bcN^;Fz@=wUp6kTr zwgEVwb048-;uCSXM?mUzzo0JH;kwgMSN92gHwP|#hPK(M#N`si?DM%dHD^0`P{Vn9=cGS3H+G;zUhcI0wwV1*e(!;SW6KSHBFC{e%O4g?Ao$4$9}9h4P)$ z*E_(yFvp3j>tbi?c$2;#JDlzBe=d&eJK?xqkz?M?M7)#kwU}pKsGhICB+oxPNy78Y z2`7+8zBwmXVV$EN$0z>-^SiR&i@-<2cO$So-!t2bm0e(qhB5y<;QWRHWd6 + +_syscall3(int,execve,const char *,file,char **,argv,char **,envp) diff --git a/linux-0.11-lab/0/linux/lib/execve.o b/linux-0.11-lab/0/linux/lib/execve.o new file mode 100644 index 0000000000000000000000000000000000000000..250d3960bb4f0002c32cd56d11ed8f4363a47a21 GIT binary patch literal 2340 zcma)7OKclO82)E>{Yad;c_9)d5=L?%Ja(NBtBOkc!i5s3id3i&qE%SiV|#_Y8`kSI zt)hYyA%ViB2Sh;}kSZijy>KZvP!SIyPF#BJg$qbLB*cM3`Tp6RcyoeZp8x%te|E-i zK7HmHAp~g)li3v7PPm z7;R;D!TvJN`0qP6IP%s#z|Pm>uipL^Qk>Hg&w>|mW_BVv8WS?C+&5qiEAummX=OY= zBE!gi&PtL0RM~QOl$8Am#Ik|J=rS+^=Mf)&2Auf>NQ^RTT%*igC8;#mtV}H><+Hyj z>2c*5QO>#vF8=~h&iX=O=0`ZS@x3Y}Cd8rQRKYCH6(_`GcKm)=%2X&Eg9=?IY#!Y? z;`pptJW_bF@bK)~6g!`o`QWKpF@***6kFD&j2WVAb)T3!h1HkIEamK=NDxTly4w{lkZpp@`bQ&Bo@V$Q2bUN{e zkWtyq5%C<(LuB*cff%hnjSNy%IzdlX{6RCS1by3=mnvP)A8gr+&eD?Ib?cSISOHv5 zN(?K>F!TeG{^kaqK6}1YD^;Bpr&_XmZrJD?^_Eu-m+W@QZUsFrvRk3sllDe{4?%`d zdOj*iyEX6|kr()VsQke0M{eVFdm{`Y*@%LWT3%OTJAJS1%Vw$3aYO2Nf-oxW>G;Fi zC&W(P6&YRLkmQE#P3i`IyTp#`>!Iuuovzi6lorm{2Yxh&o3@`AC~4{HQq@_kJ`!tr zmeY&?;>tM^+j%iJW?AoG_V~f0#x7C;JV_mZ8ss#BUQc4b zj*me)IGlK}ag6M&tHX$U|3CNvIPsg3O`Q40r$14)G0b6&C@w}#Tpj#q5{rHK*wJ$v!~Xx}$NlISPQv+qU?u@=TZEkMuZ!f@q2vBCSh~Lx;B^dGT7~d7 zGYM$hImnu4(^n8m%p{;~XCbHSS`fye*T^HAQU%tCYa1lBUI-d(gI^Q$|&cpde zv2;G31IO^b8IIv4_$y`=W*e{VglfNK4E#~$5hLx#GhklBMSU=dLfbxs%zXT;5xoY# z6&(c1{V}|cmEOmEY99w-)BBhJpDuMB!VTy&=(_2eY`c&n`W+PSE*-$)d^~rqna+0x z!^7LZ2Rh%LB4N^ci~hKmw(tMf<^1UiEbCpzQKtIhh8avkvnepui4GN}I@z>5HWa{_ zgukp5n8Xttf{6+6x52=7cM>PWbJf6eNj>fA--O~9o+>a2r04rDfVi^25ILUdeF^2i zGl4^YkSS)mkmyxB{J1XrpGxTS303z9`j->gWr{o-iF`Go??}6iL K2`zydkpBhBxe2NO literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/lib/lib.a b/linux-0.11-lab/0/linux/lib/lib.a new file mode 100644 index 0000000000000000000000000000000000000000..0944ab9b445a35144a211b8b311d1288299547ba GIT binary patch literal 34170 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 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/lib/malloc.c b/linux-0.11-lab/0/linux/lib/malloc.c new file mode 100644 index 0000000..d7c95d5 --- /dev/null +++ b/linux-0.11-lab/0/linux/lib/malloc.c @@ -0,0 +1,232 @@ +/* + * malloc.c --- a general purpose kernel memory allocator for Linux. + * + * Written by Theodore Ts'o (tytso@mit.edu), 11/29/91 + * + * This routine is written to be as fast as possible, so that it + * can be called from the interrupt level. + * + * Limitations: maximum size of memory we can allocate using this routine + * is 4k, the size of a page in Linux. + * + * The general game plan is that each page (called a bucket) will only hold + * objects of a given size. When all of the object on a page are released, + * the page can be returned to the general free pool. When malloc() is + * called, it looks for the smallest bucket size which will fulfill its + * request, and allocate a piece of memory from that bucket pool. + * + * Each bucket has as its control block a bucket descriptor which keeps + * track of how many objects are in use on that page, and the free list + * for that page. Like the buckets themselves, bucket descriptors are + * stored on pages requested from get_free_page(). However, unlike buckets, + * pages devoted to bucket descriptor pages are never released back to the + * system. Fortunately, a system should probably only need 1 or 2 bucket + * descriptor pages, since a page can hold 256 bucket descriptors (which + * corresponds to 1 megabyte worth of bucket pages.) If the kernel is using + * that much allocated memory, it's probably doing something wrong. :-) + * + * Note: malloc() and free() both call get_free_page() and free_page() + * in sections of code where interrupts are turned off, to allow + * malloc() and free() to be safely called from an interrupt routine. + * (We will probably need this functionality when networking code, + * particularily things like NFS, is added to Linux.) However, this + * presumes that get_free_page() and free_page() are interrupt-level + * safe, which they may not be once paging is added. If this is the + * case, we will need to modify malloc() to keep a few unused pages + * "pre-allocated" so that it can safely draw upon those pages if + * it is called from an interrupt routine. + * + * Another concern is that get_free_page() should not sleep; if it + * does, the code is carefully ordered so as to avoid any race + * conditions. The catch is that if malloc() is called re-entrantly, + * there is a chance that unecessary pages will be grabbed from the + * system. Except for the pages for the bucket descriptor page, the + * extra pages will eventually get released back to the system, though, + * so it isn't all that bad. + */ + +#include +#include +#include + +struct bucket_desc { /* 16 bytes */ + void *page; + struct bucket_desc *next; + void *freeptr; + unsigned short refcnt; + unsigned short bucket_size; +}; + +struct _bucket_dir { /* 8 bytes */ + int size; + struct bucket_desc *chain; +}; + +/* + * The following is the where we store a pointer to the first bucket + * descriptor for a given size. + * + * If it turns out that the Linux kernel allocates a lot of objects of a + * specific size, then we may want to add that specific size to this list, + * since that will allow the memory to be allocated more efficiently. + * However, since an entire page must be dedicated to each specific size + * on this list, some amount of temperance must be exercised here. + * + * Note that this list *must* be kept in order. + */ +struct _bucket_dir bucket_dir[] = { + { 16, (struct bucket_desc *) 0}, + { 32, (struct bucket_desc *) 0}, + { 64, (struct bucket_desc *) 0}, + { 128, (struct bucket_desc *) 0}, + { 256, (struct bucket_desc *) 0}, + { 512, (struct bucket_desc *) 0}, + { 1024, (struct bucket_desc *) 0}, + { 2048, (struct bucket_desc *) 0}, + { 4096, (struct bucket_desc *) 0}, + { 0, (struct bucket_desc *) 0}}; /* End of list marker */ + +/* + * This contains a linked list of free bucket descriptor blocks + */ +struct bucket_desc *free_bucket_desc = (struct bucket_desc *) 0; + +/* + * This routine initializes a bucket description page. + */ +static inline void init_bucket_desc() +{ + struct bucket_desc *bdesc, *first; + int i; + + first = bdesc = (struct bucket_desc *) get_free_page(); + if (!bdesc) + panic("Out of memory in init_bucket_desc()"); + for (i = PAGE_SIZE/sizeof(struct bucket_desc); i > 1; i--) { + bdesc->next = bdesc+1; + bdesc++; + } + /* + * This is done last, to avoid race conditions in case + * get_free_page() sleeps and this routine gets called again.... + */ + bdesc->next = free_bucket_desc; + free_bucket_desc = first; +} + +void *malloc(unsigned int len) +{ + struct _bucket_dir *bdir; + struct bucket_desc *bdesc; + void *retval; + + /* + * First we search the bucket_dir to find the right bucket change + * for this request. + */ + for (bdir = bucket_dir; bdir->size; bdir++) + if (bdir->size >= len) + break; + if (!bdir->size) { + printk("malloc called with impossibly large argument (%d)\n", + len); + panic("malloc: bad arg"); + } + /* + * Now we search for a bucket descriptor which has free space + */ + cli(); /* Avoid race conditions */ + for (bdesc = bdir->chain; bdesc; bdesc = bdesc->next) + if (bdesc->freeptr) + break; + /* + * If we didn't find a bucket with free space, then we'll + * allocate a new one. + */ + if (!bdesc) { + char *cp; + int i; + + if (!free_bucket_desc) + init_bucket_desc(); + bdesc = free_bucket_desc; + free_bucket_desc = bdesc->next; + bdesc->refcnt = 0; + bdesc->bucket_size = bdir->size; + bdesc->page = bdesc->freeptr = (void *) (cp = get_free_page()); + if (!cp) + panic("Out of memory in kernel malloc()"); + /* Set up the chain of free objects */ + for (i=PAGE_SIZE/bdir->size; i > 1; i--) { + *((char **) cp) = cp + bdir->size; + cp += bdir->size; + } + *((char **) cp) = 0; + bdesc->next = bdir->chain; /* OK, link it in! */ + bdir->chain = bdesc; + } + retval = (void *) bdesc->freeptr; + bdesc->freeptr = *((void **) retval); + bdesc->refcnt++; + sti(); /* OK, we're safe again */ + return(retval); +} + +/* + * Here is the free routine. If you know the size of the object that you + * are freeing, then free_s() will use that information to speed up the + * search for the bucket descriptor. + * + * We will #define a macro so that "free(x)" is becomes "free_s(x, 0)" + */ +void free_s(void *obj, int size) +{ + void *page; + struct _bucket_dir *bdir; + struct bucket_desc *bdesc, *prev; + + /* Calculate what page this object lives in */ + page = (void *) ((unsigned long) obj & 0xfffff000); + /* Now search the buckets looking for that page */ + for (bdir = bucket_dir; bdir->size; bdir++) { + prev = 0; + /* If size is zero then this conditional is always false */ + if (bdir->size < size) + continue; + for (bdesc = bdir->chain; bdesc; bdesc = bdesc->next) { + if (bdesc->page == page) + goto found; + prev = bdesc; + } + } + panic("Bad address passed to kernel free_s()"); +found: + cli(); /* To avoid race conditions */ + *((void **)obj) = bdesc->freeptr; + bdesc->freeptr = obj; + bdesc->refcnt--; + if (bdesc->refcnt == 0) { + /* + * We need to make sure that prev is still accurate. It + * may not be, if someone rudely interrupted us.... + */ + if ((prev && (prev->next != bdesc)) || + (!prev && (bdir->chain != bdesc))) + for (prev = bdir->chain; prev; prev = prev->next) + if (prev->next == bdesc) + break; + if (prev) + prev->next = bdesc->next; + else { + if (bdir->chain != bdesc) + panic("malloc bucket chains corrupted"); + bdir->chain = bdesc->next; + } + free_page((unsigned long) bdesc->page); + bdesc->next = free_bucket_desc; + free_bucket_desc = bdesc; + } + sti(); + return; +} + diff --git a/linux-0.11-lab/0/linux/lib/malloc.o b/linux-0.11-lab/0/linux/lib/malloc.o new file mode 100644 index 0000000000000000000000000000000000000000..83667757057ff0915c7c4ad6ae9f4d0c0160ea5d GIT binary patch literal 4880 zcma)AS!`Ta89sOBdNTId@?Fn#g3%ipE_#~_of1bL9E?Nob`ab!I zi+!(7T-}TyePri5q3N3vn|36JywH3rg7ig|=;VdqFN>4|Y6uD0$b_k=Ozh-m4gGIv zI%LD9cRm58cWNkl@`4|l?@)}?Ahli*ydk0WLLZY-Bqxr*atWsx2y&Iz zQ1g(^z4->@t0pdP##;1&99S)`$%Svb1UW~T9|qN>$66&9Xz+Mw{to(0$ucMAd%z^5 zsx45e1P1PsQe}d~6C!wxTZ1Ve4odw4tl?9LEbGU0OQ?zs$Z02#;(*FHF*VeDKiCAS z-K?TEkDk2Hdh$HH5xPtGEf9AhAMBq*z}?ygU-|`*FUMK ztQwMHeY;T9`P+36j^gt$ylB#2GF+vqk9thnNjbH}1CY=vxtnf0Gl3(3^_R`jIHd8* z8W#_1NDFL@QH>^mWin7}?XuCyX7W@C@xE~mx?b5WIx02> zLEA>-eBN_wHK&@X)i9V}akSy6=ei>`X{hs2NjkalOrczJauv@Ds=k{SJ(#+hwQa3M zSSyK3=UF}9VptKO1z?*sSO$bsFtF|*DZ*bMeP}EFgIxg~u_Au} z6Mq+-b?$9Q4&$><&7*IwWFLi44Io-&J8t<=Zfh zuznSU0PRfU2DBaQ8kyeDA?b9`Sr0OU2D#py6BO)cJS7lTyR|yr84Jf(#@nrqNZYL_ zL8ldt$6^~}n_^ZcR;)#Y<79SrZouN(ts(|!Anb%Xk_5380fbngNgT0g8Zqd^phJo0 zwskX9Cju zNweIX?UuE(lL>Y7h@GANm`>+XX7_Z{UhooUY0ViTWeyGLH}QqUZRjoQM!W^R{I!7S zmOl0A9PLml87BOOu!f?Y!K?_`p&53U+3iDTMRrAw%}qZTZrnUG+b0DNM^4W~x4zOd zcUJLdB42u8`jP3`nak1Z!OL`vZdvM2=^#gDF8}!K-1VLZ!cDuj{c`4s+5WlN{u5Gp zCQ_03a3mc2&dZ2<{T<2s=tIAV1aot9W~9TxTXVCoU7q`DPfy6kyhbZQIWKC3$6VpL zqd6SdEH6aCo2cr0!d#LCPu%yZhn(%sV0uG(&`FgtUT%C#;S(F~bW&qZYP3=+_^DAZ zQ*u+)3eLUjL0Bjk3uQMo8kBQ>p@RD>HCnEuYJMhnFje&`zMJzao*b(FG8X;gm6F?E z4)T6~rIsqYhx-vGIFcGjuUnTYX0rVQN`O9#bdehK_m5UN2mer}C~#eR;^s?UEDiz> zb<-|Rk5iU+tf-AwJl_e*wZd2#cQdarbroa9tC=y^xX6-KJ@=4UW;)r#jsR(Dn0prXBggk@H{;7>{|~kFP%76)3yw1cv>#(bDMt54>`qijVOamt&f}2U75-!=og0Gw}>>uwHJ9zw?*k zVq5;#Fyq&cK;Fz+xr9Z7Fy$*i6k1kU+M82p?76~AExfF9wCBn%wXkSeVnBsu1(rl% zS&4c+F3&k7!}!|a@iDDt=IzM;F3l5I$9r$$9{|s}@Luh}eD>U=e+0a_Td6;AlYZ&d zc;7oz_om8c$nboG#_$)36w0@znkg4@I+Cb*c#IC3mutyL?S&9F)`yXU)gZ)2fg$X_ z&ydIDG8(HyY@X+dusaJ3VMD#B`IpGU@1Nx1XJhWfE{*Ge9Ov`o;eUWU>>IIB8MjD; z{EI-!*J9g{9{`fyP5gimdniZTtVZq*-Z%J91Yu$6c}9r*KN4a$5ixs+*l1i!%GYb$ zs&SV_-ci(NHOjjK{NtMcipJ+O{!rr!M2z!_=6|j6ipGCveJkgWcpuWZR^#17_>XAb z( +#include + +int open(const char * filename, int flag, ...) +{ + register int res; + va_list arg; + + va_start(arg,flag); + __asm__("int $0x80" + :"=a" (res) + :"0" (__NR_open),"b" (filename),"c" (flag), + "d" (va_arg(arg,int))); + if (res>=0) + return res; + errno = -res; + return -1; +} diff --git a/linux-0.11-lab/0/linux/lib/open.o b/linux-0.11-lab/0/linux/lib/open.o new file mode 100644 index 0000000000000000000000000000000000000000..eb38332f48e0690a11dc41caa62a86db34a03b87 GIT binary patch literal 2368 zcma)7O>Epm6nw;(6kAZC{2)Bl^=nKyu03Ai(Na| z-jY`3H?7ntLbL}|A#teG3m2}aoTwByR4NFGOQc>nZ~(ypxNzW5zBl$H?g^ee?|Xmq zX6DU|=e_4nJuieHMS^tN)rjgw;;BfOq`fpmXV!lo{Ahk+-}-H1V}7E4^Atp&u?e>R zi?KO)D~IUK*C$55dw*l=^1U@!(iN( zX(0j9jQsZyH6!;cKsR!pACso#zht8*d@gJ#f#*5%RXe5dU897_%(!^MRWOmYuGSm?3Ev9ZMd#Mr_J zr)SO%Q54rv54*)DrR#f86B%oft{xAhLY-?Q+}myKB~zJw0u;ooab1F@RU8;k8}g>9}fC zHw^uNPA;D{=gf*dV^>V8%Dqo~?HMxSPz_I?$Ec^t;m)d#dteVnsRka!o?jTsY$+*p+ji`(#bno= z*deObz7wD-k7UAGeDss<>BB@TX)%!c^SlG)}obR2!2TIF9L4G?wK*2Y3l_M}UfW zeoUXBW!Ev2S;rpu)H;SBXNS5C@>V^al_>Um8H;d|Y=PGn+3)@i<12 z%BOUNS-U}h-dA?U2VZB_vm>ysR-N?HcivN_W3n02<&N$ebh)!xy?W6p;6X@u3v?JrmgQ#~3lt xWNI&`cr?ZN6c + +_syscall0(pid_t,setsid) diff --git a/linux-0.11-lab/0/linux/lib/setsid.o b/linux-0.11-lab/0/linux/lib/setsid.o new file mode 100644 index 0000000000000000000000000000000000000000..7511f7c4a222329aaa1dc0b3b033b4453e6416f0 GIT binary patch literal 2244 zcma)7&2QX96o0dJHffSBn-AJVEyAEwgb#ZYxTR$;*NOkQf0xep z9su^gt$%X|f=!Lsstv3T1FcX7GzuaWdz@Uw9{T~r`jPz6v%t1J7Dky=D&vn)rzXB8 zvB&S{QuQa0u_Hig@+2^UA=PKMfU94UoqP_sa%V@z-vVQO$Ec!a)QQ^MlvO)cn^CjX z`cb$n$<)+YsNi%&tlH_R7pE@IVFg-0flQt{w^&%7TD&~RndcWixv;3C;b!!i$}6^x|a zILVxcTpHcDA2gytCu_v18wJ-Jy)YW=xGUc3s@wBhjg>+H+>#(kqF63ox#p}nP4AS~ zblkq5w7V~bCr`cLxSNi<5%jTZ6~%6v`Ry%t zJBhQPoyCc)uO~r@t?CW5yM7|QINB_>65a?{5ZMkp>zU+6xwy7=+F8EV8bsNkSdjbt zAeUC(TWxwP&8G`3{__IVjjN*eCe*QM+rEjqQqM*b^5(78=C^A2y}fj|pZP7&EGcN$ za7obfvS23@uj6OFc&!vIq_PvV2Ak_)v=PIU^M0$91n-ose&R=)*kx$~OJgP=hj{I{ z-w)6|FG6KJRJ*8DF(>G*=hZFN{D1J{aKculs-1cE%Ree@gkuZmrY=8KbWc+dl%FI3jEC1ula{k^86;|HSp@{kH>2Pr{@Sp66cyF|$GuIiK`VP5G!PH2n!u zG;UeznU8+?IR(9><<~WRQ&T?2^lNF_BSpM-wfvE$`8sf5xn|n)d7utt{^S1u<;VW3 literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/lib/string.c b/linux-0.11-lab/0/linux/lib/string.c new file mode 100644 index 0000000..1182e63 --- /dev/null +++ b/linux-0.11-lab/0/linux/lib/string.c @@ -0,0 +1,14 @@ +/* + * linux/lib/string.c + * + * (C) 1991 Linus Torvalds + */ + +#ifndef __GNUC__ +#error I want gcc! +#endif + +#define extern +#define inline +#define __LIBRARY__ +#include diff --git a/linux-0.11-lab/0/linux/lib/string.o b/linux-0.11-lab/0/linux/lib/string.o new file mode 100644 index 0000000000000000000000000000000000000000..840f038b2beb337cf418b004cd61fe5f8badc3b6 GIT binary patch literal 6380 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 b$T5+-MNW%6E;57|# +#include + +_syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options) + +pid_t wait(int * wait_stat) +{ + return waitpid(-1,wait_stat,0); +} diff --git a/linux-0.11-lab/0/linux/lib/wait.o b/linux-0.11-lab/0/linux/lib/wait.o new file mode 100644 index 0000000000000000000000000000000000000000..ba0290563e3e14c314e77ea37c75283d77b2c810 GIT binary patch literal 2584 zcma)8ONbmr7_RE>nVszHPG*xe*(Cu-oZ$MHo?WwOjCpL_#25)NM598KNzY90PUBAZ z+TD{E!3T?A*wca<#N2`h4}u~{@R~r(!9&Q!lb~J{Bd91IqQvj(uG;B=y5WicgWjcWgF)BvHvr9M2%Ll8QFAYGs{8Dvn`MGN4t2fT= ztqv`ntqzG(`DL&_l{x?U^+iTrx(!;oQa*Nh>E_VYz10Ghu$K{JUA3w-|L|AhGj#b! z*wV6=duYQ6jN~u~I1fkw_0EQY_Y3)DK>va+rCU z^Il39zQvqo8cs6_QLI5{USo)mBXUb=ebFp!Dvii>`SM1juZm)E7gTWCAk5PC;^V~w z>#;MXNAq&F+&!LJ?i)X_o{=+S=bsptaLea}Sx94yG1P{rQcx^R-yyD9i&{)R_-`5C zOEVVxF}ufijAPZCF$^wW9Td6aoD`h^8sZRUDQ}gAF(-EnH%r=f-Sb-uy|!DAPDi3I z3USi$V!Oo@@##f3vOBzrJ>QGsHu$7oE}6|i`83W{<_li}jJe~4 z_j~QQ9z-?YJy~Dy{NAbBq&+oNTX357$y9;4Dcmsh1A#+t#A5%Uqm|jpw7t!quGG3t z*y`-`wr+c*Qk$>T=7O#l*XBZ}>(&+nTrW3-(({qptY1z4s_#_Y!I9wW(=)a{B&M%SMlK0?9K+ggjf2n}#gw zZFHRn%t7K^7JEvCC1bWUcCu91bGc+OZilk*o{QO1xlzJbYe%QMvC{;`VTv8ih3he02{Wqk0q zDA@#(-brC~*7+WUhW`KM$MxtKCSksx$tcpcNyypt%|Q4BI<7B=q1QJ9UdMnHZ$kK- zj3RA20$KAkJ&JF#LPn9c@$=8t{Uy^E?oZcs!Rr{Ncmes&kWr*<4&-b;F_`v=`vAL| z?^W=O;l4@Nkm0$8i(S{8kRz6Bh zq<1lA_ff#&%g}KjYcX_RM!;uF9fsi|beeQs;%ZIsqiimec-6%)2Jvh=oijeUb-$$u|sqO6i|b_`JfG6*d(v5RvbklFuvrP~jH}uMpvP YL&@JMOxBB!p8KZ#n8FIsfIOq{ABC4WX#fBK literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/lib/write.c b/linux-0.11-lab/0/linux/lib/write.c new file mode 100644 index 0000000..df52e74 --- /dev/null +++ b/linux-0.11-lab/0/linux/lib/write.c @@ -0,0 +1,10 @@ +/* + * linux/lib/write.c + * + * (C) 1991 Linus Torvalds + */ + +#define __LIBRARY__ +#include + +_syscall3(int,write,int,fd,const char *,buf,off_t,count) diff --git a/linux-0.11-lab/0/linux/lib/write.o b/linux-0.11-lab/0/linux/lib/write.o new file mode 100644 index 0000000000000000000000000000000000000000..3aae21041d4ba6dc5244299e04aa1f571eb6f14b GIT binary patch literal 2376 zcma)8OK%)S5U!rtm%Yx$4<5E0i9y&BF9UKToQIG=R070wS-C6I5-5FH@mjsCjA#nt8gw*Q zo?gHA;@Ovk5Tr?vNkc@`%_&b^iaENECg`=@KgRdYR*xO9Z|`DtdhhkB^~3ugp01AV z?o`KUtFQ<4_i^U`{B(n79^3`(-Wq@F=C?p9XHG0b7r%iOFqlp%K}N3l4OAnS{~5x} z<^3Qb!zg~mMp3#BA#)hklQOLMqjVI$hsYm*iP00_Oq^1D{xx`^(@yQiJ{6jS4iMXo z{alfw#puftl}f)#BvbDvG?L?tqi=$hp8+#(%iLl@9Is53&B|xO-=77W@+EsX8J+pP8cV6bJ+I|~bT&u!M`l>xj-t#E+$dr=gGbmrUzYt^bdi%#9L z`)<_gp7c*FK5g0SmfZ>aeqwhbx9`~-A+C%U!RQA_?b)3{&`SI;h+zssJ5JozJN8Bt zCSEHEBOD<1*8{I@wYqLZaW{+->(IuxPo8@i#wHc&U-7sQ)C+@ki_MKjdt)qF=ZuuTZ+V$^CWgkVsSiTJPQ2Yu+$LlaDcRLpdnf5q{B^c+sY`EIk4lJ?C5 zXZQChl3#<3_m{`e`&)so=Rl<;fG=1{N&C(NYn@%c09dS~qJ&Nqso^Kl(`4xgLp5}trRl`1*=cfdDX z8iqi6{{96RuPl&^`@)iI$C7{G1e*RZOVo5OwafYN^ST^&I+bgwd?S@_r?Q#K9!uo= bB*kB*lK&0iJaRwyaCz?>cQKU~qyhXd?!6OW literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/mm/Makefile b/linux-0.11-lab/0/linux/mm/Makefile new file mode 100644 index 0000000..e0bcd73 --- /dev/null +++ b/linux-0.11-lab/0/linux/mm/Makefile @@ -0,0 +1,38 @@ +AR =ar +AS =as +LD =ld +LDFLAGS =-m elf_i386 -Ttext 0 -e startup_32 +CC =gcc -march=i386 +CFLAGS =-w -g -fstrength-reduce -fomit-frame-pointer -mcld \ + -finline-functions -nostdinc -fno-stack-protector -I../include +CPP =gcc -E -nostdinc -I../include + +.c.o: + $(CC) $(CFLAGS) \ + -c -o $*.o $< +.s.o: + $(AS) -o $*.o $< +.c.s: + $(CC) $(CFLAGS) \ + -S -o $*.s $< + +OBJS = memory.o page.o + +all: mm.o + +mm.o: $(OBJS) + $(LD) -r -o mm.o $(OBJS) + +clean: + rm -f core *.o *.a tmp_make + for i in *.c;do rm -f `basename $$i .c`.s;done + +dep: + sed '/\#\#\# Dependencies/q' < Makefile > tmp_make + (for i in *.c;do $(CPP) -M $$i;done) >> tmp_make + cp tmp_make Makefile + +### Dependencies: +memory.o : memory.c ../include/signal.h ../include/sys/types.h \ + ../include/asm/system.h ../include/linux/sched.h ../include/linux/head.h \ + ../include/linux/fs.h ../include/linux/mm.h ../include/linux/kernel.h diff --git a/linux-0.11-lab/0/linux/mm/memory.c b/linux-0.11-lab/0/linux/mm/memory.c new file mode 100644 index 0000000..0ffa375 --- /dev/null +++ b/linux-0.11-lab/0/linux/mm/memory.c @@ -0,0 +1,431 @@ +/* + * linux/mm/memory.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * demand-loading started 01.12.91 - seems it is high on the list of + * things wanted, and it should be easy to implement. - Linus + */ + +/* + * Ok, demand-loading was easy, shared pages a little bit tricker. Shared + * pages started 02.12.91, seems to work. - Linus. + * + * Tested sharing by executing about 30 /bin/sh: under the old kernel it + * would have taken more than the 6M I have free, but it worked well as + * far as I could see. + * + * Also corrected some "invalidate()"s - I wasn't doing enough of them. + */ + +#include + +#include + +#include +#include +#include + +volatile void do_exit(long code); + +static inline volatile void oom(void) +{ + printk("out of memory\n\r"); + do_exit(SIGSEGV); +} + +#define invalidate() \ +__asm__("movl %%eax,%%cr3"::"a" (0)) + +/* these are not to be changed without changing head.s etc */ +#define LOW_MEM 0x100000 +#define PAGING_MEMORY (15*1024*1024) +#define PAGING_PAGES (PAGING_MEMORY>>12) +#define MAP_NR(addr) (((addr)-LOW_MEM)>>12) +#define USED 100 + +#define CODE_SPACE(addr) ((((addr)+4095)&~4095) < \ +current->start_code + current->end_code) + +static long HIGH_MEMORY = 0; + +#define copy_page(from,to) \ +__asm__("cld ; rep ; movsl"::"S" (from),"D" (to),"c" (1024)) + +static unsigned char mem_map [ PAGING_PAGES ] = {0,}; + +/* + * Get physical address of first (actually last :-) free page, and mark it + * used. If no free pages left, return 0. + */ +unsigned long get_free_page(void) +{ +register unsigned long __res asm("ax"); + +__asm__("std ; repne ; scasb\n\t" + "jne 1f\n\t" + "movb $1,1(%%edi)\n\t" + "sall $12,%%ecx\n\t" + "addl %2,%%ecx\n\t" + "movl %%ecx,%%edx\n\t" + "movl $1024,%%ecx\n\t" + "leal 4092(%%edx),%%edi\n\t" + "rep ; stosl\n\t" + "movl %%edx,%%eax\n\t" + "1:" + "cld\n\t" /* by wyj */ + :"=a" (__res) + :"0" (0),"i" (LOW_MEM),"c" (PAGING_PAGES), + "D" (mem_map+PAGING_PAGES-1) + ); +return __res; +} + +/* + * Free a page of memory at physical address 'addr'. Used by + * 'free_page_tables()' + */ +void free_page(unsigned long addr) +{ + if (addr < LOW_MEM) return; + if (addr >= HIGH_MEMORY) + panic("trying to free nonexistent page"); + addr -= LOW_MEM; + addr >>= 12; + if (mem_map[addr]--) return; + mem_map[addr]=0; + panic("trying to free free page"); +} + +/* + * This function frees a continuos block of page tables, as needed + * by 'exit()'. As does copy_page_tables(), this handles only 4Mb blocks. + */ +int free_page_tables(unsigned long from,unsigned long size) +{ + unsigned long *pg_table; + unsigned long * dir, nr; + + if (from & 0x3fffff) + panic("free_page_tables called with wrong alignment"); + if (!from) + panic("Trying to free up swapper memory space"); + size = (size + 0x3fffff) >> 22; + dir = (unsigned long *) ((from>>20) & 0xffc); /* _pg_dir = 0 */ + for ( ; size-->0 ; dir++) { + if (!(1 & *dir)) + continue; + pg_table = (unsigned long *) (0xfffff000 & *dir); + for (nr=0 ; nr<1024 ; nr++) { + if (1 & *pg_table) + free_page(0xfffff000 & *pg_table); + *pg_table = 0; + pg_table++; + } + free_page(0xfffff000 & *dir); + *dir = 0; + } + invalidate(); + return 0; +} + +/* + * Well, here is one of the most complicated functions in mm. It + * copies a range of linerar addresses by copying only the pages. + * Let's hope this is bug-free, 'cause this one I don't want to debug :-) + * + * Note! We don't copy just any chunks of memory - addresses have to + * be divisible by 4Mb (one page-directory entry), as this makes the + * function easier. It's used only by fork anyway. + * + * NOTE 2!! When from==0 we are copying kernel space for the first + * fork(). Then we DONT want to copy a full page-directory entry, as + * that would lead to some serious memory waste - we just copy the + * first 160 pages - 640kB. Even that is more than we need, but it + * doesn't take any more memory - we don't copy-on-write in the low + * 1 Mb-range, so the pages can be shared with the kernel. Thus the + * special case for nr=xxxx. + */ +int copy_page_tables(unsigned long from,unsigned long to,long size) +{ + unsigned long * from_page_table; + unsigned long * to_page_table; + unsigned long this_page; + unsigned long * from_dir, * to_dir; + unsigned long nr; + + if ((from&0x3fffff) || (to&0x3fffff)) + panic("copy_page_tables called with wrong alignment"); + from_dir = (unsigned long *) ((from>>20) & 0xffc); /* _pg_dir = 0 */ + to_dir = (unsigned long *) ((to>>20) & 0xffc); + size = ((unsigned) (size+0x3fffff)) >> 22; + for( ; size-->0 ; from_dir++,to_dir++) { + if (1 & *to_dir) + panic("copy_page_tables: already exist"); + if (!(1 & *from_dir)) + continue; + from_page_table = (unsigned long *) (0xfffff000 & *from_dir); + if (!(to_page_table = (unsigned long *) get_free_page())) + return -1; /* Out of memory, see freeing */ + *to_dir = ((unsigned long) to_page_table) | 7; + nr = (from==0)?0xA0:1024; + for ( ; nr-- > 0 ; from_page_table++,to_page_table++) { + this_page = *from_page_table; + if (!(1 & this_page)) + continue; + this_page &= ~2; + *to_page_table = this_page; + if (this_page > LOW_MEM) { + *from_page_table = this_page; + this_page -= LOW_MEM; + this_page >>= 12; + mem_map[this_page]++; + } + } + } + invalidate(); + return 0; +} + +/* + * This function puts a page in memory at the wanted address. + * It returns the physical address of the page gotten, 0 if + * out of memory (either when trying to access page-table or + * page.) + */ +unsigned long put_page(unsigned long page,unsigned long address) +{ + unsigned long tmp, *page_table; + +/* NOTE !!! This uses the fact that _pg_dir=0 */ + + if (page < LOW_MEM || page >= HIGH_MEMORY) + printk("Trying to put page %p at %p\n",page,address); + if (mem_map[(page-LOW_MEM)>>12] != 1) + printk("mem_map disagrees with %p at %p\n",page,address); + page_table = (unsigned long *) ((address>>20) & 0xffc); + if ((*page_table)&1) + page_table = (unsigned long *) (0xfffff000 & *page_table); + else { + if (!(tmp=get_free_page())) + return 0; + *page_table = tmp|7; + page_table = (unsigned long *) tmp; + } + page_table[(address>>12) & 0x3ff] = page | 7; +/* no need for invalidate */ + return page; +} + +void un_wp_page(unsigned long * table_entry) +{ + unsigned long old_page,new_page; + + old_page = 0xfffff000 & *table_entry; + if (old_page >= LOW_MEM && mem_map[MAP_NR(old_page)]==1) { + *table_entry |= 2; + invalidate(); + return; + } + if (!(new_page=get_free_page())) + oom(); + if (old_page >= LOW_MEM) + mem_map[MAP_NR(old_page)]--; + *table_entry = new_page | 7; + invalidate(); + copy_page(old_page,new_page); +} + +/* + * This routine handles present pages, when users try to write + * to a shared page. It is done by copying the page to a new address + * and decrementing the shared-page counter for the old page. + * + * If it's in code space we exit with a segment error. + */ +void do_wp_page(unsigned long error_code,unsigned long address) +{ +#if 0 +/* we cannot do this yet: the estdio library writes to code space */ +/* stupid, stupid. I really want the libc.a from GNU */ + if (CODE_SPACE(address)) + do_exit(SIGSEGV); +#endif + un_wp_page((unsigned long *) + (((address>>10) & 0xffc) + (0xfffff000 & + *((unsigned long *) ((address>>20) &0xffc))))); + +} + +void write_verify(unsigned long address) +{ + unsigned long page; + + if (!( (page = *((unsigned long *) ((address>>20) & 0xffc)) )&1)) + return; + page &= 0xfffff000; + page += ((address>>10) & 0xffc); + if ((3 & *(unsigned long *) page) == 1) /* non-writeable, present */ + un_wp_page((unsigned long *) page); + return; +} + +void get_empty_page(unsigned long address) +{ + unsigned long tmp; + + if (!(tmp=get_free_page()) || !put_page(tmp,address)) { + free_page(tmp); /* 0 is ok - ignored */ + oom(); + } +} + +/* + * try_to_share() checks the page at address "address" in the task "p", + * to see if it exists, and if it is clean. If so, share it with the current + * task. + * + * NOTE! This assumes we have checked that p != current, and that they + * share the same executable. + */ +static int try_to_share(unsigned long address, struct task_struct * p) +{ + unsigned long from; + unsigned long to; + unsigned long from_page; + unsigned long to_page; + unsigned long phys_addr; + + from_page = to_page = ((address>>20) & 0xffc); + from_page += ((p->start_code>>20) & 0xffc); + to_page += ((current->start_code>>20) & 0xffc); +/* is there a page-directory at from? */ + from = *(unsigned long *) from_page; + if (!(from & 1)) + return 0; + from &= 0xfffff000; + from_page = from + ((address>>10) & 0xffc); + phys_addr = *(unsigned long *) from_page; +/* is the page clean and present? */ + if ((phys_addr & 0x41) != 0x01) + return 0; + phys_addr &= 0xfffff000; + if (phys_addr >= HIGH_MEMORY || phys_addr < LOW_MEM) + return 0; + to = *(unsigned long *) to_page; + if (!(to & 1)) + if (to = get_free_page()) + *(unsigned long *) to_page = to | 7; + else + oom(); + to &= 0xfffff000; + to_page = to + ((address>>10) & 0xffc); + if (1 & *(unsigned long *) to_page) + panic("try_to_share: to_page already exists"); +/* share them: write-protect */ + *(unsigned long *) from_page &= ~2; + *(unsigned long *) to_page = *(unsigned long *) from_page; + invalidate(); + phys_addr -= LOW_MEM; + phys_addr >>= 12; + mem_map[phys_addr]++; + return 1; +} + +/* + * share_page() tries to find a process that could share a page with + * the current one. Address is the address of the wanted page relative + * to the current data space. + * + * We first check if it is at all feasible by checking executable->i_count. + * It should be >1 if there are other tasks sharing this inode. + */ +static int share_page(unsigned long address) +{ + struct task_struct ** p; + + if (!current->executable) + return 0; + if (current->executable->i_count < 2) + return 0; + for (p = &LAST_TASK ; p > &FIRST_TASK ; --p) { + if (!*p) + continue; + if (current == *p) + continue; + if ((*p)->executable != current->executable) + continue; + if (try_to_share(address,*p)) + return 1; + } + return 0; +} + +void do_no_page(unsigned long error_code,unsigned long address) +{ + int nr[4]; + unsigned long tmp; + unsigned long page; + int block,i; + + address &= 0xfffff000; + tmp = address - current->start_code; + if (!current->executable || tmp >= current->end_data) { + get_empty_page(address); + return; + } + if (share_page(tmp)) + return; + if (!(page = get_free_page())) + oom(); +/* remember that 1 block is used for header */ + block = 1 + tmp/BLOCK_SIZE; + for (i=0 ; i<4 ; block++,i++) + nr[i] = bmap(current->executable,block); + bread_page(page,current->executable->i_dev,nr); + i = tmp + 4096 - current->end_data; + tmp = page + 4096; + while (i-- > 0) { + tmp--; + *(char *)tmp = 0; + } + if (put_page(page,address)) + return; + free_page(page); + oom(); +} + +void mem_init(long start_mem, long end_mem) +{ + int i; + + HIGH_MEMORY = end_mem; + for (i=0 ; i>= 12; + while (end_mem-->0) + mem_map[i++]=0; +} + +void calc_mem(void) +{ + int i,j,k,free=0; + long * pg_tbl; + + for(i=0 ; i5I8yebbsjY3b+28NJ=ba4L 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 WJ>8K)@)PG@pEzRdVi(KKAO0KJhD)6Q literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/mm/page.o b/linux-0.11-lab/0/linux/mm/page.o new file mode 100644 index 0000000000000000000000000000000000000000..da4852668a6d8b88d91c428ae8572bb3d4d2090d GIT binary patch literal 640 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 N^|Cbi(V*L${{d;jp)>#h literal 0 HcmV?d00001 diff --git a/linux-0.11-lab/0/linux/tools/build.c b/linux-0.11-lab/0/linux/tools/build.c new file mode 100644 index 0000000..8b8c7ab --- /dev/null +++ b/linux-0.11-lab/0/linux/tools/build.c @@ -0,0 +1,171 @@ +/* + * linux/tools/build.c + * + * (C) 1991 Linus Torvalds + */ + +/* + * This file builds a disk-image from three different files: + * + * - bootsect: max 510 bytes of 8086 machine code, loads the rest + * - setup: max 4 sectors of 8086 machine code, sets up system parm + * - system: 80386 code for actual system + * + * It does some checking that all files are of the correct type, and + * just writes the result to stdout, removing headers and padding to + * the right amount. It also writes some system data to stderr. + */ + +/* + * Changes by tytso to allow root device specification + */ + +#include /* fprintf */ +#include +#include /* contains exit */ +#include /* unistd.h needs this */ +#include +#include +#include /* contains read/write */ +#include + +#define MAJOR(a) (((unsigned)(a))>>8) +#define MINOR(a) ((a)&0xff) + +#define MINIX_HEADER 32 +#define GCC_HEADER 0x80 /* 0x1000 */ /* by wyj */ + +#define SYS_SIZE 0x3000 + +#define DEFAULT_MAJOR_ROOT 0x03 //0x02 /* by wyj */ +#define DEFAULT_MINOR_ROOT 0x00 //0x1d + +/* max nr of sectors of setup: don't change unless you also change + * bootsect etc */ +#define SETUP_SECTS 4 + +#define STRINGIFY(x) #x + +void die(char * str) +{ + fprintf(stderr,"%s\n",str); + exit(1); +} + +void usage(void) +{ + die("Usage: build bootsect setup system [rootdev] [> image]"); +} + +int main(int argc, char ** argv) +{ + int i,c,id; + char buf[1024*4]; /* by wyj */ + char major_root, minor_root; + struct stat sb; + + if ((argc != 4) && (argc != 5)) + usage(); + if (argc == 5) { + if (strcmp(argv[4], "FLOPPY")) { + if (stat(argv[4], &sb)) { + perror(argv[4]); + die("Couldn't stat root device."); + } + major_root = MAJOR(sb.st_rdev); + minor_root = MINOR(sb.st_rdev); + } else { + major_root = 0; + minor_root = 0; + } + } else { + major_root = DEFAULT_MAJOR_ROOT; + minor_root = DEFAULT_MINOR_ROOT; + } + fprintf(stderr, "Root device is (%d, %d)\n", major_root, minor_root); + if ((major_root != 2) && (major_root != 3) && + (major_root != 0)) { + fprintf(stderr, "Illegal root device (major = %d)\n", + major_root); + die("Bad root device --- major #"); + } + for (i=0;i0 ; i+=c ) + if (write(1,buf,c)!=c) + die("Write call failed"); + close (id); + if (i > SETUP_SECTS*512) + die("Setup exceeds " STRINGIFY(SETUP_SECTS) + " sectors - rewrite build/boot/setup"); + fprintf(stderr,"Setup is %d bytes.\n",i); + for (c=0 ; c sizeof(buf)) + c = sizeof(buf); + if (write(1,buf,c) != c) + die("Write call failed"); + i += c; + } + + if ((id=open(argv[3],O_RDONLY,0))<0) + die("Unable to open 'system'"); + if (read(id,buf,GCC_HEADER) != GCC_HEADER) + die("Unable to read header of 'system'"); +// if (((long *) buf)[5] != 0) +// die("Non-GCC header of 'system'"); + for (i=0 ; (c=read(id,buf,sizeof buf))>0 ; i+=c ) + if (write(1,buf,c)!=c) + die("Write call failed"); + close(id); + fprintf(stderr,"System is %d bytes.\n",i); + if (i > SYS_SIZE*16) + die("System is too big"); + return(0); +} diff --git a/linux-0.11-lab/0/linux/tools/system b/linux-0.11-lab/0/linux/tools/system new file mode 100644 index 0000000000000000000000000000000000000000..cdec13498fa56de2a8a9c9f8d06d839b764ef75e GIT binary patch literal 286057 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