提交 83933573 编写于 作者: R Rich Felker

add mips64 port

patch by Mahesh Bodapati and Jaydeep Patil of Imagination
Technologies.
上级 71392a91
#define a_ll a_ll
static inline int a_ll(volatile int *p)
{
int v;
__asm__ __volatile__ (
"ll %0, %1"
: "=r"(v) : "m"(*p));
return v;
}
#define a_sc a_sc
static inline int a_sc(volatile int *p, int v)
{
int r;
__asm__ __volatile__ (
"sc %0, %1"
: "=r"(r), "=m"(*p) : "0"(v) : "memory");
return r;
}
#define a_ll_p a_ll_p
static inline void *a_ll_p(volatile long *p)
{
void *v;
__asm__ __volatile__ (
"lld %0, %1"
: "=r"(v) : "m"(*p));
return v;
}
#define a_sc_p a_sc_p
static inline int a_sc_p(volatile long *p, void *v)
{
int r;
__asm__ __volatile__ (
"scd %0, %1"
: "=r"(r), "=m"(*p) : "0"(v) : "memory");
return r;
}
#define a_barrier a_barrier
static inline void a_barrier()
{
/* mips2 sync, but using too many directives causes
* gcc not to inline it, so encode with .long instead. */
__asm__ __volatile__ (".long 0xf" : : : "memory");
}
#define a_pre_llsc a_barrier
#define a_post_llsc a_barrier
#define _Addr long
#define _Int64 long
#define _Reg long
TYPEDEF __builtin_va_list va_list;
TYPEDEF __builtin_va_list __isoc_va_list;
#ifndef __cplusplus
TYPEDEF int wchar_t;
#endif
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 unsigned nlink_t;
TYPEDEF struct { union { int __i[14]; volatile int __vi[14]; unsigned long __s[7]; } __u; } pthread_attr_t;
TYPEDEF struct { union { int __i[10]; volatile int __vi[10]; volatile void *volatile __p[5]; } __u; } pthread_mutex_t;
TYPEDEF struct { union { int __i[10]; volatile int __vi[10]; volatile void *volatile __p[5]; } __u; } mtx_t;
TYPEDEF struct { union { int __i[12]; volatile int __vi[12]; void *__p[6]; } __u; } pthread_cond_t;
TYPEDEF struct { union { int __i[12]; volatile int __vi[12]; void *__p[6]; } __u; } cnd_t;
TYPEDEF struct { union { int __i[14]; volatile int __vi[14]; void *__p[7]; } __u; } pthread_rwlock_t;
TYPEDEF struct { union { int __i[8]; volatile int __vi[8]; void *__p[4]; } __u; } pthread_barrier_t;
#if _MIPSEL || __MIPSEL || __MIPSEL__
#define __BYTE_ORDER __LITTLE_ENDIAN
#else
#define __BYTE_ORDER __BIG_ENDIAN
#endif
#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 ENOMSG 35
#define EIDRM 36
#define ECHRNG 37
#define EL2NSYNC 38
#define EL3HLT 39
#define EL3RST 40
#define ELNRNG 41
#define EUNATCH 42
#define ENOCSI 43
#define EL2HLT 44
#define EDEADLK 45
#define ENOLCK 46
#define EBADE 50
#define EBADR 51
#define EXFULL 52
#define ENOANO 53
#define EBADRQC 54
#define EBADSLT 55
#define EDEADLOCK 56
#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 EDOTDOT 73
#define EMULTIHOP 74
#define EBADMSG 77
#define ENAMETOOLONG 78
#define EOVERFLOW 79
#define ENOTUNIQ 80
#define EBADFD 81
#define EREMCHG 82
#define ELIBACC 83
#define ELIBBAD 84
#define ELIBSCN 85
#define ELIBMAX 86
#define ELIBEXEC 87
#define EILSEQ 88
#define ENOSYS 89
#define ELOOP 90
#define ERESTART 91
#define ESTRPIPE 92
#define ENOTEMPTY 93
#define EUSERS 94
#define ENOTSOCK 95
#define EDESTADDRREQ 96
#define EMSGSIZE 97
#define EPROTOTYPE 98
#define ENOPROTOOPT 99
#define EPROTONOSUPPORT 120
#define ESOCKTNOSUPPORT 121
#define EOPNOTSUPP 122
#define ENOTSUP EOPNOTSUPP
#define EPFNOSUPPORT 123
#define EAFNOSUPPORT 124
#define EADDRINUSE 125
#define EADDRNOTAVAIL 126
#define ENETDOWN 127
#define ENETUNREACH 128
#define ENETRESET 129
#define ECONNABORTED 130
#define ECONNRESET 131
#define ENOBUFS 132
#define EISCONN 133
#define ENOTCONN 134
#define EUCLEAN 135
#define ENOTNAM 137
#define ENAVAIL 138
#define EISNAM 139
#define EREMOTEIO 140
#define ESHUTDOWN 143
#define ETOOMANYREFS 144
#define ETIMEDOUT 145
#define ECONNREFUSED 146
#define EHOSTDOWN 147
#define EHOSTUNREACH 148
#define EWOULDBLOCK EAGAIN
#define EALREADY 149
#define EINPROGRESS 150
#define ESTALE 151
#define ECANCELED 158
#define ENOMEDIUM 159
#define EMEDIUMTYPE 160
#define ENOKEY 161
#define EKEYEXPIRED 162
#define EKEYREVOKED 163
#define EKEYREJECTED 164
#define EOWNERDEAD 165
#define ENOTRECOVERABLE 166
#define ERFKILL 167
#define EHWPOISON 168
#define EDQUOT 1133
#define O_CREAT 0400
#define O_EXCL 02000
#define O_NOCTTY 04000
#define O_TRUNC 01000
#define O_APPEND 0010
#define O_NONBLOCK 0200
#define O_DSYNC 0020
#define O_SYNC 040020
#define O_RSYNC 040020
#define O_DIRECTORY 0200000
#define O_NOFOLLOW 0400000
#define O_CLOEXEC 02000000
#define O_ASYNC 010000
#define O_DIRECT 0100000
#define O_LARGEFILE 0
#define O_NOATIME 01000000
#define O_PATH 010000000
#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 24
#define F_GETOWN 23
#define F_SETSIG 10
#define F_GETSIG 11
#define F_GETLK 14
#define F_SETLK 6
#define F_SETLKW 7
#define F_SETOWN_EX 15
#define F_GETOWN_EX 16
#define F_GETOWNER_UIDS 17
#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)
#define FLT_EVAL_METHOD 0
#define LDBL_TRUE_MIN 6.47517511943802511092443895822764655e-4966L
#define LDBL_MIN 3.36210314311209350626267781732175260e-4932L
#define LDBL_MAX 1.18973149535723176508575932662800702e+4932L
#define LDBL_EPSILON 1.92592994438723585305597794258492732e-34L
#define LDBL_MANT_DIG 113
#define LDBL_MIN_EXP (-16381)
#define LDBL_MAX_EXP 16384
#define LDBL_DIG 33
#define LDBL_MIN_10_EXP (-4931)
#define LDBL_MAX_10_EXP 4932
#define DECIMAL_DIG 36
#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
#define TCGETX 0x5432
#define TCSETX 0x5433
#define TCSETXF 0x5434
#define TCSETXW 0x5435
#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
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;
int __pad1;
unsigned long __unused1;
unsigned long __unused2;
};
#define IPC_64 0x100
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
#define LONG_BIT 64
#endif
#define LONG_MAX 0x7fffffffffffffffL
#define LLONG_MAX 0x7fffffffffffffffLL
#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 0x800
#define MAP_ANONYMOUS MAP_ANON
#define MAP_NORESERVE 0x0400
#define MAP_GROWSDOWN 0x1000
#define MAP_DENYWRITE 0x2000
#define MAP_EXECUTABLE 0x4000
#define MAP_LOCKED 0x8000
#define MAP_POPULATE 0x10000
#define MAP_NONBLOCK 0x20000
#define MAP_STACK 0x40000
#define MAP_HUGETLB 0x80000
#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
#define MCL_ONFAULT 4
#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
#endif
struct msqid_ds {
struct ipc_perm msg_perm;
time_t msg_stime;
time_t msg_rtime;
time_t msg_ctime;
unsigned long msg_cbytes;
msgqnum_t msg_qnum;
msglen_t msg_qbytes;
pid_t msg_lspid;
pid_t msg_lrpid;
unsigned long __pad1;
unsigned long __pad2;
};
#define POLLWRNORM POLLOUT
#define POLLWRBAND 0x100
#define _POSIX_V6_LP64_OFFBIG 1
#define _POSIX_V7_LP64_OFFBIG 1
#undef __WORDSIZE
#define __WORDSIZE 64
#define EF_R0 0
#define EF_R1 1
#define EF_R2 2
#define EF_R3 3
#define EF_R4 4
#define EF_R5 5
#define EF_R6 6
#define EF_R7 7
#define EF_R8 8
#define EF_R9 9
#define EF_R10 10
#define EF_R11 11
#define EF_R12 12
#define EF_R13 13
#define EF_R14 14
#define EF_R15 15
#define EF_R16 16
#define EF_R17 17
#define EF_R18 18
#define EF_R19 19
#define EF_R20 20
#define EF_R21 21
#define EF_R22 22
#define EF_R23 23
#define EF_R24 24
#define EF_R25 25
#define EF_R26 26
#define EF_R27 27
#define EF_R28 28
#define EF_R29 29
#define EF_R30 30
#define EF_R31 31
#define EF_LO 32
#define EF_HI 33
#define EF_CP0_EPC 34
#define EF_CP0_BADVADDR 35
#define EF_CP0_STATUS 36
#define EF_CP0_CAUSE 37
#define EF_UNUSED0 38
#define EF_SIZE 304
#define RLIMIT_NOFILE 5
#define RLIMIT_AS 6
#define RLIMIT_RSS 7
#define RLIMIT_NPROC 8
#define RLIMIT_MEMLOCK 9
struct semid_ds {
struct ipc_perm sem_perm;
time_t sem_otime;
time_t sem_ctime;
#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;
};
typedef unsigned long long __jmp_buf[23];
#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;
};
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
#define MINSIGSTKSZ 2048
#define SIGSTKSZ 8192
#endif
#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 long long sc_regs[32];
unsigned long long sc_fpregs[32];
unsigned long long sc_mdhi;
unsigned long long sc_hi1;
unsigned long long sc_hi2;
unsigned long long sc_hi3;
unsigned long long sc_mdlo;
unsigned long long sc_lo1;
unsigned long long sc_lo2;
unsigned long long sc_lo3;
unsigned long long sc_pc;
unsigned int sc_fpc_csr;
unsigned int sc_used_math;
unsigned int sc_dsp;
unsigned int sc_reserved;
};
typedef struct {
gregset_t gregs;
fpregset_t fpregs;
greg_t mdhi;
greg_t hi1;
greg_t hi2;
greg_t hi3;
greg_t mdlo;
greg_t lo1;
greg_t lo2;
greg_t lo3;
greg_t pc;
unsigned int fpc_csr;
unsigned int used_math;
unsigned int dsp;
unsigned int reserved;
} mcontext_t;
#else
typedef struct {
unsigned long long __mc1[32];
double __mc2[32];
unsigned long long __mc3[9];
unsigned __mc4[4];
} 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
#undef SI_ASYNCIO
#undef SI_MESGQ
#undef SI_TIMER
#define SI_ASYNCIO (-2)
#define SI_MESGQ (-4)
#define SI_TIMER (-3)
#define __SI_SWAP_ERRNO_CODE
#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
#include <endian.h>
struct msghdr {
void *msg_name;
socklen_t msg_namelen;
struct iovec *msg_iov;
#if __BYTE_ORDER == __BIG_ENDIAN
int __pad1, msg_iovlen;
#else
int msg_iovlen, __pad1;
#endif
void *msg_control;
#if __BYTE_ORDER == __BIG_ENDIAN
int __pad2;
socklen_t msg_controllen;
#else
socklen_t msg_controllen;
int __pad2;
#endif
int msg_flags;
};
struct cmsghdr {
#if __BYTE_ORDER == __BIG_ENDIAN
int __pad1;
socklen_t cmsg_len;
#else
socklen_t cmsg_len;
int __pad1;
#endif
int cmsg_level;
int cmsg_type;
};
#define SOCK_STREAM 2
#define SOCK_DGRAM 1
#define SOL_SOCKET 65535
#define SO_DEBUG 1
#define SO_REUSEADDR 0x0004
#define SO_KEEPALIVE 0x0008
#define SO_DONTROUTE 0x0010
#define SO_BROADCAST 0x0020
#define SO_LINGER 0x0080
#define SO_OOBINLINE 0x0100
#define SO_REUSEPORT 0x0200
#define SO_SNDBUF 0x1001
#define SO_RCVBUF 0x1002
#define SO_SNDLOWAT 0x1003
#define SO_RCVLOWAT 0x1004
#define SO_RCVTIMEO 0x1006
#define SO_SNDTIMEO 0x1005
#define SO_ERROR 0x1007
#define SO_TYPE 0x1008
#define SO_ACCEPTCONN 0x1009
#define SO_PROTOCOL 0x1028
#define SO_DOMAIN 0x1029
#define SO_NO_CHECK 11
#define SO_PRIORITY 12
#define SO_BSDCOMPAT 14
#define SO_PASSCRED 17
#define SO_PEERCRED 18
#define SO_SNDBUFFORCE 31
#define SO_RCVBUFFORCE 33
#define SOCK_NONBLOCK 0200
#define SOCK_CLOEXEC 02000000
#include <string.h>
#include <bits/alltypes.h>
struct stat {
dev_t st_dev;
int __pad1[3];
ino_t st_ino;
mode_t st_mode;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
dev_t st_rdev;
unsigned int __pad2[2];
off_t st_size;
int __pad3;
struct timespec st_atim;
struct timespec st_mtim;
struct timespec st_ctim;
blksize_t st_blksize;
unsigned int __pad4;
blkcnt_t st_blocks;
int __pad5[14];
};
struct statfs {
unsigned long f_type, f_bsize, f_frsize;
fsblkcnt_t f_blocks, f_bfree;
fsfilcnt_t f_files, f_ffree;
fsblkcnt_t f_bavail;
fsid_t f_fsid;
unsigned long f_namelen, f_flags, f_spare[5];
};
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 INT64_MIN
#define INTPTR_MAX INT64_MAX
#define UINTPTR_MAX UINT64_MAX
#define PTRDIFF_MIN INT64_MIN
#define PTRDIFF_MAX INT64_MAX
#define SIZE_MAX UINT64_MAX
#define __NR_read 5000
#define __NR_write 5001
#define __NR_open 5002
#define __NR_close 5003
#define __NR_stat 5004
#define __NR_fstat 5005
#define __NR_lstat 5006
#define __NR_poll 5007
#define __NR_lseek 5008
#define __NR_mmap 5009
#define __NR_mprotect 5010
#define __NR_munmap 5011
#define __NR_brk 5012
#define __NR_rt_sigaction 5013
#define __NR_rt_sigprocmask 5014
#define __NR_ioctl 5015
#define __NR_pread64 5016
#define __NR_pwrite64 5017
#define __NR_readv 5018
#define __NR_writev 5019
#define __NR_access 5020
#define __NR_pipe 5021
#define __NR__newselect 5022
#define __NR_sched_yield 5023
#define __NR_mremap 5024
#define __NR_msync 5025
#define __NR_mincore 5026
#define __NR_madvise 5027
#define __NR_shmget 5028
#define __NR_shmat 5029
#define __NR_shmctl 5030
#define __NR_dup 5031
#define __NR_dup2 5032
#define __NR_pause 5033
#define __NR_nanosleep 5034
#define __NR_getitimer 5035
#define __NR_setitimer 5036
#define __NR_alarm 5037
#define __NR_getpid 5038
#define __NR_sendfile 5039
#define __NR_socket 5040
#define __NR_connect 5041
#define __NR_accept 5042
#define __NR_sendto 5043
#define __NR_recvfrom 5044
#define __NR_sendmsg 5045
#define __NR_recvmsg 5046
#define __NR_shutdown 5047
#define __NR_bind 5048
#define __NR_listen 5049
#define __NR_getsockname 5050
#define __NR_getpeername 5051
#define __NR_socketpair 5052
#define __NR_setsockopt 5053
#define __NR_getsockopt 5054
#define __NR_clone 5055
#define __NR_fork 5056
#define __NR_execve 5057
#define __NR_exit 5058
#define __NR_wait4 5059
#define __NR_kill 5060
#define __NR_uname 5061
#define __NR_semget 5062
#define __NR_semop 5063
#define __NR_semctl 5064
#define __NR_shmdt 5065
#define __NR_msgget 5066
#define __NR_msgsnd 5067
#define __NR_msgrcv 5068
#define __NR_msgctl 5069
#define __NR_fcntl 5070
#define __NR_flock 5071
#define __NR_fsync 5072
#define __NR_fdatasync 5073
#define __NR_truncate 5074
#define __NR_ftruncate 5075
#define __NR_getdents 5076
#define __NR_getcwd 5077
#define __NR_chdir 5078
#define __NR_fchdir 5079
#define __NR_rename 5080
#define __NR_mkdir 5081
#define __NR_rmdir 5082
#define __NR_creat 5083
#define __NR_link 5084
#define __NR_unlink 5085
#define __NR_symlink 5086
#define __NR_readlink 5087
#define __NR_chmod 5088
#define __NR_fchmod 5089
#define __NR_chown 5090
#define __NR_fchown 5091
#define __NR_lchown 5092
#define __NR_umask 5093
#define __NR_gettimeofday 5094
#define __NR_getrlimit 5095
#define __NR_getrusage 5096
#define __NR_sysinfo 5097
#define __NR_times 5098
#define __NR_ptrace 5099
#define __NR_getuid 5100
#define __NR_syslog 5101
#define __NR_getgid 5102
#define __NR_setuid 5103
#define __NR_setgid 5104
#define __NR_geteuid 5105
#define __NR_getegid 5106
#define __NR_setpgid 5107
#define __NR_getppid 5108
#define __NR_getpgrp 5109
#define __NR_setsid 5110
#define __NR_setreuid 5111
#define __NR_setregid 5112
#define __NR_getgroups 5113
#define __NR_setgroups 5114
#define __NR_setresuid 5115
#define __NR_getresuid 5116
#define __NR_setresgid 5117
#define __NR_getresgid 5118
#define __NR_getpgid 5119
#define __NR_setfsuid 5120
#define __NR_setfsgid 5121
#define __NR_getsid 5122
#define __NR_capget 5123
#define __NR_capset 5124
#define __NR_rt_sigpending 5125
#define __NR_rt_sigtimedwait 5126
#define __NR_rt_sigqueueinfo 5127
#define __NR_rt_sigsuspend 5128
#define __NR_sigaltstack 5129
#define __NR_utime 5130
#define __NR_mknod 5131
#define __NR_personality 5132
#define __NR_ustat 5133
#define __NR_statfs 5134
#define __NR_fstatfs 5135
#define __NR_sysfs 5136
#define __NR_getpriority 5137
#define __NR_setpriority 5138
#define __NR_sched_setparam 5139
#define __NR_sched_getparam 5140
#define __NR_sched_setscheduler 5141
#define __NR_sched_getscheduler 5142
#define __NR_sched_get_priority_max 5143
#define __NR_sched_get_priority_min 5144
#define __NR_sched_rr_get_interval 5145
#define __NR_mlock 5146
#define __NR_munlock 5147
#define __NR_mlockall 5148
#define __NR_munlockall 5149
#define __NR_vhangup 5150
#define __NR_pivot_root 5151
#define __NR__sysctl 5152
#define __NR_prctl 5153
#define __NR_adjtimex 5154
#define __NR_setrlimit 5155
#define __NR_chroot 5156
#define __NR_sync 5157
#define __NR_acct 5158
#define __NR_settimeofday 5159
#define __NR_mount 5160
#define __NR_umount2 5161
#define __NR_swapon 5162
#define __NR_swapoff 5163
#define __NR_reboot 5164
#define __NR_sethostname 5165
#define __NR_setdomainname 5166
#define __NR_create_module 5167
#define __NR_init_module 5168
#define __NR_delete_module 5169
#define __NR_get_kernel_syms 5170
#define __NR_query_module 5171
#define __NR_quotactl 5172
#define __NR_nfsservctl 5173
#define __NR_getpmsg 5174
#define __NR_putpmsg 5175
#define __NR_afs_syscall 5176
#define __NR_reserved177 5177
#define __NR_gettid 5178
#define __NR_readahead 5179
#define __NR_setxattr 5180
#define __NR_lsetxattr 5181
#define __NR_fsetxattr 5182
#define __NR_getxattr 5183
#define __NR_lgetxattr 5184
#define __NR_fgetxattr 5185
#define __NR_listxattr 5186
#define __NR_llistxattr 5187
#define __NR_flistxattr 5188
#define __NR_removexattr 5189
#define __NR_lremovexattr 5190
#define __NR_fremovexattr 5191
#define __NR_tkill 5192
#define __NR_reserved193 5193
#define __NR_futex 5194
#define __NR_sched_setaffinity 5195
#define __NR_sched_getaffinity 5196
#define __NR_cacheflush 5197
#define __NR_cachectl 5198
#define __NR_sysmips 5199
#define __NR_io_setup 5200
#define __NR_io_destroy 5201
#define __NR_io_getevents 5202
#define __NR_io_submit 5203
#define __NR_io_cancel 5204
#define __NR_exit_group 5205
#define __NR_lookup_dcookie 5206
#define __NR_epoll_create 5207
#define __NR_epoll_ctl 5208
#define __NR_epoll_wait 5209
#define __NR_remap_file_pages 5210
#define __NR_rt_sigreturn 5211
#define __NR_set_tid_address 5212
#define __NR_restart_syscall 5213
#define __NR_semtimedop 5214
#define __NR_fadvise64 5215
#define __NR_timer_create 5216
#define __NR_timer_settime 5217
#define __NR_timer_gettime 5218
#define __NR_timer_getoverrun 5219
#define __NR_timer_delete 5220
#define __NR_clock_settime 5221
#define __NR_clock_gettime 5222
#define __NR_clock_getres 5223
#define __NR_clock_nanosleep 5224
#define __NR_tgkill 5225
#define __NR_utimes 5226
#define __NR_mbind 5227
#define __NR_get_mempolicy 5228
#define __NR_set_mempolicy 5229
#define __NR_mq_open 5230
#define __NR_mq_unlink 5231
#define __NR_mq_timedsend 5232
#define __NR_mq_timedreceive 5233
#define __NR_mq_notify 5234
#define __NR_mq_getsetattr 5235
#define __NR_vserver 5236
#define __NR_waitid 5237
#define __NR_add_key 5239
#define __NR_request_key 5240
#define __NR_keyctl 5241
#define __NR_set_thread_area 5242
#define __NR_inotify_init 5243
#define __NR_inotify_add_watch 5244
#define __NR_inotify_rm_watch 5245
#define __NR_migrate_pages 5246
#define __NR_openat 5247
#define __NR_mkdirat 5248
#define __NR_mknodat 5249
#define __NR_fchownat 5250
#define __NR_futimesat 5251
#define __NR_newfstatat 5252
#define __NR_unlinkat 5253
#define __NR_renameat 5254
#define __NR_linkat 5255
#define __NR_symlinkat 5256
#define __NR_readlinkat 5257
#define __NR_fchmodat 5258
#define __NR_faccessat 5259
#define __NR_pselect6 5260
#define __NR_ppoll 5261
#define __NR_unshare 5262
#define __NR_splice 5263
#define __NR_sync_file_range 5264
#define __NR_tee 5265
#define __NR_vmsplice 5266
#define __NR_move_pages 5267
#define __NR_set_robust_list 5268
#define __NR_get_robust_list 5269
#define __NR_kexec_load 5270
#define __NR_getcpu 5271
#define __NR_epoll_pwait 5272
#define __NR_ioprio_set 5273
#define __NR_ioprio_get 5274
#define __NR_utimensat 5275
#define __NR_signalfd 5276
#define __NR_timerfd 5277
#define __NR_eventfd 5278
#define __NR_fallocate 5279
#define __NR_timerfd_create 5280
#define __NR_timerfd_gettime 5281
#define __NR_timerfd_settime 5282
#define __NR_signalfd4 5283
#define __NR_eventfd2 5284
#define __NR_epoll_create1 5285
#define __NR_dup3 5286
#define __NR_pipe2 5287
#define __NR_inotify_init1 5288
#define __NR_preadv 5289
#define __NR_pwritev 5290
#define __NR_rt_tgsigqueueinfo 5291
#define __NR_perf_event_open 5292
#define __NR_accept4 5293
#define __NR_recvmmsg 5294
#define __NR_fanotify_init 5295
#define __NR_fanotify_mark 5296
#define __NR_prlimit64 5297
#define __NR_name_to_handle_at 5298
#define __NR_open_by_handle_at 5299
#define __NR_clock_adjtime 5300
#define __NR_syncfs 5301
#define __NR_sendmmsg 5302
#define __NR_setns 5303
#define __NR_process_vm_readv 5304
#define __NR_process_vm_writev 5305
#define __NR_kcmp 5306
#define __NR_finit_module 5307
#define __NR_getdents64 5308
#define __NR_sched_setattr 5309
#define __NR_sched_getattr 5310
#define __NR_renameat2 5311
#define __NR_seccomp 5312
#define __NR_getrandom 5313
#define __NR_memfd_create 5314
#define __NR_bpf 5315
#define __NR_execveat 5316
#define SYS_read 5000
#define SYS_write 5001
#define SYS_open 5002
#define SYS_close 5003
#define SYS_stat 5004
#define SYS_fstat 5005
#define SYS_lstat 5006
#define SYS_poll 5007
#define SYS_lseek 5008
#define SYS_mmap 5009
#define SYS_mprotect 5010
#define SYS_munmap 5011
#define SYS_brk 5012
#define SYS_rt_sigaction 5013
#define SYS_rt_sigprocmask 5014
#define SYS_ioctl 5015
#define SYS_pread64 5016
#define SYS_pwrite64 5017
#define SYS_readv 5018
#define SYS_writev 5019
#define SYS_access 5020
#define SYS_pipe 5021
#define SYS__newselect 5022
#define SYS_sched_yield 5023
#define SYS_mremap 5024
#define SYS_msync 5025
#define SYS_mincore 5026
#define SYS_madvise 5027
#define SYS_shmget 5028
#define SYS_shmat 5029
#define SYS_shmctl 5030
#define SYS_dup 5031
#define SYS_dup2 5032
#define SYS_pause 5033
#define SYS_nanosleep 5034
#define SYS_getitimer 5035
#define SYS_setitimer 5036
#define SYS_alarm 5037
#define SYS_getpid 5038
#define SYS_sendfile 5039
#define SYS_socket 5040
#define SYS_connect 5041
#define SYS_accept 5042
#define SYS_sendto 5043
#define SYS_recvfrom 5044
#define SYS_sendmsg 5045
#define SYS_recvmsg 5046
#define SYS_shutdown 5047
#define SYS_bind 5048
#define SYS_listen 5049
#define SYS_getsockname 5050
#define SYS_getpeername 5051
#define SYS_socketpair 5052
#define SYS_setsockopt 5053
#define SYS_getsockopt 5054
#define SYS_clone 5055
#define SYS_fork 5056
#define SYS_execve 5057
#define SYS_exit 5058
#define SYS_wait4 5059
#define SYS_kill 5060
#define SYS_uname 5061
#define SYS_semget 5062
#define SYS_semop 5063
#define SYS_semctl 5064
#define SYS_shmdt 5065
#define SYS_msgget 5066
#define SYS_msgsnd 5067
#define SYS_msgrcv 5068
#define SYS_msgctl 5069
#define SYS_fcntl 5070
#define SYS_flock 5071
#define SYS_fsync 5072
#define SYS_fdatasync 5073
#define SYS_truncate 5074
#define SYS_ftruncate 5075
#define SYS_getdents 5076
#define SYS_getcwd 5077
#define SYS_chdir 5078
#define SYS_fchdir 5079
#define SYS_rename 5080
#define SYS_mkdir 5081
#define SYS_rmdir 5082
#define SYS_creat 5083
#define SYS_link 5084
#define SYS_unlink 5085
#define SYS_symlink 5086
#define SYS_readlink 5087
#define SYS_chmod 5088
#define SYS_fchmod 5089
#define SYS_chown 5090
#define SYS_fchown 5091
#define SYS_lchown 5092
#define SYS_umask 5093
#define SYS_gettimeofday 5094
#define SYS_getrlimit 5095
#define SYS_getrusage 5096
#define SYS_sysinfo 5097
#define SYS_times 5098
#define SYS_ptrace 5099
#define SYS_getuid 5100
#define SYS_syslog 5101
#define SYS_getgid 5102
#define SYS_setuid 5103
#define SYS_setgid 5104
#define SYS_geteuid 5105
#define SYS_getegid 5106
#define SYS_setpgid 5107
#define SYS_getppid 5108
#define SYS_getpgrp 5109
#define SYS_setsid 5110
#define SYS_setreuid 5111
#define SYS_setregid 5112
#define SYS_getgroups 5113
#define SYS_setgroups 5114
#define SYS_setresuid 5115
#define SYS_getresuid 5116
#define SYS_setresgid 5117
#define SYS_getresgid 5118
#define SYS_getpgid 5119
#define SYS_setfsuid 5120
#define SYS_setfsgid 5121
#define SYS_getsid 5122
#define SYS_capget 5123
#define SYS_capset 5124
#define SYS_rt_sigpending 5125
#define SYS_rt_sigtimedwait 5126
#define SYS_rt_sigqueueinfo 5127
#define SYS_rt_sigsuspend 5128
#define SYS_sigaltstack 5129
#define SYS_utime 5130
#define SYS_mknod 5131
#define SYS_personality 5132
#define SYS_ustat 5133
#define SYS_statfs 5134
#define SYS_fstatfs 5135
#define SYS_sysfs 5136
#define SYS_getpriority 5137
#define SYS_setpriority 5138
#define SYS_sched_setparam 5139
#define SYS_sched_getparam 5140
#define SYS_sched_setscheduler 5141
#define SYS_sched_getscheduler 5142
#define SYS_sched_get_priority_max 5143
#define SYS_sched_get_priority_min 5144
#define SYS_sched_rr_get_interval 5145
#define SYS_mlock 5146
#define SYS_munlock 5147
#define SYS_mlockall 5148
#define SYS_munlockall 5149
#define SYS_vhangup 5150
#define SYS_pivot_root 5151
#define SYS__sysctl 5152
#define SYS_prctl 5153
#define SYS_adjtimex 5154
#define SYS_setrlimit 5155
#define SYS_chroot 5156
#define SYS_sync 5157
#define SYS_acct 5158
#define SYS_settimeofday 5159
#define SYS_mount 5160
#define SYS_umount2 5161
#define SYS_swapon 5162
#define SYS_swapoff 5163
#define SYS_reboot 5164
#define SYS_sethostname 5165
#define SYS_setdomainname 5166
#define SYS_create_module 5167
#define SYS_init_module 5168
#define SYS_delete_module 5169
#define SYS_get_kernel_syms 5170
#define SYS_query_module 5171
#define SYS_quotactl 5172
#define SYS_nfsservctl 5173
#define SYS_getpmsg 5174
#define SYS_putpmsg 5175
#define SYS_afs_syscall 5176
#define SYS_reserved177 5177
#define SYS_gettid 5178
#define SYS_readahead 5179
#define SYS_setxattr 5180
#define SYS_lsetxattr 5181
#define SYS_fsetxattr 5182
#define SYS_getxattr 5183
#define SYS_lgetxattr 5184
#define SYS_fgetxattr 5185
#define SYS_listxattr 5186
#define SYS_llistxattr 5187
#define SYS_flistxattr 5188
#define SYS_removexattr 5189
#define SYS_lremovexattr 5190
#define SYS_fremovexattr 5191
#define SYS_tkill 5192
#define SYS_reserved193 5193
#define SYS_futex 5194
#define SYS_sched_setaffinity 5195
#define SYS_sched_getaffinity 5196
#define SYS_cacheflush 5197
#define SYS_cachectl 5198
#define SYS_sysmips 5199
#define SYS_io_setup 5200
#define SYS_io_destroy 5201
#define SYS_io_getevents 5202
#define SYS_io_submit 5203
#define SYS_io_cancel 5204
#define SYS_exit_group 5205
#define SYS_lookup_dcookie 5206
#define SYS_epoll_create 5207
#define SYS_epoll_ctl 5208
#define SYS_epoll_wait 5209
#define SYS_remap_file_pages 5210
#define SYS_rt_sigreturn 5211
#define SYS_set_tid_address 5212
#define SYS_restart_syscall 5213
#define SYS_semtimedop 5214
#define SYS_fadvise64 5215
#define SYS_timer_create 5216
#define SYS_timer_settime 5217
#define SYS_timer_gettime 5218
#define SYS_timer_getoverrun 5219
#define SYS_timer_delete 5220
#define SYS_clock_settime 5221
#define SYS_clock_gettime 5222
#define SYS_clock_getres 5223
#define SYS_clock_nanosleep 5224
#define SYS_tgkill 5225
#define SYS_utimes 5226
#define SYS_mbind 5227
#define SYS_get_mempolicy 5228
#define SYS_set_mempolicy 5229
#define SYS_mq_open 5230
#define SYS_mq_unlink 5231
#define SYS_mq_timedsend 5232
#define SYS_mq_timedreceive 5233
#define SYS_mq_notify 5234
#define SYS_mq_getsetattr 5235
#define SYS_vserver 5236
#define SYS_waitid 5237
#define SYS_add_key 5239
#define SYS_request_key 5240
#define SYS_keyctl 5241
#define SYS_set_thread_area 5242
#define SYS_inotify_init 5243
#define SYS_inotify_add_watch 5244
#define SYS_inotify_rm_watch 5245
#define SYS_migrate_pages 5246
#define SYS_openat 5247
#define SYS_mkdirat 5248
#define SYS_mknodat 5249
#define SYS_fchownat 5250
#define SYS_futimesat 5251
#define SYS_newfstatat 5252
#define SYS_unlinkat 5253
#define SYS_renameat 5254
#define SYS_linkat 5255
#define SYS_symlinkat 5256
#define SYS_readlinkat 5257
#define SYS_fchmodat 5258
#define SYS_faccessat 5259
#define SYS_pselect6 5260
#define SYS_ppoll 5261
#define SYS_unshare 5262
#define SYS_splice 5263
#define SYS_sync_file_range 5264
#define SYS_tee 5265
#define SYS_vmsplice 5266
#define SYS_move_pages 5267
#define SYS_set_robust_list 5268
#define SYS_get_robust_list 5269
#define SYS_kexec_load 5270
#define SYS_getcpu 5271
#define SYS_epoll_pwait 5272
#define SYS_ioprio_set 5273
#define SYS_ioprio_get 5274
#define SYS_utimensat 5275
#define SYS_signalfd 5276
#define SYS_timerfd 5277
#define SYS_eventfd 5278
#define SYS_fallocate 5279
#define SYS_timerfd_create 5280
#define SYS_timerfd_gettime 5281
#define SYS_timerfd_settime 5282
#define SYS_signalfd4 5283
#define SYS_eventfd2 5284
#define SYS_epoll_create1 5285
#define SYS_dup3 5286
#define SYS_pipe2 5287
#define SYS_inotify_init1 5288
#define SYS_preadv 5289
#define SYS_pwritev 5290
#define SYS_rt_tgsigqueueinfo 5291
#define SYS_perf_event_open 5292
#define SYS_accept4 5293
#define SYS_recvmmsg 5294
#define SYS_fanotify_init 5295
#define SYS_fanotify_mark 5296
#define SYS_prlimit64 5297
#define SYS_name_to_handle_at 5298
#define SYS_open_by_handle_at 5299
#define SYS_clock_adjtime 5300
#define SYS_syncfs 5301
#define SYS_sendmmsg 5302
#define SYS_setns 5303
#define SYS_process_vm_readv 5304
#define SYS_process_vm_writev 5305
#define SYS_kcmp 5306
#define SYS_finit_module 5307
#define SYS_getdents64 5308
#define SYS_sched_setattr 5309
#define SYS_sched_getattr 5310
#define SYS_renameat2 5311
#define SYS_seccomp 5312
#define SYS_getrandom 5313
#define SYS_memfd_create 5314
#define SYS_bpf 5315
#define SYS_execveat 5316
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];
};
#define VINTR 0
#define VQUIT 1
#define VERASE 2
#define VKILL 3
#define VMIN 4
#define VTIME 5
#define VEOL2 6
#define VSWTC 7
#define VSWTCH 7
#define VSTART 8
#define VSTOP 9
#define VSUSP 10
#define VREPRINT 12
#define VDISCARD 13
#define VWERASE 14
#define VLNEXT 15
#define VEOF 16
#define VEOL 17
#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 EXTA 0000016
#define EXTB 0000017
#define BOTHER 0010000
#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 XCASE 0000004
#define ECHO 0000010
#define ECHOE 0000020
#define ECHOK 0000040
#define ECHONL 0000100
#define NOFLSH 0000200
#define IEXTEN 0000400
#define ECHOCTL 0001000
#define ECHOPRT 0002000
#define ECHOKE 0004000
#define FLUSHO 0020000
#define PENDIN 0040000
#define TOSTOP 0100000
#define ITOSTOP 0100000
#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 CIBAUD 002003600000
#define IBSHIFT 16
#define CMSPAR 010000000000
#define CRTSCTS 020000000000
#define EXTPROC 0200000
#define XTABS 0014000
#define TIOCSER_TEMT 1
#endif
struct user {
unsigned long regs[102];
unsigned long u_tsize, u_dsize, u_ssize;
unsigned long long start_code, start_data, start_stack;
long long signal;
unsigned long long *u_ar0;
unsigned long 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];
__asm__(
".set push\n"
".set noreorder\n"
".text \n"
".global _" START "\n"
".global " START "\n"
".global " START "_data\n"
".type _" START ", @function\n"
".type " START ", @function\n"
".type " START "_data, @function\n"
"_" START ":\n"
"" START ":\n"
".align 8 \n"
" bal 1f \n"
" move $fp, $0 \n"
"" START "_data: \n"
" .gpdword " START "_data \n"
" .gpdword " START "_c \n"
".weak _DYNAMIC \n"
".hidden _DYNAMIC \n"
" .gpdword _DYNAMIC \n"
"1: ld $gp, 0($ra) \n"
" dsubu $gp, $ra, $gp \n"
" move $4, $sp \n"
" ld $5, 16($ra) \n"
" daddu $5, $5, $gp \n"
" ld $25, 8($ra) \n"
" daddu $25, $25, $gp \n"
" and $sp, $sp, -16 \n"
" jalr $25 \n"
" nop \n"
".set pop \n"
);
struct k_sigaction {
unsigned flags;
void (*handler)(int);
unsigned long mask[2];
void (*restorer)();
};
void __restore(), __restore_rt();
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 DTP_OFFSET 0x8000
#define MC_PC pc
#ifndef __RELOC_H__
#define __RELOC_H__
#define _GNU_SOURCE
#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 "mips64" ENDIAN_SUFFIX FP_SUFFIX
#define TPOFF_K (-0x7000)
#define REL_SYM_OR_REL 4611
#define REL_PLT R_MIPS_JUMP_SLOT
#define REL_COPY R_MIPS_COPY
#define REL_DTPMOD R_MIPS_TLS_DTPMOD64
#define REL_DTPOFF R_MIPS_TLS_DTPREL64
#define REL_TPOFF R_MIPS_TLS_TPREL64
#undef R_TYPE
#undef R_SYM
#undef R_INFO
#define R_TYPE(x) (be64toh(x)&0x7fffffff)
#define R_SYM(x) (be32toh(be64toh(x)>>32))
#define R_INFO(s,t) (htobe64((uint64_t)htobe32(s)<<32 | (uint64_t)t))
#define NEED_MIPS_GOT_RELOCS 1
#define DT_DEBUG_INDIRECT DT_MIPS_RLD_MAP
#define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT))
#define CRTJMP(pc,sp) __asm__ __volatile__( \
"move $sp,%1 ; jr %0" : : "r"(pc), "r"(sp) : "memory" )
#define GETFUNCSYM(fp, sym, got) __asm__ ( \
".hidden " #sym "\n" \
".set push \n" \
".set noreorder \n" \
".align 8 \n" \
" bal 1f \n" \
" nop \n" \
" .gpdword . \n" \
" .gpdword " #sym " \n" \
"1: ld %0, ($ra) \n" \
" dsubu %0, $ra, %0 \n" \
" ld $ra, 8($ra) \n" \
" daddu %0, %0, $ra \n" \
".set pop \n" \
: "=r"(*(fp)) : : "memory", "ra" )
#endif
#define __SYSCALL_LL_E(x) (x)
#define __SYSCALL_LL_O(x) (x)
__attribute__((visibility("hidden")))
long (__syscall)(long, ...);
#define SYSCALL_RLIM_INFINITY (-1UL/2)
#include <sys/stat.h>
struct kernel_stat {
unsigned int st_dev;
unsigned int __pad1[3];
unsigned long long st_ino;
unsigned int st_mode;
unsigned int st_nlink;
int st_uid;
int st_gid;
unsigned int st_rdev;
unsigned int __pad2[3];
long long st_size;
unsigned int st_atime_sec;
unsigned int st_atime_nsec;
unsigned int st_mtime_sec;
unsigned int st_mtime_nsec;
unsigned int st_ctime_sec;
unsigned int st_ctime_nsec;
unsigned int st_blksize;
unsigned int __pad3;
unsigned long long st_blocks;
};
static void __stat_fix(struct kernel_stat *kst, struct stat *st)
{
st->st_dev = kst->st_dev;
st->st_ino = kst->st_ino;
st->st_mode = kst->st_mode;
st->st_nlink = kst->st_nlink;
st->st_uid = kst->st_uid;
st->st_gid = kst->st_gid;
st->st_rdev = kst->st_rdev;
st->st_size = kst->st_size;
st->st_atim.tv_sec = kst->st_atime_sec;
st->st_atim.tv_nsec = kst->st_atime_nsec;
st->st_mtim.tv_sec = kst->st_mtime_sec;
st->st_mtim.tv_nsec = kst->st_mtime_nsec;
st->st_ctim.tv_sec = kst->st_ctime_sec;
st->st_ctim.tv_nsec = kst->st_ctime_nsec;
st->st_blksize = kst->st_blksize;
st->st_blocks = kst->st_blocks;
}
#ifndef __clang__
static inline long __syscall0(long n)
{
register long r7 __asm__("$7");
register long r2 __asm__("$2");
__asm__ __volatile__ (
"daddu $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__ (
"daddu $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)
{
struct kernel_stat kst;
long ret;
register long r4 __asm__("$4");
register long r5 __asm__("$5");
register long r7 __asm__("$7");
register long r2 __asm__("$2");
r5 = b;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
r5 = (long) &kst;
r4 = a;
__asm__ __volatile__ (
"daddu $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;
ret = r2;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
__stat_fix(&kst, (struct stat *)b);
return ret;
}
static inline long __syscall3(long n, long a, long b, long c)
{
struct kernel_stat kst;
long ret;
register long r4 __asm__("$4");
register long r5 __asm__("$5");
register long r6 __asm__("$6");
register long r7 __asm__("$7");
register long r2 __asm__("$2");
r5 = b;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
r5 = (long) &kst;
r4 = a;
r6 = c;
__asm__ __volatile__ (
"daddu $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;
ret = r2;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
__stat_fix(&kst, (struct stat *)b);
return ret;
}
static inline long __syscall4(long n, long a, long b, long c, long d)
{
struct kernel_stat kst;
long ret;
register long r4 __asm__("$4");
register long r5 __asm__("$5");
register long r6 __asm__("$6");
register long r7 __asm__("$7");
register long r2 __asm__("$2");
r5 = b;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
r5 = (long) &kst;
r4 = a;
r6 = c;
r7 = d;
__asm__ __volatile__ (
"daddu $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;
ret = r2;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
__stat_fix(&kst, (struct stat *)b);
return ret;
}
#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;
long old_b = b;
struct kernel_stat kst;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
b = (long) &kst;
r2 = (__syscall)(n, a, b);
if (r2 > -4096UL) return r2;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
__stat_fix(&kst, (struct stat *)old_b);
return r2;
}
static inline long __syscall3(long n, long a, long b, long c)
{
long r2;
long old_b = b;
struct kernel_stat kst;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
b = (long) &kst;
r2 = (__syscall)(n, a, b, c);
if (r2 > -4096UL) return r2;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
__stat_fix(&kst, (struct stat *)old_b);
return r2;
}
static inline long __syscall4(long n, long a, long b, long c, long d)
{
long r2;
long old_b = b;
struct kernel_stat kst;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
b = (long) &kst;
r2 = (__syscall)(n, a, b, c, d);
if (r2 > -4096UL) return r2;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
__stat_fix(&kst, (struct stat *)old_b);
return r2;
}
#endif
static inline long __syscall5(long n, long a, long b, long c, long d, long e)
{
long r2;
long old_b = b;
struct kernel_stat kst;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
b = (long) &kst;
r2 = (__syscall)(n, a, b, c, d, e);
if (r2 > -4096UL) return r2;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
__stat_fix(&kst, (struct stat *)old_b);
return r2;
}
static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
{
long r2;
long old_b = b;
struct kernel_stat kst;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
b = (long) &kst;
r2 = (__syscall)(n, a, b, c, d, e, f);
if (r2 > -4096UL) return r2;
if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat)
__stat_fix(&kst, (struct stat *)old_b);
return r2;
}
#define VDSO_USEFUL
#define VDSO_CGT_SYM "__vdso_clock_gettime"
#define VDSO_CGT_VER "LINUX_2.6"
......@@ -299,7 +299,7 @@ printf "%s\n" "$target"
#
case "$target" in
# Catch these early to simplify matching for 32-bit archs
mips64*|powerpc64*) fail "$0: unsupported target \"$target\"" ;;
powerpc64*) fail "$0: unsupported target \"$target\"" ;;
arm*) ARCH=arm ;;
aarch64*) ARCH=aarch64 ;;
i?86-nt32*) ARCH=nt32 ;;
......@@ -307,6 +307,7 @@ i?86*) ARCH=i386 ;;
x86_64-x32*|x32*|x86_64*x32) ARCH=x32 ;;
x86_64-nt64*) ARCH=nt64 ;;
x86_64*) ARCH=x86_64 ;;
mips64*) ARCH=mips64 ;;
mips*) ARCH=mips ;;
microblaze*) ARCH=microblaze ;;
or1k*) ARCH=or1k ;;
......@@ -615,6 +616,11 @@ trycppif "_MIPSEL || __MIPSEL || __MIPSEL__" "$t" && SUBARCH=${SUBARCH}el
trycppif __mips_soft_float "$t" && SUBARCH=${SUBARCH}-sf
fi
if test "$ARCH" = "mips64" ; then
trycppif "_MIPSEL || __MIPSEL || __MIPSEL__" "$t" && SUBARCH=${SUBARCH}el
trycppif __mips_soft_float "$t" && SUBARCH=${SUBARCH}-sf
fi
test "$ARCH" = "microblaze" && trycppif __MICROBLAZEEL__ "$t" \
&& SUBARCH=${SUBARCH}el
......
.set noreorder
.section .init
.global _init
.align 3
_init:
dsubu $sp, $sp, 32
sd $gp, 16($sp)
sd $ra, 24($sp)
.section .fini
.global _fini
.align 3
_fini:
dsubu $sp, $sp, 32
sd $gp, 16($sp)
sd $ra, 24($sp)
.set noreorder
.section .init
ld $gp,16($sp)
ld $ra,24($sp)
j $ra
daddu $sp,$sp,32
.section .fini
ld $gp,16($sp)
ld $ra,24($sp)
j $ra
daddu $sp,$sp,32
#ifdef __mips_soft_float
#include "../fenv.c"
#endif
#ifndef __mips_soft_float
.set noreorder
.global feclearexcept
.type feclearexcept,@function
feclearexcept:
and $4, $4, 0x7c
cfc1 $5, $31
or $5, $5, $4
xor $5, $5, $4
ctc1 $5, $31
jr $ra
li $2, 0
.global feraiseexcept
.type feraiseexcept,@function
feraiseexcept:
and $4, $4, 0x7c
cfc1 $5, $31
or $5, $5, $4
ctc1 $5, $31
jr $ra
li $2, 0
.global fetestexcept
.type fetestexcept,@function
fetestexcept:
and $4, $4, 0x7c
cfc1 $2, $31
jr $ra
and $2, $2, $4
.global fegetround
.type fegetround,@function
fegetround:
cfc1 $2, $31
jr $ra
andi $2, $2, 3
.global __fesetround
.type __fesetround,@function
__fesetround:
cfc1 $5, $31
li $6, -4
and $5, $5, $6
or $5, $5, $4
ctc1 $5, $31
jr $ra
li $2, 0
.global fegetenv
.type fegetenv,@function
fegetenv:
cfc1 $5, $31
sw $5, 0($4)
jr $ra
li $2, 0
.global fesetenv
.type fesetenv,@function
fesetenv:
daddiu $5, $4, 1
beq $5, $0, 1f
nop
lw $5, 0($4)
1: ctc1 $5, $31
jr $ra
li $2, 0
#endif
.set noreorder
.global __syscall
.hidden __syscall
.type __syscall,@function
__syscall:
move $2, $4
move $4, $5
move $5, $6
move $6, $7
move $7, $8
move $8, $9
move $9, $10
move $10, $11
syscall
beq $7, $0, 1f
nop
dsubu $2, $0, $2
1: jr $ra
nop
.set noreorder
.global dlsym
.hidden __dlsym
.type dlsym,@function
dlsym:
lui $3, %hi(%neg(%gp_rel(dlsym)))
daddiu $3, $3, %lo(%neg(%gp_rel(dlsym)))
daddu $3, $3, $25
move $6, $ra
ld $25, %got_disp(__dlsym)($3)
daddiu $sp, $sp, -32
sd $ra, 24($sp)
jalr $25
nop
ld $ra, 24($sp)
jr $ra
daddiu $sp, $sp, 32
.set noreorder
.global _longjmp
.global longjmp
.type _longjmp,@function
.type longjmp,@function
_longjmp:
longjmp:
move $2, $5
bne $2, $0, 1f
nop
daddu $2, $2, 1
1:
#ifndef __mips_soft_float
ldc1 $24, 96($4)
ldc1 $25, 104($4)
ldc1 $26, 112($4)
ldc1 $27, 120($4)
ldc1 $28, 128($4)
ldc1 $29, 136($4)
ldc1 $30, 144($4)
ldc1 $31, 152($4)
#endif
ld $ra, 0($4)
ld $sp, 8($4)
ld $gp, 16($4)
ld $16, 24($4)
ld $17, 32($4)
ld $18, 40($4)
ld $19, 48($4)
ld $20, 56($4)
ld $21, 64($4)
ld $22, 72($4)
ld $23, 80($4)
ld $30, 88($4)
jr $ra
nop
.set noreorder
.global __setjmp
.global _setjmp
.global setjmp
.type __setjmp,@function
.type _setjmp,@function
.type setjmp,@function
__setjmp:
_setjmp:
setjmp:
sd $ra, 0($4)
sd $sp, 8($4)
sd $gp, 16($4)
sd $16, 24($4)
sd $17, 32($4)
sd $18, 40($4)
sd $19, 48($4)
sd $20, 56($4)
sd $21, 64($4)
sd $22, 72($4)
sd $23, 80($4)
sd $30, 88($4)
#ifndef __mips_soft_float
sdc1 $24, 96($4)
sdc1 $25, 104($4)
sdc1 $26, 112($4)
sdc1 $27, 120($4)
sdc1 $28, 128($4)
sdc1 $29, 136($4)
sdc1 $30, 144($4)
sdc1 $31, 152($4)
#endif
jr $ra
li $2, 0
.set noreorder
.global __restore_rt
.global __restore
.type __restore_rt,@function
.type __restore,@function
__restore_rt:
__restore:
li $2,5211
syscall
.set noreorder
.global sigsetjmp
.global __sigsetjmp
.type sigsetjmp,@function
.type __sigsetjmp,@function
sigsetjmp:
__sigsetjmp:
lui $3, %hi(%neg(%gp_rel(sigsetjmp)))
daddiu $3, $3, %lo(%neg(%gp_rel(sigsetjmp)))
# comparing save mask with 0, if equals to 0 then
# sigsetjmp is equal to setjmp.
beq $5, $0, 1f
daddu $3, $3, $25
sd $ra, 160($4)
sd $16, 168($4)
# save base of got so that we can use it later
# once we return from 'longjmp'
sd $3, 176($4)
ld $25, %got_disp(setjmp)($3)
jalr $25
move $16, $4
move $5, $2 # Return from 'setjmp' or 'longjmp'
move $4, $16 # Restore the pointer-to-sigjmp_buf
ld $ra, 160($4) # Restore ra of sigsetjmp
ld $16, 168($4) # Restore $16 of sigsetjmp
ld $3, 176($4) # Restore base of got
.hidden __sigsetjmp_tail
ld $25, %got_disp(__sigsetjmp_tail)($3)
jr $25
nop
1:
ld $25, %got_disp(setjmp)($3)
jr $25
nop
.set noreorder
.global __unmapself
.type __unmapself, @function
__unmapself:
li $2, 5011
syscall
li $4, 0
li $2, 5058
syscall
.set noreorder
.global __clone
.type __clone,@function
__clone:
# Save function pointer and argument pointer on new thread stack
and $5, $5, -16 # aligning stack to double word
dsubu $5, $5, 16
sd $4, 0($5) # save function pointer
sd $7, 8($5) # save argument pointer
# Shuffle (fn,sp,fl,arg,ptid,tls,ctid) to (fl,sp,ptid,tls,ctid)
# sys_clone(u64 flags, u64 ustack_base, u64 parent_tidptr, u64 child_tidptr, u64 tls)
move $4, $6
move $6, $8
move $7, $9
move $8, $10
li $2, 5055
syscall
beq $7, $0, 1f
nop
jr $ra
dsubu $2, $0, $2
1: beq $2, $0, 1f
nop
jr $ra
nop
1: ld $25, 0($sp) # function pointer
ld $4, 8($sp) # argument pointer
jr $25 # call the user's function
nop
.set noreorder
.global __cp_begin
.hidden __cp_begin
.type __cp_begin,@function
.global __cp_end
.hidden __cp_end
.type __cp_end,@function
.global __cp_cancel
.hidden __cp_cancel
.type __cp_cancel,@function
.global __cp_cancel_data
.hidden __cp_cancel_data
.type __cp_cancel_data,@function
.hidden __cancel
.global __syscall_cp_asm
.hidden __syscall_cp_asm
.type __syscall_cp_asm,@function
__syscall_cp_asm:
__cp_begin:
lw $4, 0($4)
bne $4, $0, __cp_cancel
move $2, $5
move $4, $6
move $5, $7
move $6, $8
move $7, $9
move $8, $10
move $9, $11
ld $10, 0($sp)
syscall
__cp_end:
beq $7, $0, 1f
nop
dsubu $2, $0, $2
1: jr $ra
nop
# if cancellation flag is 1 then call __cancel
__cp_cancel:
move $2, $ra
.align 8
bal 1f
nop
__cp_cancel_data:
.gpdword __cp_cancel_data
.gpdword __cancel
1: ld $3, ($ra)
dsubu $3, $ra, $3
ld $25, 8($ra)
daddu $25, $25, $3
jr $25
move $ra, $2
.set noreorder
.global pipe
.type pipe,@function
pipe:
lui $3, %hi(%neg(%gp_rel(pipe)))
daddiu $3, $3, %lo(%neg(%gp_rel(pipe)))
daddu $3, $3, $25
li $2, 5021
syscall
beq $7, $0, 1f
nop
ld $25, %got_disp(__syscall_ret)($3)
jr $25
dsubu $4, $0, $2
1: sw $2, 0($4)
sw $3, 4($4)
move $2, $0
jr $ra
nop
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册