Day 22 standalone ZIP verification
Date: 2026-09-19
Archive SHA-256: 068c86aa51a33813a837e4a91ab2646a9db72209825bd1d221563a21c787b8a0
Extracted directory: fresh mktemp directory
Archive build entries: absent (PASS)

$ make build
mkdir -p build
touch build/.dir
nasm -f elf32 -g -F dwarf sample/entry.asm -o build/entry.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -c sample/demo.c -o build/demo.o
i686-elf-ld -m elf_i386 -z noexecstack -T sample/linker.ld build/entry.o build/demo.o -o build/sample.elf
dd if=/dev/zero of=build/blank.img bs=512 count=2048 status=none
{ printf '%%define IMAGE_SECTORS %s\n' '16384'; printf '%%define FAT16_START_LBA %s\n' '2048'; printf '%%define FAT16_SECTORS %s\n' '14336'; printf '%%define STAGE2_LBA %s\n' '1'; printf '%%define STAGE2_SECTORS %s\n' '8'; printf '%%define HEADER_LBA %s\n' '9'; printf '%%define PAYLOAD_LBA %s\n' '10'; printf '%%define PAYLOAD_MAX_BYTES %s\n' '131072'; printf '%%define KERNEL_MEMORY_MAX_BYTES %s\n' '262144'; printf '%%define PAYLOAD_SEGMENT %s\n' '0x1000'; printf '%%define READ_CHUNK_SECTORS %s\n' '32'; printf '%%define HEADER_MAGIC %s\n' '0x334f5342'; printf '%%define HEADER_VERSION %s\n' '1'; } > build/layout.inc
nasm -D DAY02_ONLY -f bin boot/mbr.asm -o build/day02-mbr.bin
test "$(wc -c < build/day02-mbr.bin)" -eq 512
cp build/day02-mbr.bin build/day02-mbr.img
truncate -s $(( 16384 * 512 )) build/day02-mbr.img
nasm -f bin boot/mbr.asm -o build/mbr.bin
test "$(wc -c < build/mbr.bin)" -eq 512
nasm -f bin boot/stage2.asm -o build/stage2.bin
test "$(wc -c < build/stage2.bin)" -eq 4096
nasm -f elf32 -g -F dwarf kernel/entry.asm -o build/kernel-entry.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -c kernel/main.c -o build/kernel-main.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -c kernel/runtime.c -o build/kernel-runtime.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -c kernel/console.c -o build/kernel-console.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -c kernel/exceptions.c -o build/kernel-exceptions.o
nasm -f elf32 -g -F dwarf kernel/exceptions.asm -o build/kernel-isr.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -c kernel/timer.c -o build/kernel-timer.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -c kernel/keyboard.c -o build/kernel-keyboard.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -c kernel/memory.c -o build/kernel-memory.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -c kernel/paging.c -o build/kernel-paging.o
nasm -f elf32 -g -F dwarf kernel/paging-probes.asm -o build/kernel-paging-probes.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -c kernel/heap.c -o build/kernel-heap.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -Os -fno-inline -c kernel/task.c -o build/kernel-task.o
nasm -f elf32 -g -F dwarf kernel/switch.asm -o build/kernel-switch.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -Os -c kernel/user.c -o build/kernel-user.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -Os -c kernel/syscall.c -o build/kernel-syscall.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -Os -c kernel/elf.c -o build/kernel-elf.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -Os -DBLOCK_PATTERN_LAST=16383 -DBLOCK_EXPECTED_SECTORS=16384 -c kernel/block.c -o build/kernel-block.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -Os -c kernel/fat.c -o build/kernel-fat.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -c kernel/file.c -o build/kernel-file.o
nasm -f elf32 -g -F dwarf kernel/user-entry.asm -o build/kernel-user-entry.o
nasm -f elf32 -g -F dwarf user/day18-entry.asm -o build/day18-user-entry.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -Os -c user/day18.c -o build/day18-user.o
i686-elf-ld -m elf_i386 -z noexecstack -T user/day18.ld build/day18-user-entry.o build/day18-user.o -o build/day18-user-debug.elf
test -z "$(i686-elf-nm -u build/day18-user-debug.elf)"
test "$(i686-elf-nm -n build/day18-user-debug.elf | awk '$3 == "day18_result" { print "0x" $1 }')" = 0x40001000
i686-elf-objcopy --strip-all build/day18-user-debug.elf build/day18-user.elf
nasm -f elf32 -g -F dwarf kernel/day18-elf-blob.asm -o build/kernel-day18-elf-blob.o
nasm -f elf32 -g -F dwarf user/day19-entry.asm -o build/day19-user-entry.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -Os -c user/day19.c -o build/day19-user.o
i686-elf-ld -m elf_i386 -z noexecstack -T user/day19.ld build/day19-user-entry.o build/day19-user.o -o build/day19-user-debug.elf
test -z "$(i686-elf-nm -u build/day19-user-debug.elf)"
test "$(i686-elf-nm -n build/day19-user-debug.elf | awk '$3 == "day19_mode" { print "0x" $1 }')" = 0x40001000
test "$(i686-elf-nm -n build/day19-user-debug.elf | awk '$3 == "day19_progress" { print "0x" $1 }')" = 0x40001004
test "$(i686-elf-nm -n build/day19-user-debug.elf | awk '$3 == "day19_release" { print "0x" $1 }')" = 0x40001008
i686-elf-objcopy --strip-all build/day19-user-debug.elf build/day19-user.elf
nasm -f elf32 -g -F dwarf kernel/day19-elf-blob.asm -o build/kernel-day19-elf-blob.o
nasm -f elf32 -g -F dwarf user/day22-entry.asm -o build/day22-user-entry.o
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -Os -c user/day22.c -o build/day22-user.o
i686-elf-ld -m elf_i386 -z noexecstack -T user/day22.ld build/day22-user-entry.o build/day22-user.o -o build/day22-user-debug.elf
test -z "$(i686-elf-nm -u build/day22-user-debug.elf)"
test "$(i686-elf-nm -n build/day22-user-debug.elf | awk '$3 == "day22_mode" { print "0x" $1 }')" = 0x40001000
i686-elf-objcopy --strip-all build/day22-user-debug.elf build/day22-user.elf
nasm -f elf32 -g -F dwarf kernel/day22-elf-blob.asm -o build/kernel-day22-elf-blob.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel.elf
i686-elf-objcopy -O binary build/kernel.elf build/kernel.bin
cc -std=c11 -O2 -Wall -Wextra -Werror tools/mkpayload.c -o build/mkpayload
sh tools/kernel-header.sh build/kernel 131072 262144 0x334f5342 1
dd if=/dev/zero of=build/kernel.pad bs=512 count=256 status=none
dd if=build/kernel.bin of=build/kernel.pad bs=512 conv=notrunc status=none
test "$(wc -c < build/kernel.pad)" -eq $(( 256 * 512 ))
cc -std=c11 -O2 -Wall -Wextra -Werror tools/mkfat16.c -o build/mkfat16
build/mkfat16 build/fat16.bin disk/README.TXT normal
test "$(wc -c < build/fat16.bin)" -eq $(( 14336 * 512 ))
cc -std=c11 -O2 -Wall -Wextra -Werror tools/mkblockpattern.c -o build/mkblockpattern
build/mkblockpattern 2047 > build/block-pattern-2047.bin
test "$(wc -c < build/block-pattern-2047.bin)" -eq 512
build/mkblockpattern 16383 > build/block-pattern-last.bin
test "$(wc -c < build/block-pattern-last.bin)" -eq 512
cp build/mbr.bin build/mbr.img
truncate -s $(( 16384 * 512 )) build/mbr.img
dd if=build/stage2.bin of=build/mbr.img bs=512 seek=1 conv=notrunc status=none
dd if=build/header.bin of=build/mbr.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel.pad of=build/mbr.img bs=512 seek=10 conv=notrunc status=none
dd if=build/fat16.bin of=build/mbr.img bs=512 seek=2048 conv=notrunc status=none
dd if=build/block-pattern-2047.bin of=build/mbr.img bs=512 seek=2047 conv=notrunc status=none
dd if=build/block-pattern-last.bin of=build/mbr.img bs=512 seek=16383 conv=notrunc status=none
cp build/mbr.img build/mbr-badsig.img
printf '\0\0' | dd of=build/mbr-badsig.img bs=1 seek=510 conv=notrunc status=none
cp build/mbr.img build/mbr-truncated.img
truncate -s $(( (10 + ($(wc -c < build/kernel.bin) + 511) / 512 - 1) * 512 )) build/mbr-truncated.img
cp build/mbr.img build/mbr-badmagic.img
dd if=build/header-badmagic.bin of=build/mbr-badmagic.img bs=512 seek=9 conv=notrunc status=none
cp build/mbr.img build/mbr-oversized-header.img
dd if=build/header-oversized.bin of=build/mbr-oversized-header.img bs=512 seek=9 conv=notrunc status=none
cp build/mbr.img build/mbr-oversized-memory.img
dd if=build/header-memory-oversized.bin of=build/mbr-oversized-memory.img bs=512 seek=9 conv=notrunc status=none
cp build/mbr.img build/mbr-corrupt.img
printf '\0' | dd of=build/mbr-corrupt.img bs=1 seek=$(( 10 * 512 )) conv=notrunc status=none
{ printf 'mbr_lba=0\n'; printf 'stage2_lba=1\n'; printf 'stage2_sectors=8\n'; printf 'header_lba=9\n'; printf 'payload_lba=10\n'; printf 'payload_bytes=%s\n' "$(wc -c < build/kernel.bin)"; printf 'payload_sectors=%s\n' "$(( ($(wc -c < build/kernel.bin) + 511) / 512 ))"; printf 'payload_reserved_sectors=256\n'; printf 'payload_load=0x10000\n'; printf 'fat16_start_lba=2048\n'; printf 'read_chunk_sectors=32\n'; } > build/payload-layout.txt
nasm -D BAD_GDT -f bin boot/stage2.asm -o build/stage2-badgdt.bin
cp build/mbr.img build/mbr-badgdt.img
dd if=build/stage2-badgdt.bin of=build/mbr-badgdt.img bs=512 seek=1 conv=notrunc status=none
nasm -D FORCE_A20_FAIL -f bin boot/stage2.asm -o build/stage2-a20fail.bin
cp build/mbr.img build/mbr-a20fail.img
dd if=build/stage2-a20fail.bin of=build/mbr-a20fail.img bs=512 seek=1 conv=notrunc status=none
nasm -D FORCE_A20_OFF -f bin boot/stage2.asm -o build/stage2-a20off.bin
cp build/mbr.img build/mbr-a20off.img
dd if=build/stage2-a20off.bin of=build/mbr-a20off.img bs=512 seek=1 conv=notrunc status=none
nasm -D E820_CAPACITY=1 -f bin boot/stage2.asm -o build/stage2-e820full.bin
cp build/mbr.img build/mbr-e820full.img
dd if=build/stage2-e820full.bin of=build/mbr-e820full.img bs=512 seek=1 conv=notrunc status=none
nasm -D SKIP_BSS_CLEAR -f elf32 -g -F dwarf kernel/entry.asm -o build/kernel-entry-badbss.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry-badbss.o build/kernel-main.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-badbss.elf
i686-elf-objcopy -O binary build/kernel-badbss.elf build/kernel-badbss.bin
sh tools/kernel-header.sh build/kernel-badbss 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-badbss.img
dd if=build/kernel-badbss-header.bin of=build/mbr-badbss.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-badbss.bin of=build/mbr-badbss.img bs=512 seek=10 conv=notrunc status=none
nasm -D ONE_SECTOR_READS -f bin boot/stage2.asm -o build/stage2-chunk1.bin
cp build/mbr.img build/mbr-chunk1.img
dd if=build/stage2-chunk1.bin of=build/mbr-chunk1.img bs=512 seek=1 conv=notrunc status=none
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_PANIC -c kernel/main.c -o build/kernel-main-panic.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-panic.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-panic.elf
i686-elf-objcopy -O binary build/kernel-panic.elf build/kernel-panic.bin
sh tools/kernel-header.sh build/kernel-panic 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-panic.img
dd if=build/kernel-panic-header.bin of=build/mbr-panic.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-panic.bin of=build/mbr-panic.img bs=512 seek=10 conv=notrunc status=none

