text:
#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_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_access                 33
#define __NR_nice                   34
#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_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_ioctl                  54
#define __NR_fcntl                  55
#define __NR_setpgid                57
#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_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_statfs                 99
#define __NR_fstatfs                100
#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_vhangup                111
#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_cacheflush             123
#define __NR_adjtimex               124
#define __NR_mprotect               125
#define __NR_sigprocmask            126
#define __NR_init_module            128
#define __NR_delete_module          129
#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_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_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_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_getdents64             220
#define __NR_fcntl64                221
#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_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
#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          260
#define __NR_timer_gettime          261
#define __NR_timer_getoverrun       262
#define __NR_timer_delete           263
#define __NR_clock_settime          264
#define __NR_clock_gettime          265
#define __NR_clock_getres           266
#define __NR_clock_nanosleep        267
#define __NR_statfs64               268
#define __NR_fstatfs64              269
#define __NR_tgkill                 270
#define __NR_utimes                 271
#define __NR_fadvise64_64           272
#define __NR_mbind                  274
#define __NR_get_mempolicy          275
#define __NR_set_mempolicy          276
#define __NR_mq_open                277
#define __NR_mq_unlink              278
#define __NR_mq_timedsend           279
#define __NR_mq_timedreceive        280
#define __NR_mq_notify              281
#define __NR_mq_getsetattr          282
#define __NR_kexec_load             283
#define __NR_waitid                 284
#define __NR_add_key                285
#define __NR_request_key            286
#define __NR_keyctl                 287
#define __NR_ioprio_set             288
#define __NR_ioprio_get             289
#define __NR_inotify_init           290
#define __NR_inotify_add_watch      291
#define __NR_inotify_rm_watch       292
#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
#define __NR_rt_tgsigqueueinfo      335
#define __NR_perf_event_open        336
#define __NR_fanotify_init          337
#define __NR_fanotify_mark          338
#define __NR_prlimit64              339
#define __NR_socket                 340
#define __NR_bind                   341
#define __NR_connect                342
#define __NR_listen                 343
#define __NR_accept                 344
#define __NR_getsockname            345
#define __NR_getpeername            346
#define __NR_socketpair             347
#define __NR_send                   348
#define __NR_sendto                 349
#define __NR_recv                   350
#define __NR_recvfrom               351
#define __NR_shutdown               352
#define __NR_setsockopt             353
#define __NR_getsockopt             354
#define __NR_sendmsg                355
#define __NR_recvmsg                356
#define __NR_recvmmsg               357
#define __NR_accept4                358
#define __NR_name_to_handle_at      359
#define __NR_open_by_handle_at      360
#define __NR_clock_adjtime          361
#define __NR_syncfs                 362
#define __NR_sendmmsg               363
#define __NR_setns                  364
#define __NR_process_vm_readv       365
#define __NR_process_vm_writev      366
#define __NR_kcmp                   367
#define __NR_finit_module           368

