add user-mode fork test codes with git lfs

This commit is contained in:
jiangjianfeng
2022-09-06 11:52:49 +08:00
parent 775025ef5e
commit 71b8659001
4 changed files with 63 additions and 0 deletions

View File

@ -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

3
src/kxos-user/fork/fork Executable file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1ad189cc084511d777ec2bcb211ca7cdbfb55f00320953da71a6a37f46404dd6
size 9488

52
src/kxos-user/fork/fork.s Normal file
View File

@ -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: