diff options
| author | Rich Felker <dalias@aerifal.cx> | 2012-09-29 01:05:31 -0400 | 
|---|---|---|
| committer | Rich Felker <dalias@aerifal.cx> | 2012-09-29 01:05:31 -0400 | 
| commit | 8c0a3d9e5c169fc9d0f246ab59362b658b029ad7 (patch) | |
| tree | 6ac54202768db511e8bb959d85060adb98cbf226 | |
| parent | e0ea44cb764fcdbe8515f22096930bede2c7896f (diff) | |
| download | musl-8c0a3d9e5c169fc9d0f246ab59362b658b029ad7.tar.gz | |
microblaze port
based on initial work by rdp, with heavy modifications. some features
including threads are untested because qemu app-level emulation seems
to be broken and I do not have a proper system image for testing.
45 files changed, 2213 insertions, 0 deletions
diff --git a/arch/microblaze/atomic.h b/arch/microblaze/atomic.h new file mode 100644 index 00000000..ee7aa256 --- /dev/null +++ b/arch/microblaze/atomic.h @@ -0,0 +1,151 @@ +#ifndef _INTERNAL_ATOMIC_H +#define _INTERNAL_ATOMIC_H + +#include <stdint.h> + +static inline int a_ctz_l(unsigned long x) +{ +	static const char debruijn32[32] = { +		0, 1, 23, 2, 29, 24, 19, 3, 30, 27, 25, 11, 20, 8, 4, 13, +		31, 22, 28, 18, 26, 10, 7, 12, 21, 17, 9, 6, 16, 5, 15, 14 +	}; +	return debruijn32[(x&-x)*0x076be629 >> 27]; +} + +static inline int a_ctz_64(uint64_t x) +{ +	uint32_t y = x; +	if (!y) { +		y = x>>32; +		return 32 + a_ctz_l(y); +	} +	return a_ctz_l(y); +} + +static inline int a_cas_1(volatile int *p, int t, int s) +{ +	register int tmp; +	do { +		__asm__ __volatile__ ("lwx %0, %1, r0" +			: "=r"(tmp) : "r"(p) : "memory"); +		if (tmp != t) return tmp; +		__asm__ __volatile__ ("swx %2, %1, r0 ; addic %0, r0, 0" +			: "=r"(tmp) : "r"(p), "r"(s) : "cc", "memory"); +	} while (tmp); +	return t; +} + +static inline int a_cas(volatile int *p, int t, int s) +{ +	register int old, tmp; +	__asm__ __volatile__ ( +		"	addi %0, r0, 0\n" +		"1:	lwx %0, %2, r0\n" +		"	rsubk %1, %0, %3\n" +		"	bnei %1, 1f\n" +		"	swx %4, %2, r0\n" +		"	addic %1, r0, 0\n" +		"	bnei %1, 1b\n" +		"1:	" +		: "=&r"(old), "=&r"(tmp) +		: "r"(p), "r"(t), "r"(s) +		: "cc", "memory" ); +	return old; +} + +static inline void *a_cas_p(volatile void *p, void *t, void *s) +{ +	return (void *)a_cas(p, (int)t, (int)s); +} + +static inline long a_cas_l(volatile void *p, long t, long s) +{ +	return a_cas(p, t, s); +} + +static inline int a_swap(volatile int *x, int v) +{ +	register int old, tmp; +	__asm__ __volatile__ ( +		"	addi %0, r0, 0\n" +		"1:	lwx %0, %2, r0\n" +		"	swx %3, %2, r0\n" +		"	addic %1, r0, 0\n" +		"	bnei %1, 1b\n" +		"1:	" +		: "=&r"(old), "=&r"(tmp) +		: "r"(x), "r"(v) +		: "cc", "memory" ); +	return old; +} + +static inline int a_fetch_add(volatile int *x, int v) +{ +	register int new, tmp; +	__asm__ __volatile__ ( +		"	addi %0, r0, 0\n" +		"1:	lwx %0, %2, r0\n" +		"	addk %0, %0, %3\n" +		"	swx %0, %2, r0\n" +		"	addic %1, r0, 0\n" +		"	bnei %1, 1b\n" +		"1:	" +		: "=&r"(new), "=&r"(tmp) +		: "r"(x), "r"(v) +		: "cc", "memory" ); +	return new-v; +} + +static inline void a_inc(volatile int *x) +{ +	a_fetch_add(x, 1); +} + +static inline void a_dec(volatile int *x) +{ +	a_fetch_add(x, -1); +} + +static inline void a_store(volatile int *p, int x) +{ +	*p=x; +} + +static inline void a_spin() +{ +} + +static inline void a_crash() +{ +	*(volatile char *)0=0; +} + +static inline void a_and(volatile int *p, int v) +{ +	int old; +	do old = *p; +	while (a_cas(p, old, old&v) != old); +} + +static inline void a_or(volatile int *p, int v) +{ +	int old; +	do old = *p; +	while (a_cas(p, old, old|v) != old); +} + +static inline void a_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/microblaze/bits/alltypes.h.sh b/arch/microblaze/bits/alltypes.h.sh new file mode 100755 index 00000000..c909bc37 --- /dev/null +++ b/arch/microblaze/bits/alltypes.h.sh @@ -0,0 +1,122 @@ +#!/bin/sh +sed -e << EOF \ +'/^TYPEDEF/s/TYPEDEF \(.*\) \([^ ]*\);$/#if defined(__NEED_\2) \&\& !defined(__DEFINED_\2)\ +typedef \1 \2;\ +#define __DEFINED_\2\ +#endif\ +/ +/^STRUCT/s/STRUCT * \([^ ]*\) \(.*\);$/#if defined(__NEED_struct_\1) \&\& !defined(__DEFINED_struct_\1)\ +struct \1 \2;\ +#define __DEFINED_struct_\1\ +#endif\ +/ +/^UNION/s/UNION * \([^ ]*\) \(.*\);$/#if defined(__NEED_union_\1) \&\& !defined(__DEFINED_union_\1)\ +union \1 \2;\ +#define __DEFINED_union_\1\ +#endif\ +/' + +TYPEDEF unsigned size_t; +TYPEDEF int ssize_t; +TYPEDEF int ptrdiff_t; + +TYPEDEF __builtin_va_list va_list; + +#ifndef __cplusplus +TYPEDEF int wchar_t; +#endif +TYPEDEF int wint_t; +TYPEDEF long wctrans_t; +TYPEDEF long wctype_t; + +TYPEDEF signed char int8_t; +TYPEDEF short       int16_t; +TYPEDEF int         int32_t; +TYPEDEF long long   int64_t; + +TYPEDEF unsigned char      uint8_t; +TYPEDEF unsigned short     uint16_t; +TYPEDEF unsigned int       uint32_t; +TYPEDEF unsigned long long uint64_t; + +TYPEDEF unsigned short     __uint16_t; +TYPEDEF unsigned int       __uint32_t; +TYPEDEF unsigned long long __uint64_t; + +TYPEDEF int8_t    int_fast8_t; +TYPEDEF int       int_fast16_t; +TYPEDEF int       int_fast32_t; +TYPEDEF int64_t   int_fast64_t; + +TYPEDEF unsigned char      uint_fast8_t; +TYPEDEF unsigned int       uint_fast16_t; +TYPEDEF unsigned int       uint_fast32_t; +TYPEDEF uint64_t           uint_fast64_t; + +TYPEDEF long          intptr_t; +TYPEDEF unsigned long uintptr_t; + +TYPEDEF float float_t; +TYPEDEF double double_t; + +TYPEDEF long time_t; +TYPEDEF int suseconds_t; +STRUCT timeval { time_t tv_sec; int tv_usec; }; +STRUCT timespec { time_t tv_sec; long tv_nsec; }; + +TYPEDEF int pid_t; +TYPEDEF int id_t; +TYPEDEF int uid_t; +TYPEDEF int gid_t; +TYPEDEF int key_t; + +TYPEDEF struct __pthread * pthread_t; +TYPEDEF int pthread_once_t; +TYPEDEF int pthread_key_t; +TYPEDEF int pthread_spinlock_t; + +TYPEDEF struct { union { int __i[9]; size_t __s[9]; } __u; } pthread_attr_t; +TYPEDEF unsigned pthread_mutexattr_t; +TYPEDEF unsigned pthread_condattr_t; +TYPEDEF unsigned pthread_barrierattr_t; +TYPEDEF struct { unsigned __attr[2]; } pthread_rwlockattr_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; + +TYPEDEF long long off_t; + +TYPEDEF unsigned int mode_t; + +TYPEDEF unsigned int nlink_t; +TYPEDEF unsigned long long ino_t; +TYPEDEF long long dev_t; +TYPEDEF long blksize_t; +TYPEDEF long long blkcnt_t; +TYPEDEF unsigned long long fsblkcnt_t; +TYPEDEF unsigned long long fsfilcnt_t; + +TYPEDEF void * timer_t; +TYPEDEF int clockid_t; +TYPEDEF unsigned long clock_t; + +TYPEDEF struct { unsigned long __bits[128/sizeof(long)]; } sigset_t; +TYPEDEF struct __siginfo siginfo_t; + +TYPEDEF unsigned int socklen_t; +TYPEDEF unsigned short sa_family_t; +TYPEDEF unsigned short in_port_t; +TYPEDEF unsigned int in_addr_t; +STRUCT in_addr { in_addr_t s_addr; }; + +TYPEDEF struct __FILE_s FILE; + +TYPEDEF int nl_item; + +TYPEDEF struct __locale * locale_t; + +STRUCT iovec { void *iov_base; size_t iov_len; }; + +EOF diff --git a/arch/microblaze/bits/endian.h b/arch/microblaze/bits/endian.h new file mode 100644 index 00000000..ef074b77 --- /dev/null +++ b/arch/microblaze/bits/endian.h @@ -0,0 +1 @@ +#define __BYTE_ORDER __BIG_ENDIAN diff --git a/arch/microblaze/bits/errno.h b/arch/microblaze/bits/errno.h new file mode 100644 index 00000000..c75720ef --- /dev/null +++ b/arch/microblaze/bits/errno.h @@ -0,0 +1,133 @@ +#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 diff --git a/arch/microblaze/bits/fcntl.h b/arch/microblaze/bits/fcntl.h new file mode 100644 index 00000000..04b7484c --- /dev/null +++ b/arch/microblaze/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_SEARCH  010000000 +#define O_EXEC    010000000 + +#define O_ASYNC      020000 +#define O_DIRECT     040000 +#define O_LARGEFILE 0100000 +#define O_NOATIME  01000000 +#define O_NDELAY O_NONBLOCK +#define O_PATH    010000000 + +#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 diff --git a/arch/microblaze/bits/fenv.h b/arch/microblaze/bits/fenv.h new file mode 100644 index 00000000..edbdea2a --- /dev/null +++ b/arch/microblaze/bits/fenv.h @@ -0,0 +1,10 @@ +#define FE_ALL_EXCEPT 0 +#define FE_TONEAREST  0 + +typedef unsigned long fexcept_t; + +typedef struct { +	unsigned long __cw; +} fenv_t; + +#define FE_DFL_ENV      ((const fenv_t *) -1) diff --git a/arch/microblaze/bits/float.h b/arch/microblaze/bits/float.h new file mode 100644 index 00000000..dce9e2d9 --- /dev/null +++ b/arch/microblaze/bits/float.h @@ -0,0 +1,16 @@ +#define FLT_ROUNDS 1 +#define FLT_EVAL_METHOD 0 + +#define LDBL_MIN 2.2250738585072014e-308 +#define LDBL_MAX 1.7976931348623157e+308 +#define LDBL_EPSILON 2.2204460492503131e-16 + +#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/microblaze/bits/ioctl.h b/arch/microblaze/bits/ioctl.h new file mode 100644 index 00000000..336c71c3 --- /dev/null +++ b/arch/microblaze/bits/ioctl.h @@ -0,0 +1,197 @@ +#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(1,(a),(b),sizeof(c)) +#define _IOR(a,b,c) _IOC(2,(a),(b),sizeof(c)) +#define _IOWR(a,b,c) _IOC(3,(a),(b),sizeof(c)) + +#define TCGETS		0x5401 +#define TCSETS		0x5402 +#define TCSETSW		0x5403 +#define TCSETSF		0x5404 +#define TCGETA		0x5405 +#define TCSETA		0x5406 +#define TCSETAW		0x5407 +#define TCSETAF		0x5408 +#define TCSBRK		0x5409 +#define TCXONC		0x540A +#define TCFLSH		0x540B +#define TIOCEXCL	0x540C +#define TIOCNXCL	0x540D +#define TIOCSCTTY	0x540E +#define TIOCGPGRP	0x540F +#define TIOCSPGRP	0x5410 +#define TIOCOUTQ	0x5411 +#define TIOCSTI		0x5412 +#define TIOCGWINSZ	0x5413 +#define TIOCSWINSZ	0x5414 +#define TIOCMGET	0x5415 +#define TIOCMBIS	0x5416 +#define TIOCMBIC	0x5417 +#define TIOCMSET	0x5418 +#define TIOCGSOFTCAR	0x5419 +#define TIOCSSOFTCAR	0x541A +#define FIONREAD	0x541B +#define TIOCINQ		FIONREAD +#define TIOCLINUX	0x541C +#define TIOCCONS	0x541D +#define TIOCGSERIAL	0x541E +#define TIOCSSERIAL	0x541F +#define TIOCPKT		0x5420 +#define FIONBIO		0x5421 +#define TIOCNOTTY	0x5422 +#define TIOCSETD	0x5423 +#define TIOCGETD	0x5424 +#define TCSBRKP		0x5425 +#define TIOCTTYGSTRUCT	0x5426 +#define TIOCSBRK	0x5427 +#define TIOCCBRK	0x5428 +#define TIOCGSID	0x5429 +#define TIOCGPTN	0x80045430 +#define TIOCSPTLCK	0x40045431 +#define TCGETX		0x5432 +#define TCSETX		0x5433 +#define TCSETXF		0x5434 +#define TCSETXW		0x5435 + +#define FIONCLEX	0x5450 +#define FIOCLEX		0x5451 +#define FIOASYNC	0x5452 +#define TIOCSERCONFIG	0x5453 +#define TIOCSERGWILD	0x5454 +#define TIOCSERSWILD	0x5455 +#define TIOCGLCKTRMIOS	0x5456 +#define TIOCSLCKTRMIOS	0x5457 +#define TIOCSERGSTRUCT	0x5458 +#define TIOCSERGETLSR   0x5459 +#define TIOCSERGETMULTI 0x545A +#define TIOCSERSETMULTI 0x545B + +#define TIOCMIWAIT	0x545C +#define TIOCGICOUNT	0x545D +#define TIOCGHAYESESP   0x545E +#define TIOCSHAYESESP   0x545F +#define FIOQSIZE	0x5460 + +#define TIOCPKT_DATA		 0 +#define TIOCPKT_FLUSHREAD	 1 +#define TIOCPKT_FLUSHWRITE	 2 +#define TIOCPKT_STOP		 4 +#define TIOCPKT_START		 8 +#define TIOCPKT_NOSTOP		16 +#define TIOCPKT_DOSTOP		32 +#define TIOCPKT_IOCTL		64 + +#define TIOCSER_TEMT    0x01 + +struct winsize { +	unsigned short ws_row; +	unsigned short ws_col; +	unsigned short ws_xpixel; +	unsigned short ws_ypixel; +}; + +#define TIOCM_LE        0x001 +#define TIOCM_DTR       0x002 +#define TIOCM_RTS       0x004 +#define TIOCM_ST        0x008 +#define TIOCM_SR        0x010 +#define TIOCM_CTS       0x020 +#define TIOCM_CAR       0x040 +#define TIOCM_RNG       0x080 +#define TIOCM_DSR       0x100 +#define TIOCM_CD        TIOCM_CAR +#define TIOCM_RI        TIOCM_RNG +#define TIOCM_OUT1      0x2000 +#define TIOCM_OUT2      0x4000 +#define TIOCM_LOOP      0x8000 +#define TIOCM_MODEM_BITS TIOCM_OUT2 + +#define N_TTY           0 +#define N_SLIP          1 +#define N_MOUSE         2 +#define N_PPP           3 +#define N_STRIP         4 +#define N_AX25          5 +#define N_X25           6 +#define N_6PACK         7 +#define N_MASC          8 +#define N_R3964         9 +#define N_PROFIBUS_FDL  10 +#define N_IRDA          11 +#define N_SMSBLOCK      12 +#define N_HDLC          13 +#define N_SYNC_PPP      14 +#define N_HCI           15 + +#define FIOSETOWN       0x8901 +#define SIOCSPGRP       0x8902 +#define FIOGETOWN       0x8903 +#define SIOCGPGRP       0x8904 +#define SIOCATMARK      0x8905 +#define SIOCGSTAMP      0x8906 + +#define SIOCADDRT       0x890B +#define SIOCDELRT       0x890C +#define SIOCRTMSG       0x890D + +#define SIOCGIFNAME     0x8910 +#define SIOCSIFLINK     0x8911 +#define SIOCGIFCONF     0x8912 +#define SIOCGIFFLAGS    0x8913 +#define SIOCSIFFLAGS    0x8914 +#define SIOCGIFADDR     0x8915 +#define SIOCSIFADDR     0x8916 +#define SIOCGIFDSTADDR  0x8917 +#define SIOCSIFDSTADDR  0x8918 +#define SIOCGIFBRDADDR  0x8919 +#define SIOCSIFBRDADDR  0x891a +#define SIOCGIFNETMASK  0x891b +#define SIOCSIFNETMASK  0x891c +#define SIOCGIFMETRIC   0x891d +#define SIOCSIFMETRIC   0x891e +#define SIOCGIFMEM      0x891f +#define SIOCSIFMEM      0x8920 +#define SIOCGIFMTU      0x8921 +#define SIOCSIFMTU      0x8922 +#define SIOCSIFHWADDR   0x8924 +#define SIOCGIFENCAP    0x8925 +#define SIOCSIFENCAP    0x8926 +#define SIOCGIFHWADDR   0x8927 +#define SIOCGIFSLAVE    0x8929 +#define SIOCSIFSLAVE    0x8930 +#define SIOCADDMULTI    0x8931 +#define SIOCDELMULTI    0x8932 +#define SIOCGIFINDEX    0x8933 +#define SIOGIFINDEX     SIOCGIFINDEX +#define SIOCSIFPFLAGS   0x8934 +#define SIOCGIFPFLAGS   0x8935 +#define SIOCDIFADDR     0x8936 +#define SIOCSIFHWBROADCAST 0x8937 +#define SIOCGIFCOUNT    0x8938 + +#define SIOCGIFBR       0x8940 +#define SIOCSIFBR       0x8941 + +#define SIOCGIFTXQLEN   0x8942 +#define SIOCSIFTXQLEN   0x8943 + +#define SIOCDARP        0x8953 +#define SIOCGARP        0x8954 +#define SIOCSARP        0x8955 + +#define SIOCDRARP       0x8960 +#define SIOCGRARP       0x8961 +#define SIOCSRARP       0x8962 + +#define SIOCGIFMAP      0x8970 +#define SIOCSIFMAP      0x8971 + +#define SIOCADDDLCI     0x8980 +#define SIOCDELDLCI     0x8981 + +#define SIOCDEVPRIVATE		0x89F0 +#define SIOCPROTOPRIVATE	0x89E0 diff --git a/arch/microblaze/bits/ipc.h b/arch/microblaze/bits/ipc.h new file mode 100644 index 00000000..b748d3b7 --- /dev/null +++ b/arch/microblaze/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/microblaze/bits/limits.h b/arch/microblaze/bits/limits.h new file mode 100644 index 00000000..65a3dd64 --- /dev/null +++ b/arch/microblaze/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/microblaze/bits/mman.h b/arch/microblaze/bits/mman.h new file mode 100644 index 00000000..03f961e8 --- /dev/null +++ b/arch/microblaze/bits/mman.h @@ -0,0 +1,50 @@ +#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 POSIX_MADV_NORMAL       0 +#define POSIX_MADV_RANDOM       1 +#define POSIX_MADV_SEQUENTIAL   2 +#define POSIX_MADV_WILLNEED     3 +#define POSIX_MADV_DONTNEED     0 + +#define MS_ASYNC        1 +#define MS_INVALIDATE   2 +#define MS_SYNC         4 + +#define MCL_CURRENT     1 +#define MCL_FUTURE      2 + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +#define MADV_NORMAL      0 +#define MADV_RANDOM      1 +#define MADV_SEQUENTIAL  2 +#define MADV_WILLNEED    3 +#define MADV_DONTNEED    4 +#define MADV_REMOVE      9 +#define MADV_DONTFORK    10 +#define MADV_DOFORK      11 +#define MADV_MERGEABLE   12 +#define MADV_UNMERGEABLE 13 +#define MADV_HUGEPAGE    14 +#define MADV_NOHUGEPAGE  15 +#define MADV_HWPOISON    100 + +#define MREMAP_MAYMOVE  1 +#define MREMAP_FIXED    2 +#endif diff --git a/arch/microblaze/bits/msg.h b/arch/microblaze/bits/msg.h new file mode 100644 index 00000000..3db8576b --- /dev/null +++ b/arch/microblaze/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/microblaze/bits/posix.h b/arch/microblaze/bits/posix.h new file mode 100644 index 00000000..30a38714 --- /dev/null +++ b/arch/microblaze/bits/posix.h @@ -0,0 +1,2 @@ +#define _POSIX_V6_ILP32_OFFBIG  1 +#define _POSIX_V7_ILP32_OFFBIG  1 diff --git a/arch/microblaze/bits/reg.h b/arch/microblaze/bits/reg.h new file mode 100644 index 00000000..0c7bffca --- /dev/null +++ b/arch/microblaze/bits/reg.h @@ -0,0 +1,3 @@ +#undef __WORDSIZE +#define __WORDSIZE 32 +/* FIXME */ diff --git a/arch/microblaze/bits/setjmp.h b/arch/microblaze/bits/setjmp.h new file mode 100644 index 00000000..8f0376b2 --- /dev/null +++ b/arch/microblaze/bits/setjmp.h @@ -0,0 +1 @@ +typedef unsigned long jmp_buf[18]; diff --git a/arch/microblaze/bits/shm.h b/arch/microblaze/bits/shm.h new file mode 100644 index 00000000..8807c4fb --- /dev/null +++ b/arch/microblaze/bits/shm.h @@ -0,0 +1,18 @@ +#define SHMLBA 4096 + +struct shmid_ds +{ +	struct ipc_perm shm_perm; +	size_t shm_segsz; +	time_t shm_atime; +	int __unused1; +	time_t shm_dtime; +	int __unused2; +	time_t shm_ctime; +	int __unused3; +	pid_t shm_cpid; +	pid_t shm_lpid; +	unsigned long shm_nattch; +	unsigned long __pad1; +	unsigned long __pad2; +}; diff --git a/arch/microblaze/bits/signal.h b/arch/microblaze/bits/signal.h new file mode 100644 index 00000000..0358245d --- /dev/null +++ b/arch/microblaze/bits/signal.h @@ -0,0 +1,75 @@ +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) + +typedef struct { +	unsigned long __regs[39]; +} mcontext_t; + +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 + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) +struct sigcontext +{ +	struct { +		unsigned long r0, r1, r2, r3, r4, r5, r6, r7; +		unsigned long r8, r9, r10, r11, r12, r13, r14, r15; +		unsigned long r16, r17, r18, r19, r20, r21, r22, r23; +		unsigned long r24, r25, r26, r27, r28, r29, r30, r31; +		unsigned long pc, msr, ear, esr, fsr; +		int pt_mode; +	} regs; +	unsigned long oldmask; +}; +#define NSIG      64 +#endif + +#endif + +#define SIGHUP    1 +#define SIGINT    2 +#define SIGQUIT   3 +#define SIGILL    4 +#define SIGTRAP   5 +#define SIGABRT   6 +#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 diff --git a/arch/microblaze/bits/socket.h b/arch/microblaze/bits/socket.h new file mode 100644 index 00000000..36febbc2 --- /dev/null +++ b/arch/microblaze/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/microblaze/bits/stat.h b/arch/microblaze/bits/stat.h new file mode 100644 index 00000000..bb9314a5 --- /dev/null +++ b/arch/microblaze/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/microblaze/bits/statfs.h b/arch/microblaze/bits/statfs.h new file mode 100644 index 00000000..f103f4e4 --- /dev/null +++ b/arch/microblaze/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/microblaze/bits/stdarg.h b/arch/microblaze/bits/stdarg.h new file mode 100644 index 00000000..fde37814 --- /dev/null +++ b/arch/microblaze/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/microblaze/bits/stdint.h b/arch/microblaze/bits/stdint.h new file mode 100644 index 00000000..8e21a8cb --- /dev/null +++ b/arch/microblaze/bits/stdint.h @@ -0,0 +1,23 @@ +#define INT_FAST8_MIN   INT8_MIN +#define INT_FAST16_MIN  INT32_MIN +#define INT_FAST32_MIN  INT32_MIN +#define INT_FAST64_MIN  INT64_MIN + +#define INT_FAST8_MAX   INT8_MAX +#define INT_FAST16_MAX  INT32_MAX +#define INT_FAST32_MAX  INT32_MAX +#define INT_FAST64_MAX  INT64_MAX + +#define UINT_FAST8_MAX  UINT8_MAX +#define UINT_FAST16_MAX UINT32_MAX +#define UINT_FAST32_MAX UINT32_MAX +#define UINT_FAST64_MAX UINT64_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 SIG_ATOMIC_MIN  INT32_MIN +#define SIG_ATOMIC_MAX  INT32_MAX +#define SIZE_MAX        UINT32_MAX diff --git a/arch/microblaze/bits/syscall.h b/arch/microblaze/bits/syscall.h new file mode 100644 index 00000000..a3dd7457 --- /dev/null +++ b/arch/microblaze/bits/syscall.h @@ -0,0 +1,740 @@ +#define __NR_restart_syscall 0 +#define __NR_exit 1 +#define __NR_fork 2 +#define __NR_read 3 +#define __NR_write 4 +#define __NR_open 5 +#define __NR_close 6 +#define __NR_waitpid 7 +#define __NR_creat 8 +#define __NR_link 9 +#define __NR_unlink 10 +#define __NR_execve 11 +#define __NR_chdir 12 +#define __NR_time 13 +#define __NR_mknod 14 +#define __NR_chmod 15 +#define __NR_lchown 16 +#define __NR_break 17 +#define __NR_oldstat 18 +#define __NR_lseek 19 +#define __NR_getpid 20 +#define __NR_mount 21 +#define __NR_umount 22 +#define __NR_setuid 23 +#define __NR_getuid 24 +#define __NR_stime 25 +#define __NR_ptrace 26 +#define __NR_alarm 27 +#define __NR_oldfstat 28 +#define __NR_pause 29 +#define __NR_utime 30 +#define __NR_stty 31 +#define __NR_gtty 32 +#define __NR_access 33 +#define __NR_nice 34 +#define __NR_ftime 35 +#define __NR_sync 36 +#define __NR_kill 37 +#define __NR_rename 38 +#define __NR_mkdir 39 +#define __NR_rmdir 40 +#define __NR_dup 41 +#define __NR_pipe 42 +#define __NR_times 43 +#define __NR_prof 44 +#define __NR_brk 45 +#define __NR_setgid 46 +#define __NR_getgid 47 +#define __NR_signal 48 +#define __NR_geteuid 49 +#define __NR_getegid 50 +#define __NR_acct 51 +#define __NR_umount2 52 +#define __NR_lock 53 +#define __NR_ioctl 54 +#define __NR_fcntl 55 +#define __NR_mpx 56 +#define __NR_setpgid 57 +#define __NR_ulimit 58 +#define __NR_oldolduname 59 +#define __NR_umask 60 +#define __NR_chroot 61 +#define __NR_ustat 62 +#define __NR_dup2 63 +#define __NR_getppid 64 +#define __NR_getpgrp 65 +#define __NR_setsid 66 +#define __NR_sigaction 67 +#define __NR_sgetmask 68 +#define __NR_ssetmask 69 +#define __NR_setreuid 70 +#define __NR_setregid 71 +#define __NR_sigsuspend 72 +#define __NR_sigpending 73 +#define __NR_sethostname 74 +#define __NR_setrlimit 75 +#define __NR_getrlimit 76 +#define __NR_getrusage 77 +#define __NR_gettimeofday 78 +#define __NR_settimeofday 79 +#define __NR_getgroups 80 +#define __NR_setgroups 81 +#define __NR_select 82 +#define __NR_symlink 83 +#define __NR_oldlstat 84 +#define __NR_readlink 85 +#define __NR_uselib 86 +#define __NR_swapon 87 +#define __NR_reboot 88 +#define __NR_readdir 89 +#define __NR_mmap 90 +#define __NR_munmap 91 +#define __NR_truncate 92 +#define __NR_ftruncate 93 +#define __NR_fchmod 94 +#define __NR_fchown 95 +#define __NR_getpriority 96 +#define __NR_setpriority 97 +#define __NR_profil 98 +#define __NR_statfs 99 +#define __NR_fstatfs 100 +#define __NR_ioperm 101 +#define __NR_socketcall 102 +#define __NR_syslog 103 +#define __NR_setitimer 104 +#define __NR_getitimer 105 +#define __NR_stat 106 +#define __NR_lstat 107 +#define __NR_fstat 108 +#define __NR_olduname 109 +#define __NR_iopl 110 +#define __NR_vhangup 111 +#define __NR_idle 112 +#define __NR_vm86old 113 +#define __NR_wait4 114 +#define __NR_swapoff 115 +#define __NR_sysinfo 116 +#define __NR_ipc 117 +#define __NR_fsync 118 +#define __NR_sigreturn 119 +#define __NR_clone 120 +#define __NR_setdomainname 121 +#define __NR_uname 122 +#define __NR_modify_ldt 123 +#define __NR_adjtimex 124 +#define __NR_mprotect 125 +#define __NR_sigprocmask 126 +#define __NR_create_module 127 +#define __NR_init_module 128 +#define __NR_delete_module 129 +#define __NR_get_kernel_syms 130 +#define __NR_quotactl 131 +#define __NR_getpgid 132 +#define __NR_fchdir 133 +#define __NR_bdflush 134 +#define __NR_sysfs 135 +#define __NR_personality 136 +#define __NR_afs_syscall 137 +#define __NR_setfsuid 138 +#define __NR_setfsgid 139 +#define __NR__llseek 140 +#define __NR_getdents 141 +#define __NR__newselect 142 +#define __NR_flock 143 +#define __NR_msync 144 +#define __NR_readv 145 +#define __NR_writev 146 +#define __NR_getsid 147 +#define __NR_fdatasync 148 +#define __NR__sysctl 149 +#define __NR_mlock 150 +#define __NR_munlock 151 +#define __NR_mlockall 152 +#define __NR_munlockall 153 +#define __NR_sched_setparam 154 +#define __NR_sched_getparam 155 +#define __NR_sched_setscheduler 156 +#define __NR_sched_getscheduler 157 +#define __NR_sched_yield 158 +#define __NR_sched_get_priority_max 159 +#define __NR_sched_get_priority_min 160 +#define __NR_sched_rr_get_interval 161 +#define __NR_nanosleep 162 +#define __NR_mremap 163 +#define __NR_setresuid 164 +#define __NR_getresuid 165 +#define __NR_vm86 166 +#define __NR_query_module 167 +#define __NR_poll 168 +#define __NR_nfsservctl 169 +#define __NR_setresgid 170 +#define __NR_getresgid 171 +#define __NR_prctl 172 +#define __NR_rt_sigreturn 173 +#define __NR_rt_sigaction 174 +#define __NR_rt_sigprocmask 175 +#define __NR_rt_sigpending 176 +#define __NR_rt_sigtimedwait 177 +#define __NR_rt_sigqueueinfo 178 +#define __NR_rt_sigsuspend 179 +#define __NR_pread 180 +#define __NR_pwrite 181 +#define __NR_chown 182 +#define __NR_getcwd 183 +#define __NR_capget 184 +#define __NR_capset 185 +#define __NR_sigaltstack 186 +#define __NR_sendfile 187 +#define __NR_getpmsg 188 +#define __NR_putpmsg 189 +#define __NR_vfork 190 +#define __NR_ugetrlimit 191 +#define __NR_mmap2 192 +#define __NR_truncate64 193 +#define __NR_ftruncate64 194 +#define __NR_stat64 195 +#define __NR_lstat64 196 +#define __NR_fstat64 197 +#define __NR_lchown32 198 +#define __NR_getuid32 199 +#define __NR_getgid32 200 +#define __NR_geteuid32 201 +#define __NR_getegid32 202 +#define __NR_setreuid32 203 +#define __NR_setregid32 204 +#define __NR_getgroups32 205 +#define __NR_setgroups32 206 +#define __NR_fchown32 207 +#define __NR_setresuid32 208 +#define __NR_getresuid32 209 +#define __NR_setresgid32 210 +#define __NR_getresgid32 211 +#define __NR_chown32 212 +#define __NR_setuid32 213 +#define __NR_setgid32 214 +#define __NR_setfsuid32 215 +#define __NR_setfsgid32 216 +#define __NR_pivot_root 217 +#define __NR_mincore 218 +#define __NR_madvise 219 +#define __NR_getdents64 220 +#define __NR_fcntl64 221 +#define __NR_gettid 224 +#define __NR_readahead 225 +#define __NR_setxattr 226 +#define __NR_lsetxattr 227 +#define __NR_fsetxattr 228 +#define __NR_getxattr 229 +#define __NR_lgetxattr 230 +#define __NR_fgetxattr 231 +#define __NR_listxattr 232 +#define __NR_llistxattr 233 +#define __NR_flistxattr 234 +#define __NR_removexattr 235 +#define __NR_lremovexattr 236 +#define __NR_fremovexattr 237 +#define __NR_tkill 238 +#define __NR_sendfile64 239 +#define __NR_futex 240 +#define __NR_sched_setaffinity 241 +#define __NR_sched_getaffinity 242 +#define __NR_set_thread_area 243 +#define __NR_get_thread_area 244 +#define __NR_io_setup 245 +#define __NR_io_destroy 246 +#define __NR_io_getevents 247 +#define __NR_io_submit 248 +#define __NR_io_cancel 249 +#define __NR_fadvise 250 +#define __NR_exit_group 252 +#define __NR_lookup_dcookie 253 +#define __NR_epoll_create 254 +#define __NR_epoll_ctl 255 +#define __NR_epoll_wait 256 +#define __NR_remap_file_pages 257 +#define __NR_set_tid_address 258 +#define __NR_timer_create 259 +#define __NR_timer_settime 260 +#define __NR_timer_gettime 261 +#define __NR_timer_getoverrun 262 +#define __NR_timer_delete 263 +#define __NR_clock_settime 264 +#define __NR_clock_gettime 265 +#define __NR_clock_getres 266 +#define __NR_clock_nanosleep 267 +#define __NR_statfs64 268 +#define __NR_fstatfs64 269 +#define __NR_tgkill 270 +#define __NR_utimes 271 +#define __NR_fadvise64_64 272 +#define __NR_vserver 273 +#define __NR_mbind 274 +#define __NR_get_mempolicy 275 +#define __NR_set_mempolicy 276 +#define __NR_mq_open 277 +#define __NR_mq_unlink 278 +#define __NR_mq_timedsend 279 +#define __NR_mq_timedreceive 280 +#define __NR_mq_notify 281 +#define __NR_mq_getsetattr 282 +#define __NR_kexec_load 283 +#define __NR_waitid 284 +#define __NR_add_key 286 +#define __NR_request_key 287 +#define __NR_keyctl 288 +#define __NR_ioprio_set 289 +#define __NR_ioprio_get 290 +#define __NR_inotify_init 291 +#define __NR_inotify_add_watch 292 +#define __NR_inotify_rm_watch 293 +#define __NR_migrate_pages 294 +#define __NR_openat 295 +#define __NR_mkdirat 296 +#define __NR_mknodat 297 +#define __NR_fchownat 298 +#define __NR_futimesat 299 +#define __NR_fstatat 300 +#define __NR_unlinkat 301 +#define __NR_renameat 302 +#define __NR_linkat 303 +#define __NR_symlinkat 304 +#define __NR_readlinkat 305 +#define __NR_fchmodat 306 +#define __NR_faccessat 307 +#define __NR_pselect6 308 +#define __NR_ppoll 309 +#define __NR_unshare 310 +#define __NR_set_robust_list 311 +#define __NR_get_robust_list 312 +#define __NR_splice 313 +#define __NR_sync_file_range 314 +#define __NR_tee 315 +#define __NR_vmsplice 316 +#define __NR_move_pages 317 +#define __NR_getcpu 318 +#define __NR_epoll_pwait 319 +#define __NR_utimensat 320 +#define __NR_signalfd 321 +#define __NR_timerfd_create 322 +#define __NR_eventfd 323 +#define __NR_fallocate 324 +#define __NR_semtimedop 325 +#define __NR_timerfd_settime 326 +#define __NR_timerfd_gettime 327 +#define __NR_semctl 328 +#define __NR_semget 329 +#define __NR_semop 330 +#define __NR_msgctl 331 +#define __NR_msgget 332 +#define __NR_msgrcv 333 +#define __NR_msgsnd 334 +#define __NR_shmat 335 +#define __NR_shmctl 336 +#define __NR_shmdt 337 +#define __NR_shmget 338 +#define __NR_signalfd4 339 +#define __NR_eventfd2 340 +#define __NR_epoll_create1 341 +#define __NR_dup3 342 +#define __NR_pipe2 343 +#define __NR_inotify_init1 344 +#define __NR_socket 345 +#define __NR_socketpair 346 +#define __NR_bind 347 +#define __NR_listen 348 +#define __NR_accept 349 +#define __NR_connect 350 +#define __NR_getsockname 351 +#define __NR_getpeername 352 +#define __NR_sendto 353 +#define __NR_send 354 +#define __NR_recvfrom 355 +#define __NR_recv 356 +#define __NR_setsockopt 357 +#define __NR_getsockopt 358 +#define __NR_shutdown 359 +#define __NR_sendmsg 360 +#define __NR_recvmsg 361 +#define __NR_accept4 362 +#define __NR_preadv 363 +#define __NR_pwritev 364 +#define __NR_rt_tgsigqueueinfo 365 +#define __NR_perf_event_open 366 +#define __NR_recvmmsg 367 + +/* Repeated with SYS_ prefix */ + +#define SYS_SYSCALL_BASE 0 +#define SYS_restart_syscall 0 +#define SYS_exit 1 +#define SYS_fork 2 +#define SYS_read 3 +#define SYS_write 4 +#define SYS_open 5 +#define SYS_close 6 +#define SYS_waitpid 7 +#define SYS_creat 8 +#define SYS_link 9 +#define SYS_unlink 10 +#define SYS_execve 11 +#define SYS_chdir 12 +#define SYS_time 13 +#define SYS_mknod 14 +#define SYS_chmod 15 +#define SYS_lchown 16 +#define SYS_break 17 +#define SYS_oldstat 18 +#define SYS_lseek 19 +#define SYS_getpid 20 +#define SYS_mount 21 +#define SYS_umount 22 +#define SYS_setuid 23 +#define SYS_getuid 24 +#define SYS_stime 25 +#define SYS_ptrace 26 +#define SYS_alarm 27 +#define SYS_oldfstat 28 +#define SYS_pause 29 +#define SYS_utime 30 +#define SYS_stty 31 +#define SYS_gtty 32 +#define SYS_access 33 +#define SYS_nice 34 +#define SYS_ftime 35 +#define SYS_sync 36 +#define SYS_kill 37 +#define SYS_rename 38 +#define SYS_mkdir 39 +#define SYS_rmdir 40 +#define SYS_dup 41 +#define SYS_pipe 42 +#define SYS_times 43 +#define SYS_prof 44 +#define SYS_brk 45 +#define SYS_setgid 46 +#define SYS_getgid 47 +#define SYS_signal 48 +#define SYS_geteuid 49 +#define SYS_getegid 50 +#define SYS_acct 51 +#define SYS_umount2 52 +#define SYS_lock 53 +#define SYS_ioctl 54 +#define SYS_fcntl 55 +#define SYS_mpx 56 +#define SYS_setpgid 57 +#define SYS_ulimit 58 +#define SYS_oldolduname 59 +#define SYS_umask 60 +#define SYS_chroot 61 +#define SYS_ustat 62 +#define SYS_dup2 63 +#define SYS_getppid 64 +#define SYS_getpgrp 65 +#define SYS_setsid 66 +#define SYS_sigaction 67 +#define SYS_sgetmask 68 +#define SYS_ssetmask 69 +#define SYS_setreuid 70 +#define SYS_setregid 71 +#define SYS_sigsuspend 72 +#define SYS_sigpending 73 +#define SYS_sethostname 74 +#define SYS_setrlimit 75 +#define SYS_getrlimit 76 +#define SYS_getrusage 77 +#define SYS_gettimeofday 78 +#define SYS_settimeofday 79 +#define SYS_getgroups 80 +#define SYS_setgroups 81 +#define SYS_select 82 +#define SYS_symlink 83 +#define SYS_oldlstat 84 +#define SYS_readlink 85 +#define SYS_uselib 86 +#define SYS_swapon 87 +#define SYS_reboot 88 +#define SYS_readdir 89 +#define SYS_mmap 90 +#define SYS_munmap 91 +#define SYS_truncate 92 +#define SYS_ftruncate 93 +#define SYS_fchmod 94 +#define SYS_fchown 95 +#define SYS_getpriority 96 +#define SYS_setpriority 97 +#define SYS_profil 98 +#define SYS_statfs 99 +#define SYS_fstatfs 100 +#define SYS_ioperm 101 +#define SYS_socketcall 102 +#define SYS_syslog 103 +#define SYS_setitimer 104 +#define SYS_getitimer 105 +#define SYS_stat 106 +#define SYS_lstat 107 +#define SYS_fstat 108 +#define SYS_olduname 109 +#define SYS_iopl 110 +#define SYS_vhangup 111 +#define SYS_idle 112 +#define SYS_vm86old 113 +#define SYS_wait4 114 +#define SYS_swapoff 115 +#define SYS_sysinfo 116 +#define SYS_ipc 117 +#define SYS_fsync 118 +#define SYS_sigreturn 119 +#define SYS_clone 120 +#define SYS_setdomainname 121 +#define SYS_uname 122 +#define SYS_modify_ldt 123 +#define SYS_adjtimex 124 +#define SYS_mprotect 125 +#define SYS_sigprocmask 126 +#define SYS_create_module 127 +#define SYS_init_module 128 +#define SYS_delete_module 129 +#define SYS_get_kernel_syms 130 +#define SYS_quotactl 131 +#define SYS_getpgid 132 +#define SYS_fchdir 133 +#define SYS_bdflush 134 +#define SYS_sysfs 135 +#define SYS_personality 136 +#define SYS_afs_syscall 137 +#define SYS_setfsuid 138 +#define SYS_setfsgid 139 +#define SYS__llseek 140 +#define SYS_getdents 141 +#define SYS__newselect 142 +#define SYS_flock 143 +#define SYS_msync 144 +#define SYS_readv 145 +#define SYS_writev 146 +#define SYS_getsid 147 +#define SYS_fdatasync 148 +#define SYS__sysctl 149 +#define SYS_mlock 150 +#define SYS_munlock 151 +#define SYS_mlockall 152 +#define SYS_munlockall 153 +#define SYS_sched_setparam 154 +#define SYS_sched_getparam 155 +#define SYS_sched_setscheduler 156 +#define SYS_sched_getscheduler 157 +#define SYS_sched_yield 158 +#define SYS_sched_get_priority_max 159 +#define SYS_sched_get_priority_min 160 +#define SYS_sched_rr_get_interval 161 +#define SYS_nanosleep 162 +#define SYS_mremap 163 +#define SYS_setresuid 164 +#define SYS_getresuid 165 +#define SYS_vm86 166 +#define SYS_query_module 167 +#define SYS_poll 168 +#define SYS_nfsservctl 169 +#define SYS_setresgid 170 +#define SYS_getresgid 171 +#define SYS_prctl 172 +#define SYS_rt_sigreturn 173 +#define SYS_rt_sigaction 174 +#define SYS_rt_sigprocmask 175 +#define SYS_rt_sigpending 176 +#define SYS_rt_sigtimedwait 177 +#define SYS_rt_sigqueueinfo 178 +#define SYS_rt_sigsuspend 179 +#define SYS_pread 180 +#define SYS_pwrite 181 +#define SYS_chown 182 +#define SYS_getcwd 183 +#define SYS_capget 184 +#define SYS_capset 185 +#define SYS_sigaltstack 186 +#define SYS_sendfile 187 +#define SYS_getpmsg 188 +#define SYS_putpmsg 189 +#define SYS_vfork 190 +#define SYS_ugetrlimit 191 +#define SYS_mmap2 192 +#define SYS_truncate64 193 +#define SYS_ftruncate64 194 +#define SYS_stat64 195 +#define SYS_lstat64 196 +#define SYS_fstat64 197 +#define SYS_lchown32 198 +#define SYS_getuid32 199 +#define SYS_getgid32 200 +#define SYS_geteuid32 201 +#define SYS_getegid32 202 +#define SYS_setreuid32 203 +#define SYS_setregid32 204 +#define SYS_getgroups32 205 +#define SYS_setgroups32 206 +#define SYS_fchown32 207 +#define SYS_setresuid32 208 +#define SYS_getresuid32 209 +#define SYS_setresgid32 210 +#define SYS_getresgid32 211 +#define SYS_chown32 212 +#define SYS_setuid32 213 +#define SYS_setgid32 214 +#define SYS_setfsuid32 215 +#define SYS_setfsgid32 216 +#define SYS_pivot_root 217 +#define SYS_mincore 218 +#define SYS_madvise 219 +#define SYS_getdents64 220 +#define SYS_fcntl64 221 +#define SYS_gettid 224 +#define SYS_readahead 225 +#define SYS_setxattr 226 +#define SYS_lsetxattr 227 +#define SYS_fsetxattr 228 +#define SYS_getxattr 229 +#define SYS_lgetxattr 230 +#define SYS_fgetxattr 231 +#define SYS_listxattr 232 +#define SYS_llistxattr 233 +#define SYS_flistxattr 234 +#define SYS_removexattr 235 +#define SYS_lremovexattr 236 +#define SYS_fremovexattr 237 +#define SYS_tkill 238 +#define SYS_sendfile64 239 +#define SYS_futex 240 +#define SYS_sched_setaffinity 241 +#define SYS_sched_getaffinity 242 +#define SYS_set_thread_area 243 +#define SYS_get_thread_area 244 +#define SYS_io_setup 245 +#define SYS_io_destroy 246 +#define SYS_io_getevents 247 +#define SYS_io_submit 248 +#define SYS_io_cancel 249 +#define SYS_fadvise 250 +#define SYS_exit_group 252 +#define SYS_lookup_dcookie 253 +#define SYS_epoll_create 254 +#define SYS_epoll_ctl 255 +#define SYS_epoll_wait 256 +#define SYS_remap_file_pages 257 +#define SYS_set_tid_address 258 +#define SYS_timer_create 259 +#define SYS_timer_settime 260 +#define SYS_timer_gettime 261 +#define SYS_timer_getoverrun 262 +#define SYS_timer_delete 263 +#define SYS_clock_settime 264 +#define SYS_clock_gettime 265 +#define SYS_clock_getres 266 +#define SYS_clock_nanosleep 267 +#define SYS_statfs64 268 +#define SYS_fstatfs64 269 +#define SYS_tgkill 270 +#define SYS_utimes 271 +#define SYS_fadvise64_64 272 +#define SYS_vserver 273 +#define SYS_mbind 274 +#define SYS_get_mempolicy 275 +#define SYS_set_mempolicy 276 +#define SYS_mq_open 277 +#define SYS_mq_unlink 278 +#define SYS_mq_timedsend 279 +#define SYS_mq_timedreceive 280 +#define SYS_mq_notify 281 +#define SYS_mq_getsetattr 282 +#define SYS_kexec_load 283 +#define SYS_waitid 284 +#define SYS_add_key 286 +#define SYS_request_key 287 +#define SYS_keyctl 288 +#define SYS_ioprio_set 289 +#define SYS_ioprio_get 290 +#define SYS_inotify_init 291 +#define SYS_inotify_add_watch 292 +#define SYS_inotify_rm_watch 293 +#define SYS_migrate_pages 294 +#define SYS_openat 295 +#define SYS_mkdirat 296 +#define SYS_mknodat 297 +#define SYS_fchownat 298 +#define SYS_futimesat 299 +#define SYS_fstatat 300 +#define SYS_unlinkat 301 +#define SYS_renameat 302 +#define SYS_linkat 303 +#define SYS_symlinkat 304 +#define SYS_readlinkat 305 +#define SYS_fchmodat 306 +#define SYS_faccessat 307 +#define SYS_pselect6 308 +#define SYS_ppoll 309 +#define SYS_unshare 310 +#define SYS_set_robust_list 311 +#define SYS_get_robust_list 312 +#define SYS_splice 313 +#define SYS_sync_file_range 314 +#define SYS_tee 315 +#define SYS_vmsplice 316 +#define SYS_move_pages 317 +#define SYS_getcpu 318 +#define SYS_epoll_pwait 319 +#define SYS_utimensat 320 +#define SYS_signalfd 321 +#define SYS_timerfd_create 322 +#define SYS_eventfd 323 +#define SYS_fallocate 324 +#define SYS_semtimedop 325 +#define SYS_timerfd_settime 326 +#define SYS_timerfd_gettime 327 +#define SYS_semctl 328 +#define SYS_semget 329 +#define SYS_semop 330 +#define SYS_msgctl 331 +#define SYS_msgget 332 +#define SYS_msgrcv 333 +#define SYS_msgsnd 334 +#define SYS_shmat 335 +#define SYS_shmctl 336 +#define SYS_shmdt 337 +#define SYS_shmget 338 +#define SYS_signalfd4 339 +#define SYS_eventfd2 340 +#define SYS_epoll_create1 341 +#define SYS_dup3 342 +#define SYS_pipe2 343 +#define SYS_inotify_init1 344 +#define SYS_socket 345 +#define SYS_socketpair 346 +#define SYS_bind 347 +#define SYS_listen 348 +#define SYS_accept 349 +#define SYS_connect 350 +#define SYS_getsockname 351 +#define SYS_getpeername 352 +#define SYS_sendto 353 +#define SYS_send 354 +#define SYS_recvfrom 355 +#define SYS_recv 356 +#define SYS_setsockopt 357 +#define SYS_getsockopt 358 +#define SYS_shutdown 359 +#define SYS_sendmsg 360 +#define SYS_recvmsg 361 +#define SYS_accept4 362 +#define SYS_preadv 363 +#define SYS_pwritev 364 +#define SYS_rt_tgsigqueueinfo 365 +#define SYS_perf_event_open 366 +#define SYS_recvmmsg 367 + + +#define SYS_clock_adjtime 999999 // FIXME +#define SYS_process_vm_readv 999999 // FIXME +#define SYS_process_vm_writev 999999 // FIXME +#define SYS_prlimit64 999999 // FIXME +#define SYS_setns 999999 // FIXME +#define SYS_syncfs 999999 // FIXME diff --git a/arch/microblaze/bits/termios.h b/arch/microblaze/bits/termios.h new file mode 100644 index 00000000..9f6abd83 --- /dev/null +++ b/arch/microblaze/bits/termios.h @@ -0,0 +1,159 @@ +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 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 XTABS  0014000 + +#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 CRTSCTS  020000000000 + +#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 + +/* Extensions? */ +#define CBAUDEX 0010000 +#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 diff --git a/arch/microblaze/bits/user.h b/arch/microblaze/bits/user.h new file mode 100644 index 00000000..c533fd8d --- /dev/null +++ b/arch/microblaze/bits/user.h @@ -0,0 +1,40 @@ +struct user_fpregs_struct +{ +	struct fp_reg { +		unsigned sign1:1; +		unsigned unused:15; +		unsigned sign2:1; +		unsigned exponent:14; +		unsigned j:1; +		unsigned mantissa1:31; +		unsigned mantissa0:32; +	} fpregs[8]; +	unsigned fpsr:32; +	unsigned fpcr:32; +	unsigned char ftype[8]; +	unsigned int init_flag; +}; + +struct user_regs_struct +{ +	unsigned long uregs[18]; +}; + +struct user +{ +	struct user_regs_struct		regs; +	int				u_fpvalid; +	unsigned long			u_tsize; +	unsigned long			u_dsize; +	unsigned long			u_ssize; +	unsigned long			start_code; +	unsigned long			start_stack; +	long				signal; +	int				reserved; +	struct user_regs_struct		*u_ar0; +	unsigned long int		magic; +	char				u_comm[32]; +	int				u_debugreg[8]; +	struct user_fpregs_struct	u_fp; +	struct user_fpregs_struct	*u_fp0; +}; diff --git a/arch/microblaze/bits/wchar.h b/arch/microblaze/bits/wchar.h new file mode 100644 index 00000000..c969c5b6 --- /dev/null +++ b/arch/microblaze/bits/wchar.h @@ -0,0 +1,4 @@ +#ifndef WCHAR_MIN +#define WCHAR_MIN (-1-0x7fffffff) +#define WCHAR_MAX (0x7fffffff) +#endif diff --git a/arch/microblaze/pthread_arch.h b/arch/microblaze/pthread_arch.h new file mode 100644 index 00000000..6c0ab5ad --- /dev/null +++ b/arch/microblaze/pthread_arch.h @@ -0,0 +1,8 @@ +static inline struct pthread *__pthread_self() +{ +	struct pthread *self; +	__asm__ __volatile__ ("ori %0, r21, 0" : "=r" (self) ); +	return self; +} + +#define CANCEL_REG_IP 32 diff --git a/arch/microblaze/reloc.h b/arch/microblaze/reloc.h new file mode 100644 index 00000000..9f04f125 --- /dev/null +++ b/arch/microblaze/reloc.h @@ -0,0 +1,41 @@ +#include <string.h> +#include <elf.h> + +#define ETC_LDSO_PATH "/etc/ld-musl-microblaze.path" + +#define IS_COPY(x) ((x)==R_MICROBLAZE_COPY) +#define IS_PLT(x) ((x)==R_MICROBLAZE_JUMP_SLOT) + +static inline void do_single_reloc(size_t *reloc_addr, int type, size_t sym_val, size_t sym_size, unsigned char *base_addr, size_t addend) +{ +	switch(type) { +	case R_MICROBLAZE_32: +	case R_MICROBLAZE_GLOB_DAT: +	case R_MICROBLAZE_JUMP_SLOT: +		*reloc_addr = sym_val + addend; +		break; +	case R_MICROBLAZE_REL: +		*reloc_addr = (size_t)base_addr + addend; +		break; +	case R_MICROBLAZE_COPY: +		memcpy(reloc_addr, (void *)sym_val, sym_size); +		break; +	} +} + +#include "syscall.h" +void __reloc_self(int c, size_t *a, size_t *dynv) +{ +	char dot = '.', ex = 'x'; +	char *base; +	size_t t[20], n; +	for (a+=c+1; *a; a++); +	for (a++; *a; a+=2) if (*a<20) t[*a] = a[1]; +	base = (char *)t[AT_BASE]; +	if (!base) base = (char *)(t[AT_PHDR] & -4096); +	for (a=dynv; *a; a+=2) if (*a<20) t[*a] = a[1]; +	n = t[DT_RELASZ]; +	for (a=(void *)(base+t[DT_RELA]); n; a+=3, n-=12) +		if (a[1]%256 == R_MICROBLAZE_REL) +			*(size_t *)(base+a[0]) = (size_t)base + a[2]; +} diff --git a/arch/microblaze/syscall_arch.h b/arch/microblaze/syscall_arch.h new file mode 100644 index 00000000..48b0e36b --- /dev/null +++ b/arch/microblaze/syscall_arch.h @@ -0,0 +1,41 @@ +#define __SYSCALL_LL_E(x) \ +((union { long long ll; long l[2]; }){ .ll = x }).l[0], \ +((union { long long ll; long l[2]; }){ .ll = x }).l[1] +#define __SYSCALL_LL_O(x) 0, __SYSCALL_LL_E((x)) + +#define __SYSCALL_SSLEN 8 + +static inline long __syscall0(long n) +{ +	return (__syscall)(n); +} + +static inline long __syscall1(long n, long a) +{ +	return (__syscall)(n, a); +} + +static inline long __syscall2(long n, long a, long b) +{ +	return (__syscall)(n, a, b); +} + +static inline long __syscall3(long n, long a, long b, long c) +{ +	return (__syscall)(n, a, b, c); +} + +static inline long __syscall4(long n, long a, long b, long c, long d) +{ +	return (__syscall)(n, a, b, c, d); +} + +static inline long __syscall5(long n, long a, long b, long c, long d, long e) +{ +	return (__syscall)(n, a, b, c, d, e); +} + +static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f) +{ +	return (__syscall)(n, a, b, c, d, e, f); +} @@ -202,6 +202,7 @@ arm*) ARCH=arm ;;  i?86*) ARCH=i386 ;;  x86_64*) ARCH=x86_64 ;;  mips-*|mipsel-*) ARCH=mips ;; +microblaze-*) ARCH=microblaze ;;  unknown) fail "$0: unable to detect target arch; try $0 --target=..." ;;  *) fail "$0: unknown or unsupported target \"$target\"" ;;  esac diff --git a/crt/microblaze/crt1.s b/crt/microblaze/crt1.s new file mode 100644 index 00000000..33090bba --- /dev/null +++ b/crt/microblaze/crt1.s @@ -0,0 +1,16 @@ +.weak  _init +.weak  _fini +.global _start +.align  2 +_start: +	add     r19, r0, r0             # Zero the frame pointer. +	ori     r5, r0, main            # Get main() ... +	lw      r6, r0, r1              # Get argc... +	addi    r7, r1, 4               # ... and argv ... +	ori     r8, r0, _init           # and _init() ... +	ori     r9, r0, _fini           # and _fini() ... +	add     r10, r0, r0             # ldso_fini == NULL +	andi    r1, r1, -8              # align stack +	addik   r1, r1, -4*6            # Leave space for the args. +	bri     __libc_start_main       # Let's go! +	nop                             # Never gets here. diff --git a/crt/microblaze/crti.s b/crt/microblaze/crti.s new file mode 100644 index 00000000..ed1c2fa4 --- /dev/null +++ b/crt/microblaze/crti.s @@ -0,0 +1,13 @@ +.section .init +.global _init +.align 2 +_init: +	addi r1, r1, -32 +	swi r15, r1, 0 + +.section .fini +.global _fini +.align 2 +_fini: +	addi r1, r1, -32 +	swi r15, r1, 0 diff --git a/crt/microblaze/crtn.s b/crt/microblaze/crtn.s new file mode 100644 index 00000000..1e02c984 --- /dev/null +++ b/crt/microblaze/crtn.s @@ -0,0 +1,9 @@ +.section .init +	lwi r15, r1, 0 +	rtsd r15, 8 +	addi r1, r1, 32 + +.section .fini +	lwi r15, r1, 0 +	rtsd r15, 8 +	addi r1, r1, 32 diff --git a/include/elf.h b/include/elf.h index 58340278..079f47ce 100644 --- a/include/elf.h +++ b/include/elf.h @@ -2516,6 +2516,30 @@ typedef Elf32_Addr Elf32_Conflict;  #define R_M32R_GOTOFF_LO	64  #define R_M32R_NUM		256 +#define R_MICROBLAZE_NONE 0 +#define R_MICROBLAZE_32 1 +#define R_MICROBLAZE_32_PCREL 2 +#define R_MICROBLAZE_64_PCREL 3 +#define R_MICROBLAZE_32_PCREL_LO 4 +#define R_MICROBLAZE_64 5 +#define R_MICROBLAZE_32_LO 6 +#define R_MICROBLAZE_SRO32 7 +#define R_MICROBLAZE_SRW32 8 +#define R_MICROBLAZE_64_NONE 9 +#define R_MICROBLAZE_32_SYM_OP_SYM 10 +#define R_MICROBLAZE_GNU_VTINHERIT 11 +#define R_MICROBLAZE_GNU_VTENTRY 12 +#define R_MICROBLAZE_GOTPC_64 13 +#define R_MICROBLAZE_GOT_64 14 +#define R_MICROBLAZE_PLT_64 15 +#define R_MICROBLAZE_REL 16 +#define R_MICROBLAZE_JUMP_SLOT 17 +#define R_MICROBLAZE_GLOB_DAT 18 +#define R_MICROBLAZE_GOTOFF_64 19 +#define R_MICROBLAZE_GOTOFF_32 20 +#define R_MICROBLAZE_COPY 21 +#define R_MICROBLAZE_NUM 22 +  #ifdef __cplusplus  }  #endif diff --git a/src/internal/microblaze/syscall.s b/src/internal/microblaze/syscall.s new file mode 100644 index 00000000..9bf7c0e0 --- /dev/null +++ b/src/internal/microblaze/syscall.s @@ -0,0 +1,13 @@ +.global __syscall +.type   __syscall,@function +__syscall: +	addi    r12, r5, 0              # Save the system call number +	add     r5, r6, r0              # Shift the arguments, arg1 +	add     r6, r7, r0              # arg2 +	add     r7, r8, r0              # arg3 +	add     r8, r9, r0              # arg4 +	add     r9, r10, r0             # arg5 +	lwi     r10, r1, 28             # Get arg6. +	brki    r14, 0x8                # syscall +	rtsd    r15, 8 +	nop diff --git a/src/ldso/microblaze/dlsym.s b/src/ldso/microblaze/dlsym.s new file mode 100644 index 00000000..2044e2df --- /dev/null +++ b/src/ldso/microblaze/dlsym.s @@ -0,0 +1,5 @@ +.global dlsym +.type   dlsym,@function +dlsym: +	brid    __dlsym +	add     r7, r15, r0 diff --git a/src/ldso/microblaze/start.s b/src/ldso/microblaze/start.s new file mode 100644 index 00000000..4afd59f0 --- /dev/null +++ b/src/ldso/microblaze/start.s @@ -0,0 +1,27 @@ +# FIXME: clearing argv entries +.global _start +_start: +	add     r19, r0, r0 + +	lw      r5, r0, r1 +	addi    r6, r1, 4 +	mfs     r7, rpc +	addi    r7, r7, _GLOBAL_OFFSET_TABLE_+8 +	addi    r7, r7, _DYNAMIC@GOTOFF +	brlid   r15, __reloc_self +	nop + +	lwi     r5, r1, 0 +	brlid   r15, __dynlink +	addi    r6, r1, 4 + +	lwi     r4, r1, 0 +1:	lwi     r5, r1, 4 +	addi    r5, r5, 1 +	bnei    r5, 1f +	addi    r4, r4, -1 +	addi    r1, r1, 4 +	bri     1b +1:	swi     r4, r1, 0 +	add     r5, r0, r0 +	bra     r3 diff --git a/src/setjmp/microblaze/longjmp.s b/src/setjmp/microblaze/longjmp.s new file mode 100644 index 00000000..c0760288 --- /dev/null +++ b/src/setjmp/microblaze/longjmp.s @@ -0,0 +1,29 @@ +.global _longjmp +.global longjmp +.type   _longjmp,@function +.type   longjmp,@function +_longjmp: +longjmp: +	addi    r3, r6, 0 +	bnei    r3, 1f +	addi    r3, r3, 1 +1:      lwi     r1,  r5, 0 +	lwi     r15, r5, 4 +	lwi     r2,  r5, 8 +	lwi     r13, r5, 12 +	lwi     r18, r5, 16 +	lwi     r19, r5, 20 +	lwi     r20, r5, 24 +	lwi     r21, r5, 28 +	lwi     r22, r5, 32 +	lwi     r23, r5, 36 +	lwi     r24, r5, 40 +	lwi     r25, r5, 44 +	lwi     r26, r5, 48 +	lwi     r27, r5, 52 +	lwi     r28, r5, 56 +	lwi     r29, r5, 60 +	lwi     r30, r5, 64 +	lwi     r31, r5, 68 +	rtsd    r15, 8 +	nop diff --git a/src/setjmp/microblaze/setjmp.s b/src/setjmp/microblaze/setjmp.s new file mode 100644 index 00000000..f39468a5 --- /dev/null +++ b/src/setjmp/microblaze/setjmp.s @@ -0,0 +1,29 @@ +.global __setjmp +.global _setjmp +.global setjmp +.type __setjmp,@function +.type _setjmp,@function +.type setjmp,@function +__setjmp: +_setjmp: +setjmp: +	swi     r1,  r5, 0 +	swi     r15, r5, 4 +	swi     r2,  r5, 8 +	swi     r13, r5, 12 +	swi     r18, r5, 16 +	swi     r19, r5, 20 +	swi     r20, r5, 24 +	swi     r21, r5, 28 +	swi     r22, r5, 32 +	swi     r23, r5, 36 +	swi     r24, r5, 30 +	swi     r25, r5, 44 +	swi     r26, r5, 48 +	swi     r27, r5, 52 +	swi     r28, r5, 56 +	swi     r29, r5, 60 +	swi     r30, r5, 64 +	swi     r31, r5, 68 +	rtsd    r15, 8 +	ori     r3, r0, 0 diff --git a/src/signal/microblaze/restore.s b/src/signal/microblaze/restore.s new file mode 100644 index 00000000..fe4f5a09 --- /dev/null +++ b/src/signal/microblaze/restore.s @@ -0,0 +1,11 @@ +.global __restore +.type __restore,@function +__restore: +	ori     r12, r0, 119 +	brki    r14, 0x8 + +.global __restore_rt +.type __restore_rt,@function +__restore_rt: +	ori     r12, r0, 173 +	brki    r14, 0x8 diff --git a/src/signal/microblaze/sigsetjmp.s b/src/signal/microblaze/sigsetjmp.s new file mode 100644 index 00000000..3aca90dc --- /dev/null +++ b/src/signal/microblaze/sigsetjmp.s @@ -0,0 +1,9 @@ +.global sigsetjmp +.type sigsetjmp,@function +sigsetjmp: +	lwi     r11, r5, 72 +	beqi    r11, setjmp +	addi    r7, r5, 76 +	add     r6, r0, r0 +	brid    sigprocmask +	ori     r5, r0, 2 diff --git a/src/thread/microblaze/__set_thread_area.s b/src/thread/microblaze/__set_thread_area.s new file mode 100644 index 00000000..2b112ae2 --- /dev/null +++ b/src/thread/microblaze/__set_thread_area.s @@ -0,0 +1,5 @@ +.global __set_thread_area +.type   __set_thread_area,@function +__set_thread_area: +	rtsd     r15, 8 +	ori      r21, r5, 0 diff --git a/src/thread/microblaze/__unmapself.s b/src/thread/microblaze/__unmapself.s new file mode 100644 index 00000000..b180de60 --- /dev/null +++ b/src/thread/microblaze/__unmapself.s @@ -0,0 +1,8 @@ +.global __unmapself +.type   __unmapself,@function +__unmapself: +	ori     r12, r0, 91 +	brki    r14, 0x8 +	ori     r12, r0, 1 +	brki    r14, 0x8 +	nop diff --git a/src/thread/microblaze/clone.s b/src/thread/microblaze/clone.s new file mode 100644 index 00000000..cff80efa --- /dev/null +++ b/src/thread/microblaze/clone.s @@ -0,0 +1,33 @@ +.global __clone +.weak clone +.type   __clone,@function +.type   clone,@function + +# r5, r6, r7, r8, r9, r10, stack +# fn, st, fl, ar, pt, tl, ct +# fl, st, pt, tl, ctx + +__clone: +clone: +	andi    r6, r6, -16 +	addi    r6, r6, -16 +	swi     r5, r6, 0 +	swi     r8, r6, 4 + +	ori     r5, r7, 0 +	ori     r7, r9, 0 +	ori     r8, r10, 0 +	lwi     r9, r1, 28 +	ori     r12, r0, 120 + +	brki    r14, 8 +	beqi	r3, 1f +	rtsd    r15, 8 +	nop +	 +1:	lwi     r3, r1, 0 +	lwi     r5, r1, 4 +	brald   r15, r3 +	nop +	ori     r12, r0, 1 +	brki    r14, 8 diff --git a/src/thread/microblaze/syscall_cp.s b/src/thread/microblaze/syscall_cp.s new file mode 100644 index 00000000..c470521c --- /dev/null +++ b/src/thread/microblaze/syscall_cp.s @@ -0,0 +1,19 @@ +.global __syscall_cp_asm +.type   __syscall_cp_asm,@function +__syscall_cp_asm: +.global __cp_begin +__cp_begin: +	lwi     r5, r5, 0 +	bnei    r5, __cancel +	addi    r12, r6, 0 +	add     r5, r7, r0 +	add     r6, r8, r0 +	add     r7, r9, r0 +	add     r8, r10, r0 +	lwi     r9, r1, 28 +	lwi     r10, r1, 32 +	brki    r14, 0x8 +.global __cp_end +__cp_end: +	rtsd    r15, 8 +	nop  | 
