PPC port cleaned up, static linking works well now.

This commit is contained in:
rofl0r 2012-11-09 23:36:55 +01:00
parent 7669d1e334
commit 1c8eb8bad7
55 changed files with 1373 additions and 1095 deletions

View File

@ -55,7 +55,7 @@
#define ENOANO 55
#define EBADRQC 56
#define EBADSLT 57
#define EDEADLOCK EDEADLK
#define EDEADLOCK 58
#define EBFONT 59
#define ENOSTR 60
#define ENODATA 61

View File

@ -12,8 +12,8 @@
#define O_CLOEXEC 02000000
#define O_ASYNC 020000
#define O_DIRECT 0200000
#define O_LARGEFILE 0400000
#define O_DIRECT 0400000
#define O_LARGEFILE 0200000
#define O_NOATIME 01000000
#define O_NDELAY O_NONBLOCK
@ -31,3 +31,7 @@
#define F_GETLK 12
#define F_SETLK 13
#define F_SETLKW 14
#define F_SETOWN_EX 15
#define F_GETOWN_EX 16

View File

@ -1,12 +1,31 @@
#define _IOC(a,b,c,d) ( ((a)<<29) | ((b)<<8) | (c) | ((d)<<16) )
//#define _IOC(a,b,c,d) ( ((a)<<29) | ((b)<<8) | (c) | ((d)<<16) )
//
#define _IOC_SIZEBITS 13
#define _IOC_DIRBITS 3
#define _IOC_NRBITS 8
#define _IOC_TYPEBITS 8
#define _IOC_NRSHIFT 0
#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
#define _IOC(dir,type,nr,size) \
(((dir) << _IOC_DIRSHIFT) | \
((type) << _IOC_TYPESHIFT) | \
((nr) << _IOC_NRSHIFT) | \
((size) << _IOC_SIZESHIFT))
#define _IOC_NONE 1U
#define _IOC_WRITE 2U
#define _IOC_READ 4U
#define _IOC_WRITE 4U
#define _IOC_READ 2U
#define _IO(a,b) _IOC(_IOC_NONE,(a),(b),0)
#define _IOW(a,b,c) _IOC(1,(a),(b),sizeof(c))
#define _IOR(a,b,c) _IOC(2,(a),(b),sizeof(c))
#define _IOWR(a,b,c) _IOC(4,(a),(b),sizeof(c))
#define _IOW(a,b,c) _IOC(_IOC_WRITE,(a),(b),sizeof(c))
#define _IOR(a,b,c) _IOC(_IOC_READ ,(a),(b),sizeof(c))
#define _IOWR(a,b,c) _IOC(_IOC_READ | _IOC_WRITE,(a),(b),sizeof(c))
#define TCGETS 0x5401
#define TCSETS 0x5402

View File

@ -10,3 +10,6 @@ struct ipc_perm
long __pad1;
long __pad2;
};
#define IPC_64 0x100

103
arch/powerpc/bits/signal.h Normal file
View File

@ -0,0 +1,103 @@
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
typedef unsigned long gregset_t[48];
typedef struct {
double fpregs[32];
double fpscr;
unsigned _pad[2];
} fpregset_t;
typedef struct {
unsigned vrregs[32][4];
unsigned vrsave;
unsigned _pad[2];
unsigned vscr;
} vrregset_t;
typedef struct {
gregset_t gregs;
fpregset_t fpregs;
vrregset_t vrregs __attribute__((__aligned__(16)));
} mcontext_t;
typedef struct __ucontext {
unsigned long uc_flags;
struct __ucontext *uc_link;
stack_t uc_stack;
int uc_pad[7];
struct mcontext_t *uc_regs;
sigset_t uc_sigmask;
int uc_maskext[30];
int uc_pad2[3];
mcontext_t uc_mcontext;
char uc_reg_space[sizeof(mcontext_t) + 12];
} ucontext_t;
#define SA_NOCLDSTOP 1U
#define SA_NOCLDWAIT 2U
#define SA_SIGINFO 4U
#define SA_ONSTACK 0x08000000U
#define SA_RESTART 0x10000000U
#define SA_NODEFER 0x40000000U
#define SA_RESETHAND 0x80000000U
#define SA_RESTORER 0x04000000U
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
struct sigcontext
{
unsigned long _unused[4];
int signal;
unsigned long handler;
unsigned long oldmask;
void *regs; /* originally struct pt_regs _user *regs,
pt_regs is defined in arch/powerpc/include/asm/ptrace.h */
gregset_t gp_regs;
fpregset_t fp_regs;
vrregset_t *v_regs;
long vmx_reserve[33+33+32+1]; /* 33=34 for ppc64 */
};
#define NSIG 64
#endif
#endif
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGIOT 6
#define SIGBUS 7
#define SIGFPE 8
#define SIGKILL 9
#define SIGUSR1 10
#define SIGSEGV 11
#define SIGUSR2 12
#define SIGPIPE 13
#define SIGALRM 14
#define SIGTERM 15
#define SIGSTKFLT 16
#define SIGCHLD 17
#define SIGCONT 18
#define SIGSTOP 19
#define SIGTSTP 20
#define SIGTTIN 21
#define SIGTTOU 22
#define SIGURG 23
#define SIGXCPU 24
#define SIGXFSZ 25
#define SIGVTALRM 26
#define SIGPROF 27
#define SIGWINCH 28
#define SIGIO 29
#define SIGPOLL 29
#define SIGPWR 30
#define SIGSYS 31
#define SIGUNUSED SIGSYS

View File

@ -0,0 +1,34 @@
struct msghdr
{
void *msg_name;
int msg_namelen;
struct iovec *msg_iov;
unsigned long msg_iovlen;
void *msg_control;
unsigned long msg_controllen;
unsigned msg_flags;
};
#define SO_DEBUG 1
#define SO_REUSEADDR 2
#define SO_TYPE 3
#define SO_ERROR 4
#define SO_DONTROUTE 5
#define SO_BROADCAST 6
#define SO_SNDBUF 7
#define SO_RCVBUF 8
#define SO_SNDBUFFORCE 32
#define SO_RCVBUFFORCE 33
#define SO_KEEPALIVE 9
#define SO_OOBINLINE 10
#define SO_NO_CHECK 11
#define SO_PRIORITY 12
#define SO_LINGER 13
#define SO_BSDCOMPAT 14
#define SO_RCVLOWAT 16
#define SO_SNDLOWAT 17
#define SO_RCVTIMEO 18
#define SO_SNDTIMEO 19
#define SO_PASSCRED 20
#define SO_PEERCRED 21

741
arch/powerpc/bits/syscall.h Normal file
View File

@ -0,0 +1,741 @@
#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
#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_vm86 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_setresuid32 164
#define __NR_setresuid 164
#define __NR_getresuid32 165
#define __NR_getresuid 165
#define __NR_query_module 166
#define __NR_poll 167
#define __NR_nfsservctl 168
#define __NR_setresgid32 169
#define __NR_setresgid 169
#define __NR_getresgid32 170
#define __NR_getresgid 170
#define __NR_prctl 171
#define __NR_rt_sigreturn 172
#define __NR_rt_sigaction 173
#define __NR_rt_sigprocmask 174
#define __NR_rt_sigpending 175
#define __NR_rt_sigtimedwait 176
#define __NR_rt_sigqueueinfo 177
#define __NR_rt_sigsuspend 178
#define __NR_pread64 179
#define __NR_pwrite64 180
#define __NR_chown 181
#define __NR_getcwd 182
#define __NR_capget 183
#define __NR_capset 184
#define __NR_sigaltstack 185
#define __NR_sendfile 186
#define __NR_getpmsg 187
#define __NR_putpmsg 188
#define __NR_vfork 189
#define __NR_ugetrlimit 190
#define __NR_readahead 191
#if !defined(__PPC64) || defined(__ABI32)
#define __NR_mmap2 192
#define __NR_truncate64 193
#define __NR_ftruncate64 194
#define __NR_stat64 195
#define __NR_lstat64 196
#define __NR_fstat64 197
#endif
#define __NR_pciconfig_read 198
#define __NR_pciconfig_write 199
#define __NR_pciconfig_iobase 200
#define __NR_multiplexer 201
#define __NR_getdents64 202
#define __NR_pivot_root 203
#if !defined(__PPC64) || defined(__ABI32)
#define __NR_fcntl64 204
#endif
#define __NR_madvise 205
#define __NR_mincore 206
#define __NR_gettid 207
#define __NR_tkill 208
#define __NR_setxattr 209
#define __NR_lsetxattr 210
#define __NR_fsetxattr 211
#define __NR_getxattr 212
#define __NR_lgetxattr 213
#define __NR_fgetxattr 214
#define __NR_listxattr 215
#define __NR_llistxattr 216
#define __NR_flistxattr 217
#define __NR_removexattr 218
#define __NR_lremovexattr 219
#define __NR_fremovexattr 220
#define __NR_futex 221
#define __NR_sched_setaffinity 222
#define __NR_sched_getaffinity 223
#define __NR_tuxcall 225
#if !defined(__PPC64) || defined(__ABI32)
#define __NR_sendfile64 226
#endif
#define __NR_io_setup 227
#define __NR_io_destroy 228
#define __NR_io_getevents 229
#define __NR_io_submit 230
#define __NR_io_cancel 231
#define __NR_set_tid_address 232
#define __NR_fadvise64 233
#define __NR_exit_group 234
#define __NR_lookup_dcookie 235
#define __NR_epoll_create 236
#define __NR_epoll_ctl 237
#define __NR_epoll_wait 238
#define __NR_remap_file_pages 239
#define __NR_timer_create 240
#define __NR_timer_settime 241
#define __NR_timer_gettime 242
#define __NR_timer_getoverrun 243
#define __NR_timer_delete 244
#define __NR_clock_settime 245
#define __NR_clock_gettime 246
#define __NR_clock_getres 247
#define __NR_clock_nanosleep 248
#define __NR_swapcontext 249
#define __NR_tgkill 250
#define __NR_utimes 251
#define __NR_statfs64 252
#define __NR_fstatfs64 253
#if !defined(__PPC64) || defined(__ABI32)
#define __NR_fadvise64_64 254
#endif
#define __NR_rtas 255
#define __NR_sys_debug_setcontext 256
#define __NR_migrate_pages 258
#define __NR_mbind 259
#define __NR_get_mempolicy 260
#define __NR_set_mempolicy 261
#define __NR_mq_open 262
#define __NR_mq_unlink 263
#define __NR_mq_timedsend 264
#define __NR_mq_timedreceive 265
#define __NR_mq_notify 266
#define __NR_mq_getsetattr 267
#define __NR_kexec_load 268
#define __NR_add_key 269
#define __NR_request_key 270
#define __NR_keyctl 271
#define __NR_waitid 272
#define __NR_ioprio_set 273
#define __NR_ioprio_get 274
#define __NR_inotify_init 275
#define __NR_inotify_add_watch 276
#define __NR_inotify_rm_watch 277
#define __NR_spu_run 278
#define __NR_spu_create 279
#define __NR_pselect6 280
#define __NR_ppoll 281
#define __NR_unshare 282
#define __NR_splice 283
#define __NR_tee 284
#define __NR_vmsplice 285
#define __NR_openat 286
#define __NR_mkdirat 287
#define __NR_mknodat 288
#define __NR_fchownat 289
#define __NR_futimesat 290
#if defined(__PPC64) && !defined(__ABI32)
#define __NR_newfstatat 291
#else
#define __NR_fstatat64 291
#endif
#define __NR_unlinkat 292
#define __NR_renameat 293
#define __NR_linkat 294
#define __NR_symlinkat 295
#define __NR_readlinkat 296
#define __NR_fchmodat 297
#define __NR_faccessat 298
#define __NR_get_robust_list 299
#define __NR_set_robust_list 300
#define __NR_move_pages 301
#define __NR_getcpu 302
#define __NR_epoll_pwait 303
#define __NR_utimensat 304
#define __NR_signalfd 305
#define __NR_timerfd 306
#define __NR_timerfd_create 306
#define __NR_eventfd 307
#define __NR_sync_file_range2 308
#define __NR_fallocate 309
#define __NR_subpage_prot 310
#define __NR_timerfd_settime 311
#define __NR_timerfd_gettime 312
#define __NR_signalfd4 313
#define __NR_eventfd2 314
#define __NR_epoll_create1 315
#define __NR_dup3 316
#define __NR_pipe2 317
#define __NR_inotify_init1 318
#define __NR_perf_event_open 319
#define __NR_preadv 320
#define __NR_pwritev 321
#define __NR_rt_tgsigqueueinfo 322
#define __NR_fanotify_init 323
#define __NR_fanotify_mark 324
#define __NR_prlimit64 325
#define __NR_socket 326
#define __NR_bind 327
#define __NR_connect 328
#define __NR_listen 329
#define __NR_accept 330
#define __NR_getsockname 331
#define __NR_getpeername 332
#define __NR_socketpair 333
#define __NR_send 334
#define __NR_sendto 335
#define __NR_recv 336
#define __NR_recvfrom 337
#define __NR_shutdown 338
#define __NR_setsockopt 339
#define __NR_getsockopt 340
#define __NR_sendmsg 341
#define __NR_recvmsg 342
#define __NR_recvmmsg 343
#define __NR_accept4 344
#define __NR_name_to_handle_at 345
#define __NR_open_by_handle_at 346
#define __NR_clock_adjtime 347
#define __NR_syncfs 348
#define __NR_sendmmsg 349
#define __NR_setns 350
#define __NR_process_vm_readv 351
#define __NR_process_vm_writev 352
/*
* 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
#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_vm86 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_setresuid32 164
#define SYS_setresuid 164
#define SYS_getresuid32 165
#define SYS_getresuid 165
#define SYS_query_module 166
#define SYS_poll 167
#define SYS_nfsservctl 168
#define SYS_setresgid32 169
#define SYS_setresgid 169
#define SYS_getresgid32 170
#define SYS_getresgid 170
#define SYS_prctl 171
#define SYS_rt_sigreturn 172
#define SYS_rt_sigaction 173
#define SYS_rt_sigprocmask 174
#define SYS_rt_sigpending 175
#define SYS_rt_sigtimedwait 176
#define SYS_rt_sigqueueinfo 177
#define SYS_rt_sigsuspend 178
#define SYS_pread64 179
#define SYS_pwrite64 180
#define SYS_chown 181
#define SYS_getcwd 182
#define SYS_capget 183
#define SYS_capset 184
#define SYS_sigaltstack 185
#define SYS_sendfile 186
#define SYS_getpmsg 187
#define SYS_putpmsg 188
#define SYS_vfork 189
#define SYS_ugetrlimit 190
#define SYS_readahead 191
#if !defined(__PPC64) || defined(__ABI32)
#define SYS_mmap2 192
#define SYS_truncate64 193
#define SYS_ftruncate64 194
#define SYS_stat64 195
#define SYS_lstat64 196
#define SYS_fstat64 197
#endif
#define SYS_pciconfig_read 198
#define SYS_pciconfig_write 199
#define SYS_pciconfig_iobase 200
#define SYS_multiplexer 201
#define SYS_getdents64 202
#define SYS_pivot_root 203
#if !defined(__PPC64) || defined(__ABI32)
#define SYS_fcntl64 204
#endif
#define SYS_madvise 205
#define SYS_mincore 206
#define SYS_gettid 207
#define SYS_tkill 208
#define SYS_setxattr 209
#define SYS_lsetxattr 210
#define SYS_fsetxattr 211
#define SYS_getxattr 212
#define SYS_lgetxattr 213
#define SYS_fgetxattr 214
#define SYS_listxattr 215
#define SYS_llistxattr 216
#define SYS_flistxattr 217
#define SYS_removexattr 218
#define SYS_lremovexattr 219
#define SYS_fremovexattr 220
#define SYS_futex 221
#define SYS_sched_setaffinity 222
#define SYS_sched_getaffinity 223
#define SYS_tuxcall 225
#if !defined(__PPC64) || defined(__ABI32)
#define SYS_sendfile64 226
#endif
#define SYS_io_setup 227
#define SYS_io_destroy 228
#define SYS_io_getevents 229
#define SYS_io_submit 230
#define SYS_io_cancel 231
#define SYS_set_tid_address 232
#define SYS_fadvise64 233
#define SYS_exit_group 234
#define SYS_lookup_dcookie 235
#define SYS_epoll_create 236
#define SYS_epoll_ctl 237
#define SYS_epoll_wait 238
#define SYS_remap_file_pages 239
#define SYS_timer_create 240
#define SYS_timer_settime 241
#define SYS_timer_gettime 242
#define SYS_timer_getoverrun 243
#define SYS_timer_delete 244
#define SYS_clock_settime 245
#define SYS_clock_gettime 246
#define SYS_clock_getres 247
#define SYS_clock_nanosleep 248
#define SYS_swapcontext 249
#define SYS_tgkill 250
#define SYS_utimes 251
#define SYS_statfs64 252
#define SYS_fstatfs64 253
#if !defined(__PPC64) || defined(__ABI32)
#define SYS_fadvise64_64 254
#endif
#define SYS_rtas 255
#define SYS_sys_debug_setcontext 256
#define SYS_migrate_pages 258
#define SYS_mbind 259
#define SYS_get_mempolicy 260
#define SYS_set_mempolicy 261
#define SYS_mq_open 262
#define SYS_mq_unlink 263
#define SYS_mq_timedsend 264
#define SYS_mq_timedreceive 265
#define SYS_mq_notify 266
#define SYS_mq_getsetattr 267
#define SYS_kexec_load 268
#define SYS_add_key 269
#define SYS_request_key 270
#define SYS_keyctl 271
#define SYS_waitid 272
#define SYS_ioprio_set 273
#define SYS_ioprio_get 274
#define SYS_inotify_init 275
#define SYS_inotify_add_watch 276
#define SYS_inotify_rm_watch 277
#define SYS_spu_run 278
#define SYS_spu_create 279
#define SYS_pselect6 280
#define SYS_ppoll 281
#define SYS_unshare 282
#define SYS_splice 283
#define SYS_tee 284
#define SYS_vmsplice 285
#define SYS_openat 286
#define SYS_mkdirat 287
#define SYS_mknodat 288
#define SYS_fchownat 289
#define SYS_futimesat 290
#if defined(__PPC64) && !defined(__ABI32)
#define SYS_newfstatat 291
#else
#define SYS_fstatat64 291
#endif
#define SYS_unlinkat 292
#define SYS_renameat 293
#define SYS_linkat 294
#define SYS_symlinkat 295
#define SYS_readlinkat 296
#define SYS_fchmodat 297
#define SYS_faccessat 298
#define SYS_get_robust_list 299
#define SYS_set_robust_list 300
#define SYS_move_pages 301
#define SYS_getcpu 302
#define SYS_epoll_pwait 303
#define SYS_utimensat 304
#define SYS_signalfd 305
#define SYS_timerfd 306
#define SYS_timerfd_create 306
#define SYS_eventfd 307
#define SYS_sync_file_range2 308
#define SYS_fallocate 309
#define SYS_subpage_prot 310
#define SYS_timerfd_settime 311
#define SYS_timerfd_gettime 312
#define SYS_signalfd4 313
#define SYS_eventfd2 314
#define SYS_epoll_create1 315
#define SYS_dup3 316
#define SYS_pipe2 317
#define SYS_inotify_init1 318
#define SYS_perf_event_open 319
#define SYS_preadv 320
#define SYS_pwritev 321
#define SYS_rt_tgsigqueueinfo 322
#define SYS_fanotify_init 323
#define SYS_fanotify_mark 324
#define SYS_prlimit64 325
#define SYS_socket 326
#define SYS_bind 327
#define SYS_connect 328
#define SYS_listen 329
#define SYS_accept 330
#define SYS_getsockname 331
#define SYS_getpeername 332
#define SYS_socketpair 333
#define SYS_send 334
#define SYS_sendto 335
#define SYS_recv 336
#define SYS_recvfrom 337
#define SYS_shutdown 338
#define SYS_setsockopt 339
#define SYS_getsockopt 340
#define SYS_sendmsg 341
#define SYS_recvmsg 342
#define SYS_recvmmsg 343
#define SYS_accept4 344
#define SYS_name_to_handle_at 345
#define SYS_open_by_handle_at 346
#define SYS_clock_adjtime 347
#define SYS_syncfs 348
#define SYS_sendmmsg 349
#define SYS_setns 350
#define SYS_process_vm_readv 351
#define SYS_process_vm_writev 352

View File

@ -0,0 +1,14 @@
static inline struct pthread *__pthread_self()
{
register char* tp __asm__("r2");
return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
}
#define TLS_ABOVE_TP
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
// offset of the PC register in mcontext_t, divided by the system wordsize
// the kernel calls the ip "nip", it's the first saved value after the 32
// GPRs.
#define CANCEL_REG_IP 32

36
arch/powerpc/reloc.h Normal file
View File

@ -0,0 +1,36 @@
#include <string.h>
#include <elf.h>
#define ETC_LDSO_PATH "/etc/ld-musl-powerpc.path"
#define IS_COPY(x) ((x)==R_PPC_COPY)
#define IS_PLT(x) ((x)==R_PPC_JMP_SLOT)
// see linux' arch/powerpc/include/asm/elf.h
static inline void do_single_reloc(
struct dso *self, unsigned char *base_addr,
size_t *reloc_addr, int type, size_t addend,
Sym *sym, size_t sym_size,
struct symdef def, size_t sym_val)
{
switch(type) {
case R_PPC_GLOB_DAT:
case R_PPC_JMP_SLOT:
*reloc_addr = sym_val;
break;
case R_PPC_REL32:
if (sym_val) *reloc_addr += sym_val;
else *reloc_addr += (size_t)base_addr;
break;
case R_PPC_COPY:
memcpy(reloc_addr, (void *)sym_val, sym_size);
break;
case R_PPC_RELATIVE:
*reloc_addr += (size_t)base_addr;
break;
//case R_PPC64_DTPMOD64: //R_X86_64_DTPMOD64:
case R_PPC_DTPMOD32: //R_386_TLS_DTPMOD32:
*reloc_addr = def.dso ? def.dso->tls_id : self->tls_id;
break;
}
}

View File

@ -0,0 +1,62 @@
#define __SYSCALL_LL_E(x) \
((union { long long ll; long l[2]; }){ .ll = x }).l[0], \
((union { long long ll; long l[2]; }){ .ll = x }).l[1]
#define __SYSCALL_LL_O(x) 0, __SYSCALL_LL_E((x))
#define _NSIG 64
#define __SYSCALL_SSLEN (_NSIG/8)
long (__syscall)(long, ...);
static inline long __syscall0(long n)
{
return (__syscall)(n, 0, 0, 0, 0, 0, 0);
}
static inline long __syscall1(long n, long a)
{
return (__syscall)(n, a, 0, 0, 0, 0, 0);
}
static inline long __syscall2(long n, long a, long b)
{
return (__syscall)(n, a, b, 0, 0, 0, 0);
}
static inline long __syscall3(long n, long a, long b, long c)
{
return (__syscall)(n, a, b, c, 0, 0, 0);
}
static inline long __syscall4(long n, long a, long b, long c, long d)
{
return (__syscall)(n, a, b, c, d, 0, 0);
}
static inline long __syscall5(long n, long a, long b, long c, long d, long e)
{
return (__syscall)(n, a, b, c, d, e, 0);
}
static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
{
return (__syscall)(n, a, b, c, d, e, f);
}
#define __SC_socket 1
#define __SC_bind 2
#define __SC_connect 3
#define __SC_listen 4
#define __SC_accept 5
#define __SC_getsockname 6
#define __SC_getpeername 7
#define __SC_socketpair 8
#define __SC_send 9
#define __SC_recv 10
#define __SC_sendto 11
#define __SC_recvfrom 12
#define __SC_shutdown 13
#define __SC_setsockopt 14
#define __SC_getsockopt 15
#define __SC_sendmsg 16
#define __SC_recvmsg 17

View File

@ -1,114 +0,0 @@
/* $NetBSD: asm.h,v 1.29 2010/03/09 22:36:41 matt Exp $ */
/*
* Copyright (C) 1995, 1996 Wolfgang Solfrank.
* Copyright (C) 1995, 1996 TooLs GmbH.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by TooLs GmbH.
* 4. The name of TooLs GmbH may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _PPC_BITS_ASM_H_
#define _PPC_BITS_ASM_H_
#define cr0 0
#define cr1 1
#define cr2 2
#define cr3 3
#define cr4 4
#define cr5 5
#define cr6 6
#define cr7 7
/* General Purpose Registers (GPRs) */
#define r0 0
#define r1 1
#define r2 2
#define r3 3
#define r4 4
#define r5 5
#define r6 6
#define r7 7
#define r8 8
#define r9 9
#define r10 10
#define r11 11
#define r12 12
#define r13 13
#define r14 14
#define r15 15
#define r16 16
#define r17 17
#define r18 18
#define r19 19
#define r20 20
#define r21 21
#define r22 22
#define r23 23
#define r24 24
#define r25 25
#define r26 26
#define r27 27
#define r28 28
#define r29 29
#define r30 30
#define r31 31
/* Floating Point Registers (FPRs) */
#define fr0 0
#define fr1 1
#define fr2 2
#define fr3 3
#define fr4 4
#define fr5 5
#define fr6 6
#define fr7 7
#define fr8 8
#define fr9 9
#define fr10 10
#define fr11 11
#define fr12 12
#define fr13 13
#define fr14 14
#define fr15 15
#define fr16 16
#define fr17 17
#define fr18 18
#define fr19 19
#define fr20 20
#define fr21 21
#define fr22 22
#define fr23 23
#define fr24 24
#define fr25 25
#define fr26 26
#define fr27 27
#define fr28 28
#define fr29 29
#define fr30 30
#define fr31 31
#endif /* _PPC_BITS_ASM_H_ */

View File

@ -1,77 +0,0 @@
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)
typedef struct {
unsigned long __regs[21];
} mcontext_t;
typedef struct __ucontext {
unsigned long uc_flags;
struct __ucontext *uc_link;
stack_t uc_stack;
mcontext_t uc_mcontext;
sigset_t uc_sigmask;
unsigned long uc_regspace[128];
} ucontext_t;
#define SA_NOCLDSTOP 1
#define SA_NOCLDWAIT 2
#define SA_SIGINFO 4
#define SA_ONSTACK 0x08000000
#define SA_RESTART 0x10000000
#define SA_NODEFER 0x40000000
#define SA_RESETHAND 0x80000000
#define SA_RESTORER 0x04000000
#ifdef _GNU_SOURCE
struct sigcontext
{
unsigned long trap_no, error_code, oldmask;
unsigned long arm_r0, arm_r1, arm_r2, arm_r3;
unsigned long arm_r4, arm_r5, arm_r6, arm_r7;
unsigned long arm_r8, arm_r9, arm_r10, arm_fp;
unsigned long arm_ip, arm_sp, arm_lr, arm_pc;
unsigned long arm_cpsr, fault_address;
};
#define NSIG 64
#endif
#endif
#define SIGHUP 1
#define SIGINT 2
#define SIGQUIT 3
#define SIGILL 4
#define SIGTRAP 5
#define SIGABRT 6
#define SIGBUS 7
#define SIGFPE 8
#define SIGKILL 9
#define SIGUSR1 10
#define SIGSEGV 11
#define SIGUSR2 12
#define SIGPIPE 13
#define SIGALRM 14
#define SIGTERM 15
#define SIGSTKFLT 16
#define SIGCHLD 17
#define SIGCONT 18
#define SIGSTOP 19
#define SIGTSTP 20
#define SIGTTIN 21
#define SIGTTOU 22
#define SIGURG 23
#define SIGXCPU 24
#define SIGXFSZ 25
#define SIGVTALRM 26
#define SIGPROF 27
#define SIGWINCH 28
#define SIGIO 29
#define SIGPOLL 29
#define SIGPWR 30
#define SIGSYS 31
#define SIGUNUSED SIGSYS
#ifdef _BSD_SOURCE
#define SIGINFO SIGUSR1 /* For NetBSD compatability */
#endif

View File

@ -1,10 +0,0 @@
struct msghdr
{
void *msg_name;
socklen_t msg_namelen;
struct iovec *msg_iov;
int msg_iovlen;
void *msg_control;
socklen_t msg_controllen;
int msg_flags;
};

View File

@ -1,714 +0,0 @@
#if !defined(__ASSEMBLER__)
#define __SYSCALL_LL_E(x) \
((union { long long ll; long l[2]; }){ .ll = x }).l[0], \
((union { long long ll; long l[2]; }){ .ll = x }).l[1]
#define __SYSCALL_LL_O(x) 0, __SYSCALL_LL_E((x))
long (__syscall)(long, ...);
static inline long __syscall0(long n)
{
return (__syscall)(n, 0, 0, 0, 0, 0, 0);
}
static inline long __syscall1(long n, long a)
{
return (__syscall)(n, a, 0, 0, 0, 0, 0);
}
static inline long __syscall2(long n, long a, long b)
{
return (__syscall)(n, a, b, 0, 0, 0, 0);
}
static inline long __syscall3(long n, long a, long b, long c)
{
return (__syscall)(n, a, b, c, 0, 0, 0);
}
static inline long __syscall4(long n, long a, long b, long c, long d)
{
return (__syscall)(n, a, b, c, d, 0, 0);
}
static inline long __syscall5(long n, long a, long b, long c, long d, long e)
{
return (__syscall)(n, a, b, c, d, e, 0);
}
static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
{
return (__syscall)(n, a, b, c, d, e, f);
}
#define __SC_socket 1
#define __SC_bind 2
#define __SC_connect 3
#define __SC_listen 4
#define __SC_accept 5
#define __SC_getsockname 6
#define __SC_getpeername 7
#define __SC_socketpair 8
#define __SC_send 9
#define __SC_recv 10
#define __SC_sendto 11
#define __SC_recvfrom 12
#define __SC_shutdown 13
#define __SC_setsockopt 14
#define __SC_getsockopt 15
#define __SC_sendmsg 16
#define __SC_recvmsg 17
#define __socketcall(nm,a,b,c,d,e,f) syscall(SYS_socketcall, __SC_##nm, \
((long [6]){ (long)a, (long)b, (long)c, (long)d, (long)e, (long)f }))
#define __socketcall_cp(nm,a,b,c,d,e,f) syscall_cp(SYS_socketcall, __SC_##nm, \
((long [6]){ (long)a, (long)b, (long)c, (long)d, (long)e, (long)f }))
#endif /* __ASSEMBLER__ */
#define __NR_SYSCALL_BASE 0
#define __NR_restart_syscall (__NR_SYSCALL_BASE + 0)
#define __NR_exit (__NR_SYSCALL_BASE + 1)
#define __NR_fork (__NR_SYSCALL_BASE + 2)
#define __NR_read (__NR_SYSCALL_BASE + 3)
#define __NR_write (__NR_SYSCALL_BASE + 4)
#define __NR_open (__NR_SYSCALL_BASE + 5)
#define __NR_close (__NR_SYSCALL_BASE + 6)
#define __NR_waitpid (__NR_SYSCALL_BASE + 7)
#define __NR_creat (__NR_SYSCALL_BASE + 8)
#define __NR_link (__NR_SYSCALL_BASE + 9)
#define __NR_unlink (__NR_SYSCALL_BASE + 10)
#define __NR_execve (__NR_SYSCALL_BASE + 11)
#define __NR_chdir (__NR_SYSCALL_BASE + 12)
#define __NR_time (__NR_SYSCALL_BASE + 13)
#define __NR_mknod (__NR_SYSCALL_BASE + 14)
#define __NR_chmod (__NR_SYSCALL_BASE + 15)
#define __NR_lchown (__NR_SYSCALL_BASE + 16)
#define __NR_break (__NR_SYSCALL_BASE + 17)
#define __NR_oldstat (__NR_SYSCALL_BASE + 18)
#define __NR_lseek (__NR_SYSCALL_BASE + 19)
#define __NR_getpid (__NR_SYSCALL_BASE + 20)
#define __NR_mount (__NR_SYSCALL_BASE + 21)
#define __NR_umount (__NR_SYSCALL_BASE + 22)
#define __NR_setuid (__NR_SYSCALL_BASE + 23)
#define __NR_getuid (__NR_SYSCALL_BASE + 24)
#define __NR_stime (__NR_SYSCALL_BASE + 25)
#define __NR_ptrace (__NR_SYSCALL_BASE + 26)
#define __NR_alarm (__NR_SYSCALL_BASE + 27)
#define __NR_oldfstat (__NR_SYSCALL_BASE + 28)
#define __NR_pause (__NR_SYSCALL_BASE + 29)
#define __NR_utime (__NR_SYSCALL_BASE + 30)
#define __NR_stty (__NR_SYSCALL_BASE + 31)
#define __NR_gtty (__NR_SYSCALL_BASE + 32)
#define __NR_access (__NR_SYSCALL_BASE + 33)
#define __NR_nice (__NR_SYSCALL_BASE + 34)
#define __NR_ftime (__NR_SYSCALL_BASE + 35)
#define __NR_sync (__NR_SYSCALL_BASE + 36)
#define __NR_kill (__NR_SYSCALL_BASE + 37)
#define __NR_rename (__NR_SYSCALL_BASE + 38)
#define __NR_mkdir (__NR_SYSCALL_BASE + 39)
#define __NR_rmdir (__NR_SYSCALL_BASE + 40)
#define __NR_dup (__NR_SYSCALL_BASE + 41)
#define __NR_pipe (__NR_SYSCALL_BASE + 42)
#define __NR_times (__NR_SYSCALL_BASE + 43)
#define __NR_prof (__NR_SYSCALL_BASE + 44)
#define __NR_brk (__NR_SYSCALL_BASE + 45)
#define __NR_setgid (__NR_SYSCALL_BASE + 46)
#define __NR_getgid (__NR_SYSCALL_BASE + 47)
#define __NR_signal (__NR_SYSCALL_BASE + 48)
#define __NR_geteuid (__NR_SYSCALL_BASE + 49)
#define __NR_getegid (__NR_SYSCALL_BASE + 50)
#define __NR_acct (__NR_SYSCALL_BASE + 51)
#define __NR_umount2 (__NR_SYSCALL_BASE + 52)
#define __NR_lock (__NR_SYSCALL_BASE + 53)
#define __NR_ioctl (__NR_SYSCALL_BASE + 54)
#define __NR_fcntl (__NR_SYSCALL_BASE + 55)
#define __NR_mpx (__NR_SYSCALL_BASE + 56)
#define __NR_setpgid (__NR_SYSCALL_BASE + 57)
#define __NR_ulimit (__NR_SYSCALL_BASE + 58)
#define __NR_oldolduname (__NR_SYSCALL_BASE + 59)
#define __NR_umask (__NR_SYSCALL_BASE + 60)
#define __NR_chroot (__NR_SYSCALL_BASE + 61)
#define __NR_ustat (__NR_SYSCALL_BASE + 62)
#define __NR_dup2 (__NR_SYSCALL_BASE + 63)
#define __NR_getppid (__NR_SYSCALL_BASE + 64)
#define __NR_getpgrp (__NR_SYSCALL_BASE + 65)
#define __NR_setsid (__NR_SYSCALL_BASE + 66)
#define __NR_sigaction (__NR_SYSCALL_BASE + 67)
#define __NR_sgetmask (__NR_SYSCALL_BASE + 68)
#define __NR_ssetmask (__NR_SYSCALL_BASE + 69)
#define __NR_setreuid (__NR_SYSCALL_BASE + 70)
#define __NR_setregid (__NR_SYSCALL_BASE + 71)
#define __NR_sigsuspend (__NR_SYSCALL_BASE + 72)
#define __NR_sigpending (__NR_SYSCALL_BASE + 73)
#define __NR_sethostname (__NR_SYSCALL_BASE + 74)
#define __NR_setrlimit (__NR_SYSCALL_BASE + 75)
#define __NR_getrlimit (__NR_SYSCALL_BASE + 76)
#define __NR_getrusage (__NR_SYSCALL_BASE + 77)
#define __NR_gettimeofday (__NR_SYSCALL_BASE + 78)
#define __NR_settimeofday (__NR_SYSCALL_BASE + 79)
#define __NR_getgroups (__NR_SYSCALL_BASE + 80)
#define __NR_setgroups (__NR_SYSCALL_BASE + 81)
#define __NR_select (__NR_SYSCALL_BASE + 82)
#define __NR_symlink (__NR_SYSCALL_BASE + 83)
#define __NR_oldlstat (__NR_SYSCALL_BASE + 84)
#define __NR_readlink (__NR_SYSCALL_BASE + 85)
#define __NR_uselib (__NR_SYSCALL_BASE + 86)
#define __NR_swapon (__NR_SYSCALL_BASE + 87)
#define __NR_reboot (__NR_SYSCALL_BASE + 88)
#define __NR_readdir (__NR_SYSCALL_BASE + 89)
#define __NR_mmap (__NR_SYSCALL_BASE + 90)
#define __NR_munmap (__NR_SYSCALL_BASE + 91)
#define __NR_truncate (__NR_SYSCALL_BASE + 92)
#define __NR_ftruncate (__NR_SYSCALL_BASE + 93)
#define __NR_fchmod (__NR_SYSCALL_BASE + 94)
#define __NR_fchown (__NR_SYSCALL_BASE + 95)
#define __NR_getpriority (__NR_SYSCALL_BASE + 96)
#define __NR_setpriority (__NR_SYSCALL_BASE + 97)
#define __NR_profil (__NR_SYSCALL_BASE + 98)
#define __NR_statfs (__NR_SYSCALL_BASE + 99)
#define __NR_fstatfs (__NR_SYSCALL_BASE + 100)
#define __NR_ioperm (__NR_SYSCALL_BASE + 101)
#define __NR_socketcall (__NR_SYSCALL_BASE + 102)
#define __NR_syslog (__NR_SYSCALL_BASE + 103)
#define __NR_setitimer (__NR_SYSCALL_BASE + 104)
#define __NR_getitimer (__NR_SYSCALL_BASE + 105)
#define __NR_stat (__NR_SYSCALL_BASE + 106)
#define __NR_lstat (__NR_SYSCALL_BASE + 107)
#define __NR_fstat (__NR_SYSCALL_BASE + 108)
#define __NR_olduname (__NR_SYSCALL_BASE + 109)
#define __NR_iopl (__NR_SYSCALL_BASE + 110)
#define __NR_vhangup (__NR_SYSCALL_BASE + 111)
#define __NR_idle (__NR_SYSCALL_BASE + 112)
#define __NR_vm86 (__NR_SYSCALL_BASE + 113)
#define __NR_wait4 (__NR_SYSCALL_BASE + 114)
#define __NR_swapoff (__NR_SYSCALL_BASE + 115)
#define __NR_sysinfo (__NR_SYSCALL_BASE + 116)
#define __NR_ipc (__NR_SYSCALL_BASE + 117)
#define __NR_fsync (__NR_SYSCALL_BASE + 118)
#define __NR_sigreturn (__NR_SYSCALL_BASE + 119)
#define __NR_clone (__NR_SYSCALL_BASE + 120)
#define __NR_setdomainname (__NR_SYSCALL_BASE + 121)
#define __NR_uname (__NR_SYSCALL_BASE + 122)
#define __NR_modify_ldt (__NR_SYSCALL_BASE + 123)
#define __NR_adjtimex (__NR_SYSCALL_BASE + 124)
#define __NR_mprotect (__NR_SYSCALL_BASE + 125)
#define __NR_sigprocmask (__NR_SYSCALL_BASE + 126)
#define __NR_create_module (__NR_SYSCALL_BASE + 127)
#define __NR_init_module (__NR_SYSCALL_BASE + 128)
#define __NR_delete_module (__NR_SYSCALL_BASE + 129)
#define __NR_get_kernel_syms (__NR_SYSCALL_BASE + 130)
#define __NR_quotactl (__NR_SYSCALL_BASE + 131)
#define __NR_getpgid (__NR_SYSCALL_BASE + 132)
#define __NR_fchdir (__NR_SYSCALL_BASE + 133)
#define __NR_bdflush (__NR_SYSCALL_BASE + 134)
#define __NR_sysfs (__NR_SYSCALL_BASE + 135)
#define __NR_personality (__NR_SYSCALL_BASE + 136)
#define __NR_afs_syscall (__NR_SYSCALL_BASE + 137)
#define __NR_setfsuid (__NR_SYSCALL_BASE + 138)
#define __NR_setfsgid (__NR_SYSCALL_BASE + 139)
#define __NR__llseek (__NR_SYSCALL_BASE + 140)
#define __NR_getdents (__NR_SYSCALL_BASE + 141)
#define __NR__newselect (__NR_SYSCALL_BASE + 142)
#define __NR_flock (__NR_SYSCALL_BASE + 143)
#define __NR_msync (__NR_SYSCALL_BASE + 144)
#define __NR_readv (__NR_SYSCALL_BASE + 145)
#define __NR_writev (__NR_SYSCALL_BASE + 146)
#define __NR_getsid (__NR_SYSCALL_BASE + 147)
#define __NR_fdatasync (__NR_SYSCALL_BASE + 148)
#define __NR__sysctl (__NR_SYSCALL_BASE + 149)
#define __NR_mlock (__NR_SYSCALL_BASE + 150)
#define __NR_munlock (__NR_SYSCALL_BASE + 151)
#define __NR_mlockall (__NR_SYSCALL_BASE + 152)
#define __NR_munlockall (__NR_SYSCALL_BASE + 153)
#define __NR_sched_setparam (__NR_SYSCALL_BASE + 154)
#define __NR_sched_getparam (__NR_SYSCALL_BASE + 155)
#define __NR_sched_setscheduler (__NR_SYSCALL_BASE + 156)
#define __NR_sched_getscheduler (__NR_SYSCALL_BASE + 157)
#define __NR_sched_yield (__NR_SYSCALL_BASE + 158)
#define __NR_sched_get_priority_max (__NR_SYSCALL_BASE + 159)
#define __NR_sched_get_priority_min (__NR_SYSCALL_BASE + 160)
#define __NR_sched_rr_get_interval (__NR_SYSCALL_BASE + 161)
#define __NR_nanosleep (__NR_SYSCALL_BASE + 162)
#define __NR_mremap (__NR_SYSCALL_BASE + 163)
#define __NR_setresuid (__NR_SYSCALL_BASE + 164)
#define __NR_getresuid (__NR_SYSCALL_BASE + 165)
#define __NR_query_module (__NR_SYSCALL_BASE + 166)
#define __NR_poll (__NR_SYSCALL_BASE + 167)
#define __NR_nfsservctl (__NR_SYSCALL_BASE + 168)
#define __NR_setresgid (__NR_SYSCALL_BASE + 169)
#define __NR_getresgid (__NR_SYSCALL_BASE + 170)
#define __NR_prctl (__NR_SYSCALL_BASE + 171)
#define __NR_rt_sigreturn (__NR_SYSCALL_BASE + 172)
#define __NR_rt_sigaction (__NR_SYSCALL_BASE + 173)
#define __NR_rt_sigprocmask (__NR_SYSCALL_BASE + 174)
#define __NR_rt_sigpending (__NR_SYSCALL_BASE + 175)
#define __NR_rt_sigtimedwait (__NR_SYSCALL_BASE + 176)
#define __NR_rt_sigqueueinfo (__NR_SYSCALL_BASE + 177)
#define __NR_rt_sigsuspend (__NR_SYSCALL_BASE + 178)
#define __NR_pread (__NR_SYSCALL_BASE + 179)
#define __NR_pwrite (__NR_SYSCALL_BASE + 180)
#define __NR_chown (__NR_SYSCALL_BASE + 181)
#define __NR_getcwd (__NR_SYSCALL_BASE + 182)
#define __NR_capget (__NR_SYSCALL_BASE + 183)
#define __NR_capset (__NR_SYSCALL_BASE + 184)
#define __NR_sigaltstack (__NR_SYSCALL_BASE + 185)
#define __NR_sendfile (__NR_SYSCALL_BASE + 186)
#define __NR_getpmsg (__NR_SYSCALL_BASE + 187)
#define __NR_putpmsg (__NR_SYSCALL_BASE + 188)
#define __NR_vfork (__NR_SYSCALL_BASE + 189)
#define __NR_ugetrlimit (__NR_SYSCALL_BASE + 190)
#define __NR_readahead (__NR_SYSCALL_BASE + 191)
#define __NR_mmap2 (__NR_SYSCALL_BASE + 192)
#define __NR_truncate64 (__NR_SYSCALL_BASE + 193)
#define __NR_ftruncate64 (__NR_SYSCALL_BASE + 194)
#define __NR_stat64 (__NR_SYSCALL_BASE + 195)
#define __NR_lstat64 (__NR_SYSCALL_BASE + 196)
#define __NR_fstat64 (__NR_SYSCALL_BASE + 197)
#define __NR_pciconfig_read (__NR_SYSCALL_BASE + 198)
#define __NR_pciconfig_write (__NR_SYSCALL_BASE + 199)
#define __NR_pciconfig_iobase (__NR_SYSCALL_BASE + 200)
#define __NR_multiplexer (__NR_SYSCALL_BASE + 201)
#define __NR_getdents64 (__NR_SYSCALL_BASE + 202)
#define __NR_pivot_root (__NR_SYSCALL_BASE + 203)
#define __NR_fcntl64 (__NR_SYSCALL_BASE + 204)
#define __NR_madvise (__NR_SYSCALL_BASE + 205)
#define __NR_mincore (__NR_SYSCALL_BASE + 206)
#define __NR_gettid (__NR_SYSCALL_BASE + 207)
#define __NR_tkill (__NR_SYSCALL_BASE + 208)
#define __NR_setxattr (__NR_SYSCALL_BASE + 209)
#define __NR_lsetxattr (__NR_SYSCALL_BASE + 210)
#define __NR_fsetxattr (__NR_SYSCALL_BASE + 211)
#define __NR_getxattr (__NR_SYSCALL_BASE + 212)
#define __NR_lgetxattr (__NR_SYSCALL_BASE + 213)
#define __NR_fgetxattr (__NR_SYSCALL_BASE + 214)
#define __NR_listxattr (__NR_SYSCALL_BASE + 215)
#define __NR_llistxattr (__NR_SYSCALL_BASE + 216)
#define __NR_flistxattr (__NR_SYSCALL_BASE + 217)
#define __NR_removexattr (__NR_SYSCALL_BASE + 218)
#define __NR_lremovexattr (__NR_SYSCALL_BASE + 219)
#define __NR_fremovexattr (__NR_SYSCALL_BASE + 220)
#define __NR_futex (__NR_SYSCALL_BASE + 221)
#define __NR_sched_setaffinity (__NR_SYSCALL_BASE + 222)
#define __NR_sched_getaffinity (__NR_SYSCALL_BASE + 223)
#define __NR_tuxcall (__NR_SYSCALL_BASE + 225)
#define __NR_sendfile64 (__NR_SYSCALL_BASE + 226)
#define __NR_io_setup (__NR_SYSCALL_BASE + 227)
#define __NR_io_destroy (__NR_SYSCALL_BASE + 228)
#define __NR_io_getevents (__NR_SYSCALL_BASE + 229)
#define __NR_io_submit (__NR_SYSCALL_BASE + 230)
#define __NR_io_cancel (__NR_SYSCALL_BASE + 231)
#define __NR_set_tid_address (__NR_SYSCALL_BASE + 232)
#define __NR_fadvise (__NR_SYSCALL_BASE + 233)
#define __NR_exit_group (__NR_SYSCALL_BASE + 234)
#define __NR_lookup_dcookie (__NR_SYSCALL_BASE + 235)
#define __NR_epoll_create (__NR_SYSCALL_BASE + 236)
#define __NR_epoll_ctl (__NR_SYSCALL_BASE + 237)
#define __NR_epoll_wait (__NR_SYSCALL_BASE + 238)
#define __NR_remap_file_pages (__NR_SYSCALL_BASE + 239)
#define __NR_timer_create (__NR_SYSCALL_BASE + 240)
#define __NR_timer_settime (__NR_SYSCALL_BASE + 241)
#define __NR_timer_gettime (__NR_SYSCALL_BASE + 242)
#define __NR_timer_getoverrun (__NR_SYSCALL_BASE + 243)
#define __NR_timer_delete (__NR_SYSCALL_BASE + 244)
#define __NR_clock_settime (__NR_SYSCALL_BASE + 245)
#define __NR_clock_gettime (__NR_SYSCALL_BASE + 246)
#define __NR_clock_getres (__NR_SYSCALL_BASE + 247)
#define __NR_clock_nanosleep (__NR_SYSCALL_BASE + 248)
#define __NR_swapcontext (__NR_SYSCALL_BASE + 249)
#define __NR_tgkill (__NR_SYSCALL_BASE + 250)
#define __NR_utimes (__NR_SYSCALL_BASE + 251)
#define __NR_statfs64 (__NR_SYSCALL_BASE + 252)
#define __NR_fstatfs64 (__NR_SYSCALL_BASE + 253)
#define __NR_fadvise64_64 (__NR_SYSCALL_BASE + 254)
#define __NR_rtas (__NR_SYSCALL_BASE + 255)
#define __NR_sys_debug_setcontext (__NR_SYSCALL_BASE + 256)
#define __NR_migrate_pages (__NR_SYSCALL_BASE + 258)
#define __NR_mbind (__NR_SYSCALL_BASE + 259)
#define __NR_get_mempolicy (__NR_SYSCALL_BASE + 260)
#define __NR_set_mempolicy (__NR_SYSCALL_BASE + 261)
#define __NR_mq_open (__NR_SYSCALL_BASE + 262)
#define __NR_mq_unlink (__NR_SYSCALL_BASE + 263)
#define __NR_mq_timedsend (__NR_SYSCALL_BASE + 264)
#define __NR_mq_timedreceive (__NR_SYSCALL_BASE + 265)
#define __NR_mq_notify (__NR_SYSCALL_BASE + 266)
#define __NR_mq_getsetattr (__NR_SYSCALL_BASE + 267)
#define __NR_kexec_load (__NR_SYSCALL_BASE + 268)
#define __NR_add_key (__NR_SYSCALL_BASE + 269)
#define __NR_request_key (__NR_SYSCALL_BASE + 270)
#define __NR_keyctl (__NR_SYSCALL_BASE + 271)
#define __NR_waitid (__NR_SYSCALL_BASE + 272)
#define __NR_ioprio_set (__NR_SYSCALL_BASE + 273)
#define __NR_ioprio_get (__NR_SYSCALL_BASE + 274)
#define __NR_inotify_init (__NR_SYSCALL_BASE + 275)
#define __NR_inotify_add_watch (__NR_SYSCALL_BASE + 276)
#define __NR_inotify_rm_watch (__NR_SYSCALL_BASE + 277)
#define __NR_spu_run (__NR_SYSCALL_BASE + 278)
#define __NR_spu_create (__NR_SYSCALL_BASE + 279)
#define __NR_pselect6 (__NR_SYSCALL_BASE + 280)
#define __NR_ppoll (__NR_SYSCALL_BASE + 281)
#define __NR_unshare (__NR_SYSCALL_BASE + 282)
#define __NR_splice (__NR_SYSCALL_BASE + 283)
#define __NR_tee (__NR_SYSCALL_BASE + 284)
#define __NR_vmsplice (__NR_SYSCALL_BASE + 285)
#define __NR_openat (__NR_SYSCALL_BASE + 286)
#define __NR_mkdirat (__NR_SYSCALL_BASE + 287)
#define __NR_mknodat (__NR_SYSCALL_BASE + 288)
#define __NR_fchownat (__NR_SYSCALL_BASE + 289)
#define __NR_futimesat (__NR_SYSCALL_BASE + 290)
#define __NR_fstatat (__NR_SYSCALL_BASE + 291)
#define __NR_unlinkat (__NR_SYSCALL_BASE + 292)
#define __NR_renameat (__NR_SYSCALL_BASE + 293)
#define __NR_linkat (__NR_SYSCALL_BASE + 294)
#define __NR_symlinkat (__NR_SYSCALL_BASE + 295)
#define __NR_readlinkat (__NR_SYSCALL_BASE + 296)
#define __NR_fchmodat (__NR_SYSCALL_BASE + 297)
#define __NR_faccessat (__NR_SYSCALL_BASE + 298)
#define __NR_get_robust_list (__NR_SYSCALL_BASE + 299)
#define __NR_set_robust_list (__NR_SYSCALL_BASE + 300)
#define __NR_move_pages (__NR_SYSCALL_BASE + 301)
#define __NR_getcpu (__NR_SYSCALL_BASE + 302)
#define __NR_epoll_pwait (__NR_SYSCALL_BASE + 303)
#define __NR_utimensat (__NR_SYSCALL_BASE + 304)
#define __NR_signalfd (__NR_SYSCALL_BASE + 305)
#define __NR_timerfd_create (__NR_SYSCALL_BASE + 306)
#define __NR_eventfd (__NR_SYSCALL_BASE + 307)
#define __NR_sync_file_range2 (__NR_SYSCALL_BASE + 308)
#define __NR_fallocate (__NR_SYSCALL_BASE + 309)
#define __NR_subpage_prot (__NR_SYSCALL_BASE + 310)
#define __NR_timerfd_settime (__NR_SYSCALL_BASE + 311)
#define __NR_timerfd_gettime (__NR_SYSCALL_BASE + 312)
#define __NR_signalfd4 (__NR_SYSCALL_BASE + 313)
#define __NR_eventfd2 (__NR_SYSCALL_BASE + 314)
#define __NR_epoll_create1 (__NR_SYSCALL_BASE + 315)
#define __NR_dup3 (__NR_SYSCALL_BASE + 316)
#define __NR_pipe2 (__NR_SYSCALL_BASE + 317)
#define __NR_inotify_init1 (__NR_SYSCALL_BASE + 318)
#define __NR_perf_event_open (__NR_SYSCALL_BASE + 319)
#define __NR_preadv (__NR_SYSCALL_BASE + 320)
#define __NR_pwritev (__NR_SYSCALL_BASE + 321)
#define __NR_rt_tgsigqueueinfo (__NR_SYSCALL_BASE + 322)
/* Repeated with SYS_ prefix */
#define SYS_restart_syscall (__NR_SYSCALL_BASE + 0)
#define SYS_exit (__NR_SYSCALL_BASE + 1)
#define SYS_fork (__NR_SYSCALL_BASE + 2)
#define SYS_read (__NR_SYSCALL_BASE + 3)
#define SYS_write (__NR_SYSCALL_BASE + 4)
#define SYS_open (__NR_SYSCALL_BASE + 5)
#define SYS_close (__NR_SYSCALL_BASE + 6)
#define SYS_waitpid (__NR_SYSCALL_BASE + 7)
#define SYS_creat (__NR_SYSCALL_BASE + 8)
#define SYS_link (__NR_SYSCALL_BASE + 9)
#define SYS_unlink (__NR_SYSCALL_BASE + 10)
#define SYS_execve (__NR_SYSCALL_BASE + 11)
#define SYS_chdir (__NR_SYSCALL_BASE + 12)
#define SYS_time (__NR_SYSCALL_BASE + 13)
#define SYS_mknod (__NR_SYSCALL_BASE + 14)
#define SYS_chmod (__NR_SYSCALL_BASE + 15)
#define SYS_lchown (__NR_SYSCALL_BASE + 16)
#define SYS_break (__NR_SYSCALL_BASE + 17)
#define SYS_oldstat (__NR_SYSCALL_BASE + 18)
#define SYS_lseek (__NR_SYSCALL_BASE + 19)
#define SYS_getpid (__NR_SYSCALL_BASE + 20)
#define SYS_mount (__NR_SYSCALL_BASE + 21)
#define SYS_umount (__NR_SYSCALL_BASE + 22)
#define SYS_setuid (__NR_SYSCALL_BASE + 23)
#define SYS_getuid (__NR_SYSCALL_BASE + 24)
#define SYS_stime (__NR_SYSCALL_BASE + 25)
#define SYS_ptrace (__NR_SYSCALL_BASE + 26)
#define SYS_alarm (__NR_SYSCALL_BASE + 27)
#define SYS_oldfstat (__NR_SYSCALL_BASE + 28)
#define SYS_pause (__NR_SYSCALL_BASE + 29)
#define SYS_utime (__NR_SYSCALL_BASE + 30)
#define SYS_stty (__NR_SYSCALL_BASE + 31)
#define SYS_gtty (__NR_SYSCALL_BASE + 32)
#define SYS_access (__NR_SYSCALL_BASE + 33)
#define SYS_nice (__NR_SYSCALL_BASE + 34)
#define SYS_ftime (__NR_SYSCALL_BASE + 35)
#define SYS_sync (__NR_SYSCALL_BASE + 36)
#define SYS_kill (__NR_SYSCALL_BASE + 37)
#define SYS_rename (__NR_SYSCALL_BASE + 38)
#define SYS_mkdir (__NR_SYSCALL_BASE + 39)
#define SYS_rmdir (__NR_SYSCALL_BASE + 40)
#define SYS_dup (__NR_SYSCALL_BASE + 41)
#define SYS_pipe (__NR_SYSCALL_BASE + 42)
#define SYS_times (__NR_SYSCALL_BASE + 43)
#define SYS_prof (__NR_SYSCALL_BASE + 44)
#define SYS_brk (__NR_SYSCALL_BASE + 45)
#define SYS_setgid (__NR_SYSCALL_BASE + 46)
#define SYS_getgid (__NR_SYSCALL_BASE + 47)
#define SYS_signal (__NR_SYSCALL_BASE + 48)
#define SYS_geteuid (__NR_SYSCALL_BASE + 49)
#define SYS_getegid (__NR_SYSCALL_BASE + 50)
#define SYS_acct (__NR_SYSCALL_BASE + 51)
#define SYS_umount2 (__NR_SYSCALL_BASE + 52)
#define SYS_lock (__NR_SYSCALL_BASE + 53)
#define SYS_ioctl (__NR_SYSCALL_BASE + 54)
#define SYS_fcntl (__NR_SYSCALL_BASE + 55)
#define SYS_mpx (__NR_SYSCALL_BASE + 56)
#define SYS_setpgid (__NR_SYSCALL_BASE + 57)
#define SYS_ulimit (__NR_SYSCALL_BASE + 58)
#define SYS_oldolduname (__NR_SYSCALL_BASE + 59)
#define SYS_umask (__NR_SYSCALL_BASE + 60)
#define SYS_chroot (__NR_SYSCALL_BASE + 61)
#define SYS_ustat (__NR_SYSCALL_BASE + 62)
#define SYS_dup2 (__NR_SYSCALL_BASE + 63)
#define SYS_getppid (__NR_SYSCALL_BASE + 64)
#define SYS_getpgrp (__NR_SYSCALL_BASE + 65)
#define SYS_setsid (__NR_SYSCALL_BASE + 66)
#define SYS_sigaction (__NR_SYSCALL_BASE + 67)
#define SYS_sgetmask (__NR_SYSCALL_BASE + 68)
#define SYS_ssetmask (__NR_SYSCALL_BASE + 69)
#define SYS_setreuid (__NR_SYSCALL_BASE + 70)
#define SYS_setregid (__NR_SYSCALL_BASE + 71)
#define SYS_sigsuspend (__NR_SYSCALL_BASE + 72)
#define SYS_sigpending (__NR_SYSCALL_BASE + 73)
#define SYS_sethostname (__NR_SYSCALL_BASE + 74)
#define SYS_setrlimit (__NR_SYSCALL_BASE + 75)
#define SYS_getrlimit (__NR_SYSCALL_BASE + 76)
#define SYS_getrusage (__NR_SYSCALL_BASE + 77)
#define SYS_gettimeofday (__NR_SYSCALL_BASE + 78)
#define SYS_settimeofday (__NR_SYSCALL_BASE + 79)
#define SYS_getgroups (__NR_SYSCALL_BASE + 80)
#define SYS_setgroups (__NR_SYSCALL_BASE + 81)
#define SYS_select (__NR_SYSCALL_BASE + 82)
#define SYS_symlink (__NR_SYSCALL_BASE + 83)
#define SYS_oldlstat (__NR_SYSCALL_BASE + 84)
#define SYS_readlink (__NR_SYSCALL_BASE + 85)
#define SYS_uselib (__NR_SYSCALL_BASE + 86)
#define SYS_swapon (__NR_SYSCALL_BASE + 87)
#define SYS_reboot (__NR_SYSCALL_BASE + 88)
#define SYS_readdir (__NR_SYSCALL_BASE + 89)
#define SYS_mmap (__NR_SYSCALL_BASE + 90)
#define SYS_munmap (__NR_SYSCALL_BASE + 91)
#define SYS_truncate (__NR_SYSCALL_BASE + 92)
#define SYS_ftruncate (__NR_SYSCALL_BASE + 93)
#define SYS_fchmod (__NR_SYSCALL_BASE + 94)
#define SYS_fchown (__NR_SYSCALL_BASE + 95)
#define SYS_getpriority (__NR_SYSCALL_BASE + 96)
#define SYS_setpriority (__NR_SYSCALL_BASE + 97)
#define SYS_profil (__NR_SYSCALL_BASE + 98)
#define SYS_statfs (__NR_SYSCALL_BASE + 99)
#define SYS_fstatfs (__NR_SYSCALL_BASE + 100)
#define SYS_ioperm (__NR_SYSCALL_BASE + 101)
#define SYS_socketcall (__NR_SYSCALL_BASE + 102)
#define SYS_syslog (__NR_SYSCALL_BASE + 103)
#define SYS_setitimer (__NR_SYSCALL_BASE + 104)
#define SYS_getitimer (__NR_SYSCALL_BASE + 105)
#define SYS_stat (__NR_SYSCALL_BASE + 106)
#define SYS_lstat (__NR_SYSCALL_BASE + 107)
#define SYS_fstat (__NR_SYSCALL_BASE + 108)
#define SYS_olduname (__NR_SYSCALL_BASE + 109)
#define SYS_iopl (__NR_SYSCALL_BASE + 110)
#define SYS_vhangup (__NR_SYSCALL_BASE + 111)
#define SYS_idle (__NR_SYSCALL_BASE + 112)
#define SYS_vm86 (__NR_SYSCALL_BASE + 113)
#define SYS_wait4 (__NR_SYSCALL_BASE + 114)
#define SYS_swapoff (__NR_SYSCALL_BASE + 115)
#define SYS_sysinfo (__NR_SYSCALL_BASE + 116)
#define SYS_ipc (__NR_SYSCALL_BASE + 117)
#define SYS_fsync (__NR_SYSCALL_BASE + 118)
#define SYS_sigreturn (__NR_SYSCALL_BASE + 119)
#define SYS_clone (__NR_SYSCALL_BASE + 120)
#define SYS_setdomainname (__NR_SYSCALL_BASE + 121)
#define SYS_uname (__NR_SYSCALL_BASE + 122)
#define SYS_modify_ldt (__NR_SYSCALL_BASE + 123)
#define SYS_adjtimex (__NR_SYSCALL_BASE + 124)
#define SYS_mprotect (__NR_SYSCALL_BASE + 125)
#define SYS_sigprocmask (__NR_SYSCALL_BASE + 126)
#define SYS_create_module (__NR_SYSCALL_BASE + 127)
#define SYS_init_module (__NR_SYSCALL_BASE + 128)
#define SYS_delete_module (__NR_SYSCALL_BASE + 129)
#define SYS_get_kernel_syms (__NR_SYSCALL_BASE + 130)
#define SYS_quotactl (__NR_SYSCALL_BASE + 131)
#define SYS_getpgid (__NR_SYSCALL_BASE + 132)
#define SYS_fchdir (__NR_SYSCALL_BASE + 133)
#define SYS_bdflush (__NR_SYSCALL_BASE + 134)
#define SYS_sysfs (__NR_SYSCALL_BASE + 135)
#define SYS_personality (__NR_SYSCALL_BASE + 136)
#define SYS_afs_syscall (__NR_SYSCALL_BASE + 137)
#define SYS_setfsuid (__NR_SYSCALL_BASE + 138)
#define SYS_setfsgid (__NR_SYSCALL_BASE + 139)
#define SYS__llseek (__NR_SYSCALL_BASE + 140)
#define SYS_getdents (__NR_SYSCALL_BASE + 141)
#define SYS__newselect (__NR_SYSCALL_BASE + 142)
#define SYS_flock (__NR_SYSCALL_BASE + 143)
#define SYS_msync (__NR_SYSCALL_BASE + 144)
#define SYS_readv (__NR_SYSCALL_BASE + 145)
#define SYS_writev (__NR_SYSCALL_BASE + 146)
#define SYS_getsid (__NR_SYSCALL_BASE + 147)
#define SYS_fdatasync (__NR_SYSCALL_BASE + 148)
#define SYS__sysctl (__NR_SYSCALL_BASE + 149)
#define SYS_mlock (__NR_SYSCALL_BASE + 150)
#define SYS_munlock (__NR_SYSCALL_BASE + 151)
#define SYS_mlockall (__NR_SYSCALL_BASE + 152)
#define SYS_munlockall (__NR_SYSCALL_BASE + 153)
#define SYS_sched_setparam (__NR_SYSCALL_BASE + 154)
#define SYS_sched_getparam (__NR_SYSCALL_BASE + 155)
#define SYS_sched_setscheduler (__NR_SYSCALL_BASE + 156)
#define SYS_sched_getscheduler (__NR_SYSCALL_BASE + 157)
#define SYS_sched_yield (__NR_SYSCALL_BASE + 158)
#define SYS_sched_get_priority_max (__NR_SYSCALL_BASE + 159)
#define SYS_sched_get_priority_min (__NR_SYSCALL_BASE + 160)
#define SYS_sched_rr_get_interval (__NR_SYSCALL_BASE + 161)
#define SYS_nanosleep (__NR_SYSCALL_BASE + 162)
#define SYS_mremap (__NR_SYSCALL_BASE + 163)
#define SYS_setresuid (__NR_SYSCALL_BASE + 164)
#define SYS_getresuid (__NR_SYSCALL_BASE + 165)
#define SYS_query_module (__NR_SYSCALL_BASE + 166)
#define SYS_poll (__NR_SYSCALL_BASE + 167)
#define SYS_nfsservctl (__NR_SYSCALL_BASE + 168)
#define SYS_setresgid (__NR_SYSCALL_BASE + 169)
#define SYS_getresgid (__NR_SYSCALL_BASE + 170)
#define SYS_prctl (__NR_SYSCALL_BASE + 171)
#define SYS_rt_sigreturn (__NR_SYSCALL_BASE + 172)
#define SYS_rt_sigaction (__NR_SYSCALL_BASE + 173)
#define SYS_rt_sigprocmask (__NR_SYSCALL_BASE + 174)
#define SYS_rt_sigpending (__NR_SYSCALL_BASE + 175)
#define SYS_rt_sigtimedwait (__NR_SYSCALL_BASE + 176)
#define SYS_rt_sigqueueinfo (__NR_SYSCALL_BASE + 177)
#define SYS_rt_sigsuspend (__NR_SYSCALL_BASE + 178)
#define SYS_pread (__NR_SYSCALL_BASE + 179)
#define SYS_pwrite (__NR_SYSCALL_BASE + 180)
#define SYS_chown (__NR_SYSCALL_BASE + 181)
#define SYS_getcwd (__NR_SYSCALL_BASE + 182)
#define SYS_capget (__NR_SYSCALL_BASE + 183)
#define SYS_capset (__NR_SYSCALL_BASE + 184)
#define SYS_sigaltstack (__NR_SYSCALL_BASE + 185)
#define SYS_sendfile (__NR_SYSCALL_BASE + 186)
#define SYS_getpmsg (__NR_SYSCALL_BASE + 187)
#define SYS_putpmsg (__NR_SYSCALL_BASE + 188)
#define SYS_vfork (__NR_SYSCALL_BASE + 189)
#define SYS_ugetrlimit (__NR_SYSCALL_BASE + 190)
#define SYS_readahead (__NR_SYSCALL_BASE + 191)
#define SYS_mmap2 (__NR_SYSCALL_BASE + 192)
#define SYS_truncate64 (__NR_SYSCALL_BASE + 193)
#define SYS_ftruncate64 (__NR_SYSCALL_BASE + 194)
#define SYS_stat64 (__NR_SYSCALL_BASE + 195)
#define SYS_lstat64 (__NR_SYSCALL_BASE + 196)
#define SYS_fstat64 (__NR_SYSCALL_BASE + 197)
#define SYS_pciconfig_read (__NR_SYSCALL_BASE + 198)
#define SYS_pciconfig_write (__NR_SYSCALL_BASE + 199)
#define SYS_pciconfig_iobase (__NR_SYSCALL_BASE + 200)
#define SYS_multiplexer (__NR_SYSCALL_BASE + 201)
#define SYS_getdents64 (__NR_SYSCALL_BASE + 202)
#define SYS_pivot_root (__NR_SYSCALL_BASE + 203)
#define SYS_fcntl64 (__NR_SYSCALL_BASE + 204)
#define SYS_madvise (__NR_SYSCALL_BASE + 205)
#define SYS_mincore (__NR_SYSCALL_BASE + 206)
#define SYS_gettid (__NR_SYSCALL_BASE + 207)
#define SYS_tkill (__NR_SYSCALL_BASE + 208)
#define SYS_setxattr (__NR_SYSCALL_BASE + 209)
#define SYS_lsetxattr (__NR_SYSCALL_BASE + 210)
#define SYS_fsetxattr (__NR_SYSCALL_BASE + 211)
#define SYS_getxattr (__NR_SYSCALL_BASE + 212)
#define SYS_lgetxattr (__NR_SYSCALL_BASE + 213)
#define SYS_fgetxattr (__NR_SYSCALL_BASE + 214)
#define SYS_listxattr (__NR_SYSCALL_BASE + 215)
#define SYS_llistxattr (__NR_SYSCALL_BASE + 216)
#define SYS_flistxattr (__NR_SYSCALL_BASE + 217)
#define SYS_removexattr (__NR_SYSCALL_BASE + 218)
#define SYS_lremovexattr (__NR_SYSCALL_BASE + 219)
#define SYS_fremovexattr (__NR_SYSCALL_BASE + 220)
#define SYS_futex (__NR_SYSCALL_BASE + 221)
#define SYS_sched_setaffinity (__NR_SYSCALL_BASE + 222)
#define SYS_sched_getaffinity (__NR_SYSCALL_BASE + 223)
#define SYS_tuxcall (__NR_SYSCALL_BASE + 225)
#define SYS_sendfile64 (__NR_SYSCALL_BASE + 226)
#define SYS_io_setup (__NR_SYSCALL_BASE + 227)
#define SYS_io_destroy (__NR_SYSCALL_BASE + 228)
#define SYS_io_getevents (__NR_SYSCALL_BASE + 229)
#define SYS_io_submit (__NR_SYSCALL_BASE + 230)
#define SYS_io_cancel (__NR_SYSCALL_BASE + 231)
#define SYS_set_tid_address (__NR_SYSCALL_BASE + 232)
#define SYS_fadvise (__NR_SYSCALL_BASE + 233)
#define SYS_exit_group (__NR_SYSCALL_BASE + 234)
#define SYS_lookup_dcookie (__NR_SYSCALL_BASE + 235)
#define SYS_epoll_create (__NR_SYSCALL_BASE + 236)
#define SYS_epoll_ctl (__NR_SYSCALL_BASE + 237)
#define SYS_epoll_wait (__NR_SYSCALL_BASE + 238)
#define SYS_remap_file_pages (__NR_SYSCALL_BASE + 239)
#define SYS_timer_create (__NR_SYSCALL_BASE + 240)
#define SYS_timer_settime (__NR_SYSCALL_BASE + 241)
#define SYS_timer_gettime (__NR_SYSCALL_BASE + 242)
#define SYS_timer_getoverrun (__NR_SYSCALL_BASE + 243)
#define SYS_timer_delete (__NR_SYSCALL_BASE + 244)
#define SYS_clock_settime (__NR_SYSCALL_BASE + 245)
#define SYS_clock_gettime (__NR_SYSCALL_BASE + 246)
#define SYS_clock_getres (__NR_SYSCALL_BASE + 247)
#define SYS_clock_nanosleep (__NR_SYSCALL_BASE + 248)
#define SYS_swapcontext (__NR_SYSCALL_BASE + 249)
#define SYS_tgkill (__NR_SYSCALL_BASE + 250)
#define SYS_utimes (__NR_SYSCALL_BASE + 251)
#define SYS_statfs64 (__NR_SYSCALL_BASE + 252)
#define SYS_fstatfs64 (__NR_SYSCALL_BASE + 253)
#define SYS_fadvise64_64 (__NR_SYSCALL_BASE + 254)
#define SYS_rtas (__NR_SYSCALL_BASE + 255)
#define SYS_sys_debug_setcontext (__NR_SYSCALL_BASE + 256)
#define SYS_migrate_pages (__NR_SYSCALL_BASE + 258)
#define SYS_mbind (__NR_SYSCALL_BASE + 259)
#define SYS_get_mempolicy (__NR_SYSCALL_BASE + 260)
#define SYS_set_mempolicy (__NR_SYSCALL_BASE + 261)
#define SYS_mq_open (__NR_SYSCALL_BASE + 262)
#define SYS_mq_unlink (__NR_SYSCALL_BASE + 263)
#define SYS_mq_timedsend (__NR_SYSCALL_BASE + 264)
#define SYS_mq_timedreceive (__NR_SYSCALL_BASE + 265)
#define SYS_mq_notify (__NR_SYSCALL_BASE + 266)
#define SYS_mq_getsetattr (__NR_SYSCALL_BASE + 267)
#define SYS_kexec_load (__NR_SYSCALL_BASE + 268)
#define SYS_add_key (__NR_SYSCALL_BASE + 269)
#define SYS_request_key (__NR_SYSCALL_BASE + 270)
#define SYS_keyctl (__NR_SYSCALL_BASE + 271)
#define SYS_waitid (__NR_SYSCALL_BASE + 272)
#define SYS_ioprio_set (__NR_SYSCALL_BASE + 273)
#define SYS_ioprio_get (__NR_SYSCALL_BASE + 274)
#define SYS_inotify_init (__NR_SYSCALL_BASE + 275)
#define SYS_inotify_add_watch (__NR_SYSCALL_BASE + 276)
#define SYS_inotify_rm_watch (__NR_SYSCALL_BASE + 277)
#define SYS_spu_run (__NR_SYSCALL_BASE + 278)
#define SYS_spu_create (__NR_SYSCALL_BASE + 279)
#define SYS_pselect6 (__NR_SYSCALL_BASE + 280)
#define SYS_ppoll (__NR_SYSCALL_BASE + 281)
#define SYS_unshare (__NR_SYSCALL_BASE + 282)
#define SYS_splice (__NR_SYSCALL_BASE + 283)
#define SYS_tee (__NR_SYSCALL_BASE + 284)
#define SYS_vmsplice (__NR_SYSCALL_BASE + 285)
#define SYS_openat (__NR_SYSCALL_BASE + 286)
#define SYS_mkdirat (__NR_SYSCALL_BASE + 287)
#define SYS_mknodat (__NR_SYSCALL_BASE + 288)
#define SYS_fchownat (__NR_SYSCALL_BASE + 289)
#define SYS_futimesat (__NR_SYSCALL_BASE + 290)
#define SYS_fstatat (__NR_SYSCALL_BASE + 291)
#define SYS_unlinkat (__NR_SYSCALL_BASE + 292)
#define SYS_renameat (__NR_SYSCALL_BASE + 293)
#define SYS_linkat (__NR_SYSCALL_BASE + 294)
#define SYS_symlinkat (__NR_SYSCALL_BASE + 295)
#define SYS_readlinkat (__NR_SYSCALL_BASE + 296)
#define SYS_fchmodat (__NR_SYSCALL_BASE + 297)
#define SYS_faccessat (__NR_SYSCALL_BASE + 298)
#define SYS_get_robust_list (__NR_SYSCALL_BASE + 299)
#define SYS_set_robust_list (__NR_SYSCALL_BASE + 300)
#define SYS_move_pages (__NR_SYSCALL_BASE + 301)
#define SYS_getcpu (__NR_SYSCALL_BASE + 302)
#define SYS_epoll_pwait (__NR_SYSCALL_BASE + 303)
#define SYS_utimensat (__NR_SYSCALL_BASE + 304)
#define SYS_signalfd (__NR_SYSCALL_BASE + 305)
#define SYS_timerfd_create (__NR_SYSCALL_BASE + 306)
#define SYS_eventfd (__NR_SYSCALL_BASE + 307)
#define SYS_sync_file_range2 (__NR_SYSCALL_BASE + 308)
#define SYS_fallocate (__NR_SYSCALL_BASE + 309)
#define SYS_subpage_prot (__NR_SYSCALL_BASE + 310)
#define SYS_timerfd_settime (__NR_SYSCALL_BASE + 311)
#define SYS_timerfd_gettime (__NR_SYSCALL_BASE + 312)
#define SYS_signalfd4 (__NR_SYSCALL_BASE + 313)
#define SYS_eventfd2 (__NR_SYSCALL_BASE + 314)
#define SYS_epoll_create1 (__NR_SYSCALL_BASE + 315)
#define SYS_dup3 (__NR_SYSCALL_BASE + 316)
#define SYS_pipe2 (__NR_SYSCALL_BASE + 317)
#define SYS_inotify_init1 (__NR_SYSCALL_BASE + 318)
#define SYS_perf_event_open (__NR_SYSCALL_BASE + 319)
#define SYS_preadv (__NR_SYSCALL_BASE + 320)
#define SYS_pwritev (__NR_SYSCALL_BASE + 321)
#define SYS_rt_tgsigqueueinfo (__NR_SYSCALL_BASE + 322)

View File

@ -1,6 +0,0 @@
typedef pthread_t (*__pthread_self_func_t)(void) __attribute__((const));
#define __pthread_self ((__pthread_self_func_t)0xffff0fe0)
#define CANCEL_REG_SP 16
#define CANCEL_REG_IP 18

View File

@ -1,26 +0,0 @@
#include <string.h>
#include <elf.h>
#define ETC_LDSO_PATH "/etc/ld-musl-arm.path"
#define IS_COPY(x) ((x)==R_ARM_COPY)
#define IS_PLT(x) ((x)==R_ARM_JUMP_SLOT)
static inline void do_single_reloc(size_t *reloc_addr, int type, size_t sym_val, size_t sym_size, unsigned char *base_addr, size_t addend)
{
switch(type) {
case R_ARM_ABS32:
*reloc_addr += sym_val;
break;
case R_ARM_GLOB_DAT:
case R_ARM_JUMP_SLOT:
*reloc_addr = sym_val;
break;
case R_ARM_RELATIVE:
*reloc_addr += (size_t)base_addr;
break;
case R_ARM_COPY:
memcpy(reloc_addr, (void *)sym_val, sym_size);
break;
}
}

1
configure vendored
View File

@ -203,6 +203,7 @@ i?86*) ARCH=i386 ;;
x86_64*) ARCH=x86_64 ;;
mips-*|mipsel-*) ARCH=mips ;;
microblaze-*) ARCH=microblaze ;;
powerpc-*) ARCH=powerpc ;;
unknown) fail "$0: unable to detect target arch; try $0 --target=..." ;;
*) fail "$0: unknown or unsupported target \"$target\"" ;;
esac

26
crt/powerpc/crt1.s Normal file
View File

@ -0,0 +1,26 @@
.weak _init
.weak _fini
.global _start
.type _start, %function
_start:
mr 9, 1 # Save the original stack pointer.
clrrwi 1, 1, 4 # Align the stack to 16 bytes.
lis 13, _SDA_BASE_@ha # r13 points to the small data area.
addi 13, 13, _SDA_BASE_@l
li 0, 0 # Zero the frame pointer.
stwu 1, -16(1) # The initial stack frame.
mtlr 0 # Clear the link register.
stw 0, 0(1) # And save it.
lis 3, main@ha # Get main() ...
addi 3, 3, main@l
lwz 4, 0(9) # and argc...
addi 5, 9, 4 # and argv ...
lis 6, _init@ha # and _init() ...
addi 6, 6, _init@l
lis 7, _fini@ha # and _fini() ...
addi 7, 7, _fini@l
li 8, 0 # ldso_fini == NULL
bl __libc_start_main # Let's go!
b . # Never gets here.
.end _start
.size _start, .-_start

View File

@ -1,27 +0,0 @@
#include <bits/asm.h>
.weak _init
.weak _fini
.global _start
.type _start, %function
_start:
mr r9, r1 // Save the original stack pointer.
clrrwi r1, r1, 4 // Align the stack to 16 bytes.
lis r13, _SDA_BASE_@ha // r13 points to the small data area.
addi r13, r13, _SDA_BASE_@l //
li r0, 0 // Zero the frame pointer.
stwu r1, -16(r1) // The initial stack frame.
mtlr r0 // Clear the link register.
stw r0, 0(r1) // And save it.
lis r3, main@ha // Get main() ...
addi r3, r3, main@l
lwz r4, 0(r9) // and argc...
addi r5, r9, 4 // and argv ...
lis r6, _init@ha // and _init() ...
addi r6, r6, _init@l
lis r7, _fini@ha // and _fini() ...
addi r7, r7, _fini@l
li r8, 0 // ldso_fini == NULL
bl __libc_start_main // Let's go!
b . // Never gets here.
.end _start
.size _start, .-_start