$ make check-fd
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_FD_TERMINAL -c kernel/main.c -o build/kernel-main-fd-terminal.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-fd-terminal.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-fd-terminal.elf
i686-elf-objcopy -O binary build/kernel-fd-terminal.elf build/kernel-fd-terminal.bin
sh tools/kernel-header.sh build/kernel-fd-terminal 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-fd-terminal.img
dd if=build/kernel-fd-terminal-header.bin of=build/mbr-fd-terminal.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-fd-terminal.bin of=build/mbr-fd-terminal.img bs=512 seek=10 conv=notrunc status=none
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_FD_FAIL -c kernel/main.c -o build/kernel-main-fd-fail.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-fd-fail.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-fd-fail.elf
i686-elf-objcopy -O binary build/kernel-fd-fail.elf build/kernel-fd-fail.bin
sh tools/kernel-header.sh build/kernel-fd-fail 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-fd-fail.img
dd if=build/kernel-fd-fail-header.bin of=build/mbr-fd-fail.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-fd-fail.bin of=build/mbr-fd-fail.img bs=512 seek=10 conv=notrunc status=none
QEMU='/tmp/build-an-os-tools/bin/qemu-system-i386' QEMU_COMMON='-machine pc-i440fx-7.2 -accel tcg -cpu qemu32 -smp 1 -m 64M -bios /tmp/build-an-os-tools/root2/usr/share/seabios/bios-256k.bin -L /tmp/build-an-os-tools/root2/usr/share/qemu -boot order=c,strict=on -nic none -no-reboot' GDB='/tmp/build-an-os-tools/bin/gdb-multiarch' sh tools/check-fd.sh
PASS: real QEMU PS/2 input woke the fd reader without polling
The target architecture is set to "i386".
0x0000fff0 in ?? ()
Hardware assisted breakpoint 1 at 0x107c95: file kernel/task.c, line 1348.

Breakpoint 1, fd_exit_closed_observed () at kernel/task.c:1348
1348	{ __asm__ volatile("nop" ::: "memory"); }
PASS: faulting child closed every fd before ZOMBIE publication
Hardware assisted breakpoint 2 at 0x108078: file kernel/task.c, line 1491.

Breakpoint 2, fd_demo_done () at kernel/task.c:1491
1491	{ __asm__ volatile("nop" ::: "memory"); }
PASS: independent/shared offsets, short EOF, limits, rollback, exit cleanup and page recovery verified
The target architecture is set to "i386".
0x0000fff0 in ?? ()
Hardware assisted breakpoint 1 at 0x108078: file kernel/task.c, line 1491.

Breakpoint 1, fd_demo_done () at kernel/task.c:1491
1491	{ __asm__ volatile("nop" ::: "memory"); }
PASS: six ELF allocation failures plus kernel-stack failure rolled back mapped refs, then recovered
The target architecture is set to "i386".
0x00105392 in idle_once () at kernel/task.c:605
605	}
PASS: terminal reader blocked in trap depth 1, idle PIT advanced, HMP keys produced ab\n
[Inferior 1 (process 1) detached]
PASS check-fd

$ make check-fat
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_FAT_LOOP -c kernel/main.c -o build/kernel-main-fat-loop.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-fat-loop.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-fat-loop.elf
i686-elf-objcopy -O binary build/kernel-fat-loop.elf build/kernel-fat-loop.bin
sh tools/kernel-header.sh build/kernel-fat-loop 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-fat-loop.img
dd if=build/kernel-fat-loop-header.bin of=build/mbr-fat-loop.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-fat-loop.bin of=build/mbr-fat-loop.img bs=512 seek=10 conv=notrunc status=none
build/mkfat16 build/fat16-loop.bin disk/README.TXT loop
cp build/mbr-fat-loop.img build/mbr-fat-loop-test.img
dd if=build/fat16-loop.bin of=build/mbr-fat-loop-test.img bs=512 seek=2048 conv=notrunc status=none
dd if=build/block-pattern-last.bin of=build/mbr-fat-loop-test.img bs=512 seek=16383 conv=notrunc status=none
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_FAT_SHORT -c kernel/main.c -o build/kernel-main-fat-short.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-fat-short.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-fat-short.elf
i686-elf-objcopy -O binary build/kernel-fat-short.elf build/kernel-fat-short.bin
sh tools/kernel-header.sh build/kernel-fat-short 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-fat-short.img
dd if=build/kernel-fat-short-header.bin of=build/mbr-fat-short.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-fat-short.bin of=build/mbr-fat-short.img bs=512 seek=10 conv=notrunc status=none
build/mkfat16 build/fat16-short.bin disk/README.TXT short
cp build/mbr-fat-short.img build/mbr-fat-short-test.img
dd if=build/fat16-short.bin of=build/mbr-fat-short-test.img bs=512 seek=2048 conv=notrunc status=none
dd if=build/block-pattern-last.bin of=build/mbr-fat-short-test.img bs=512 seek=16383 conv=notrunc status=none
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_FAT_BADBPB -c kernel/main.c -o build/kernel-main-fat-badbpb.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-fat-badbpb.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-fat-badbpb.elf
i686-elf-objcopy -O binary build/kernel-fat-badbpb.elf build/kernel-fat-badbpb.bin
sh tools/kernel-header.sh build/kernel-fat-badbpb 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-fat-badbpb.img
dd if=build/kernel-fat-badbpb-header.bin of=build/mbr-fat-badbpb.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-fat-badbpb.bin of=build/mbr-fat-badbpb.img bs=512 seek=10 conv=notrunc status=none
build/mkfat16 build/fat16-badbpb.bin disk/README.TXT badbpb
cp build/mbr-fat-badbpb.img build/mbr-fat-badbpb-test.img
dd if=build/fat16-badbpb.bin of=build/mbr-fat-badbpb-test.img bs=512 seek=2048 conv=notrunc status=none
dd if=build/block-pattern-last.bin of=build/mbr-fat-badbpb-test.img bs=512 seek=16383 conv=notrunc status=none
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_FAT_MIRROR -c kernel/main.c -o build/kernel-main-fat-mirror.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-fat-mirror.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-fat-mirror.elf
i686-elf-objcopy -O binary build/kernel-fat-mirror.elf build/kernel-fat-mirror.bin
sh tools/kernel-header.sh build/kernel-fat-mirror 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-fat-mirror.img
dd if=build/kernel-fat-mirror-header.bin of=build/mbr-fat-mirror.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-fat-mirror.bin of=build/mbr-fat-mirror.img bs=512 seek=10 conv=notrunc status=none
build/mkfat16 build/fat16-mirror.bin disk/README.TXT mirror
cp build/mbr-fat-mirror.img build/mbr-fat-mirror-test.img
dd if=build/fat16-mirror.bin of=build/mbr-fat-mirror-test.img bs=512 seek=2048 conv=notrunc status=none
dd if=build/block-pattern-last.bin of=build/mbr-fat-mirror-test.img bs=512 seek=16383 conv=notrunc status=none
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_FAT_ROOTBOUND -c kernel/main.c -o build/kernel-main-fat-rootbound.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-fat-rootbound.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-fat-rootbound.elf
i686-elf-objcopy -O binary build/kernel-fat-rootbound.elf build/kernel-fat-rootbound.bin
sh tools/kernel-header.sh build/kernel-fat-rootbound 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-fat-rootbound.img
dd if=build/kernel-fat-rootbound-header.bin of=build/mbr-fat-rootbound.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-fat-rootbound.bin of=build/mbr-fat-rootbound.img bs=512 seek=10 conv=notrunc status=none
build/mkfat16 build/fat16-rootbound.bin disk/README.TXT rootbound
cp build/mbr-fat-rootbound.img build/mbr-fat-rootbound-test.img
dd if=build/fat16-rootbound.bin of=build/mbr-fat-rootbound-test.img bs=512 seek=2048 conv=notrunc status=none
dd if=build/block-pattern-last.bin of=build/mbr-fat-rootbound-test.img bs=512 seek=16383 conv=notrunc status=none
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_FAT_DIRHI -c kernel/main.c -o build/kernel-main-fat-dirhi.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-fat-dirhi.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-fat-dirhi.elf
i686-elf-objcopy -O binary build/kernel-fat-dirhi.elf build/kernel-fat-dirhi.bin
sh tools/kernel-header.sh build/kernel-fat-dirhi 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-fat-dirhi.img
dd if=build/kernel-fat-dirhi-header.bin of=build/mbr-fat-dirhi.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-fat-dirhi.bin of=build/mbr-fat-dirhi.img bs=512 seek=10 conv=notrunc status=none
build/mkfat16 build/fat16-dirhi.bin disk/README.TXT dirhi
cp build/mbr-fat-dirhi.img build/mbr-fat-dirhi-test.img
dd if=build/fat16-dirhi.bin of=build/mbr-fat-dirhi-test.img bs=512 seek=2048 conv=notrunc status=none
dd if=build/block-pattern-last.bin of=build/mbr-fat-dirhi-test.img bs=512 seek=16383 conv=notrunc status=none
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_FAT_EMPTYCLUSTER -c kernel/main.c -o build/kernel-main-fat-emptycluster.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-fat-emptycluster.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-fat-emptycluster.elf
i686-elf-objcopy -O binary build/kernel-fat-emptycluster.elf build/kernel-fat-emptycluster.bin
sh tools/kernel-header.sh build/kernel-fat-emptycluster 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-fat-emptycluster.img
dd if=build/kernel-fat-emptycluster-header.bin of=build/mbr-fat-emptycluster.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-fat-emptycluster.bin of=build/mbr-fat-emptycluster.img bs=512 seek=10 conv=notrunc status=none
build/mkfat16 build/fat16-emptycluster.bin disk/README.TXT emptycluster
cp build/mbr-fat-emptycluster.img build/mbr-fat-emptycluster-test.img
dd if=build/fat16-emptycluster.bin of=build/mbr-fat-emptycluster-test.img bs=512 seek=2048 conv=notrunc status=none
dd if=build/block-pattern-last.bin of=build/mbr-fat-emptycluster-test.img bs=512 seek=16383 conv=notrunc status=none
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_FAT_BADCLUSTER -c kernel/main.c -o build/kernel-main-fat-badcluster.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-fat-badcluster.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-fat-badcluster.elf
i686-elf-objcopy -O binary build/kernel-fat-badcluster.elf build/kernel-fat-badcluster.bin
sh tools/kernel-header.sh build/kernel-fat-badcluster 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-fat-badcluster.img
dd if=build/kernel-fat-badcluster-header.bin of=build/mbr-fat-badcluster.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-fat-badcluster.bin of=build/mbr-fat-badcluster.img bs=512 seek=10 conv=notrunc status=none
build/mkfat16 build/fat16-badcluster.bin disk/README.TXT badcluster
cp build/mbr-fat-badcluster.img build/mbr-fat-badcluster-test.img
dd if=build/fat16-badcluster.bin of=build/mbr-fat-badcluster-test.img bs=512 seek=2048 conv=notrunc status=none
dd if=build/block-pattern-last.bin of=build/mbr-fat-badcluster-test.img bs=512 seek=16383 conv=notrunc status=none
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_FAT_RESERVED -c kernel/main.c -o build/kernel-main-fat-reserved.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-fat-reserved.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-fat-reserved.elf
i686-elf-objcopy -O binary build/kernel-fat-reserved.elf build/kernel-fat-reserved.bin
sh tools/kernel-header.sh build/kernel-fat-reserved 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-fat-reserved.img
dd if=build/kernel-fat-reserved-header.bin of=build/mbr-fat-reserved.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-fat-reserved.bin of=build/mbr-fat-reserved.img bs=512 seek=10 conv=notrunc status=none
build/mkfat16 build/fat16-reserved.bin disk/README.TXT reserved
cp build/mbr-fat-reserved.img build/mbr-fat-reserved-test.img
dd if=build/fat16-reserved.bin of=build/mbr-fat-reserved-test.img bs=512 seek=2048 conv=notrunc status=none
dd if=build/block-pattern-last.bin of=build/mbr-fat-reserved-test.img bs=512 seek=16383 conv=notrunc status=none
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_FAT_OUTOFRANGE -c kernel/main.c -o build/kernel-main-fat-outofrange.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-fat-outofrange.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-fat-outofrange.elf
i686-elf-objcopy -O binary build/kernel-fat-outofrange.elf build/kernel-fat-outofrange.bin
sh tools/kernel-header.sh build/kernel-fat-outofrange 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-fat-outofrange.img
dd if=build/kernel-fat-outofrange-header.bin of=build/mbr-fat-outofrange.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-fat-outofrange.bin of=build/mbr-fat-outofrange.img bs=512 seek=10 conv=notrunc status=none
build/mkfat16 build/fat16-outofrange.bin disk/README.TXT outofrange
cp build/mbr-fat-outofrange.img build/mbr-fat-outofrange-test.img
dd if=build/fat16-outofrange.bin of=build/mbr-fat-outofrange-test.img bs=512 seek=2048 conv=notrunc status=none
dd if=build/block-pattern-last.bin of=build/mbr-fat-outofrange-test.img bs=512 seek=16383 conv=notrunc status=none
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_FAT_OVERSIZE -c kernel/main.c -o build/kernel-main-fat-oversize.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-fat-oversize.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-fat-oversize.elf
i686-elf-objcopy -O binary build/kernel-fat-oversize.elf build/kernel-fat-oversize.bin
sh tools/kernel-header.sh build/kernel-fat-oversize 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-fat-oversize.img
dd if=build/kernel-fat-oversize-header.bin of=build/mbr-fat-oversize.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-fat-oversize.bin of=build/mbr-fat-oversize.img bs=512 seek=10 conv=notrunc status=none
build/mkfat16 build/fat16-oversize.bin disk/README.TXT oversize
cp build/mbr-fat-oversize.img build/mbr-fat-oversize-test.img
dd if=build/fat16-oversize.bin of=build/mbr-fat-oversize-test.img bs=512 seek=2048 conv=notrunc status=none
dd if=build/block-pattern-last.bin of=build/mbr-fat-oversize-test.img bs=512 seek=16383 conv=notrunc status=none
QEMU='/tmp/build-an-os-tools/bin/qemu-system-i386' QEMU_COMMON='-machine pc-i440fx-7.2 -accel tcg -cpu qemu32 -smp 1 -m 64M -bios /tmp/build-an-os-tools/root2/usr/share/seabios/bios-256k.bin -L /tmp/build-an-os-tools/root2/usr/share/qemu -boot order=c,strict=on -nic none -no-reboot' GDB='/tmp/build-an-os-tools/bin/gdb-multiarch' sh tools/check-fat.sh
PASS: FAT16 geometry, root filtering, offset reads and non-contiguous 2->9->4 chain verified
PASS: FAT demo reaches original blocking keyboard consumer
PASS: loop FAT corruption rejected
PASS: short FAT corruption rejected
PASS: badbpb FAT corruption rejected
PASS: mirror FAT corruption rejected
PASS: rootbound FAT corruption rejected
PASS: dirhi FAT corruption rejected
PASS: emptycluster FAT corruption rejected
PASS: badcluster FAT corruption rejected
PASS: reserved FAT corruption rejected
PASS: outofrange FAT corruption rejected
PASS: oversize FAT corruption rejected
PASS check-fat

$ make check-block
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_BLOCK_TIMEOUT -c kernel/main.c -o build/kernel-main-block-timeout.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-block-timeout.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-block-timeout.elf
i686-elf-objcopy -O binary build/kernel-block-timeout.elf build/kernel-block-timeout.bin
sh tools/kernel-header.sh build/kernel-block-timeout 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-block-timeout.img
dd if=build/kernel-block-timeout-header.bin of=build/mbr-block-timeout.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-block-timeout.bin of=build/mbr-block-timeout.img bs=512 seek=10 conv=notrunc status=none
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_BLOCK_ERROR -c kernel/main.c -o build/kernel-main-block-error.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-block-error.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-block-error.elf
i686-elf-objcopy -O binary build/kernel-block-error.elf build/kernel-block-error.bin
sh tools/kernel-header.sh build/kernel-block-error 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-block-error.img
dd if=build/kernel-block-error-header.bin of=build/mbr-block-error.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-block-error.bin of=build/mbr-block-error.img bs=512 seek=10 conv=notrunc status=none
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_BLOCK_NODRQ -c kernel/main.c -o build/kernel-main-block-nodrq.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-block-nodrq.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-block-nodrq.elf
i686-elf-objcopy -O binary build/kernel-block-nodrq.elf build/kernel-block-nodrq.bin
sh tools/kernel-header.sh build/kernel-block-nodrq 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-block-nodrq.img
dd if=build/kernel-block-nodrq-header.bin of=build/mbr-block-nodrq.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-block-nodrq.bin of=build/mbr-block-nodrq.img bs=512 seek=10 conv=notrunc status=none
QEMU='/tmp/build-an-os-tools/bin/qemu-system-i386' QEMU_COMMON='-machine pc-i440fx-7.2 -accel tcg -cpu qemu32 -smp 1 -m 64M -bios /tmp/build-an-os-tools/root2/usr/share/seabios/bios-256k.bin -L /tmp/build-an-os-tools/root2/usr/share/qemu -boot order=c,strict=on -nic none -no-reboot' GDB='/tmp/build-an-os-tools/bin/gdb-multiarch' IMAGE_SECTORS='16384' PAYLOAD_MAX_BYTES='131072' sh tools/check-block.sh
PASS: IDENTIFY, MBR, two patterned sectors and range rejection verified
PASS: block demo reaches original blocking keyboard consumer
PASS: timeout failure is diagnosed and channel fails closed
PASS: nodrq failure is diagnosed and channel fails closed
PASS: error failure is diagnosed and channel fails closed
PASS check-block

