Use syscall/__systemcall instead of *_SYSCALL macros in certain places
authorDavid Bartley <dtbartle@maltodextrin.csclub.uwaterloo.ca>
Wed, 27 Aug 2008 15:39:17 +0000 (15:39 +0000)
committerDavid Bartley <dtbartle@maltodextrin.csclub.uwaterloo.ca>
Wed, 27 Aug 2008 15:39:17 +0000 (15:39 +0000)
nptl/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/Makefile
nptl/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/i386/tls.h
nptl/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/lowlevellock.h
nptl/sysdeps/unix/sysv/solaris2/kopensolaris-gnu/pthreadP.h
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/Makefile
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/i386/syscall.S
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/not-cancel.h
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/sys/syscall.h
sysdeps/unix/sysv/solaris2/kopensolaris-gnu/syscalls.list

index 84cad5b..d8dab14 100644 (file)
@@ -7,8 +7,7 @@ libpthread-sysdep_routines += pt-fork fastlock clock_gettime \
     sys_lwp_mutex_register sys_lwp_cond_wait sys_lwp_cond_signal \
     sys_lwp_cond_broadcast sys_lwp_sema_post sys_lwp_sema_trywait \
     sys_lwp_sema_timedwait sys_lwp_create sys_lwp_wait sys_lwp_exit \
-    sys_lwp_kill sys_lwp_suspend sys_lwp_continue sys_write sys_lwp_sigmask
-libpthread-routines += sys_lwp_self
+    sys_lwp_kill sys_lwp_suspend sys_lwp_continue sys_lwp_sigmask
 
 # solaris threads/synch
 libpthread-routines += mutex_init mutex_lock mutex_trylock mutex_unlock \
@@ -24,7 +23,7 @@ endif
 
 ifeq ($(subdir),posix)
 CFLAGS-fork.c = -D_IO_MTSAFE_IO
-sysdep_routines += sys_lwp_self sys_forkx
+sysdep_routines += sys_forkx
 endif
 
 # Needed in both the signal and nptl subdir.
index 6021c51..d36daea 100644 (file)
@@ -34,7 +34,7 @@
 
 /* OpenSolaris has lwp_private in order to set the thread data.  */
 # include <sys/lwp.h>
-# include <inline-syscall.h>
+# include <sys/syscall.h>
 
 # undef TLS_INIT_TP
 # define TLS_INIT_TP(thrdescr, secondcall) \
@@ -42,6 +42,7 @@
      tcbhead_t *_head = _thrdescr;                                           \
      union user_desc_init _segdescr;                                         \
      int _result;                                                            \
+     sysret_t ret;                                          \
                                                                              \
      _head->tcb = _thrdescr;                                                 \
      /* For now the thread descriptor is at the same address.  */            \
      /* New syscall handling support.  */                                    \
      INIT_SYSINFO;                                                           \
                                                                     \
-     DECLARE_INLINE_SYSCALL (int, lwp_private, int cmd, int which,       \
-       uintptr_t base);                \
-     (INLINE_SYSCALL (lwp_private, 3, _LWP_SETPRIVATE, _LWP_GSBASE,       \
-       (uintptr_t)_thrdescr) == -1)            \
+     (__systemcall (&ret, SYS_lwp_private, _LWP_SETPRIVATE, _LWP_GSBASE,       \
+       (uintptr_t)_thrdescr) != 0)            \
        ? "lwp_private failed when setting up thread-local storage\n" : NULL; \
   })
 
index 237bdef..54a152c 100644 (file)
@@ -11,7 +11,7 @@
 
 #include <pthread.h>
 #include <stddef.h>
-#include <inline-syscall.h>
+#include <sys/syscall.h>
 #include <bits/libc-lock.h>
 
 #define lll_init(futex) \
 #define lll_futex_wake(futex, nr, private) \
     sched_yield ()
 
-DECLARE_INLINE_SYSCALL (int, lwp_wait, pthread_t tid, pthread_t *departed);
-
 /* XXX: We really shouldn't assume the existence of result.  */
 #define lll_wait_tid(tid) \