View File

@ -0,0 +1,18 @@
.global __syscall
.type __syscall,@function
__syscall:
mr 0, 3 # Save the system call number
mr 3, 4 # Shift the arguments: arg1
mr 4, 5 # arg2
mr 5, 6 # arg3
mr 6, 7 # arg4
mr 7, 8 # arg5
mr 8, 9 # arg6
sc
bnslr+ # return if not summary overflow
#else error:
# return negated value.
neg 3, 3
blr
.end __syscall
.size __syscall, .-__syscall

View File

@ -1,24 +0,0 @@
#include <bits/asm.h>
.global __syscall
.type __syscall,@function
__syscall:
mflr r0
stw r0, -4(r1) // Save the return address.
mr r0, r3 // Save the system call number
mr r3, r4 // Shift the arguments: arg1
mr r4, r5 // arg2
mr r5, r6 // arg3
mr r6, r7 // arg4
mr r7, r8 // arg5
mr r8, r9 // arg6
sc
mfcr r0 // Check for an error
rlwinm r4, r0, r0, 3, 3 // by checking for bit 28.
cmplwi r0, r4, 0 // It is an error if non-zero.
beq r0, 1f // Jump if not an error.
neg r3, r3 // Negate the error number.
1: lwz r0, -4(r1) // Restore the return address.
mtlr r0
blr
.end __syscall
.size __syscall, .-__syscall

