mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-30 15:23:39 +00:00
add user-mode fork test codes with git lfs
This commit is contained in:
7
src/kxos-user/fork/Makefile
Normal file
7
src/kxos-user/fork/Makefile
Normal 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
3
src/kxos-user/fork/fork
Executable 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
52
src/kxos-user/fork/fork.s
Normal 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:
|
Reference in New Issue
Block a user