add user-mode fork test codes with git lfs
This commit is contained in:
parent
775025ef5e
commit
71b8659001
|
|
@ -1 +1,2 @@
|
|||
src/kxos-user/hello_world/hello_world filter=lfs diff=lfs merge=lfs -text
|
||||
src/kxos-user/fork/fork filter=lfs diff=lfs merge=lfs -text
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
.PHONY: build clean run
|
||||
build: hello_world.s
|
||||
@gcc -static -nostdlib fork.s -o fork
|
||||
clean:
|
||||
@rm fork
|
||||
run: build
|
||||
@./fork
|
||||
Binary file not shown.
|
|
@ -0,0 +1,52 @@
|
|||
.global _start
|
||||
|
||||
.section .text
|
||||
_start:
|
||||
call print_hello_world
|
||||
mov $57, %rax # syscall number of fork
|
||||
syscall
|
||||
|
||||
cmp $0, %rax
|
||||
je _child # child process
|
||||
jmp _parent # parent process
|
||||
_parent:
|
||||
call print_parent_message
|
||||
call exit
|
||||
_child:
|
||||
call print_child_message
|
||||
call exit
|
||||
exit:
|
||||
mov $60, %rax # syscall number of exit
|
||||
mov $0, %rdi # exit code
|
||||
syscall
|
||||
print_hello_world:
|
||||
mov $message, %rsi # address of message
|
||||
mov $message_end, %rdx
|
||||
sub %rsi, %rdx # calculate message len
|
||||
jmp _print_message
|
||||
print_parent_message:
|
||||
mov $message_parent, %rsi # address of message
|
||||
mov $message_parent_end, %rdx
|
||||
sub %rsi, %rdx # calculate message len
|
||||
jmp _print_message
|
||||
print_child_message:
|
||||
mov $message_child, %rsi # address of message
|
||||
mov $message_child_end, %rdx
|
||||
sub %rsi, %rdx # calculate message len
|
||||
jmp _print_message
|
||||
# never directly call _print_message
|
||||
_print_message:
|
||||
mov $1, %rax # syscall number of write
|
||||
mov $1, %rdi # stdout
|
||||
syscall
|
||||
ret
|
||||
.section .rodata
|
||||
message:
|
||||
.ascii "Hello, world\n"
|
||||
message_end:
|
||||
message_parent:
|
||||
.ascii "Hello world from parent\n"
|
||||
message_parent_end:
|
||||
message_child:
|
||||
.ascii "Hello world from child\n"
|
||||
message_child_end:
|
||||
Loading…
Reference in New Issue