-    do {                                                        \
-      result = INLINE_SYSCALL (lwp_wait, 2, (tid), NULL);       \
+    do {                                                            \
+      sysret_t __ret;                                               \
+      result = __systemcall (&__ret, SYS_lwp_wait, (tid), NULL);    \
     } while (result == EINTR);
 
-DECLARE_INLINE_SYSCALL (int, lwp_kill, pthread_t tid, int sig);
-
 #define lll_tryjoin(tid) \
-    (INLINE_SYSCALL (lwp_kill, 2, (tid), 0) != ESRCH)
+    ({sysret_t __ret;                                               \
+    __systemcall (&__ret, SYS_lwp_kill, (tid), 0) != ESRCH;})
 
 #endif /* _LOWLEVELLOCK_H */
index a18dc46..fbf42af 100644 (file)
@@ -61,6 +61,7 @@
     (tv)->tv_nsec < 0 || (tv)->tv_nsec >= 1000000000))
 
 #include <sys/types.h>
+#include <sys/syscall.h>
 #include <signal.h>
 #include <unistd.h>
 #include <errno.h>
 #include <synch_priv.h>
 #include <synch.h>
 
-DECLARE_INLINE_SYSCALL (pthread_t, lwp_self, void);
-DECLARE_INLINE_SYSCALL (int, lwp_kill, pthread_t lwpid, int sig);
-
 /* These are the result of the macro expansion of INTERNAL_SYSCALL.  */
 
 /* XXX: These are really gross and should die.  */
 
 static inline int __internal_kill_1 (int *errval, int sig)
 {
-  int saved_errno = errno;
-  int result = kill (THREAD_SELF->pid, sig);
-  if (result != 0)
-    *errval = errno;
-  __set_errno (saved_errno);
-  return result;
+  sysret_t ret;
+  *errval = __systemcall (&ret, SYS_kill, sig);
+  return ret.sys_rval1;
 }
 
 static inline pthread_t __internal_set_tid_address_1 (int *errval, pthread_t *tid)
 {
-  return INLINE_SYSCALL (lwp_self, 0);
+  sysret_t ret;
+  *errval = __systemcall (&ret, SYS_lwp_self);
+  return *tid = ret.sys_rval1;
 }
 
 static inline int __internal_rt_sigprocmask_4 (int *errval, int how,
@@ -104,38 +101,31 @@ static inline int __internal_rt_sigprocmask_4 (int *errval, int how,
 static inline int __internal_write_3 (int *errval, int fd, const void *buf,
     size_t count)
 {
-  int saved_errno = errno;
-  int result = write (fd, buf, count);
-  if (result != 0)
-    *errval = errno;
-  __set_errno (saved_errno);
-  return result;
+  sysret_t ret;
+  *errval = __systemcall (&ret, SYS_write, fd, buf, count);
+  return ret.sys_rval1;
 }
 
 static inline int __internal_tkill_2 (int *errval, pthread_t tid, int sig)
 {
-  return *errval = INLINE_SYSCALL (lwp_kill, 2, tid, sig);
+  sysret_t ret;
+  *errval = __systemcall (&ret, SYS_lwp_kill, tid, sig);
+  return ret.sys_rval1;
 }
 
 static inline int __internal_pause_1 (int *errval, int unused)
 {
-  int saved_errno = errno;
-  int result = pause ();
-  if (result != 0)
-    *errval = errno;
-  __set_errno (saved_errno);
-  return result;
+  sysret_t ret;
+  *errval = __systemcall (&ret, SYS_pause);
+  return ret.sys_rval1;
 }
 
 static inline int __internal_nanosleep_2 (int *errval,
     const struct timespec *req, struct timespec *rem)
 {
-  int saved_errno = errno;
-  int result = nanosleep (req, rem);
-  if (result != 0)
-    *errval = errno;
-  __set_errno (saved_errno);
-  return result;
+  sysret_t ret;
+  *errval = __systemcall (&ret, SYS_nanosleep, req, rem);
+  return ret.sys_rval1;
 }
 
 static inline int __internal_sched_get_priority_min_1 (int *errval, int policy)
index 291f7ca..1febb89 100644 (file)
@@ -8,19 +8,21 @@ ifeq ($(subdir),io)
 sysdep_routines += sys_open sys_open64 sys_openat sys_openat64 \
     sys_fstat sys_fstat64 sys_fstatat sys_fstatat64 sys_lstat \
     sys_lstat64 sys_stat sys_stat64 sys_sendfilev sys_sendfilev64 \
-    sys_pollsys sys_getcwd sys_read sys_write sys_pipe sys_close \
-    sys_close_nc_ns sys_chdir sys_fchdir
+    sys_pollsys sys_getcwd sys_pipe
 endif
 ifeq ($(subdir),misc)
 sysdep_routines +=  gethrtime mount umount umount2 systeminfo resolvepath \
     getpagesizes memcntl meminfo uadmin getpflags setpflags issetugid ucred \
     priv processor_bind processor_info p_online pset_create pset_destroy \
     pset_assign pset_info pset_bind pset_getloadavg pset_list pset_setattr \
-    pset_getattr swapctl getustack setustack gethrvtime
+    pset_getattr swapctl getustack setustack gethrvtime uucopy uucopystr \
+    zone_add_datalink zone_boot zone_check_datalink zone_destroy zone_enter \
+    zone_getattr zone_list zone_list_datalink zone_remove_datalink \
+    zone_setattr zone_shutdown zone_version
 sysdep_routines += sys_fdsync sys_sysconfig sys_brk sys_fcntl sys_utssys \
-    sys_writev sys_writev_nc_ns sys_lwp_private sys_uname sys_getloadavg \
-    sys_utimes sys_getpeerucred sys_ucred_get sys_privsys sys_syslabeling \
-    sys_putmsg sys_putpmsg sys_meminfo sys_pset_getloadavg
+    sys_lwp_private sys_uname sys_getloadavg sys_utimes sys_getpeerucred \
+    sys_ucred_get sys_privsys sys_syslabeling sys_putmsg sys_putpmsg \
+    sys_meminfo sys_pset_getloadavg sys_zone_lookup
 sysdep_headers += sys/feature_tests.h sys/lwp.h sys/mount.h sys/cred.h \
     sys/systeminfo.h sys/uadmin.h sys/utssys.h sys/fstyp.h sys/fsid.h \
     sys/priocntl.h sys/procset.h sys/ptyvar.h sys/stream.h sys/synch.h \
@@ -28,7 +30,8 @@ sysdep_headers += sys/feature_tests.h sys/lwp.h sys/mount.h sys/cred.h \
        sys/ptms.h sys/stack.h sys/regset.h sys/fault.h sys/processor.h \
     sys/pset.h sys/priv.h sys/acl.h sys/procfs.h sys/reg.h sys/bufmod.h \
     sys/types32.h sys/task.h sys/isa_defs.h sys/door.h sys/corectl.h \
-    sys/elf.h sys/rctl.h sys/task.h sys/zone.h
+    sys/elf.h sys/rctl.h sys/task.h sys/zone.h sys/refstr.h sys/refstr_impl.h \
+    sys/time_impl.h sys/mutex.h
 sysdep_headers += ucred.h priv.h bits/regset.h project.h proc_service.h \
     door.h rtld_db.h zone.h project.h
 endif
@@ -36,7 +39,7 @@ ifeq ($(subdir),dirent)
 sysdep_routines += sys_getdents sys_getdents64
 endif
 ifeq ($(subdir),posix)
-sysdep_routines += sys_nanosleep sys_pause exit-thread sched_priv
+sysdep_routines += exit-thread sched_priv
 endif
 ifeq ($(subdir),resource)
 sysdep_routines += priocntl getvmusage
@@ -68,15 +71,8 @@ ifeq ($(subdir),elf)
 sysdep-rtld-routines += sys_sysconfig
 endif
 
-#
-# some files inclue getaddrinfo.c directly, which uses close_not_cancel_nc_ns
-#
-ifeq ($(subdir),nscd)
-nscd-modules += sys_close_nc_ns
-endif
-
 ifeq ($(subdir),nptl)
 libpthread-sysdep_routines += sys_fcntl sys_send sys_sendmsg sys_sendto \
     sys_accept sys_connect sys_recvmsg sys_fdsync sys_open sys_open64 \
-    sys_close_nc_ns sys_sigaction sys_priocntlsys sched_priv priocntl
+    sys_sigaction sys_priocntlsys sched_priv priocntl syscall
 endif
index af0cfd4..0ac6c9a 100644 (file)
 
          .text;
 ENTRY (__syscall)
-       popl %ecx               /* Pop return address into %ecx.  */
+       popl %ecx       /* Pop return address into %ecx.  */
+       popl %eax       /* Pop syscall number into %eax. */
+       pushl %ecx      /* Push back return adderss.  */
        cfi_adjust_cfa_offset (-4)
-       movl 0(%esp), %eax      /* Load syscall number into %eax. */
-       int $0x91               /* Do the system call.  */
-       pushl %ecx              /* Push back return address.  */
+       int $0x91       /* Do the system call.  */
+       pushl %ecx      /* Push back return address.  */
        cfi_adjust_cfa_offset (4)
        jb SYSCALL_ERROR_LABEL; /* Jump to error handler if error.  */
 
@@ -32,3 +33,26 @@ L(pseudo_end):
        ret                     /* Return to caller.  */
 PSEUDO_END (__syscall)
 weak_alias (__syscall, syscall)
+
+         .text;
+ENTRY (__systemcall)
+       popl %edx               /* Pop return address into %edx.  */
+       popl %ecx               /* Pop sysret_t into %ecx.  */
+       popl %eax               /* Load syscall number into %eax.  */
+       pushl %edx              /* Push return address onto stack.  */
+       cfi_adjust_cfa_offset (-8)
+       int $0x91               /* Do the system call.  */
+       pushl %ecx              /* Restore sysret_t on stack.  */
+       movl 4(%esp), %edx      /* Save return address into %edx.  */
+       pushl %edx              /* Restore return address on stack.  */
+       cfi_adjust_cfa_offset (8)
+       jb 1    /* Jump to error handler if error.  */
+       movl %eax, 0(%ecx)      /* Set first 4 bytes of sysret_t.  */
+       movl %edx, 4(%ecx)      /* Set second 4 bytes of sysret_t.  */
+       xorl %eax, %eax         /* Set return to 0.  */
+       ret
+1:
+       orl $-1, 0(%ecx)        /* Set first 4 bytes of sysret_t.  */
+       orl $-1, 4(%ecx)        /* Set second 4 bytes of sysret_t.  */
+       ret
+PSEUDO_END (__syscall)
index 5bcdf56..6776ca8 100644 (file)
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#include <inline-syscall.h>
+#include <sys/syscall.h>
 #include <sys/types.h>
 
-DECLARE_INLINE_SYSCALL (int, close, int fd);
-DECLARE_INLINE_SYSCALL (int, close_nc_ns, int fd);
-DECLARE_INLINE_SYSCALL (ssize_t, read, int fd, void *buf, size_t nbytes);
-DECLARE_INLINE_SYSCALL (ssize_t, write, int fd, const void *buf,
-    size_t nbytes);
-DECLARE_INLINE_SYSCALL (ssize_t, writev_nc_ns, int fd,
-    const struct iovec *vector, int count);
-DECLARE_INLINE_SYSCALL (int, pause, void);
-DECLARE_INLINE_SYSCALL (int, nanosleep, const struct timespec *req,
-    struct timespec *rem);
-DECLARE_INLINE_SYSCALL (int, sigsuspend, const sigset_t *mask);
-
 extern int open_not_cancel(const char *name, int flags, mode_t mode);
 #define open_not_cancel_2(name, flags) \
     open_not_cancel((name), (flags), 0)
@@ -52,31 +40,33 @@ extern int openat64_not_cancel(int dirfd, const char *name,
     openat64_not_cancel((fd), (name), (flags), 0)
 
 #define close_not_cancel(fd) \
-    INLINE_SYSCALL (close, 1, (fd))
+    syscall (SYS_close, fd)
 #define close_not_cancel_no_status(fd) \
-    (void)({ INLINE_SYSCALL (close_nc_ns, 1, (fd)); })
+    ({sysret_t __ret; \
+    (void)__systemcall (&__ret, SYS_close, (fd));})
 
 #define read_not_cancel(fd, buf, n) \
-    INLINE_SYSCALL (read, 3, (fd), (buf), (n))
+    syscall (SYS_read, (fd), (buf), (n))
 #define write_not_cancel(fd, buf, n) \
-    INLINE_SYSCALL (write, 3, (fd), (buf), (n))
+    syscall (SYS_write, (fd), (buf), (n))
 
 #define writev_not_cancel_no_status(fd, iov, n) \
-    (void)({ INLINE_SYSCALL (writev_nc_ns, 3, (fd), (iov), (n)); })
+    ({sysret_t __ret; \
+    (void)__systemcall (&__ret, SYS_writev, (fd), (iov), (n));})
 
 extern int __fcntl_not_cancel (int fd, int cmd, ...);
 #define fcntl_not_cancel(fd, cmd, val) \
-    __fcntl_not_cancel (fd, cmd, val)
+    __fcntl_not_cancel ((fd), (cmd), (val))
 
 extern __pid_t __waitpid_not_cancel(__pid_t pid, int *stat_loc, int options);
 #define waitpid_not_cancel(pid, stat_loc, options) \
-    __waitpid_not_cancel (pid, stat_loc, options)
+    __waitpid_not_cancel ((pid), (stat_loc), (options))
 
 # define pause_not_cancel() \
-    INLINE_SYSCALL (pause, 0)
+    syscall (SYS_pause)
 
 # define nanosleep_not_cancel(requested_time, remaining) \
-    INLINE_SYSCALL (nanosleep, 2, (requested_time), (remaining))
+    syscall (SYS_nanosleep, (requested_time), (remaining))
 
 #define sigsuspend_not_cancel(set) \
-    INLINE_SYSCALL (sigsuspend, 1, (set))
+    syscall (SYS_sigsuspend, (set))
index 543cd0f..4719a2f 100644 (file)
@@ -67,7 +67,7 @@
 # define SYS_SUB_setsid         3
 # define SYS_SUB_getpgid        4
 # define SYS_SUB_setpgid        5
-#define SYS_xenix           40
+#define SYS_uucopystr       40
 #define SYS_dup             41
 #define SYS_pipe            42
 #define SYS_times           43
 #define SYS_open64          225
 #define SYS_rpcsys          226
 #define SYS_zone            227
+# define SYS_SUB_zone_create        0
+# define SYS_SUB_zone_destroy       1
+# define SYS_SUB_zone_getattr       2
+# define SYS_SUB_zone_enter         3
+# define SYS_SUB_zone_list          4
+# define SYS_SUB_zone_shutdown      5
+# define SYS_SUB_zone_lookup        6
+# define SYS_SUB_zone_boot          7
+# define SYS_SUB_zone_version       8
+# define SYS_SUB_zone_setattr       9
+# define SYS_SUB_zone_add_datalink  10
+# define SYS_SUB_zone_del_datalink  11
+# define SYS_SUB_zone_check_datalink    12
+# define SYS_SUB_zone_list_datalink 13
 #define SYS_autofssys       228
 #define SYS_getcwd          229
 #define SYS_so_socket       230
@@ -400,6 +414,15 @@ typedef struct
        long sys_rval1;
        long sys_rval2;
   } sysret_t;
+
+#include <features.h>
+
+__BEGIN_DECLS
+
+extern int  __systemcall (sysret_t *, int, ...);
+
+__END_DECLS
+
 #endif
 
 #endif  /* sys/syscall.h */
index 061f169..00b25fe 100644 (file)
@@ -85,9 +85,23 @@ swapctl             - uadmin:swapctl        i:ip        swapctl
 uadmin              - uadmin                i:iii       __uadmin            uadmin
 umount2             - umount2               i:si        umount2
 unlinkat            - fsat:unlinkat         i:isi       unlinkat
+uucopy              - uucopy                i:ppi       uucopy
+uucopystr           - uucopystr             i:ppi       uucopystr
 vhangup             - vhangup               i:          vhangup
 waitid              - waitid                Ci:iipi     __waitid            waitid
 xmknod              - xmknod                i:isii      __xmknod            _xmknod
+zone_add_datalink   - zone:zone_add_datalink i:is       zone_add_datalink
+zone_boot           - zone:zone_boot        i:i         zone_boot
+zone_check_datalink - zone:zone_check_datalink  i:ps    zone_check_datalink
+zone_destroy        - zone:zone_destroy     i:i         zone_destroy
+zone_enter          - zone:zone_enter       i:i         zone_enter
+zone_getattr        - zone:zone_getattr     i:iipi      zone_getattr
+zone_list           - zone:zone_list        i:pp        zone_list
+zone_list_datalink  - zone:zone_list_datalink   i:ipp   zone_list_datalink
+zone_remove_datalink - zone:zone_del_datalink i:s       zone_remove_datalink
+zone_setattr        - zone:zone_setattr     i:iipi      zone_setattr
+zone_shutdown       - zone:zone_shutdown    i:i         zone_shutdown
+zone_version        - zone:zone_version     i:p         zone_version
 
 #
 # implement these in helper files
@@ -96,12 +110,7 @@ xmknod              - xmknod                i:isii      __xmknod            _xmk
 sys_accept          - accept                Ci:iBN      __syscall_accept
 sys_bind            - bind                  i:ipii      __syscall_bind
 sys_brk             - brk                   i:p         __syscall_brk
-sys_chdir           - chdir                 i:s         __syscall_chdir
-sys_clock_gettime   - clock_gettime         i:ip        __syscall_clock_gettime
-sys_close           - close                 i:i         __syscall_close
-sys_close_nc_ns     - close                 Vi:i        __syscall_close_nc_ns
 sys_connect         - connect               Ci:ipi      __syscall_connect
-sys_fchdir          - fchdir                i:i         __syscall_fchdir
 sys_fcntl           - fcntl                 i:iiF       __syscall_fcntl
 sys_fdsync          - fdsync                Ci:ii       __syscall_fdsync
 sys_forkx           - forksys:forkx         i:i         __syscall_forkx
@@ -125,12 +134,10 @@ sys_lstat64         - lstat64               i:sp        __syscall_lstat64
 sys_lwp_private     - lwp_private           i:iii       __syscall_lwp_private
 sys_lwp_sigmask     - lwp_sigmask           Ei:iii      __syscall_lwp_sigmask
 sys_meminfo         - meminfosys:meminfo    i:ip        __syscall_meminfo
-sys_nanosleep       - nanosleep             i:pP        __syscall_nanosleep
 sys_open            - open                  i:siv       __syscall_open
 sys_open64          - open64                i:pii       __syscall_open64
 sys_openat          - fsat:openat           i:isiv      __syscall_openat
 sys_openat64        - fsat:openat64         i:isiv      __syscall_openat64
-sys_pause           - pause                 i:          __syscall_pause
 sys_pipe            - pipe                  i:          __syscall_pipe
 sys_pollsys         - pollsys               i:pipp      __syscall_pollsys
 sys_priocntlsys     - priocntlsys           i:ipiv      __syscall_priocntlsys
@@ -138,7 +145,6 @@ sys_privsys         - privsys               i:iipii     __syscall_privsys
 sys_pset_getloadavg - pset:pset_getloadavg  i:ipi       __syscall_pset_getloadavg
 sys_putmsg          - putmsg                i:ippi      __syscall_putmsg
 sys_putpmsg         - putpmsg               i:ippii     __syscall_putpmsg
-sys_read            - read                  i:ibn       __syscall_read
 sys_recvmsg         - recvmsg               Ci:ipi      __syscall_recvmsg
 sys_rusagesys       - rusagesys             i:ip        __syscall_rusagesys
 sys_send            - send                  Ci:ibni     __syscall_send
@@ -162,8 +168,5 @@ sys_ucred_get       - ucredsys:ucred_get    i:ip        __syscall_ucred_get
 sys_uname           - uname                 i:p         __syscall_uname
 sys_utimes          - utimes                i:sp        __syscall_utimes
 sys_utssys          - utssys                i:piiP      __syscall_utssys
-sys_write           - write                 i:ibn       __syscall_write
-sys_writev          - writev                i:ipi       __syscall_writev
-sys_writev_nc_ns    - writev                Vi:ipi      __syscall_writev_nc_ns
+sys_zone_lookup     - zone:zone_lookup      i:p         __syscall_zone_lookup
 #sys_door
-#sys_zone