overhaul syscall interface
authorRich Felker <dalias@aerifal.cx>
Sat, 19 Mar 2011 22:51:42 +0000 (18:51 -0400)
committerRich Felker <dalias@aerifal.cx>
Sat, 19 Mar 2011 22:51:42 +0000 (18:51 -0400)
this commit shuffles around the location of syscall definitions so
that we can make a syscall() library function with both SYS_* and
__NR_* style syscall names available to user applications, provides
the syscall() library function, and optimizes the code that performs
the actual inline syscalls in the library itself.

previously on i386 when built as PIC (shared library), syscalls were
incurring bus lock (lock prefix) overhead at entry and exit, due to
the way the ebx register was being loaded (xchg instruction with a
memory operand). now the xchg takes place between two registers.

further cleanup to arch/$(ARCH)/syscall.h is planned.

arch/i386/bits/syscall.h [new file with mode: 0644]
arch/i386/syscall.h
arch/x86_64/bits/syscall.h [new file with mode: 0644]
arch/x86_64/syscall.h
include/sys/syscall.h [new file with mode: 0644]
src/internal/i386/syscall.s [new file with mode: 0644]
src/internal/syscall.c
src/internal/syscall_ret.c [new file with mode: 0644]
src/internal/x86_64/syscall.s [new file with mode: 0644]
src/linux/syscall.c [new file with mode: 0644]
src/thread/pthread_create.c

diff --git a/arch/i386/bits/syscall.h b/arch/i386/bits/syscall.h
new file mode 100644 (file)
index 0000000..b38f09e
--- /dev/null
@@ -0,0 +1,810 @@
+#define __NR_restart_syscall      0
+#define __NR_exit                1
+#define __NR_fork                2
+#define __NR_read                3
+#define __NR_write               4
+#define __NR_open                5
+#define __NR_close               6
+#define __NR_waitpid             7
+#define __NR_creat               8
+#define __NR_link                9
+#define __NR_unlink             10
+#define __NR_execve             11
+#define __NR_chdir              12
+#define __NR_time               13
+#define __NR_mknod              14
+#define __NR_chmod              15
+#define __NR_lchown             16
+#define __NR_break              17
+#define __NR_oldstat            18
+#define __NR_lseek              19
+#define __NR_getpid             20
+#define __NR_mount              21
+#define __NR_umount             22
+#define __NR_setuid             23
+#define __NR_getuid             24
+#define __NR_stime              25
+#define __NR_ptrace             26
+#define __NR_alarm              27
+#define __NR_oldfstat           28
+#define __NR_pause              29
+#define __NR_utime              30
+#define __NR_stty               31
+#define __NR_gtty               32
+#define __NR_access             33
+#define __NR_nice               34
+#define __NR_ftime              35
+#define __NR_sync               36
+#define __NR_kill               37
+#define __NR_rename             38
+#define __NR_mkdir              39
+#define __NR_rmdir              40
+#define __NR_dup                41
+#define __NR_pipe               42
+#define __NR_times              43
+#define __NR_prof               44
+#define __NR_brk                45
+#define __NR_setgid             46
+#define __NR_getgid             47
+#define __NR_signal             48
+#define __NR_geteuid            49
+#define __NR_getegid            50
+#define __NR_acct               51
+#define __NR_umount2            52
+#define __NR_lock               53
+#define __NR_ioctl              54
+#define __NR_fcntl              55
+#define __NR_mpx                56
+#define __NR_setpgid            57
+#define __NR_ulimit             58
+#define __NR_oldolduname        59
+#define __NR_umask              60
+#define __NR_chroot             61
+#define __NR_ustat              62
+#define __NR_dup2               63
+#define __NR_getppid            64
+#define __NR_getpgrp            65
+#define __NR_setsid             66
+#define __NR_sigaction          67
+#define __NR_sgetmask           68
+#define __NR_ssetmask           69
+#define __NR_setreuid           70
+#define __NR_setregid           71
+#define __NR_sigsuspend                 72
+#define __NR_sigpending                 73
+#define __NR_sethostname        74
+#define __NR_setrlimit          75
+#define __NR_getrlimit          76   /* Back compatible 2Gig limited rlimit */
+#define __NR_getrusage          77
+#define __NR_gettimeofday       78
+#define __NR_settimeofday       79
+#define __NR_getgroups          80
+#define __NR_setgroups          81
+#define __NR_select             82
+#define __NR_symlink            83
+#define __NR_oldlstat           84
+#define __NR_readlink           85
+#define __NR_uselib             86
+#define __NR_swapon             87
+#define __NR_reboot             88
+#define __NR_readdir            89
+#define __NR_mmap               90
+#define __NR_munmap             91
+#define __NR_truncate           92
+#define __NR_ftruncate          93
+#define __NR_fchmod             94
+#define __NR_fchown             95
+#define __NR_getpriority        96
+#define __NR_setpriority        97
+#define __NR_profil             98
+#define __NR_statfs            99
+#define __NR_fstatfs           100
+#define __NR_ioperm            101
+#define __NR_socketcall                102
+#define __NR_syslog            103
+#define __NR_setitimer         104
+#define __NR_getitimer         105
+#define __NR_stat              106
+#define __NR_lstat             107
+#define __NR_fstat             108
+#define __NR_olduname          109
+#define __NR_iopl              110
+#define __NR_vhangup           111
+#define __NR_idle              112
+#define __NR_vm86old           113
+#define __NR_wait4             114
+#define __NR_swapoff           115
+#define __NR_sysinfo           116
+#define __NR_ipc               117
+#define __NR_fsync             118
+#define __NR_sigreturn         119
+#define __NR_clone             120
+#define __NR_setdomainname     121
+#define __NR_uname             122
+#define __NR_modify_ldt                123
+#define __NR_adjtimex          124
+#define __NR_mprotect          125
+#define __NR_sigprocmask       126
+#define __NR_create_module     127
+#define __NR_init_module       128
+#define __NR_delete_module     129
+#define __NR_get_kernel_syms   130
+#define __NR_quotactl          131
+#define __NR_getpgid           132
+#define __NR_fchdir            133
+#define __NR_bdflush           134
+#define __NR_sysfs             135
+#define __NR_personality       136
+#define __NR_afs_syscall       137
+#define __NR_setfsuid          138
+#define __NR_setfsgid          139
+#define __NR__llseek           140
+#define __NR_getdents          141
+#define __NR__newselect                142
+#define __NR_flock             143
+#define __NR_msync             144
+#define __NR_readv             145
+#define __NR_writev            146
+#define __NR_getsid            147
+#define __NR_fdatasync         148
+#define __NR__sysctl           149
+#define __NR_mlock             150
+#define __NR_munlock           151
+#define __NR_mlockall          152
+#define __NR_munlockall                153
+#define __NR_sched_setparam            154
+#define __NR_sched_getparam            155
+#define __NR_sched_setscheduler                156
+#define __NR_sched_getscheduler                157
+#define __NR_sched_yield               158
+#define __NR_sched_get_priority_max    159
+#define __NR_sched_get_priority_min    160
+#define __NR_sched_rr_get_interval     161
+#define __NR_nanosleep         162
+#define __NR_mremap            163
+#define __NR_setresuid         164
+#define __NR_getresuid         165
+#define __NR_vm86              166
+#define __NR_query_module      167
+#define __NR_poll              168
+#define __NR_nfsservctl                169
+#define __NR_setresgid         170
+#define __NR_getresgid         171
+#define __NR_prctl              172
+#define __NR_rt_sigreturn      173
+#define __NR_rt_sigaction      174
+#define __NR_rt_sigprocmask    175
+#define __NR_rt_sigpending     176
+#define __NR_rt_sigtimedwait   177
+#define __NR_rt_sigqueueinfo   178
+#define __NR_rt_sigsuspend     179
+#define __NR_pread64           180
+#define __NR_pwrite64          181
+#define __NR_chown             182
+#define __NR_getcwd            183
+#define __NR_capget            184
+#define __NR_capset            185
+#define __NR_sigaltstack       186
+#define __NR_sendfile          187
+#define __NR_getpmsg           188
+#define __NR_putpmsg           189
+#define __NR_vfork             190
+#define __NR_ugetrlimit                191
+#define __NR_mmap2             192
+#define __NR_truncate64                193
+#define __NR_ftruncate64       194
+#define __NR_stat64            195
+#define __NR_lstat64           196
+#define __NR_fstat64           197
+#define __NR_lchown32          198
+#define __NR_getuid32          199
+#define __NR_getgid32          200
+#define __NR_geteuid32         201
+#define __NR_getegid32         202
+#define __NR_setreuid32                203
+#define __NR_setregid32                204
+#define __NR_getgroups32       205
+#define __NR_setgroups32       206
+#define __NR_fchown32          207
+#define __NR_setresuid32       208
+#define __NR_getresuid32       209
+#define __NR_setresgid32       210
+#define __NR_getresgid32       211
+#define __NR_chown32           212
+#define __NR_setuid32          213
+#define __NR_setgid32          214
+#define __NR_setfsuid32                215
+#define __NR_setfsgid32                216
+#define __NR_pivot_root                217
+#define __NR_mincore           218
+#define __NR_madvise           219
+#define __NR_madvise1          219
+#define __NR_getdents64                220
+#define __NR_fcntl64           221
+/* 223 is unused */
+#define __NR_gettid            224
+#define __NR_readahead         225
+#define __NR_setxattr          226
+#define __NR_lsetxattr         227
+#define __NR_fsetxattr         228
+#define __NR_getxattr          229
+#define __NR_lgetxattr         230
+#define __NR_fgetxattr         231
+#define __NR_listxattr         232
+#define __NR_llistxattr                233
+#define __NR_flistxattr                234
+#define __NR_removexattr       235
+#define __NR_lremovexattr      236
+#define __NR_fremovexattr      237
+#define __NR_tkill             238
+#define __NR_sendfile64                239
+#define __NR_futex             240
+#define __NR_sched_setaffinity 241
+#define __NR_sched_getaffinity 242
+#define __NR_set_thread_area   243
+#define __NR_get_thread_area   244
+#define __NR_io_setup          245
+#define __NR_io_destroy                246
+#define __NR_io_getevents      247
+#define __NR_io_submit         248
+#define __NR_io_cancel         249
+#define __NR_fadvise64         250
+/* 251 is available for reuse (was briefly sys_set_zone_reclaim) */
+#define __NR_exit_group                252
+#define __NR_lookup_dcookie    253
+#define __NR_epoll_create      254
+#define __NR_epoll_ctl         255
+#define __NR_epoll_wait                256
+#define __NR_remap_file_pages  257
+#define __NR_set_tid_address   258
+#define __NR_timer_create      259
+#define __NR_timer_settime     (__NR_timer_create+1)
+#define __NR_timer_gettime     (__NR_timer_create+2)
+#define __NR_timer_getoverrun  (__NR_timer_create+3)
+#define __NR_timer_delete      (__NR_timer_create+4)
+#define __NR_clock_settime     (__NR_timer_create+5)
+#define __NR_clock_gettime     (__NR_timer_create+6)
+#define __NR_clock_getres      (__NR_timer_create+7)
+#define __NR_clock_nanosleep   (__NR_timer_create+8)
+#define __NR_statfs64          268
+#define __NR_fstatfs64         269
+#define __NR_tgkill            270
+#define __NR_utimes            271
+#define __NR_fadvise64_64      272
+#define __NR_vserver           273
+#define __NR_mbind             274
+#define __NR_get_mempolicy     275
+#define __NR_set_mempolicy     276
+#define __NR_mq_open           277
+#define __NR_mq_unlink         (__NR_mq_open+1)
+#define __NR_mq_timedsend      (__NR_mq_open+2)
+#define __NR_mq_timedreceive   (__NR_mq_open+3)
+#define __NR_mq_notify         (__NR_mq_open+4)
+#define __NR_mq_getsetattr     (__NR_mq_open+5)
+#define __NR_kexec_load                283
+#define __NR_waitid            284
+/* #define __NR_sys_setaltroot 285 */
+#define __NR_add_key           286
+#define __NR_request_key       287
+#define __NR_keyctl            288
+#define __NR_ioprio_set                289
+#define __NR_ioprio_get                290
+#define __NR_inotify_init      291
+#define __NR_inotify_add_watch 292
+#define __NR_inotify_rm_watch  293
+#define __NR_migrate_pages     294
+#define __NR_openat            295
+#define __NR_mkdirat           296
+#define __NR_mknodat           297
+#define __NR_fchownat          298
+#define __NR_futimesat         299
+#define __NR_fstatat64         300
+#define __NR_unlinkat          301
+#define __NR_renameat          302
+#define __NR_linkat            303
+#define __NR_symlinkat         304
+#define __NR_readlinkat                305
+#define __NR_fchmodat          306
+#define __NR_faccessat         307
+#define __NR_pselect6          308
+#define __NR_ppoll             309
+#define __NR_unshare           310
+#define __NR_set_robust_list   311
+#define __NR_get_robust_list   312
+#define __NR_splice            313
+#define __NR_sync_file_range   314
+#define __NR_tee               315
+#define __NR_vmsplice          316
+#define __NR_move_pages                317
+#define __NR_getcpu            318
+#define __NR_epoll_pwait       319
+#define __NR_utimensat         320
+#define __NR_signalfd          321
+#define __NR_timerfd_create    322
+#define __NR_eventfd           323
+#define __NR_fallocate         324
+#define __NR_timerfd_settime   325
+#define __NR_timerfd_gettime   326
+#define __NR_signalfd4         327
+#define __NR_eventfd2          328
+#define __NR_epoll_create1     329
+#define __NR_dup3              330
+#define __NR_pipe2             331
+#define __NR_inotify_init1     332
+#define __NR_preadv            333
+#define __NR_pwritev           334
+
+/* fixup legacy 16-bit junk */
+#undef __NR_lchown
+#undef __NR_getuid
+#undef __NR_getgid
+#undef __NR_geteuid
+#undef __NR_getegid
+#undef __NR_setreuid
+#undef __NR_setregid
+#undef __NR_getgroups
+#undef __NR_setgroups
+#undef __NR_fchown
+#undef __NR_setresuid
+#undef __NR_getresuid
+#undef __NR_setresgid
+#undef __NR_getresgid
+#undef __NR_chown
+#undef __NR_setuid
+#undef __NR_setgid
+#undef __NR_setfsuid
+#undef __NR_setfsgid
+#define __NR_lchown __NR_lchown32
+#define __NR_getuid __NR_getuid32
+#define __NR_getgid __NR_getgid32
+#define __NR_geteuid __NR_geteuid32
+#define __NR_getegid __NR_getegid32
+#define __NR_setreuid __NR_setreuid32
+#define __NR_setregid __NR_setregid32
+#define __NR_getgroups __NR_getgroups32
+#define __NR_setgroups __NR_setgroups32
+#define __NR_fchown __NR_fchown32
+#define __NR_setresuid __NR_setresuid32
+#define __NR_getresuid __NR_getresuid32
+#define __NR_setresgid __NR_setresgid32
+#define __NR_getresgid __NR_getresgid32
+#define __NR_chown __NR_chown32
+#define __NR_setuid __NR_setuid32
+#define __NR_setgid __NR_setgid32
+#define __NR_setfsuid __NR_setfsuid32
+#define __NR_setfsgid __NR_setfsgid32
+
+
+/* fixup legacy 32-bit-vs-lfs64 junk */
+#undef __NR_getdents
+#undef __NR_ftruncate
+#undef __NR_truncate
+#undef __NR_stat
+#undef __NR_fstat
+#undef __NR_lstat
+#undef __NR_statfs
+#undef __NR_fstatfs
+#define __NR_getdents __NR_getdents64
+#define __NR_ftruncate __NR_ftruncate64
+#define __NR_truncate __NR_truncate64
+#define __NR_stat __NR_stat64
+#define __NR_fstat __NR_fstat64
+#define __NR_lstat __NR_lstat64
+#define __NR_statfs __NR_statfs64
+#define __NR_fstatfs __NR_fstatfs64
+#define __NR_fstatat __NR_fstatat64
+#define __NR_pread __NR_pread64
+#define __NR_pwrite __NR_pwrite64
+
+#undef __NR_getrlimit
+#define __NR_getrlimit __NR_ugetrlimit
+
+#undef __NR_select
+#define __NR_select __NR__newselect
+
+
+/* Repeated with SYS_ prefix */
+
+#define SYS_restart_syscall      0
+#define SYS_exit                 1
+#define SYS_fork                 2
+#define SYS_read                 3
+#define SYS_write                4
+#define SYS_open                 5
+#define SYS_close                6
+#define SYS_waitpid              7
+#define SYS_creat                8
+#define SYS_link                 9
+#define SYS_unlink              10
+#define SYS_execve              11
+#define SYS_chdir               12
+#define SYS_time                13
+#define SYS_mknod               14
+#define SYS_chmod               15
+#define SYS_lchown              16
+#define SYS_break               17
+#define SYS_oldstat             18
+#define SYS_lseek               19
+#define SYS_getpid              20
+#define SYS_mount               21
+#define SYS_umount              22
+#define SYS_setuid              23
+#define SYS_getuid              24
+#define SYS_stime               25
+#define SYS_ptrace              26
+#define SYS_alarm               27
+#define SYS_oldfstat            28
+#define SYS_pause               29
+#define SYS_utime               30
+#define SYS_stty                31
+#define SYS_gtty                32
+#define SYS_access              33
+#define SYS_nice                34
+#define SYS_ftime               35
+#define SYS_sync                36
+#define SYS_kill                37
+#define SYS_rename              38
+#define SYS_mkdir               39
+#define SYS_rmdir               40
+#define SYS_dup                 41
+#define SYS_pipe                42
+#define SYS_times               43
+#define SYS_prof                44
+#define SYS_brk                 45
+#define SYS_setgid              46
+#define SYS_getgid              47
+#define SYS_signal              48
+#define SYS_geteuid             49
+#define SYS_getegid             50
+#define SYS_acct                51
+#define SYS_umount2             52
+#define SYS_lock                53
+#define SYS_ioctl               54
+#define SYS_fcntl               55
+#define SYS_mpx                 56
+#define SYS_setpgid             57
+#define SYS_ulimit              58
+#define SYS_oldolduname         59
+#define SYS_umask               60
+#define SYS_chroot              61
+#define SYS_ustat               62
+#define SYS_dup2                63
+#define SYS_getppid             64
+#define SYS_getpgrp             65
+#define SYS_setsid              66
+#define SYS_sigaction           67
+#define SYS_sgetmask            68
+#define SYS_ssetmask            69
+#define SYS_setreuid            70
+#define SYS_setregid            71
+#define SYS_sigsuspend          72
+#define SYS_sigpending          73
+#define SYS_sethostname         74
+#define SYS_setrlimit           75
+#define SYS_getrlimit           76   /* Back compatible 2Gig limited rlimit */
+#define SYS_getrusage           77
+#define SYS_gettimeofday        78
+#define SYS_settimeofday        79
+#define SYS_getgroups           80
+#define SYS_setgroups           81
+#define SYS_select              82
+#define SYS_symlink             83
+#define SYS_oldlstat            84
+#define SYS_readlink            85
+#define SYS_uselib              86
+#define SYS_swapon              87
+#define SYS_reboot              88
+#define SYS_readdir             89
+#define SYS_mmap                90
+#define SYS_munmap              91
+#define SYS_truncate            92
+#define SYS_ftruncate           93
+#define SYS_fchmod              94
+#define SYS_fchown              95
+#define SYS_getpriority         96
+#define SYS_setpriority         97
+#define SYS_profil              98
+#define SYS_statfs             99
+#define SYS_fstatfs            100
+#define SYS_ioperm             101
+#define SYS_socketcall         102
+#define SYS_syslog             103
+#define SYS_setitimer          104
+#define SYS_getitimer          105
+#define SYS_stat               106
+#define SYS_lstat              107
+#define SYS_fstat              108
+#define SYS_olduname           109
+#define SYS_iopl               110
+#define SYS_vhangup            111
+#define SYS_idle               112
+#define SYS_vm86old            113
+#define SYS_wait4              114
+#define SYS_swapoff            115
+#define SYS_sysinfo            116
+#define SYS_ipc                117
+#define SYS_fsync              118
+#define SYS_sigreturn          119
+#define SYS_clone              120
+#define SYS_setdomainname      121
+#define SYS_uname              122
+#define SYS_modify_ldt         123
+#define SYS_adjtimex           124
+#define SYS_mprotect           125
+#define SYS_sigprocmask        126
+#define SYS_create_module      127
+#define SYS_init_module        128
+#define SYS_delete_module      129
+#define SYS_get_kernel_syms    130
+#define SYS_quotactl           131
+#define SYS_getpgid            132
+#define SYS_fchdir             133
+#define SYS_bdflush            134
+#define SYS_sysfs              135
+#define SYS_personality        136
+#define SYS_afs_syscall        137
+#define SYS_setfsuid           138
+#define SYS_setfsgid           139
+#define SYS__llseek            140
+#define SYS_getdents           141
+#define SYS__newselect         142
+#define SYS_flock              143
+#define SYS_msync              144
+#define SYS_readv              145
+#define SYS_writev             146
+#define SYS_getsid             147
+#define SYS_fdatasync          148
+#define SYS__sysctl            149
+#define SYS_mlock              150
+#define SYS_munlock            151
+#define SYS_mlockall           152
+#define SYS_munlockall         153
+#define SYS_sched_setparam             154
+#define SYS_sched_getparam             155
+#define SYS_sched_setscheduler         156
+#define SYS_sched_getscheduler         157
+#define SYS_sched_yield                158
+#define SYS_sched_get_priority_max     159
+#define SYS_sched_get_priority_min     160
+#define SYS_sched_rr_get_interval      161
+#define SYS_nanosleep          162
+#define SYS_mremap             163
+#define SYS_setresuid          164
+#define SYS_getresuid          165
+#define SYS_vm86               166
+#define SYS_query_module       167
+#define SYS_poll               168
+#define SYS_nfsservctl         169
+#define SYS_setresgid          170
+#define SYS_getresgid          171
+#define SYS_prctl              172
+#define SYS_rt_sigreturn       173
+#define SYS_rt_sigaction       174
+#define SYS_rt_sigprocmask     175
+#define SYS_rt_sigpending      176
+#define SYS_rt_sigtimedwait    177
+#define SYS_rt_sigqueueinfo    178
+#define SYS_rt_sigsuspend      179
+#define SYS_pread64            180
+#define SYS_pwrite64           181
+#define SYS_chown              182
+#define SYS_getcwd             183
+#define SYS_capget             184
+#define SYS_capset             185
+#define SYS_sigaltstack        186
+#define SYS_sendfile           187
+#define SYS_getpmsg            188
+#define SYS_putpmsg            189
+#define SYS_vfork              190
+#define SYS_ugetrlimit         191
+#define SYS_mmap2              192
+#define SYS_truncate64         193
+#define SYS_ftruncate64        194
+#define SYS_stat64             195
+#define SYS_lstat64            196
+#define SYS_fstat64            197
+#define SYS_lchown32           198
+#define SYS_getuid32           199
+#define SYS_getgid32           200
+#define SYS_geteuid32          201
+#define SYS_getegid32          202
+#define SYS_setreuid32         203
+#define SYS_setregid32         204
+#define SYS_getgroups32        205
+#define SYS_setgroups32        206
+#define SYS_fchown32           207
+#define SYS_setresuid32        208
+#define SYS_getresuid32        209
+#define SYS_setresgid32        210
+#define SYS_getresgid32        211
+#define SYS_chown32            212
+#define SYS_setuid32           213
+#define SYS_setgid32           214
+#define SYS_setfsuid32         215
+#define SYS_setfsgid32         216
+#define SYS_pivot_root         217
+#define SYS_mincore            218
+#define SYS_madvise            219
+#define SYS_madvise1           219
+#define SYS_getdents64         220
+#define SYS_fcntl64            221
+/* 223 is unused */
+#define SYS_gettid             224
+#define SYS_readahead          225
+#define SYS_setxattr           226
+#define SYS_lsetxattr          227
+#define SYS_fsetxattr          228
+#define SYS_getxattr           229
+#define SYS_lgetxattr          230
+#define SYS_fgetxattr          231
+#define SYS_listxattr          232
+#define SYS_llistxattr         233
+#define SYS_flistxattr         234
+#define SYS_removexattr        235
+#define SYS_lremovexattr       236
+#define SYS_fremovexattr       237
+#define SYS_tkill              238
+#define SYS_sendfile64         239
+#define SYS_futex              240
+#define SYS_sched_setaffinity  241
+#define SYS_sched_getaffinity  242
+#define SYS_set_thread_area    243
+#define SYS_get_thread_area    244
+#define SYS_io_setup           245
+#define SYS_io_destroy         246
+#define SYS_io_getevents       247
+#define SYS_io_submit          248
+#define SYS_io_cancel          249
+#define SYS_fadvise64          250
+/* 251 is available for reuse (was briefly sys_set_zone_reclaim) */
+#define SYS_exit_group         252
+#define SYS_lookup_dcookie     253
+#define SYS_epoll_create       254
+#define SYS_epoll_ctl          255
+#define SYS_epoll_wait         256
+#define SYS_remap_file_pages   257
+#define SYS_set_tid_address    258
+#define SYS_timer_create       259
+#define SYS_timer_settime      (SYS_timer_create+1)
+#define SYS_timer_gettime      (SYS_timer_create+2)
+#define SYS_timer_getoverrun   (SYS_timer_create+3)
+#define SYS_timer_delete       (SYS_timer_create+4)
+#define SYS_clock_settime      (SYS_timer_create+5)
+#define SYS_clock_gettime      (SYS_timer_create+6)
+#define SYS_clock_getres       (SYS_timer_create+7)
+#define SYS_clock_nanosleep    (SYS_timer_create+8)
+#define SYS_statfs64           268
+#define SYS_fstatfs64          269
+#define SYS_tgkill             270
+#define SYS_utimes             271
+#define SYS_fadvise64_64       272
+#define SYS_vserver            273
+#define SYS_mbind              274
+#define SYS_get_mempolicy      275
+#define SYS_set_mempolicy      276
+#define SYS_mq_open            277
+#define SYS_mq_unlink          (SYS_mq_open+1)
+#define SYS_mq_timedsend       (SYS_mq_open+2)
+#define SYS_mq_timedreceive    (SYS_mq_open+3)
+#define SYS_mq_notify          (SYS_mq_open+4)
+#define SYS_mq_getsetattr      (SYS_mq_open+5)
+#define SYS_kexec_load         283
+#define SYS_waitid             284
+/* #define SYS_sys_setaltroot  285 */
+#define SYS_add_key            286
+#define SYS_request_key        287
+#define SYS_keyctl             288
+#define SYS_ioprio_set         289
+#define SYS_ioprio_get         290
+#define SYS_inotify_init       291
+#define SYS_inotify_add_watch  292
+#define SYS_inotify_rm_watch   293
+#define SYS_migrate_pages      294
+#define SYS_openat             295
+#define SYS_mkdirat            296
+#define SYS_mknodat            297
+#define SYS_fchownat           298
+#define SYS_futimesat          299
+#define SYS_fstatat64          300
+#define SYS_unlinkat           301
+#define SYS_renameat           302
+#define SYS_linkat             303
+#define SYS_symlinkat          304
+#define SYS_readlinkat         305
+#define SYS_fchmodat           306
+#define SYS_faccessat          307
+#define SYS_pselect6           308
+#define SYS_ppoll              309
+#define SYS_unshare            310
+#define SYS_set_robust_list    311
+#define SYS_get_robust_list    312
+#define SYS_splice             313
+#define SYS_sync_file_range    314
+#define SYS_tee                315
+#define SYS_vmsplice           316
+#define SYS_move_pages         317
+#define SYS_getcpu             318
+#define SYS_epoll_pwait        319
+#define SYS_utimensat          320
+#define SYS_signalfd           321
+#define SYS_timerfd_create     322
+#define SYS_eventfd            323
+#define SYS_fallocate          324
+#define SYS_timerfd_settime    325
+#define SYS_timerfd_gettime    326
+#define SYS_signalfd4          327
+#define SYS_eventfd2           328
+#define SYS_epoll_create1      329
+#define SYS_dup3               330
+#define SYS_pipe2              331
+#define SYS_inotify_init1      332
+#define SYS_preadv             333
+#define SYS_pwritev            334
+
+/* fixup legacy 16-bit junk */
+#undef SYS_lchown
+#undef SYS_getuid
+#undef SYS_getgid
+#undef SYS_geteuid
+#undef SYS_getegid
+#undef SYS_setreuid
+#undef SYS_setregid
+#undef SYS_getgroups
+#undef SYS_setgroups
+#undef SYS_fchown
+#undef SYS_setresuid
+#undef SYS_getresuid
+#undef SYS_setresgid
+#undef SYS_getresgid
+#undef SYS_chown
+#undef SYS_setuid
+#undef SYS_setgid
+#undef SYS_setfsuid
+#undef SYS_setfsgid
+#define SYS_lchown SYS_lchown32
+#define SYS_getuid SYS_getuid32
+#define SYS_getgid SYS_getgid32
+#define SYS_geteuid SYS_geteuid32
+#define SYS_getegid SYS_getegid32
+#define SYS_setreuid SYS_setreuid32
+#define SYS_setregid SYS_setregid32
+#define SYS_getgroups SYS_getgroups32
+#define SYS_setgroups SYS_setgroups32
+#define SYS_fchown SYS_fchown32
+#define SYS_setresuid SYS_setresuid32
+#define SYS_getresuid SYS_getresuid32
+#define SYS_setresgid SYS_setresgid32
+#define SYS_getresgid SYS_getresgid32
+#define SYS_chown SYS_chown32
+#define SYS_setuid SYS_setuid32
+#define SYS_setgid SYS_setgid32
+#define SYS_setfsuid SYS_setfsuid32
+#define SYS_setfsgid SYS_setfsgid32
+
+
+/* fixup legacy 32-bit-vs-lfs64 junk */
+#undef SYS_getdents
+#undef SYS_ftruncate
+#undef SYS_truncate
+#undef SYS_stat
+#undef SYS_fstat
+#undef SYS_lstat
+#undef SYS_statfs
+#undef SYS_fstatfs
+#define SYS_getdents SYS_getdents64
+#define SYS_ftruncate SYS_ftruncate64
+#define SYS_truncate SYS_truncate64
+#define SYS_stat SYS_stat64
+#define SYS_fstat SYS_fstat64
+#define SYS_lstat SYS_lstat64
+#define SYS_statfs SYS_statfs64
+#define SYS_fstatfs SYS_fstatfs64
+#define SYS_fstatat SYS_fstatat64
+#define SYS_pread SYS_pread64
+#define SYS_pwrite SYS_pwrite64
+
+#undef SYS_getrlimit
+#define SYS_getrlimit SYS_ugetrlimit
+
+#undef SYS_select
+#define SYS_select SYS__newselect
index ee871a9..cd3c516 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef _SYSCALL_H
 #define _SYSCALL_H
 
+#include <sys/syscall.h>
+
 #define SYSCALL_LL(x) \
 ((union { long long ll; long l[2]; }){ .ll = x }).l[0], \
 ((union { long long ll; long l[2]; }){ .ll = x }).l[1]
@@ -22,481 +24,103 @@ static inline long __syscall_ret(unsigned long r)
 extern long __syscall_ret(unsigned long);
 #endif
 
-#define SYSCALL0 "int $128"
-
-#ifdef __PIC__
-#define SYSCALL "xchgl %%ebx,%2\n\t" SYSCALL0 "\n\txchgl %%ebx,%2"
-#define EBX "m"
-#else
-#define SYSCALL SYSCALL0
-#define EBX "b"
-#endif
-
 static inline long syscall0(long n)
 {
        unsigned long ret;
-       __asm__ __volatile__ (SYSCALL0 : "=a"(ret) : "a"(n) : "memory");
+       __asm__ __volatile__ ("int $128" : "=a"(ret) : "a"(n) : "memory");
        return __syscall_ret(ret);
 }
 
+#ifndef __PIC__
+
 static inline long syscall1(long n, long a1)
 {
        unsigned long ret;
-       __asm__ __volatile__ (SYSCALL : "=a"(ret) : "a"(n), EBX(a1) : "memory");
+       __asm__ __volatile__ ("int $128" : "=a"(ret) : "a"(n), "b"(a1) : "memory");
        return __syscall_ret(ret);
 }
 
 static inline long syscall2(long n, long a1, long a2)
 {
        unsigned long ret;
-       __asm__ __volatile__ (SYSCALL : "=a"(ret) : "a"(n), EBX(a1), "c"(a2) : "memory");
+       __asm__ __volatile__ ("int $128" : "=a"(ret) : "a"(n), "b"(a1), "c"(a2) : "memory");
        return __syscall_ret(ret);
 }
 
 static inline long syscall3(long n, long a1, long a2, long a3)
 {
        unsigned long ret;
-       __asm__ __volatile__ (SYSCALL : "=a"(ret) : "a"(n), EBX(a1), "c"(a2), "d"(a3) : "memory");
+       __asm__ __volatile__ ("int $128" : "=a"(ret) : "a"(n), "b"(a1), "c"(a2), "d"(a3) : "memory");
        return __syscall_ret(ret);
 }
 
 static inline long syscall4(long n, long a1, long a2, long a3, long a4)
 {
        unsigned long ret;
-       __asm__ __volatile__ (SYSCALL : "=a"(ret) : "a"(n), EBX(a1), "c"(a2), "d"(a3), "S"(a4) : "memory");
+       __asm__ __volatile__ ("int $128" : "=a"(ret) : "a"(n), "b"(a1), "c"(a2), "d"(a3), "S"(a4) : "memory");
        return __syscall_ret(ret);
 }
 
 static inline long syscall5(long n, long a1, long a2, long a3, long a4, long a5)
 {
        unsigned long ret;
-       __asm__ __volatile__ (SYSCALL : "=a"(ret) : "a"(n), EBX(a1), "c"(a2), "d"(a3), "S"(a4), "D"(a5) : "memory");
+       __asm__ __volatile__ ("int $128" : "=a"(ret) : "a"(n), "b"(a1), "c"(a2), "d"(a3), "S"(a4), "D"(a5) : "memory");
        return __syscall_ret(ret);
 }
 