/* 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_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_access                  33
#define SYS_nice                    34
#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_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_ioctl                   54
#define SYS_fcntl                   55
#define SYS_setpgid                 57
#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_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_statfs                  99
#define SYS_fstatfs                 100
#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_vhangup                 111
#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_cacheflush              123
#define SYS_adjtimex                124
#define SYS_mprotect                125
#define SYS_sigprocmask             126
#define SYS_init_module             128
#define SYS_delete_module           129
#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_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_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_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_getdents64              220
#define SYS_fcntl64                 221
#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_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
#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           260
#define SYS_timer_gettime           261
#define SYS_timer_getoverrun        262
#define SYS_timer_delete            263
#define SYS_clock_settime           264
#define SYS_clock_gettime           265
#define SYS_clock_getres            266
#define SYS_clock_nanosleep         267
#define SYS_statfs64                268
#define SYS_fstatfs64               269
#define SYS_tgkill                  270
#define SYS_utimes                  271
#define SYS_fadvise64_64            272
#define SYS_mbind                   274
#define SYS_get_mempolicy           275
#define SYS_set_mempolicy           276
#define SYS_mq_open                 277
#define SYS_mq_unlink               278
#define SYS_mq_timedsend            279
#define SYS_mq_timedreceive         280
#define SYS_mq_notify               281
#define SYS_mq_getsetattr           282
#define SYS_kexec_load              283
#define SYS_waitid                  284
#define SYS_add_key                 285
#define SYS_request_key             286
#define SYS_keyctl                  287
#define SYS_ioprio_set              288
#define SYS_ioprio_get              289
#define SYS_inotify_init            290
#define SYS_inotify_add_watch       291
#define SYS_inotify_rm_watch        292
#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
#define SYS_rt_tgsigqueueinfo       335
#define SYS_perf_event_open         336
#define SYS_fanotify_init           337
#define SYS_fanotify_mark           338
#define SYS_prlimit64               339
#define SYS_socket                  340
#define SYS_bind                    341
#define SYS_connect                 342
#define SYS_listen                  343
#define SYS_accept                  344
#define SYS_getsockname             345
#define SYS_getpeername             346
#define SYS_socketpair              347
#define SYS_send                    348
#define SYS_sendto                  349
#define SYS_recv                    350
#define SYS_recvfrom                351
#define SYS_shutdown                352
#define SYS_setsockopt              353
#define SYS_getsockopt              354
#define SYS_sendmsg                 355
#define SYS_recvmsg                 356
#define SYS_recvmmsg                357
#define SYS_accept4                 358
#define SYS_name_to_handle_at       359
#define SYS_open_by_handle_at       360
#define SYS_clock_adjtime           361
#define SYS_syncfs                  362
#define SYS_sendmmsg                363
#define SYS_setns                   364
#define SYS_process_vm_readv        365
#define SYS_process_vm_writev       366
#define SYS_kcmp                    367
#define SYS_finit_module            368


text:
#define _Addr int
#define _Int64 long long
#define _Reg int

TYPEDEF __builtin_va_list va_list;
TYPEDEF __builtin_va_list __isoc_va_list;

#ifndef __cplusplus
TYPEDEF long wchar_t;
#endif
TYPEDEF unsigned wint_t;

TYPEDEF float float_t;
TYPEDEF double double_t;

TYPEDEF struct { long long __ll; long double __ld; } max_align_t;

TYPEDEF long time_t;
TYPEDEF long suseconds_t;

TYPEDEF struct { union { int __i[9]; unsigned __s[9]; } __u; } pthread_attr_t;
TYPEDEF struct { union { int __i[6]; volatile void *volatile __p[6]; } __u; } pthread_mutex_t;
TYPEDEF struct { union { int __i[6]; volatile void *volatile __p[6]; } __u; } mtx_t;
TYPEDEF struct { union { int __i[12]; void *__p[12]; } __u; } pthread_cond_t;
TYPEDEF struct { union { int __i[12]; void *__p[12]; } __u; } cnd_t;
TYPEDEF struct { union { int __i[8]; void *__p[8]; } __u; } pthread_rwlock_t;
TYPEDEF struct { union { int __i[5]; void *__p[5]; } __u; } pthread_barrier_t;

repo_language: C

mime_type: text/x-c


text:
static inline struct pthread *__pthread_self()
{
	struct pthread *self;
	__asm__ __volatile__ ("ori %0, r21, 0" : "=r" (self) );
	return self;
}

#define TP_ADJ(p) (p)

#define CANCEL_REG_IP 32


text:
#include <string.h>
#include <elf.h>
#include <endian.h>

#if __BYTE_ORDER == __LITTLE_ENDIAN
#define ENDIAN_SUFFIX "el"
#else
#define ENDIAN_SUFFIX ""
#endif

#define LDSO_ARCH "microblaze" ENDIAN_SUFFIX

#define TPOFF_K 0

static int remap_rel(int type)
{
	switch(type) {
	case R_MICROBLAZE_32:
		return REL_SYMBOLIC;
	case R_MICROBLAZE_GLOB_DAT:
		return REL_GOT;
	case R_MICROBLAZE_JUMP_SLOT:
		return REL_PLT;
	case R_MICROBLAZE_REL:
		return REL_RELATIVE;
	case R_MICROBLAZE_COPY:
		return REL_COPY;
	case R_MICROBLAZE_TLSDTPMOD32:
		return REL_DTPMOD;
	case R_MICROBLAZE_TLSDTPREL32:
		return REL_DTPOFF;
	}
	return 0;
}

#include "syscall.h"
void __reloc_self(int c, size_t *a, size_t *dynv)
{
	char dot = '.', ex = 'x';
	char *base;
	size_t t[20], n;
	for (a+=c+1; *a; a++);
	for (a++; *a; a+=2) if (*a<20) t[*a] = a[1];
	base = (char *)t[AT_BASE];
	if (!base) base = (char *)(t[AT_PHDR] & -t[AT_PAGESZ]);
	for (a=dynv; *a; a+=2) if (*a<20) t[*a] = a[1];
	n = t[DT_RELASZ];
	for (a=(void *)(base+t[DT_RELA]); n; a+=3, n-=12)
		if (a[1]%256 == R_MICROBLAZE_REL)
			*(size_t *)(base+a[0]) = (size_t)base + a[2];
}


text:
#ifndef _INTERNAL_ATOMIC_H
#define _INTERNAL_ATOMIC_H

#include <stdint.h>

static inline int a_ctz_l(unsigned long x)
{
	static const char debruijn32[32] = {
		0, 1, 23, 2, 29, 24, 19, 3, 30, 27, 25, 11, 20, 8, 4, 13,
		31, 22, 28, 18, 26, 10, 7, 12, 21, 17, 9, 6, 16, 5, 15, 14
	};
	return debruijn32[(x&-x)*0x076be629 >> 27];
}

static inline int a_ctz_64(uint64_t x)
{
	uint32_t y = x;
	if (!y) {
		y = x>>32;
		return 32 + a_ctz_l(y);
	}
	return a_ctz_l(y);
}

static inline int a_cas(volatile int *p, int t, int s)
{
	register int old, tmp;
	__asm__ __volatile__ (
		"	addi %0, r0, 0\n"
		"1:	lwx %0, %2, r0\n"
		"	rsubk %1, %0, %3\n"
		"	bnei %1, 1f\n"
		"	swx %4, %2, r0\n"
		"	addic %1, r0, 0\n"
		"	bnei %1, 1b\n"
		"1:	"
		: "=&r"(old), "=&r"(tmp)
		: "r"(p), "r"(t), "r"(s)
		: "cc", "memory" );
	return old;
}

static inline void *a_cas_p(volatile void *p, void *t, void *s)
{
	return (void *)a_cas(p, (int)t, (int)s);
}

static inline int a_swap(volatile int *x, int v)
{
	register int old, tmp;
	__asm__ __volatile__ (
		"	addi %0, r0, 0\n"
		"1:	lwx %0, %2, r0\n"
		"	swx %3, %2, r0\n"
		"	addic %1, r0, 0\n"
		"	bnei %1, 1b\n"
		"1:	"
		: "=&r"(old), "=&r"(tmp)
		: "r"(x), "r"(v)
		: "cc", "memory" );
	return old;
}

static inline int a_fetch_add(volatile int *x, int v)
{
	register int new, tmp;
	__asm__ __volatile__ (
		"	addi %0, r0, 0\n"
		"1:	lwx %0, %2, r0\n"
		"	addk %0, %0, %3\n"
		"	swx %0, %2, r0\n"
		"	addic %1, r0, 0\n"
		"	bnei %1, 1b\n"
		"1:	"
		: "=&r"(new), "=&r"(tmp)
		: "r"(x), "r"(v)
		: "cc", "memory" );
	return new-v;
}

static inline void a_inc(volatile int *x)
{
	a_fetch_add(x, 1);
}

static inline void a_dec(volatile int *x)
{
	a_fetch_add(x, -1);
}

static inline void a_store(volatile int *p, int x)
{
	__asm__ __volatile__ (
		"swi %1, %0"
		: "=m"(*p) : "r"(x) : "memory" );
}

#define a_spin a_barrier

static inline void a_barrier()
{
	a_cas(&(int){0}, 0, 0);
}

static inline void a_crash()
{
	*(volatile char *)0=0;
}

static inline void a_and(volatile int *p, int v)
{
	int old;
	do old = *p;
	while (a_cas(p, old, old&v) != old);
}

static inline void a_or(volatile int *p, int v)
{
	int old;
	do old = *p;
	while (a_cas(p, old, old|v) != old);
}

static inline void a_or_l(volatile void *p, long v)
{
	a_or(p, v);
}

static inline void a_and_64(volatile uint64_t *p, uint64_t v)
{
	union { uint64_t v; uint32_t r[2]; } u = { v };
	a_and((int *)p, u.r[0]);
	a_and((int *)p+1, u.r[1]);
}

static inline void a_or_64(volatile uint64_t *p, uint64_t v)
{
	union { uint64_t v; uint32_t r[2]; } u = { v };
	a_or((int *)p, u.r[0]);
	a_or((int *)p+1, u.r[1]);
}

#endif


text:
#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, ...);

#ifndef __clang__

static __inline long __syscall0(long n)
{
	register unsigned long r12 __asm__("r12") = n;
	register unsigned long r3 __asm__("r3");
	__asm__ __volatile__ ("brki r14, 0x8" : "=r"(r3)
		: "r"(r12)
		: "memory", "r4");
	return r3;
}

static inline long __syscall1(long n, long a)
{
	register unsigned long r12 __asm__("r12") = n;
	register unsigned long r3 __asm__("r3");
	register unsigned long r5 __asm__("r5") = a;
	__asm__ __volatile__ ("brki r14, 0x8" : "=r"(r3)
		: "r"(r12), "r"(r5)
		: "memory", "r4");
	return r3;
}

static inline long __syscall2(long n, long a, long b)
{
	register unsigned long r12 __asm__("r12") = n;
	register unsigned long r3 __asm__("r3");
	register unsigned long r5 __asm__("r5") = a;
	register unsigned long r6 __asm__("r6") = b;
	__asm__ __volatile__ ("brki r14, 0x8" : "=r"(r3)
		: "r"(r12), "r"(r5), "r"(r6)
		: "memory", "r4");
	return r3;
}

static inline long __syscall3(long n, long a, long b, long c)
{
	register unsigned long r12 __asm__("r12") = n;
	register unsigned long r3 __asm__("r3");
	register unsigned long r5 __asm__("r5") = a;
	register unsigned long r6 __asm__("r6") = b;
	register unsigned long r7 __asm__("r7") = c;
	__asm__ __volatile__ ("brki r14, 0x8" : "=r"(r3)
		: "r"(r12), "r"(r5), "r"(r6), "r"(r7)
		: "memory", "r4");
	return r3;
}

static inline long __syscall4(long n, long a, long b, long c, long d)
{
	register unsigned long r12 __asm__("r12") = n;
	register unsigned long r3 __asm__("r3");
	register unsigned long r5 __asm__("r5") = a;
	register unsigned long r6 __asm__("r6") = b;
	register unsigned long r7 __asm__("r7") = c;
	register unsigned long r8 __asm__("r8") = d;
	__asm__ __volatile__ ("brki r14, 0x8" : "=r"(r3)
		: "r"(r12), "r"(r5), "r"(r6), "r"(r7), "r"(r8)
		: "memory", "r4");
	return r3;
}

static inline long __syscall5(long n, long a, long b, long c, long d, long e)
{
	register unsigned long r12 __asm__("r12") = n;
	register unsigned long r3 __asm__("r3");
	register unsigned long r5 __asm__("r5") = a;
	register unsigned long r6 __asm__("r6") = b;
	register unsigned long r7 __asm__("r7") = c;
	register unsigned long r8 __asm__("r8") = d;
	register unsigned long r9 __asm__("r9") = e;
	__asm__ __volatile__ ("brki r14, 0x8" : "=r"(r3)
		: "r"(r12), "r"(r5), "r"(r6), "r"(r7), "r"(r8), "r"(r9)
		: "memory", "r4");
	return r3;
}

static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
{
	register unsigned long r12 __asm__("r12") = n;
	register unsigned long r3 __asm__("r3");
	register unsigned long r5 __asm__("r5") = a;
	register unsigned long r6 __asm__("r6") = b;
	register unsigned long r7 __asm__("r7") = c;
	register unsigned long r8 __asm__("r8") = d;
	register unsigned long r9 __asm__("r9") = e;
	register unsigned long r10 __asm__("r10") = f;
	__asm__ __volatile__ ("brki r14, 0x8" : "=r"(r3)
		: "r"(r12), "r"(r5), "r"(r6), "r"(r7), "r"(r8), "r"(r9), "r"(r10)
		: "memory", "r4");
	return r3;
}

#else

static inline long __syscall0(long n)
{
	return (__syscall)(n);
}

static inline long __syscall1(long n, long a)
{
	return (__syscall)(n, a);
}

static inline long __syscall2(long n, long a, long b)
{
	return (__syscall)(n, a, b);
}

static inline long __syscall3(long n, long a, long b, long c)
{
	return (__syscall)(n, a, b, c);
}

static inline long __syscall4(long n, long a, long b, long c, long d)
{
	return (__syscall)(n, a, b, c, d);
}

static inline long __syscall5(long n, long a, long b, long c, long d, long e)
{
	return (__syscall)(n, a, b, c, d, e);
}

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);
}

#endif


text:
__asm__("\
.global _start \n\
.align  2 \n\
_start: \n\
	add r19, r0, r0 \n\
	ori r5, r1, 0 \n\
	andi r1, r1, -8 \n\
	addik r1, r1, -8 \n\
	bri __cstart \n\
	nop \n\
");


text: /* FIXME: missing in kernel? */


text:
#if __MICROBLAZEEL__
#define __BYTE_ORDER __LITTLE_ENDIAN
#else
#define __BYTE_ORDER __BIG_ENDIAN
#endif


text:
#define FLT_ROUNDS 1
#define FLT_EVAL_METHOD 0

#define LDBL_TRUE_MIN 4.94065645841246544177e-324L
#define LDBL_MIN 2.22507385850720138309e-308L
#define LDBL_MAX 1.79769313486231570815e+308L
#define LDBL_EPSILON 2.22044604925031308085e-16L

#define LDBL_MANT_DIG 53
#define LDBL_MIN_EXP (-1021)
#define LDBL_MAX_EXP 1024

#define LDBL_DIG 15
#define LDBL_MIN_10_EXP (-307)
#define LDBL_MAX_10_EXP 308

#define DECIMAL_DIG 17


text:
#define FE_ALL_EXCEPT 0
#define FE_TONEAREST  0

typedef unsigned long fexcept_t;

typedef struct {
	unsigned long __cw;
} fenv_t;

#define FE_DFL_ENV      ((const fenv_t *) -1)


text:
#define _IOC(a,b,c,d) ( ((a)<<30) | ((b)<<8) | (c) | ((d)<<16) )
#define _IOC_NONE  0U
#define _IOC_WRITE 1U
#define _IOC_READ  2U

