 4f294c247f
			
		
	
	
		4f294c247f
		
	
	
	
	
		
			
			This patch mainly copies and modifies files existing in the current libc implementing minix specific functions. To keep consisten with the NetBSD libc, we remove namespace stubs and we use "namespace.h" and weak links.
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| #include <minix/ipcconst.h>
 | |
| #include <machine/asm.h>
 | |
| 
 | |
| 	IPCVEC = 33	/* ipc trap to kernel  */
 | |
| 	KERVEC = 32	/* syscall trap to kernel */
 | |
| 
 | |
| 	SRC_DST = 8	/* source/ destination process  */
 | |
| 	MESSAGE = 12	/* message pointer  */
 | |
| 	STATUS = 16	/* status pointer  */
 | |
| 
 | |
| /**========================================================================* */
 | |
| /*                           IPC assembly routines			  * */
 | |
| /**========================================================================* */
 | |
| /* all message passing routines save ebx, but destroy eax and ecx. */
 | |
| ENTRY(_send)
 | |
| 	push	%ebp
 | |
| 	movl	%esp, %ebp
 | |
| 	push	%ebx
 | |
| 	movl	SRC_DST(%ebp), %eax	/* eax = dest-src */
 | |
| 	movl	MESSAGE(%ebp), %ebx	/* ebx = message pointer */
 | |
| 	movl	$SEND, %ecx	/* _send(dest, ptr) */
 | |
| 	int	$IPCVEC	/* trap to the kernel */
 | |
| 	pop	%ebx
 | |
| 	pop	%ebp
 | |
| 	ret
 | |
| 
 | |
| ENTRY(_receive)
 | |
| 	push	%ebp
 | |
| 	movl	%esp, %ebp
 | |
| 	push	%ebx
 | |
| 	movl	SRC_DST(%ebp), %eax	/* eax = dest-src */
 | |
| 	movl	MESSAGE(%ebp), %ebx	/* ebx = message pointer */
 | |
| 	movl	$RECEIVE, %ecx	/* _receive(src, ptr) */
 | |
| 	int	$IPCVEC	/* trap to the kernel */
 | |
| 	movl	STATUS(%ebp), %ecx	/* ecx = status pointer */
 | |
| 	movl	%ebx, (%ecx)
 | |
| 	pop	%ebx
 | |
| 	pop	%ebp
 | |
| 	ret
 | |
| 
 | |
| ENTRY(_sendrec)
 | |
| 	push	%ebp
 | |
| 	movl	%esp, %ebp
 | |
| 	push	%ebx
 | |
| 	movl	SRC_DST(%ebp), %eax	/* eax = dest-src */
 | |
| 	movl	MESSAGE(%ebp), %ebx	/* ebx = message pointer */
 | |
| 	movl	$SENDREC, %ecx	/* _sendrec(srcdest, ptr) */
 | |
| 	int	$IPCVEC	/* trap to the kernel */
 | |
| 	pop	%ebx
 | |
| 	pop	%ebp
 | |
| 	ret
 | |
| 
 | |
| ENTRY(_notify)
 | |
| 	push	%ebp
 | |
| 	movl	%esp, %ebp
 | |
| 	push	%ebx
 | |
| 	movl	SRC_DST(%ebp), %eax	/* eax = destination  */
 | |
| 	movl	$NOTIFY, %ecx	/* _notify(srcdst) */
 | |
| 	int	$IPCVEC	/* trap to the kernel */
 | |
| 	pop	%ebx
 | |
| 	pop	%ebp
 | |
| 	ret
 | |
| 
 | |
| ENTRY(_sendnb)
 | |
| 	push	%ebp
 | |
| 	movl	%esp, %ebp
 | |
| 	push	%ebx
 | |
| 	movl	SRC_DST(%ebp), %eax	/* eax = dest-src */
 | |
| 	movl	MESSAGE(%ebp), %ebx	/* ebx = message pointer */
 | |
| 	movl	$SENDNB, %ecx	/* _sendnb(dest, ptr) */
 | |
| 	int	$IPCVEC	/* trap to the kernel */
 | |
| 	pop	%ebx
 | |
| 	pop	%ebp
 | |
| 	ret
 | |
| 
 | |
| ENTRY(_do_kernel_call)
 | |
| 	/* pass the message pointer to kernel in the %eax register */
 | |
| 	movl	4(%esp), %eax
 | |
| 	int	$KERVEC
 | |
| 	ret
 |