-#ifdef __PIC__
-/* note: it's probably only safe to use this when a6 is on the stack */
 static inline long syscall6(long n, long a1, long a2, long a3, long a4, long a5, long a6)
 {
        unsigned long ret;
-       __asm__ __volatile__ ("xchgl %%ebx,%2 ; pushl %1 ; pushl %%ebp ; movl %%eax,%%ebp ; movl 4(%%esp),%%eax ; int $128 ; popl %%ebp ; popl %%ecx ; xchgl %%ebx,%2"
-               : "=a"(ret) : "g"(n), EBX(a1), "c"(a2), "d"(a3), "S"(a4), "D"(a5), "a"(a6) : "memory");
+       __asm__ __volatile__ ("pushl %%ebp ; mov %%eax,%%ebp ; movl %1,%%eax ; int $128 ; popl %%ebp"
+               : "=a"(ret) : "i"(n), "b"(a1), "c"(a2), "d"(a3), "S"(a4), "D"(a5), "a"(a6) : "memory");
        return __syscall_ret(ret);
 }
+
 #else
-static inline long syscall6(long n, long a1, long a2, long a3, long a4, long a5, long a6)
+
+static inline long syscall1(long n, long a1)
 {
        unsigned long ret;
-       __asm__ __volatile__ ("pushl %%ebp ; mov %1, %%ebp ; xchg %%ebp, %7 ; int $128 ; popl %%ebp"
-               : "=a"(ret) : "g"(n), EBX(a1), "c"(a2), "d"(a3), "S"(a4), "D"(a5), "a"(a6) : "memory");
+       __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx"
+               : "=a"(ret) : "a"(n), "r"(a1) : "memory");
        return __syscall_ret(ret);
 }
-#endif
 
-#define __NR_restart_syscall      0
-#define __NR_exit                1
-#define __NR_fork                2
-#define __NR_read                3
-#define __NR_write               4
-#define __NR_open                5
-#define __NR_close               6
-#define __NR_waitpid             7
-#define __NR_creat               8
-#define __NR_link                9
-#define __NR_unlink             10
-#define __NR_execve             11
-#define __NR_chdir              12
-#define __NR_time               13
-#define __NR_mknod              14
-#define __NR_chmod              15
-#define __NR_lchown             16
-#define __NR_break              17
-#define __NR_oldstat            18
-#define __NR_lseek              19
-#define __NR_getpid             20
-#define __NR_mount              21
-#define __NR_umount             22
-#define __NR_setuid             23
-#define __NR_getuid             24
-#define __NR_stime              25
-#define __NR_ptrace             26
-#define __NR_alarm              27
-#define __NR_oldfstat           28
-#define __NR_pause              29
-#define __NR_utime              30
-#define __NR_stty               31
-#define __NR_gtty               32
-#define __NR_access             33
-#define __NR_nice               34
-#define __NR_ftime              35
-#define __NR_sync               36
-#define __NR_kill               37
-#define __NR_rename             38
-#define __NR_mkdir              39
-#define __NR_rmdir              40
-#define __NR_dup                41
-#define __NR_pipe               42
-#define __NR_times              43
-#define __NR_prof               44
-#define __NR_brk                45
-#define __NR_setgid             46
-#define __NR_getgid             47
-#define __NR_signal             48
-#define __NR_geteuid            49
-#define __NR_getegid            50
-#define __NR_acct               51
-#define __NR_umount2            52
-#define __NR_lock               53
-#define __NR_ioctl              54
-#define __NR_fcntl              55
-#define __NR_mpx                56
-#define __NR_setpgid            57
-#define __NR_ulimit             58
-#define __NR_oldolduname        59
-#define __NR_umask              60
-#define __NR_chroot             61
-#define __NR_ustat              62
-#define __NR_dup2               63
-#define __NR_getppid            64
-#define __NR_getpgrp            65
-#define __NR_setsid             66
-#define __NR_sigaction          67
-#define __NR_sgetmask           68
-#define __NR_ssetmask           69
-#define __NR_setreuid           70
-#define __NR_setregid           71
-#define __NR_sigsuspend                 72
-#define __NR_sigpending                 73
-#define __NR_sethostname        74
-#define __NR_setrlimit          75
-#define __NR_getrlimit          76   /* Back compatible 2Gig limited rlimit */
-#define __NR_getrusage          77
-#define __NR_gettimeofday       78
-#define __NR_settimeofday       79
-#define __NR_getgroups          80
-#define __NR_setgroups          81
-#define __NR_select             82
-#define __NR_symlink            83
-#define __NR_oldlstat           84
-#define __NR_readlink           85
-#define __NR_uselib             86
-#define __NR_swapon             87
-#define __NR_reboot             88
-#define __NR_readdir            89
-#define __NR_mmap               90
-#define __NR_munmap             91
-#define __NR_truncate           92
-#define __NR_ftruncate          93
-#define __NR_fchmod             94
-#define __NR_fchown             95
-#define __NR_getpriority        96
-#define __NR_setpriority        97
-#define __NR_profil             98
-#define __NR_statfs            99
-#define __NR_fstatfs           100
-#define __NR_ioperm            101
-#define __NR_socketcall                102
-#define __NR_syslog            103
-#define __NR_setitimer         104
-#define __NR_getitimer         105
-#define __NR_stat              106
-#define __NR_lstat             107
-#define __NR_fstat             108
-#define __NR_olduname          109
-#define __NR_iopl              110
-#define __NR_vhangup           111
-#define __NR_idle              112
-#define __NR_vm86old           113
-#define __NR_wait4             114
-#define __NR_swapoff           115
-#define __NR_sysinfo           116
-#define __NR_ipc               117
-#define __NR_fsync             118
-#define __NR_sigreturn         119
-#define __NR_clone             120
-#define __NR_setdomainname     121
-#define __NR_uname             122
-#define __NR_modify_ldt                123
-#define __NR_adjtimex          124
-#define __NR_mprotect          125
-#define __NR_sigprocmask       126
-#define __NR_create_module     127
-#define __NR_init_module       128
-#define __NR_delete_module     129
-#define __NR_get_kernel_syms   130
-#define __NR_quotactl          131
-#define __NR_getpgid           132
-#define __NR_fchdir            133
-#define __NR_bdflush           134
-#define __NR_sysfs             135
-#define __NR_personality       136
-#define __NR_afs_syscall       137
-#define __NR_setfsuid          138
-#define __NR_setfsgid          139
-#define __NR__llseek           140
-#define __NR_getdents          141
-#define __NR__newselect                142
-#define __NR_flock             143
-#define __NR_msync             144
-#define __NR_readv             145
-#define __NR_writev            146
-#define __NR_getsid            147
-#define __NR_fdatasync         148
-#define __NR__sysctl           149
-#define __NR_mlock             150
-#define __NR_munlock           151
-#define __NR_mlockall          152
-#define __NR_munlockall                153
-#define __NR_sched_setparam            154
-#define __NR_sched_getparam            155
-#define __NR_sched_setscheduler                156
-#define __NR_sched_getscheduler                157
-#define __NR_sched_yield               158
-#define __NR_sched_get_priority_max    159
-#define __NR_sched_get_priority_min    160
-#define __NR_sched_rr_get_interval     161
-#define __NR_nanosleep         162
-#define __NR_mremap            163
-#define __NR_setresuid         164
-#define __NR_getresuid         165
-#define __NR_vm86              166
-#define __NR_query_module      167
-#define __NR_poll              168
-#define __NR_nfsservctl                169
-#define __NR_setresgid         170
-#define __NR_getresgid         171
-#define __NR_prctl              172
-#define __NR_rt_sigreturn      173
-#define __NR_rt_sigaction      174
-#define __NR_rt_sigprocmask    175
-#define __NR_rt_sigpending     176
-#define __NR_rt_sigtimedwait   177
-#define __NR_rt_sigqueueinfo   178
-#define __NR_rt_sigsuspend     179
-#define __NR_pread64           180
-#define __NR_pwrite64          181
-#define __NR_chown             182
-#define __NR_getcwd            183
-#define __NR_capget            184
-#define __NR_capset            185
-#define __NR_sigaltstack       186
-#define __NR_sendfile          187
-#define __NR_getpmsg           188
-#define __NR_putpmsg           189
-#define __NR_vfork             190
-#define __NR_ugetrlimit                191
-#define __NR_mmap2             192
-#define __NR_truncate64                193
-#define __NR_ftruncate64       194
-#define __NR_stat64            195
-#define __NR_lstat64           196
-#define __NR_fstat64           197
-#define __NR_lchown32          198
-#define __NR_getuid32          199
-#define __NR_getgid32          200
-#define __NR_geteuid32         201
-#define __NR_getegid32         202
-#define __NR_setreuid32                203
-#define __NR_setregid32                204
-#define __NR_getgroups32       205
-#define __NR_setgroups32       206
-#define __NR_fchown32          207
-#define __NR_setresuid32       208
-#define __NR_getresuid32       209
-#define __NR_setresgid32       210
-#define __NR_getresgid32       211
-#define __NR_chown32           212
-#define __NR_setuid32          213
-#define __NR_setgid32          214
-#define __NR_setfsuid32                215
-#define __NR_setfsgid32                216
-#define __NR_pivot_root                217
-#define __NR_mincore           218
-#define __NR_madvise           219
-#define __NR_madvise1          219
-#define __NR_getdents64                220
-#define __NR_fcntl64           221
-/* 223 is unused */
-#define __NR_gettid            224
-#define __NR_readahead         225
-#define __NR_setxattr          226
-#define __NR_lsetxattr         227
-#define __NR_fsetxattr         228
-#define __NR_getxattr          229
-#define __NR_lgetxattr         230
-#define __NR_fgetxattr         231
-#define __NR_listxattr         232
-#define __NR_llistxattr                233
-#define __NR_flistxattr                234
-#define __NR_removexattr       235
-#define __NR_lremovexattr      236
-#define __NR_fremovexattr      237
-#define __NR_tkill             238
-#define __NR_sendfile64                239
-#define __NR_futex             240
-#define __NR_sched_setaffinity 241
-#define __NR_sched_getaffinity 242
-#define __NR_set_thread_area   243
-#define __NR_get_thread_area   244
-#define __NR_io_setup          245
-#define __NR_io_destroy                246
-#define __NR_io_getevents      247
-#define __NR_io_submit         248
-#define __NR_io_cancel         249
-#define __NR_fadvise64         250
-/* 251 is available for reuse (was briefly sys_set_zone_reclaim) */
-#define __NR_exit_group                252
-#define __NR_lookup_dcookie    253
-#define __NR_epoll_create      254
-#define __NR_epoll_ctl         255
-#define __NR_epoll_wait                256
-#define __NR_remap_file_pages  257
-#define __NR_set_tid_address   258
-#define __NR_timer_create      259
-#define __NR_timer_settime     (__NR_timer_create+1)
-#define __NR_timer_gettime     (__NR_timer_create+2)
-#define __NR_timer_getoverrun  (__NR_timer_create+3)
-#define __NR_timer_delete      (__NR_timer_create+4)
-#define __NR_clock_settime     (__NR_timer_create+5)
-#define __NR_clock_gettime     (__NR_timer_create+6)
-#define __NR_clock_getres      (__NR_timer_create+7)
-#define __NR_clock_nanosleep   (__NR_timer_create+8)
-#define __NR_statfs64          268
-#define __NR_fstatfs64         269
-#define __NR_tgkill            270
-#define __NR_utimes            271
-#define __NR_fadvise64_64      272
-#define __NR_vserver           273
-#define __NR_mbind             274
-#define __NR_get_mempolicy     275
-#define __NR_set_mempolicy     276
-#define __NR_mq_open           277
-#define __NR_mq_unlink         (__NR_mq_open+1)
-#define __NR_mq_timedsend      (__NR_mq_open+2)
-#define __NR_mq_timedreceive   (__NR_mq_open+3)
-#define __NR_mq_notify         (__NR_mq_open+4)
-#define __NR_mq_getsetattr     (__NR_mq_open+5)
-#define __NR_kexec_load                283
-#define __NR_waitid            284
-/* #define __NR_sys_setaltroot 285 */
-#define __NR_add_key           286
-#define __NR_request_key       287
-#define __NR_keyctl            288
-#define __NR_ioprio_set                289
-#define __NR_ioprio_get                290
-#define __NR_inotify_init      291
-#define __NR_inotify_add_watch 292
-#define __NR_inotify_rm_watch  293
-#define __NR_migrate_pages     294
-#define __NR_openat            295
-#define __NR_mkdirat           296
-#define __NR_mknodat           297
-#define __NR_fchownat          298
-#define __NR_futimesat         299
-#define __NR_fstatat64         300
-#define __NR_unlinkat          301
-#define __NR_renameat          302
-#define __NR_linkat            303
-#define __NR_symlinkat         304
-#define __NR_readlinkat                305
-#define __NR_fchmodat          306
-#define __NR_faccessat         307
-#define __NR_pselect6          308
-#define __NR_ppoll             309
-#define __NR_unshare           310
-#define __NR_set_robust_list   311
-#define __NR_get_robust_list   312
-#define __NR_splice            313
-#define __NR_sync_file_range   314
-#define __NR_tee               315
-#define __NR_vmsplice          316
-#define __NR_move_pages                317
-#define __NR_getcpu            318
-#define __NR_epoll_pwait       319
-#define __NR_utimensat         320
-#define __NR_signalfd          321
-#define __NR_timerfd_create    322
-#define __NR_eventfd           323
-#define __NR_fallocate         324
-#define __NR_timerfd_settime   325
-#define __NR_timerfd_gettime   326
-#define __NR_signalfd4         327
-#define __NR_eventfd2          328
-#define __NR_epoll_create1     329
-#define __NR_dup3              330
-#define __NR_pipe2             331
-#define __NR_inotify_init1     332
-#define __NR_preadv            333
-#define __NR_pwritev           334
-
-/* fixup legacy 16-bit junk */
-#undef __NR_lchown
-#undef __NR_getuid
-#undef __NR_getgid
-#undef __NR_geteuid
-#undef __NR_getegid
-#undef __NR_setreuid
-#undef __NR_setregid
-#undef __NR_getgroups
-#undef __NR_setgroups
-#undef __NR_fchown
-#undef __NR_setresuid
-#undef __NR_getresuid
-#undef __NR_setresgid
-#undef __NR_getresgid
-#undef __NR_chown
-#undef __NR_setuid
-#undef __NR_setgid
-#undef __NR_setfsuid
-#undef __NR_setfsgid
-#define __NR_lchown __NR_lchown32
-#define __NR_getuid __NR_getuid32
-#define __NR_getgid __NR_getgid32
-#define __NR_geteuid __NR_geteuid32
-#define __NR_getegid __NR_getegid32
-#define __NR_setreuid __NR_setreuid32
-#define __NR_setregid __NR_setregid32
-#define __NR_getgroups __NR_getgroups32
-#define __NR_setgroups __NR_setgroups32
-#define __NR_fchown __NR_fchown32
-#define __NR_setresuid __NR_setresuid32
-#define __NR_getresuid __NR_getresuid32
-#define __NR_setresgid __NR_setresgid32
-#define __NR_getresgid __NR_getresgid32
-#define __NR_chown __NR_chown32
-#define __NR_setuid __NR_setuid32
-#define __NR_setgid __NR_setgid32
-#define __NR_setfsuid __NR_setfsuid32
-#define __NR_setfsgid __NR_setfsgid32
+static inline long syscall2(long n, long a1, long a2)
+{
+       unsigned long ret;
+       __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx"
+               : "=a"(ret) : "a"(n), "r"(a1), "c"(a2) : "memory");
+       return __syscall_ret(ret);
+}
 
