Merge remote-tracking branch 'nsz/math'
authorRich Felker <dalias@aerifal.cx>
Thu, 15 Nov 2012 13:37:58 +0000 (08:37 -0500)
committerRich Felker <dalias@aerifal.cx>
Thu, 15 Nov 2012 13:37:58 +0000 (08:37 -0500)
43 files changed:
COPYRIGHT
arch/powerpc/atomic.h [new file with mode: 0644]
arch/powerpc/bits/alltypes.h.sh [new file with mode: 0755]
arch/powerpc/bits/endian.h [new file with mode: 0644]
arch/powerpc/bits/errno.h [new file with mode: 0644]
arch/powerpc/bits/fcntl.h [new file with mode: 0644]
arch/powerpc/bits/fenv.h [new file with mode: 0644]
arch/powerpc/bits/float.h [new file with mode: 0644]
arch/powerpc/bits/ioctl.h [new file with mode: 0644]
arch/powerpc/bits/ipc.h [new file with mode: 0644]
arch/powerpc/bits/limits.h [new file with mode: 0644]
arch/powerpc/bits/mman.h [new file with mode: 0644]
arch/powerpc/bits/msg.h [new file with mode: 0644]
arch/powerpc/bits/posix.h [new file with mode: 0644]
arch/powerpc/bits/reg.h [new file with mode: 0644]
arch/powerpc/bits/setjmp.h [new file with mode: 0644]
arch/powerpc/bits/shm.h [new file with mode: 0644]
arch/powerpc/bits/signal.h [new file with mode: 0644]
arch/powerpc/bits/socket.h [new file with mode: 0644]
arch/powerpc/bits/stat.h [new file with mode: 0644]
arch/powerpc/bits/statfs.h [new file with mode: 0644]
arch/powerpc/bits/stdarg.h [new file with mode: 0644]
arch/powerpc/bits/stdint.h [new file with mode: 0644]
arch/powerpc/bits/syscall.h [new file with mode: 0644]
arch/powerpc/bits/termios.h [new file with mode: 0644]
arch/powerpc/bits/user.h [new file with mode: 0644]
arch/powerpc/bits/wchar.h [new file with mode: 0644]
arch/powerpc/pthread_arch.h [new file with mode: 0644]
arch/powerpc/reloc.h [new file with mode: 0644]
arch/powerpc/syscall_arch.h [new file with mode: 0644]
configure
crt/powerpc/crt1.s [new file with mode: 0644]
src/internal/powerpc/syscall.s [new file with mode: 0644]
src/ldso/powerpc/dlsym.s [new file with mode: 0644]
src/ldso/powerpc/start.s [new file with mode: 0644]
src/setjmp/powerpc/longjmp.s [new file with mode: 0644]
src/setjmp/powerpc/setjmp.s [new file with mode: 0644]
src/signal/powerpc/restore.s [new file with mode: 0644]
src/signal/powerpc/sigsetjmp.s [new file with mode: 0644]
src/thread/powerpc/__set_thread_area.s [new file with mode: 0644]
src/thread/powerpc/__unmapself.s [new file with mode: 0644]
src/thread/powerpc/clone.s [new file with mode: 0644]
src/thread/powerpc/syscall_cp.s [new file with mode: 0644]

index f3b5a58..c081761 100644 (file)
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -65,12 +65,16 @@ were released into the public domain; others are licensed under the
 standard MIT license terms at the top of this file. See individual
 files for their copyright status.
 
-The mips port was originally written by Richard Pennington for use in
-the ellcc project. The original code was adapted by Rich Felker for
-build system and code conventions during upstream integration. It is
-licensed under the standard MIT terms.
+The mips and microblaze ports were originally written by Richard
+Pennington for use in the ellcc project. The original code was adapted
+by Rich Felker for build system and code conventions during upstream
+integration. It is licensed under the standard MIT terms.
 
-All files which have no copyright comments are original works
+The powerpc port was also originally written by Richard Pennington,
+and later supplemented and integrated by John Spencer. It is licensed
+under the standard MIT terms.
+
+All other files which have no copyright comments are original works
 Copyright © 2005-2012 Rich Felker, the main author of this library.
 The decision to exclude such comments is intentional, as it should be
 possible to carry around the complete source code on tiny storage