$ make check-process
i686-elf-gcc -std=c11 -ffreestanding -O0 -g -Wall -Wextra -Werror -fno-pie -fno-stack-protector -fno-asynchronous-unwind-tables -m32 -mno-sse -mno-sse2 -mno-mmx -msoft-float -fno-builtin -D TEST_PROCESS_FAIL -c kernel/main.c -o build/kernel-main-process-fail.o
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main-process-fail.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-process-fail.elf
i686-elf-objcopy -O binary build/kernel-process-fail.elf build/kernel-process-fail.bin
sh tools/kernel-header.sh build/kernel-process-fail 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-process-fail.img
dd if=build/kernel-process-fail-header.bin of=build/mbr-process-fail.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-process-fail.bin of=build/mbr-process-fail.img bs=512 seek=10 conv=notrunc status=none
QEMU='/tmp/build-an-os-tools/bin/qemu-system-i386' QEMU_COMMON='-machine pc-i440fx-7.2 -accel tcg -cpu qemu32 -smp 1 -m 64M -bios /tmp/build-an-os-tools/root2/usr/share/seabios/bios-256k.bin -L /tmp/build-an-os-tools/root2/usr/share/qemu -boot order=c,strict=on -nic none -no-reboot' GDB='/tmp/build-an-os-tools/bin/gdb-multiarch' PAYLOAD_MAX_BYTES='131072' sh tools/check-process.sh
The target architecture is set to "i386".
0x0000fff0 in ?? ()
Hardware assisted breakpoint 1 at 0x10764f: file kernel/task.c, line 1080.