View File

@ -1,9 +1,8 @@
#include <bits/asm.h>
.text
.global dlsym
.type dlsym,@function
dlsym:
mflr r5 // The return address is arg3.
mflr 5 # The return address is arg3.
b __dlsym
.end dlsym
.size dlsym, .-dlsym

23
src/ldso/powerpc/start.s Normal file
View File

@ -0,0 +1,23 @@
# FIXME : does not work, the small data array needs to be relocated.
# see elfspec_ppc.pdf, page 76-84
.global _start
.type _start,@function
_start:
mr 9, 1 # Save the original stack pointer.
clrrwi 1, 1, 4 # Align the stack to 16 bytes.
lis 13, _SDA_BASE_@ha # r13 points to the small data area.
addi 13, 13, _SDA_BASE_@l
li 0, 0 # Zero the frame pointer.
lwz 3, 0(9) # and argc...
addi 4, 9, 4 # and argv ...
mtlr 0 # Clear the link register.
# Go to the musl dynamic linker entry point.
bl __dynlink
cmpi 4, 0, 3, 1 # Check for a 1.
bne 4, . # Stay here
mtlr 3 # Set the link address...
li 3, 0
blr # and go.
.end _start
.size _start, .-_start

View File

@ -1,22 +0,0 @@
#include <bits/asm.h>
.global _start
.type _start,@function
_start:
mr r9, r1 // Save the original stack pointer.
clrrwi r1, r1, 4 // Align the stack to 16 bytes.
lis r13, _SDA_BASE_@ha // r13 points to the small data area.
addi r13, r13, _SDA_BASE_@l //
li r0, 0 // Zero the frame pointer.
lwz r3, 0(r9) // and argc...
addi r4, r9, 4 // and argv ...
mtlr r0 // Clear the link register.
// Go to the musl dynamic linker entry point.
bl __dynlink
cmpi r4, 0, r3, 1 // Check for a 1.
bne r4, . // Stay here
mtlr r3 // Set the link address...
li r3, 0
blr // and go.
.end _start
.size _start, .-_start

View File

@ -0,0 +1,47 @@
.global _longjmp
.global longjmp
.type _longjmp,@function
.type longjmp,@function
_longjmp:
longjmp:
# void longjmp(jmp_buf env, int val);
# put val into return register and restore the env saved in setjmp
# if val(r4) is 0, put 1 there.
# 0) move old return address into r0
lwz 0, 0(3)
# 1) put it into link reg
mtlr 0
#2 ) restore stack ptr
lwz 1, 4(3)
#3) restore control reg
lwz 0, 8(3)
mtcr 0
#4) restore r14-r31
lwz 14, 12(3)
lwz 15, 16(3)
lwz 16, 20(3)
lwz 17, 24(3)
lwz 18, 28(3)
lwz 19, 32(3)
lwz 20, 36(3)
lwz 21, 40(3)
lwz 22, 44(3)
lwz 23, 48(3)
lwz 24, 52(3)
lwz 25, 56(3)
lwz 26, 60(3)
lwz 27, 64(3)
lwz 28, 68(3)
lwz 29, 72(3)
lwz 30, 76(3)
lwz 31, 80(3)
#5) put val into return reg r3
mr 3, 4
#6) check if return value is 0, make it 1 in that case
cmpwi cr7, 4, 0
bne cr7, 1f
li 3, 1
1:
blr

View File

@ -0,0 +1,40 @@
.global __setjmp
.global _setjmp
.global setjmp
.type __setjmp,@function
.type _setjmp,@function
.type setjmp,@function
__setjmp:
_setjmp:
setjmp:
# 0) store IP int 0, then into the jmpbuf pointed to by r3 (first arg)
mflr 0
stw 0, 0(3)
# 1) store reg1 (SP)
stw 1, 4(3)
# 2) store cr
mfcr 0
stw 0, 8(3)
# 3) store r14-31
stw 14, 12(3)
stw 15, 16(3)
stw 16, 20(3)
stw 17, 24(3)
stw 18, 28(3)
stw 19, 32(3)
stw 20, 36(3)
stw 21, 40(3)
stw 22, 44(3)
stw 23, 48(3)
stw 24, 52(3)
stw 25, 56(3)
stw 26, 60(3)
stw 27, 64(3)
stw 28, 68(3)
stw 29, 72(3)
stw 30, 76(3)
stw 31, 80(3)
# 4) set return value to 0
li 3, 0
# 5) return
blr

View File

@ -1,17 +0,0 @@
#include <bits/asm.h>
.global _longjmp
.global longjmp
.type _longjmp,@function
.type longjmp,@function
_longjmp:
longjmp:
cmpi 7, 0, r3, 0
bne 7, 1f
addi r3, r3, 1
1: lmw r8, 4(r3) // load r8-r31
mr r6, r4
mtlr r11
mtcr r12
mr r2, r9
mr r1, r10
blr

View File

@ -1,18 +0,0 @@
#include <bits/asm.h>
.global __setjmp
.global _setjmp
.global setjmp
.type __setjmp,@function
.type _setjmp,@function
.type setjmp,@function
__setjmp:
_setjmp:
setjmp:
mflr r11
mfcr r12
mr r10, r1
mr r9, r2
stmw r8, 0(r3) // save r8-r31
li r3,0
blr

View File

@ -0,0 +1,11 @@
.global __restore
.type __restore,%function
__restore:
li 0, 119 #__NR_sigreturn
sc
.global __restore_rt
.type __restore_rt,%function
__restore_rt:
li 0, 172 # __NR_rt_sigreturn
sc

View File

@ -0,0 +1,34 @@
.global sigsetjmp
.type sigsetjmp,%function
sigsetjmp:
#int sigsetjmp(sigjmp_buf buf, int save)
# r3 r4
#0) store save into buf->__fl
stw 4, 256(3)
#1) compare save with 0
cmpwi cr7, 4, 0
#2) if its 0, goto setjmp code
beq- cr7, 1f
#3) else: we must call pthread_sigmask(SIG_SETMASK, 0, (sigset_t *)buf->__ss);
# thus store r3 on the stack, to restore it later
stw 3, -4(1)
# store old link reg
mflr 0
stw 0, -8(1)
# increase stack frame by 16
subi 1, 1, 16
# put pointer to ss buf into r5 (3rd arg)
addi 5, 3, 260
# put "2" i.e. SIG_SETMASK in r3
li 3, 2
li 4, 0
bl pthread_sigmask
#restore sp
addi 1, 1, 16
#restore r3
lwz 3, -4(1)
#restore link reg
lwz 0, -8(1)
mtlr 0
1:
b setjmp

View File

@ -1,13 +0,0 @@
#include <bits/asm.h>
#include <bits/syscall.h>
.global __restore
.type __restore,@function
__restore:
li r0, __NR_sigreturn
sc
.global __restore_rt
.type __restore_rt,@function
__restore_rt:
li r0, __NR_rt_sigreturn
sc

View File

@ -1,12 +0,0 @@
#include <bits/asm.h>
.global sigsetjmp
.type sigsetjmp,@function
sigsetjmp:
lwz r4, 64*4-2*4(r3) // Second last long.
cmpi r4, 0, r4, 0
bne r4, 1f
addi r5, r3, 64*4-1*4 // Address of last long.
li r4, 0
li r3, 2
bl sigprocmask
1: b setjmp

View File

@ -0,0 +1,11 @@
.text
.global __set_thread_area
.type __set_thread_area, %function
__set_thread_area:
# mov pointer in reg3 into r2
mr 2, 3
# put 0 into return reg
li 3, 0
# return
blr

View File

@ -1,11 +1,9 @@
#include <bits/asm.h>
#include <bits/syscall.h>
.text
.global __unmapself
.type __unmapself,%function
__unmapself:
li r0, __NR_munmap
li 0, 91 # __NR_munmap
sc
li r0, __NR_exit
li 0, 1 #__NR_exit
sc
blr

View File

@ -0,0 +1,83 @@
.text
.global __clone
.type __clone, %function
__clone:
# int clone(fn, stack, flags, arg, ptid, tls, ctid)
# a b c d e f g
# 3 4 5 6 7 8 9
# pseudo C code:
# tid = syscall(SYS_clone,c,b,e,f,g);
# if (!tid) syscall(SYS_exit, a(d));
# return tid;
# SYS_clone = 120
# SYS_exit = 1
# in order that the child can find the start func and its arg, we need to store it into
# non-volative regs. to do so, we have to store those 2 regs into our stackframe, so
# we can restore them later.
stw 30, -4(1)
stw 31, -8(1)
subi 1, 1, 16
# save r3 (func) into r30, and r6(arg) into r31
mr 30, 3
mr 31, 6
#move c into first arg
mr 3, 5
#mr 4, 4
mr 5, 7
mr 6, 8
mr 7, 9
# move syscall number into r0
li 0, 120
sc
# check for syscall error
#this code should be more efficient, but it borks
#bns+ 1f # jump to label 1 if no summary overflow.
#else
#neg 3, 3 #negate the result (errno)
#b 2f # jump to epilogue
# this error check code at least does not spoil the clone call.
#mfcr 0 # Check for an error
#rlwinm 4, 0, 0, 3, 3 # by checking for bit 28.
#cmplwi 0, 4, 0 # It is an error if non-zero.
#beq 0, 1f # Jump if not an error.
#neg 3, 3 # Negate the error number.
#b 2f # jump to epilogue
1:
# compare sc result with 0
cmpwi cr7, 3, 0
# if not 0, jump to end
bne cr7, 2f
#else: we're the child
#call funcptr
# move arg (d) into r3
mr 3, 31
#move r30 (funcptr) into CTR reg
mtctr 30
# call CTR reg
bctrl
# mov SYS_exit into r0 (the exit param is already in r3)
li 0, 1
sc
2:
# restore stack
addi 1, 1, 16
lwz 30, -4(1)
lwz 31, -8(1)
blr

View File

@ -0,0 +1,51 @@
#r0: volatile. may be modified during linkage.
#r1: stack frame: 16 byte alignment.
#r2: tls/thread pointer on pp32
#r3,r4: return values, first args
#r5-r10: args
#r11-r12: volatile. may be modified during linkage
#r13: "small data area" pointer
#r14 - r30: local vars
#r31: local or environment pointer
#r1, r14-31: belong to the caller, must be saved and restored
#r0, r3-r12, ctr, xer: volatile, not preserved
#r0,r11,r12: may be altered by cross-module call,
#"a func cannot depend on that these regs have the values placed by the caller"
#the fields CR2,CR2,CR4 of the cond reg must be preserved
#LR (link reg) shall contain the funcs return address
.text
.global __syscall_cp_asm
.type __syscall_cp_asm,%function
__syscall_cp_asm:
# at enter: r3 = pointer to self->cancel, r4: syscall no, r5: first arg, r6: 2nd, r7: 3rd, r8: 4th, r9: 5th, r10: 6th
.global __cp_begin
__cp_begin:
# r3 holds first argument, its a pointer to self->cancel.
# we must compare the dereferenced value with 0 and jump to __cancel if its not
lwz 0, 0(3) #deref pointer into r0
cmpwi cr7, 0, 0 #compare r0 with 0, store result in cr7.
beq+ cr7, 1f #jump to label 1 if r0 was 0
b __cancel #else call cancel
# (the return address is not needed, since __cancel never returns)
1:
#ok, the cancel flag was not set
# syscall: number goes to r0, the rest 3-8
mr 0, 4 # put the system call number into r0
mr 3, 5 # Shift the arguments: arg1
mr 4, 6 # arg2
mr 5, 7 # arg3
mr 6, 8 # arg4
mr 7, 9 # arg5
mr 8, 10 # arg6
sc
.global __cp_end
__cp_end:
bnslr+ # return if no summary overflow.
#else negate result.
neg 3, 3
blr