#define _IO(a,b) _IOC(_IOC_NONE,(a),(b),0)
#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
#define TCSETSW		0x5403
#define TCSETSF		0x5404
#define TCGETA		0x5405
#define TCSETA		0x5406
#define TCSETAW		0x5407
#define TCSETAF		0x5408
#define TCSBRK		0x5409
#define TCXONC		0x540A
#define TCFLSH		0x540B
#define TIOCEXCL	0x540C
#define TIOCNXCL	0x540D
#define TIOCSCTTY	0x540E
#define TIOCGPGRP	0x540F
#define TIOCSPGRP	0x5410
#define TIOCOUTQ	0x5411
#define TIOCSTI		0x5412
#define TIOCGWINSZ	0x5413
#define TIOCSWINSZ	0x5414
#define TIOCMGET	0x5415
#define TIOCMBIS	0x5416
#define TIOCMBIC	0x5417
#define TIOCMSET	0x5418
#define TIOCGSOFTCAR	0x5419
#define TIOCSSOFTCAR	0x541A
#define FIONREAD	0x541B
#define TIOCINQ		FIONREAD
#define TIOCLINUX	0x541C
#define TIOCCONS	0x541D
#define TIOCGSERIAL	0x541E
#define TIOCSSERIAL	0x541F
#define TIOCPKT		0x5420
#define FIONBIO		0x5421
#define TIOCNOTTY	0x5422
#define TIOCSETD	0x5423
#define TIOCGETD	0x5424
#define TCSBRKP		0x5425
#define TIOCTTYGSTRUCT	0x5426
#define TIOCSBRK	0x5427
#define TIOCCBRK	0x5428
#define TIOCGSID	0x5429
#define TIOCGPTN	0x80045430
#define TIOCSPTLCK	0x40045431
#define TCGETX		0x5432
#define TCSETX		0x5433
#define TCSETXF		0x5434
#define TCSETXW		0x5435

#define FIONCLEX	0x5450
#define FIOCLEX		0x5451
#define FIOASYNC	0x5452
#define TIOCSERCONFIG	0x5453
#define TIOCSERGWILD	0x5454
#define TIOCSERSWILD	0x5455
#define TIOCGLCKTRMIOS	0x5456
#define TIOCSLCKTRMIOS	0x5457
#define TIOCSERGSTRUCT	0x5458
#define TIOCSERGETLSR   0x5459
#define TIOCSERGETMULTI 0x545A
#define TIOCSERSETMULTI 0x545B

#define TIOCMIWAIT	0x545C
#define TIOCGICOUNT	0x545D
#define TIOCGHAYESESP   0x545E
#define TIOCSHAYESESP   0x545F
#define FIOQSIZE	0x5460

#define TIOCPKT_DATA		 0
#define TIOCPKT_FLUSHREAD	 1
#define TIOCPKT_FLUSHWRITE	 2
#define TIOCPKT_STOP		 4
#define TIOCPKT_START		 8
#define TIOCPKT_NOSTOP		16
#define TIOCPKT_DOSTOP		32
#define TIOCPKT_IOCTL		64

#define TIOCSER_TEMT    0x01

struct winsize {
	unsigned short ws_row;
	unsigned short ws_col;
	unsigned short ws_xpixel;
	unsigned short ws_ypixel;
};

#define TIOCM_LE        0x001
#define TIOCM_DTR       0x002
#define TIOCM_RTS       0x004
#define TIOCM_ST        0x008
#define TIOCM_SR        0x010
#define TIOCM_CTS       0x020
#define TIOCM_CAR       0x040
#define TIOCM_RNG       0x080
#define TIOCM_DSR       0x100
#define TIOCM_CD        TIOCM_CAR
#define TIOCM_RI        TIOCM_RNG
#define TIOCM_OUT1      0x2000
#define TIOCM_OUT2      0x4000
#define TIOCM_LOOP      0x8000
#define TIOCM_MODEM_BITS TIOCM_OUT2

#define N_TTY           0
#define N_SLIP          1
#define N_MOUSE         2
#define N_PPP           3
#define N_STRIP         4
#define N_AX25          5
#define N_X25           6
#define N_6PACK         7
#define N_MASC          8
#define N_R3964         9
#define N_PROFIBUS_FDL  10
#define N_IRDA          11
#define N_SMSBLOCK      12
#define N_HDLC          13
#define N_SYNC_PPP      14
#define N_HCI           15

#define FIOSETOWN       0x8901
#define SIOCSPGRP       0x8902
#define FIOGETOWN       0x8903
#define SIOCGPGRP       0x8904
#define SIOCATMARK      0x8905
#define SIOCGSTAMP      0x8906

#define SIOCADDRT       0x890B
#define SIOCDELRT       0x890C
#define SIOCRTMSG       0x890D

#define SIOCGIFNAME     0x8910
#define SIOCSIFLINK     0x8911
#define SIOCGIFCONF     0x8912
#define SIOCGIFFLAGS    0x8913
#define SIOCSIFFLAGS    0x8914
#define SIOCGIFADDR     0x8915
#define SIOCSIFADDR     0x8916
#define SIOCGIFDSTADDR  0x8917
#define SIOCSIFDSTADDR  0x8918
#define SIOCGIFBRDADDR  0x8919
#define SIOCSIFBRDADDR  0x891a
#define SIOCGIFNETMASK  0x891b
#define SIOCSIFNETMASK  0x891c
#define SIOCGIFMETRIC   0x891d
#define SIOCSIFMETRIC   0x891e
#define SIOCGIFMEM      0x891f
#define SIOCSIFMEM      0x8920
#define SIOCGIFMTU      0x8921
#define SIOCSIFMTU      0x8922
#define SIOCSIFHWADDR   0x8924
#define SIOCGIFENCAP    0x8925
#define SIOCSIFENCAP    0x8926
#define SIOCGIFHWADDR   0x8927
#define SIOCGIFSLAVE    0x8929
#define SIOCSIFSLAVE    0x8930
#define SIOCADDMULTI    0x8931
#define SIOCDELMULTI    0x8932
#define SIOCGIFINDEX    0x8933
#define SIOGIFINDEX     SIOCGIFINDEX
#define SIOCSIFPFLAGS   0x8934
#define SIOCGIFPFLAGS   0x8935
#define SIOCDIFADDR     0x8936
#define SIOCSIFHWBROADCAST 0x8937
#define SIOCGIFCOUNT    0x8938

#define SIOCGIFBR       0x8940
#define SIOCSIFBR       0x8941

#define SIOCGIFTXQLEN   0x8942
#define SIOCSIFTXQLEN   0x8943

#define SIOCDARP        0x8953
#define SIOCGARP        0x8954
#define SIOCSARP        0x8955

#define SIOCDRARP       0x8960
#define SIOCGRARP       0x8961
#define SIOCSRARP       0x8962

#define SIOCGIFMAP      0x8970
#define SIOCSIFMAP      0x8971

#define SIOCADDDLCI     0x8980
#define SIOCDELDLCI     0x8981

#define SIOCDEVPRIVATE		0x89F0
#define SIOCPROTOPRIVATE	0x89E0


text:
#define SHMLBA 4096

struct shmid_ds
{
	struct ipc_perm shm_perm;
	size_t shm_segsz;
	time_t shm_atime;
	int __unused1;
	time_t shm_dtime;
	int __unused2;
	time_t shm_ctime;
	int __unused3;
	pid_t shm_cpid;
	pid_t shm_lpid;
	unsigned long shm_nattch;
	unsigned long __pad1;
	unsigned long __pad2;
};

struct shminfo {
	unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4];
};

struct shm_info {
	int __used_ids;
	unsigned long shm_tot, shm_rss, shm_swp;
	unsigned long __swap_attempts, __swap_successes;
};


text:
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)

#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
typedef unsigned long greg_t, gregset_t[38];
typedef struct sigcontext
{
	struct {
		unsigned long r0, r1, r2, r3, r4, r5, r6, r7;
		unsigned long r8, r9, r10, r11, r12, r13, r14, r15;
		unsigned long r16, r17, r18, r19, r20, r21, r22, r23;
		unsigned long r24, r25, r26, r27, r28, r29, r30, r31;
		unsigned long pc, msr, ear, esr, fsr;
		int pt_mode;
	} regs;
	unsigned long oldmask;
} mcontext_t;
#else
typedef struct {
	unsigned long __regs[39];
} mcontext_t;
#endif

struct sigaltstack {
	void *ss_sp;
	int ss_flags;
	size_t ss_size;
};

typedef struct __ucontext {
	unsigned long uc_flags;
	struct __ucontext *uc_link;
	stack_t uc_stack;
	mcontext_t uc_mcontext;
	sigset_t uc_sigmask;
} 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

#endif

#define SIGHUP    1
#define SIGINT    2
#define SIGQUIT   3
#define SIGILL    4
#define SIGTRAP   5
#define SIGABRT   6
#define SIGIOT    SIGABRT
#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

#define _NSIG 65


text:
struct ipc_perm
{
	key_t __ipc_perm_key;
	uid_t uid;
	gid_t gid;
	uid_t cuid;
	gid_t cgid;
	mode_t mode;
	int __ipc_perm_seq;
	long __pad1;
	long __pad2;
};

#define IPC_64 0x100


text:
#define _POSIX_V6_ILP32_OFFBIG  1
#define _POSIX_V7_ILP32_OFFBIG  1


text:
#define va_start(v,l)   __builtin_va_start(v,l)
#define va_end(v)       __builtin_va_end(v)
#define va_arg(v,l)     __builtin_va_arg(v,l)
#define va_copy(d,s)    __builtin_va_copy(d,s)


text:
struct termios
{
	tcflag_t c_iflag;
	tcflag_t c_oflag;
	tcflag_t c_cflag;
	tcflag_t c_lflag;
	cc_t c_line;
	cc_t c_cc[NCCS];
	speed_t __c_ispeed;
	speed_t __c_ospeed;
};

#define VINTR     0
#define VQUIT     1
#define VERASE    2
#define VKILL     3
#define VEOF      4
#define VTIME     5
#define VMIN      6
#define VSWTC     7
#define VSTART    8
#define VSTOP     9
#define VSUSP    10
#define VEOL     11
#define VREPRINT 12
#define VDISCARD 13
#define VWERASE  14
#define VLNEXT   15
#define VEOL2    16

#define IGNBRK  0000001
#define BRKINT  0000002
#define IGNPAR  0000004
#define PARMRK  0000010
#define INPCK   0000020
#define ISTRIP  0000040
#define INLCR   0000100
#define IGNCR   0000200
#define ICRNL   0000400
#define IUCLC   0001000
#define IXON    0002000
#define IXANY   0004000
#define IXOFF   0010000
#define IMAXBEL 0020000
#define IUTF8   0040000

#define OPOST  0000001
#define OLCUC  0000002
#define ONLCR  0000004
#define OCRNL  0000010
#define ONOCR  0000020
#define ONLRET 0000040
#define OFILL  0000100
#define OFDEL  0000200
#define NLDLY  0000400
#define NL0    0000000
#define NL1    0000400
#define CRDLY  0003000
#define CR0    0000000
#define CR1    0001000
#define CR2    0002000
#define CR3    0003000
#define TABDLY 0014000
#define TAB0   0000000
#define TAB1   0004000
#define TAB2   0010000
#define TAB3   0014000
#define BSDLY  0020000
#define BS0    0000000
#define BS1    0020000
#define FFDLY  0100000
#define FF0    0000000
#define FF1    0100000

#define VTDLY  0040000
#define VT0    0000000
#define VT1    0040000

#define B0       0000000
#define B50      0000001
#define B75      0000002
#define B110     0000003
#define B134     0000004
#define B150     0000005
#define B200     0000006
#define B300     0000007
#define B600     0000010
#define B1200    0000011
#define B1800    0000012
#define B2400    0000013
#define B4800    0000014
#define B9600    0000015
#define B19200   0000016
#define B38400   0000017

#define B57600   0010001
#define B115200  0010002
#define B230400  0010003
#define B460800  0010004
#define B500000  0010005
#define B576000  0010006
#define B921600  0010007
#define B1000000 0010010
#define B1152000 0010011
#define B1500000 0010012
#define B2000000 0010013
#define B2500000 0010014
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017

#define CBAUD    0010017

#define CSIZE  0000060
#define CS5    0000000
#define CS6    0000020
#define CS7    0000040
#define CS8    0000060
#define CSTOPB 0000100
#define CREAD  0000200
#define PARENB 0000400
#define PARODD 0001000
#define HUPCL  0002000
#define CLOCAL 0004000

#define ISIG   0000001
#define ICANON 0000002
#define ECHO   0000010
#define ECHOE  0000020
#define ECHOK  0000040
#define ECHONL 0000100
#define NOFLSH 0000200
#define TOSTOP 0000400
#define IEXTEN 0100000

#define ECHOCTL 0001000
#define ECHOPRT 0002000
#define ECHOKE 0004000
#define FLUSHO 0010000
#define PENDIN 0040000

#define TCOOFF 0
#define TCOON  1
#define TCIOFF 2
#define TCION  3

#define TCIFLUSH  0
#define TCOFLUSH  1
#define TCIOFLUSH 2

#define TCSANOW   0
#define TCSADRAIN 1
#define TCSAFLUSH 2

#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
#define CBAUDEX 0010000
#define CRTSCTS  020000000000
#define EXTPROC 0200000
#define XTABS  0014000
#endif


text: typedef unsigned long __jmp_buf[18];


text:
#define O_CREAT        0100
#define O_EXCL         0200
#define O_NOCTTY       0400
#define O_TRUNC       01000
#define O_APPEND      02000
#define O_NONBLOCK    04000
#define O_DSYNC      010000
#define O_SYNC     04010000
#define O_RSYNC    04010000
#define O_DIRECTORY 0200000
#define O_NOFOLLOW  0400000
#define O_CLOEXEC  02000000

#define O_ASYNC      020000
#define O_DIRECT     040000
#define O_LARGEFILE 0100000
#define O_NOATIME  01000000
#define O_TMPFILE 020200000
#define O_NDELAY O_NONBLOCK

#define F_DUPFD  0
#define F_GETFD  1
#define F_SETFD  2
#define F_GETFL  3
#define F_SETFL  4

#define F_SETOWN 8
#define F_GETOWN 9
#define F_SETSIG 10
#define F_GETSIG 11

#define F_GETLK 12
#define F_SETLK 13
#define F_SETLKW 14

#define F_SETOWN_EX 15
#define F_GETOWN_EX 16

#define F_GETOWNER_UIDS 17


text:
#undef __WORDSIZE
#define __WORDSIZE 32
/* FIXME */


text:
struct semid_ds {
	struct ipc_perm sem_perm;
	time_t sem_otime;
	time_t __unused1;
	time_t sem_ctime;
	time_t __unused2;
#if __BYTE_ORDER == __LITTLE_ENDIAN
	unsigned short sem_nsems;
	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)];
#else
	char __sem_nsems_pad[sizeof(time_t)-sizeof(short)];
	unsigned short sem_nsems;
#endif
	time_t __unused3;
	time_t __unused4;
};


text:
struct msqid_ds
{
	struct ipc_perm msg_perm;
	time_t msg_stime;
	int __unused1;
	time_t msg_rtime;
	int __unused2;
	time_t msg_ctime;
	int __unused3;
	unsigned long msg_cbytes;
	msgqnum_t msg_qnum;
	msglen_t msg_qbytes;
	pid_t msg_lspid;
	pid_t msg_lrpid;
	unsigned long __unused[2];
};


text:
#define EPERM            1
#define ENOENT           2
#define ESRCH            3
#define EINTR            4
#define EIO              5
#define ENXIO            6
#define E2BIG            7
#define ENOEXEC          8
#define EBADF            9
#define ECHILD          10
#define EAGAIN          11
#define ENOMEM          12
#define EACCES          13
#define EFAULT          14
#define ENOTBLK         15
#define EBUSY           16
#define EEXIST          17
#define EXDEV           18
#define ENODEV          19
#define ENOTDIR         20
#define EISDIR          21
#define EINVAL          22
#define ENFILE          23
#define EMFILE          24
#define ENOTTY          25
#define ETXTBSY         26
#define EFBIG           27
#define ENOSPC          28
#define ESPIPE          29
#define EROFS           30
#define EMLINK          31
#define EPIPE           32
#define EDOM            33
#define ERANGE          34
#define EDEADLK         35
#define ENAMETOOLONG    36
#define ENOLCK          37
#define ENOSYS          38
#define ENOTEMPTY       39
#define ELOOP           40
#define EWOULDBLOCK     EAGAIN
#define ENOMSG          42
#define EIDRM           43
#define ECHRNG          44
#define EL2NSYNC        45
#define EL3HLT          46
#define EL3RST          47
#define ELNRNG          48
#define EUNATCH         49
#define ENOCSI          50
#define EL2HLT          51
#define EBADE           52
#define EBADR           53
#define EXFULL          54
#define ENOANO          55
#define EBADRQC         56
#define EBADSLT         57
#define EDEADLOCK       EDEADLK
#define EBFONT          59
#define ENOSTR          60
#define ENODATA         61
#define ETIME           62
#define ENOSR           63
#define ENONET          64
#define ENOPKG          65
#define EREMOTE         66
#define ENOLINK         67
#define EADV            68
#define ESRMNT          69
#define ECOMM           70
#define EPROTO          71
#define EMULTIHOP       72
#define EDOTDOT         73
#define EBADMSG         74
#define EOVERFLOW       75
#define ENOTUNIQ        76
#define EBADFD          77
#define EREMCHG         78
#define ELIBACC         79
#define ELIBBAD         80
#define ELIBSCN         81
#define ELIBMAX         82
#define ELIBEXEC        83
#define EILSEQ          84
#define ERESTART        85
#define ESTRPIPE        86
#define EUSERS          87
#define ENOTSOCK        88
#define EDESTADDRREQ    89
#define EMSGSIZE        90
#define EPROTOTYPE      91
#define ENOPROTOOPT     92
#define EPROTONOSUPPORT 93
#define ESOCKTNOSUPPORT 94
#define EOPNOTSUPP      95
#define ENOTSUP         EOPNOTSUPP
#define EPFNOSUPPORT    96
#define EAFNOSUPPORT    97
#define EADDRINUSE      98
#define EADDRNOTAVAIL   99
#define ENETDOWN        100
#define ENETUNREACH     101
#define ENETRESET       102
#define ECONNABORTED    103
#define ECONNRESET      104
#define ENOBUFS         105
#define EISCONN         106
#define ENOTCONN        107
#define ESHUTDOWN       108
#define ETOOMANYREFS    109
#define ETIMEDOUT       110
#define ECONNREFUSED    111
#define EHOSTDOWN       112
#define EHOSTUNREACH    113
#define EALREADY        114
#define EINPROGRESS     115
#define ESTALE          116
#define EUCLEAN         117
#define ENOTNAM         118
#define ENAVAIL         119
#define EISNAM          120
#define EREMOTEIO       121
#define EDQUOT          122
#define ENOMEDIUM       123
#define EMEDIUMTYPE     124
#define ECANCELED       125
#define ENOKEY          126
#define EKEYEXPIRED     127
#define EKEYREVOKED     128
#define EKEYREJECTED    129
#define EOWNERDEAD      130
#define ENOTRECOVERABLE 131
#define ERFKILL         132
#define EHWPOISON       133


text:
#define MAP_FAILED ((void *) -1)

#define	PROT_NONE      0
#define	PROT_READ      1
#define	PROT_WRITE     2
#define	PROT_EXEC      4
#define	PROT_GROWSDOWN 0x01000000
#define	PROT_GROWSUP   0x02000000

#define	MAP_SHARED     0x01
#define	MAP_PRIVATE    0x02
#define	MAP_FIXED      0x10

#define MAP_TYPE       0x0f
#define MAP_FILE       0x00
#define MAP_ANON       0x20
#define MAP_ANONYMOUS  MAP_ANON
#define MAP_NORESERVE  0x4000
#define MAP_GROWSDOWN  0x0100
#define MAP_DENYWRITE  0x0800
#define MAP_EXECUTABLE 0x1000
#define MAP_LOCKED     0x2000
#define MAP_POPULATE   0x8000
#define MAP_NONBLOCK   0x10000
#define MAP_STACK      0x20000
#define MAP_HUGETLB    0x40000

#define POSIX_MADV_NORMAL       0
#define POSIX_MADV_RANDOM       1
#define POSIX_MADV_SEQUENTIAL   2
#define POSIX_MADV_WILLNEED     3
#define POSIX_MADV_DONTNEED     0

#define MS_ASYNC        1
#define MS_INVALIDATE   2
#define MS_SYNC         4

#define MCL_CURRENT     1
#define MCL_FUTURE      2

#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
#define MADV_NORMAL      0
#define MADV_RANDOM      1
#define MADV_SEQUENTIAL  2
#define MADV_WILLNEED    3
#define MADV_DONTNEED    4
#define MADV_REMOVE      9
#define MADV_DONTFORK    10
#define MADV_DOFORK      11
#define MADV_MERGEABLE   12
#define MADV_UNMERGEABLE 13
#define MADV_HUGEPAGE    14
#define MADV_NOHUGEPAGE  15
#define MADV_DONTDUMP    16
#define MADV_DODUMP      17
#define MADV_HWPOISON    100
#define MADV_SOFT_OFFLINE 101

#define MREMAP_MAYMOVE  1
#define MREMAP_FIXED    2
#endif


text:
/* copied from kernel definition, but with padding replaced
 * by the corresponding correctly-sized userspace types. */

struct stat
{
	dev_t st_dev;
	ino_t st_ino;
	mode_t st_mode;
	nlink_t st_nlink;
	uid_t st_uid;
	gid_t st_gid;
	dev_t st_rdev;
	long long __st_rdev_padding;
	off_t st_size;
	blksize_t st_blksize;
	int __st_blksize_padding;
	blkcnt_t st_blocks;
	struct timespec st_atim;
	struct timespec st_mtim;
	struct timespec st_ctim;
	unsigned __unused[2];
};


text:
typedef int32_t int_fast16_t;
typedef int32_t int_fast32_t;
typedef uint32_t uint_fast16_t;
typedef uint32_t uint_fast32_t;

#define INT_FAST16_MIN  INT32_MIN
#define INT_FAST32_MIN  INT32_MIN

#define INT_FAST16_MAX  INT32_MAX
#define INT_FAST32_MAX  INT32_MAX

#define UINT_FAST16_MAX UINT32_MAX
#define UINT_FAST32_MAX UINT32_MAX

#define INTPTR_MIN      INT32_MIN
#define INTPTR_MAX      INT32_MAX
#define UINTPTR_MAX     UINT32_MAX
#define PTRDIFF_MIN     INT32_MIN
#define PTRDIFF_MAX     INT32_MAX
#define SIZE_MAX        UINT32_MAX


text:
struct statfs {
	unsigned long f_type, f_bsize;
	fsblkcnt_t f_blocks, f_bfree, f_bavail;
	fsfilcnt_t f_files, f_ffree;
	fsid_t f_fsid;
	unsigned long f_namelen, f_frsize, f_flags, f_spare[4];
};


text:
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
#define LONG_BIT 32
#endif

#define LONG_MAX  0x7fffffffL
#define LLONG_MAX  0x7fffffffffffffffLL


text:
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;
};

struct cmsghdr
{
	socklen_t cmsg_len;
	int cmsg_level;
	int cmsg_type;
};


text:
#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_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_pread 180
#define __NR_pwrite 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_getdents64 220
#define __NR_fcntl64 221
#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_fadvise 250
#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 260
#define __NR_timer_gettime 261
#define __NR_timer_getoverrun 262
#define __NR_timer_delete 263
#define __NR_clock_settime 264
#define __NR_clock_gettime 265
#define __NR_clock_getres 266
#define __NR_clock_nanosleep 267
#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 278
#define __NR_mq_timedsend 279
#define __NR_mq_timedreceive 280
#define __NR_mq_notify 281
#define __NR_mq_getsetattr 282
#define __NR_kexec_load 283
#define __NR_waitid 284
#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_fstatat 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_semtimedop 325
#define __NR_timerfd_settime 326
#define __NR_timerfd_gettime 327
#define __NR_semctl 328
#define __NR_semget 329
#define __NR_semop 330
#define __NR_msgctl 331
#define __NR_msgget 332
#define __NR_msgrcv 333
#define __NR_msgsnd 334
#define __NR_shmat 335
#define __NR_shmctl 336
#define __NR_shmdt 337
#define __NR_shmget 338
#define __NR_signalfd4 339
#define __NR_eventfd2 340
#define __NR_epoll_create1 341
#define __NR_dup3 342
#define __NR_pipe2 343
#define __NR_inotify_init1 344
#define __NR_socket 345
#define __NR_socketpair 346
#define __NR_bind 347
#define __NR_listen 348
#define __NR_accept 349
#define __NR_connect 350
#define __NR_getsockname 351
#define __NR_getpeername 352
#define __NR_sendto 353
#define __NR_send 354
#define __NR_recvfrom 355
#define __NR_recv 356
#define __NR_setsockopt 357
#define __NR_getsockopt 358
#define __NR_shutdown 359
#define __NR_sendmsg 360
#define __NR_recvmsg 361
#define __NR_accept4 362
#define __NR_preadv 363
#define __NR_pwritev 364
#define __NR_rt_tgsigqueueinfo 365
#define __NR_perf_event_open 366
#define __NR_recvmmsg 367
#define __NR_fanotify_init 368
#define __NR_fanotify_mark 369
#define __NR_prlimit64 370
#define __NR_name_to_handle_at 371
#define __NR_open_by_handle_at 372
#define __NR_clock_adjtime 373
#define __NR_syncfs 374
#define __NR_setns 375
#define __NR_sendmmsg 376
#define __NR_process_vm_readv 377
#define __NR_process_vm_writev 378
#define __NR_kcmp 379
#define __NR_finit_module 380
#define __NR_sched_setattr 381
#define __NR_sched_getattr 382
#define __NR_renameat2 383
#define __NR_seccomp 384
#define __NR_getrandom 385
#define __NR_memfd_create 386

/* Repeated with SYS_ prefix */

#define SYS_SYSCALL_BASE 0
#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_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_pread 180
#define SYS_pwrite 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_getdents64 220
#define SYS_fcntl64 221
#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_fadvise 250
#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 260
#define SYS_timer_gettime 261
#define SYS_timer_getoverrun 262
#define SYS_timer_delete 263
#define SYS_clock_settime 264
#define SYS_clock_gettime 265
#define SYS_clock_getres 266
#define SYS_clock_nanosleep 267
#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 278
#define SYS_mq_timedsend 279
#define SYS_mq_timedreceive 280
#define SYS_mq_notify 281
#define SYS_mq_getsetattr 282
#define SYS_kexec_load 283
#define SYS_waitid 284
#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_fstatat 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_semtimedop 325
#define SYS_timerfd_settime 326
#define SYS_timerfd_gettime 327
#define SYS_semctl 328
#define SYS_semget 329
#define SYS_semop 330
#define SYS_msgctl 331
#define SYS_msgget 332
#define SYS_msgrcv 333
#define SYS_msgsnd 334
#define SYS_shmat 335
#define SYS_shmctl 336
#define SYS_shmdt 337
#define SYS_shmget 338
#define SYS_signalfd4 339
#define SYS_eventfd2 340
#define SYS_epoll_create1 341
#define SYS_dup3 342
#define SYS_pipe2 343
#define SYS_inotify_init1 344
#define SYS_socket 345
#define SYS_socketpair 346
#define SYS_bind 347
#define SYS_listen 348
#define SYS_accept 349
#define SYS_connect 350
#define SYS_getsockname 351
#define SYS_getpeername 352
#define SYS_sendto 353
#define SYS_send 354
#define SYS_recvfrom 355
#define SYS_recv 356
#define SYS_setsockopt 357
#define SYS_getsockopt 358
#define SYS_shutdown 359
#define SYS_sendmsg 360
#define SYS_recvmsg 361
#define SYS_accept4 362
#define SYS_preadv 363
#define SYS_pwritev 364
#define SYS_rt_tgsigqueueinfo 365
#define SYS_perf_event_open 366
#define SYS_recvmmsg 367
#define SYS_fanotify_init 368
#define SYS_fanotify_mark 369
#define SYS_prlimit64 370
#define SYS_name_to_handle_at 371
#define SYS_open_by_handle_at 372
#define SYS_clock_adjtime 373
#define SYS_syncfs 374
#define SYS_setns 375
#define SYS_sendmmsg 376
#define SYS_process_vm_readv 377
#define SYS_process_vm_writev 378
#define SYS_kcmp 379
#define SYS_finit_module 380
#define SYS_sched_setattr 381
#define SYS_sched_getattr 382
#define SYS_renameat2 383
#define SYS_seccomp 384
#define SYS_getrandom 385
#define SYS_memfd_create 386


text:
#define _Addr int
#define _Int64 long long
#define _Reg int

TYPEDEF __builtin_va_list va_list;
TYPEDEF __builtin_va_list __isoc_va_list;

#ifndef __cplusplus
TYPEDEF int wchar_t;
#endif
TYPEDEF unsigned wint_t;

TYPEDEF float float_t;
TYPEDEF double double_t;

TYPEDEF struct { long long __ll; long double __ld; } max_align_t;

TYPEDEF long time_t;
TYPEDEF long suseconds_t;

TYPEDEF struct { union { int __i[9]; unsigned __s[9]; } __u; } pthread_attr_t;
TYPEDEF struct { union { int __i[6]; volatile void *volatile __p[6]; } __u; } pthread_mutex_t;
TYPEDEF struct { union { int __i[6]; volatile void *volatile __p[6]; } __u; } mtx_t;
TYPEDEF struct { union { int __i[12]; void *__p[12]; } __u; } pthread_cond_t;
TYPEDEF struct { union { int __i[12]; void *__p[12]; } __u; } cnd_t;
TYPEDEF struct { union { int __i[8]; void *__p[8]; } __u; } pthread_rwlock_t;
TYPEDEF struct { union { int __i[5]; void *__p[5]; } __u; } pthread_barrier_t;


text:
static inline struct pthread *__pthread_self()
{
#ifdef __clang__
	char *tp;
	__asm__ __volatile__ (".word 0x7c03e83b ; move %0, $3" : "=r" (tp) : : "$3" );
#else
	register char *tp __asm__("$3");
	__asm__ __volatile__ (".word 0x7c03e83b" : "=r" (tp) );
#endif
	return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
}

