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

1
.gitattributes vendored
View File

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

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

BIN
src/kxos-user/fork/fork (Stored with Git LFS) Executable file

Binary file not shown.

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: