diff options
| author | Rich Felker <dalias@aerifal.cx> | 2012-11-14 14:01:39 -0500 | 
|---|---|---|
| committer | Rich Felker <dalias@aerifal.cx> | 2012-11-14 14:01:39 -0500 | 
| commit | c6d441e3a246370d9c459396ec22b096db93850e (patch) | |
| tree | fa3d4a4ca03531ceab9e60abb50e37780fce60ed | |
| parent | c4a35f8c2a4b1a7e62a4b9e5b2748fb4fbcace79 (diff) | |
| parent | 1c8eb8bad791fe9d01d0d4ab77882db634fa933d (diff) | |
| download | musl-c6d441e3a246370d9c459396ec22b096db93850e.tar.gz | |
Merge remote-tracking branch 'ppc-port/ppc-squashed'
42 files changed, 2402 insertions, 0 deletions
| diff --git a/arch/powerpc/atomic.h b/arch/powerpc/atomic.h new file mode 100644 index 00000000..af397599 --- /dev/null +++ b/arch/powerpc/atomic.h @@ -0,0 +1,124 @@ +#ifndef _INTERNAL_ATOMIC_H +#define _INTERNAL_ATOMIC_H + +#include <stdint.h> +#include <endian.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(volatile int *p, int t, int s) +{ + +	__asm__( "1: lwarx 10, 0, %1\n" +                 "   stwcx. %3, 0, %1\n" +                 "   bne- 1b\n" +                 "   mr %0, 10\n" +		: "=r"(t) : "r"(p), "r"(t), "r"(s) : "memory" ); +        return t; +} + +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) +{ +	int old; +	do old = *x; +	while (a_cas(x, old, v) != old); +	return old; +} + +static inline int a_fetch_add(volatile int *x, int v) +{ +	int old; +	do old = *x; +	while (a_cas(x, old, old+v) != old); +	return old; +} + +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) +{ +#if __BYTE_ORDER == __LITTLE_ENDIAN +	a_and((int *)p, v); +	a_and((int *)p+1, v>>32); +#else +	a_and((int *)p+1, v); +	a_and((int *)p, v>>32); +#endif +} + +static inline void a_or_64(volatile uint64_t *p, uint64_t v) +{ +#if __BYTE_ORDER == __LITTLE_ENDIAN +	a_or((int *)p, v); +	a_or((int *)p+1, v>>32); +#else +	a_or((int *)p+1, v); +	a_or((int *)p, v>>32); +#endif +} + +#endif diff --git a/arch/powerpc/bits/alltypes.h.sh b/arch/powerpc/bits/alltypes.h.sh new file mode 100755 index 00000000..9fa6fab2 --- /dev/null +++ b/arch/powerpc/bits/alltypes.h.sh @@ -0,0 +1,121 @@ +#!/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 int size_t; +TYPEDEF long ssize_t; +TYPEDEF long 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 unsigned long long dev_t; +TYPEDEF unsigned long blksize_t; +TYPEDEF unsigned 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/powerpc/bits/endian.h b/arch/powerpc/bits/endian.h new file mode 100644 index 00000000..4442abf4 --- /dev/null +++ b/arch/powerpc/bits/endian.h @@ -0,0 +1,15 @@ +#ifdef __BIG_ENDIAN__ +  #if __BIG_ENDIAN__ +    #define __BYTE_ORDER __BIG_ENDIAN +  #endif +#endif /* __BIG_ENDIAN__ */ + +#ifdef __LITTLE_ENDIAN__ +  #if __LITTLE_ENDIAN__ +    #define __BYTE_ORDER __LITTLE_ENDIAN +  #endif +#endif /* __LITTLE_ENDIAN__ */ + +#ifndef __BYTE_ORDER +  #define __BYTE_ORDER __BIG_ENDIAN +#endif diff --git a/arch/powerpc/bits/errno.h b/arch/powerpc/bits/errno.h new file mode 100644 index 00000000..9a193a2d --- /dev/null +++ b/arch/powerpc/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       58  +#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/powerpc/bits/fcntl.h b/arch/powerpc/bits/fcntl.h new file mode 100644 index 00000000..83c02226 --- /dev/null +++ b/arch/powerpc/bits/fcntl.h @@ -0,0 +1,37 @@ +#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  040000 +#define O_NOFOLLOW  0100000 +#define O_CLOEXEC  02000000 + +#define O_ASYNC      020000 +#define O_DIRECT    0400000 +#define O_LARGEFILE 0200000 +#define O_NOATIME  01000000 +#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 + diff --git a/arch/powerpc/bits/fenv.h b/arch/powerpc/bits/fenv.h new file mode 100644 index 00000000..edbdea2a --- /dev/null +++ b/arch/powerpc/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/powerpc/bits/float.h b/arch/powerpc/bits/float.h new file mode 100644 index 00000000..dce9e2d9 --- /dev/null +++ b/arch/powerpc/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/powerpc/bits/ioctl.h b/arch/powerpc/bits/ioctl.h new file mode 100644 index 00000000..f2eff4d0 --- /dev/null +++ b/arch/powerpc/bits/ioctl.h @@ -0,0 +1,216 @@ +//#define _IOC(a,b,c,d) ( ((a)<<29) | ((b)<<8) | (c) | ((d)<<16) ) +// +#define _IOC_SIZEBITS   13 +#define _IOC_DIRBITS    3 + +#define _IOC_NRBITS     8 +#define _IOC_TYPEBITS   8 + +#define _IOC_NRSHIFT    0 +#define _IOC_TYPESHIFT  (_IOC_NRSHIFT+_IOC_NRBITS) +#define _IOC_SIZESHIFT  (_IOC_TYPESHIFT+_IOC_TYPEBITS) +#define _IOC_DIRSHIFT   (_IOC_SIZESHIFT+_IOC_SIZEBITS) + +#define _IOC(dir,type,nr,size) \ +        (((dir)  << _IOC_DIRSHIFT) | \ +          ((type) << _IOC_TYPESHIFT) | \ +          ((nr)   << _IOC_NRSHIFT) | \ +          ((size) << _IOC_SIZESHIFT)) + + +#define _IOC_NONE  1U +#define _IOC_WRITE 4U +#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 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/powerpc/bits/ipc.h b/arch/powerpc/bits/ipc.h new file mode 100644 index 00000000..b0bcfa3f --- /dev/null +++ b/arch/powerpc/bits/ipc.h @@ -0,0 +1,15 @@ +struct ipc_perm +{ +	key_t __ipc_perm_key; +	uid_t uid; +	gid_t gid; +	uid_t cuid; +	gid_t cgid; +	mode_t mode; +	int __ipc_perm_seq; +	long __pad1; +	long __pad2; +}; + +#define IPC_64 0x100 + diff --git a/arch/powerpc/bits/limits.h b/arch/powerpc/bits/limits.h new file mode 100644 index 00000000..e19461df --- /dev/null +++ b/arch/powerpc/bits/limits.h @@ -0,0 +1,8 @@ +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) +#define PAGE_SIZE 4096 +#define LONG_BIT 32 +#endif + +#define LONG_MAX  0x7fffffffL +#define LLONG_MAX  0x7fffffffffffffffLL diff --git a/arch/powerpc/bits/mman.h b/arch/powerpc/bits/mman.h new file mode 100644 index 00000000..302044eb --- /dev/null +++ b/arch/powerpc/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 + +#ifdef _GNU_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/powerpc/bits/msg.h b/arch/powerpc/bits/msg.h new file mode 100644 index 00000000..3db8576b --- /dev/null +++ b/arch/powerpc/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/powerpc/bits/posix.h b/arch/powerpc/bits/posix.h new file mode 100644 index 00000000..30a38714 --- /dev/null +++ b/arch/powerpc/bits/posix.h @@ -0,0 +1,2 @@ +#define _POSIX_V6_ILP32_OFFBIG  1 +#define _POSIX_V7_ILP32_OFFBIG  1 diff --git a/arch/powerpc/bits/reg.h b/arch/powerpc/bits/reg.h new file mode 100644 index 00000000..0c7bffca --- /dev/null +++ b/arch/powerpc/bits/reg.h @@ -0,0 +1,3 @@ +#undef __WORDSIZE +#define __WORDSIZE 32 +/* FIXME */ diff --git a/arch/powerpc/bits/setjmp.h b/arch/powerpc/bits/setjmp.h new file mode 100644 index 00000000..a4baec4c --- /dev/null +++ b/arch/powerpc/bits/setjmp.h @@ -0,0 +1 @@ +typedef unsigned long jmp_buf [64]; diff --git a/arch/powerpc/bits/shm.h b/arch/powerpc/bits/shm.h new file mode 100644 index 00000000..8807c4fb --- /dev/null +++ b/arch/powerpc/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/powerpc/bits/signal.h b/arch/powerpc/bits/signal.h new file mode 100644 index 00000000..d633694d --- /dev/null +++ b/arch/powerpc/bits/signal.h @@ -0,0 +1,103 @@ +#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \ + || defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE) + +typedef unsigned long gregset_t[48]; + +typedef struct { +	double fpregs[32]; +	double fpscr; +	unsigned _pad[2]; +} fpregset_t; + +typedef struct { +	unsigned vrregs[32][4]; +	unsigned vrsave; +	unsigned _pad[2]; +	unsigned vscr; +} vrregset_t; + +typedef struct { +	gregset_t gregs; +	fpregset_t fpregs; +	vrregset_t vrregs __attribute__((__aligned__(16))); +} mcontext_t; + +typedef struct __ucontext { +	unsigned long uc_flags; +	struct __ucontext *uc_link; +	stack_t uc_stack; +	int uc_pad[7]; +	struct mcontext_t *uc_regs; +	 +	sigset_t uc_sigmask; +	 +        int             uc_maskext[30]; +        int             uc_pad2[3]; +	 +	mcontext_t uc_mcontext; +	char uc_reg_space[sizeof(mcontext_t) + 12]; +} ucontext_t; + +#define SA_NOCLDSTOP  1U +#define SA_NOCLDWAIT  2U +#define SA_SIGINFO    4U +#define SA_ONSTACK    0x08000000U +#define SA_RESTART    0x10000000U +#define SA_NODEFER    0x40000000U +#define SA_RESETHAND  0x80000000U +#define SA_RESTORER   0x04000000U + +#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) + +struct sigcontext +{ +	unsigned long _unused[4]; +	int signal; +	unsigned long handler; +	unsigned long oldmask; +	void *regs; /* originally struct pt_regs _user *regs, +			pt_regs is defined in arch/powerpc/include/asm/ptrace.h */ +	gregset_t gp_regs; +	fpregset_t fp_regs; +	vrregset_t *v_regs; +	long vmx_reserve[33+33+32+1]; /* 33=34 for ppc64 */ +}; +#define NSIG      64 +#endif + +#endif + +#define SIGHUP    1 +#define SIGINT    2 +#define SIGQUIT   3 +#define SIGILL    4 +#define SIGTRAP   5 +#define SIGABRT   6 +#define SIGIOT    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/powerpc/bits/socket.h b/arch/powerpc/bits/socket.h new file mode 100644 index 00000000..3d97193a --- /dev/null +++ b/arch/powerpc/bits/socket.h @@ -0,0 +1,34 @@ +struct msghdr +{ +	void *msg_name; +	int msg_namelen; +	struct iovec *msg_iov; +	unsigned long msg_iovlen; +	void *msg_control; +	unsigned long  msg_controllen; +	unsigned msg_flags; +}; + +#define SO_DEBUG        1 +#define SO_REUSEADDR    2 +#define SO_TYPE         3 +#define SO_ERROR        4 +#define SO_DONTROUTE    5 +#define SO_BROADCAST    6 +#define SO_SNDBUF       7 +#define SO_RCVBUF       8 +#define SO_SNDBUFFORCE  32 +#define SO_RCVBUFFORCE  33 +#define SO_KEEPALIVE    9 +#define SO_OOBINLINE    10 +#define SO_NO_CHECK     11 +#define SO_PRIORITY     12 +#define SO_LINGER       13 +#define SO_BSDCOMPAT    14 +#define SO_RCVLOWAT     16 +#define SO_SNDLOWAT     17 +#define SO_RCVTIMEO     18 +#define SO_SNDTIMEO     19 +#define SO_PASSCRED     20 +#define SO_PEERCRED     21 +  diff --git a/arch/powerpc/bits/stat.h b/arch/powerpc/bits/stat.h new file mode 100644 index 00000000..aa8414ee --- /dev/null +++ b/arch/powerpc/bits/stat.h @@ -0,0 +1,28 @@ +/* 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; +}; + +#ifdef _BSD_SOURCE +#define st_atimespec st_atim +#define st_mtimespec st_mtim +#define st_ctimespec st_ctim +#endif diff --git a/arch/powerpc/bits/statfs.h b/arch/powerpc/bits/statfs.h new file mode 100644 index 00000000..f103f4e4 --- /dev/null +++ b/arch/powerpc/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/powerpc/bits/stdarg.h b/arch/powerpc/bits/stdarg.h new file mode 100644 index 00000000..fde37814 --- /dev/null +++ b/arch/powerpc/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/powerpc/bits/stdint.h b/arch/powerpc/bits/stdint.h new file mode 100644 index 00000000..8e21a8cb --- /dev/null +++ b/arch/powerpc/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/powerpc/bits/syscall.h b/arch/powerpc/bits/syscall.h new file mode 100644 index 00000000..3ccd14ff --- /dev/null +++ b/arch/powerpc/bits/syscall.h @@ -0,0 +1,741 @@ +#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_vm86                   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_setresuid32            164 +#define __NR_setresuid              164 +#define __NR_getresuid32            165 +#define __NR_getresuid              165 +#define __NR_query_module           166 +#define __NR_poll                   167 +#define __NR_nfsservctl             168 +#define __NR_setresgid32            169 +#define __NR_setresgid              169 +#define __NR_getresgid32            170 +#define __NR_getresgid              170 +#define __NR_prctl                  171 +#define __NR_rt_sigreturn           172 +#define __NR_rt_sigaction           173 +#define __NR_rt_sigprocmask         174 +#define __NR_rt_sigpending          175 +#define __NR_rt_sigtimedwait        176 +#define __NR_rt_sigqueueinfo        177 +#define __NR_rt_sigsuspend          178 +#define __NR_pread64                179 +#define __NR_pwrite64               180 +#define __NR_chown                  181 +#define __NR_getcwd                 182 +#define __NR_capget                 183 +#define __NR_capset                 184 +#define __NR_sigaltstack            185 +#define __NR_sendfile               186 +#define __NR_getpmsg                187 +#define __NR_putpmsg                188 +#define __NR_vfork                  189 +#define __NR_ugetrlimit             190 +#define __NR_readahead              191 +#if !defined(__PPC64) || defined(__ABI32) +#define __NR_mmap2                  192 +#define __NR_truncate64             193 +#define __NR_ftruncate64            194 +#define __NR_stat64                 195 +#define __NR_lstat64                196 +#define __NR_fstat64                197 +#endif +#define __NR_pciconfig_read         198 +#define __NR_pciconfig_write        199 +#define __NR_pciconfig_iobase       200 +#define __NR_multiplexer            201 +#define __NR_getdents64             202 +#define __NR_pivot_root             203 +#if !defined(__PPC64) || defined(__ABI32) +#define __NR_fcntl64                204 +#endif +#define __NR_madvise                205 +#define __NR_mincore                206 +#define __NR_gettid                 207 +#define __NR_tkill                  208 +#define __NR_setxattr               209 +#define __NR_lsetxattr              210 +#define __NR_fsetxattr              211 +#define __NR_getxattr               212 +#define __NR_lgetxattr              213 +#define __NR_fgetxattr              214 +#define __NR_listxattr              215 +#define __NR_llistxattr             216 +#define __NR_flistxattr             217 +#define __NR_removexattr            218 +#define __NR_lremovexattr           219 +#define __NR_fremovexattr           220 +#define __NR_futex                  221 +#define __NR_sched_setaffinity      222 +#define __NR_sched_getaffinity      223 +#define __NR_tuxcall                225 +#if !defined(__PPC64) || defined(__ABI32) +#define __NR_sendfile64             226 +#endif +#define __NR_io_setup               227 +#define __NR_io_destroy             228 +#define __NR_io_getevents           229 +#define __NR_io_submit              230 +#define __NR_io_cancel              231 +#define __NR_set_tid_address        232 +#define __NR_fadvise64              233 +#define __NR_exit_group             234 +#define __NR_lookup_dcookie         235 +#define __NR_epoll_create           236 +#define __NR_epoll_ctl              237 +#define __NR_epoll_wait             238 +#define __NR_remap_file_pages       239 +#define __NR_timer_create           240 +#define __NR_timer_settime          241 +#define __NR_timer_gettime          242 +#define __NR_timer_getoverrun       243 +#define __NR_timer_delete           244 +#define __NR_clock_settime          245 +#define __NR_clock_gettime          246 +#define __NR_clock_getres           247 +#define __NR_clock_nanosleep        248 +#define __NR_swapcontext            249 +#define __NR_tgkill                 250 +#define __NR_utimes                 251 +#define __NR_statfs64               252 +#define __NR_fstatfs64              253 +#if !defined(__PPC64) || defined(__ABI32) +#define __NR_fadvise64_64           254 +#endif +#define __NR_rtas		255 +#define __NR_sys_debug_setcontext 256 +#define __NR_migrate_pages	258 +#define __NR_mbind		259 +#define __NR_get_mempolicy	260 +#define __NR_set_mempolicy	261 +#define __NR_mq_open		262 +#define __NR_mq_unlink		263 +#define __NR_mq_timedsend	264 +#define __NR_mq_timedreceive	265 +#define __NR_mq_notify		266 +#define __NR_mq_getsetattr	267 +#define __NR_kexec_load		268 +#define __NR_add_key		269 +#define __NR_request_key	270 +#define __NR_keyctl		271 +#define __NR_waitid		272 +#define __NR_ioprio_set		273 +#define __NR_ioprio_get		274 +#define __NR_inotify_init	275 +#define __NR_inotify_add_watch	276 +#define __NR_inotify_rm_watch	277 +#define __NR_spu_run		278 +#define __NR_spu_create		279 +#define __NR_pselect6		280 +#define __NR_ppoll		281 +#define __NR_unshare		282 +#define __NR_splice		283 +#define __NR_tee		284 +#define __NR_vmsplice		285 +#define __NR_openat		286 +#define __NR_mkdirat		287 +#define __NR_mknodat		288 +#define __NR_fchownat		289 +#define __NR_futimesat		290 +#if defined(__PPC64) && !defined(__ABI32) +#define __NR_newfstatat		291 +#else +#define __NR_fstatat64		291 +#endif +#define __NR_unlinkat		292 +#define __NR_renameat		293 +#define __NR_linkat		294 +#define __NR_symlinkat		295 +#define __NR_readlinkat		296 +#define __NR_fchmodat		297 +#define __NR_faccessat		298 +#define __NR_get_robust_list	299 +#define __NR_set_robust_list	300 +#define __NR_move_pages		301 +#define __NR_getcpu		302 +#define __NR_epoll_pwait	303 +#define __NR_utimensat		304 +#define __NR_signalfd		305 +#define __NR_timerfd		306 +#define __NR_timerfd_create     306 +#define __NR_eventfd		307 +#define __NR_sync_file_range2	308 +#define __NR_fallocate		309 +#define __NR_subpage_prot		310 +#define __NR_timerfd_settime	311 +#define __NR_timerfd_gettime	312 +#define __NR_signalfd4		313 +#define __NR_eventfd2		314 +#define __NR_epoll_create1	315 +#define __NR_dup3			316 +#define __NR_pipe2		317 +#define __NR_inotify_init1	318 +#define __NR_perf_event_open       319 +#define __NR_preadv                320 +#define __NR_pwritev               321 +#define __NR_rt_tgsigqueueinfo     322 +#define __NR_fanotify_init         323 +#define __NR_fanotify_mark         324 +#define __NR_prlimit64             325 +#define __NR_socket                326 +#define __NR_bind                  327 +#define __NR_connect               328 +#define __NR_listen                329 +#define __NR_accept                330 +#define __NR_getsockname           331 +#define __NR_getpeername           332 +#define __NR_socketpair            333 +#define __NR_send                  334 +#define __NR_sendto                335 +#define __NR_recv                  336 +#define __NR_recvfrom              337 +#define __NR_shutdown              338 +#define __NR_setsockopt            339 +#define __NR_getsockopt            340 +#define __NR_sendmsg               341 +#define __NR_recvmsg               342 +#define __NR_recvmmsg              343 +#define __NR_accept4               344 +#define __NR_name_to_handle_at     345 +#define __NR_open_by_handle_at     346 +#define __NR_clock_adjtime         347 +#define __NR_syncfs                348 +#define __NR_sendmmsg              349 +#define __NR_setns                 350 +#define __NR_process_vm_readv      351 +#define __NR_process_vm_writev     352 + +/* + * 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_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_vm86                   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_setresuid32            164  +#define SYS_setresuid              164 +#define SYS_getresuid32            165  +#define SYS_getresuid              165 +#define SYS_query_module           166 +#define SYS_poll                   167 +#define SYS_nfsservctl             168 +#define SYS_setresgid32            169 +#define SYS_setresgid              169  +#define SYS_getresgid32            170  +#define SYS_getresgid              170 +#define SYS_prctl                  171 +#define SYS_rt_sigreturn           172 +#define SYS_rt_sigaction           173 +#define SYS_rt_sigprocmask         174 +#define SYS_rt_sigpending          175 +#define SYS_rt_sigtimedwait        176 +#define SYS_rt_sigqueueinfo        177 +#define SYS_rt_sigsuspend          178 +#define SYS_pread64                179 +#define SYS_pwrite64               180 +#define SYS_chown                  181 +#define SYS_getcwd                 182 +#define SYS_capget                 183 +#define SYS_capset                 184 +#define SYS_sigaltstack            185 +#define SYS_sendfile               186 +#define SYS_getpmsg                187 +#define SYS_putpmsg                188 +#define SYS_vfork                  189 +#define SYS_ugetrlimit             190 +#define SYS_readahead              191 +#if !defined(__PPC64) || defined(__ABI32) +#define SYS_mmap2                  192 +#define SYS_truncate64             193 +#define SYS_ftruncate64            194 +#define SYS_stat64                 195 +#define SYS_lstat64                196 +#define SYS_fstat64                197 +#endif +#define SYS_pciconfig_read         198 +#define SYS_pciconfig_write        199 +#define SYS_pciconfig_iobase       200 +#define SYS_multiplexer            201 +#define SYS_getdents64             202 +#define SYS_pivot_root             203 +#if !defined(__PPC64) || defined(__ABI32) +#define SYS_fcntl64                204 +#endif +#define SYS_madvise                205 +#define SYS_mincore                206 +#define SYS_gettid                 207 +#define SYS_tkill                  208 +#define SYS_setxattr               209 +#define SYS_lsetxattr              210 +#define SYS_fsetxattr              211 +#define SYS_getxattr               212 +#define SYS_lgetxattr              213 +#define SYS_fgetxattr              214 +#define SYS_listxattr              215 +#define SYS_llistxattr             216 +#define SYS_flistxattr             217 +#define SYS_removexattr            218 +#define SYS_lremovexattr           219 +#define SYS_fremovexattr           220 +#define SYS_futex                  221 +#define SYS_sched_setaffinity      222 +#define SYS_sched_getaffinity      223 +#define SYS_tuxcall                225 +#if !defined(__PPC64) || defined(__ABI32) +#define SYS_sendfile64             226 +#endif +#define SYS_io_setup               227 +#define SYS_io_destroy             228 +#define SYS_io_getevents           229 +#define SYS_io_submit              230 +#define SYS_io_cancel              231 +#define SYS_set_tid_address        232 +#define SYS_fadvise64              233 +#define SYS_exit_group             234 +#define SYS_lookup_dcookie         235 +#define SYS_epoll_create           236 +#define SYS_epoll_ctl              237 +#define SYS_epoll_wait             238 +#define SYS_remap_file_pages       239 +#define SYS_timer_create           240 +#define SYS_timer_settime          241 +#define SYS_timer_gettime          242 +#define SYS_timer_getoverrun       243 +#define SYS_timer_delete           244 +#define SYS_clock_settime          245 +#define SYS_clock_gettime          246 +#define SYS_clock_getres           247 +#define SYS_clock_nanosleep        248 +#define SYS_swapcontext            249 +#define SYS_tgkill                 250 +#define SYS_utimes                 251 +#define SYS_statfs64               252 +#define SYS_fstatfs64              253 +#if !defined(__PPC64) || defined(__ABI32) +#define SYS_fadvise64_64           254 +#endif +#define SYS_rtas		255 +#define SYS_sys_debug_setcontext 256 +#define SYS_migrate_pages	258 +#define SYS_mbind		259 +#define SYS_get_mempolicy	260 +#define SYS_set_mempolicy	261 +#define SYS_mq_open		262 +#define SYS_mq_unlink		263 +#define SYS_mq_timedsend	264 +#define SYS_mq_timedreceive	265 +#define SYS_mq_notify		266 +#define SYS_mq_getsetattr	267 +#define SYS_kexec_load		268 +#define SYS_add_key		269 +#define SYS_request_key	270 +#define SYS_keyctl		271 +#define SYS_waitid		272 +#define SYS_ioprio_set		273 +#define SYS_ioprio_get		274 +#define SYS_inotify_init	275 +#define SYS_inotify_add_watch	276 +#define SYS_inotify_rm_watch	277 +#define SYS_spu_run		278 +#define SYS_spu_create		279 +#define SYS_pselect6		280 +#define SYS_ppoll		281 +#define SYS_unshare		282 +#define SYS_splice		283 +#define SYS_tee		284 +#define SYS_vmsplice		285 +#define SYS_openat		286 +#define SYS_mkdirat		287 +#define SYS_mknodat		288 +#define SYS_fchownat		289 +#define SYS_futimesat		290 +#if defined(__PPC64) && !defined(__ABI32) +#define SYS_newfstatat		291 +#else +#define SYS_fstatat64		291 +#endif +#define SYS_unlinkat		292 +#define SYS_renameat		293 +#define SYS_linkat		294 +#define SYS_symlinkat		295 +#define SYS_readlinkat		296 +#define SYS_fchmodat		297 +#define SYS_faccessat		298 +#define SYS_get_robust_list	299 +#define SYS_set_robust_list	300 +#define SYS_move_pages		301 +#define SYS_getcpu		302 +#define SYS_epoll_pwait	303 +#define SYS_utimensat		304 +#define SYS_signalfd		305 +#define SYS_timerfd		306 +#define SYS_timerfd_create      306        +#define SYS_eventfd		307 +#define SYS_sync_file_range2	308 +#define SYS_fallocate		309 +#define SYS_subpage_prot		310 +#define SYS_timerfd_settime	311 +#define SYS_timerfd_gettime	312 +#define SYS_signalfd4		313 +#define SYS_eventfd2		314 +#define SYS_epoll_create1	315 +#define SYS_dup3			316 +#define SYS_pipe2		317 +#define SYS_inotify_init1	318 +#define SYS_perf_event_open       319 +#define SYS_preadv                320 +#define SYS_pwritev               321 +#define SYS_rt_tgsigqueueinfo     322 +#define SYS_fanotify_init         323 +#define SYS_fanotify_mark         324 +#define SYS_prlimit64             325 +#define SYS_socket                326 +#define SYS_bind                  327 +#define SYS_connect               328 +#define SYS_listen                329 +#define SYS_accept                330 +#define SYS_getsockname           331 +#define SYS_getpeername           332 +#define SYS_socketpair            333 +#define SYS_send                  334 +#define SYS_sendto                335 +#define SYS_recv                  336 +#define SYS_recvfrom              337 +#define SYS_shutdown              338 +#define SYS_setsockopt            339 +#define SYS_getsockopt            340 +#define SYS_sendmsg               341 +#define SYS_recvmsg               342 +#define SYS_recvmmsg              343 +#define SYS_accept4               344 +#define SYS_name_to_handle_at     345 +#define SYS_open_by_handle_at     346 +#define SYS_clock_adjtime         347 +#define SYS_syncfs                348 +#define SYS_sendmmsg              349    +#define SYS_setns                 350      +#define SYS_process_vm_readv      351    +#define SYS_process_vm_writev     352  + diff --git a/arch/powerpc/bits/termios.h b/arch/powerpc/bits/termios.h new file mode 100644 index 00000000..9f6abd83 --- /dev/null +++ b/arch/powerpc/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/powerpc/bits/user.h b/arch/powerpc/bits/user.h new file mode 100644 index 00000000..c533fd8d --- /dev/null +++ b/arch/powerpc/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/powerpc/bits/wchar.h b/arch/powerpc/bits/wchar.h new file mode 100644 index 00000000..ffb26917 --- /dev/null +++ b/arch/powerpc/bits/wchar.h @@ -0,0 +1,4 @@ +#ifndef WCHAR_MIN +#define WCHAR_MIN 0U +#define WCHAR_MAX 0xffffffffU +#endif diff --git a/arch/powerpc/pthread_arch.h b/arch/powerpc/pthread_arch.h new file mode 100644 index 00000000..cb2a70b8 --- /dev/null +++ b/arch/powerpc/pthread_arch.h @@ -0,0 +1,14 @@ +static inline struct pthread *__pthread_self() +{ +	register char* tp __asm__("r2"); +	return (pthread_t)(tp - 0x7000 - sizeof(struct pthread)); +} +                         +#define TLS_ABOVE_TP +#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000) + +// offset of the PC register in mcontext_t, divided by the system wordsize +// the kernel calls the ip "nip", it's the first saved value after the 32 +// GPRs. +#define CANCEL_REG_IP 32 + diff --git a/arch/powerpc/reloc.h b/arch/powerpc/reloc.h new file mode 100644 index 00000000..58e482d6 --- /dev/null +++ b/arch/powerpc/reloc.h @@ -0,0 +1,36 @@ +#include <string.h> +#include <elf.h> + +#define ETC_LDSO_PATH "/etc/ld-musl-powerpc.path" + +#define IS_COPY(x) ((x)==R_PPC_COPY) +#define IS_PLT(x) ((x)==R_PPC_JMP_SLOT) + +// see linux' arch/powerpc/include/asm/elf.h  +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_PPC_GLOB_DAT: +	case R_PPC_JMP_SLOT: +		*reloc_addr = sym_val; +		break; +	case R_PPC_REL32: +		if (sym_val) *reloc_addr += sym_val; +		else *reloc_addr += (size_t)base_addr; +		break; +	case R_PPC_COPY: +		memcpy(reloc_addr, (void *)sym_val, sym_size); +		break; +	case R_PPC_RELATIVE: +		*reloc_addr += (size_t)base_addr; +		break; +	//case R_PPC64_DTPMOD64:  //R_X86_64_DTPMOD64: +	case R_PPC_DTPMOD32:  //R_386_TLS_DTPMOD32: +		*reloc_addr = def.dso ? def.dso->tls_id : self->tls_id; +		break; +	} +} diff --git a/arch/powerpc/syscall_arch.h b/arch/powerpc/syscall_arch.h new file mode 100644 index 00000000..72e55220 --- /dev/null +++ b/arch/powerpc/syscall_arch.h @@ -0,0 +1,62 @@ +#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 _NSIG 64 +#define __SYSCALL_SSLEN (_NSIG/8) + +long (__syscall)(long, ...); + +static inline long __syscall0(long n) +{ +	return (__syscall)(n, 0, 0, 0, 0, 0, 0); +} + +static inline long __syscall1(long n, long a) +{ +	return (__syscall)(n, a, 0, 0, 0, 0, 0); +} + +static inline long __syscall2(long n, long a, long b) +{ +	return (__syscall)(n, a, b, 0, 0, 0, 0); +} + +static inline long __syscall3(long n, long a, long b, long c) +{ +	return (__syscall)(n, a, b, c, 0, 0, 0); +} + +static inline long __syscall4(long n, long a, long b, long c, long d) +{ +	return (__syscall)(n, a, b, c, d, 0, 0); +} + +static inline long __syscall5(long n, long a, long b, long c, long d, long e) +{ +	return (__syscall)(n, a, b, c, d, e, 0); +} + +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); +} + +#define __SC_socket      1 +#define __SC_bind        2 +#define __SC_connect     3 +#define __SC_listen      4 +#define __SC_accept      5 +#define __SC_getsockname 6 +#define __SC_getpeername 7 +#define __SC_socketpair  8 +#define __SC_send        9 +#define __SC_recv        10 +#define __SC_sendto      11 +#define __SC_recvfrom    12 +#define __SC_shutdown    13 +#define __SC_setsockopt  14 +#define __SC_getsockopt  15 +#define __SC_sendmsg     16 +#define __SC_recvmsg     17 @@ -199,6 +199,7 @@ i?86*) ARCH=i386 ;;  x86_64*) ARCH=x86_64 ;;  mips-*|mipsel-*) ARCH=mips ;;  microblaze-*) ARCH=microblaze ;; +powerpc-*) ARCH=powerpc ;;  unknown) fail "$0: unable to detect target arch; try $0 --target=..." ;;  *) fail "$0: unknown or unsupported target \"$target\"" ;;  esac diff --git a/crt/powerpc/crt1.s b/crt/powerpc/crt1.s new file mode 100644 index 00000000..7025430c --- /dev/null +++ b/crt/powerpc/crt1.s @@ -0,0 +1,26 @@ +        .weak  _init +        .weak  _fini +        .global _start +        .type   _start, %function +_start: +        mr      9, 1                  # Save the original stack pointer. +        clrrwi  1, 1, 4               # Align the stack to 16 bytes. +        lis     13, _SDA_BASE_@ha      # r13 points to the small data area. +        addi    13, 13, _SDA_BASE_@l   +        li      0, 0                   # Zero the frame pointer. +        stwu    1, -16(1)             # The initial stack frame. +        mtlr    0                      # Clear the link register. +        stw     0, 0(1)               # And save it. +        lis     3, main@ha             # Get main() ... +        addi    3, 3, main@l +        lwz     4, 0(9)               # and argc... +        addi    5, 9, 4               # and argv ... +        lis     6, _init@ha            # and _init() ... +        addi    6, 6, _init@l +        lis     7, _fini@ha            # and _fini() ... +        addi    7, 7, _fini@l +        li      8, 0                   # ldso_fini == NULL +        bl       __libc_start_main      # Let's go! +        b       .                       # Never gets here. +        .end    _start +        .size   _start, .-_start diff --git a/src/internal/powerpc/syscall.s b/src/internal/powerpc/syscall.s new file mode 100644 index 00000000..bca620db --- /dev/null +++ b/src/internal/powerpc/syscall.s @@ -0,0 +1,18 @@ +	.global __syscall +	.type   __syscall,@function +__syscall: +	mr      0, 3                  # Save the system call number +	mr      3, 4                  # Shift the arguments: arg1 +	mr      4, 5                  # arg2 +	mr      5, 6                  # arg3 +	mr      6, 7                  # arg4 +	mr      7, 8                  # arg5 +	mr      8, 9                  # arg6 +	sc +	bnslr+ # return if not summary overflow +	#else error: +	# return negated value. +	neg 3, 3 +	blr +	.end    __syscall +	.size   __syscall, .-__syscall diff --git a/src/ldso/powerpc/dlsym.s b/src/ldso/powerpc/dlsym.s new file mode 100644 index 00000000..20796176 --- /dev/null +++ b/src/ldso/powerpc/dlsym.s @@ -0,0 +1,8 @@ +        .text +        .global dlsym +        .type   dlsym,@function +dlsym: +        mflr    5                      # The return address is arg3. +        b       __dlsym +        .end    dlsym +        .size   dlsym, .-dlsym diff --git a/src/ldso/powerpc/start.s b/src/ldso/powerpc/start.s new file mode 100644 index 00000000..d2060e3d --- /dev/null +++ b/src/ldso/powerpc/start.s @@ -0,0 +1,23 @@ +# FIXME : does not work, the small data array needs to be relocated. +# see elfspec_ppc.pdf, page 76-84 +        .global _start +        .type   _start,@function +_start: +        mr      9, 1                  # Save the original stack pointer. +        clrrwi  1, 1, 4               # Align the stack to 16 bytes. +        lis     13, _SDA_BASE_@ha      # r13 points to the small data area. +        addi    13, 13, _SDA_BASE_@l +        li      0, 0                   # Zero the frame pointer. +        lwz     3, 0(9)               # and argc... +        addi    4, 9, 4               # and argv ... +        mtlr    0                      # Clear the link register. +        # Go to the musl dynamic linker entry point. +        bl      __dynlink +        cmpi    4, 0, 3, 1            # Check for a 1. +        bne     4, .                   # Stay here +        mtlr    3                      # Set the link address... +        li      3, 0 +        blr                             # and go. +        .end    _start +        .size   _start, .-_start + diff --git a/src/setjmp/powerpc/longjmp.s b/src/setjmp/powerpc/longjmp.s new file mode 100644 index 00000000..e3740901 --- /dev/null +++ b/src/setjmp/powerpc/longjmp.s @@ -0,0 +1,47 @@ +        .global _longjmp +        .global longjmp +        .type   _longjmp,@function +        .type   longjmp,@function +_longjmp: +longjmp: +# void longjmp(jmp_buf env, int val); +# put val into return register and restore the env saved in setjmp +# if val(r4) is 0, put 1 there. +	# 0) move old return address into r0 +	lwz 0, 0(3) +	# 1) put it into link reg +	mtlr 0 +	#2 ) restore stack ptr +	lwz 1, 4(3) +	#3) restore control reg +	lwz 0, 8(3) +	mtcr 0 +	#4) restore r14-r31 +	lwz 14, 12(3) +	lwz 15, 16(3) +	lwz 16, 20(3) +	lwz 17, 24(3) +	lwz 18, 28(3) +	lwz 19, 32(3) +	lwz 20, 36(3) +	lwz 21, 40(3) +	lwz 22, 44(3) +	lwz 23, 48(3) +	lwz 24, 52(3) +	lwz 25, 56(3) +	lwz 26, 60(3) +	lwz 27, 64(3) +	lwz 28, 68(3) +	lwz 29, 72(3) +	lwz 30, 76(3) +	lwz 31, 80(3) +	#5) put val into return reg r3 +	mr 3, 4 + +	#6) check if return value is 0, make it 1 in that case +	cmpwi cr7, 4, 0 +	bne cr7, 1f +	li 3, 1 +1: +	blr + diff --git a/src/setjmp/powerpc/setjmp.s b/src/setjmp/powerpc/setjmp.s new file mode 100644 index 00000000..27c975e4 --- /dev/null +++ b/src/setjmp/powerpc/setjmp.s @@ -0,0 +1,40 @@ +        .global __setjmp +        .global _setjmp +        .global setjmp +        .type   __setjmp,@function +        .type   _setjmp,@function +        .type   setjmp,@function +__setjmp: +_setjmp: +setjmp: +	# 0) store IP int 0, then into the jmpbuf pointed to by r3 (first arg) +	mflr 0 +	stw 0, 0(3) +	# 1) store reg1 (SP) +	stw 1, 4(3) +	# 2) store cr +	mfcr 0 +	stw 0, 8(3) +	# 3) store r14-31 +	stw 14, 12(3) +	stw 15, 16(3) +	stw 16, 20(3) +	stw 17, 24(3) +	stw 18, 28(3) +	stw 19, 32(3) +	stw 20, 36(3) +	stw 21, 40(3) +	stw 22, 44(3) +	stw 23, 48(3) +	stw 24, 52(3) +	stw 25, 56(3) +	stw 26, 60(3) +	stw 27, 64(3) +	stw 28, 68(3) +	stw 29, 72(3) +	stw 30, 76(3) +	stw 31, 80(3) +	# 4) set return value to 0 +	li 3, 0 +	# 5) return +	blr diff --git a/src/signal/powerpc/restore.s b/src/signal/powerpc/restore.s new file mode 100644 index 00000000..fd7bcba5 --- /dev/null +++ b/src/signal/powerpc/restore.s @@ -0,0 +1,11 @@ +        .global __restore +        .type __restore,%function +__restore: +        li      0, 119 #__NR_sigreturn +        sc + +        .global __restore_rt +        .type __restore_rt,%function +__restore_rt: +        li      0, 172 # __NR_rt_sigreturn +        sc diff --git a/src/signal/powerpc/sigsetjmp.s b/src/signal/powerpc/sigsetjmp.s new file mode 100644 index 00000000..0b79dcce --- /dev/null +++ b/src/signal/powerpc/sigsetjmp.s @@ -0,0 +1,34 @@ +        .global sigsetjmp +        .type sigsetjmp,%function +sigsetjmp: +	#int sigsetjmp(sigjmp_buf buf, int save) +	#		r3		r4 +	#0) store save into buf->__fl +	stw 4, 256(3) +	#1) compare save with 0 +	cmpwi cr7, 4, 0 +	#2) if its 0, goto setjmp code +	beq- cr7, 1f +	#3) else: we must call pthread_sigmask(SIG_SETMASK, 0, (sigset_t *)buf->__ss); +	# thus store r3 on the stack, to restore it later +	stw 3, -4(1) +	# store old link reg +	mflr 0 +	stw 0, -8(1) +	# increase stack frame by 16 +	subi 1, 1, 16 +	# put pointer to ss buf into r5 (3rd arg) +	addi 5, 3, 260 +	# put "2" i.e. SIG_SETMASK in r3 +	li 3, 2 +	li 4, 0 +	bl pthread_sigmask +	#restore sp +	addi 1, 1, 16 +	#restore r3 +	lwz 3, -4(1) +	#restore link reg +	lwz 0, -8(1) +	mtlr 0 +1: +	b setjmp diff --git a/src/thread/powerpc/__set_thread_area.s b/src/thread/powerpc/__set_thread_area.s new file mode 100644 index 00000000..c1a34c1f --- /dev/null +++ b/src/thread/powerpc/__set_thread_area.s @@ -0,0 +1,11 @@ +.text +.global __set_thread_area +.type   __set_thread_area, %function +__set_thread_area: +	# mov pointer in reg3 into r2 +	mr 2, 3 +	# put 0 into return reg +	li 3, 0 +	# return +	blr + diff --git a/src/thread/powerpc/__unmapself.s b/src/thread/powerpc/__unmapself.s new file mode 100644 index 00000000..bb3724e3 --- /dev/null +++ b/src/thread/powerpc/__unmapself.s @@ -0,0 +1,9 @@ +        .text +        .global __unmapself +        .type   __unmapself,%function +__unmapself: +        li      0, 91 # __NR_munmap +        sc +        li      0, 1 #__NR_exit +        sc +        blr diff --git a/src/thread/powerpc/clone.s b/src/thread/powerpc/clone.s new file mode 100644 index 00000000..cea69e99 --- /dev/null +++ b/src/thread/powerpc/clone.s @@ -0,0 +1,83 @@ +.text +.global __clone +.type __clone, %function +__clone: +# int clone(fn, stack, flags, arg, ptid, tls, ctid) +#            a  b       c     d     e    f    g +#            3  4       5     6     7    8    9 +# pseudo C code: +# tid = syscall(SYS_clone,c,b,e,f,g); +# if (!tid) syscall(SYS_exit, a(d)); +# return tid; + +# SYS_clone = 120 +# SYS_exit = 1 + +# in order that the child can find the start func and its arg, we need to store it into +# non-volative regs. to do so, we have to store those 2 regs into our stackframe, so +# we can restore them later. +stw 30, -4(1) +stw 31, -8(1) +subi 1, 1, 16  + +# save r3 (func) into r30, and r6(arg) into r31 +mr 30, 3 +mr 31, 6 + +#move c into first arg +mr 3, 5 +#mr 4, 4 +mr 5, 7 +mr 6, 8 +mr 7, 9 + +# move syscall number into r0     +li 0, 120 + +sc + +# check for syscall error +#this code should be more efficient, but it borks +#bns+ 1f # jump to label 1 if no summary overflow. +#else +#neg 3, 3 #negate the result (errno) +#b 2f # jump to epilogue + +# this error check code at least does not spoil the clone call. +#mfcr    0                      # Check for an error +#rlwinm  4, 0, 0, 3, 3        # by checking for bit 28. +#cmplwi  0, 4, 0               # It is an error if non-zero. +#beq     0, 1f                  # Jump if not an error. +#neg     3, 3                  # Negate the error number. +#b       2f # jump to epilogue +1: +# compare sc result with 0 +cmpwi cr7, 3, 0 + +# if not 0, jump to end +bne cr7, 2f + +#else: we're the child +#call funcptr +# move arg (d) into r3 +mr 3, 31 +#move r30 (funcptr) into CTR reg +mtctr 30 +# call CTR reg +bctrl +# mov SYS_exit into r0 (the exit param is already in r3) +li 0, 1 +sc + +2: + +# restore stack +addi 1, 1, 16 +lwz 30, -4(1) +lwz 31, -8(1) + +blr + + + + diff --git a/src/thread/powerpc/syscall_cp.s b/src/thread/powerpc/syscall_cp.s new file mode 100644 index 00000000..2c97ca04 --- /dev/null +++ b/src/thread/powerpc/syscall_cp.s @@ -0,0 +1,51 @@ +#r0: volatile. may be modified during linkage. +#r1: stack frame: 16 byte alignment. +#r2: tls/thread pointer on pp32 +#r3,r4: return values, first args +#r5-r10: args +#r11-r12: volatile. may be modified during linkage +#r13: "small data area" pointer +#r14 - r30: local vars +#r31: local or environment pointer + +#r1, r14-31: belong to the caller, must be saved and restored +#r0, r3-r12, ctr, xer: volatile, not preserved +#r0,r11,r12: may be altered by cross-module call,  +#"a func cannot depend on that these regs have the values placed by the caller" + +#the fields CR2,CR2,CR4 of the cond reg must be preserved +#LR (link reg) shall contain the funcs return address +	.text +	.global __syscall_cp_asm +	.type   __syscall_cp_asm,%function +__syscall_cp_asm: +	# at enter: r3 = pointer to self->cancel, r4: syscall no, r5: first arg, r6: 2nd, r7: 3rd, r8: 4th, r9: 5th, r10: 6th +	.global __cp_begin +__cp_begin: +	# r3 holds first argument, its a pointer to self->cancel.  +	# we must compare the dereferenced value with 0 and jump to __cancel if its not +	 +	lwz 0, 0(3) #deref pointer into r0 +	 +	cmpwi cr7, 0, 0 #compare r0 with 0, store result in cr7.  +	beq+ cr7, 1f #jump to label 1 if r0 was 0 +	 +	b __cancel #else call cancel  +	# (the return address is not needed, since __cancel never returns) +1: +	#ok, the cancel flag was not set +	# syscall: number goes to r0, the rest 3-8 +	mr      0, 4                  # put the system call number into r0 +	mr      3, 5                  # Shift the arguments: arg1 +	mr      4, 6                  # arg2 +	mr      5, 7                  # arg3 +	mr      6, 8                  # arg4 +	mr      7, 9                  # arg5 +	mr      8, 10                  # arg6 +	sc +	.global __cp_end +__cp_end: +	bnslr+ # return if no summary overflow.  +	#else negate result. +	neg 3, 3 +	blr | 
