]> Zhao Yanbai Git Server - minix.git/commitdiff
Library progress
authorJorrit Herder <jnherder@minix3.org>
Fri, 10 Mar 2006 16:16:21 +0000 (16:16 +0000)
committerJorrit Herder <jnherder@minix3.org>
Fri, 10 Mar 2006 16:16:21 +0000 (16:16 +0000)
lib/i386/rts/Makefile.in
lib/i386/rts/_ipc.s
lib/i386/rts/_ipcnew.s [new file with mode: 0755]
lib/other/Makefile.in
lib/other/_getsigset.c [new file with mode: 0644]
lib/syscall/Makefile.in

index 979dc8faa05beed2d50294afa4cce18f2a22a039..fbe62872cc30ee4c8d41f01eca73db787912685a 100644 (file)
@@ -7,6 +7,7 @@ LIBRARIES=libc
 libc_FILES=" \
        __sigreturn.s \
        _ipc.s \
+       _ipcnew.s \
        brksize.s"
        
 STARTFILES="\
index 4d9191a08661d782efc59ab176a61adf440da34b..80a32bcd9d096c2e79448c83dbf8dc57121989a0 100755 (executable)
@@ -1,5 +1,5 @@
 .sect .text; .sect .rom; .sect .data; .sect .bss
-.define __echo, __notify, __send, __nb_send, __receive, __nb_receive, __sendrec 
+.define __echo, __notify, __send, __receive, __sendrec 
 
 ! See src/kernel/ipc.h for C definitions
 SEND = 1
@@ -7,19 +7,17 @@ RECEIVE = 2
 SENDREC = 3 
 NOTIFY = 4
 ECHO = 8
-NB_SEND = 1 + 16               ! flags 0x10 to prevent blocking 
-NB_RECEIVE = 2 + 16            ! flags 0x10 to prevent blocking 
 SYSVEC = 33                    ! trap to kernel 
 
 SRC_DST = 8                    ! source/ destination process 
-ECHO_MESS = 8                  ! doesn't have SRC_DST 
+ECHO_MESS = 8                  ! echo doesn't have SRC_DST 
 MESSAGE = 12                   ! message pointer 
 
 !*========================================================================*
 !                           IPC assembly routines                        *
 !*========================================================================*
 ! all message passing routines save ebp, but destroy eax and ecx.
-.define __echo, __notify, __send, __nb_send, __receive, __nb_receive, __sendrec 
+.define __echo, __notify, __send, __receive, __sendrec 
 .sect .text
 __send:
        push    ebp
@@ -33,18 +31,6 @@ __send:
        pop     ebp
        ret
 
-__nb_send:
-       push    ebp
-       mov     ebp, esp
-       push    ebx
-       mov     eax, SRC_DST(ebp)       ! eax = dest-src
-       mov     ebx, MESSAGE(ebp)       ! ebx = message pointer
-       mov     ecx, NB_SEND            ! _nb_send(dest, ptr)
-       int     SYSVEC                  ! trap to the kernel
-       pop     ebx
-       pop     ebp
-       ret
-
 __receive:
        push    ebp
        mov     ebp, esp
@@ -57,18 +43,6 @@ __receive:
        pop     ebp
        ret
 
-__nb_receive:
-       push    ebp
-       mov     ebp, esp
-       push    ebx
-       mov     eax, SRC_DST(ebp)       ! eax = dest-src
-       mov     ebx, MESSAGE(ebp)       ! ebx = message pointer
-       mov     ecx, NB_RECEIVE         ! _nb_receive(src, ptr)
-       int     SYSVEC                  ! trap to the kernel
-       pop     ebx
-       pop     ebp
-       ret
-
 __sendrec:
        push    ebp
        mov     ebp, esp
