improve sys_newuname() for compat architectures
[safe/jmp/linux-2.6] / arch / s390 / kernel / compat_wrapper.S
index 4aabeea..672ce52 100644 (file)
@@ -121,15 +121,13 @@ sys32_ptrace_wrapper:
        lgfr    %r3,%r3                 # long
        llgtr   %r4,%r4                 # long
        llgfr   %r5,%r5                 # long
-       jg      sys_ptrace              # branch to system call
+       jg      compat_sys_ptrace       # branch to system call
 
        .globl  sys32_alarm_wrapper
 sys32_alarm_wrapper:
        llgfr   %r2,%r2                 # unsigned int
        jg      sys_alarm               # branch to system call
 
-#sys32_pause_wrapper                   # void
-
        .globl  compat_sys_utime_wrapper
 compat_sys_utime_wrapper:
        llgtr   %r2,%r2                 # char *
@@ -254,7 +252,7 @@ sys32_chroot_wrapper:
 sys32_ustat_wrapper:
        llgfr   %r2,%r2                 # dev_t
        llgtr   %r3,%r3                 # struct ustat *
-       jg      sys_ustat
+       jg      compat_sys_ustat
 
        .globl  sys32_dup2_wrapper
 sys32_dup2_wrapper:
@@ -334,17 +332,17 @@ compat_sys_getrusage_wrapper:
        llgtr   %r3,%r3                 # struct rusage_emu31 *
        jg      compat_sys_getrusage    # branch to system call
 
-       .globl  sys32_gettimeofday_wrapper
-sys32_gettimeofday_wrapper:
+       .globl  compat_sys_gettimeofday_wrapper
+compat_sys_gettimeofday_wrapper:
        llgtr   %r2,%r2                 # struct timeval_emu31 *
        llgtr   %r3,%r3                 # struct timezone *
-       jg      sys32_gettimeofday      # branch to system call
+       jg      compat_sys_gettimeofday # branch to system call
 
-       .globl  sys32_settimeofday_wrapper
-sys32_settimeofday_wrapper:
+       .globl  compat_sys_settimeofday_wrapper
+compat_sys_settimeofday_wrapper:
        llgtr   %r2,%r2                 # struct timeval_emu31 *
        llgtr   %r3,%r3                 # struct timezone *
-       jg      sys32_settimeofday      # branch to system call
+       jg      compat_sys_settimeofday # branch to system call
 
        .globl  sys32_getgroups16_wrapper
 sys32_getgroups16_wrapper:
@@ -411,7 +409,7 @@ sys32_munmap_wrapper:
        .globl  sys32_truncate_wrapper
 sys32_truncate_wrapper:
        llgtr   %r2,%r2                 # const char *
-       llgfr   %r3,%r3                 # unsigned long
+       lgfr    %r3,%r3                 # long
        jg      sys_truncate            # branch to system call
 
        .globl  sys32_ftruncate_wrapper
@@ -517,10 +515,10 @@ sys32_swapoff_wrapper:
        llgtr   %r2,%r2                 # const char *
        jg      sys_swapoff             # branch to system call
 
-       .globl  sys32_sysinfo_wrapper
-sys32_sysinfo_wrapper:
+       .globl  compat_sys_sysinfo_wrapper
+compat_sys_sysinfo_wrapper:
        llgtr   %r2,%r2                 # struct sysinfo_emu31 *
-       jg      sys32_sysinfo           # branch to system call
+       jg      compat_sys_sysinfo      # branch to system call
 
        .globl  sys32_ipc_wrapper
 sys32_ipc_wrapper:
@@ -549,7 +547,7 @@ sys32_setdomainname_wrapper:
        .globl  sys32_newuname_wrapper
 sys32_newuname_wrapper:
        llgtr   %r2,%r2                 # struct new_utsname *
-       jg      s390x_newuname          # branch to system call
+       jg      sys_newuname            # branch to system call
 
        .globl  compat_sys_adjtimex_wrapper
 compat_sys_adjtimex_wrapper:
@@ -570,18 +568,18 @@ compat_sys_sigprocmask_wrapper:
        llgtr   %r4,%r4                 # compat_old_sigset_t *
        jg      compat_sys_sigprocmask          # branch to system call
 
-       .globl  sys32_init_module_wrapper
-sys32_init_module_wrapper:
+       .globl  sys_init_module_wrapper
+sys_init_module_wrapper:
        llgtr   %r2,%r2                 # void *
        llgfr   %r3,%r3                 # unsigned long
        llgtr   %r4,%r4                 # char *
-       jg      sys32_init_module       # branch to system call
+       jg      sys_init_module         # branch to system call
 
-       .globl  sys32_delete_module_wrapper
-sys32_delete_module_wrapper:
+       .globl  sys_delete_module_wrapper
+sys_delete_module_wrapper:
        llgtr   %r2,%r2                 # const char *
        llgfr   %r3,%r3                 # unsigned int
-       jg      sys32_delete_module     # branch to system call
+       jg      sys_delete_module       # branch to system call
 
        .globl  sys32_quotactl_wrapper
 sys32_quotactl_wrapper:
@@ -617,7 +615,7 @@ sys32_sysfs_wrapper:
        .globl  sys32_personality_wrapper
 sys32_personality_wrapper:
        llgfr   %r2,%r2                 # unsigned long
-       jg      s390x_personality       # branch to system call
+       jg      sys_s390_personality    # branch to system call
 
        .globl  sys32_setfsuid16_wrapper
 sys32_setfsuid16_wrapper:
@@ -691,8 +689,6 @@ sys32_fdatasync_wrapper:
        llgfr   %r2,%r2                 # unsigned int
        jg      sys_fdatasync           # branch to system call
 
-#sys32_sysctl_wrapper                  # tbd
-
        .globl  sys32_mlock_wrapper
 sys32_mlock_wrapper:
        llgfr   %r2,%r2                 # unsigned long
@@ -1089,8 +1085,8 @@ sys32_stime_wrapper:
 
        .globl  sys32_sysctl_wrapper
 sys32_sysctl_wrapper:
-       llgtr   %r2,%r2                 # struct __sysctl_args32 *
-       jg      sys32_sysctl
+       llgtr   %r2,%r2                 # struct compat_sysctl_args *
+       jg      compat_sys_sysctl
 
        .globl  sys32_fstat64_wrapper
 sys32_fstat64_wrapper:
@@ -1658,3 +1654,202 @@ compat_sys_vmsplice_wrapper:
        llgfr   %r4,%r4                 # unsigned int
        llgfr   %r5,%r5                 # unsigned int
        jg      compat_sys_vmsplice
+
+       .globl  sys_getcpu_wrapper
+sys_getcpu_wrapper:
+       llgtr   %r2,%r2                 # unsigned *
+       llgtr   %r3,%r3                 # unsigned *
+       llgtr   %r4,%r4                 # struct getcpu_cache *
+       jg      sys_getcpu
+
+       .globl  compat_sys_epoll_pwait_wrapper
+compat_sys_epoll_pwait_wrapper:
+       lgfr    %r2,%r2                 # int
+       llgtr   %r3,%r3                 # struct compat_epoll_event *
+       lgfr    %r4,%r4                 # int
+       lgfr    %r5,%r5                 # int
+       llgtr   %r6,%r6                 # compat_sigset_t *
+       llgf    %r0,164(%r15)           # compat_size_t
+       stg     %r0,160(%r15)
+       jg      compat_sys_epoll_pwait
+
+       .globl  compat_sys_utimes_wrapper
+compat_sys_utimes_wrapper:
+       llgtr   %r2,%r2                 # char *
+       llgtr   %r3,%r3                 # struct compat_timeval *
+       jg      compat_sys_utimes
+
+       .globl  compat_sys_utimensat_wrapper
+compat_sys_utimensat_wrapper:
+       llgfr   %r2,%r2                 # unsigned int
+       llgtr   %r3,%r3                 # char *
+       llgtr   %r4,%r4                 # struct compat_timespec *
+       lgfr    %r5,%r5                 # int
+       jg      compat_sys_utimensat
+
+       .globl  compat_sys_signalfd_wrapper
+compat_sys_signalfd_wrapper:
+       lgfr    %r2,%r2                 # int
+       llgtr   %r3,%r3                 # compat_sigset_t *
+       llgfr   %r4,%r4                 # compat_size_t
+       jg      compat_sys_signalfd
+
+       .globl  sys_eventfd_wrapper
+sys_eventfd_wrapper:
+       llgfr   %r2,%r2                 # unsigned int
+       jg      sys_eventfd
+
+       .globl  sys_fallocate_wrapper
+sys_fallocate_wrapper:
+       lgfr    %r2,%r2                 # int
+       lgfr    %r3,%r3                 # int
+       sllg    %r4,%r4,32              # get high word of 64bit loff_t
+       lr      %r4,%r5                 # get low word of 64bit loff_t
+       sllg    %r5,%r6,32              # get high word of 64bit loff_t
+       l       %r5,164(%r15)           # get low word of 64bit loff_t
+       jg      sys_fallocate
+
+       .globl  sys_timerfd_create_wrapper
+sys_timerfd_create_wrapper:
+       lgfr    %r2,%r2                 # int
+       lgfr    %r3,%r3                 # int
+       jg      sys_timerfd_create
+
+       .globl  compat_sys_timerfd_settime_wrapper
+compat_sys_timerfd_settime_wrapper:
+       lgfr    %r2,%r2                 # int
+       lgfr    %r3,%r3                 # int
+       llgtr   %r4,%r4                 # struct compat_itimerspec *
+       llgtr   %r5,%r5                 # struct compat_itimerspec *
+       jg      compat_sys_timerfd_settime
+
+       .globl  compat_sys_timerfd_gettime_wrapper
+compat_sys_timerfd_gettime_wrapper:
+       lgfr    %r2,%r2                 # int
+       llgtr   %r3,%r3                 # struct compat_itimerspec *
+       jg      compat_sys_timerfd_gettime
+
+       .globl compat_sys_signalfd4_wrapper
+compat_sys_signalfd4_wrapper:
+       lgfr    %r2,%r2                 # int
+       llgtr   %r3,%r3                 # compat_sigset_t *
+       llgfr   %r4,%r4                 # compat_size_t
+       lgfr    %r5,%r5                 # int
+       jg      compat_sys_signalfd4
+
+       .globl sys_eventfd2_wrapper
+sys_eventfd2_wrapper:
+       llgfr   %r2,%r2                 # unsigned int
+       lgfr    %r3,%r3                 # int
+       jg      sys_eventfd2
+
+       .globl  sys_inotify_init1_wrapper
+sys_inotify_init1_wrapper:
+       lgfr    %r2,%r2                 # int
+       jg      sys_inotify_init1
+
+       .globl  sys_pipe2_wrapper
+sys_pipe2_wrapper:
+       llgtr   %r2,%r2                 # u32 *
+       lgfr    %r3,%r3                 # int
+       jg      sys_pipe2               # branch to system call
+
+       .globl  sys_dup3_wrapper
+sys_dup3_wrapper:
+       llgfr   %r2,%r2                 # unsigned int
+       llgfr   %r3,%r3                 # unsigned int
+       lgfr    %r4,%r4                 # int
+       jg      sys_dup3                # branch to system call
+
+       .globl  sys_epoll_create1_wrapper
+sys_epoll_create1_wrapper:
+       lgfr    %r2,%r2                 # int
+       jg      sys_epoll_create1       # branch to system call
+
+       .globl  sys32_readahead_wrapper
+sys32_readahead_wrapper:
+       lgfr    %r2,%r2                 # int
+       llgfr   %r3,%r3                 # u32
+       llgfr   %r4,%r4                 # u32
+       lgfr    %r5,%r5                 # s32
+       jg      sys32_readahead         # branch to system call
+
+       .globl  sys32_sendfile64_wrapper
+sys32_sendfile64_wrapper:
+       lgfr    %r2,%r2                 # int
+       lgfr    %r3,%r3                 # int
+       llgtr   %r4,%r4                 # compat_loff_t *
+       lgfr    %r5,%r5                 # s32
+       jg      sys32_sendfile64        # branch to system call
+
+       .globl  sys_tkill_wrapper
+sys_tkill_wrapper:
+       lgfr    %r2,%r2                 # pid_t
+       lgfr    %r3,%r3                 # int
+       jg      sys_tkill               # branch to system call
+
+       .globl  sys_tgkill_wrapper
+sys_tgkill_wrapper:
+       lgfr    %r2,%r2                 # pid_t
+       lgfr    %r3,%r3                 # pid_t
+       lgfr    %r4,%r4                 # int
+       jg      sys_tgkill              # branch to system call
+
+       .globl  compat_sys_keyctl_wrapper
+compat_sys_keyctl_wrapper:
+       llgfr   %r2,%r2                 # u32
+       llgfr   %r3,%r3                 # u32
+       llgfr   %r4,%r4                 # u32
+       llgfr   %r5,%r5                 # u32
+       llgfr   %r6,%r6                 # u32
+       jg      compat_sys_keyctl       # branch to system call
+
+       .globl  compat_sys_preadv_wrapper
+compat_sys_preadv_wrapper:
+       llgfr   %r2,%r2                 # unsigned long
+       llgtr   %r3,%r3                 # compat_iovec *
+       llgfr   %r4,%r4                 # unsigned long
+       llgfr   %r5,%r5                 # u32
+       llgfr   %r6,%r6                 # u32
+       jg      compat_sys_preadv       # branch to system call
+
+       .globl  compat_sys_pwritev_wrapper
+compat_sys_pwritev_wrapper:
+       llgfr   %r2,%r2                 # unsigned long
+       llgtr   %r3,%r3                 # compat_iovec *
+       llgfr   %r4,%r4                 # unsigned long
+       llgfr   %r5,%r5                 # u32
+       llgfr   %r6,%r6                 # u32
+       jg      compat_sys_pwritev      # branch to system call
+
+       .globl  compat_sys_rt_tgsigqueueinfo_wrapper
+compat_sys_rt_tgsigqueueinfo_wrapper:
+       lgfr    %r2,%r2                 # compat_pid_t
+       lgfr    %r3,%r3                 # compat_pid_t
+       lgfr    %r4,%r4                 # int
+       llgtr   %r5,%r5                 # struct compat_siginfo *
+       jg      compat_sys_rt_tgsigqueueinfo_wrapper # branch to system call
+
+       .globl  sys_perf_event_open_wrapper
+sys_perf_event_open_wrapper:
+       llgtr   %r2,%r2                 # const struct perf_event_attr *
+       lgfr    %r3,%r3                 # pid_t
+       lgfr    %r4,%r4                 # int
+       lgfr    %r5,%r5                 # int
+       llgfr   %r6,%r6                 # unsigned long
+       jg      sys_perf_event_open     # branch to system call
+
+       .globl  sys_clone_wrapper
+sys_clone_wrapper:
+       llgfr   %r2,%r2                 # unsigned long
+       llgfr   %r3,%r3                 # unsigned long
+       llgtr   %r4,%r4                 # int *
+       llgtr   %r5,%r5                 # int *
+       jg      sys_clone               # branch to system call
+
+       .globl  sys32_execve_wrapper
+sys32_execve_wrapper:
+       llgtr   %r2,%r2                 # char *
+       llgtr   %r3,%r3                 # compat_uptr_t *
+       llgtr   %r4,%r4                 # compat_uptr_t *
+       jg      sys32_execve            # branch to system call