diff --git a/arch/powerpc/atomic.h b/arch/powerpc/atomic.h
new file mode 100644 (file)
index 0000000..4a47064
--- /dev/null
@@ -0,0 +1,117 @@
+#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 %0, 0, %1\n"
+               "       cmpw %0, %2\n"
+               "       bne 1f\n"
+               "       stwcx. %3, 0, %1\n"
+               "       bne- 1b\n"
+               "1:     \n"
+               : "=&r"(t) : "r"(p), "r"(t), "r"(s) : "cc", "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)
+{
+       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/powerpc/bits/alltypes.h.sh b/arch/powerpc/bits/alltypes.h.sh
new file mode 100755 (executable)
index 0000000..9fa6fab
--- /dev/null
@@ -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 (file)
index 0000000..4442abf
--- /dev/null
@@ -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 (file)
index 0000000..9a193a2
--- /dev/null
@@ -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 (file)
index 0000000..83c0222
--- /dev/null
@@ -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 (file)
index 0000000..edbdea2
--- /dev/null
@@ -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 (file)
index 0000000..dce9e2d
--- /dev/null
@@ -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 (file)
index 0000000..f2eff4d
--- /dev/null
@@ -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 (file)
index 0000000..b0bcfa3
--- /dev/null
@@ -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 (file)
index 0000000..e19461d
--- /dev/null
@@ -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 (file)
index 0000000..302044e
--- /dev/null
@@ -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 (file)
index 0000000..3db8576
--- /dev/null
@@ -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 (file)
index 0000000..30a3871
--- /dev/null
@@ -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 (file)
index 0000000..0c7bffc
--- /dev/null
@@ -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 (file)
index 0000000..a4baec4
--- /dev/null
@@ -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 (file)
index 0000000..8807c4f
--- /dev/null
@@ -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 (file)
index 0000000..d633694
--- /dev/null
@@ -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 (file)
index 0000000..3d97193
--- /dev/null
@@ -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 (file)
index 0000000..aa8414e
--- /dev/null
@@ -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 (file)
index 0000000..f103f4e
--- /dev/null
@@ -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 (file)
index 0000000..fde3781
--- /dev/null
@@ -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 (file)
index 0000000..8e21a8c
--- /dev/null
@@ -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 (file)
index 0000000..3ccd14f
--- /dev/null
@@ -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 (file)
index 0000000..9f6abd8
--- /dev/null
@@ -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 (file)
index 0000000..c533fd8
--- /dev/null
@@ -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 (file)
index 0000000..c969c5b
--- /dev/null
@@ -0,0 +1,4 @@
+#ifndef WCHAR_MIN
+#define WCHAR_MIN (-1-0x7fffffff)
+#define WCHAR_MAX (0x7fffffff)
+#endif
diff --git a/arch/powerpc/pthread_arch.h b/arch/powerpc/pthread_arch.h
new file mode 100644 (file)
index 0000000..cb2a70b
--- /dev/null
@@ -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 (file)
index 0000000..58e482d
--- /dev/null
@@ -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 (file)
index 0000000..72e5522
--- /dev/null
@@ -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
index cee817e..08ef19a 100755 (executable)
--- a/configure
+++ b/configure
@@ -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 (file)
index 0000000..7025430
--- /dev/null
@@ -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 (file)
index 0000000..bca620d
--- /dev/null
@@ -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 (file)
index 0000000..b9fae98
--- /dev/null
@@ -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 (file)
index 0000000..ac2c20c
--- /dev/null
@@ -0,0 +1,22 @@
+# 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 (file)
index 0000000..fd61ae7
--- /dev/null
@@ -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 (file)
index 0000000..eaf7b68
--- /dev/null
@@ -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 (file)
index 0000000..4d41c27
--- /dev/null
@@ -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 (file)
index 0000000..81f5a40
--- /dev/null
@@ -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 (file)
index 0000000..c1a34c1
--- /dev/null
@@ -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 (file)
index 0000000..c9360b4
--- /dev/null
@@ -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 (file)
index 0000000..cea69e9
--- /dev/null
@@ -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 (file)
index 0000000..2c97ca0
--- /dev/null
@@ -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