diff --git a/lib/i386/rts/_ipcnew.s b/lib/i386/rts/_ipcnew.s
new file mode 100755 (executable)
index 0000000..33d89a4
--- /dev/null
@@ -0,0 +1,75 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.define __ipc_request, __ipc_reply, __ipc_notify, __ipc_receive
+
+! See src/kernel/ipc.h for C definitions.
+IPC_REQUEST = 16               ! each gets a distinct bit
+IPC_REPLY = 32
+IPC_NOTIFY = 64
+IPC_RECEIVE = 128
+
+SYSVEC = 33                    ! trap to kernel 
+
+! Offsets of arguments relative to stack pointer.
+SRC_DST = 8                    ! source/ destination process 
+SEND_MSG = 12                  ! message pointer for sending 
+EVENT_SET = 12                 ! notification event set 
+RECV_MSG = 16                  ! message pointer for receiving 
+
+
+!*========================================================================*
+!                           IPC assembly routines                        *
+!*========================================================================*
+! all message passing routines save ebp, but destroy eax, ecx, and edx.
+.define __ipc_request, __ipc_reply, __ipc_notify, __ipc_receive
+.sect .text
+
+__ipc_request:
+       push    ebp
+       mov     ebp, esp
+       push    ebx
+       mov     eax, SRC_DST(ebp)       ! eax = destination
+       mov     ebx, SEND_MSG(ebp)      ! ebx = message pointer
+       mov     ecx, IPC_REQUEST        ! _ipc_request(dst, ptr)
+       int     SYSVEC                  ! trap to the kernel
+       pop     ebx
+       pop     ebp
+       ret
+
+__ipc_reply:
+       push    ebp
+       mov     ebp, esp
+       push    ebx
+       mov     eax, SRC_DST(ebp)       ! eax = destination
+       mov     ebx, SEND_MSG(ebp)      ! ebx = message pointer
+       mov     ecx, IPC_REPLY          ! _ipc_reply(dst, ptr)
+       int     SYSVEC                  ! trap to the kernel
+       pop     ebx
+       pop     ebp
+       ret
+
+__ipc_receive:
+       push    ebp
+       mov     ebp, esp
+       push    ebx
+       mov     eax, SRC_DST(ebp)       ! eax = source
+       mov     edx, EVENT_SET(ebp)     ! ebx = event set
+       mov     ebx, RCV_MSG(ebp)       ! ebx = message pointer
+       mov     ecx, IPC_RECEIVE        ! _ipc_receive(src, events, ptr)
+       int     SYSVEC                  ! trap to the kernel
+       pop     ebx
+       pop     ebp
+       ret
+
+__ipc_notify:
+       push    ebp
+       mov     ebp, esp
+       push    ebx
+       mov     eax, SRC_DST(ebp)       ! ebx = destination 
+       mov     edx, EVENT_SET(ebp)     ! edx = event set 
+       mov     ecx, IPC_NOTIFY         ! _ipc_notify(dst, events)
+       int     SYSVEC                  ! trap to the kernel
+       pop     ebx
+       pop     ebp
+       ret
+
+
index 5839c361e31b5afbfa911f27ec5378fc2a32e03f..2fbc0467bd524a86c093c340a7095261a4d69ec3 100644 (file)
@@ -11,6 +11,7 @@ libc_FILES=" \
        _findproc.c \
        _freemem.c \
        _getnpid.c \
+       _getsigset.c \
        _getnprocnr.c \
        _getpprocnr.c \
        _getprocnr.c \
diff --git a/lib/other/_getsigset.c b/lib/other/_getsigset.c
new file mode 100644 (file)
index 0000000..74db36a
--- /dev/null
@@ -0,0 +1,15 @@
+#include <lib.h>
+#define getsigset      _getsigset
+#include <unistd.h>
+
+
+PUBLIC int getsigset(sp)
+sigset_t *sp;                          /* where to put it */
+{
+  message m;
+  m.m2_i1 = SELF;                      /* request own signal set */
+  if (_syscall(PM_PROC_NR, PROCSTAT, &m) < 0) return(-1);
+  *sp = m.m2_l1;
+  return(0);
+}
+
index ad9de23f274c4706e3de0cb0b5c525656c9d3369..932c6f5f90c476cc796124a51da04b12bf0b1a38 100644 (file)
@@ -47,6 +47,7 @@ libc_FILES=" \
        getppid.s \
        getpprocnr.s \
        getprocnr.s \
+       getsigset.s \
        getsysinfo.s \
        getuid.s \
        ioctl.s \