Breakpoint 1, process_bootstrap_observed () at kernel/task.c:1080
1080	{ __asm__ volatile("nop" ::: "memory"); }
PASS: parent blocked inside top-level wait while BADPTR remained zombie and COUNT runnable
Hardware assisted breakpoint 2 at 0x10778d: file kernel/task.c, line 1083.

Breakpoint 2, process_demo_done () at kernel/task.c:1083
1083	{ __asm__ volatile("nop" ::: "memory"); }
PASS: two rounds, bad status retries, PID reuse protection, orphan adoption and complete recovery verified
Hardware assisted breakpoint 3 at 0x10183e: file kernel/keyboard.c, line 116.

Breakpoint 3, keyboard_ready () at kernel/keyboard.c:116
116	void keyboard_ready(void) { __asm__ volatile("" ::: "memory"); }
PASS: process demo reaches original blocking keyboard consumer
The target architecture is set to "i386".
0x0000fff0 in ?? ()
Hardware assisted breakpoint 1 at 0x10778d: file kernel/task.c, line 1083.

Breakpoint 1, process_demo_done () at kernel/task.c:1083
1083	{ __asm__ volatile("nop" ::: "memory"); }
PASS: seven ELF allocation failures plus kernel-stack failure rolled back, then normal spawn recovered
PASS check-process

