kern

annotate src/test_proc.S @ 76:0fe6eef16335

holy fuck, copy_on_write didn't actually do the copy!!!!
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 05 Nov 2011 04:53:46 +0200
parents c7bd6ec7b946
children
rev   line source
nuclear@51 1 #define ASM
nuclear@51 2 #include <syscall.h>
nuclear@44 3
nuclear@44 4 .text
nuclear@44 5 .globl test_proc
nuclear@44 6 test_proc:
nuclear@57 7 /* fork another process */
nuclear@57 8 movl $SYS_FORK, %eax
nuclear@57 9 int $SYSCALL_INT
nuclear@57 10
nuclear@71 11 /* test copy-on-write by pushing the pid to the stack
nuclear@71 12 * then use this value from the stack times 2 as a sleep
nuclear@71 13 * interval in the loop.
nuclear@71 14 */
nuclear@71 15 movl $SYS_GETPID, %eax
nuclear@71 16 int $SYSCALL_INT
nuclear@69 17 push %eax
nuclear@69 18
nuclear@75 19 /* this will count the iterations */
nuclear@75 20 xor %ecx, %ecx
nuclear@75 21
nuclear@57 22 infloop:
nuclear@44 23 /* --- print a message --- */
nuclear@44 24 movl $SYS_HELLO, %eax
nuclear@44 25 int $SYSCALL_INT
nuclear@44 26
nuclear@57 27
nuclear@60 28 /* --- sleep for (pid * 2) seconds ---
nuclear@71 29 * grab the pid from the stack and shift it left to
nuclear@71 30 * multiply the pid by 2. Then use that as a sleep interval
nuclear@71 31 * in seconds.
nuclear@60 32 */
nuclear@71 33 movl (%esp), %ebx
nuclear@71 34 shl $1, %ebx
nuclear@44 35 movl $SYS_SLEEP, %eax
nuclear@44 36 int $SYSCALL_INT
nuclear@44 37
nuclear@75 38 inc %ecx
nuclear@75 39
nuclear@75 40 /* let process 2 quit after 2 iterations */
nuclear@75 41 cmpl $2, (%esp)
nuclear@75 42 jne 1f
nuclear@75 43 cmpl $2, %ecx
nuclear@75 44 je exit_proc
nuclear@75 45
nuclear@75 46 1:
nuclear@57 47 jmp infloop
nuclear@44 48
nuclear@75 49 exit_proc:
nuclear@75 50 movl $SYS_EXIT, %eax
nuclear@75 51 movl $0, %ebx
nuclear@75 52 int $SYSCALL_INT
nuclear@75 53
nuclear@75 54 /* shouldn't reach this, trap otherwise */
nuclear@75 55 int $3
nuclear@75 56
nuclear@44 57 .globl test_proc_end
nuclear@44 58 test_proc_end: