diff options
47 files changed, 2546 insertions, 1 deletions
| diff --git a/arch/mips64/atomic_arch.h b/arch/mips64/atomic_arch.h new file mode 100644 index 00000000..49d9884a --- /dev/null +++ b/arch/mips64/atomic_arch.h @@ -0,0 +1,50 @@ +#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 diff --git a/arch/mips64/bits/alltypes.h.in b/arch/mips64/bits/alltypes.h.in new file mode 100644 index 00000000..2b2e34a8 --- /dev/null +++ b/arch/mips64/bits/alltypes.h.in @@ -0,0 +1,28 @@ +#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; diff --git a/arch/mips64/bits/endian.h b/arch/mips64/bits/endian.h new file mode 100644 index 00000000..5399dcb5 --- /dev/null +++ b/arch/mips64/bits/endian.h @@ -0,0 +1,5 @@ +#if _MIPSEL || __MIPSEL || __MIPSEL__ +#define __BYTE_ORDER __LITTLE_ENDIAN +#else +#define __BYTE_ORDER __BIG_ENDIAN +#endif diff --git a/arch/mips64/bits/errno.h b/arch/mips64/bits/errno.h new file mode 100644 index 00000000..1bb91e3d --- /dev/null +++ b/arch/mips64/bits/errno.h @@ -0,0 +1,134 @@ +#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 diff --git a/arch/mips64/bits/fcntl.h b/arch/mips64/bits/fcntl.h new file mode 100644 index 00000000..3bcec15e --- /dev/null +++ b/arch/mips64/bits/fcntl.h @@ -0,0 +1,40 @@ +#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 diff --git a/arch/mips64/bits/fenv.h b/arch/mips64/bits/fenv.h new file mode 100644 index 00000000..27620896 --- /dev/null +++ b/arch/mips64/bits/fenv.h @@ -0,0 +1,25 @@ +#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) diff --git a/arch/mips64/bits/float.h b/arch/mips64/bits/float.h new file mode 100644 index 00000000..719c7908 --- /dev/null +++ b/arch/mips64/bits/float.h @@ -0,0 +1,16 @@ +#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 diff --git a/arch/mips64/bits/ioctl.h b/arch/mips64/bits/ioctl.h new file mode 100644 index 00000000..041be560 --- /dev/null +++ b/arch/mips64/bits/ioctl.h @@ -0,0 +1,210 @@ +#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 diff --git a/arch/mips64/bits/ipc.h b/arch/mips64/bits/ipc.h new file mode 100644 index 00000000..43a8314e --- /dev/null +++ b/arch/mips64/bits/ipc.h @@ -0,0 +1,14 @@ +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 diff --git a/arch/mips64/bits/limits.h b/arch/mips64/bits/limits.h new file mode 100644 index 00000000..58698c62 --- /dev/null +++ b/arch/mips64/bits/limits.h @@ -0,0 +1,7 @@ +#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 diff --git a/arch/mips64/bits/mman.h b/arch/mips64/bits/mman.h new file mode 100644 index 00000000..cb9ac539 --- /dev/null +++ b/arch/mips64/bits/mman.h @@ -0,0 +1,58 @@ +#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 diff --git a/arch/mips64/bits/msg.h b/arch/mips64/bits/msg.h new file mode 100644 index 00000000..641e1703 --- /dev/null +++ b/arch/mips64/bits/msg.h @@ -0,0 +1,13 @@ +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; +}; diff --git a/arch/mips64/bits/poll.h b/arch/mips64/bits/poll.h new file mode 100644 index 00000000..b0b1ed62 --- /dev/null +++ b/arch/mips64/bits/poll.h @@ -0,0 +1,2 @@ +#define POLLWRNORM POLLOUT +#define POLLWRBAND 0x100 diff --git a/arch/mips64/bits/posix.h b/arch/mips64/bits/posix.h new file mode 100644 index 00000000..acf42944 --- /dev/null +++ b/arch/mips64/bits/posix.h @@ -0,0 +1,2 @@ +#define _POSIX_V6_LP64_OFFBIG 1 +#define _POSIX_V7_LP64_OFFBIG 1 diff --git a/arch/mips64/bits/reg.h b/arch/mips64/bits/reg.h new file mode 100644 index 00000000..a3f63acc --- /dev/null +++ b/arch/mips64/bits/reg.h @@ -0,0 +1,47 @@ +#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 diff --git a/arch/mips64/bits/resource.h b/arch/mips64/bits/resource.h new file mode 100644 index 00000000..414a4054 --- /dev/null +++ b/arch/mips64/bits/resource.h @@ -0,0 +1,5 @@ +#define RLIMIT_NOFILE  5 +#define RLIMIT_AS      6 +#define RLIMIT_RSS     7 +#define RLIMIT_NPROC   8 +#define RLIMIT_MEMLOCK 9 diff --git a/arch/mips64/bits/sem.h b/arch/mips64/bits/sem.h new file mode 100644 index 00000000..e46ced95 --- /dev/null +++ b/arch/mips64/bits/sem.h @@ -0,0 +1,14 @@ +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; +}; diff --git a/arch/mips64/bits/setjmp.h b/arch/mips64/bits/setjmp.h new file mode 100644 index 00000000..4d93267e --- /dev/null +++ b/arch/mips64/bits/setjmp.h @@ -0,0 +1 @@ +typedef unsigned long long __jmp_buf[23]; diff --git a/arch/mips64/bits/shm.h b/arch/mips64/bits/shm.h new file mode 100644 index 00000000..8d193781 --- /dev/null +++ b/arch/mips64/bits/shm.h @@ -0,0 +1,24 @@ +#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; +}; diff --git a/arch/mips64/bits/signal.h b/arch/mips64/bits/signal.h new file mode 100644 index 00000000..c31ad07e --- /dev/null +++ b/arch/mips64/bits/signal.h @@ -0,0 +1,143 @@ +#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 diff --git a/arch/mips64/bits/socket.h b/arch/mips64/bits/socket.h new file mode 100644 index 00000000..cf801797 --- /dev/null +++ b/arch/mips64/bits/socket.h @@ -0,0 +1,68 @@ +#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 diff --git a/arch/mips64/bits/stat.h b/arch/mips64/bits/stat.h new file mode 100644 index 00000000..b46617f1 --- /dev/null +++ b/arch/mips64/bits/stat.h @@ -0,0 +1,23 @@ +#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]; +}; diff --git a/arch/mips64/bits/statfs.h b/arch/mips64/bits/statfs.h new file mode 100644 index 00000000..a73bd547 --- /dev/null +++ b/arch/mips64/bits/statfs.h @@ -0,0 +1,8 @@ +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]; +}; diff --git a/arch/mips64/bits/stdint.h b/arch/mips64/bits/stdint.h new file mode 100644 index 00000000..1bb147f2 --- /dev/null +++ b/arch/mips64/bits/stdint.h @@ -0,0 +1,20 @@ +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 diff --git a/arch/mips64/bits/syscall.h b/arch/mips64/bits/syscall.h new file mode 100644 index 00000000..d9b4f42f --- /dev/null +++ b/arch/mips64/bits/syscall.h @@ -0,0 +1,633 @@ +#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 diff --git a/arch/mips64/bits/termios.h b/arch/mips64/bits/termios.h new file mode 100644 index 00000000..3a7d5a13 --- /dev/null +++ b/arch/mips64/bits/termios.h @@ -0,0 +1,166 @@ +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 diff --git a/arch/mips64/bits/user.h b/arch/mips64/bits/user.h new file mode 100644 index 00000000..60fa1fda --- /dev/null +++ b/arch/mips64/bits/user.h @@ -0,0 +1,15 @@ +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]; diff --git a/arch/mips64/crt_arch.h b/arch/mips64/crt_arch.h new file mode 100644 index 00000000..d148f977 --- /dev/null +++ b/arch/mips64/crt_arch.h @@ -0,0 +1,33 @@ +__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" +); diff --git a/arch/mips64/ksigaction.h b/arch/mips64/ksigaction.h new file mode 100644 index 00000000..55ba18ea --- /dev/null +++ b/arch/mips64/ksigaction.h @@ -0,0 +1,8 @@ +struct k_sigaction { +	unsigned flags; +	void (*handler)(int); +	unsigned long mask[2]; +	void (*restorer)(); +}; + +void __restore(), __restore_rt(); diff --git a/arch/mips64/pthread_arch.h b/arch/mips64/pthread_arch.h new file mode 100644 index 00000000..b42edbe3 --- /dev/null +++ b/arch/mips64/pthread_arch.h @@ -0,0 +1,18 @@ +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 diff --git a/arch/mips64/reloc.h b/arch/mips64/reloc.h new file mode 100644 index 00000000..5933147c --- /dev/null +++ b/arch/mips64/reloc.h @@ -0,0 +1,60 @@ +#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 diff --git a/arch/mips64/syscall_arch.h b/arch/mips64/syscall_arch.h new file mode 100644 index 00000000..1bd6c18f --- /dev/null +++ b/arch/mips64/syscall_arch.h @@ -0,0 +1,281 @@ +#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 diff --git a/crt/mips64/crti.s b/crt/mips64/crti.s new file mode 100644 index 00000000..c962dd09 --- /dev/null +++ b/crt/mips64/crti.s @@ -0,0 +1,17 @@ +.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) diff --git a/crt/mips64/crtn.s b/crt/mips64/crtn.s new file mode 100644 index 00000000..f3930b24 --- /dev/null +++ b/crt/mips64/crtn.s @@ -0,0 +1,13 @@ +.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 diff --git a/src/fenv/mips64/fenv-sf.c b/src/fenv/mips64/fenv-sf.c new file mode 100644 index 00000000..4aa3dbf1 --- /dev/null +++ b/src/fenv/mips64/fenv-sf.c @@ -0,0 +1,3 @@ +#ifdef __mips_soft_float +#include "../fenv.c" +#endif diff --git a/src/fenv/mips64/fenv.S b/src/fenv/mips64/fenv.S new file mode 100644 index 00000000..3cba3f0f --- /dev/null +++ b/src/fenv/mips64/fenv.S @@ -0,0 +1,71 @@ +#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 diff --git a/src/internal/mips64/syscall.s b/src/internal/mips64/syscall.s new file mode 100644 index 00000000..98448667 --- /dev/null +++ b/src/internal/mips64/syscall.s @@ -0,0 +1,19 @@ +.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 diff --git a/src/ldso/mips64/dlsym.s b/src/ldso/mips64/dlsym.s new file mode 100644 index 00000000..32e0dddc --- /dev/null +++ b/src/ldso/mips64/dlsym.s @@ -0,0 +1,17 @@ +.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 diff --git a/src/setjmp/mips64/longjmp.S b/src/setjmp/mips64/longjmp.S new file mode 100644 index 00000000..3db8a883 --- /dev/null +++ b/src/setjmp/mips64/longjmp.S @@ -0,0 +1,37 @@ +.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 diff --git a/src/setjmp/mips64/setjmp.S b/src/setjmp/mips64/setjmp.S new file mode 100644 index 00000000..b9646c2a --- /dev/null +++ b/src/setjmp/mips64/setjmp.S @@ -0,0 +1,34 @@ +.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 diff --git a/src/signal/mips64/restore.s b/src/signal/mips64/restore.s new file mode 100644 index 00000000..e8988369 --- /dev/null +++ b/src/signal/mips64/restore.s @@ -0,0 +1,9 @@ +.set	noreorder +.global	__restore_rt +.global	__restore +.type	__restore_rt,@function +.type	__restore,@function +__restore_rt: +__restore: +	li	$2,5211 +	syscall diff --git a/src/signal/mips64/sigsetjmp.s b/src/signal/mips64/sigsetjmp.s new file mode 100644 index 00000000..156e70bd --- /dev/null +++ b/src/signal/mips64/sigsetjmp.s @@ -0,0 +1,38 @@ +.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 diff --git a/src/thread/mips64/__unmapself.s b/src/thread/mips64/__unmapself.s new file mode 100644 index 00000000..f6795cda --- /dev/null +++ b/src/thread/mips64/__unmapself.s @@ -0,0 +1,9 @@ +.set	noreorder +.global	__unmapself +.type	__unmapself, @function +__unmapself: +	li	$2, 5011 +	syscall +	li	$4, 0 +	li	$2, 5058 +	syscall diff --git a/src/thread/mips64/clone.s b/src/thread/mips64/clone.s new file mode 100644 index 00000000..229d2677 --- /dev/null +++ b/src/thread/mips64/clone.s @@ -0,0 +1,30 @@ +.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 diff --git a/src/thread/mips64/syscall_cp.s b/src/thread/mips64/syscall_cp.s new file mode 100644 index 00000000..0d4ede76 --- /dev/null +++ b/src/thread/mips64/syscall_cp.s @@ -0,0 +1,52 @@ +.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 diff --git a/src/unistd/mips64/pipe.s b/src/unistd/mips64/pipe.s new file mode 100644 index 00000000..f8a27dcc --- /dev/null +++ b/src/unistd/mips64/pipe.s @@ -0,0 +1,19 @@ +.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 | 
