commit 1abe6a4d8e21d760e5765e7317c898dcedd422cb Author: Jaydeep Patil Date: Fri Feb 26 07:06:28 2016 +0000 [MIPS64] N64 port --- /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 int a_ll_p(volatile long *p) +{ + int 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 --- /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[9]; volatile int __vi[9]; unsigned __s[9]; } __u; } pthread_attr_t; +TYPEDEF struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } pthread_mutex_t; +TYPEDEF struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } mtx_t; +TYPEDEF struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } pthread_cond_t; +TYPEDEF struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } cnd_t; +TYPEDEF struct { union { int __i[8]; volatile int __vi[8]; void *__p[8]; } __u; } pthread_rwlock_t; +TYPEDEF struct { union { int __i[5]; volatile int __vi[5]; void *__p[5]; } __u; } pthread_barrier_t; --- /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 --- /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 --- /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 --- /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) --- /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 --- /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 // Not sure about these. +#define TCGETX 0x5432 // Not sure about these. +#define TCSETX 0x5433 // Not sure about these. +#define TCSETXF 0x5434 // Not sure about these. +#define TCSETXW 0x5435 // Not sure about these. + +#define TIOCPKT_DATA 0 +#define TIOCPKT_FLUSHREAD 1 +#define TIOCPKT_FLUSHWRITE 2 +#define TIOCPKT_STOP 4 +#define TIOCPKT_START 8 +#define TIOCPKT_NOSTOP 16 +#define TIOCPKT_DOSTOP 32 +#define TIOCPKT_IOCTL 64 + +#define TIOCSER_TEMT 0x01 + +struct winsize { + unsigned short ws_row; + unsigned short ws_col; + unsigned short ws_xpixel; + unsigned short ws_ypixel; +}; + +#define TIOCM_LE 0x001 +#define TIOCM_DTR 0x002 +#define TIOCM_RTS 0x004 +#define TIOCM_ST 0x008 +#define TIOCM_SR 0x010 +#define TIOCM_CTS 0x020 +#define TIOCM_CAR 0x040 +#define TIOCM_RNG 0x080 +#define TIOCM_DSR 0x100 +#define TIOCM_CD TIOCM_CAR +#define TIOCM_RI TIOCM_RNG +#define TIOCM_OUT1 0x2000 +#define TIOCM_OUT2 0x4000 +#define TIOCM_LOOP 0x8000 +#define TIOCM_MODEM_BITS TIOCM_OUT2 + +#define N_TTY 0 +#define N_SLIP 1 +#define N_MOUSE 2 +#define N_PPP 3 +#define N_STRIP 4 +#define N_AX25 5 +#define N_X25 6 +#define N_6PACK 7 +#define N_MASC 8 +#define N_R3964 9 +#define N_PROFIBUS_FDL 10 +#define N_IRDA 11 +#define N_SMSBLOCK 12 +#define N_HDLC 13 +#define N_SYNC_PPP 14 +#define N_HCI 15 + +#define FIOSETOWN 0x8901 +#define SIOCSPGRP 0x8902 +#define FIOGETOWN 0x8903 +#define SIOCGPGRP 0x8904 +#define SIOCATMARK 0x8905 +#define SIOCGSTAMP 0x8906 + +#define SIOCADDRT 0x890B +#define SIOCDELRT 0x890C +#define SIOCRTMSG 0x890D + +#define SIOCGIFNAME 0x8910 +#define SIOCSIFLINK 0x8911 +#define SIOCGIFCONF 0x8912 +#define SIOCGIFFLAGS 0x8913 +#define SIOCSIFFLAGS 0x8914 +#define SIOCGIFADDR 0x8915 +#define SIOCSIFADDR 0x8916 +#define SIOCGIFDSTADDR 0x8917 +#define SIOCSIFDSTADDR 0x8918 +#define SIOCGIFBRDADDR 0x8919 +#define SIOCSIFBRDADDR 0x891a +#define SIOCGIFNETMASK 0x891b +#define SIOCSIFNETMASK 0x891c +#define SIOCGIFMETRIC 0x891d +#define SIOCSIFMETRIC 0x891e +#define SIOCGIFMEM 0x891f +#define SIOCSIFMEM 0x8920 +#define SIOCGIFMTU 0x8921 +#define SIOCSIFMTU 0x8922 +#define SIOCSIFHWADDR 0x8924 +#define SIOCGIFENCAP 0x8925 +#define SIOCSIFENCAP 0x8926 +#define SIOCGIFHWADDR 0x8927 +#define SIOCGIFSLAVE 0x8929 +#define SIOCSIFSLAVE 0x8930 +#define SIOCADDMULTI 0x8931 +#define SIOCDELMULTI 0x8932 +#define SIOCGIFINDEX 0x8933 +#define SIOGIFINDEX SIOCGIFINDEX +#define SIOCSIFPFLAGS 0x8934 +#define SIOCGIFPFLAGS 0x8935 +#define SIOCDIFADDR 0x8936 +#define SIOCSIFHWBROADCAST 0x8937 +#define SIOCGIFCOUNT 0x8938 + +#define SIOCGIFBR 0x8940 +#define SIOCSIFBR 0x8941 + +#define SIOCGIFTXQLEN 0x8942 +#define SIOCSIFTXQLEN 0x8943 + +#define SIOCDARP 0x8953 +#define SIOCGARP 0x8954 +#define SIOCSARP 0x8955 + +#define SIOCDRARP 0x8960 +#define SIOCGRARP 0x8961 +#define SIOCSRARP 0x8962 + +#define SIOCGIFMAP 0x8970 +#define SIOCSIFMAP 0x8971 + +#define SIOCADDDLCI 0x8980 +#define SIOCDELDLCI 0x8981 + +#define SIOCDEVPRIVATE 0x89F0 +#define SIOCPROTOPRIVATE 0x89E0 --- /dev/null +++ b/arch/mips64/bits/ipc.h @@ -0,0 +1,15 @@ +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 --- /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 --- /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 --- /dev/null +++ b/arch/mips64/bits/msg.h @@ -0,0 +1,14 @@ +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; +}; --- /dev/null +++ b/arch/mips64/bits/poll.h @@ -0,0 +1,2 @@ +#define POLLWRNORM POLLOUT +#define POLLWRBAND 0x100 --- /dev/null +++ b/arch/mips64/bits/posix.h @@ -0,0 +1,2 @@ +#define _POSIX_V6_LP64_OFFBIG 1 +#define _POSIX_V7_LP64_OFFBIG 1 --- /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 --- /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 --- /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; +}; --- /dev/null +++ b/arch/mips64/bits/setjmp.h @@ -0,0 +1 @@ +typedef unsigned long long __jmp_buf[25]; --- /dev/null +++ b/arch/mips64/bits/shm.h @@ -0,0 +1,26 @@ +#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; +}; + --- /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 __mc1[2]; + unsigned long long __mc2[65]; + unsigned __mc3[5]; + unsigned long long __mc4[2]; + unsigned __mc5[6]; +} mcontext_t; +#endif + +struct sigaltstack { + void *ss_sp; + size_t ss_size; + int ss_flags; +}; + +typedef struct __ucontext { + unsigned long uc_flags; + struct __ucontext *uc_link; + stack_t uc_stack; + mcontext_t uc_mcontext; + sigset_t uc_sigmask; +} ucontext_t; + +#define SA_NOCLDSTOP 1 +#define SA_NOCLDWAIT 0x10000 +#define SA_SIGINFO 8 +#define SA_ONSTACK 0x08000000 +#define SA_RESTART 0x10000000 +#define SA_NODEFER 0x40000000 +#define SA_RESETHAND 0x80000000 +#define SA_RESTORER 0x04000000 + +#undef SIG_BLOCK +#undef SIG_UNBLOCK +#undef SIG_SETMASK +#define SIG_BLOCK 1 +#define SIG_UNBLOCK 2 +#define SIG_SETMASK 3 + +#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 --- /dev/null +++ b/arch/mips64/bits/socket.h @@ -0,0 +1,72 @@ +#include + +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 --- /dev/null +++ b/arch/mips64/bits/stat.h @@ -0,0 +1,25 @@ +#include + +#include + +struct stat { + dev_t st_dev; + int st_pad1[3]; + ino_t st_ino; /* File serial number. */ + mode_t st_mode; /* File mode. */ + nlink_t st_nlink; /* Link count. */ + uid_t st_uid; /* User ID of the file's owner. */ + gid_t st_gid; /* Group ID of the file's group.*/ + dev_t st_rdev; /* Device number, if device. */ + unsigned int st_pad2[2]; + off_t st_size; /* Size of file, in bytes. */ + int st_pad3; + struct timespec st_atim; /* Time of last access. */ + struct timespec st_mtim; /* Time of last modification. */ + struct timespec st_ctim; /* Time of last status change. */ + blksize_t st_blksize; /* Optimal block size for I/O. */ + unsigned int st_pad4; + blkcnt_t st_blocks; /* Number of 512-byte blocks allocated. */ + int st_pad5[14]; +}; + --- /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]; +}; --- /dev/null +++ b/arch/mips64/bits/stdarg.h @@ -0,0 +1,4 @@ +#define va_start(v,l) __builtin_va_start(v,l) +#define va_end(v) __builtin_va_end(v) +#define va_arg(v,l) __builtin_va_arg(v,l) +#define va_copy(d,s) __builtin_va_copy(d,s) --- /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 //size of pointer is 8 bytes .address is 64 bit +#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 --- /dev/null +++ b/arch/mips64/bits/syscall.h @@ -0,0 +1,644 @@ +/* + * Linux 64-bit syscalls are in the range from 5000 to 5999. + */ +#define __NR_Linux 5000 +#define __NR_read (__NR_Linux + 0) +#define __NR_write (__NR_Linux + 1) +#define __NR_open (__NR_Linux + 2) +#define __NR_close (__NR_Linux + 3) +#define __NR_stat (__NR_Linux + 4) +#define __NR_fstat (__NR_Linux + 5) +#define __NR_lstat (__NR_Linux + 6) +#define __NR_poll (__NR_Linux + 7) +#define __NR_lseek (__NR_Linux + 8) +#define __NR_mmap (__NR_Linux + 9) +#define __NR_mprotect (__NR_Linux + 10) +#define __NR_munmap (__NR_Linux + 11) +#define __NR_brk (__NR_Linux + 12) +#define __NR_rt_sigaction (__NR_Linux + 13) +#define __NR_rt_sigprocmask (__NR_Linux + 14) +#define __NR_ioctl (__NR_Linux + 15) +#define __NR_pread64 (__NR_Linux + 16) +#define __NR_pwrite64 (__NR_Linux + 17) +#define __NR_readv (__NR_Linux + 18) +#define __NR_writev (__NR_Linux + 19) +#define __NR_access (__NR_Linux + 20) +#define __NR_pipe (__NR_Linux + 21) +#define __NR__newselect (__NR_Linux + 22) +#define __NR_sched_yield (__NR_Linux + 23) +#define __NR_mremap (__NR_Linux + 24) +#define __NR_msync (__NR_Linux + 25) +#define __NR_mincore (__NR_Linux + 26) +#define __NR_madvise (__NR_Linux + 27) +#define __NR_shmget (__NR_Linux + 28) +#define __NR_shmat (__NR_Linux + 29) +#define __NR_shmctl (__NR_Linux + 30) +#define __NR_dup (__NR_Linux + 31) +#define __NR_dup2 (__NR_Linux + 32) +#define __NR_pause (__NR_Linux + 33) +#define __NR_nanosleep (__NR_Linux + 34) +#define __NR_getitimer (__NR_Linux + 35) +#define __NR_setitimer (__NR_Linux + 36) +#define __NR_alarm (__NR_Linux + 37) +#define __NR_getpid (__NR_Linux + 38) +#define __NR_sendfile (__NR_Linux + 39) +#define __NR_socket (__NR_Linux + 40) +#define __NR_connect (__NR_Linux + 41) +#define __NR_accept (__NR_Linux + 42) +#define __NR_sendto (__NR_Linux + 43) +#define __NR_recvfrom (__NR_Linux + 44) +#define __NR_sendmsg (__NR_Linux + 45) +#define __NR_recvmsg (__NR_Linux + 46) +#define __NR_shutdown (__NR_Linux + 47) +#define __NR_bind (__NR_Linux + 48) +#define __NR_listen (__NR_Linux + 49) +#define __NR_getsockname (__NR_Linux + 50) +#define __NR_getpeername (__NR_Linux + 51) +#define __NR_socketpair (__NR_Linux + 52) +#define __NR_setsockopt (__NR_Linux + 53) +#define __NR_getsockopt (__NR_Linux + 54) +#define __NR_clone (__NR_Linux + 55) +#define __NR_fork (__NR_Linux + 56) +#define __NR_execve (__NR_Linux + 57) +#define __NR_exit (__NR_Linux + 58) +#define __NR_wait4 (__NR_Linux + 59) +#define __NR_kill (__NR_Linux + 60) +#define __NR_uname (__NR_Linux + 61) +#define __NR_semget (__NR_Linux + 62) +#define __NR_semop (__NR_Linux + 63) +#define __NR_semctl (__NR_Linux + 64) +#define __NR_shmdt (__NR_Linux + 65) +#define __NR_msgget (__NR_Linux + 66) +#define __NR_msgsnd (__NR_Linux + 67) +#define __NR_msgrcv (__NR_Linux + 68) +#define __NR_msgctl (__NR_Linux + 69) +#define __NR_fcntl (__NR_Linux + 70) +#define __NR_flock (__NR_Linux + 71) +#define __NR_fsync (__NR_Linux + 72) +#define __NR_fdatasync (__NR_Linux + 73) +#define __NR_truncate (__NR_Linux + 74) +#define __NR_ftruncate (__NR_Linux + 75) +#define __NR_getdents (__NR_Linux + 76) +#define __NR_getcwd (__NR_Linux + 77) +#define __NR_chdir (__NR_Linux + 78) +#define __NR_fchdir (__NR_Linux + 79) +#define __NR_rename (__NR_Linux + 80) +#define __NR_mkdir (__NR_Linux + 81) +#define __NR_rmdir (__NR_Linux + 82) +#define __NR_creat (__NR_Linux + 83) +#define __NR_link (__NR_Linux + 84) +#define __NR_unlink (__NR_Linux + 85) +#define __NR_symlink (__NR_Linux + 86) +#define __NR_readlink (__NR_Linux + 87) +#define __NR_chmod (__NR_Linux + 88) +#define __NR_fchmod (__NR_Linux + 89) +#define __NR_chown (__NR_Linux + 90) +#define __NR_fchown (__NR_Linux + 91) +#define __NR_lchown (__NR_Linux + 92) +#define __NR_umask (__NR_Linux + 93) +#define __NR_gettimeofday (__NR_Linux + 94) +#define __NR_getrlimit (__NR_Linux + 95) +#define __NR_getrusage (__NR_Linux + 96) +#define __NR_sysinfo (__NR_Linux + 97) +#define __NR_times (__NR_Linux + 98) +#define __NR_ptrace (__NR_Linux + 99) +#define __NR_getuid (__NR_Linux + 100) +#define __NR_syslog (__NR_Linux + 101) +#define __NR_getgid (__NR_Linux + 102) +#define __NR_setuid (__NR_Linux + 103) +#define __NR_setgid (__NR_Linux + 104) +#define __NR_geteuid (__NR_Linux + 105) +#define __NR_getegid (__NR_Linux + 106) +#define __NR_setpgid (__NR_Linux + 107) +#define __NR_getppid (__NR_Linux + 108) +#define __NR_getpgrp (__NR_Linux + 109) +#define __NR_setsid (__NR_Linux + 110) +#define __NR_setreuid (__NR_Linux + 111) +#define __NR_setregid (__NR_Linux + 112) +#define __NR_getgroups (__NR_Linux + 113) +#define __NR_setgroups (__NR_Linux + 114) +#define __NR_setresuid (__NR_Linux + 115) +#define __NR_getresuid (__NR_Linux + 116) +#define __NR_setresgid (__NR_Linux + 117) +#define __NR_getresgid (__NR_Linux + 118) +#define __NR_getpgid (__NR_Linux + 119) +#define __NR_setfsuid (__NR_Linux + 120) +#define __NR_setfsgid (__NR_Linux + 121) +#define __NR_getsid (__NR_Linux + 122) +#define __NR_capget (__NR_Linux + 123) +#define __NR_capset (__NR_Linux + 124) +#define __NR_rt_sigpending (__NR_Linux + 125) +#define __NR_rt_sigtimedwait (__NR_Linux + 126) +#define __NR_rt_sigqueueinfo (__NR_Linux + 127) +#define __NR_rt_sigsuspend (__NR_Linux + 128) +#define __NR_sigaltstack (__NR_Linux + 129) +#define __NR_utime (__NR_Linux + 130) +#define __NR_mknod (__NR_Linux + 131) +#define __NR_personality (__NR_Linux + 132) +#define __NR_ustat (__NR_Linux + 133) +#define __NR_statfs (__NR_Linux + 134) +#define __NR_fstatfs (__NR_Linux + 135) +#define __NR_sysfs (__NR_Linux + 136) +#define __NR_getpriority (__NR_Linux + 137) +#define __NR_setpriority (__NR_Linux + 138) +#define __NR_sched_setparam (__NR_Linux + 139) +#define __NR_sched_getparam (__NR_Linux + 140) +#define __NR_sched_setscheduler (__NR_Linux + 141) +#define __NR_sched_getscheduler (__NR_Linux + 142) +#define __NR_sched_get_priority_max (__NR_Linux + 143) +#define __NR_sched_get_priority_min (__NR_Linux + 144) +#define __NR_sched_rr_get_interval (__NR_Linux + 145) +#define __NR_mlock (__NR_Linux + 146) +#define __NR_munlock (__NR_Linux + 147) +#define __NR_mlockall (__NR_Linux + 148) +#define __NR_munlockall (__NR_Linux + 149) +#define __NR_vhangup (__NR_Linux + 150) +#define __NR_pivot_root (__NR_Linux + 151) +#define __NR__sysctl (__NR_Linux + 152) +#define __NR_prctl (__NR_Linux + 153) +#define __NR_adjtimex (__NR_Linux + 154) +#define __NR_setrlimit (__NR_Linux + 155) +#define __NR_chroot (__NR_Linux + 156) +#define __NR_sync (__NR_Linux + 157) +#define __NR_acct (__NR_Linux + 158) +#define __NR_settimeofday (__NR_Linux + 159) +#define __NR_mount (__NR_Linux + 160) +#define __NR_umount2 (__NR_Linux + 161) +#define __NR_swapon (__NR_Linux + 162) +#define __NR_swapoff (__NR_Linux + 163) +#define __NR_reboot (__NR_Linux + 164) +#define __NR_sethostname (__NR_Linux + 165) +#define __NR_setdomainname (__NR_Linux + 166) +#define __NR_create_module (__NR_Linux + 167) +#define __NR_init_module (__NR_Linux + 168) +#define __NR_delete_module (__NR_Linux + 169) +#define __NR_get_kernel_syms (__NR_Linux + 170) +#define __NR_query_module (__NR_Linux + 171) +#define __NR_quotactl (__NR_Linux + 172) +#define __NR_nfsservctl (__NR_Linux + 173) +#define __NR_getpmsg (__NR_Linux + 174) +#define __NR_putpmsg (__NR_Linux + 175) +#define __NR_afs_syscall (__NR_Linux + 176) +#define __NR_reserved177 (__NR_Linux + 177) +#define __NR_gettid (__NR_Linux + 178) +#define __NR_readahead (__NR_Linux + 179) +#define __NR_setxattr (__NR_Linux + 180) +#define __NR_lsetxattr (__NR_Linux + 181) +#define __NR_fsetxattr (__NR_Linux + 182) +#define __NR_getxattr (__NR_Linux + 183) +#define __NR_lgetxattr (__NR_Linux + 184) +#define __NR_fgetxattr (__NR_Linux + 185) +#define __NR_listxattr (__NR_Linux + 186) +#define __NR_llistxattr (__NR_Linux + 187) +#define __NR_flistxattr (__NR_Linux + 188) +#define __NR_removexattr (__NR_Linux + 189) +#define __NR_lremovexattr (__NR_Linux + 190) +#define __NR_fremovexattr (__NR_Linux + 191) +#define __NR_tkill (__NR_Linux + 192) +#define __NR_reserved193 (__NR_Linux + 193) +#define __NR_futex (__NR_Linux + 194) +#define __NR_sched_setaffinity (__NR_Linux + 195) +#define __NR_sched_getaffinity (__NR_Linux + 196) +#define __NR_cacheflush (__NR_Linux + 197) +#define __NR_cachectl (__NR_Linux + 198) +#define __NR_sysmips (__NR_Linux + 199) +#define __NR_io_setup (__NR_Linux + 200) +#define __NR_io_destroy (__NR_Linux + 201) +#define __NR_io_getevents (__NR_Linux + 202) +#define __NR_io_submit (__NR_Linux + 203) +#define __NR_io_cancel (__NR_Linux + 204) +#define __NR_exit_group (__NR_Linux + 205) +#define __NR_lookup_dcookie (__NR_Linux + 206) +#define __NR_epoll_create (__NR_Linux + 207) +#define __NR_epoll_ctl (__NR_Linux + 208) +#define __NR_epoll_wait (__NR_Linux + 209) +#define __NR_remap_file_pages (__NR_Linux + 210) +#define __NR_rt_sigreturn (__NR_Linux + 211) +#define __NR_set_tid_address (__NR_Linux + 212) +#define __NR_restart_syscall (__NR_Linux + 213) +#define __NR_semtimedop (__NR_Linux + 214) +#define __NR_fadvise64 (__NR_Linux + 215) +#define __NR_timer_create (__NR_Linux + 216) +#define __NR_timer_settime (__NR_Linux + 217) +#define __NR_timer_gettime (__NR_Linux + 218) +#define __NR_timer_getoverrun (__NR_Linux + 219) +#define __NR_timer_delete (__NR_Linux + 220) +#define __NR_clock_settime (__NR_Linux + 221) +#define __NR_clock_gettime (__NR_Linux + 222) +#define __NR_clock_getres (__NR_Linux + 223) +#define __NR_clock_nanosleep (__NR_Linux + 224) +#define __NR_tgkill (__NR_Linux + 225) +#define __NR_utimes (__NR_Linux + 226) +#define __NR_mbind (__NR_Linux + 227) +#define __NR_get_mempolicy (__NR_Linux + 228) +#define __NR_set_mempolicy (__NR_Linux + 229) +#define __NR_mq_open (__NR_Linux + 230) +#define __NR_mq_unlink (__NR_Linux + 231) +#define __NR_mq_timedsend (__NR_Linux + 232) +#define __NR_mq_timedreceive (__NR_Linux + 233) +#define __NR_mq_notify (__NR_Linux + 234) +#define __NR_mq_getsetattr (__NR_Linux + 235) +#define __NR_vserver (__NR_Linux + 236) +#define __NR_waitid (__NR_Linux + 237) +/* #define __NR_sys_setaltroot (__NR_Linux + 238) */ +#define __NR_add_key (__NR_Linux + 239) +#define __NR_request_key (__NR_Linux + 240) +#define __NR_keyctl (__NR_Linux + 241) +#define __NR_set_thread_area (__NR_Linux + 242) +#define __NR_inotify_init (__NR_Linux + 243) +#define __NR_inotify_add_watch (__NR_Linux + 244) +#define __NR_inotify_rm_watch (__NR_Linux + 245) +#define __NR_migrate_pages (__NR_Linux + 246) +#define __NR_openat (__NR_Linux + 247) +#define __NR_mkdirat (__NR_Linux + 248) +#define __NR_mknodat (__NR_Linux + 249) +#define __NR_fchownat (__NR_Linux + 250) +#define __NR_futimesat (__NR_Linux + 251) +#define __NR_newfstatat (__NR_Linux + 252) +#define __NR_unlinkat (__NR_Linux + 253) +#define __NR_renameat (__NR_Linux + 254) +#define __NR_linkat (__NR_Linux + 255) +#define __NR_symlinkat (__NR_Linux + 256) +#define __NR_readlinkat (__NR_Linux + 257) +#define __NR_fchmodat (__NR_Linux + 258) +#define __NR_faccessat (__NR_Linux + 259) +#define __NR_pselect6 (__NR_Linux + 260) +#define __NR_ppoll (__NR_Linux + 261) +#define __NR_unshare (__NR_Linux + 262) +#define __NR_splice (__NR_Linux + 263) +#define __NR_sync_file_range (__NR_Linux + 264) +#define __NR_tee (__NR_Linux + 265) +#define __NR_vmsplice (__NR_Linux + 266) +#define __NR_move_pages (__NR_Linux + 267) +#define __NR_set_robust_list (__NR_Linux + 268) +#define __NR_get_robust_list (__NR_Linux + 269) +#define __NR_kexec_load (__NR_Linux + 270) +#define __NR_getcpu (__NR_Linux + 271) +#define __NR_epoll_pwait (__NR_Linux + 272) +#define __NR_ioprio_set (__NR_Linux + 273) +#define __NR_ioprio_get (__NR_Linux + 274) +#define __NR_utimensat (__NR_Linux + 275) +#define __NR_signalfd (__NR_Linux + 276) +#define __NR_timerfd (__NR_Linux + 277) +#define __NR_eventfd (__NR_Linux + 278) +#define __NR_fallocate (__NR_Linux + 279) +#define __NR_timerfd_create (__NR_Linux + 280) +#define __NR_timerfd_gettime (__NR_Linux + 281) +#define __NR_timerfd_settime (__NR_Linux + 282) +#define __NR_signalfd4 (__NR_Linux + 283) +#define __NR_eventfd2 (__NR_Linux + 284) +#define __NR_epoll_create1 (__NR_Linux + 285) +#define __NR_dup3 (__NR_Linux + 286) +#define __NR_pipe2 (__NR_Linux + 287) +#define __NR_inotify_init1 (__NR_Linux + 288) +#define __NR_preadv (__NR_Linux + 289) +#define __NR_pwritev (__NR_Linux + 290) +#define __NR_rt_tgsigqueueinfo (__NR_Linux + 291) +#define __NR_perf_event_open (__NR_Linux + 292) +#define __NR_accept4 (__NR_Linux + 293) +#define __NR_recvmmsg (__NR_Linux + 294) +#define __NR_fanotify_init (__NR_Linux + 295) +#define __NR_fanotify_mark (__NR_Linux + 296) +#define __NR_prlimit64 (__NR_Linux + 297) +#define __NR_name_to_handle_at (__NR_Linux + 298) +#define __NR_open_by_handle_at (__NR_Linux + 299) +#define __NR_clock_adjtime (__NR_Linux + 300) +#define __NR_syncfs (__NR_Linux + 301) +#define __NR_sendmmsg (__NR_Linux + 302) +#define __NR_setns (__NR_Linux + 303) +#define __NR_process_vm_readv (__NR_Linux + 304) +#define __NR_process_vm_writev (__NR_Linux + 305) +#define __NR_kcmp (__NR_Linux + 306) +#define __NR_finit_module (__NR_Linux + 307) +#define __NR_getdents64 (__NR_Linux + 308) +#define __NR_sched_setattr (__NR_Linux + 309) +#define __NR_sched_getattr (__NR_Linux + 310) +#define __NR_renameat2 (__NR_Linux + 311) +#define __NR_seccomp (__NR_Linux + 312) +#define __NR_getrandom (__NR_Linux + 313) +#define __NR_memfd_create (__NR_Linux + 314) +#define __NR_bpf (__NR_Linux + 315) +#define __NR_execveat (__NR_Linux + 316) + +/* Repeated with SYS_ prefix */ +#define SYS_Linux 5000 +#define SYS_read (SYS_Linux + 0) +#define SYS_write (SYS_Linux + 1) +#define SYS_open (SYS_Linux + 2) +#define SYS_close (SYS_Linux + 3) +#define SYS_stat (SYS_Linux + 4) +#define SYS_fstat (SYS_Linux + 5) +#define SYS_lstat (SYS_Linux + 6) +#define SYS_poll (SYS_Linux + 7) +#define SYS_lseek (SYS_Linux + 8) +#define SYS_mmap (SYS_Linux + 9) +#define SYS_mprotect (SYS_Linux + 10) +#define SYS_munmap (SYS_Linux + 11) +#define SYS_brk (SYS_Linux + 12) +#define SYS_rt_sigaction (SYS_Linux + 13) +#define SYS_rt_sigprocmask (SYS_Linux + 14) +#define SYS_ioctl (SYS_Linux + 15) +#define SYS_pread64 (SYS_Linux + 16) +#define SYS_pwrite64 (SYS_Linux + 17) +#define SYS_readv (SYS_Linux + 18) +#define SYS_writev (SYS_Linux + 19) +#define SYS_access (SYS_Linux + 20) +#define SYS_pipe (SYS_Linux + 21) +#define SYS__newselect (SYS_Linux + 22) +#define SYS_sched_yield (SYS_Linux + 23) +#define SYS_mremap (SYS_Linux + 24) +#define SYS_msync (SYS_Linux + 25) +#define SYS_mincore (SYS_Linux + 26) +#define SYS_madvise (SYS_Linux + 27) +#define SYS_shmget (SYS_Linux + 28) +#define SYS_shmat (SYS_Linux + 29) +#define SYS_shmctl (SYS_Linux + 30) +#define SYS_dup (SYS_Linux + 31) +#define SYS_dup2 (SYS_Linux + 32) +#define SYS_pause (SYS_Linux + 33) +#define SYS_nanosleep (SYS_Linux + 34) +#define SYS_getitimer (SYS_Linux + 35) +#define SYS_setitimer (SYS_Linux + 36) +#define SYS_alarm (SYS_Linux + 37) +#define SYS_getpid (SYS_Linux + 38) +#define SYS_sendfile (SYS_Linux + 39) +#define SYS_socket (SYS_Linux + 40) +#define SYS_connect (SYS_Linux + 41) +#define SYS_accept (SYS_Linux + 42) +#define SYS_sendto (SYS_Linux + 43) +#define SYS_recvfrom (SYS_Linux + 44) +#define SYS_sendmsg (SYS_Linux + 45) +#define SYS_recvmsg (SYS_Linux + 46) +#define SYS_shutdown (SYS_Linux + 47) +#define SYS_bind (SYS_Linux + 48) +#define SYS_listen (SYS_Linux + 49) +#define SYS_getsockname (SYS_Linux + 50) +#define SYS_getpeername (SYS_Linux + 51) +#define SYS_socketpair (SYS_Linux + 52) +#define SYS_setsockopt (SYS_Linux + 53) +#define SYS_getsockopt (SYS_Linux + 54) +#define SYS_clone (SYS_Linux + 55) +#define SYS_fork (SYS_Linux + 56) +#define SYS_execve (SYS_Linux + 57) +#define SYS_exit (SYS_Linux + 58) +#define SYS_wait4 (SYS_Linux + 59) +#define SYS_kill (SYS_Linux + 60) +#define SYS_uname (SYS_Linux + 61) +#define SYS_semget (SYS_Linux + 62) +#define SYS_semop (SYS_Linux + 63) +#define SYS_semctl (SYS_Linux + 64) +#define SYS_shmdt (SYS_Linux + 65) +#define SYS_msgget (SYS_Linux + 66) +#define SYS_msgsnd (SYS_Linux + 67) +#define SYS_msgrcv (SYS_Linux + 68) +#define SYS_msgctl (SYS_Linux + 69) +#define SYS_fcntl (SYS_Linux + 70) +#define SYS_flock (SYS_Linux + 71) +#define SYS_fsync (SYS_Linux + 72) +#define SYS_fdatasync (SYS_Linux + 73) +#define SYS_truncate (SYS_Linux + 74) +#define SYS_ftruncate (SYS_Linux + 75) +#define SYS_getdents (SYS_Linux + 76) +#define SYS_getcwd (SYS_Linux + 77) +#define SYS_chdir (SYS_Linux + 78) +#define SYS_fchdir (SYS_Linux + 79) +#define SYS_rename (SYS_Linux + 80) +#define SYS_mkdir (SYS_Linux + 81) +#define SYS_rmdir (SYS_Linux + 82) +#define SYS_creat (SYS_Linux + 83) +#define SYS_link (SYS_Linux + 84) +#define SYS_unlink (SYS_Linux + 85) +#define SYS_symlink (SYS_Linux + 86) +#define SYS_readlink (SYS_Linux + 87) +#define SYS_chmod (SYS_Linux + 88) +#define SYS_fchmod (SYS_Linux + 89) +#define SYS_chown (SYS_Linux + 90) +#define SYS_fchown (SYS_Linux + 91) +#define SYS_lchown (SYS_Linux + 92) +#define SYS_umask (SYS_Linux + 93) +#define SYS_gettimeofday (SYS_Linux + 94) +#define SYS_getrlimit (SYS_Linux + 95) +#define SYS_getrusage (SYS_Linux + 96) +#define SYS_sysinfo (SYS_Linux + 97) +#define SYS_times (SYS_Linux + 98) +#define SYS_ptrace (SYS_Linux + 99) +#define SYS_getuid (SYS_Linux + 100) +#define SYS_syslog (SYS_Linux + 101) +#define SYS_getgid (SYS_Linux + 102) +#define SYS_setuid (SYS_Linux + 103) +#define SYS_setgid (SYS_Linux + 104) +#define SYS_geteuid (SYS_Linux + 105) +#define SYS_getegid (SYS_Linux + 106) +#define SYS_setpgid (SYS_Linux + 107) +#define SYS_getppid (SYS_Linux + 108) +#define SYS_getpgrp (SYS_Linux + 109) +#define SYS_setsid (SYS_Linux + 110) +#define SYS_setreuid (SYS_Linux + 111) +#define SYS_setregid (SYS_Linux + 112) +#define SYS_getgroups (SYS_Linux + 113) +#define SYS_setgroups (SYS_Linux + 114) +#define SYS_setresuid (SYS_Linux + 115) +#define SYS_getresuid (SYS_Linux + 116) +#define SYS_setresgid (SYS_Linux + 117) +#define SYS_getresgid (SYS_Linux + 118) +#define SYS_getpgid (SYS_Linux + 119) +#define SYS_setfsuid (SYS_Linux + 120) +#define SYS_setfsgid (SYS_Linux + 121) +#define SYS_getsid (SYS_Linux + 122) +#define SYS_capget (SYS_Linux + 123) +#define SYS_capset (SYS_Linux + 124) +#define SYS_rt_sigpending (SYS_Linux + 125) +#define SYS_rt_sigtimedwait (SYS_Linux + 126) +#define SYS_rt_sigqueueinfo (SYS_Linux + 127) +#define SYS_rt_sigsuspend (SYS_Linux + 128) +#define SYS_sigaltstack (SYS_Linux + 129) +#define SYS_utime (SYS_Linux + 130) +#define SYS_mknod (SYS_Linux + 131) +#define SYS_personality (SYS_Linux + 132) +#define SYS_ustat (SYS_Linux + 133) +#define SYS_statfs (SYS_Linux + 134) +#define SYS_fstatfs (SYS_Linux + 135) +#define SYS_sysfs (SYS_Linux + 136) +#define SYS_getpriority (SYS_Linux + 137) +#define SYS_setpriority (SYS_Linux + 138) +#define SYS_sched_setparam (SYS_Linux + 139) +#define SYS_sched_getparam (SYS_Linux + 140) +#define SYS_sched_setscheduler (SYS_Linux + 141) +#define SYS_sched_getscheduler (SYS_Linux + 142) +#define SYS_sched_get_priority_max (SYS_Linux + 143) +#define SYS_sched_get_priority_min (SYS_Linux + 144) +#define SYS_sched_rr_get_interval (SYS_Linux + 145) +#define SYS_mlock (SYS_Linux + 146) +#define SYS_munlock (SYS_Linux + 147) +#define SYS_mlockall (SYS_Linux + 148) +#define SYS_munlockall (SYS_Linux + 149) +#define SYS_vhangup (SYS_Linux + 150) +#define SYS_pivot_root (SYS_Linux + 151) +#define SYS__sysctl (SYS_Linux + 152) +#define SYS_prctl (SYS_Linux + 153) +#define SYS_adjtimex (SYS_Linux + 154) +#define SYS_setrlimit (SYS_Linux + 155) +#define SYS_chroot (SYS_Linux + 156) +#define SYS_sync (SYS_Linux + 157) +#define SYS_acct (SYS_Linux + 158) +#define SYS_settimeofday (SYS_Linux + 159) +#define SYS_mount (SYS_Linux + 160) +#define SYS_umount2 (SYS_Linux + 161) +#define SYS_swapon (SYS_Linux + 162) +#define SYS_swapoff (SYS_Linux + 163) +#define SYS_reboot (SYS_Linux + 164) +#define SYS_sethostname (SYS_Linux + 165) +#define SYS_setdomainname (SYS_Linux + 166) +#define SYS_create_module (SYS_Linux + 167) +#define SYS_init_module (SYS_Linux + 168) +#define SYS_delete_module (SYS_Linux + 169) +#define SYS_get_kernel_syms (SYS_Linux + 170) +#define SYS_query_module (SYS_Linux + 171) +#define SYS_quotactl (SYS_Linux + 172) +#define SYS_nfsservctl (SYS_Linux + 173) +#define SYS_getpmsg (SYS_Linux + 174) +#define SYS_putpmsg (SYS_Linux + 175) +#define SYS_afs_syscall (SYS_Linux + 176) +#define SYS_reserved177 (SYS_Linux + 177) +#define SYS_gettid (SYS_Linux + 178) +#define SYS_readahead (SYS_Linux + 179) +#define SYS_setxattr (SYS_Linux + 180) +#define SYS_lsetxattr (SYS_Linux + 181) +#define SYS_fsetxattr (SYS_Linux + 182) +#define SYS_getxattr (SYS_Linux + 183) +#define SYS_lgetxattr (SYS_Linux + 184) +#define SYS_fgetxattr (SYS_Linux + 185) +#define SYS_listxattr (SYS_Linux + 186) +#define SYS_llistxattr (SYS_Linux + 187) +#define SYS_flistxattr (SYS_Linux + 188) +#define SYS_removexattr (SYS_Linux + 189) +#define SYS_lremovexattr (SYS_Linux + 190) +#define SYS_fremovexattr (SYS_Linux + 191) +#define SYS_tkill (SYS_Linux + 192) +#define SYS_reserved193 (SYS_Linux + 193) +#define SYS_futex (SYS_Linux + 194) +#define SYS_sched_setaffinity (SYS_Linux + 195) +#define SYS_sched_getaffinity (SYS_Linux + 196) +#define SYS_cacheflush (SYS_Linux + 197) +#define SYS_cachectl (SYS_Linux + 198) +#define SYS_sysmips (SYS_Linux + 199) +#define SYS_io_setup (SYS_Linux + 200) +#define SYS_io_destroy (SYS_Linux + 201) +#define SYS_io_getevents (SYS_Linux + 202) +#define SYS_io_submit (SYS_Linux + 203) +#define SYS_io_cancel (SYS_Linux + 204) +#define SYS_exit_group (SYS_Linux + 205) +#define SYS_lookup_dcookie (SYS_Linux + 206) +#define SYS_epoll_create (SYS_Linux + 207) +#define SYS_epoll_ctl (SYS_Linux + 208) +#define SYS_epoll_wait (SYS_Linux + 209) +#define SYS_remap_file_pages (SYS_Linux + 210) +#define SYS_rt_sigreturn (SYS_Linux + 211) +#define SYS_set_tid_address (SYS_Linux + 212) +#define SYS_restart_syscall (SYS_Linux + 213) +#define SYS_semtimedop (SYS_Linux + 214) +#define SYS_fadvise64 (SYS_Linux + 215) +#define SYS_timer_create (SYS_Linux + 216) +#define SYS_timer_settime (SYS_Linux + 217) +#define SYS_timer_gettime (SYS_Linux + 218) +#define SYS_timer_getoverrun (SYS_Linux + 219) +#define SYS_timer_delete (SYS_Linux + 220) +#define SYS_clock_settime (SYS_Linux + 221) +#define SYS_clock_gettime (SYS_Linux + 222) +#define SYS_clock_getres (SYS_Linux + 223) +#define SYS_clock_nanosleep (SYS_Linux + 224) +#define SYS_tgkill (SYS_Linux + 225) +#define SYS_utimes (SYS_Linux + 226) +#define SYS_mbind (SYS_Linux + 227) +#define SYS_get_mempolicy (SYS_Linux + 228) +#define SYS_set_mempolicy (SYS_Linux + 229) +#define SYS_mq_open (SYS_Linux + 230) +#define SYS_mq_unlink (SYS_Linux + 231) +#define SYS_mq_timedsend (SYS_Linux + 232) +#define SYS_mq_timedreceive (SYS_Linux + 233) +#define SYS_mq_notify (SYS_Linux + 234) +#define SYS_mq_getsetattr (SYS_Linux + 235) +#define SYS_vserver (SYS_Linux + 236) +#define SYS_waitid (SYS_Linux + 237) +/* #define SYS_sys_setaltroot (SYS_Linux + 238) */ +#define SYS_add_key (SYS_Linux + 239) +#define SYS_request_key (SYS_Linux + 240) +#define SYS_keyctl (SYS_Linux + 241) +#define SYS_set_thread_area (SYS_Linux + 242) +#define SYS_inotify_init (SYS_Linux + 243) +#define SYS_inotify_add_watch (SYS_Linux + 244) +#define SYS_inotify_rm_watch (SYS_Linux + 245) +#define SYS_migrate_pages (SYS_Linux + 246) +#define SYS_openat (SYS_Linux + 247) +#define SYS_mkdirat (SYS_Linux + 248) +#define SYS_mknodat (SYS_Linux + 249) +#define SYS_fchownat (SYS_Linux + 250) +#define SYS_futimesat (SYS_Linux + 251) +#define SYS_newfstatat (SYS_Linux + 252) +#define SYS_unlinkat (SYS_Linux + 253) +#define SYS_renameat (SYS_Linux + 254) +#define SYS_linkat (SYS_Linux + 255) +#define SYS_symlinkat (SYS_Linux + 256) +#define SYS_readlinkat (SYS_Linux + 257) +#define SYS_fchmodat (SYS_Linux + 258) +#define SYS_faccessat (SYS_Linux + 259) +#define SYS_pselect6 (SYS_Linux + 260) +#define SYS_ppoll (SYS_Linux + 261) +#define SYS_unshare (SYS_Linux + 262) +#define SYS_splice (SYS_Linux + 263) +#define SYS_sync_file_range (SYS_Linux + 264) +#define SYS_tee (SYS_Linux + 265) +#define SYS_vmsplice (SYS_Linux + 266) +#define SYS_move_pages (SYS_Linux + 267) +#define SYS_set_robust_list (SYS_Linux + 268) +#define SYS_get_robust_list (SYS_Linux + 269) +#define SYS_kexec_load (SYS_Linux + 270) +#define SYS_getcpu (SYS_Linux + 271) +#define SYS_epoll_pwait (SYS_Linux + 272) +#define SYS_ioprio_set (SYS_Linux + 273) +#define SYS_ioprio_get (SYS_Linux + 274) +#define SYS_utimensat (SYS_Linux + 275) +#define SYS_signalfd (SYS_Linux + 276) +#define SYS_timerfd (SYS_Linux + 277) +#define SYS_eventfd (SYS_Linux + 278) +#define SYS_fallocate (SYS_Linux + 279) +#define SYS_timerfd_create (SYS_Linux + 280) +#define SYS_timerfd_gettime (SYS_Linux + 281) +#define SYS_timerfd_settime (SYS_Linux + 282) +#define SYS_signalfd4 (SYS_Linux + 283) +#define SYS_eventfd2 (SYS_Linux + 284) +#define SYS_epoll_create1 (SYS_Linux + 285) +#define SYS_dup3 (SYS_Linux + 286) +#define SYS_pipe2 (SYS_Linux + 287) +#define SYS_inotify_init1 (SYS_Linux + 288) +#define SYS_preadv (SYS_Linux + 289) +#define SYS_pwritev (SYS_Linux + 290) +#define SYS_rt_tgsigqueueinfo (SYS_Linux + 291) +#define SYS_perf_event_open (SYS_Linux + 292) +#define SYS_accept4 (SYS_Linux + 293) +#define SYS_recvmmsg (SYS_Linux + 294) +#define SYS_fanotify_init (SYS_Linux + 295) +#define SYS_fanotify_mark (SYS_Linux + 296) +#define SYS_prlimit64 (SYS_Linux + 297) +#define SYS_name_to_handle_at (SYS_Linux + 298) +#define SYS_open_by_handle_at (SYS_Linux + 299) +#define SYS_clock_adjtime (SYS_Linux + 300) +#define SYS_syncfs (SYS_Linux + 301) +#define SYS_sendmmsg (SYS_Linux + 302) +#define SYS_setns (SYS_Linux + 303) +#define SYS_process_vm_readv (SYS_Linux + 304) +#define SYS_process_vm_writev (SYS_Linux + 305) +#define SYS_kcmp (SYS_Linux + 306) +#define SYS_finit_module (SYS_Linux + 307) +#define SYS_getdents64 (SYS_Linux + 308) +#define SYS_sched_setattr (SYS_Linux + 309) +#define SYS_sched_getattr (SYS_Linux + 310) +#define SYS_renameat2 (SYS_Linux + 311) +#define SYS_seccomp (SYS_Linux + 312) +#define SYS_getrandom (SYS_Linux + 313) +#define SYS_memfd_create (SYS_Linux + 314) +#define SYS_bpf (SYS_Linux + 315) +#define SYS_execveat (SYS_Linux + 316) + + + --- /dev/null +++ b/arch/mips64/bits/termios.h @@ -0,0 +1,167 @@ +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 --- /dev/null +++ b/arch/mips64/bits/user.h @@ -0,0 +1,13 @@ +struct user { + unsigned long regs[38+64]; + 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]; --- /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" +); --- /dev/null +++ b/arch/mips64/ksigaction.h @@ -0,0 +1,11 @@ +struct k_sigaction { + unsigned flags; + void (*handler)(int); + unsigned long mask[2]; /*mask [128/(sizeof(long)*8)] + /* The following field is past the end of the structure the + * kernel will read or write, and exists only to avoid having + * mips-specific preprocessor conditionals in sigaction.c. */ + void (*restorer)(); +}; + +void __restore(), __restore_rt(); --- /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 --- /dev/null +++ b/arch/mips64/reloc.h @@ -0,0 +1,52 @@ +#ifndef __RELOC_H__ +#define __RELOC_H__ + +#include + +#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 /* (R_MIPS_64 << 8) | R_MIPS_REL32 */ +#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 + +#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 --- /dev/null +++ b/arch/mips64/syscall_arch.h @@ -0,0 +1,213 @@ +#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 +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) +{ + extern void *memset(void *s, int c, size_t n); + + st->st_dev = kst->st_dev; + memset (&st->st_pad1, 0, sizeof (st->st_pad1)); + 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; + memset (&st->st_pad2, 0, sizeof (st->st_pad2)); + st->st_size = kst->st_size; + st->st_pad3 = 0; + 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; + memset (&st->st_pad5, 0, sizeof (st->st_pad5)); + return; +} + +#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 = {0,}; + 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) +{ + register long r4 __asm__("$4") = a; + register long r5 __asm__("$5") = b; + register long r6 __asm__("$6") = c; + register long r7 __asm__("$7"); + register long r2 __asm__("$2"); + __asm__ __volatile__ ( + "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"); + return r7 ? -r2 : r2; +} + +static inline long __syscall4(long n, long a, long b, long c, long d) +{ + register long r4 __asm__("$4") = a; + register long r5 __asm__("$5") = b; + register long r6 __asm__("$6") = c; + register long r7 __asm__("$7") = d; + register long r2 __asm__("$2"); + __asm__ __volatile__ ( + "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"); + return r7 ? -r2 : r2; +} + +#else + +static inline long __syscall0(long n) +{ + return (__syscall)(n); +} + +static inline long __syscall1(long n, long a) +{ + return (__syscall)(n, a); +} + +static inline long __syscall2(long n, long a, long b) +{ + long r2; + long old_b = b; + struct kernel_stat kst = {0,}; + + 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, old_b); + + return r2; +} + +static inline long __syscall3(long n, long a, long b, long c) +{ + long r2 = (__syscall)(n, a, b, c); + if (r2 > -4096UL) return r2; + return r2; +} + +static inline long __syscall4(long n, long a, long b, long c, long d) +{ + long r2 = (__syscall)(n, a, b, c, d); + if (r2 > -4096UL) return r2; + return r2; +} + +#endif + +static inline long __syscall5(long n, long a, long b, long c, long d, long e) +{ + long r2 = (__syscall)(n, a, b, c, d, e); + if (r2 > -4096UL) return r2; + return r2; +} + +static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) +{ + long r2 = (__syscall)(n, a, b, c, d, e, f); + if (r2 > -4096UL) return r2; + return r2; +} + +#define VDSO_USEFUL +#define VDSO_CGT_SYM "__vdso_clock_gettime" +#define VDSO_CGT_VER "LINUX_2.6" --- a/configure +++ b/configure @@ -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 ;; @@ -619,6 +620,11 @@ if test "$ARCH" = "powerpc" ; then trycppif _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 --- /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) --- /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 --- a/ldso/dynlink.c +++ b/ldso/dynlink.c @@ -1134,7 +1134,7 @@ static void do_mips_relocs(struct dso *p Sym *sym = p->syms + j; rel[0] = (unsigned char *)got - base; for (i-=j; i; i--, sym++, rel[0]+=sizeof(size_t)) { - rel[1] = sym-p->syms << 8 | R_MIPS_JUMP_SLOT; + rel[1] = R_INFO(sym-p->syms, R_MIPS_JUMP_SLOT); do_relocs(p, rel, sizeof rel, 2); } } --- /dev/null +++ b/src/fenv/mips64/fenv-sf.c @@ -0,0 +1,3 @@ +#ifdef __mips_soft_float +#include "../fenv.c" +#endif --- /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 --- a/src/internal/dynlink.h +++ b/src/internal/dynlink.h @@ -11,12 +11,25 @@ typedef Elf32_Phdr Phdr; typedef Elf32_Sym Sym; #define R_TYPE(x) ((x)&255) #define R_SYM(x) ((x)>>8) +#define R_INFO ELF32_R_INFO #else typedef Elf64_Ehdr Ehdr; typedef Elf64_Phdr Phdr; typedef Elf64_Sym Sym; #define R_TYPE(x) ((x)&0x7fffffff) #define R_SYM(x) ((x)>>32) +#define R_INFO ELF64_R_INFO +#endif + +#ifdef __mips64 +#define _GNU_SOURCE +#include +#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)) #endif /* These enum constants provide unmatchable default values for --- /dev/null +++ b/src/internal/mips64/syscall.s @@ -0,0 +1,20 @@ +.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 --- /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 --- /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 # if return value is 0, make it as 1 else no changes made in $2 + 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 --- /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) # $gp is callee save register + sd $16, 24($4) # saving gp callee save registers + 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) # saving FP callee save registers + 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 # making return value as zero --- /dev/null +++ b/src/signal/mips64/restore.s @@ -0,0 +1,11 @@ +# to return from signal handler and cleanup stack frame +.set noreorder + +.global __restore_rt +.global __restore +.type __restore_rt,@function +.type __restore,@function +__restore_rt: +__restore: + li $2, 5211 # __NR_rt_sigreturn,n64 and n32 have rt_sigreturn + syscall --- /dev/null +++ b/src/signal/mips64/sigsetjmp.s @@ -0,0 +1,40 @@ + .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, 168($4) + sd $16, 176($4) + + # save base of got so that we can use it later onec we return from 'longjmp' + sd $3, 184($4) + ld $25, %got_disp(setjmp)($3) + jalr $25 + # Move pointer-to-sigjmp_buf (i.e. $4) to $16 and save it at '24($4)' in 'setjmp' + # We have already saved $16 of sigsetjmp at 168($4). + move $16, $4 + + move $5, $2 # Return from 'setjmp' or 'longjmp' + move $4, $16 # Restore the pointer-to-sigjmp_buf + ld $ra, 168($4) # Restore ra of sigsetjmp + ld $16, 176($4) # Restore $16 of sigsetjmp + ld $3, 184($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 --- /dev/null +++ b/src/thread/mips64/__unmapself.s @@ -0,0 +1,10 @@ +.set noreorder +.global __unmapself +.type __unmapself, @function +__unmapself: + li $2, 5011 + syscall + li $4, 0 + li $2, 5058 + syscall + --- /dev/null +++ b/src/thread/mips64/clone.s @@ -0,0 +1,29 @@ +.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 # system call number of sys_clone for mips n64 ABI + syscall + beq $7, $0, 1f + nop # delay slot + jr $ra + dsubu $2, $0, $2 # delay slot +1: beq $2, $0, 1f + nop # delay slot + jr $ra + nop # delay slot +1: ld $25, 0($sp) # function pointer + ld $4, 8($sp) # argument pointer + jr $25 # call the user's function + nop --- /dev/null +++ b/src/thread/mips64/syscall_cp.s @@ -0,0 +1,53 @@ +.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 # __syscall_cp_asm has 8 arguments and $4 will contain the + # cancellation flag and $5 is syscall number and passing remaining + # 6 arguments to _cancel system call + 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 # checking for summary overflow + nop + dsubu $2, $0, $2 +1: jr $ra + nop +__cp_cancel: # if cancellation flag is 1 then call __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 --- /dev/null +++ b/src/unistd/mips64/pipe.s @@ -0,0 +1,20 @@ +.set noreorder + +.global pipe +.type pipe,@function +pipe: + lui $3, %hi(%neg(%gp_rel(pipe))) #using temporary reg $3 as $gp + 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