#define TLS_ABOVE_TP
#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)

#define CANCEL_REG_IP (3-(union {int __i; char __b;}){1}.__b)


text:
#include <string.h>
#include <elf.h>
#include <endian.h>

#if __BYTE_ORDER == __LITTLE_ENDIAN
#define ENDIAN_SUFFIX "el"
#else
#define ENDIAN_SUFFIX ""
#endif

#ifdef __mips_soft_float
#define FP_SUFFIX "-sf"
#else
#define FP_SUFFIX ""
#endif

#define LDSO_ARCH "mips" ENDIAN_SUFFIX FP_SUFFIX

#define TPOFF_K (-0x7000)

static int remap_rel(int type)
{
	switch(type) {
	case R_MIPS_REL32:
		return REL_SYM_OR_REL;
	case R_MIPS_JUMP_SLOT:
		return REL_PLT;
	case R_MIPS_COPY:
		return REL_COPY;
	case R_MIPS_TLS_DTPMOD32:
		return REL_DTPMOD;
	case R_MIPS_TLS_DTPREL32:
		return REL_DTPOFF;
	case R_MIPS_TLS_TPREL32:
		return REL_TPOFF;
	}
	return 0;
}

void __reloc_self(int c, size_t *a, size_t *dynv, size_t *got)
{
	char *base;
	size_t t[20], n;
	for (a+=c+1; *a; a++);
	for (a++; *a; a+=2) if (*a<20) t[*a] = a[1];
	base = (char *)t[AT_BASE];
	if (!base) base = (char *)(t[AT_PHDR] & -t[AT_PAGESZ]);
	for (a=dynv; *a; a+=2) if (*a-0x70000000UL<20) t[*a&31] = a[1];
	n = t[DT_MIPS_LOCAL_GOTNO - 0x70000000];
	for (a=got; n; a++, n--) *a += (size_t)base;
}

static void do_relocs(struct dso *dso, size_t *rel, size_t rel_size, size_t stride);

static void do_arch_relocs(struct dso *this, struct dso *head)
{
	unsigned char *base = this->base;
	size_t *dynv = this->dynv;
	size_t dyn[20] = {0};
	size_t i;
	size_t rel[2], got=0;
	Sym *sym;

	for (i=0; dynv[i]; i+=2) {
		if (dynv[i]-0x70000000UL<20)
			dyn[dynv[i]&31] = dynv[i+1];
		else if (dynv[i] == DT_PLTGOT)
			got = dynv[i+1];
	}
	i = dyn[DT_MIPS_LOCAL_GOTNO-0x70000000];
	if (this->shortname && !strcmp(this->shortname, "libc.so")) {
		got += sizeof(size_t) * i;
	} else {
		for (; i; i--, got+=sizeof(size_t))
			*(size_t *)(base+got) += (size_t)base;
	}
	sym = this->syms + dyn[DT_MIPS_GOTSYM-0x70000000];
	i = dyn[DT_MIPS_SYMTABNO-0x70000000] - dyn[DT_MIPS_GOTSYM-0x70000000];
	for (; i; i--, got+=sizeof(size_t), sym++) {
		rel[0] = got;
		rel[1] = sym-this->syms << 8 | R_MIPS_JUMP_SLOT;
		*(size_t *)(base+got) = 0;
		do_relocs(this, rel, sizeof rel, 2);
	}
}

#define NEED_ARCH_RELOCS 1
#define DYNAMIC_IS_RO 1
#define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT))


text:
#ifndef _INTERNAL_ATOMIC_H
#define _INTERNAL_ATOMIC_H

#include <stdint.h>

static inline int a_ctz_l(unsigned long x)
{
	static const char debruijn32[32] = {
		0, 1, 23, 2, 29, 24, 19, 3, 30, 27, 25, 11, 20, 8, 4, 13,
		31, 22, 28, 18, 26, 10, 7, 12, 21, 17, 9, 6, 16, 5, 15, 14
	};
	return debruijn32[(x&-x)*0x076be629 >> 27];
}

static inline int a_ctz_64(uint64_t x)
{
	uint32_t y = x;
	if (!y) {
		y = x>>32;
		return 32 + a_ctz_l(y);
	}
	return a_ctz_l(y);
}

static inline int a_cas(volatile int *p, int t, int s)
{
	int dummy;
	__asm__ __volatile__(
		".set push\n"
		".set mips2\n"
		".set noreorder\n"
		"	sync\n"
		"1:	ll %0, %2\n"
		"	bne %0, %3, 1f\n"
		"	addu %1, %4, $0\n"
		"	sc %1, %2\n"
		"	beq %1, $0, 1b\n"
		"	nop\n"
		"	sync\n"
		"1:	\n"
		".set pop\n"
		: "=&r"(t), "=&r"(dummy), "+m"(*p) : "r"(t), "r"(s) : "memory" );
        return t;
}

static inline void *a_cas_p(volatile void *p, void *t, void *s)
{
	return (void *)a_cas(p, (int)t, (int)s);
}

static inline int a_swap(volatile int *x, int v)
{
	int old, dummy;
	__asm__ __volatile__(
		".set push\n"
		".set mips2\n"
		".set noreorder\n"
		"	sync\n"
		"1:	ll %0, %2\n"
		"	addu %1, %3, $0\n"
		"	sc %1, %2\n"
		"	beq %1, $0, 1b\n"
		"	nop\n"
		"	sync\n"
		".set pop\n"
		: "=&r"(old), "=&r"(dummy), "+m"(*x) : "r"(v) : "memory" );
        return old;
}

static inline int a_fetch_add(volatile int *x, int v)
{
	int old, dummy;
	__asm__ __volatile__(
		".set push\n"
		".set mips2\n"
		".set noreorder\n"
		"	sync\n"
		"1:	ll %0, %2\n"
		"	addu %1, %0, %3\n"
		"	sc %1, %2\n"
		"	beq %1, $0, 1b\n"
		"	nop\n"
		"	sync\n"
		".set pop\n"
		: "=&r"(old), "=&r"(dummy), "+m"(*x) : "r"(v) : "memory" );
        return old;
}

static inline void a_inc(volatile int *x)
{
	int dummy;
	__asm__ __volatile__(
		".set push\n"
		".set mips2\n"
		".set noreorder\n"
		"	sync\n"
		"1:	ll %0, %1\n"
		"	addu %0, %0, 1\n"
		"	sc %0, %1\n"
		"	beq %0, $0, 1b\n"
		"	nop\n"
		"	sync\n"
		".set pop\n"
		: "=&r"(dummy), "+m"(*x) : : "memory" );
}

static inline void a_dec(volatile int *x)
{
	int dummy;
	__asm__ __volatile__(
		".set push\n"
		".set mips2\n"
		".set noreorder\n"
		"	sync\n"
		"1:	ll %0, %1\n"
		"	subu %0, %0, 1\n"
		"	sc %0, %1\n"
		"	beq %0, $0, 1b\n"
		"	nop\n"
		"	sync\n"
		".set pop\n"
		: "=&r"(dummy), "+m"(*x) : : "memory" );
}

static inline void a_store(volatile int *p, int x)
{
	__asm__ __volatile__(
		".set push\n"
		".set mips2\n"
		".set noreorder\n"
		"	sync\n"
		"	sw %1, %0\n"
		"	sync\n"
		".set pop\n"
		: "+m"(*p) : "r"(x) : "memory" );
}

#define a_spin a_barrier

static inline void a_barrier()
{
	a_cas(&(int){0}, 0, 0);
}

static inline void a_crash()
{
	*(volatile char *)0=0;
}

static inline void a_and(volatile int *p, int v)
{
	int dummy;
	__asm__ __volatile__(
		".set push\n"
		".set mips2\n"
		".set noreorder\n"
		"	sync\n"
		"1:	ll %0, %1\n"
		"	and %0, %0, %2\n"
		"	sc %0, %1\n"
		"	beq %0, $0, 1b\n"
		"	nop\n"
		"	sync\n"
		".set pop\n"
		: "=&r"(dummy), "+m"(*p) : "r"(v) : "memory" );
}

static inline void a_or(volatile int *p, int v)
{
	int dummy;
	__asm__ __volatile__(
		".set push\n"
		".set mips2\n"
		".set noreorder\n"
		"	sync\n"
		"1:	ll %0, %1\n"
		"	or %0, %0, %2\n"
		"	sc %0, %1\n"
		"	beq %0, $0, 1b\n"
		"	nop\n"
		"	sync\n"
		".set pop\n"
		: "=&r"(dummy), "+m"(*p) : "r"(v) : "memory" );
}

static inline void a_or_l(volatile void *p, long v)
{
	a_or(p, v);
}

static inline void a_and_64(volatile uint64_t *p, uint64_t v)
{
	union { uint64_t v; uint32_t r[2]; } u = { v };
	a_and((int *)p, u.r[0]);
	a_and((int *)p+1, u.r[1]);
}

static inline void a_or_64(volatile uint64_t *p, uint64_t v)
{
	union { uint64_t v; uint32_t r[2]; } u = { v };
	a_or((int *)p, u.r[0]);
	a_or((int *)p+1, u.r[1]);
}

#endif


text:
#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, ...);

#define SYSCALL_RLIM_INFINITY (-1UL/2)

#if _MIPSEL || __MIPSEL || __MIPSEL__
#define __stat_fix(st) ((st),(void)0)
#else
#include <sys/stat.h>
static inline void __stat_fix(long p)
{
	struct stat *st = (struct stat *)p;
	st->st_dev >>= 32;
	st->st_rdev >>= 32;
}
#endif

#ifndef __clang__

static inline long __syscall0(long n)
{
	register long r7 __asm__("$7");
	register long r2 __asm__("$2");
	__asm__ __volatile__ (
		"addu $2,$0,%2 ; syscall"
		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7)
		: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
		  "$14", "$15", "$24", "$25", "hi", "lo", "memory");
	return r7 ? -r2 : r2;
}

static inline long __syscall1(long n, long a)
{
	register long r4 __asm__("$4") = a;
	register long r7 __asm__("$7");
	register long r2 __asm__("$2");
	__asm__ __volatile__ (
		"addu $2,$0,%2 ; syscall"
		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
		  "r"(r4)
		: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
		  "$14", "$15", "$24", "$25", "hi", "lo", "memory");
	return r7 ? -r2 : r2;
}

static inline long __syscall2(long n, long a, long b)
{
	register long r4 __asm__("$4") = a;
	register long r5 __asm__("$5") = b;
	register long r7 __asm__("$7");
	register long r2 __asm__("$2");
	__asm__ __volatile__ (
		"addu $2,$0,%2 ; syscall"
		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
		  "r"(r4), "r"(r5)
		: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
		  "$14", "$15", "$24", "$25", "hi", "lo", "memory");
	if (r7) return -r2;
	if (n == SYS_stat64 || n == SYS_fstat64 || n == SYS_lstat64) __stat_fix(b);
	return r2;
}

static inline long __syscall3(long n, long a, long b, long c)
{
	register long r4 __asm__("$4") = a;
	register long r5 __asm__("$5") = b;
	register long r6 __asm__("$6") = c;
	register long r7 __asm__("$7");
	register long r2 __asm__("$2");
	__asm__ __volatile__ (
		"addu $2,$0,%2 ; syscall"
		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
		  "r"(r4), "r"(r5), "r"(r6)
		: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
		  "$14", "$15", "$24", "$25", "hi", "lo", "memory");
	if (r7) return -r2;
	if (n == SYS_stat64 || n == SYS_fstat64 || n == SYS_lstat64) __stat_fix(b);
	return r2;
}

static inline long __syscall4(long n, long a, long b, long c, long d)
{
	register long r4 __asm__("$4") = a;
	register long r5 __asm__("$5") = b;
	register long r6 __asm__("$6") = c;
	register long r7 __asm__("$7") = d;
	register long r2 __asm__("$2");
	__asm__ __volatile__ (
		"addu $2,$0,%2 ; syscall"
		: "=&r"(r2), "=r"(r7) : "ir"(n), "0"(r2), "1"(r7),
		  "r"(r4), "r"(r5), "r"(r6)
		: "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13",
		  "$14", "$15", "$24", "$25", "hi", "lo", "memory");
	if (r7) return -r2;
	if (n == SYS_stat64 || n == SYS_fstat64 || n == SYS_lstat64) __stat_fix(b);
	if (n == SYS_fstatat) __stat_fix(c);
	return r2;
}

#else

static inline long __syscall0(long n)
{
	return (__syscall)(n);
}

static inline long __syscall1(long n, long a)
{
	return (__syscall)(n, a);
}

static inline long __syscall2(long n, long a, long b)
{
	long r2 = (__syscall)(n, a, b);
	if (r2 > -4096UL) return r2;
	if (n == SYS_stat64 || n == SYS_fstat64 || n == SYS_lstat64) __stat_fix(b);
	return r2;
}

static inline long __syscall3(long n, long a, long b, long c)
{
	long r2 = (__syscall)(n, a, b, c);
	if (r2 > -4096UL) return r2;
	if (n == SYS_stat64 || n == SYS_fstat64 || n == SYS_lstat64) __stat_fix(b);
	return r2;
}

static inline long __syscall4(long n, long a, long b, long c, long d)
{
	long r2 = (__syscall)(n, a, b, c, d);
	if (r2 > -4096UL) return r2;
	if (n == SYS_stat64 || n == SYS_fstat64 || n == SYS_lstat64) __stat_fix(b);
	if (n == SYS_fstatat) __stat_fix(c);
	return r2;
}

#endif

static inline long __syscall5(long n, long a, long b, long c, long d, long e)
{
	long r2 = (__syscall)(n, a, b, c, d, e);
	if (r2 > -4096UL) return r2;
	if (n == SYS_stat64 || n == SYS_fstat64 || n == SYS_lstat64) __stat_fix(b);
	if (n == SYS_fstatat) __stat_fix(c);
	return r2;
}

static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
{
	long r2 = (__syscall)(n, a, b, c, d, e, f);
	if (r2 > -4096UL) return r2;
	if (n == SYS_stat64 || n == SYS_fstat64 || n == SYS_lstat64) __stat_fix(b);
	if (n == SYS_fstatat) __stat_fix(c);
	return r2;
}


text:
struct k_sigaction {
	unsigned flags;
	void (*handler)(int);
	unsigned long mask[4];
	/* The following field is past the end of the structure the
	 * kernel will read or write, and exists only to avoid having
	 * mips-specific preprocessor conditionals in sigaction.c. */
	void (*restorer)();
};


text:
__asm__("\n\
.set push\n\
.set noreorder\n\
.global __start\n\
.global _start\n\
.type   __start, @function\n\
.type   _start, @function\n\
__start:\n\
_start:\n\
	bal 1f \n\
	move $fp, $0 \n\
2:	.gpword 2b \n\
1:	lw $gp, 0($ra) \n\
	subu $gp, $ra, $gp \n\
	move $4, $sp \n\
	subu $sp, $sp, 16 \n\
	and $sp, $sp, -8 \n\
	lw $25, %call16(__cstart)($gp) \n\
	jalr $25 \n\
	nop \n\
.set pop");


text:
struct user {
	unsigned long regs[45+64];
	unsigned long u_tsize, u_dsize, u_ssize;
	unsigned long start_code, start_data, start_stack;
	long signal;
	void *u_ar0;
	unsigned long magic;
	char u_comm[32];
};
#define ELF_NGREG 45
#define ELF_NFPREG 33
typedef unsigned long elf_greg_t, elf_gregset_t[ELF_NGREG];
typedef double elf_fpreg_t, elf_fpregset_t[ELF_NFPREG];


text:
#if _MIPSEL || __MIPSEL || __MIPSEL__
#define __BYTE_ORDER __LITTLE_ENDIAN
#else
#define __BYTE_ORDER __BIG_ENDIAN
#endif


text:
#define FLT_ROUNDS 1
#define FLT_EVAL_METHOD 0

#define LDBL_TRUE_MIN 4.94065645841246544177e-324L
#define LDBL_MIN 2.22507385850720138309e-308L
#define LDBL_MAX 1.79769313486231570815e+308L
#define LDBL_EPSILON 2.22044604925031308085e-16L

#define LDBL_MANT_DIG 53
#define LDBL_MIN_EXP (-1021)
#define LDBL_MAX_EXP 1024

#define LDBL_DIG 15
#define LDBL_MIN_10_EXP (-307)
#define LDBL_MAX_10_EXP 308

#define DECIMAL_DIG 17


text:
#ifdef __mips_soft_float
#define FE_ALL_EXCEPT 0
#define FE_TONEAREST  0
#else
#define FE_INEXACT    4
#define FE_UNDERFLOW  8
#define FE_OVERFLOW   16
#define FE_DIVBYZERO  32
#define FE_INVALID    64

#define FE_ALL_EXCEPT 124

#define FE_TONEAREST  0
#define FE_TOWARDZERO 1
#define FE_UPWARD     2
#define FE_DOWNWARD   3
#endif

typedef unsigned short fexcept_t;

typedef struct {
	unsigned __cw;
} fenv_t;

#define FE_DFL_ENV      ((const fenv_t *) -1)


text:
#define _IOC(a,b,c,d) ( ((a)<<29) | ((b)<<8) | (c) | ((d)<<16) )
#define _IOC_NONE  1U
#define _IOC_READ  2U
#define _IOC_WRITE 4U

#define _IO(a,b) _IOC(_IOC_NONE,(a),(b),0)
#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 TCGETA		0x5401
#define TCSETA		0x5402
#define TCSETAW		0x5403
#define TCSETAF		0x5404
#define TCSBRK		0x5405
#define TCXONC		0x5406
#define TCFLSH		0x5407
#define TCGETS		0x540D
#define TCSETS		0x540E
#define TCSETSW		0x540F
#define TCSETSF		0x5410

#define TIOCEXCL	0x740D
#define TIOCNXCL	0x740E
#define TIOCOUTQ	0x7472
#define TIOCSTI		0x5472
#define TIOCMGET	0x741D
#define TIOCMBIS	0x741B
#define TIOCMBIC	0x741C
#define TIOCMSET	0x741D

#define TIOCPKT		0x5470
#define TIOCSWINSZ	_IOW('t', 103, struct winsize)
#define TIOCGWINSZ	_IOR('t', 104, struct winsize)
#define TIOCNOTTY	0x5471
#define TIOCSETD	0x7401
#define TIOCGETD	0x7400

#define FIOCLEX		0x6601
#define FIONCLEX	0x6602
#define FIOASYNC	0x667D
#define FIONBIO		0x667E
#define FIOQSIZE	0x667F

#define TIOCGLTC        0x7474
#define TIOCSLTC        0x7475
#define TIOCSPGRP	_IOW('t', 118, int)
#define TIOCGPGRP	_IOR('t', 119, int)
#define TIOCCONS	_IOW('t', 120, int)

#define FIONREAD	0x467F
#define TIOCINQ		FIONREAD

#define TIOCGETP        0x7408
#define TIOCSETP        0x7409
#define TIOCSETN        0x740A

#define TIOCSBRK	0x5427
#define TIOCCBRK	0x5428
#define TIOCGSID	0x7416
#define TIOCGPTN	_IOR('T', 0x30, unsigned int)
#define TIOCSPTLCK	_IOW('T', 0x31, int)

#define TIOCSCTTY	0x5480
#define TIOCGSOFTCAR	0x5481
#define TIOCSSOFTCAR	0x5482
#define TIOCLINUX	0x5483
#define TIOCGSERIAL	0x5484
#define TIOCSSERIAL	0x5485
#define TCSBRKP		0x5486