$ make check-syscall
QEMU='/tmp/build-an-os-tools/bin/qemu-system-i386' QEMU_COMMON='-machine pc-i440fx-7.2 -accel tcg -cpu qemu32 -smp 1 -m 64M -bios /tmp/build-an-os-tools/root2/usr/share/seabios/bios-256k.bin -L /tmp/build-an-os-tools/root2/usr/share/qemu -boot order=c,strict=on -nic none -no-reboot' sh tools/check-syscall.sh
The target architecture is set to "i386".
0x0000fff0 in ?? ()
Hardware assisted breakpoint 1 at 0x108926: file kernel/syscall.c, line 211.

Breakpoint 1, syscall_dispatch (frame=0x13bfb4) at kernel/syscall.c:211
211	    KASSERT((frame->cs & 3) == 3 && frame->vector == 128 && frame->error == 0);
PASS: CPL3 int80 used DPL3 interrupt gate; 76-byte frame, post-INT EIP, GPR and saved IF/DF/CF verified
Hardware assisted breakpoint 2 at 0x106a5a: file kernel/task.c, line 781.

Breakpoint 2, syscall_demo_done () at kernel/task.c:781
781	{ __asm__ volatile("" ::: "memory"); }
PASS: write/yield, copy-to-user and all return paths verified; bad DPL gate isolated; survivor and page recovery verified
Hardware assisted breakpoint 3 at 0x10183e: file kernel/keyboard.c, line 116.

Breakpoint 3, keyboard_ready () at kernel/keyboard.c:116
116	void keyboard_ready(void) { __asm__ volatile("" ::: "memory"); }
PASS: syscall demo reaches original blocking keyboard consumer
PASS check-syscall

$ make check-elf
QEMU='/tmp/build-an-os-tools/bin/qemu-system-i386' QEMU_COMMON='-machine pc-i440fx-7.2 -accel tcg -cpu qemu32 -smp 1 -m 64M -bios /tmp/build-an-os-tools/root2/usr/share/seabios/bios-256k.bin -L /tmp/build-an-os-tools/root2/usr/share/qemu -boot order=c,strict=on -nic none -no-reboot' GDB='/tmp/build-an-os-tools/bin/gdb-multiarch' sh tools/check-elf.sh
The target architecture is set to "i386".
0x0000fff0 in ?? ()
Hardware assisted breakpoint 1 at 0x40000080

Breakpoint 1, 0x40000080 in ?? ()
PASS: dynamic ELF entry reached CPL3 with private CR3, RO code and RW data
Hardware assisted breakpoint 2 at 0x40000091

Breakpoint 2, 0x40000091 in ?? ()
PASS: C entry stack alignment, clear DF, initialized data and 5000-byte BSS verified
Hardware assisted breakpoint 3 at 0x107193: file kernel/task.c, line 950.

Breakpoint 3, elf_demo_done () at kernel/task.c:950
950	{ __asm__ volatile("nop" ::: "memory"); }
PASS: 34 malformed ELF cases, all allocation failures and task-stack rollback recovered
Hardware assisted breakpoint 4 at 0x10183e: file kernel/keyboard.c, line 116.

Breakpoint 4, keyboard_ready () at kernel/keyboard.c:116
116	void keyboard_ready(void) { __asm__ volatile("" ::: "memory"); }
PASS: ELF demo reaches original blocking keyboard consumer
PASS check-elf

$ make check-memory
QEMU='/tmp/build-an-os-tools/bin/qemu-system-i386' QEMU_COMMON='-machine pc-i440fx-7.2 -accel tcg -cpu qemu32 -smp 1 -m 64M -bios /tmp/build-an-os-tools/root2/usr/share/seabios/bios-256k.bin -L /tmp/build-an-os-tools/root2/usr/share/qemu -boot order=c,strict=on -nic none -no-reboot' KERNEL_MEMORY_MAX_BYTES='262144' sh tools/check-memory.sh
The target architecture is set to "i386".
0x0000fff0 in ?? ()
Hardware assisted breakpoint 1 at 0x1023c0: file kernel/memory.c, line 114.

Breakpoint 1, memory_demo_done () at kernel/memory.c:114
114	void memory_demo_done(void) { __asm__ volatile("" : : : "memory"); }
PASS: guest allocation, exhaustion, patterns, invalid free, recovered bitmaps; pages=16067 end=0x11c2c0
Hardware assisted breakpoint 2 at 0x10183e: file kernel/keyboard.c, line 116.

