forked from Bananymous/banan-os
				
			
		
			
				
	
	
		
			79 lines
		
	
	
		
			1021 B
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1021 B
		
	
	
	
		
			ArmAsm
		
	
	
	
| // arguments in RAX, RBX, RCX, RDX, RSI, RDI
 | |
| // System V ABI: RDI, RSI, RDX, RCX, R8, R9
 | |
| .global asm_syscall_handler
 | |
| asm_syscall_handler:
 | |
| 	pushq %rbx
 | |
| 	pushq %rcx
 | |
| 	pushq %rdx
 | |
| 	pushq %rdi
 | |
| 	pushq %rsi
 | |
| 	pushq %rbp
 | |
| 	pushq %r8
 | |
| 	pushq %r9
 | |
| 	pushq %r10
 | |
| 	pushq %r11
 | |
| 	pushq %r12
 | |
| 	pushq %r13
 | |
| 	pushq %r14
 | |
| 	pushq %r15
 | |
| 	cld
 | |
| 
 | |
| 	movq %rsi, %r8
 | |
| 	movq %rdi, %r9
 | |
| 	movq %rax, %rdi
 | |
| 	movq %rbx, %rsi
 | |
| 	xchgq %rcx, %rdx
 | |
| 	leaq 112(%rsp), %rbx
 | |
| 	pushq %rbx
 | |
| 	call cpp_syscall_handler
 | |
| 	addq $8, %rsp
 | |
| 
 | |
| 	popq %r15
 | |
| 	popq %r14
 | |
| 	popq %r13
 | |
| 	popq %r12
 | |
| 	popq %r11
 | |
| 	popq %r10
 | |
| 	popq %r9
 | |
| 	popq %r8
 | |
| 	popq %rbp
 | |
| 	popq %rsi
 | |
| 	popq %rdi
 | |
| 	popq %rdx
 | |
| 	popq %rcx
 | |
| 	popq %rbx
 | |
| 	iretq
 | |
| 
 | |
| 
 | |
| .global sys_fork_trampoline
 | |
| sys_fork_trampoline:
 | |
| 	pushq %rbx
 | |
| 	pushq %rbp
 | |
| 	pushq %r12
 | |
| 	pushq %r13
 | |
| 	pushq %r14
 | |
| 	pushq %r15
 | |
| 
 | |
| 	call read_ip
 | |
| 	testq %rax, %rax
 | |
| 	je .reload_stack
 | |
| 
 | |
| 	movq %rax, %rsi
 | |
| 	movq %rsp, %rdi
 | |
| 	call sys_fork
 | |
| 
 | |
|  .done:
 | |
| 	popq %r15
 | |
| 	popq %r14
 | |
| 	popq %r13
 | |
| 	popq %r12
 | |
| 	popq %rbp
 | |
| 	popq %rbx
 | |
| 	ret
 | |
| 
 | |
|  .reload_stack:
 | |
| 	call get_thread_start_sp
 | |
| 	movq %rax, %rsp
 | |
| 	xorq %rax, %rax
 | |
| 	jmp .done
 |