#define TIOCSERCONFIG	0x5488
#define TIOCSERGWILD	0x5489
#define TIOCSERSWILD	0x548A
#define TIOCGLCKTRMIOS	0x548B
#define TIOCSLCKTRMIOS	0x548C
#define TIOCSERGSTRUCT	0x548D
#define TIOCSERGETLSR   0x548E
#define TIOCSERGETMULTI 0x548F
#define TIOCSERSETMULTI 0x5490
#define TIOCMIWAIT	0x5491
#define TIOCGICOUNT	0x5492
#define TIOCGHAYESESP   0x5493
#define TIOCSHAYESESP   0x5494

#define TIOCTTYGSTRUCT	0x5426          // RICH: Not sure about these.
#define TCGETX		0x5432          // RICH: Not sure about these.
#define TCSETX		0x5433          // RICH: Not sure about these.
#define TCSETXF		0x5434          // RICH: Not sure about these.
#define TCSETXW		0x5435          // RICH: Not sure about these.

#define TIOCPKT_DATA		 0
#define TIOCPKT_FLUSHREAD	 1
#define TIOCPKT_FLUSHWRITE	 2
#define TIOCPKT_STOP		 4
#define TIOCPKT_START		 8
#define TIOCPKT_NOSTOP		16
#define TIOCPKT_DOSTOP		32
#define TIOCPKT_IOCTL		64

#define TIOCSER_TEMT    0x01

struct winsize {
	unsigned short ws_row;
	unsigned short ws_col;
	unsigned short ws_xpixel;
	unsigned short ws_ypixel;
};

#define TIOCM_LE        0x001
#define TIOCM_DTR       0x002
#define TIOCM_RTS       0x004
#define TIOCM_ST        0x008
#define TIOCM_SR        0x010
#define TIOCM_CTS       0x020
#define TIOCM_CAR       0x040
#define TIOCM_RNG       0x080
#define TIOCM_DSR       0x100
#define TIOCM_CD        TIOCM_CAR
#define TIOCM_RI        TIOCM_RNG
#define TIOCM_OUT1      0x2000
#define TIOCM_OUT2      0x4000
#define TIOCM_LOOP      0x8000
#define TIOCM_MODEM_BITS TIOCM_OUT2

#define N_TTY           0
#define N_SLIP          1
#define N_MOUSE         2
#define N_PPP           3
#define N_STRIP         4
#define N_AX25          5
#define N_X25           6
#define N_6PACK         7
#define N_MASC          8
#define N_R3964         9
#define N_PROFIBUS_FDL  10
#define N_IRDA          11
#define N_SMSBLOCK      12
#define N_HDLC          13
#define N_SYNC_PPP      14
#define N_HCI           15

#define FIOSETOWN       0x8901
#define SIOCSPGRP       0x8902
#define FIOGETOWN       0x8903
#define SIOCGPGRP       0x8904
#define SIOCATMARK      0x8905
#define SIOCGSTAMP      0x8906

#define SIOCADDRT       0x890B
#define SIOCDELRT       0x890C
#define SIOCRTMSG       0x890D

#define SIOCGIFNAME     0x8910
#define SIOCSIFLINK     0x8911
#define SIOCGIFCONF     0x8912
#define SIOCGIFFLAGS    0x8913
#define SIOCSIFFLAGS    0x8914
#define SIOCGIFADDR     0x8915
#define SIOCSIFADDR     0x8916
#define SIOCGIFDSTADDR  0x8917
#define SIOCSIFDSTADDR  0x8918
#define SIOCGIFBRDADDR  0x8919
#define SIOCSIFBRDADDR  0x891a
#define SIOCGIFNETMASK  0x891b
#define SIOCSIFNETMASK  0x891c
#define SIOCGIFMETRIC   0x891d
#define SIOCSIFMETRIC   0x891e
#define SIOCGIFMEM      0x891f
#define SIOCSIFMEM      0x8920
#define SIOCGIFMTU      0x8921
#define SIOCSIFMTU      0x8922
#define SIOCSIFHWADDR   0x8924
#define SIOCGIFENCAP    0x8925
#define SIOCSIFENCAP    0x8926
#define SIOCGIFHWADDR   0x8927
#define SIOCGIFSLAVE    0x8929
#define SIOCSIFSLAVE    0x8930
#define SIOCADDMULTI    0x8931
#define SIOCDELMULTI    0x8932
#define SIOCGIFINDEX    0x8933
#define SIOGIFINDEX     SIOCGIFINDEX
#define SIOCSIFPFLAGS   0x8934
#define SIOCGIFPFLAGS   0x8935
#define SIOCDIFADDR     0x8936
#define SIOCSIFHWBROADCAST 0x8937
#define SIOCGIFCOUNT    0x8938

#define SIOCGIFBR       0x8940
#define SIOCSIFBR       0x8941

#define SIOCGIFTXQLEN   0x8942
#define SIOCSIFTXQLEN   0x8943

#define SIOCDARP        0x8953
#define SIOCGARP        0x8954
#define SIOCSARP        0x8955

#define SIOCDRARP       0x8960
#define SIOCGRARP       0x8961
#define SIOCSRARP       0x8962

#define SIOCGIFMAP      0x8970
#define SIOCSIFMAP      0x8971

#define SIOCADDDLCI     0x8980
#define SIOCDELDLCI     0x8981

#define SIOCDEVPRIVATE		0x89F0
#define SIOCPROTOPRIVATE	0x89E0


text:
#define SHMLBA 4096

struct shmid_ds
{
	struct ipc_perm shm_perm;
	size_t shm_segsz;
	time_t shm_atime;
	time_t shm_dtime;
	time_t shm_ctime;
	pid_t shm_cpid;
	pid_t shm_lpid;
	unsigned long shm_nattch;
	unsigned long __pad1;
	unsigned long __pad2;
};

struct shminfo {
	unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4];
};

struct shm_info {
	int __used_ids;
	unsigned long shm_tot, shm_rss, shm_swp;
	unsigned long __swap_attempts, __swap_successes;
};


text:
#define RLIMIT_NOFILE  5
#define RLIMIT_AS      6
#define RLIMIT_RSS     7
#define RLIMIT_NPROC   8
#define RLIMIT_MEMLOCK 9


text:
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
 || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)

#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
typedef unsigned long long greg_t, gregset_t[32];
typedef struct {
	union {
		double fp_dregs[32];
		struct {
			float _fp_fregs;
			unsigned _fp_pad;
		} fp_fregs[32];
	} fp_r;
} fpregset_t;
struct sigcontext
{
	unsigned sc_regmask, sc_status;
	unsigned long long sc_pc, sc_regs[32], sc_fpregs[32];
	unsigned sc_ownedfp, sc_fpc_csr, sc_fpc_eir, sc_used_math, sc_dsp;
	unsigned long long sc_mdhi, sc_mdlo;
	unsigned long sc_hi1, sc_lo1, sc_hi2, sc_lo2, sc_hi3, sc_lo3;
};
typedef struct
{
	unsigned regmask, status;
	unsigned long long pc, regs[32], fpregs[32];
	unsigned ownedfp, fpc_csr, fpc_eir, used_math, dsp;
	unsigned long long mdhi, mdlo;
	unsigned long hi1, lo1, hi2, lo2, hi3, lo3;
} mcontext_t;
#else
typedef struct {
	unsigned __mc1[2];
	unsigned long long __mc2[65];
	unsigned __mc3[5];
	unsigned long long __mc4[2];
	unsigned __mc5[6];
} mcontext_t;
#endif

struct sigaltstack {
	void *ss_sp;
	size_t ss_size;
	int ss_flags;
};

typedef struct __ucontext {
	unsigned long uc_flags;
	struct __ucontext *uc_link;
	stack_t uc_stack;
	mcontext_t uc_mcontext;
	sigset_t uc_sigmask;
} ucontext_t;

#define SA_NOCLDSTOP  1
#define SA_NOCLDWAIT  0x10000
#define SA_SIGINFO    8
#define SA_ONSTACK    0x08000000
#define SA_RESTART    0x10000000
#define SA_NODEFER    0x40000000
#define SA_RESETHAND  0x80000000
#define SA_RESTORER   0x04000000

#undef SIG_BLOCK
#undef SIG_UNBLOCK
#undef SIG_SETMASK
#define SIG_BLOCK     1
#define SIG_UNBLOCK   2
#define SIG_SETMASK   3

#endif

#define SIGHUP    1
#define SIGINT    2
#define SIGQUIT   3
#define SIGILL    4
#define SIGTRAP   5
#define SIGABRT   6
#define SIGIOT    SIGABRT
#define SIGSTKFLT 7
#define SIGFPE    8
#define SIGKILL   9
#define SIGBUS    10
#define SIGSEGV   11
#define SIGSYS    12
#define SIGPIPE   13
#define SIGALRM   14
#define SIGTERM   15
#define SIGUSR1   16
#define SIGUSR2   17
#define SIGCHLD   18
#define SIGPWR    19
#define SIGWINCH  20
#define SIGURG    21
#define SIGIO     22
#define SIGPOLL   SIGIO
#define SIGSTOP   23
#define SIGTSTP   24
#define SIGCONT   25
#define SIGTTIN   26
#define SIGTTOU   27
#define SIGVTALRM 28
#define SIGPROF   29
#define SIGXCPU   30
#define SIGXFSZ   31
#define SIGUNUSED SIGSYS

#define _NSIG 128


text:
struct ipc_perm
{
	key_t __ipc_perm_key;
	uid_t uid;
	gid_t gid;
	uid_t cuid;
	gid_t cgid;
	mode_t mode;
	int __ipc_perm_seq;
	long __pad1;
	long __pad2;
};

#define IPC_64 0x100


text:
#define _POSIX_V6_ILP32_OFFBIG  1
#define _POSIX_V7_ILP32_OFFBIG  1


text:
#define va_start(v,l)   __builtin_va_start(v,l)
#define va_end(v)       __builtin_va_end(v)
#define va_arg(v,l)     __builtin_va_arg(v,l)
#define va_copy(d,s)    __builtin_va_copy(d,s)