+static inline long syscall3(long n, long a1, long a2, long a3)
+{
+       unsigned long ret;
+       __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx"
+               : "=a"(ret) : "a"(n), "r"(a1), "c"(a2), "d"(a3) : "memory");
+       return __syscall_ret(ret);
+}
 
-/* fixup legacy 32-bit-vs-lfs64 junk */
-#undef __NR_getdents
-#undef __NR_ftruncate
-#undef __NR_truncate
-#undef __NR_stat
-#undef __NR_fstat
-#undef __NR_lstat
-#undef __NR_statfs
-#undef __NR_fstatfs
-#define __NR_getdents __NR_getdents64
-#define __NR_ftruncate __NR_ftruncate64
-#define __NR_truncate __NR_truncate64
-#define __NR_stat __NR_stat64
-#define __NR_fstat __NR_fstat64
-#define __NR_lstat __NR_lstat64
-#define __NR_statfs __NR_statfs64
-#define __NR_fstatfs __NR_fstatfs64
-#define __NR_fstatat __NR_fstatat64
-#define __NR_pread __NR_pread64
-#define __NR_pwrite __NR_pwrite64
+static inline long syscall4(long n, long a1, long a2, long a3, long a4)
+{
+       unsigned long ret;
+       __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx"
+               : "=a"(ret) : "a"(n), "r"(a1), "c"(a2), "d"(a3), "S"(a4) : "memory");
+       return __syscall_ret(ret);
+}
 
-#undef __NR_getrlimit
-#define __NR_getrlimit __NR_ugetrlimit
+static inline long syscall5(long n, long a1, long a2, long a3, long a4, long a5)
+{
+       unsigned long ret;
+       __asm__ __volatile__ ("pushl %%ebx ; mov %%eax,%%ebx ; movl %1,%%eax ; int $128 ; popl %%ebx"
+               : "=a"(ret) : "i"(n), "a"(a1), "c"(a2), "d"(a3), "S"(a4), "D"(a5) : "memory");
+       return __syscall_ret(ret);
+}
 
-#undef __NR_select
-#define __NR_select __NR__newselect
+#define syscall6(n,a1,a2,a3,a4,a5,a6) __syscall((n),(a1),(a2),(a3),(a4),(a5),(a6))
 
+#endif
 
 #define __SC_socket      1
 #define __SC_bind        2
