diff options
46 files changed, 2350 insertions, 0 deletions
| diff --git a/arch/superh/atomic.h b/arch/superh/atomic.h new file mode 100644 index 00000000..104a4f12 --- /dev/null +++ b/arch/superh/atomic.h @@ -0,0 +1,87 @@ +#ifndef _INTERNAL_ATOMIC_H +#define _INTERNAL_ATOMIC_H + +#include <stdint.h> + +static inline int a_ctz_l(unsigned long x) +{ +	static const char debruijn32[32] = { +		0, 1, 23, 2, 29, 24, 19, 3, 30, 27, 25, 11, 20, 8, 4, 13, +		31, 22, 28, 18, 26, 10, 7, 12, 21, 17, 9, 6, 16, 5, 15, 14 +	}; +	return debruijn32[(x&-x)*0x076be629 >> 27]; +} + +static inline int a_ctz_64(uint64_t x) +{ +	uint32_t y = x; +	if (!y) { +		y = x>>32; +		return 32 + a_ctz_l(y); +	} +	return a_ctz_l(y); +} + +int  __sh_cas(volatile int *, int, int); +int  __sh_swap(volatile int *, int); +int  __sh_fetch_add(volatile int *, int); +void __sh_store(volatile int *, int); +void __sh_and(volatile int *, int); +void __sh_or(volatile int *, int); + +#define a_cas(p,t,s)     __sh_cas(p,t,s) +#define a_swap(x,v)      __sh_swap(x,v) +#define a_fetch_add(x,v) __sh_fetch_add(x, v) +#define a_store(x,v)     __sh_store(x, v) +#define a_and(x,v)       __sh_and(x, v) +#define a_or(x,v)        __sh_or(x, v) + +static inline void *a_cas_p(volatile void *p, void *t, void *s) +{ +	return (void *)a_cas(p, (int)t, (int)s); +} + +static inline long a_cas_l(volatile void *p, long t, long s) +{ +	return a_cas(p, t, s); +} + +static inline void a_inc(volatile int *x) +{ +	a_fetch_add(x, 1); +} + +static inline void a_dec(volatile int *x) +{ +	a_fetch_add(x, -1); +} + +static inline void a_spin() +{ +} + +static inline void a_crash() +{ +	*(volatile char *)0=0; +} + +static inline void a_or_l(volatile void *p, long v) +{ +	a_or(p, v); +} + +static inline void a_and_64(volatile uint64_t *p, uint64_t v) +{ +	union { uint64_t v; uint32_t r[2]; } u = { v }; +	a_and((int *)p,   u.r[0]); +	a_and((int *)p+1, u.r[1]); +} + +static inline void a_or_64(volatile uint64_t *p, uint64_t v) +{ +	union { uint64_t v; uint32_t r[2]; } u = { v }; +	a_or((int *)p,   u.r[0]); +	a_or((int *)p+1, u.r[1]); +} + +#endif diff --git a/arch/superh/bits/alltypes.h.in b/arch/superh/bits/alltypes.h.in new file mode 100644 index 00000000..e9d8dd8a --- /dev/null +++ b/arch/superh/bits/alltypes.h.in @@ -0,0 +1,23 @@ +#define _Addr int +#define _Int64 long long +#define _Reg int + +TYPEDEF __builtin_va_list va_list; +TYPEDEF __builtin_va_list __isoc_va_list; + +#ifndef __cplusplus +TYPEDEF long wchar_t; +#endif +TYPEDEF unsigned wint_t; + +TYPEDEF float float_t; +TYPEDEF double double_t; + +TYPEDEF long time_t; +TYPEDEF long suseconds_t; + +TYPEDEF struct { union { int __i[9]; unsigned __s[9]; } __u; } pthread_attr_t; +TYPEDEF struct { union { int __i[6]; void *__p[6]; } __u; } pthread_mutex_t; +TYPEDEF struct { union { int __i[12]; void *__p[12]; } __u; } pthread_cond_t; +TYPEDEF struct { union { int __i[8]; void *__p[8]; } __u; } pthread_rwlock_t; +TYPEDEF struct { union { int __i[5]; void *__p[5]; } __u; } pthread_barrier_t; diff --git a/arch/superh/bits/endian.h b/arch/superh/bits/endian.h new file mode 100644 index 00000000..4744b97d --- /dev/null +++ b/arch/superh/bits/endian.h @@ -0,0 +1,5 @@ +#if __LITTLE_ENDIAN__ +#define __BYTE_ORDER __LITTLE_ENDIAN +#else +#define __BYTE_ORDER __BIG_ENDIAN +#endif diff --git a/arch/superh/bits/errno.h b/arch/superh/bits/errno.h new file mode 100644 index 00000000..d2e1eeee --- /dev/null +++ b/arch/superh/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 EDEADLK         35 +#define ENAMETOOLONG    36 +#define ENOLCK          37 +#define ENOSYS          38 +#define ENOTEMPTY       39 +#define ELOOP           40 +#define EWOULDBLOCK     EAGAIN +#define ENOMSG          42 +#define EIDRM           43 +#define ECHRNG          44 +#define EL2NSYNC        45 +#define EL3HLT          46 +#define EL3RST          47 +#define ELNRNG          48 +#define EUNATCH         49 +#define ENOCSI          50 +#define EL2HLT          51 +#define EBADE           52 +#define EBADR           53 +#define EXFULL          54 +#define ENOANO          55 +#define EBADRQC         56 +#define EBADSLT         57 +#define EDEADLOCK       EDEADLK +#define EBFONT          59 +#define ENOSTR          60 +#define ENODATA         61 +#define ETIME           62 +#define ENOSR           63 +#define ENONET          64 +#define ENOPKG          65 +#define EREMOTE         66 +#define ENOLINK         67 +#define EADV            68 +#define ESRMNT          69 +#define ECOMM           70 +#define EPROTO          71 +#define EMULTIHOP       72 +#define EDOTDOT         73 +#define EBADMSG         74 +#define EOVERFLOW       75 +#define ENOTUNIQ        76 +#define EBADFD          77 +#define EREMCHG         78 +#define ELIBACC         79 +#define ELIBBAD         80 +#define ELIBSCN         81 +#define ELIBMAX         82 +#define ELIBEXEC        83 +#define EILSEQ          84 +#define ERESTART        85 +#define ESTRPIPE        86 +#define EUSERS          87 +#define ENOTSOCK        88 +#define EDESTADDRREQ    89 +#define EMSGSIZE        90 +#define EPROTOTYPE      91 +#define ENOPROTOOPT     92 +#define EPROTONOSUPPORT 93 +#define ESOCKTNOSUPPORT 94 +#define EOPNOTSUPP      95 +#define ENOTSUP         EOPNOTSUPP +#define EPFNOSUPPORT    96 +#define EAFNOSUPPORT    97 +#define EADDRINUSE      98 +#define EADDRNOTAVAIL   99 +#define ENETDOWN        100 +#define ENETUNREACH     101 +#define ENETRESET       102 +#define ECONNABORTED    103 +#define ECONNRESET      104 +#define ENOBUFS         105 +#define EISCONN         106 +#define ENOTCONN        107 +#define ESHUTDOWN       108 +#define ETOOMANYREFS    109 +#define ETIMEDOUT       110 +#define ECONNREFUSED    111 +#define EHOSTDOWN       112 +#define EHOSTUNREACH    113 +#define EALREADY        114 +#define EINPROGRESS     115 +#define ESTALE          116 +#define EUCLEAN         117 +#define ENOTNAM         118 +#define ENAVAIL         119 +#define EISNAM          120 +#define EREMOTEIO       121 +#define EDQUOT          122 +#define ENOMEDIUM       123 +#define EMEDIUMTYPE     124 +#define ECANCELED       125 +#define ENOKEY          126 +#define EKEYEXPIRED     127 +#define EKEYREVOKED     128 +#define EKEYREJECTED    129 +#define EOWNERDEAD      130 +#define ENOTRECOVERABLE 131 +#define ERFKILL         132 +#define EHWPOISON       133 diff --git a/arch/superh/bits/fcntl.h b/arch/superh/bits/fcntl.h new file mode 100644 index 00000000..0fa8e19c --- /dev/null +++ b/arch/superh/bits/fcntl.h @@ -0,0 +1,39 @@ +#define O_CREAT        0100 +#define O_EXCL         0200 +#define O_NOCTTY       0400 +#define O_TRUNC       01000 +#define O_APPEND      02000 +#define O_NONBLOCK    04000 +#define O_DSYNC      010000 +#define O_SYNC     04010000 +#define O_RSYNC    04010000 +#define O_DIRECTORY 0200000 +#define O_NOFOLLOW  0400000 +#define O_CLOEXEC  02000000 + +#define O_ASYNC      020000 +#define O_DIRECT     040000 +#define O_LARGEFILE 0100000 +#define O_NOATIME  01000000 +#define O_TMPFILE 020200000 +#define O_NDELAY O_NONBLOCK + +#define F_DUPFD  0 +#define F_GETFD  1 +#define F_SETFD  2 +#define F_GETFL  3 +#define F_SETFL  4 + +#define F_SETOWN 8 +#define F_GETOWN 9 +#define F_SETSIG 10 +#define F_GETSIG 11 + +#define F_GETLK 12 +#define F_SETLK 13 +#define F_SETLKW 14 + +#define F_SETOWN_EX 15 +#define F_GETOWN_EX 16 + +#define F_GETOWNER_UIDS 17 diff --git a/arch/superh/bits/fenv.h b/arch/superh/bits/fenv.h new file mode 100644 index 00000000..f454a15d --- /dev/null +++ b/arch/superh/bits/fenv.h @@ -0,0 +1,17 @@ +#define FE_TONEAREST  0 +#define FE_TOWARDZERO 1 + +#define FE_INEXACT    0x04 +#define FE_UNDERFLOW  0x08 +#define FE_OVERFLOW   0x10 +#define FE_DIVBYZERO  0x20 +#define FE_INVALID    0x40 +#define FE_ALL_EXCEPT 0x7c + +typedef unsigned long fexcept_t; + +typedef struct { +	unsigned long __cw; +} fenv_t; + +#define FE_DFL_ENV    ((const fenv_t *) -1) diff --git a/arch/superh/bits/float.h b/arch/superh/bits/float.h new file mode 100644 index 00000000..ec46b94b --- /dev/null +++ b/arch/superh/bits/float.h @@ -0,0 +1,17 @@ +#define FLT_ROUNDS 1 +#define FLT_EVAL_METHOD 0 + +#define LDBL_TRUE_MIN 4.94065645841246544177e-324L +#define LDBL_MIN 2.22507385850720138309e-308L +#define LDBL_MAX 1.79769313486231570815e+308L +#define LDBL_EPSILON 2.22044604925031308085e-16L + +#define LDBL_MANT_DIG 53 +#define LDBL_MIN_EXP (-1021) +#define LDBL_MAX_EXP 1024 + +#define LDBL_DIG 15 +#define LDBL_MIN_10_EXP (-307) +#define LDBL_MAX_10_EXP 308 + +#define DECIMAL_DIG 17 diff --git a/arch/superh/bits/io.h b/arch/superh/bits/io.h new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/arch/superh/bits/io.h diff --git a/arch/superh/bits/ioctl.h b/arch/superh/bits/ioctl.h new file mode 100644 index 00000000..c0b668b2 --- /dev/null +++ b/arch/superh/bits/ioctl.h @@ -0,0 +1,205 @@ +#define _IOC(a,b,c,d) ( ((a)<<30) | ((b)<<8) | (c) | ((d)<<16) ) +#define _IOC_NONE  0U +#define _IOC_WRITE 1U +#define _IOC_READ  2U + +#define _IO(a,b) _IOC(_IOC_NONE,(a),(b),0) +#define _IOW(a,b,c) _IOC(_IOC_WRITE,(a),(b),sizeof(c)) +#define _IOR(a,b,c) _IOC(_IOC_READ,(a),(b),sizeof(c)) +#define _IOWR(a,b,c) _IOC(_IOC_READ|_IOC_WRITE,(a),(b),sizeof(c)) + +#define FIOCLEX             _IO('f',  1) +#define FIONCLEX            _IO('f',  2) +#define FIOASYNC            _IOW('f', 125, int) +#define FIONBIO             _IOW('f', 126, int) +#define FIONREAD            _IOR('f', 127, int) +#define TIOCINQ             FIONREAD +#define FIOQSIZE            _IOR('f', 128, char[8]) + +#define TCGETA              _IOR('t', 23, char[18]) +#define TCSETA              _IOW('t', 24, char[18]) +#define TCSETAW             _IOW('t', 25, char[18]) +#define TCSETAF             _IOW('t', 28, char[18]) + +#define TCSBRK              _IO('t', 29) +#define TCXONC              _IO('t', 30) +#define TCFLSH              _IO('t', 31) + +#define TIOCSWINSZ          _IOW('t', 103, char[8]) +#define TIOCGWINSZ          _IOR('t', 104, char[8]) +#define TIOCSTART           _IO('t',  110) +#define TIOCSTOP            _IO('t',  111) +#define TIOCOUTQ            _IOR('t', 115, int) + +#define TIOCSPGRP           _IOW('t', 118, int) +#define TIOCGPGRP           _IOR('t', 119, int) + +#define TIOCEXCL            _IO('T', 12) +#define TIOCNXCL            _IO('T', 13) +#define TIOCSCTTY           _IO('T', 14) + +#define TIOCSTI             _IOW('T', 18, char) +#define TIOCMGET            _IOR('T', 21, unsigned int) +#define TIOCMBIS            _IOW('T', 22, unsigned int) +#define TIOCMBIC            _IOW('T', 23, unsigned int) +#define TIOCMSET            _IOW('T', 24, unsigned int) +#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 TIOCGSOFTCAR        _IOR('T', 25, unsigned int) +#define TIOCSSOFTCAR        _IOW('T', 26, unsigned int) +#define TIOCLINUX           _IOW('T', 28, char) +#define TIOCCONS            _IO('T',  29) +#define TIOCGSERIAL         _IOR('T', 30, char[60]) +#define TIOCSSERIAL         _IOW('T', 31, char[60]) +#define TIOCPKT             _IOW('T', 32, int) +#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 TIOCNOTTY           _IO('T',  34) +#define TIOCSETD            _IOW('T', 35, int) +#define TIOCGETD            _IOR('T', 36, int) +#define TCSBRKP             _IOW('T', 37, int) +#define TIOCSBRK            _IO('T',  39) +#define TIOCCBRK            _IO('T',  40) +#define TIOCGSID            _IOR('T', 41, int) +#define TCGETS              _IOR('T', 42, char[44]) +#define TCSETS              _IOW('T', 43, char[44]) +#define TCSETSW             _IOW('T', 44, char[44]) +#define TCSETSF             _IOW('T', 45, char[44]) +#define TIOCGPTN            _IOR('T', 48, unsigned int) +#define TIOCSPTLCK          _IOW('T', 49, int) +#define TIOCGDEV            _IOR('T', 50, unsigned int) +#define TIOCSIG             _IOW('T', 54, int) +#define TIOCVHANGUP         _IO('T',  55) +#define TIOCGPKT            _IOR('T', 56, int) +#define TIOCGPTLCK          _IOR('T', 57, int) +#define TIOCGEXCL           _IOR('T', 64, int) + +#define TIOCSERCONFIG       _IO('T',  83) +#define TIOCSERGWILD        _IOR('T', 84, int) +#define TIOCSERSWILD        _IOW('T', 85, int) +#define TIOCGLCKTRMIOS      _IO('T',  86) +#define TIOCSLCKTRMIOS      _IO('T',  87) +#define TIOCSERGSTRUCT      _IOR('T', 88, char[216]) +#define TIOCSERGETLSR       _IOR('T', 89, unsigned int) +#define TIOCSER_TEMT        0x01 +#define TIOCSERGETMULTI     _IOR('T', 90, char[168]) +#define TIOCSERSETMULTI     _IOW('T', 91, char[168]) + +#define TIOCMIWAIT          _IO('T', 92) +#define TIOCGICOUNT         _IO('T', 93) + +struct winsize { +    unsigned short ws_row; +    unsigned short ws_col; +    unsigned short ws_xpixel; +    unsigned short ws_ypixel; +}; + +#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 FIOGETOWN       _IOR('f', 123, int) +#define FIOSETOWN       _IOW('f', 124, int) + +#define SIOCATMARK      _IOR('s', 7, int) +#define SIOCSPGRP       _IOW('s', 8, int) +#define SIOCGPGRP       _IOW('s', 9, int) +#define SIOCGSTAMP      _IOR('s', 100, char[8]) + +#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/superh/bits/ipc.h b/arch/superh/bits/ipc.h new file mode 100644 index 00000000..b748d3b7 --- /dev/null +++ b/arch/superh/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; +	long __pad1; +	long __pad2; +}; + +#define IPC_64 0x100 diff --git a/arch/superh/bits/limits.h b/arch/superh/bits/limits.h new file mode 100644 index 00000000..65a3dd64 --- /dev/null +++ b/arch/superh/bits/limits.h @@ -0,0 +1,8 @@ +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define PAGE_SIZE 4096 +#define LONG_BIT 32 +#endif + +#define LONG_MAX  0x7fffffffL +#define LLONG_MAX  0x7fffffffffffffffLL diff --git a/arch/superh/bits/mman.h b/arch/superh/bits/mman.h new file mode 100644 index 00000000..f199f4b4 --- /dev/null +++ b/arch/superh/bits/mman.h @@ -0,0 +1,62 @@ +#define MAP_FAILED ((void *) -1) + +#define	PROT_NONE      0 +#define	PROT_READ      1 +#define	PROT_WRITE     2 +#define	PROT_EXEC      4 +#define	PROT_GROWSDOWN 0x01000000 +#define	PROT_GROWSUP   0x02000000 + +#define	MAP_SHARED     0x01 +#define	MAP_PRIVATE    0x02 +#define	MAP_FIXED      0x10 + +#define MAP_TYPE       0x0f +#define MAP_FILE       0x00 +#define MAP_ANON       0x20 +#define MAP_ANONYMOUS  MAP_ANON +#define MAP_32BIT      0x40 +#define MAP_NORESERVE  0x4000 +#define MAP_GROWSDOWN  0x0100 +#define MAP_DENYWRITE  0x0800 +#define MAP_EXECUTABLE 0x1000 +#define MAP_LOCKED     0x2000 +#define MAP_POPULATE   0x8000 +#define MAP_NONBLOCK   0x10000 +#define MAP_STACK      0x20000 +#define MAP_HUGETLB    0x40000 + +#define POSIX_MADV_NORMAL       0 +#define POSIX_MADV_RANDOM       1 +#define POSIX_MADV_SEQUENTIAL   2 +#define POSIX_MADV_WILLNEED     3 +#define POSIX_MADV_DONTNEED     4 + +#define MS_ASYNC        1 +#define MS_INVALIDATE   2 +#define MS_SYNC         4 + +#define MCL_CURRENT     1 +#define MCL_FUTURE      2 + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define MADV_NORMAL      0 +#define MADV_RANDOM      1 +#define MADV_SEQUENTIAL  2 +#define MADV_WILLNEED    3 +#define MADV_DONTNEED    4 +#define MADV_REMOVE      9 +#define MADV_DONTFORK    10 +#define MADV_DOFORK      11 +#define MADV_MERGEABLE   12 +#define MADV_UNMERGEABLE 13 +#define MADV_HUGEPAGE    14 +#define MADV_NOHUGEPAGE  15 +#define MADV_DONTDUMP    16 +#define MADV_DODUMP      17 +#define MADV_HWPOISON    100 +#define MADV_SOFT_OFFLINE 101 + +#define MREMAP_MAYMOVE  1 +#define MREMAP_FIXED    2 +#endif diff --git a/arch/superh/bits/msg.h b/arch/superh/bits/msg.h new file mode 100644 index 00000000..3db8576b --- /dev/null +++ b/arch/superh/bits/msg.h @@ -0,0 +1,16 @@ +struct msqid_ds +{ +	struct ipc_perm msg_perm; +	time_t msg_stime; +	int __unused1; +	time_t msg_rtime; +	int __unused2; +	time_t msg_ctime; +	int __unused3; +	unsigned long msg_cbytes; +	msgqnum_t msg_qnum; +	msglen_t msg_qbytes; +	pid_t msg_lspid; +	pid_t msg_lrpid; +	unsigned long __unused[2]; +}; diff --git a/arch/superh/bits/posix.h b/arch/superh/bits/posix.h new file mode 100644 index 00000000..30a38714 --- /dev/null +++ b/arch/superh/bits/posix.h @@ -0,0 +1,2 @@ +#define _POSIX_V6_ILP32_OFFBIG  1 +#define _POSIX_V7_ILP32_OFFBIG  1 diff --git a/arch/superh/bits/setjmp.h b/arch/superh/bits/setjmp.h new file mode 100644 index 00000000..bef7fe2a --- /dev/null +++ b/arch/superh/bits/setjmp.h @@ -0,0 +1 @@ +typedef unsigned long __jmp_buf[13]; diff --git a/arch/superh/bits/shm.h b/arch/superh/bits/shm.h new file mode 100644 index 00000000..a210fd4a --- /dev/null +++ b/arch/superh/bits/shm.h @@ -0,0 +1,28 @@ +#define SHMLBA 16384 + +struct shmid_ds +{ +	struct ipc_perm shm_perm; +	size_t shm_segsz; +	time_t shm_atime; +	int __unused1; +	time_t shm_dtime; +	int __unused2; +	time_t shm_ctime; +	int __unused3; +	pid_t shm_cpid; +	pid_t shm_lpid; +	unsigned long shm_nattch; +	unsigned long __pad1; +	unsigned long __pad2; +}; + +struct shminfo { +	unsigned long shmmax, shmmin, shmmni, shmseg, shmall, __unused[4]; +}; + +struct shm_info { +	int __used_ids; +	unsigned long shm_tot, shm_rss, shm_swp; +	unsigned long __swap_attempts, __swap_successes; +}; diff --git a/arch/superh/bits/signal.h b/arch/superh/bits/signal.h new file mode 100644 index 00000000..905ae3ac --- /dev/null +++ b/arch/superh/bits/signal.h @@ -0,0 +1,76 @@ +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +typedef int greg_t, gregset_t[16]; +typedef int freg_t, fpregset_t[16]; +typedef struct sigcontext { +	unsigned long oldmask; +	unsigned long sc_regs[16]; +	unsigned long sc_pc, sc_pr, sc_sr; +	unsigned long sc_gbr, sc_mach, sc_macl; +	unsigned long sc_fpregs[16]; +	unsigned long sc_xfpregs[16]; +	unsigned int sc_fpscr, sc_fpul, sc_ownedfp; +} mcontext_t; +#else +typedef struct { +	unsigned long __regs[58]; +} mcontext_t; +#endif + +typedef struct __ucontext { +	unsigned long uc_flags; +	struct __ucontext *uc_link; +	stack_t uc_stack; +	mcontext_t uc_mcontext; +	sigset_t uc_sigmask; +} ucontext_t; + +#define SA_NOCLDSTOP  1 +#define SA_NOCLDWAIT  2 +#define SA_SIGINFO    4 +#define SA_ONSTACK    0x08000000 +#define SA_RESTART    0x10000000 +#define SA_NODEFER    0x40000000 +#define SA_RESETHAND  0x80000000 +#define SA_RESTORER   0x04000000 + +#endif + +#define SIGHUP    1 +#define SIGINT    2 +#define SIGQUIT   3 +#define SIGILL    4 +#define SIGTRAP   5 +#define SIGABRT   6 +#define SIGIOT    SIGABRT +#define SIGBUS    7 +#define SIGFPE    8 +#define SIGKILL   9 +#define SIGUSR1   10 +#define SIGSEGV   11 +#define SIGUSR2   12 +#define SIGPIPE   13 +#define SIGALRM   14 +#define SIGTERM   15 +#define SIGSTKFLT 16 +#define SIGCHLD   17 +#define SIGCONT   18 +#define SIGSTOP   19 +#define SIGTSTP   20 +#define SIGTTIN   21 +#define SIGTTOU   22 +#define SIGURG    23 +#define SIGXCPU   24 +#define SIGXFSZ   25 +#define SIGVTALRM 26 +#define SIGPROF   27 +#define SIGWINCH  28 +#define SIGIO     29 +#define SIGPOLL   29 +#define SIGPWR    30 +#define SIGSYS    31 +#define SIGUNUSED SIGSYS + +#define _NSIG 65 diff --git a/arch/superh/bits/socket.h b/arch/superh/bits/socket.h new file mode 100644 index 00000000..36febbc2 --- /dev/null +++ b/arch/superh/bits/socket.h @@ -0,0 +1,17 @@ +struct msghdr +{ +	void *msg_name; +	socklen_t msg_namelen; +	struct iovec *msg_iov; +	int msg_iovlen; +	void *msg_control; +	socklen_t msg_controllen; +	int msg_flags; +}; + +struct cmsghdr +{ +	socklen_t cmsg_len; +	int cmsg_level; +	int cmsg_type; +}; diff --git a/arch/superh/bits/stat.h b/arch/superh/bits/stat.h new file mode 100644 index 00000000..bb9314a5 --- /dev/null +++ b/arch/superh/bits/stat.h @@ -0,0 +1,22 @@ +/* copied from kernel definition, but with padding replaced + * by the corresponding correctly-sized userspace types. */ + +struct stat +{ +	dev_t st_dev; +	int __st_dev_padding; +	long __st_ino_truncated; +	mode_t st_mode; +	nlink_t st_nlink; +	uid_t st_uid; +	gid_t st_gid; +	dev_t st_rdev; +	int __st_rdev_padding; +	off_t st_size; +	blksize_t st_blksize; +	blkcnt_t st_blocks; +	struct timespec st_atim; +	struct timespec st_mtim; +	struct timespec st_ctim; +	ino_t st_ino; +}; diff --git a/arch/superh/bits/statfs.h b/arch/superh/bits/statfs.h new file mode 100644 index 00000000..f103f4e4 --- /dev/null +++ b/arch/superh/bits/statfs.h @@ -0,0 +1,7 @@ +struct statfs { +	unsigned long f_type, f_bsize; +	fsblkcnt_t f_blocks, f_bfree, f_bavail; +	fsfilcnt_t f_files, f_ffree; +	fsid_t f_fsid; +	unsigned long f_namelen, f_frsize, f_flags, f_spare[4]; +}; diff --git a/arch/superh/bits/stdarg.h b/arch/superh/bits/stdarg.h new file mode 100644 index 00000000..fde37814 --- /dev/null +++ b/arch/superh/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) diff --git a/arch/superh/bits/stdint.h b/arch/superh/bits/stdint.h new file mode 100644 index 00000000..d1b27121 --- /dev/null +++ b/arch/superh/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      INT32_MIN +#define INTPTR_MAX      INT32_MAX +#define UINTPTR_MAX     UINT32_MAX +#define PTRDIFF_MIN     INT32_MIN +#define PTRDIFF_MAX     INT32_MAX +#define SIZE_MAX        UINT32_MAX diff --git a/arch/superh/bits/syscall.h b/arch/superh/bits/syscall.h new file mode 100644 index 00000000..4b363bf2 --- /dev/null +++ b/arch/superh/bits/syscall.h @@ -0,0 +1,684 @@ +#define __NR_restart_syscall        0 +#define __NR_exit                   1 +#define __NR_fork                   2 +#define __NR_read                   3 +#define __NR_write                  4 +#define __NR_open                   5 +#define __NR_close                  6 +#define __NR_waitpid                7 +#define __NR_creat                  8 +#define __NR_link                   9 +#define __NR_unlink                 10 +#define __NR_execve                 11 +#define __NR_chdir                  12 +#define __NR_time                   13 +#define __NR_mknod                  14 +#define __NR_chmod                  15 +#define __NR_lchown                 16 +#define __NR_oldstat                18 +#define __NR_lseek                  19 +#define __NR_getpid                 20 +#define __NR_mount                  21 +#define __NR_umount                 22 +#define __NR_setuid                 23 +#define __NR_getuid                 24 +#define __NR_stime                  25 +#define __NR_ptrace                 26 +#define __NR_alarm                  27 +#define __NR_oldfstat               28 +#define __NR_pause                  29 +#define __NR_utime                  30 +#define __NR_access                 33 +#define __NR_nice                   34 +#define __NR_sync                   36 +#define __NR_kill                   37 +#define __NR_rename                 38 +#define __NR_mkdir                  39 +#define __NR_rmdir                  40 +#define __NR_dup                    41 +#define __NR_pipe                   42 +#define __NR_times                  43 +#define __NR_brk                    45 +#define __NR_setgid                 46 +#define __NR_getgid                 47 +#define __NR_signal                 48 +#define __NR_geteuid                49 +#define __NR_getegid                50 +#define __NR_acct                   51 +#define __NR_umount2                52 +#define __NR_ioctl                  54 +#define __NR_fcntl                  55 +#define __NR_setpgid                57 +#define __NR_umask                  60 +#define __NR_chroot                 61 +#define __NR_ustat                  62 +#define __NR_dup2                   63 +#define __NR_getppid                64 +#define __NR_getpgrp                65 +#define __NR_setsid                 66 +#define __NR_sigaction              67 +#define __NR_sgetmask               68 +#define __NR_ssetmask               69 +#define __NR_setreuid               70 +#define __NR_setregid               71 +#define __NR_sigsuspend             72 +#define __NR_sigpending             73 +#define __NR_sethostname            74 +#define __NR_setrlimit              75 +#define __NR_getrlimit              76 +#define __NR_getrusage              77 +#define __NR_gettimeofday           78 +#define __NR_settimeofday           79 +#define __NR_getgroups              80 +#define __NR_setgroups              81 +#define __NR_symlink                83 +#define __NR_oldlstat               84 +#define __NR_readlink               85 +#define __NR_uselib                 86 +#define __NR_swapon                 87 +#define __NR_reboot                 88 +#define __NR_readdir                89 +#define __NR_mmap                   90 +#define __NR_munmap                 91 +#define __NR_truncate               92 +#define __NR_ftruncate              93 +#define __NR_fchmod                 94 +#define __NR_fchown                 95 +#define __NR_getpriority            96 +#define __NR_setpriority            97 +#define __NR_statfs                 99 +#define __NR_fstatfs                100 +#define __NR_socketcall             102 +#define __NR_syslog                 103 +#define __NR_setitimer              104 +#define __NR_getitimer              105 +#define __NR_stat                   106 +#define __NR_lstat                  107 +#define __NR_fstat                  108 +#define __NR_olduname               109 +#define __NR_vhangup                111 +#define __NR_wait4                  114 +#define __NR_swapoff                115 +#define __NR_sysinfo                116 +#define __NR_ipc                    117 +#define __NR_fsync                  118 +#define __NR_sigreturn              119 +#define __NR_clone                  120 +#define __NR_setdomainname          121 +#define __NR_uname                  122 +#define __NR_cacheflush             123 +#define __NR_adjtimex               124 +#define __NR_mprotect               125 +#define __NR_sigprocmask            126 +#define __NR_init_module            128 +#define __NR_delete_module          129 +#define __NR_quotactl               131 +#define __NR_getpgid                132 +#define __NR_fchdir                 133 +#define __NR_bdflush                134 +#define __NR_sysfs                  135 +#define __NR_personality            136 +#define __NR_setfsuid               138 +#define __NR_setfsgid               139 +#define __NR__llseek                140 +#define __NR_getdents               141 +#define __NR__newselect             142 +#define __NR_flock                  143 +#define __NR_msync                  144 +#define __NR_readv                  145 +#define __NR_writev                 146 +#define __NR_getsid                 147 +#define __NR_fdatasync              148 +#define __NR__sysctl                149 +#define __NR_mlock                  150 +#define __NR_munlock                151 +#define __NR_mlockall               152 +#define __NR_munlockall             153 +#define __NR_sched_setparam         154 +#define __NR_sched_getparam         155 +#define __NR_sched_setscheduler     156 +#define __NR_sched_getscheduler     157 +#define __NR_sched_yield            158 +#define __NR_sched_get_priority_max 159 +#define __NR_sched_get_priority_min 160 +#define __NR_sched_rr_get_interval  161 +#define __NR_nanosleep              162 +#define __NR_mremap                 163 +#define __NR_setresuid              164 +#define __NR_getresuid              165 +#define __NR_poll                   168 +#define __NR_nfsservctl             169 +#define __NR_setresgid              170 +#define __NR_getresgid              171 +#define __NR_prctl                  172 +#define __NR_rt_sigreturn           173 +#define __NR_rt_sigaction           174 +#define __NR_rt_sigprocmask         175 +#define __NR_rt_sigpending          176 +#define __NR_rt_sigtimedwait        177 +#define __NR_rt_sigqueueinfo        178 +#define __NR_rt_sigsuspend          179 +#define __NR_pread64                180 +#define __NR_pwrite64               181 +#define __NR_chown                  182 +#define __NR_getcwd                 183 +#define __NR_capget                 184 +#define __NR_capset                 185 +#define __NR_sigaltstack            186 +#define __NR_sendfile               187 +#define __NR_vfork                  190 +#define __NR_ugetrlimit             191 +#define __NR_mmap2                  192 +#define __NR_truncate64             193 +#define __NR_ftruncate64            194 +#define __NR_stat64                 195 +#define __NR_lstat64                196 +#define __NR_fstat64                197 +#define __NR_lchown32               198 +#define __NR_getuid32               199 +#define __NR_getgid32               200 +#define __NR_geteuid32              201 +#define __NR_getegid32              202 +#define __NR_setreuid32             203 +#define __NR_setregid32             204 +#define __NR_getgroups32            205 +#define __NR_setgroups32            206 +#define __NR_fchown32               207 +#define __NR_setresuid32            208 +#define __NR_getresuid32            209 +#define __NR_setresgid32            210 +#define __NR_getresgid32            211 +#define __NR_chown32                212 +#define __NR_setuid32               213 +#define __NR_setgid32               214 +#define __NR_setfsuid32             215 +#define __NR_setfsgid32             216 +#define __NR_pivot_root             217 +#define __NR_mincore                218 +#define __NR_madvise                219 +#define __NR_getdents64             220 +#define __NR_fcntl64                221 +#define __NR_gettid                 224 +#define __NR_readahead              225 +#define __NR_setxattr               226 +#define __NR_lsetxattr              227 +#define __NR_fsetxattr              228 +#define __NR_getxattr               229 +#define __NR_lgetxattr              230 +#define __NR_fgetxattr              231 +#define __NR_listxattr              232 +#define __NR_llistxattr             233 +#define __NR_flistxattr             234 +#define __NR_removexattr            235 +#define __NR_lremovexattr           236 +#define __NR_fremovexattr           237 +#define __NR_tkill                  238 +#define __NR_sendfile64             239 +#define __NR_futex                  240 +#define __NR_sched_setaffinity      241 +#define __NR_sched_getaffinity      242 +#define __NR_io_setup               245 +#define __NR_io_destroy             246 +#define __NR_io_getevents           247 +#define __NR_io_submit              248 +#define __NR_io_cancel              249 +#define __NR_fadvise64              250 +#define __NR_exit_group             252 +#define __NR_lookup_dcookie         253 +#define __NR_epoll_create           254 +#define __NR_epoll_ctl              255 +#define __NR_epoll_wait             256 +#define __NR_remap_file_pages       257 +#define __NR_set_tid_address        258 +#define __NR_timer_create           259 +#define __NR_timer_settime          260 +#define __NR_timer_gettime          261 +#define __NR_timer_getoverrun       262 +#define __NR_timer_delete           263 +#define __NR_clock_settime          264 +#define __NR_clock_gettime          265 +#define __NR_clock_getres           266 +#define __NR_clock_nanosleep        267 +#define __NR_statfs64               268 +#define __NR_fstatfs64              269 +#define __NR_tgkill                 270 +#define __NR_utimes                 271 +#define __NR_fadvise64_64           272 +#define __NR_mbind                  274 +#define __NR_get_mempolicy          275 +#define __NR_set_mempolicy          276 +#define __NR_mq_open                277 +#define __NR_mq_unlink              278 +#define __NR_mq_timedsend           279 +#define __NR_mq_timedreceive        280 +#define __NR_mq_notify              281 +#define __NR_mq_getsetattr          282 +#define __NR_kexec_load             283 +#define __NR_waitid                 284 +#define __NR_add_key                285 +#define __NR_request_key            286 +#define __NR_keyctl                 287 +#define __NR_ioprio_set             288 +#define __NR_ioprio_get             289 +#define __NR_inotify_init           290 +#define __NR_inotify_add_watch      291 +#define __NR_inotify_rm_watch       292 +#define __NR_migrate_pages          294 +#define __NR_openat                 295 +#define __NR_mkdirat                296 +#define __NR_mknodat                297 +#define __NR_fchownat               298 +#define __NR_futimesat              299 +#define __NR_fstatat64              300 +#define __NR_unlinkat               301 +#define __NR_renameat               302 +#define __NR_linkat                 303 +#define __NR_symlinkat              304 +#define __NR_readlinkat             305 +#define __NR_fchmodat               306 +#define __NR_faccessat              307 +#define __NR_pselect6               308 +#define __NR_ppoll                  309 +#define __NR_unshare                310 +#define __NR_set_robust_list        311 +#define __NR_get_robust_list        312 +#define __NR_splice                 313 +#define __NR_sync_file_range        314 +#define __NR_tee                    315 +#define __NR_vmsplice               316 +#define __NR_move_pages             317 +#define __NR_getcpu                 318 +#define __NR_epoll_pwait            319 +#define __NR_utimensat              320 +#define __NR_signalfd               321 +#define __NR_timerfd_create         322 +#define __NR_eventfd                323 +#define __NR_fallocate              324 +#define __NR_timerfd_settime        325 +#define __NR_timerfd_gettime        326 +#define __NR_signalfd4              327 +#define __NR_eventfd2               328 +#define __NR_epoll_create1          329 +#define __NR_dup3                   330 +#define __NR_pipe2                  331 +#define __NR_inotify_init1          332 +#define __NR_preadv                 333 +#define __NR_pwritev                334 +#define __NR_rt_tgsigqueueinfo      335 +#define __NR_perf_event_open        336 +#define __NR_fanotify_init          337 +#define __NR_fanotify_mark          338 +#define __NR_prlimit64              339 +#define __NR_socket                 340 +#define __NR_bind                   341 +#define __NR_connect                342 +#define __NR_listen                 343 +#define __NR_accept                 344 +#define __NR_getsockname            345 +#define __NR_getpeername            346 +#define __NR_socketpair             347 +#define __NR_send                   348 +#define __NR_sendto                 349 +#define __NR_recv                   350 +#define __NR_recvfrom               351 +#define __NR_shutdown               352 +#define __NR_setsockopt             353 +#define __NR_getsockopt             354 +#define __NR_sendmsg                355 +#define __NR_recvmsg                356 +#define __NR_recvmmsg               357 +#define __NR_accept4                358 +#define __NR_name_to_handle_at      359 +#define __NR_open_by_handle_at      360 +#define __NR_clock_adjtime          361 +#define __NR_syncfs                 362 +#define __NR_sendmmsg               363 +#define __NR_setns                  364 +#define __NR_process_vm_readv       365 +#define __NR_process_vm_writev      366 +#define __NR_kcmp                   367 +#define __NR_finit_module           368 + + +/* Repeated with SYS_ prefix */ + +#define SYS_restart_syscall         0 +#define SYS_exit                    1 +#define SYS_fork                    2 +#define SYS_read                    3 +#define SYS_write                   4 +#define SYS_open                    5 +#define SYS_close                   6 +#define SYS_waitpid                 7 +#define SYS_creat                   8 +#define SYS_link                    9 +#define SYS_unlink                  10 +#define SYS_execve                  11 +#define SYS_chdir                   12 +#define SYS_time                    13 +#define SYS_mknod                   14 +#define SYS_chmod                   15 +#define SYS_lchown                  16 +#define SYS_oldstat                 18 +#define SYS_lseek                   19 +#define SYS_getpid                  20 +#define SYS_mount                   21 +#define SYS_umount                  22 +#define SYS_setuid                  23 +#define SYS_getuid                  24 +#define SYS_stime                   25 +#define SYS_ptrace                  26 +#define SYS_alarm                   27 +#define SYS_oldfstat                28 +#define SYS_pause                   29 +#define SYS_utime                   30 +#define SYS_access                  33 +#define SYS_nice                    34 +#define SYS_sync                    36 +#define SYS_kill                    37 +#define SYS_rename                  38 +#define SYS_mkdir                   39 +#define SYS_rmdir                   40 +#define SYS_dup                     41 +#define SYS_pipe                    42 +#define SYS_times                   43 +#define SYS_brk                     45 +#define SYS_setgid                  46 +#define SYS_getgid                  47 +#define SYS_signal                  48 +#define SYS_geteuid                 49 +#define SYS_getegid                 50 +#define SYS_acct                    51 +#define SYS_umount2                 52 +#define SYS_ioctl                   54 +#define SYS_fcntl                   55 +#define SYS_setpgid                 57 +#define SYS_umask                   60 +#define SYS_chroot                  61 +#define SYS_ustat                   62 +#define SYS_dup2                    63 +#define SYS_getppid                 64 +#define SYS_getpgrp                 65 +#define SYS_setsid                  66 +#define SYS_sigaction               67 +#define SYS_sgetmask                68 +#define SYS_ssetmask                69 +#define SYS_setreuid                70 +#define SYS_setregid                71 +#define SYS_sigsuspend              72 +#define SYS_sigpending              73 +#define SYS_sethostname             74 +#define SYS_setrlimit               75 +#define SYS_getrlimit               76 +#define SYS_getrusage               77 +#define SYS_gettimeofday            78 +#define SYS_settimeofday            79 +#define SYS_getgroups               80 +#define SYS_setgroups               81 +#define SYS_symlink                 83 +#define SYS_oldlstat                84 +#define SYS_readlink                85 +#define SYS_uselib                  86 +#define SYS_swapon                  87 +#define SYS_reboot                  88 +#define SYS_readdir                 89 +#define SYS_mmap                    90 +#define SYS_munmap                  91 +#define SYS_truncate                92 +#define SYS_ftruncate               93 +#define SYS_fchmod                  94 +#define SYS_fchown                  95 +#define SYS_getpriority             96 +#define SYS_setpriority             97 +#define SYS_statfs                  99 +#define SYS_fstatfs                 100 +#define SYS_socketcall              102 +#define SYS_syslog                  103 +#define SYS_setitimer               104 +#define SYS_getitimer               105 +#define SYS_stat                    106 +#define SYS_lstat                   107 +#define SYS_fstat                   108 +#define SYS_olduname                109 +#define SYS_vhangup                 111 +#define SYS_wait4                   114 +#define SYS_swapoff                 115 +#define SYS_sysinfo                 116 +#define SYS_ipc                     117 +#define SYS_fsync                   118 +#define SYS_sigreturn               119 +#define SYS_clone                   120 +#define SYS_setdomainname           121 +#define SYS_uname                   122 +#define SYS_cacheflush              123 +#define SYS_adjtimex                124 +#define SYS_mprotect                125 +#define SYS_sigprocmask             126 +#define SYS_init_module             128 +#define SYS_delete_module           129 +#define SYS_quotactl                131 +#define SYS_getpgid                 132 +#define SYS_fchdir                  133 +#define SYS_bdflush                 134 +#define SYS_sysfs                   135 +#define SYS_personality             136 +#define SYS_setfsuid                138 +#define SYS_setfsgid                139 +#define SYS__llseek                 140 +#define SYS_getdents                141 +#define SYS__newselect              142 +#define SYS_flock                   143 +#define SYS_msync                   144 +#define SYS_readv                   145 +#define SYS_writev                  146 +#define SYS_getsid                  147 +#define SYS_fdatasync               148 +#define SYS__sysctl                 149 +#define SYS_mlock                   150 +#define SYS_munlock                 151 +#define SYS_mlockall                152 +#define SYS_munlockall              153 +#define SYS_sched_setparam          154 +#define SYS_sched_getparam          155 +#define SYS_sched_setscheduler      156 +#define SYS_sched_getscheduler      157 +#define SYS_sched_yield             158 +#define SYS_sched_get_priority_max  159 +#define SYS_sched_get_priority_min  160 +#define SYS_sched_rr_get_interval   161 +#define SYS_nanosleep               162 +#define SYS_mremap                  163 +#define SYS_setresuid               164 +#define SYS_getresuid               165 +#define SYS_poll                    168 +#define SYS_nfsservctl              169 +#define SYS_setresgid               170 +#define SYS_getresgid               171 +#define SYS_prctl                   172 +#define SYS_rt_sigreturn            173 +#define SYS_rt_sigaction            174 +#define SYS_rt_sigprocmask          175 +#define SYS_rt_sigpending           176 +#define SYS_rt_sigtimedwait         177 +#define SYS_rt_sigqueueinfo         178 +#define SYS_rt_sigsuspend           179 +#define SYS_pread64                 180 +#define SYS_pwrite64                181 +#define SYS_chown                   182 +#define SYS_getcwd                  183 +#define SYS_capget                  184 +#define SYS_capset                  185 +#define SYS_sigaltstack             186 +#define SYS_sendfile                187 +#define SYS_vfork                   190 +#define SYS_ugetrlimit              191 +#define SYS_mmap2                   192 +#define SYS_truncate64              193 +#define SYS_ftruncate64             194 +#define SYS_stat64                  195 +#define SYS_lstat64                 196 +#define SYS_fstat64                 197 +#define SYS_lchown32                198 +#define SYS_getuid32                199 +#define SYS_getgid32                200 +#define SYS_geteuid32               201 +#define SYS_getegid32               202 +#define SYS_setreuid32              203 +#define SYS_setregid32              204 +#define SYS_getgroups32             205 +#define SYS_setgroups32             206 +#define SYS_fchown32                207 +#define SYS_setresuid32             208 +#define SYS_getresuid32             209 +#define SYS_setresgid32             210 +#define SYS_getresgid32             211 +#define SYS_chown32                 212 +#define SYS_setuid32                213 +#define SYS_setgid32                214 +#define SYS_setfsuid32              215 +#define SYS_setfsgid32              216 +#define SYS_pivot_root              217 +#define SYS_mincore                 218 +#define SYS_madvise                 219 +#define SYS_getdents64              220 +#define SYS_fcntl64                 221 +#define SYS_gettid                  224 +#define SYS_readahead               225 +#define SYS_setxattr                226 +#define SYS_lsetxattr               227 +#define SYS_fsetxattr               228 +#define SYS_getxattr                229 +#define SYS_lgetxattr               230 +#define SYS_fgetxattr               231 +#define SYS_listxattr               232 +#define SYS_llistxattr              233 +#define SYS_flistxattr              234 +#define SYS_removexattr             235 +#define SYS_lremovexattr            236 +#define SYS_fremovexattr            237 +#define SYS_tkill                   238 +#define SYS_sendfile64              239 +#define SYS_futex                   240 +#define SYS_sched_setaffinity       241 +#define SYS_sched_getaffinity       242 +#define SYS_io_setup                245 +#define SYS_io_destroy              246 +#define SYS_io_getevents            247 +#define SYS_io_submit               248 +#define SYS_io_cancel               249 +#define SYS_fadvise64               250 +#define SYS_exit_group              252 +#define SYS_lookup_dcookie          253 +#define SYS_epoll_create            254 +#define SYS_epoll_ctl               255 +#define SYS_epoll_wait              256 +#define SYS_remap_file_pages        257 +#define SYS_set_tid_address         258 +#define SYS_timer_create            259 +#define SYS_timer_settime           260 +#define SYS_timer_gettime           261 +#define SYS_timer_getoverrun        262 +#define SYS_timer_delete            263 +#define SYS_clock_settime           264 +#define SYS_clock_gettime           265 +#define SYS_clock_getres            266 +#define SYS_clock_nanosleep         267 +#define SYS_statfs64                268 +#define SYS_fstatfs64               269 +#define SYS_tgkill                  270 +#define SYS_utimes                  271 +#define SYS_fadvise64_64            272 +#define SYS_mbind                   274 +#define SYS_get_mempolicy           275 +#define SYS_set_mempolicy           276 +#define SYS_mq_open                 277 +#define SYS_mq_unlink               278 +#define SYS_mq_timedsend            279 +#define SYS_mq_timedreceive         280 +#define SYS_mq_notify               281 +#define SYS_mq_getsetattr           282 +#define SYS_kexec_load              283 +#define SYS_waitid                  284 +#define SYS_add_key                 285 +#define SYS_request_key             286 +#define SYS_keyctl                  287 +#define SYS_ioprio_set              288 +#define SYS_ioprio_get              289 +#define SYS_inotify_init            290 +#define SYS_inotify_add_watch       291 +#define SYS_inotify_rm_watch        292 +#define SYS_migrate_pages           294 +#define SYS_openat                  295 +#define SYS_mkdirat                 296 +#define SYS_mknodat                 297 +#define SYS_fchownat                298 +#define SYS_futimesat               299 +#define SYS_fstatat64               300 +#define SYS_unlinkat                301 +#define SYS_renameat                302 +#define SYS_linkat                  303 +#define SYS_symlinkat               304 +#define SYS_readlinkat              305 +#define SYS_fchmodat                306 +#define SYS_faccessat               307 +#define SYS_pselect6                308 +#define SYS_ppoll                   309 +#define SYS_unshare                 310 +#define SYS_set_robust_list         311 +#define SYS_get_robust_list         312 +#define SYS_splice                  313 +#define SYS_sync_file_range         314 +#define SYS_tee                     315 +#define SYS_vmsplice                316 +#define SYS_move_pages              317 +#define SYS_getcpu                  318 +#define SYS_epoll_pwait             319 +#define SYS_utimensat               320 +#define SYS_signalfd                321 +#define SYS_timerfd_create          322 +#define SYS_eventfd                 323 +#define SYS_fallocate               324 +#define SYS_timerfd_settime         325 +#define SYS_timerfd_gettime         326 +#define SYS_signalfd4               327 +#define SYS_eventfd2                328 +#define SYS_epoll_create1           329 +#define SYS_dup3                    330 +#define SYS_pipe2                   331 +#define SYS_inotify_init1           332 +#define SYS_preadv                  333 +#define SYS_pwritev                 334 +#define SYS_rt_tgsigqueueinfo       335 +#define SYS_perf_event_open         336 +#define SYS_fanotify_init           337 +#define SYS_fanotify_mark           338 +#define SYS_prlimit64               339 +#define SYS_socket                  340 +#define SYS_bind                    341 +#define SYS_connect                 342 +#define SYS_listen                  343 +#define SYS_accept                  344 +#define SYS_getsockname             345 +#define SYS_getpeername             346 +#define SYS_socketpair              347 +#define SYS_send                    348 +#define SYS_sendto                  349 +#define SYS_recv                    350 +#define SYS_recvfrom                351 +#define SYS_shutdown                352 +#define SYS_setsockopt              353 +#define SYS_getsockopt              354 +#define SYS_sendmsg                 355 +#define SYS_recvmsg                 356 +#define SYS_recvmmsg                357 +#define SYS_accept4                 358 +#define SYS_name_to_handle_at       359 +#define SYS_open_by_handle_at       360 +#define SYS_clock_adjtime           361 +#define SYS_syncfs                  362 +#define SYS_sendmmsg                363 +#define SYS_setns                   364 +#define SYS_process_vm_readv        365 +#define SYS_process_vm_writev       366 +#define SYS_kcmp                    367 +#define SYS_finit_module            368 diff --git a/arch/superh/bits/termios.h b/arch/superh/bits/termios.h new file mode 100644 index 00000000..f0d81b13 --- /dev/null +++ b/arch/superh/bits/termios.h @@ -0,0 +1,160 @@ +struct termios +{ +	tcflag_t c_iflag; +	tcflag_t c_oflag; +	tcflag_t c_cflag; +	tcflag_t c_lflag; +	cc_t c_line; +	cc_t c_cc[NCCS]; +	speed_t __c_ispeed; +	speed_t __c_ospeed; +}; + +#define VINTR     0 +#define VQUIT     1 +#define VERASE    2 +#define VKILL     3 +#define VEOF      4 +#define VTIME     5 +#define VMIN      6 +#define VSWTC     7 +#define VSTART    8 +#define VSTOP     9 +#define VSUSP    10 +#define VEOL     11 +#define VREPRINT 12 +#define VDISCARD 13 +#define VWERASE  14 +#define VLNEXT   15 +#define VEOL2    16 + +#define IGNBRK  0000001 +#define BRKINT  0000002 +#define IGNPAR  0000004 +#define PARMRK  0000010 +#define INPCK   0000020 +#define ISTRIP  0000040 +#define INLCR   0000100 +#define IGNCR   0000200 +#define ICRNL   0000400 +#define IUCLC   0001000 +#define IXON    0002000 +#define IXANY   0004000 +#define IXOFF   0010000 +#define IMAXBEL 0020000 +#define IUTF8   0040000 + +#define OPOST  0000001 +#define OLCUC  0000002 +#define ONLCR  0000004 +#define OCRNL  0000010 +#define ONOCR  0000020 +#define ONLRET 0000040 +#define OFILL  0000100 +#define OFDEL  0000200 +#define NLDLY  0000400 +#define NL0    0000000 +#define NL1    0000400 +#define CRDLY  0003000 +#define CR0    0000000 +#define CR1    0001000 +#define CR2    0002000 +#define CR3    0003000 +#define TABDLY 0014000 +#define TAB0   0000000 +#define TAB1   0004000 +#define TAB2   0010000 +#define TAB3   0014000 +#define BSDLY  0020000 +#define BS0    0000000 +#define BS1    0020000 +#define FFDLY  0100000 +#define FF0    0000000 +#define FF1    0100000 + +#define VTDLY  0040000 +#define VT0    0000000 +#define VT1    0040000 + +#define B0       0000000 +#define B50      0000001 +#define B75      0000002 +#define B110     0000003 +#define B134     0000004 +#define B150     0000005 +#define B200     0000006 +#define B300     0000007 +#define B600     0000010 +#define B1200    0000011 +#define B1800    0000012 +#define B2400    0000013 +#define B4800    0000014 +#define B9600    0000015 +#define B19200   0000016 +#define B38400   0000017 + +#define B57600   0010001 +#define B115200  0010002 +#define B230400  0010003 +#define B460800  0010004 +#define B500000  0010005 +#define B576000  0010006 +#define B921600  0010007 +#define B1000000 0010010 +#define B1152000 0010011 +#define B1500000 0010012 +#define B2000000 0010013 +#define B2500000 0010014 +#define B3000000 0010015 +#define B3500000 0010016 +#define B4000000 0010017 + +#define CBAUD    0010017 + +#define CSIZE  0000060 +#define CS5    0000000 +#define CS6    0000020 +#define CS7    0000040 +#define CS8    0000060 +#define CSTOPB 0000100 +#define CREAD  0000200 +#define PARENB 0000400 +#define PARODD 0001000 +#define HUPCL  0002000 +#define CLOCAL 0004000 + +#define ISIG   0000001 +#define ICANON 0000002 +#define ECHO   0000010 +#define ECHOE  0000020 +#define ECHOK  0000040 +#define ECHONL 0000100 +#define NOFLSH 0000200 +#define TOSTOP 0000400 +#define IEXTEN 0100000 + +#define ECHOCTL 0001000 +#define ECHOPRT 0002000 +#define ECHOKE 0004000 +#define FLUSHO 0010000 +#define PENDIN 0040000 + +#define TCOOFF 0 +#define TCOON  1 +#define TCIOFF 2 +#define TCION  3 + +#define TCIFLUSH  0 +#define TCOFLUSH  1 +#define TCIOFLUSH 2 + +#define TCSANOW   0 +#define TCSADRAIN 1 +#define TCSAFLUSH 2 + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define CBAUDEX 0010000 +#define CRTSCTS  020000000000 +#define EXTPROC 0200000 +#define XTABS  0014000 +#endif diff --git a/arch/superh/crt_arch.h b/arch/superh/crt_arch.h new file mode 100644 index 00000000..a69d1c9f --- /dev/null +++ b/arch/superh/crt_arch.h @@ -0,0 +1,9 @@ +__asm__("\ +.global _start \n\ +_start: \n\ +	mov r15, r4 \n\ +	mov #-16, r0 \n\ +	and r0, r15 \n\ +	bsr __cstart \n\ +	nop \n\ +"); diff --git a/arch/superh/pthread_arch.h b/arch/superh/pthread_arch.h new file mode 100644 index 00000000..65c389ff --- /dev/null +++ b/arch/superh/pthread_arch.h @@ -0,0 +1,11 @@ +static inline struct pthread *__pthread_self() +{ +	char *self; +	__asm__ __volatile__ ("stc gbr,%0" : "=r" (self) ); +	return (struct pthread *) (self + 8 - sizeof(struct pthread)); +} + +#define TLS_ABOVE_TP +#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) - 8) + +#define CANCEL_REG_IP 17 diff --git a/arch/superh/reloc.h b/arch/superh/reloc.h new file mode 100644 index 00000000..97bee6ae --- /dev/null +++ b/arch/superh/reloc.h @@ -0,0 +1,47 @@ +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define ENDIAN_SUFFIX "l" +#else +#define ENDIAN_SUFFIX "" +#endif + +#define LDSO_ARCH "sh" ENDIAN_SUFFIX + +#define IS_COPY(x) ((x) == R_SH_COPY) +#define IS_PLT(x)  ((x) == R_SH_JMP_SLOT) + +static inline void do_single_reloc( +	struct dso *self, unsigned char *base_addr, +	size_t *reloc_addr, int type, size_t addend, +	Sym *sym, size_t sym_size, +	struct symdef def, size_t sym_val) +{ +	switch(type) { +	case R_SH_GLOB_DAT: +	case R_SH_JMP_SLOT: +		*reloc_addr = sym_val; +		break; +	case R_SH_RELATIVE: +		*reloc_addr = (size_t)base_addr + addend; +		break; +	case R_SH_DIR32: +		*reloc_addr = sym_val + addend; +		break; +	case R_SH_REL32: +		*reloc_addr = sym_val + addend - (size_t)reloc_addr + (size_t)base_addr; +		break; +	case R_SH_COPY: +		memcpy(reloc_addr, (void *)sym_val, sym_size); +		break; +	case R_SH_TLS_DTPMOD32: +		*reloc_addr += def.dso ? def.dso->tls_id : self->tls_id; +		break; +	case R_SH_TLS_DTPOFF32: +		*reloc_addr += def.sym->st_value; +		break; +	case R_SH_TLS_TPOFF32: +		*reloc_addr += def.sym +			? def.sym->st_value + def.dso->tls_offset + 8 +			: self->tls_offset + 8; +		break; +	} +} diff --git a/arch/superh/src/__fpsrc_values.c b/arch/superh/src/__fpsrc_values.c new file mode 100644 index 00000000..56056617 --- /dev/null +++ b/arch/superh/src/__fpsrc_values.c @@ -0,0 +1,2 @@ +/* used by gcc for switching the FPU between single and double precision */ +const unsigned long __fpscr_values[2] = { 0, 0x80000 }; diff --git a/arch/superh/src/atomic.c b/arch/superh/src/atomic.c new file mode 100644 index 00000000..d29b0538 --- /dev/null +++ b/arch/superh/src/atomic.c @@ -0,0 +1,146 @@ +#include "libc.h" + +#define LLSC_CLOBBERS   "r0", "t", "memory" +#define LLSC_START(mem)            \ +	"0:	movli.l @" mem ", r0\n" +#define LLSC_END(mem)              \ +	"1:	movco.l r0, @" mem "\n"    \ +	"	bf 0b\n"                   \ +	"	synco\n" + +/* gusa is a hack in the kernel which lets you create a sequence of instructions + * which will be restarted if the process is preempted in the middle of the + * sequence. It will do for implementing atomics on non-smp systems. ABI is: + * r0  = address of first instruction after the atomic sequence + * r1  = original stack pointer + * r15 = -1 * length of atomic sequence in bytes + */ +#define GUSA_CLOBBERS   "r0", "r1", "memory" +#define GUSA_START(mem,old,nop)    \ +	"	.align 2\n"                \ +	"	mova 1f, r0\n"             \ +	nop                            \ +	"	mov r15, r1\n"             \ +	"	mov #(0f-1f), r15\n"       \ +	"0:	mov.l @" mem ", " old "\n" +/* the target of mova must be 4 byte aligned, so we may need a nop */ +#define GUSA_START_ODD(mem,old)  GUSA_START(mem,old,"") +#define GUSA_START_EVEN(mem,old) GUSA_START(mem,old,"\tnop\n") +#define GUSA_END(mem,new)          \ +	"	mov.l " new ", @" mem "\n" \ +	"1:	mov r1, r15\n" + +#define CPU_HAS_LLSC 0x0040 + +int __sh_cas(volatile int *p, int t, int s) +{ +	int old; +	if (__hwcap & CPU_HAS_LLSC) { +		__asm__ __volatile__( +			LLSC_START("%1") +			"	mov r0, %0\n" +			"	cmp/eq %0, %2\n" +			"	bf 1f\n" +			"	mov %3, r0\n" +			LLSC_END("%1") +			: "=&r"(old) : "r"(p), "r"(t), "r"(s) : LLSC_CLOBBERS); +	} else { +		__asm__ __volatile__( +			GUSA_START_EVEN("%1", "%0") +			"	cmp/eq %0, %2\n" +			"	bf 1f\n" +			GUSA_END("%1", "%3") +			: "=&r"(old) : "r"(p), "r"(t), "r"(s) : GUSA_CLOBBERS, "t"); +	} +	return old; +} + +int __sh_swap(volatile int *x, int v) +{ +	int old; +	if (__hwcap & CPU_HAS_LLSC) { +		__asm__ __volatile__( +			LLSC_START("%1") +			"	mov r0, %0\n" +			"	mov %2, r0\n" +			LLSC_END("%1") +			: "=&r"(old) : "r"(x), "r"(v) : LLSC_CLOBBERS); +	} else { +		__asm__ __volatile__( +			GUSA_START_EVEN("%1", "%0") +			GUSA_END("%1", "%2") +			: "=&r"(old) : "r"(x), "r"(v) : GUSA_CLOBBERS); +	} +	return old; +} + +int __sh_fetch_add(volatile int *x, int v) +{ +	int old, dummy; +	if (__hwcap & CPU_HAS_LLSC) { +		__asm__ __volatile__( +			LLSC_START("%1") +			"	mov r0, %0\n" +			"	add %2, r0\n" +			LLSC_END("%1") +			: "=&r"(old) : "r"(x), "r"(v) : LLSC_CLOBBERS); +	} else { +		__asm__ __volatile__( +			GUSA_START_EVEN("%2", "%0") +			"	mov %0, %1\n" +			"	add %3, %1\n" +			GUSA_END("%2", "%1") +			: "=&r"(old), "=&r"(dummy) : "r"(x), "r"(v) : GUSA_CLOBBERS); +	} +	return old; +} + +void __sh_store(volatile int *p, int x) +{ +	if (__hwcap & CPU_HAS_LLSC) { +		__asm__ __volatile__( +			"	mov.l %1, @%0\n" +			"	synco\n" +			: : "r"(p), "r"(x) : "memory"); +	} else { +		__asm__ __volatile__( +			"	mov.l %1, @%0\n" +			: : "r"(p), "r"(x) : "memory"); +	} +} + +void __sh_and(volatile int *x, int v) +{ +	int dummy; +	if (__hwcap & CPU_HAS_LLSC) { +		__asm__ __volatile__( +			LLSC_START("%0") +			"	and %1, r0\n" +			LLSC_END("%0") +			: : "r"(x), "r"(v) : LLSC_CLOBBERS); +	} else { +		__asm__ __volatile__( +			GUSA_START_ODD("%1", "%0") +			"	and %2, %0\n" +			GUSA_END("%1", "%0") +			: "=&r"(dummy) : "r"(x), "r"(v) : GUSA_CLOBBERS); +	} +} + +void __sh_or(volatile int *x, int v) +{ +	int dummy; +	if (__hwcap & CPU_HAS_LLSC) { +		__asm__ __volatile__( +			LLSC_START("%0") +			"	or %1, r0\n" +			LLSC_END("%0") +			: : "r"(x), "r"(v) : LLSC_CLOBBERS); +	} else { +		__asm__ __volatile__( +			GUSA_START_ODD("%1", "%0") +			"	or %2, %0\n" +			GUSA_END("%1", "%0") +			: "=&r"(dummy) : "r"(x), "r"(v) : GUSA_CLOBBERS); +	} +} diff --git a/arch/superh/syscall_arch.h b/arch/superh/syscall_arch.h new file mode 100644 index 00000000..7ee21a56 --- /dev/null +++ b/arch/superh/syscall_arch.h @@ -0,0 +1,87 @@ +#define __SYSCALL_LL_E(x) \ +((union { long long ll; long l[2]; }){ .ll = x }).l[0], \ +((union { long long ll; long l[2]; }){ .ll = x }).l[1] +#define __SYSCALL_LL_O(x) __SYSCALL_LL_E((x)) + +/* The extra OR instructions are to work around a hardware bug: + * http://documentation.renesas.com/doc/products/mpumcu/tu/tnsh7456ae.pdf + */ +#define __asm_syscall(trapno, ...) do {   \ +	__asm__ __volatile__ (                \ +		"trapa #" #trapno "\n"            \ +		"or r0, r0\n"                     \ +		"or r0, r0\n"                     \ +		"or r0, r0\n"                     \ +		"or r0, r0\n"                     \ +		"or r0, r0\n"                     \ +	: "=r"(r0) : __VA_ARGS__ : "memory"); \ +	return r0;                            \ +	} while (0) + +static inline long __syscall0(long n) +{ +	register long r3 __asm__("r3") = n; +	register long r0 __asm__("r0"); +	__asm_syscall(16, "r"(r3)); +} + +static inline long __syscall1(long n, long a) +{ +	register long r3 __asm__("r3") = n; +	register long r4 __asm__("r4") = a; +	register long r0 __asm__("r0"); +	__asm_syscall(17, "r"(r3), "r"(r4)); +} + +static inline long __syscall2(long n, long a, long b) +{ +	register long r3 __asm__("r3") = n; +	register long r4 __asm__("r4") = a; +	register long r5 __asm__("r5") = b; +	register long r0 __asm__("r0"); +	__asm_syscall(18, "r"(r3), "r"(r4), "r"(r5)); +} + +static inline long __syscall3(long n, long a, long b, long c) +{ +	register long r3 __asm__("r3") = n; +	register long r4 __asm__("r4") = a; +	register long r5 __asm__("r5") = b; +	register long r6 __asm__("r6") = c; +	register long r0 __asm__("r0"); +	__asm_syscall(19, "r"(r3), "r"(r4), "r"(r5), "r"(r6)); +} + +static inline long __syscall4(long n, long a, long b, long c, long d) +{ +	register long r3 __asm__("r3") = n; +	register long r4 __asm__("r4") = a; +	register long r5 __asm__("r5") = b; +	register long r6 __asm__("r6") = c; +	register long r7 __asm__("r7") = d; +	register long r0 __asm__("r0"); +	__asm_syscall(20, "r"(r3), "r"(r4), "r"(r5), "r"(r6), "r"(r7)); +} + +static inline long __syscall5(long n, long a, long b, long c, long d, long e) +{ +	register long r3 __asm__("r3") = n; +	register long r4 __asm__("r4") = a; +	register long r5 __asm__("r5") = b; +	register long r6 __asm__("r6") = c; +	register long r7 __asm__("r7") = d; +	register long r0 __asm__("r0") = e; +	__asm_syscall(21, "r"(r3), "r"(r4), "r"(r5), "r"(r6), "r"(r7), "0"(r0)); +} + +static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) +{ +	register long r3 __asm__("r3") = n; +	register long r4 __asm__("r4") = a; +	register long r5 __asm__("r5") = b; +	register long r6 __asm__("r6") = c; +	register long r7 __asm__("r7") = d; +	register long r0 __asm__("r0") = e; +	register long r1 __asm__("r1") = f; +	__asm_syscall(22, "r"(r3), "r"(r4), "r"(r5), "r"(r6), "r"(r7), "0"(r0), "r"(r1)); +} @@ -229,6 +229,7 @@ x86_64*) ARCH=x86_64 ;;  mips-*|mipsel-*) ARCH=mips ;;  microblaze-*) ARCH=microblaze ;;  powerpc-*) ARCH=powerpc ;; +sh-*) ARCH=superh ;;  unknown) fail "$0: unable to detect target arch; try $0 --target=..." ;;  *) fail "$0: unknown or unsupported target \"$target\"" ;;  esac @@ -418,6 +419,9 @@ test "$ARCH" = "mips" && trycppif "_MIPSEL || __MIPSEL || __MIPSEL__" "$t" \  test "$ARCH" = "microblaze" && trycppif __MICROBLAZEEL__ "$t" \  && SUBARCH=${SUBARCH}el +test "$ARCH" = "superh" && trycppif __LITTLE_ENDIAN__ "$t" \ +&& SUBARCH=${SUBARCH}el +  test "$SUBARCH" \  && printf "configured for %s variant: %s\n" "$ARCH" "$ARCH$SUBARCH" diff --git a/crt/superh/crti.s b/crt/superh/crti.s new file mode 100644 index 00000000..0410ab63 --- /dev/null +++ b/crt/superh/crti.s @@ -0,0 +1,13 @@ +.section .init +.global  _init +.type    _init, @function +_init: +	sts.l pr, @-r15 +	nop + +.section .fini +.global  _fini +.type    _fini, @function +_fini: +	sts.l pr, @-r15 +	nop diff --git a/crt/superh/crtn.s b/crt/superh/crtn.s new file mode 100644 index 00000000..dde633b0 --- /dev/null +++ b/crt/superh/crtn.s @@ -0,0 +1,9 @@ +.section .init +	lds.l @r15+, pr +	rts +	 nop + +.section .fini +	lds.l @r15+, pr +	rts +	 nop diff --git a/src/fenv/superh/fenv.s b/src/fenv/superh/fenv.s new file mode 100644 index 00000000..7f5c6277 --- /dev/null +++ b/src/fenv/superh/fenv.s @@ -0,0 +1,74 @@ +.global fegetround +.type   fegetround, @function +fegetround: +	sts fpscr, r0 +	rts +	 and #3, r0 + +.global __fesetround +.type   __fesetround, @function +__fesetround: +	sts fpscr, r0 +	or  r4, r0 +	lds r0, fpscr +	rts +	 mov #0, r0 + +.global fetestexcept +.type   fetestexcept, @function +fetestexcept: +	sts fpscr, r0 +	and r4, r0 +	rts +	 and #0x7c, r0 + +.global feclearexcept +.type   feclearexcept, @function +feclearexcept: +	mov r4, r0 +	and #0x7c, r0 +	not r0, r4 +	sts fpscr, r0 +	and r4, r0 +	lds r0, fpscr +	rts +	 mov #0, r0 + +.global feraiseexcept +.type   feraiseexcept, @function +feraiseexcept: +	mov r4, r0 +	and #0x7c, r0 +	sts fpscr, r4 +	or  r4, r0 +	lds r0, fpscr +	rts +	 mov #0, r0 + +.global fegetenv +.type   fegetenv, @function +fegetenv: +	sts fpscr, r0 +	mov.l r0, @r4 +	rts +	 mov #0, r0 + +.global fesetenv +.type   fesetenv, @function +fesetenv: +	mov r4, r0 +	cmp/eq #-1, r0 +	bf 1f + +	! the default environment is complicated by the fact that we need to +	! preserve the current precision bit, which we do not know a priori +	sts fpscr, r0 +	mov #8, r1 +	swap.w r1, r1 +	bra 2f +	 and r1, r0 + +1:	mov.l @r4, r0      ! non-default environment +2:	lds r0, fpscr +	rts +	 mov #0, r0 diff --git a/src/internal/superh/syscall.s b/src/internal/superh/syscall.s new file mode 100644 index 00000000..a8fda1c0 --- /dev/null +++ b/src/internal/superh/syscall.s @@ -0,0 +1,22 @@ +.global __syscall +.type   __syscall, @function +__syscall: +	! The kernel syscall entry point documents that the trap number indicates +	! the number of arguments being passed, but it then ignores that information. +	! Since we do not actually know how many arguments are being passed, we will +	! say there are six, since that is the maximum we support here. +	mov r4, r3 +	mov r5, r4 +	mov r6, r5 +	mov r7, r6 +	mov.l @r15, r7 +	mov.l @(4,r15), r0 +	mov.l @(8,r15), r1 +	trapa #22 +	or r0, r0 +	or r0, r0 +	or r0, r0 +	or r0, r0 +	or r0, r0 +	rts +	 nop diff --git a/src/ldso/superh/dlsym.s b/src/ldso/superh/dlsym.s new file mode 100644 index 00000000..8258507f --- /dev/null +++ b/src/ldso/superh/dlsym.s @@ -0,0 +1,10 @@ +.text +.global dlsym +.type   dlsym, @function +dlsym: +	mov.l L1, r0 +	braf  r0 +1:	 mov.l @r15, r6 + +.align 2 +L1:	.long __dlsym@PLT-(1b-.) diff --git a/src/ldso/superh/start.s b/src/ldso/superh/start.s new file mode 100644 index 00000000..ca6b7fc9 --- /dev/null +++ b/src/ldso/superh/start.s @@ -0,0 +1,26 @@ +.text +.global _start +.type   _start, @function +_start: +	mov.l  @r15, r4 +	mov    r15, r5 +	mov.l  L1, r0 +	bsrf   r0 +	 add   #4, r5 + +2:	mov    r0, r2 +	mov.l  @r15+, r1 +1:	mov.l  @r15+, r0 +	cmp/eq #-1, r0 +	bt/s   1b +	 add   #-1, r1 + +	add    #1, r1 +	mov.l  r0, @-r15 +	mov.l  r1, @-r15 +	mov    #0, r4 +	jmp    @r2 +	 nop + +.align 2 +L1:	.long __dynlink@PLT-(2b-.) diff --git a/src/setjmp/superh/longjmp.s b/src/setjmp/superh/longjmp.s new file mode 100644 index 00000000..e9aa4e50 --- /dev/null +++ b/src/setjmp/superh/longjmp.s @@ -0,0 +1,26 @@ +.global _longjmp +.global longjmp +.type   _longjmp, @function +.type   longjmp,  @function +_longjmp: +longjmp: +	mov.l  @r4+, r8 +	mov.l  @r4+, r9 +	mov.l  @r4+, r10 +	mov.l  @r4+, r11 +	mov.l  @r4+, r12 +	mov.l  @r4+, r13 +	mov.l  @r4+, r14 +	mov.l  @r4+, r15 +	lds.l  @r4+, pr +	fmov.s @r4+, fr12 +	fmov.s @r4+, fr13 +	fmov.s @r4+, fr14 +	fmov.s @r4+, fr15 + +	tst  r5, r5 +	movt r0 +	add  r5, r0 + +	rts +	 nop diff --git a/src/setjmp/superh/setjmp.s b/src/setjmp/superh/setjmp.s new file mode 100644 index 00000000..6127ed90 --- /dev/null +++ b/src/setjmp/superh/setjmp.s @@ -0,0 +1,25 @@ +.global __setjmp +.global _setjmp +.global setjmp +.type   __setjmp, @function +.type   _setjmp,  @function +.type   setjmp,   @function +__setjmp: +_setjmp: +setjmp: +	add   #52, r4 +	fmov.s fr15, @-r4 +	fmov.s fr14, @-r4 +	fmov.s fr13, @-r4 +	fmov.s fr12, @-r4 +	sts.l  pr,   @-r4 +	mov.l  r15   @-r4 +	mov.l  r14,  @-r4 +	mov.l  r13,  @-r4 +	mov.l  r12,  @-r4 +	mov.l  r11,  @-r4 +	mov.l  r10,  @-r4 +	mov.l  r9,   @-r4 +	mov.l  r8,   @-r4 +	rts +	 mov  #0, r0 diff --git a/src/signal/superh/restore.s b/src/signal/superh/restore.s new file mode 100644 index 00000000..ab26034b --- /dev/null +++ b/src/signal/superh/restore.s @@ -0,0 +1,24 @@ +.global __restore +.type   __restore, @function +__restore: +	mov   #119, r3  !__NR_sigreturn +	trapa #16 + +	or    r0, r0 +	or    r0, r0 +	or    r0, r0 +	or    r0, r0 +	or    r0, r0 + +.global __restore_rt +.type   __restore_rt, @function +__restore_rt: +	mov   #100, r3  !__NR_rt_sigreturn +	add   #73, r3 +	trapa #16 + +	or    r0, r0 +	or    r0, r0 +	or    r0, r0 +	or    r0, r0 +	or    r0, r0 diff --git a/src/signal/superh/sigsetjmp.s b/src/signal/superh/sigsetjmp.s new file mode 100644 index 00000000..f6cae801 --- /dev/null +++ b/src/signal/superh/sigsetjmp.s @@ -0,0 +1,27 @@ +.global sigsetjmp +.type   sigsetjmp, @function +sigsetjmp: +	mov.l r5, @(36,r4) +	tst r5, r5 +	bf  2f + +	sts.l pr, @-r15 +	mov.l r4, @-r15 +	mov r4, r6 +	add #40, r6 +	mov #0, r5 +	mov #2, r4 +	mov.l L1, r0 +	bsrf  r0 +	 nop +1:	mov.l @r15+, r4 +	lds.l @r15+, pr + +2:	mov.l L2, r0 +	braf  r0 +	 nop +3: + +.align 2 +L1:	.long pthread_sigmask@PLT-(1b-.) +L2:	.long setjmp@PLT-(3b-.) diff --git a/src/thread/superh/__set_thread_area.s b/src/thread/superh/__set_thread_area.s new file mode 100644 index 00000000..53887e64 --- /dev/null +++ b/src/thread/superh/__set_thread_area.s @@ -0,0 +1,5 @@ +.global __set_thread_area +.type   __set_thread_area, @function +__set_thread_area: +	rts +	 ldc r4, gbr diff --git a/src/thread/superh/__unmapself.s b/src/thread/superh/__unmapself.s new file mode 100644 index 00000000..b34c3c80 --- /dev/null +++ b/src/thread/superh/__unmapself.s @@ -0,0 +1,22 @@ +.text +.global __unmapself +.type   __unmapself, @function +__unmapself: +	mov   #91, r3  ! SYS_munmap +	trapa #18 + +	or    r0, r0 +	or    r0, r0 +	or    r0, r0 +	or    r0, r0 +	or    r0, r0 + +	mov   #1, r3   ! SYS_exit +	mov   #0, r4 +	trapa #17 + +	or    r0, r0 +	or    r0, r0 +	or    r0, r0 +	or    r0, r0 +	or    r0, r0 diff --git a/src/thread/superh/clone.s b/src/thread/superh/clone.s new file mode 100644 index 00000000..d6c9184d --- /dev/null +++ b/src/thread/superh/clone.s @@ -0,0 +1,47 @@ +.text +.global __clone +.type   __clone, @function +__clone: +! incoming: fn stack flags arg ptid tls      ctid +!           r4 r5    r6    r7  @r15 @(4,r15) @(8,r15) + +	mov   #-16, r0 +	and   r0, r5 + +	mov   r4, r1         ! r1 = fn +	mov   r7, r2         ! r2 = arg + +	mov   #120,     r3   ! r3 = __NR_clone +	mov   r6,       r4   ! r4 = flags +	!mov  r5,       r5   ! r5 = stack +	mov.l @r15,     r6   ! r6 = ptid +	mov.l @(8,r15), r7   ! r7 = ctid +	mov.l @(4,r15), r0   ! r0 = tls +	trapa #21 + +	or r0, r0 +	or r0, r0 +	or r0, r0 +	or r0, r0 +	or r0, r0 + +	cmp/eq #0, r0 +	bt     1f + +	! we are the parent, return +	rts +	 nop + +1:	! we are the child, call fn(arg) +	jsr    @r1 +	 mov   r2, r4 + +	mov   #1, r3   ! __NR_exit +	mov   r0, r4 +	trapa #17 + +	or   r0, r0 +	or   r0, r0 +	or   r0, r0 +	or   r0, r0 +	or   r0, r0 diff --git a/src/thread/superh/syscall_cp.s b/src/thread/superh/syscall_cp.s new file mode 100644 index 00000000..5677b9c0 --- /dev/null +++ b/src/thread/superh/syscall_cp.s @@ -0,0 +1,39 @@ +.text +.global __syscall_cp_asm +.type   __syscall_cp_asm, @function +__syscall_cp_asm: + +.global __cp_begin +__cp_begin: +	mov.l @r4, r4 +	tst   r4, r4 +	bt    2f + +	mov.l L1, r0 +	braf  r0 +	 nop +1: + +.align 2 +L1:	.long __cancel@PLT-(1b-.) + +2:	mov   r5, r3 +	mov   r6, r4 +	mov   r7, r5 +	mov.l @r15, r6 +	mov.l @(4,r15), r7 +	mov.l @(8,r15), r0 +	mov.l @(12,r15), r1 +	trapa #22 + +.global __cp_end +__cp_end: +	! work around hardware bug +	or   r0, r0 +	or   r0, r0 +	or   r0, r0 +	or   r0, r0 +	or   r0, r0 + +	rts +	 nop diff --git a/src/unistd/superh/pipe.s b/src/unistd/superh/pipe.s new file mode 100644 index 00000000..d865ae3a --- /dev/null +++ b/src/unistd/superh/pipe.s @@ -0,0 +1,27 @@ +.global pipe +.type   pipe, @function +pipe: +	mov    #42, r3 +	trapa  #17 + +	! work around hardware bug +	or     r0, r0 +	or     r0, r0 +	or     r0, r0 +	or     r0, r0 +	or     r0, r0 + +	cmp/pz r0 +	bt     1f + +	mov.l  L1, r1 +	braf   r1 +	 mov   r0, r4 + +1:	mov.l  r0, @(0,r4) +	mov.l  r1, @(4,r4) +	rts +	 mov   #0, r0 + +.align 2 +L1:	.long __syscall_ret@PLT-(1b-.) | 