Breakpoint 2, keyboard_ready () at kernel/keyboard.c:116
116	void keyboard_ready(void) { __asm__ volatile("" ::: "memory"); }
PASS: memory demo returns to keyboard_ready
[Inferior 1 (process 1) detached]
PASS check-memory

$ make check-runtime-limit
i686-elf-ld -m elf_i386 --defsym=__kernel_file_max=131072 --defsym=__kernel_memory_max=262144 --defsym=__kernel_forced_end=0x140000 -z noexecstack -T kernel/linker.ld build/kernel-entry.o build/kernel-main.o build/kernel-runtime.o build/kernel-console.o build/kernel-exceptions.o build/kernel-isr.o build/kernel-timer.o build/kernel-keyboard.o build/kernel-memory.o build/kernel-paging.o build/kernel-paging-probes.o build/kernel-heap.o build/kernel-task.o build/kernel-switch.o build/kernel-user.o build/kernel-syscall.o build/kernel-elf.o build/kernel-block.o build/kernel-fat.o build/kernel-file.o build/kernel-user-entry.o build/kernel-day18-elf-blob.o build/kernel-day19-elf-blob.o build/kernel-day22-elf-blob.o -o build/kernel-memory-cap.elf
i686-elf-objcopy -O binary build/kernel-memory-cap.elf build/kernel-memory-cap.bin
sh tools/kernel-header.sh build/kernel-memory-cap 131072 262144 0x334f5342 1
cp build/mbr.img build/mbr-memory-cap.img
dd if=build/kernel-memory-cap-header.bin of=build/mbr-memory-cap.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-memory-cap.bin of=build/mbr-memory-cap.img bs=512 seek=10 conv=notrunc status=none
cp build/kernel.bin build/kernel-file-cap.bin
truncate -s 131072 build/kernel-file-cap.bin
test "$(wc -c < build/kernel-file-cap.bin)" -eq 131072
build/mkpayload build/kernel-file-cap.bin build/kernel-file-cap-header.bin build/kernel-file-cap-badmagic.bin \
	build/kernel-file-cap-oversized.bin build/kernel-file-cap-memory-oversized.bin \
	131072 131072 262144 \
	0x334f5342 131072 0
cp build/mbr.img build/mbr-file-cap.img
dd if=build/kernel-file-cap-header.bin of=build/mbr-file-cap.img bs=512 seek=9 conv=notrunc status=none
dd if=build/kernel-file-cap.bin of=build/mbr-file-cap.img bs=512 seek=10 conv=notrunc status=none
QEMU='/tmp/build-an-os-tools/bin/qemu-system-i386' QEMU_COMMON='-machine pc-i440fx-7.2 -accel tcg -cpu qemu32 -smp 1 -m 64M -bios /tmp/build-an-os-tools/root2/usr/share/seabios/bios-256k.bin -L /tmp/build-an-os-tools/root2/usr/share/qemu -boot order=c,strict=on -nic none -no-reboot' PAYLOAD_MAX_BYTES='131072' KERNEL_MEMORY_MAX_BYTES='262144' sh tools/check-runtime-limit.sh
The target architecture is set to "i386".
0x0000fff0 in ?? ()
Hardware assisted breakpoint 1 at 0x100000

Breakpoint 1, 0x00100000 in _start ()
PASS: stage2 dirtied BSS beyond old 64 KiB runtime limit
Hardware assisted breakpoint 2 at 0x10005b: file kernel/main.c, line 32.

Breakpoint 2, kernel_main (info=0x5000) at kernel/main.c:32
32	    console_init(); /* entry cleared BSS/set stack; UART and VGA precede diagnostics. */
PASS: entry cleared full BSS and exact 256 KiB runtime image entered C
Hardware assisted breakpoint 3 at 0x107193: file kernel/task.c, line 950.

Breakpoint 3, elf_demo_done () at kernel/task.c:950
950	{ __asm__ volatile("nop" ::: "memory"); }
PASS: exact-cap image completed allocator, user, syscall and ELF regressions
The target architecture is set to "i386".
0x0000fff0 in ?? ()
Hardware assisted breakpoint 1 at 0x100000

Breakpoint 1, 0x00100000 in _start ()
PASS: exact 128 KiB file crossed real-mode segments, checksum and protected-mode copy
PASS: oversized file and memory headers rejected before payload copy
PASS check-runtime-limit

$ make check-keyboard
QEMU='/tmp/build-an-os-tools/bin/qemu-system-i386' QEMU_COMMON='-machine pc-i440fx-7.2 -accel tcg -cpu qemu32 -smp 1 -m 64M -bios /tmp/build-an-os-tools/root2/usr/share/seabios/bios-256k.bin -L /tmp/build-an-os-tools/root2/usr/share/qemu -boot order=c,strict=on -nic none -no-reboot' sh tools/check-keyboard.sh
PASS: HMP real IRQ1 editing/Shift/Caps/Pause/PrintScreen, paused-consumer overflow, reset and LINE: ok
PASS check-keyboard

Artifact comparison after the clean rebuild:

kernel.bin      44fa4a4324acc22ef69b8e185e672c3238bf0744b210cd645d4994fcb455d959  cmp PASS
mbr.img         15349fd7449d2260e3df91c93127b3f320fa3f27e6b0e75423cf4e2653fa5573  cmp PASS
day22-user.elf  0fe8e6739c5c5ad32fc3a88e923ef3e6b17cf3ab37ad04b2c799e99f372d0b01  cmp PASS