@@ -538,4 +162,6 @@ static inline long syscall6(long n, long a1, long a2, long a3, long a4, long a5,
 #define __syscall_ioctl(fd,ioc,arg)           syscall3(__NR_ioctl, (fd), (ioc), (long)(arg))
 #define __syscall_exit(code)                  syscall1(__NR_exit, code)
 
+long __syscall(long, ...);
+
 #endif
diff --git a/arch/x86_64/bits/syscall.h b/arch/x86_64/bits/syscall.h
new file mode 100644 (file)
index 0000000..ca75019
--- /dev/null
@@ -0,0 +1,631 @@
+#define __NR_read                              0
+#define __NR_write                             1
+#define __NR_open                              2
+#define __NR_close                             3
+#define __NR_stat                              4
+#define __NR_fstat                             5
+#define __NR_lstat                             6
+#define __NR_poll                              7
+#define __NR_lseek                             8
+#define __NR_mmap                              9
+#define __NR_mprotect                  10
+#define __NR_munmap                            11
+#define __NR_brk                               12
+#define __NR_rt_sigaction              13
+#define __NR_rt_sigprocmask            14
+#define __NR_rt_sigreturn              15
+#define __NR_ioctl                             16
+#define __NR_pread64                   17
+#define __NR_pwrite64                  18
+#define __NR_readv                             19
+#define __NR_writev                            20
+#define __NR_access                            21
+#define __NR_pipe                              22
+#define __NR_select                            23
+#define __NR_sched_yield               24
+#define __NR_mremap                            25
+#define __NR_msync                             26
+#define __NR_mincore                   27
+#define __NR_madvise                   28
+#define __NR_shmget                            29
+#define __NR_shmat                             30
+#define __NR_shmctl                            31
+#define __NR_dup                               32
+#define __NR_dup2                              33
+#define __NR_pause                             34
+#define __NR_nanosleep                 35
+#define __NR_getitimer                 36
+#define __NR_alarm                             37
+#define __NR_setitimer                 38
+#define __NR_getpid                            39
+#define __NR_sendfile                  40
+#define __NR_socket                            41
+#define __NR_connect                   42
+#define __NR_accept                            43
+#define __NR_sendto                            44
+#define __NR_recvfrom                  45
+#define __NR_sendmsg                   46
+#define __NR_recvmsg                   47
+#define __NR_shutdown                  48
+#define __NR_bind                              49
+#define __NR_listen                            50
+#define __NR_getsockname               51
+#define __NR_getpeername               52
+#define __NR_socketpair                        53
+#define __NR_setsockopt                        54
+#define __NR_getsockopt                        55
+#define __NR_clone                             56
+#define __NR_fork                              57
+#define __NR_vfork                             58
+#define __NR_execve                            59
+#define __NR_exit                              60
+#define __NR_wait4                             61
+#define __NR_kill                              62
+#define __NR_uname                             63
+#define __NR_semget                            64
+#define __NR_semop                             65
+#define __NR_semctl                            66
+#define __NR_shmdt                             67
+#define __NR_msgget                            68
+#define __NR_msgsnd                            69
+#define __NR_msgrcv                            70
+#define __NR_msgctl                            71
+#define __NR_fcntl                             72
+#define __NR_flock                             73
+#define __NR_fsync                             74
+#define __NR_fdatasync                 75
+#define __NR_truncate                  76
+#define __NR_ftruncate                 77
+#define __NR_getdents                  78
+#define __NR_getcwd                            79
+#define __NR_chdir                             80
+#define __NR_fchdir                            81
+#define __NR_rename                            82
+#define __NR_mkdir                             83
+#define __NR_rmdir                             84
+#define __NR_creat                             85
+#define __NR_link                              86
+#define __NR_unlink                            87
+#define __NR_symlink                   88
+#define __NR_readlink                  89
+#define __NR_chmod                             90
+#define __NR_fchmod                            91
+#define __NR_chown                             92
+#define __NR_fchown                            93
+#define __NR_lchown                            94
+#define __NR_umask                             95
+#define __NR_gettimeofday              96
+#define __NR_getrlimit                 97
+#define __NR_getrusage                 98
+#define __NR_sysinfo                   99
+#define __NR_times                             100
+#define __NR_ptrace                            101
+#define __NR_getuid                            102
+#define __NR_syslog                            103
+#define __NR_getgid                            104
+#define __NR_setuid                            105
+#define __NR_setgid                            106
+#define __NR_geteuid                   107
+#define __NR_getegid                   108
+#define __NR_setpgid                   109
+#define __NR_getppid                   110
+#define __NR_getpgrp                   111
+#define __NR_setsid                            112
+#define __NR_setreuid                  113
+#define __NR_setregid                  114
+#define __NR_getgroups                 115
+#define __NR_setgroups                 116
+#define __NR_setresuid                 117
+#define __NR_getresuid                 118
+#define __NR_setresgid                 119
+#define __NR_getresgid                 120
+#define __NR_getpgid                   121
+#define __NR_setfsuid                  122
+#define __NR_setfsgid                  123
+#define __NR_getsid                            124
+#define __NR_capget                            125
+#define __NR_capset                            126
+#define __NR_rt_sigpending             127
+#define __NR_rt_sigtimedwait   128
+#define __NR_rt_sigqueueinfo   129
+#define __NR_rt_sigsuspend             130
+#define __NR_sigaltstack               131
+#define __NR_utime                             132
+#define __NR_mknod                             133
+#define __NR_uselib                            134
+#define __NR_personality               135
+#define __NR_ustat                             136
+#define __NR_statfs                            137
+#define __NR_fstatfs                   138
+#define __NR_sysfs                             139
+#define __NR_getpriority                       140
+#define __NR_setpriority                       141
+#define __NR_sched_setparam                    142
+#define __NR_sched_getparam                    143
+#define __NR_sched_setscheduler                144
+#define __NR_sched_getscheduler                145
+#define __NR_sched_get_priority_max    146
+#define __NR_sched_get_priority_min    147
+#define __NR_sched_rr_get_interval     148
+#define __NR_mlock                                     149
+#define __NR_munlock                           150
+#define __NR_mlockall                          151
+#define __NR_munlockall                                152
+#define __NR_vhangup                           153
+#define __NR_modify_ldt                                154
+#define __NR_pivot_root                                155
+#define __NR__sysctl                           156
+#define __NR_prctl                                     157
+#define __NR_arch_prctl                                158
+#define __NR_adjtimex                          159
+#define __NR_setrlimit                         160
+#define __NR_chroot                                    161
+#define __NR_sync                                      162
+#define __NR_acct                                      163
+#define __NR_settimeofday                      164
+#define __NR_mount                                     165
+#define __NR_umount2                           166
+#define __NR_swapon                                    167
+#define __NR_swapoff                           168
+#define __NR_reboot                                    169
+#define __NR_sethostname                       170
+#define __NR_setdomainname                     171
+#define __NR_iopl                                      172
+#define __NR_ioperm                                    173
+#define __NR_create_module                     174
+#define __NR_init_module                       175
+#define __NR_delete_module                     176
+#define __NR_get_kernel_syms           177
+#define __NR_query_module                      178
+#define __NR_quotactl                          179
+#define __NR_nfsservctl                                180
+#define __NR_getpmsg                           181
+#define __NR_putpmsg                           182
+#define __NR_afs_syscall                       183
+#define __NR_tuxcall                           184
+#define __NR_security                          185
+#define __NR_gettid                                    186
+#define __NR_readahead                         187
+#define __NR_setxattr                          188
+#define __NR_lsetxattr                         189
+#define __NR_fsetxattr                         190
+#define __NR_getxattr                          191
+#define __NR_lgetxattr                         192
+#define __NR_fgetxattr                         193
+#define __NR_listxattr                         194
+#define __NR_llistxattr                                195
+#define __NR_flistxattr                                196
+#define __NR_removexattr                       197
+#define __NR_lremovexattr                      198
+#define __NR_fremovexattr                      199
+#define __NR_tkill                                     200
+#define __NR_time                                      201
+#define __NR_futex                                     202
+#define __NR_sched_setaffinity         203
+#define __NR_sched_getaffinity         204
+#define __NR_set_thread_area           205
+#define __NR_io_setup                          206
+#define __NR_io_destroy                                207
+#define __NR_io_getevents                      208
+#define __NR_io_submit                         209
+#define __NR_io_cancel                         210
+#define __NR_get_thread_area           211
+#define __NR_lookup_dcookie                    212
+#define __NR_epoll_create                      213
+#define __NR_epoll_ctl_old                     214
+#define __NR_epoll_wait_old                    215
+#define __NR_remap_file_pages          216
+#define __NR_getdents64                                217
+#define __NR_set_tid_address           218
+#define __NR_restart_syscall           219
+#define __NR_semtimedop                                220
+#define __NR_fadvise64                         221
+#define __NR_timer_create                      222
+#define __NR_timer_settime                     223
+#define __NR_timer_gettime                     224
+#define __NR_timer_getoverrun          225
+#define __NR_timer_delete                      226
+#define __NR_clock_settime                     227
+#define __NR_clock_gettime                     228
+#define __NR_clock_getres                      229
+#define __NR_clock_nanosleep           230
+#define __NR_exit_group                                231
+#define __NR_epoll_wait                                232
+#define __NR_epoll_ctl                         233
+#define __NR_tgkill                                    234
+#define __NR_utimes                                    235
+#define __NR_vserver                           236
+#define __NR_mbind                                     237
+#define __NR_set_mempolicy                     238
+#define __NR_get_mempolicy                     239
+#define __NR_mq_open                           240
+#define __NR_mq_unlink                         241
+#define __NR_mq_timedsend                      242
+#define __NR_mq_timedreceive           243
+#define __NR_mq_notify                         244
+#define __NR_mq_getsetattr                     245
+#define __NR_kexec_load                                246
+#define __NR_waitid                                    247
+#define __NR_add_key                           248
+#define __NR_request_key                       249
+#define __NR_keyctl                                    250
+#define __NR_ioprio_set                                251
+#define __NR_ioprio_get                                252
+#define __NR_inotify_init                      253
+#define __NR_inotify_add_watch         254
+#define __NR_inotify_rm_watch          255
+#define __NR_migrate_pages                     256
+#define __NR_openat                                    257
+#define __NR_mkdirat                           258
+#define __NR_mknodat                           259
+#define __NR_fchownat                          260
+#define __NR_futimesat                         261
+#define __NR_newfstatat                                262
+#define __NR_unlinkat                          263
+#define __NR_renameat                          264
+#define __NR_linkat                                    265
+#define __NR_symlinkat                         266
+#define __NR_readlinkat                                267
+#define __NR_fchmodat                          268
+#define __NR_faccessat                         269
+#define __NR_pselect6                          270
+#define __NR_ppoll                                     271
+#define __NR_unshare                           272
+#define __NR_set_robust_list           273
+#define __NR_get_robust_list           274
+#define __NR_splice                                    275
+#define __NR_tee                                       276
+#define __NR_sync_file_range           277
+#define __NR_vmsplice                          278
+#define __NR_move_pages                                279
+#define __NR_utimensat                         280
+#define __NR_epoll_pwait                       281
+#define __NR_signalfd                          282
+#define __NR_timerfd_create                    283
+#define __NR_eventfd                           284
+#define __NR_fallocate                         285
+#define __NR_timerfd_settime           286
+#define __NR_timerfd_gettime           287
+#define __NR_accept4                           288
+#define __NR_signalfd4                         289
+#define __NR_eventfd2                          290
+#define __NR_epoll_create1                     291
+#define __NR_dup3                                      292
+#define __NR_pipe2                                     293
+#define __NR_inotify_init1                     294
+#define __NR_preadv                                    295
+#define __NR_pwritev                           296
+#define __NR_rt_tgsigqueueinfo         297
+#define __NR_perf_event_open           298
+#define __NR_recvmmsg                          299
+#define __NR_fanotify_init                     300
+#define __NR_fanotify_mark                     301
+#define __NR_prlimit64                         302
+
+#undef __NR_fstatat
+#undef __NR_pread
+#undef __NR_pwrite
+#undef __NR_getdents
+#define __NR_fstatat __NR_newfstatat
+#define __NR_pread __NR_pread64
+#define __NR_pwrite __NR_pwrite64
+#define __NR_getdents __NR_getdents64
+
+
+
+/* Repeat with SYS_ prefix */
+
+#define SYS_read                               0
+#define SYS_write                              1
+#define SYS_open                               2
+#define SYS_close                              3
+#define SYS_stat                               4
+#define SYS_fstat                              5
+#define SYS_lstat                              6
+#define SYS_poll                               7
+#define SYS_lseek                              8
+#define SYS_mmap                               9
+#define SYS_mprotect                   10
+#define SYS_munmap                             11
+#define SYS_brk                                12
+#define SYS_rt_sigaction               13
+#define SYS_rt_sigprocmask             14
+#define SYS_rt_sigreturn               15
+#define SYS_ioctl                              16
+#define SYS_pread64                    17
+#define SYS_pwrite64                   18
+#define SYS_readv                              19
+#define SYS_writev                             20
+#define SYS_access                             21
+#define SYS_pipe                               22
+#define SYS_select                             23
+#define SYS_sched_yield                24
+#define SYS_mremap                             25
+#define SYS_msync                              26
+#define SYS_mincore                    27
+#define SYS_madvise                    28
+#define SYS_shmget                             29
+#define SYS_shmat                              30
+#define SYS_shmctl                             31
+#define SYS_dup                                32
+#define SYS_dup2                               33
+#define SYS_pause                              34
+#define SYS_nanosleep                  35
+#define SYS_getitimer                  36
+#define SYS_alarm                              37
+#define SYS_setitimer                  38
+#define SYS_getpid                             39
+#define SYS_sendfile                   40
+#define SYS_socket                             41
+#define SYS_connect                    42
+#define SYS_accept                             43
+#define SYS_sendto                             44
+#define SYS_recvfrom                   45
+#define SYS_sendmsg                    46
+#define SYS_recvmsg                    47
+#define SYS_shutdown                   48
+#define SYS_bind                               49
+#define SYS_listen                             50
+#define SYS_getsockname                51
+#define SYS_getpeername                52
+#define SYS_socketpair                 53
+#define SYS_setsockopt                 54
+#define SYS_getsockopt                 55
+#define SYS_clone                              56
+#define SYS_fork                               57
+#define SYS_vfork                              58
+#define SYS_execve                             59
+#define SYS_exit                               60
+#define SYS_wait4                              61
+#define SYS_kill                               62
+#define SYS_uname                              63
+#define SYS_semget                             64
+#define SYS_semop                              65
+#define SYS_semctl                             66
+#define SYS_shmdt                              67
+#define SYS_msgget                             68
+#define SYS_msgsnd                             69
+#define SYS_msgrcv                             70
+#define SYS_msgctl                             71
+#define SYS_fcntl                              72
+#define SYS_flock                              73
+#define SYS_fsync                              74
+#define SYS_fdatasync                  75
+#define SYS_truncate                   76
+#define SYS_ftruncate                  77
+#define SYS_getdents                   78
+#define SYS_getcwd                             79
+#define SYS_chdir                              80
+#define SYS_fchdir                             81
+#define SYS_rename                             82
+#define SYS_mkdir                              83
+#define SYS_rmdir                              84
+#define SYS_creat                              85
+#define SYS_link                               86
+#define SYS_unlink                             87
+#define SYS_symlink                    88
+#define SYS_readlink                   89
+#define SYS_chmod                              90
+#define SYS_fchmod                             91
+#define SYS_chown                              92
+#define SYS_fchown                             93
+#define SYS_lchown                             94
+#define SYS_umask                              95
+#define SYS_gettimeofday               96
+#define SYS_getrlimit                  97
+#define SYS_getrusage                  98
+#define SYS_sysinfo                    99
+#define SYS_times                              100
+#define SYS_ptrace                             101
+#define SYS_getuid                             102
+#define SYS_syslog                             103
+#define SYS_getgid                             104
+#define SYS_setuid                             105
+#define SYS_setgid                             106
+#define SYS_geteuid                    107
+#define SYS_getegid                    108
+#define SYS_setpgid                    109
+#define SYS_getppid                    110
+#define SYS_getpgrp                    111
+#define SYS_setsid                             112
+#define SYS_setreuid                   113
+#define SYS_setregid                   114
+#define SYS_getgroups                  115
+#define SYS_setgroups                  116
+#define SYS_setresuid                  117
+#define SYS_getresuid                  118
+#define SYS_setresgid                  119
+#define SYS_getresgid                  120
+#define SYS_getpgid                    121
+#define SYS_setfsuid                   122
+#define SYS_setfsgid                   123
+#define SYS_getsid                             124
+#define SYS_capget                             125
+#define SYS_capset                             126
+#define SYS_rt_sigpending              127
+#define SYS_rt_sigtimedwait    128
+#define SYS_rt_sigqueueinfo    129
+#define SYS_rt_sigsuspend              130
+#define SYS_sigaltstack                131
+#define SYS_utime                              132
+#define SYS_mknod                              133
+#define SYS_uselib                             134
+#define SYS_personality                135
+#define SYS_ustat                              136
+#define SYS_statfs                             137
+#define SYS_fstatfs                    138
+#define SYS_sysfs                              139
+#define SYS_getpriority                        140
+#define SYS_setpriority                        141
+#define SYS_sched_setparam                     142
+#define SYS_sched_getparam                     143
+#define SYS_sched_setscheduler         144
+#define SYS_sched_getscheduler         145
+#define SYS_sched_get_priority_max     146
+#define SYS_sched_get_priority_min     147
+#define SYS_sched_rr_get_interval      148
+#define SYS_mlock                                      149
+#define SYS_munlock                            150
+#define SYS_mlockall                           151
+#define SYS_munlockall                         152
+#define SYS_vhangup                            153
+#define SYS_modify_ldt                         154
+#define SYS_pivot_root                         155
+#define SYS__sysctl                            156
+#define SYS_prctl                                      157
+#define SYS_arch_prctl                         158
+#define SYS_adjtimex                           159
+#define SYS_setrlimit                          160
+#define SYS_chroot                                     161
+#define SYS_sync                                       162
+#define SYS_acct                                       163
+#define SYS_settimeofday                       164
+#define SYS_mount                                      165
+#define SYS_umount2                            166
+#define SYS_swapon                                     167
+#define SYS_swapoff                            168
+#define SYS_reboot                                     169
+#define SYS_sethostname                        170
+#define SYS_setdomainname                      171
+#define SYS_iopl                                       172
+#define SYS_ioperm                                     173
+#define SYS_create_module                      174
+#define SYS_init_module                        175
+#define SYS_delete_module                      176
+#define SYS_get_kernel_syms            177
+#define SYS_query_module                       178
+#define SYS_quotactl                           179
+#define SYS_nfsservctl                         180
+#define SYS_getpmsg                            181
+#define SYS_putpmsg                            182
+#define SYS_afs_syscall                        183
+#define SYS_tuxcall                            184
+#define SYS_security                           185
+#define SYS_gettid                                     186
+#define SYS_readahead                          187
+#define SYS_setxattr                           188
+#define SYS_lsetxattr                          189
+#define SYS_fsetxattr                          190
+#define SYS_getxattr                           191
+#define SYS_lgetxattr                          192
+#define SYS_fgetxattr                          193
+#define SYS_listxattr                          194
+#define SYS_llistxattr                         195
+#define SYS_flistxattr                         196
+#define SYS_removexattr                        197
+#define SYS_lremovexattr                       198
+#define SYS_fremovexattr                       199
+#define SYS_tkill                                      200
+#define SYS_time                                       201
+#define SYS_futex                                      202
+#define SYS_sched_setaffinity          203
+#define SYS_sched_getaffinity          204
+#define SYS_set_thread_area            205
+#define SYS_io_setup                           206
+#define SYS_io_destroy                         207
+#define SYS_io_getevents                       208
+#define SYS_io_submit                          209
+#define SYS_io_cancel                          210
+#define SYS_get_thread_area            211
+#define SYS_lookup_dcookie                     212
+#define SYS_epoll_create                       213
+#define SYS_epoll_ctl_old                      214
+#define SYS_epoll_wait_old                     215
+#define SYS_remap_file_pages           216
+#define SYS_getdents64                         217
+#define SYS_set_tid_address            218
+#define SYS_restart_syscall            219
+#define SYS_semtimedop                         220
+#define SYS_fadvise64                          221
+#define SYS_timer_create                       222
+#define SYS_timer_settime                      223
+#define SYS_timer_gettime                      224
+#define SYS_timer_getoverrun           225
+#define SYS_timer_delete                       226
+#define SYS_clock_settime                      227
+#define SYS_clock_gettime                      228
+#define SYS_clock_getres                       229
+#define SYS_clock_nanosleep            230
+#define SYS_exit_group                         231
+#define SYS_epoll_wait                         232
+#define SYS_epoll_ctl                          233
+#define SYS_tgkill                                     234
+#define SYS_utimes                                     235
+#define SYS_vserver                            236
+#define SYS_mbind                                      237
+#define SYS_set_mempolicy                      238
+#define SYS_get_mempolicy                      239
+#define SYS_mq_open                            240
+#define SYS_mq_unlink                          241
+#define SYS_mq_timedsend                       242
+#define SYS_mq_timedreceive            243
+#define SYS_mq_notify                          244
+#define SYS_mq_getsetattr                      245
+#define SYS_kexec_load                         246
+#define SYS_waitid                                     247
+#define SYS_add_key                            248
+#define SYS_request_key                        249
+#define SYS_keyctl                                     250
+#define SYS_ioprio_set                         251
+#define SYS_ioprio_get                         252
+#define SYS_inotify_init                       253
+#define SYS_inotify_add_watch          254
+#define SYS_inotify_rm_watch           255
+#define SYS_migrate_pages                      256
+#define SYS_openat                                     257
+#define SYS_mkdirat                            258
+#define SYS_mknodat                            259
+#define SYS_fchownat                           260
+#define SYS_futimesat                          261
+#define SYS_newfstatat                         262
+#define SYS_unlinkat                           263
+#define SYS_renameat                           264
+#define SYS_linkat                                     265
+#define SYS_symlinkat                          266
+#define SYS_readlinkat                         267
+#define SYS_fchmodat                           268
+#define SYS_faccessat                          269
+#define SYS_pselect6                           270
+#define SYS_ppoll                                      271
+#define SYS_unshare                            272
+#define SYS_set_robust_list            273
+#define SYS_get_robust_list            274
+#define SYS_splice                                     275
+#define SYS_tee                                        276
+#define SYS_sync_file_range            277
+#define SYS_vmsplice                           278
+#define SYS_move_pages                         279
+#define SYS_utimensat                          280
+#define SYS_epoll_pwait                        281
+#define SYS_signalfd                           282
+#define SYS_timerfd_create                     283
+#define SYS_eventfd                            284
+#define SYS_fallocate                          285
+#define SYS_timerfd_settime            286
+#define SYS_timerfd_gettime            287
+#define SYS_accept4                            288
+#define SYS_signalfd4                          289
+#define SYS_eventfd2                           290
+#define SYS_epoll_create1                      291
+#define SYS_dup3                                       292
+#define SYS_pipe2                                      293
+#define SYS_inotify_init1                      294
+#define SYS_preadv                                     295
+#define SYS_pwritev                            296
+#define SYS_rt_tgsigqueueinfo          297
+#define SYS_perf_event_open            298
+#define SYS_recvmmsg                           299
+#define SYS_fanotify_init                      300
+#define SYS_fanotify_mark                      301
+#define SYS_prlimit64                          302
+
+#undef SYS_fstatat
+#undef SYS_pread
+#undef SYS_pwrite
+#undef SYS_getdents
+#define SYS_fstatat SYS_newfstatat
+#define SYS_pread SYS_pread64
+#define SYS_pwrite SYS_pwrite64
+#define SYS_getdents SYS_getdents64
+
+
index 3b6f70e..9f22e6b 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef _SYSCALL_H
 #define _SYSCALL_H
 
+#include <sys/syscall.h>
+
 #define SYSCALL_LL(x) x, 0
 #define SYSCALL_SIGSET_SIZE 8
 
@@ -86,319 +88,6 @@ static inline long syscall6(long n, long a1, long a2, long a3, long a4,
        return __syscall_ret(ret);
 }
 
-#define __NR_read                              0
-#define __NR_write                             1
-#define __NR_open                              2
-#define __NR_close                             3
-#define __NR_stat                              4
-#define __NR_fstat                             5
-#define __NR_lstat                             6
-#define __NR_poll                              7
-#define __NR_lseek                             8
-#define __NR_mmap                              9
-#define __NR_mprotect                  10
-#define __NR_munmap                            11
-#define __NR_brk                               12
-#define __NR_rt_sigaction              13
-#define __NR_rt_sigprocmask            14
-#define __NR_rt_sigreturn              15
-#define __NR_ioctl                             16
-#define __NR_pread64                   17
-#define __NR_pwrite64                  18
-#define __NR_readv                             19
-#define __NR_writev                            20
-#define __NR_access                            21
-#define __NR_pipe                              22
-#define __NR_select                            23
-#define __NR_sched_yield               24
-#define __NR_mremap                            25
-#define __NR_msync                             26
-#define __NR_mincore                   27
-#define __NR_madvise                   28
-#define __NR_shmget                            29
-#define __NR_shmat                             30
-#define __NR_shmctl                            31
-#define __NR_dup                               32
-#define __NR_dup2                              33
-#define __NR_pause                             34
-#define __NR_nanosleep                 35
-#define __NR_getitimer                 36
-#define __NR_alarm                             37
-#define __NR_setitimer                 38
-#define __NR_getpid                            39
-#define __NR_sendfile                  40
-#define __NR_socket                            41
-#define __NR_connect                   42
-#define __NR_accept                            43
-#define __NR_sendto                            44
-#define __NR_recvfrom                  45
-#define __NR_sendmsg                   46
-#define __NR_recvmsg                   47
-#define __NR_shutdown                  48
-#define __NR_bind                              49
-#define __NR_listen                            50
-#define __NR_getsockname               51
-#define __NR_getpeername               52
-#define __NR_socketpair                        53
-#define __NR_setsockopt                        54
-#define __NR_getsockopt                        55
-#define __NR_clone                             56
-#define __NR_fork                              57
-#define __NR_vfork                             58
-#define __NR_execve                            59
-#define __NR_exit                              60
-#define __NR_wait4                             61
-#define __NR_kill                              62
-#define __NR_uname                             63
-#define __NR_semget                            64
-#define __NR_semop                             65
-#define __NR_semctl                            66
-#define __NR_shmdt                             67
-#define __NR_msgget                            68
-#define __NR_msgsnd                            69
-#define __NR_msgrcv                            70
-#define __NR_msgctl                            71
-#define __NR_fcntl                             72
-#define __NR_flock                             73
-#define __NR_fsync                             74
-#define __NR_fdatasync                 75
-#define __NR_truncate                  76
-#define __NR_ftruncate                 77
-#define __NR_getdents                  78
-#define __NR_getcwd                            79
-#define __NR_chdir                             80
-#define __NR_fchdir                            81
-#define __NR_rename                            82
-#define __NR_mkdir                             83
-#define __NR_rmdir                             84
-#define __NR_creat                             85
-#define __NR_link                              86
-#define __NR_unlink                            87
-#define __NR_symlink                   88
-#define __NR_readlink                  89
-#define __NR_chmod                             90
-#define __NR_fchmod                            91
-#define __NR_chown                             92
-#define __NR_fchown                            93
-#define __NR_lchown                            94
-#define __NR_umask                             95
-#define __NR_gettimeofday              96
-#define __NR_getrlimit                 97
-#define __NR_getrusage                 98
-#define __NR_sysinfo                   99
-#define __NR_times                             100
-#define __NR_ptrace                            101
-#define __NR_getuid                            102
-#define __NR_syslog                            103
-#define __NR_getgid                            104
-#define __NR_setuid                            105
-#define __NR_setgid                            106
-#define __NR_geteuid                   107
-#define __NR_getegid                   108
-#define __NR_setpgid                   109
-#define __NR_getppid                   110
-#define __NR_getpgrp                   111
-#define __NR_setsid                            112
-#define __NR_setreuid                  113
-#define __NR_setregid                  114
-#define __NR_getgroups                 115
-#define __NR_setgroups                 116
-#define __NR_setresuid                 117
-#define __NR_getresuid                 118
-#define __NR_setresgid                 119
-#define __NR_getresgid                 120
-#define __NR_getpgid                   121
-#define __NR_setfsuid                  122
-#define __NR_setfsgid                  123
-#define __NR_getsid                            124
-#define __NR_capget                            125
-#define __NR_capset                            126
-#define __NR_rt_sigpending             127
-#define __NR_rt_sigtimedwait   128
-#define __NR_rt_sigqueueinfo   129
-#define __NR_rt_sigsuspend             130
-#define __NR_sigaltstack               131
-#define __NR_utime                             132
-#define __NR_mknod                             133
-#define __NR_uselib                            134
-#define __NR_personality               135
-#define __NR_ustat                             136
-#define __NR_statfs                            137
-#define __NR_fstatfs                   138
-#define __NR_sysfs                             139
-#define __NR_getpriority                       140
-#define __NR_setpriority                       141
-#define __NR_sched_setparam                    142
-#define __NR_sched_getparam                    143
-#define __NR_sched_setscheduler                144
-#define __NR_sched_getscheduler                145
-#define __NR_sched_get_priority_max    146
-#define __NR_sched_get_priority_min    147
-#define __NR_sched_rr_get_interval     148
-#define __NR_mlock                                     149
-#define __NR_munlock                           150
-#define __NR_mlockall                          151
-#define __NR_munlockall                                152
-#define __NR_vhangup                           153
-#define __NR_modify_ldt                                154
-#define __NR_pivot_root                                155
-#define __NR__sysctl                           156
-#define __NR_prctl                                     157
-#define __NR_arch_prctl                                158
-#define __NR_adjtimex                          159
-#define __NR_setrlimit                         160
-#define __NR_chroot                                    161
-#define __NR_sync                                      162
-#define __NR_acct                                      163
-#define __NR_settimeofday                      164
-#define __NR_mount                                     165
-#define __NR_umount2                           166
-#define __NR_swapon                                    167
-#define __NR_swapoff                           168
-#define __NR_reboot                                    169
-#define __NR_sethostname                       170
-#define __NR_setdomainname                     171
-#define __NR_iopl                                      172
-#define __NR_ioperm                                    173
-#define __NR_create_module                     174
-#define __NR_init_module                       175
-#define __NR_delete_module                     176
-#define __NR_get_kernel_syms           177
-#define __NR_query_module                      178
-#define __NR_quotactl                          179
-#define __NR_nfsservctl                                180
-#define __NR_getpmsg                           181
-#define __NR_putpmsg                           182
-#define __NR_afs_syscall                       183
-#define __NR_tuxcall                           184
-#define __NR_security                          185
-#define __NR_gettid                                    186
-#define __NR_readahead                         187
-#define __NR_setxattr                          188
-#define __NR_lsetxattr                         189
-#define __NR_fsetxattr                         190
-#define __NR_getxattr                          191
-#define __NR_lgetxattr                         192
-#define __NR_fgetxattr                         193
-#define __NR_listxattr                         194
-#define __NR_llistxattr                                195
-#define __NR_flistxattr                                196
-#define __NR_removexattr                       197
-#define __NR_lremovexattr                      198
-#define __NR_fremovexattr                      199
-#define __NR_tkill                                     200
-#define __NR_time                                      201
-#define __NR_futex                                     202
-#define __NR_sched_setaffinity         203
-#define __NR_sched_getaffinity         204
-#define __NR_set_thread_area           205
-#define __NR_io_setup                          206
-#define __NR_io_destroy                                207
-#define __NR_io_getevents                      208
-#define __NR_io_submit                         209
-#define __NR_io_cancel                         210
-#define __NR_get_thread_area           211
-#define __NR_lookup_dcookie                    212
-#define __NR_epoll_create                      213
-#define __NR_epoll_ctl_old                     214
-#define __NR_epoll_wait_old                    215
-#define __NR_remap_file_pages          216
-#define __NR_getdents64                                217
-#define __NR_set_tid_address           218
-#define __NR_restart_syscall           219
-#define __NR_semtimedop                                220
-#define __NR_fadvise64                         221
-#define __NR_timer_create                      222
-#define __NR_timer_settime                     223
-#define __NR_timer_gettime                     224
-#define __NR_timer_getoverrun          225
-#define __NR_timer_delete                      226
-#define __NR_clock_settime                     227
-#define __NR_clock_gettime                     228
-#define __NR_clock_getres                      229
-#define __NR_clock_nanosleep           230
-#define __NR_exit_group                                231
-#define __NR_epoll_wait                                232
-#define __NR_epoll_ctl                         233
-#define __NR_tgkill                                    234
-#define __NR_utimes                                    235
-#define __NR_vserver                           236
-#define __NR_mbind                                     237
-#define __NR_set_mempolicy                     238
-#define __NR_get_mempolicy                     239
-#define __NR_mq_open                           240
-#define __NR_mq_unlink                         241
-#define __NR_mq_timedsend                      242
-#define __NR_mq_timedreceive           243
-#define __NR_mq_notify                         244
-#define __NR_mq_getsetattr                     245
-#define __NR_kexec_load                                246
-#define __NR_waitid                                    247
-#define __NR_add_key                           248
-#define __NR_request_key                       249
-#define __NR_keyctl                                    250
-#define __NR_ioprio_set                                251
-#define __NR_ioprio_get                                252
-#define __NR_inotify_init                      253
-#define __NR_inotify_add_watch         254
-#define __NR_inotify_rm_watch          255
-#define __NR_migrate_pages                     256
-#define __NR_openat                                    257
-#define __NR_mkdirat                           258
-#define __NR_mknodat                           259
-#define __NR_fchownat                          260
-#define __NR_futimesat                         261
-#define __NR_newfstatat                                262
-#define __NR_unlinkat                          263
-#define __NR_renameat                          264
-#define __NR_linkat                                    265
-#define __NR_symlinkat                         266
-#define __NR_readlinkat                                267
-#define __NR_fchmodat                          268
-#define __NR_faccessat                         269
-#define __NR_pselect6                          270
-#define __NR_ppoll                                     271
-#define __NR_unshare                           272
-#define __NR_set_robust_list           273
-#define __NR_get_robust_list           274
-#define __NR_splice                                    275
-#define __NR_tee                                       276
-#define __NR_sync_file_range           277
-#define __NR_vmsplice                          278
-#define __NR_move_pages                                279
-#define __NR_utimensat                         280
-#define __NR_epoll_pwait                       281
-#define __NR_signalfd                          282
-#define __NR_timerfd_create                    283
-#define __NR_eventfd                           284
-#define __NR_fallocate                         285
-#define __NR_timerfd_settime           286
-#define __NR_timerfd_gettime           287
-#define __NR_accept4                           288
-#define __NR_signalfd4                         289
-#define __NR_eventfd2                          290
-#define __NR_epoll_create1                     291
-#define __NR_dup3                                      292
-#define __NR_pipe2                                     293
-#define __NR_inotify_init1                     294
-#define __NR_preadv                                    295
-#define __NR_pwritev                           296
-#define __NR_rt_tgsigqueueinfo         297
-#define __NR_perf_event_open           298
-#define __NR_recvmmsg                          299
-#define __NR_fanotify_init                     300
-#define __NR_fanotify_mark                     301
-#define __NR_prlimit64                         302
-
-#undef __NR_fstatat
-#undef __NR_pread
-#undef __NR_pwrite
-#undef __NR_getdents
-#define __NR_fstatat __NR_newfstatat
-#define __NR_pread __NR_pread64
-#define __NR_pwrite __NR_pwrite64
-#define __NR_getdents __NR_getdents64
-
 #undef O_LARGEFILE
 #define O_LARGEFILE 0100000
 
@@ -419,4 +108,6 @@ static inline long syscall6(long n, long a1, long a2, long a3, long a4,
 #define __syscall_ioctl(fd,ioc,arg)           syscall3(__NR_ioctl, (fd), (ioc), (long)(arg))
 #define __syscall_exit(code)                  syscall1(__NR_exit, code)
 
+long __syscall(long, ...);
+
 #endif
diff --git a/include/sys/syscall.h b/include/sys/syscall.h
new file mode 100644 (file)
index 0000000..a8fec67
--- /dev/null
@@ -0,0 +1,16 @@
+#ifndef _SYS_SYSCALL_H
+#define _SYS_SYSCALL_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#include <bits/syscall.h>
+
+long syscall(long, ...);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/src/internal/i386/syscall.s b/src/internal/i386/syscall.s
new file mode 100644 (file)
index 0000000..5b19a1b
--- /dev/null
@@ -0,0 +1,21 @@
+.global __syscall
+.type __syscall,%function
+__syscall:
+       pushl %ebx
+       pushl %esi
+       pushl %edi
+       pushl %ebp
+       movl 20(%esp),%eax
+       movl 24(%esp),%ebx
+       movl 28(%esp),%ecx
+       movl 32(%esp),%edx
+       movl 36(%esp),%esi
+       movl 40(%esp),%edi
+       movl 44(%esp),%ebp
+       int $128
+       popl %ebp
+       popl %edi
+       popl %esi
+       popl %ebx
+       ret
+.size __syscall,.-__syscall
index 4f159e0..e69de29 100644 (file)
@@ -1,11 +0,0 @@
-#include <errno.h>
-#include <unistd.h>
-
-long __syscall_ret(unsigned long r)
-{
-       if (r >= (unsigned long)-1 - 4096) {
-               errno = -(long)r;
-               return -1;
-       }
-       return (long)r;
-}
diff --git a/src/internal/syscall_ret.c b/src/internal/syscall_ret.c
new file mode 100644 (file)
index 0000000..4f159e0
--- /dev/null
@@ -0,0 +1,11 @@
+#include <errno.h>
+#include <unistd.h>
+
+long __syscall_ret(unsigned long r)
+{
+       if (r >= (unsigned long)-1 - 4096) {
+               errno = -(long)r;
+               return -1;
+       }
+       return (long)r;
+}
diff --git a/src/internal/x86_64/syscall.s b/src/internal/x86_64/syscall.s
new file mode 100644 (file)
index 0000000..7bec729
--- /dev/null
@@ -0,0 +1,14 @@
+.global __syscall
+.type __syscall,%function
+__syscall:
+di,si,dx,cx,r8,r9
+       movq %rdi,%rax
+       movq %rsi,%rdi
+       movq %rdx,%rsi
+       movq %rcx,%rdx
+       movq %r8,%r10
+       movq %r9,%r8
+       movq 8(%rsp),%r9
+       syscall
+       ret
+.size __syscall,.-__syscall
diff --git a/src/linux/syscall.c b/src/linux/syscall.c
new file mode 100644 (file)
index 0000000..1535560
--- /dev/null
@@ -0,0 +1,19 @@
+#include "syscall.h"
+#include <stdarg.h>
+
+#undef syscall
+
+long syscall(long n, ...)
+{
+       va_list ap;
+       long a,b,c,d,e,f;
+       va_start(ap, n);
+       a=va_arg(ap, long);
+       b=va_arg(ap, long);
+       c=va_arg(ap, long);
+       d=va_arg(ap, long);
+       e=va_arg(ap, long);
+       f=va_arg(ap, long);
+       va_end(ap);
+       return __syscall_ret(__syscall(n,a,b,c,d,e,f));
+}
index 7494a48..fccfa19 100644 (file)
@@ -91,7 +91,7 @@ static void rsyscall_handler(int sig, siginfo_t *si, void *ctx)
                return;
        }
 
-       if (syscall6(rs.nr, rs.arg[0], rs.arg[1], rs.arg[2],
+       if (__syscall(rs.nr, rs.arg[0], rs.arg[1], rs.arg[2],
                rs.arg[3], rs.arg[4], rs.arg[5]) < 0 && !rs.err) rs.err=errno;
 
        a_inc(&rs.cnt);
@@ -140,7 +140,7 @@ static int rsyscall(int nr, long a, long b, long c, long d, long e, long f)
        while((i=rs.cnt)) __wait(&rs.cnt, 0, i, 1);
 
        if (rs.err) errno = rs.err, ret = -1;
-       else ret = syscall6(nr, a, b, c, d, e, f);
+       else ret = __syscall(nr, a, b, c, d, e, f);
 
        UNLOCK(&rs.lock);
        return ret;