summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Heim <phreak@gentoo.org>2006-08-28 17:52:40 +0000
committerChristian Heim <phreak@gentoo.org>2006-08-28 17:52:40 +0000
commitf4828c177ee80da33bdd5dcfc019bf424d426579 (patch)
treeb6c1e78e54ee753760b01f385d28f53f6ba59181 /dietlibc
parentRenaming and adding to the README (diff)
downloadmisc-f4828c177ee80da33bdd5dcfc019bf424d426579.tar.gz
misc-f4828c177ee80da33bdd5dcfc019bf424d426579.tar.bz2
misc-f4828c177ee80da33bdd5dcfc019bf424d426579.zip
Renaming and adding to the README
svn path=/; revision=444
Diffstat (limited to 'dietlibc')
-rw-r--r--dietlibc/patches/0.30-r1/000_README18
-rw-r--r--dietlibc/patches/0.30-r1/005_all_Makefile.patch14
-rw-r--r--dietlibc/patches/0.30-r1/025_all_libstdio-fflush-null.patch (renamed from dietlibc/patches/0.30-r1/47_libstdio-fflush-null.patch)0
-rw-r--r--dietlibc/patches/0.30-r1/200_ppc_rename-ppc-powerpc.patch1392
-rw-r--r--dietlibc/patches/0.30-r1/205_ppc_cross-compiler.patch15
-rw-r--r--dietlibc/patches/0.30-r1/250_ppc64_rename-ppc64-powerpc64.patch1499
6 files changed, 2936 insertions, 2 deletions
diff --git a/dietlibc/patches/0.30-r1/000_README b/dietlibc/patches/0.30-r1/000_README
index d66e50d..c980db1 100644
--- a/dietlibc/patches/0.30-r1/000_README
+++ b/dietlibc/patches/0.30-r1/000_README
@@ -49,5 +49,21 @@ From: Mike Frysinger
Desc: Fix the seekdir and telldir prototypes (using wrong types)
Patch: 020_all_nice.patch
-From: Debian
+From: Debian / Upstream
Desc: Fixing nice() on alpha and ia64.
+
+Patch: 025_all_libstdio-fflush-null.patch
+From: Debian / Upstream
+Desc: Don't skip flushing streams with flags "&BUFINPUT"
+
+Patch: 200_ppc_rename-ppc-powerpc.patch
+Desc: Benedikt Boehm
+Desc: Rename ppc/ to powerpc/, fix the Makefile/diet.c and syscalls.h accordingly
+
+Patch: 205_ppc_cross-compiler.patch
+From: Benedikt Boehm
+Desc: Remove special rule for CROSS COMPILER on powerpc
+
+Patch: 250_ppc64_rename-ppc64-powerpc64.patch
+From: Benedikt Boehm
+Desc: Rename ppc64/ to powerpc64/, fix the Makefile/diet.c and syscalls.h accordingly
diff --git a/dietlibc/patches/0.30-r1/005_all_Makefile.patch b/dietlibc/patches/0.30-r1/005_all_Makefile.patch
index 38166bf..0b4e53f 100644
--- a/dietlibc/patches/0.30-r1/005_all_Makefile.patch
+++ b/dietlibc/patches/0.30-r1/005_all_Makefile.patch
@@ -60,7 +60,19 @@ Index: dietlibc-0.30/Makefile
DYN_LIBC_PIC = $(LIBOBJ) $(LIBSTDIOOBJ) $(LIBUGLYOBJ) \
$(LIBCRUFTOBJ) $(LIBCRYPTOBJ) $(LIBSHELLOBJ) $(LIBREGEXOBJ)
-@@ -306,19 +295,15 @@ CURNAME=$(notdir $(shell pwd))
+@@ -296,29 +285,25 @@ $(PICODIR)/libm.so: $(DYN_LIBMATH_OBJS)
+ $(SYSCALLOBJ): syscalls.h
+
+ $(OBJDIR)/elftrunc: $(OBJDIR)/diet contrib/elftrunc.c
+- bin-$(MYARCH)/diet $(CROSS)$(CC) $(CFLAGS) -o $@ contrib/elftrunc.c
++ bin-$(ARCH)/diet $(CROSS)$(CC) $(CFLAGS) -o $@ contrib/elftrunc.c
+
+ $(OBJDIR)/dnsd: $(OBJDIR)/diet contrib/dnsd.c
+- bin-$(MYARCH)/diet $(CROSS)$(CC) $(CFLAGS) -o $@ contrib/dnsd.c
++ bin-$(ARCH)/diet $(CROSS)$(CC) $(CFLAGS) -o $@ contrib/dnsd.c
+
+ VERSION=dietlibc-$(shell head -n 1 CHANGES|sed 's/://')
+ CURNAME=$(notdir $(shell pwd))
$(OBJDIR)/diet: $(OBJDIR)/start.o $(OBJDIR)/dyn_start.o diet.c $(OBJDIR)/dietlibc.a $(OBJDIR)/dyn_stop.o
$(CROSS)$(CC) -isystem include $(CFLAGS) -nostdlib -o $@ $^ -DDIETHOME=\"$(HOME)\" -DVERSION=\"$(VERSION)\" -lgcc
diff --git a/dietlibc/patches/0.30-r1/47_libstdio-fflush-null.patch b/dietlibc/patches/0.30-r1/025_all_libstdio-fflush-null.patch
index f09615e..f09615e 100644
--- a/dietlibc/patches/0.30-r1/47_libstdio-fflush-null.patch
+++ b/dietlibc/patches/0.30-r1/025_all_libstdio-fflush-null.patch
diff --git a/dietlibc/patches/0.30-r1/200_ppc_rename-ppc-powerpc.patch b/dietlibc/patches/0.30-r1/200_ppc_rename-ppc-powerpc.patch
new file mode 100644
index 0000000..2531878
--- /dev/null
+++ b/dietlibc/patches/0.30-r1/200_ppc_rename-ppc-powerpc.patch
@@ -0,0 +1,1392 @@
+Index: dietlibc-0.30/Makefile
+===================================================================
+--- dietlibc-0.30.orig/Makefile
++++ dietlibc-0.30/Makefile
+@@ -23,8 +23,8 @@ else
+ ifeq ($(MYARCH),alpha)
+ ARCH=alpha
+ else
+-ifeq ($(MYARCH),ppc)
+-ARCH=ppc
++ifeq ($(MYARCH),powerpc)
++ARCH=powerpc
+ else
+ ifeq ($(MYARCH),ppc64)
+ ARCH=ppc64
+@@ -370,7 +370,7 @@ uninstall:
+ for i in `find include -name \*.h`; do rm -f $(DESTDIR)$(prefix)/$$i; done
+ -rmdir $(DESTDIR)$(ILIBDIR) $(DESTDIR)$(MAN1DIR) $(DESTDIR)$(BINDIR)
+
+-.PHONY: sparc ppc mips arm alpha i386 parisc mipsel powerpc s390 sparc64
++.PHONY: sparc powerpc mips arm alpha i386 parisc mipsel powerpc s390 sparc64
+ .PHONY: x86_64 ia64 ppc64 s390x
+
+ arm sparc alpha mips parisc s390 sparc64 x86_64 ia64 ppc64 s390x:
+@@ -383,7 +383,7 @@ else
+ $(MAKE) ARCH=$@ CROSS=$@-linux- all
+ endif
+
+-ppc:
++powerpc:
+ ifeq ($(MYARCH),ppc64)
+ $(MAKE) ARCH=$@ CC="$(CC) -m32" all
+ else
+@@ -399,13 +399,13 @@ mips-gnu:
+
+ # Some people named their cross compiler toolchain powerpc-linux-gcc
+ powerpc:
+- $(MAKE) ARCH=ppc CROSS=powerpc-linux- all
++ $(MAKE) ARCH=powerpc CROSS=powerpc-linux- all
+
+ hppa:
+ ln -sf bin-parisc bin-hppa
+ $(MAKE) ARCH=parisc CROSS=hppa-linux- all
+
+-CROSS_ARCH=arm sparc ppc alpha i386 mips sparc64 x86_64 s390 parisc
++CROSS_ARCH=arm sparc powerpc alpha i386 mips sparc64 x86_64 s390 parisc
+ cross:
+ $(MAKE) $(subst $(ARCH),,$(CROSS_ARCH))
+
+Index: dietlibc-0.30/diet.c
+===================================================================
+--- dietlibc-0.30.orig/diet.c
++++ dietlibc-0.30/diet.c
+@@ -35,7 +35,7 @@ static const char* Os[] = {
+ "arm","-Os","-fomit-frame-pointer",0,
+ "mips","-Os","-fomit-frame-pointer","-mno-abicalls","-fno-pic","-G","0",0,
+ "mipsel","-Os","-fomit-frame-pointer","-mno-abicalls","-fno-pic","-G","0",0,
+- "ppc","-Os","-fomit-frame-pointer","-mpowerpc-gpopt","-mpowerpc-gfxopt",0,
++ "powerpc","-Os","-fomit-frame-pointer","-mpowerpc-gpopt","-mpowerpc-gfxopt",0,
+ "ppc64","-Os","-fomit-frame-pointer","-mpowerpc-gpopt","-mpowerpc-gfxopt",0,
+ "s390","-Os","-fomit-frame-pointer",0,
+ "s390x","-Os","-fomit-frame-pointer",0,
+@@ -151,7 +151,7 @@ int main(int argc,char *argv[]) {
+ #endif
+ #endif
+ #ifdef __powerpc__
+- shortplatform="ppc";
++ shortplatform="powerpc";
+ #endif
+ #ifdef __powerpc64__
+ shortplatform="ppc64";
+Index: dietlibc-0.30/powerpc/Makefile.add
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc/Makefile.add
+@@ -0,0 +1,3 @@
++
++CFLAGS+=-mpowerpc-gpopt -mpowerpc-gfxopt -Os
++VPATH:=ppc:syscalls.s:$(VPATH)
+Index: dietlibc-0.30/powerpc/__longjmp.S
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc/__longjmp.S
+@@ -0,0 +1,59 @@
++#include <setjmp.h>
++
++
++#ifdef PIC
++#define JUMPTARGET(name) name##@plt
++#else
++#define JUMPTARGET(name) name
++#endif
++
++.global __longjmp
++.type __longjmp,@function
++.align 2
++__longjmp:
++ lwz 1,(JB_GPR1*4)(3)
++ lwz 2,(JB_GPR2*4)(3)
++ lwz 0,(JB_LR*4)(3)
++ lwz 14,((JB_GPRS+0)*4)(3)
++ lfd 14,((JB_FPRS+0*2)*4)(3)
++ lwz 15,((JB_GPRS+1)*4)(3)
++ lfd 15,((JB_FPRS+1*2)*4)(3)
++ lwz 16,((JB_GPRS+2)*4)(3)
++ lfd 16,((JB_FPRS+2*2)*4)(3)
++ lwz 17,((JB_GPRS+3)*4)(3)
++ lfd 17,((JB_FPRS+3*2)*4)(3)
++ lwz 18,((JB_GPRS+4)*4)(3)
++ lfd 18,((JB_FPRS+4*2)*4)(3)
++ lwz 19,((JB_GPRS+5)*4)(3)
++ lfd 19,((JB_FPRS+5*2)*4)(3)
++ lwz 20,((JB_GPRS+6)*4)(3)
++ lfd 20,((JB_FPRS+6*2)*4)(3)
++ mtlr 0
++ lwz 21,((JB_GPRS+7)*4)(3)
++ lfd 21,((JB_FPRS+7*2)*4)(3)
++ lwz 22,((JB_GPRS+8)*4)(3)
++ lfd 22,((JB_FPRS+8*2)*4)(3)
++ lwz 0,(JB_CR*4)(3)
++ lwz 23,((JB_GPRS+9)*4)(3)
++ lfd 23,((JB_FPRS+9*2)*4)(3)
++ lwz 24,((JB_GPRS+10)*4)(3)
++ lfd 24,((JB_FPRS+10*2)*4)(3)
++ lwz 25,((JB_GPRS+11)*4)(3)
++ lfd 25,((JB_FPRS+11*2)*4)(3)
++ mtcrf 0xFF,0
++ lwz 26,((JB_GPRS+12)*4)(3)
++ lfd 26,((JB_FPRS+12*2)*4)(3)
++ lwz 27,((JB_GPRS+13)*4)(3)
++ lfd 27,((JB_FPRS+13*2)*4)(3)
++ lwz 28,((JB_GPRS+14)*4)(3)
++ lfd 28,((JB_FPRS+14*2)*4)(3)
++ lwz 29,((JB_GPRS+15)*4)(3)
++ lfd 29,((JB_FPRS+15*2)*4)(3)
++ lwz 30,((JB_GPRS+16)*4)(3)
++ lfd 30,((JB_FPRS+16*2)*4)(3)
++ lwz 31,((JB_GPRS+17)*4)(3)
++ lfd 31,((JB_FPRS+17*2)*4)(3)
++ mr 3,4
++ blr
++.size __longjmp,.-__longjmp
++
+Index: dietlibc-0.30/powerpc/__testandset.S
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc/__testandset.S
+@@ -0,0 +1,12 @@
++.global __testandset
++.type __testandset,@function
++.align 2
++__testandset:
++1: lwarx 5,0,3
++ li 0,1
++ stwcx. 0,0,3
++ bne- 1b
++ mr 3,5
++ blr
++.size __testandset,.-__testandset
++
+Index: dietlibc-0.30/powerpc/clone.S
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc/clone.S
+@@ -0,0 +1,48 @@
++#include <dietfeatures.h>
++#include "syscalls.h"
++#include <errno.h>
++
++.text
++.weak clone
++clone:
++.global __clone
++__clone:
++ cmpwi 4,0 /* check have non null child_stack pointer */
++ cmpwi cr1, 3,0 /* check have non null thread_funcion */
++ cror eq,4*cr1+eq,eq /* now if eq is set one is or both are zero */
++ beq .Lclone_error
++
++ stwu 1,-32(1) /* alloc some space on the stack */
++ stmw 29, 16(1) /* save r29,r30,r31 on stack */
++
++ rlwinm 4,4,0,0,27 /* mask out lower 4 bits */
++
++ /* move parameter to positions clone wants them */
++ mr 29,3 /* r29 = r3 fn */
++ mr 30,4 /* r30 = r4 stack */
++ mr 31,6 /* r31 = r6 arg */
++ mr 3, 5 /* r3 = r5 flags */
++
++ li 0, __NR_clone /* load syscall nr. */
++ sc
++
++ cmpwi cr1,3,0 /* compare return of syscall with 0 */
++ crandc 4*cr1+eq,4*cr1+eq,so
++ bne .Lclone_parent /* return was non zero -> .Lclone_parent */
++
++ /* we are the cloned process */
++ mr 1, 30 /* set stack pointer */
++ mtctr 29 /* set count register to fn ? */
++ mr 3, 31 /* set argument */
++ bctrl /* branch trough count register and link */
++ b _exit /* exit thread */
++
++.Lclone_parent:
++ lmw 29,16(1) /* restore saved registers */
++ addi 1, 1,32 /* free stack */
++ bnslr+ /* had cloned a thread so return to parent */
++ b error_unified_syscall
++
++.Lclone_error:
++ li 3, EINVAL
++ b error_unified_syscall
+Index: dietlibc-0.30/powerpc/mmap.c
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc/mmap.c
+@@ -0,0 +1,40 @@
++#include "dietfeatures.h"
++#include <sys/types.h>
++#include <errno.h>
++#include "syscalls.h"
++
++int mmap(void*start,size_t length,int prot,int flags,int fd,off_t offset) {
++ unsigned long __sc_ret, __sc_err;
++ {
++ register unsigned long __sc_0 __asm__ ("r0");
++ register unsigned long __sc_3 __asm__ ("r3");
++ register unsigned long __sc_4 __asm__ ("r4");
++ register unsigned long __sc_5 __asm__ ("r5");
++ register unsigned long __sc_6 __asm__ ("r6");
++ register unsigned long __sc_7 __asm__ ("r7");
++ register unsigned long __sc_8 __asm__ ("r8");
++
++ __sc_3 = (unsigned long) (start);
++ __sc_4 = (unsigned long) (length);
++ __sc_5 = (unsigned long) (prot);
++ __sc_6 = (unsigned long) (flags);
++ __sc_7 = (unsigned long) (fd);
++ __sc_8 = (unsigned long) (offset);
++ __sc_0 = __NR_mmap;
++ __asm__ __volatile__
++ ("sc \n\t"
++ "mfcr %1 "
++ : "=&r" (__sc_3), "=&r" (__sc_0)
++ : "0" (__sc_3), "1" (__sc_0),
++ "r" (__sc_4),
++ "r" (__sc_5),
++ "r" (__sc_6),
++ "r" (__sc_7),
++ "r" (__sc_8)
++ : "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12");
++ __sc_ret = __sc_3;
++ __sc_err = __sc_0;
++ }
++ return (__sc_err & 0x10000000 ? errno = __sc_ret, __sc_ret = -1 : 0),
++ (int) __sc_ret;
++}
+Index: dietlibc-0.30/powerpc/setjmp.S
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc/setjmp.S
+@@ -0,0 +1,56 @@
++#include <setjmp.h>
++
++#ifdef PIC
++#define JUMPTARGET(name) name##@plt
++#else
++#define JUMPTARGET(name) name
++#endif
++
++.global __sigsetjmp
++.type __sigsetjmp,@function
++.align 2
++__sigsetjmp:
++ stw 1,(JB_GPR1*4)(3)
++ mflr 0
++ stw 2,(JB_GPR2*4)(3)
++ stw 14,((JB_GPRS+0)*4)(3)
++ stfd 14,((JB_FPRS+0*2)*4)(3)
++ stw 0,(JB_LR*4)(3)
++ stw 15,((JB_GPRS+1)*4)(3)
++ stfd 15,((JB_FPRS+1*2)*4)(3)
++ mfcr 0
++ stw 16,((JB_GPRS+2)*4)(3)
++ stfd 16,((JB_FPRS+2*2)*4)(3)
++ stw 0,(JB_CR*4)(3)
++ stw 17,((JB_GPRS+3)*4)(3)
++ stfd 17,((JB_FPRS+3*2)*4)(3)
++ stw 18,((JB_GPRS+4)*4)(3)
++ stfd 18,((JB_FPRS+4*2)*4)(3)
++ stw 19,((JB_GPRS+5)*4)(3)
++ stfd 19,((JB_FPRS+5*2)*4)(3)
++ stw 20,((JB_GPRS+6)*4)(3)
++ stfd 20,((JB_FPRS+6*2)*4)(3)
++ stw 21,((JB_GPRS+7)*4)(3)
++ stfd 21,((JB_FPRS+7*2)*4)(3)
++ stw 22,((JB_GPRS+8)*4)(3)
++ stfd 22,((JB_FPRS+8*2)*4)(3)
++ stw 23,((JB_GPRS+9)*4)(3)
++ stfd 23,((JB_FPRS+9*2)*4)(3)
++ stw 24,((JB_GPRS+10)*4)(3)
++ stfd 24,((JB_FPRS+10*2)*4)(3)
++ stw 25,((JB_GPRS+11)*4)(3)
++ stfd 25,((JB_FPRS+11*2)*4)(3)
++ stw 26,((JB_GPRS+12)*4)(3)
++ stfd 26,((JB_FPRS+12*2)*4)(3)
++ stw 27,((JB_GPRS+13)*4)(3)
++ stfd 27,((JB_FPRS+13*2)*4)(3)
++ stw 28,((JB_GPRS+14)*4)(3)
++ stfd 28,((JB_FPRS+14*2)*4)(3)
++ stw 29,((JB_GPRS+15)*4)(3)
++ stfd 29,((JB_FPRS+15*2)*4)(3)
++ stw 30,((JB_GPRS+16)*4)(3)
++ stfd 30,((JB_FPRS+16*2)*4)(3)
++ stw 31,((JB_GPRS+17)*4)(3)
++ stfd 31,((JB_FPRS+17*2)*4)(3)
++ b JUMPTARGET (__sigjmp_save)
++.size __sigsetjmp,.-__sigsetjmp
+Index: dietlibc-0.30/powerpc/start.S
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc/start.S
+@@ -0,0 +1,52 @@
++#include "dietfeatures.h"
++
++.text
++.global _start
++.type _start,@function
++_start:
++ /* Save the stack pointer, in case we're statically linked under Linux. */
++ mr 9,1
++ /* Set up an initial stack frame, and clear the LR. */
++ clrrwi 1,1,4
++ li 0,0
++ stwu 1,-16(1)
++ mtlr 0
++ stw 0,0(1)
++
++ /* r9 contains the initial stack pointer
++ argc = (r9)
++ argv = (r9+4)
++ envp = argv+(argc+1)*4 */
++
++ lis 14,__libc_stack_end@ha
++ stw 9,__libc_stack_end@l(14)
++
++ lwzu 3,0(9) /* argc */
++ addi 4,9,4 /* argv */
++ add 5,0,3 /* argc... */
++ addi 5,5,1 /* argc+1...*/
++ slwi 5,5,2 /* (argc+1)*4 */
++ add 5,5,4 /* argv+(argc+1)*4 */
++
++ lis 14,environ@ha
++ stw 5,environ@l(14)
++
++#ifdef WANT_DYNAMIC
++ mr 6,7
++ bl _dyn_start
++#else
++ bl CALL_IN_STARTCODE
++#endif
++ b exit
++.size _start,.-_start
++
++
++/* Define a symbol for the first piece of initialized data. */
++ .section ".data"
++__data_start:
++
++/* this is needed for libgcc_eh.a - see gcc-3.4/gcc/config/rs6000/linux-unwind.h */
++ .weak __libc_stack_end
++ .lcomm __libc_stack_end,4,4
++ .type __libc_stack_end,@object
++
+Index: dietlibc-0.30/powerpc/syscalls.h
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc/syscalls.h
+@@ -0,0 +1,299 @@
++
++#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 /* Syscall for Andrew File System */
++#define __NR_setfsuid 138
++#define __NR_setfsgid 139
++#define __NR__llseek 140
++#define __NR_getdents 141
++#define __NR__newselect 142
++#define __NR_flock 143
++#define __NR_msync 144
++#define __NR_readv 145
++#define __NR_writev 146
++#define __NR_getsid 147
++#define __NR_fdatasync 148
++#define __NR__sysctl 149
++#define __NR_mlock 150
++#define __NR_munlock 151
++#define __NR_mlockall 152
++#define __NR_munlockall 153
++#define __NR_sched_setparam 154
++#define __NR_sched_getparam 155
++#define __NR_sched_setscheduler 156
++#define __NR_sched_getscheduler 157
++#define __NR_sched_yield 158
++#define __NR_sched_get_priority_max 159
++#define __NR_sched_get_priority_min 160
++#define __NR_sched_rr_get_interval 161
++#define __NR_nanosleep 162
++#define __NR_mremap 163
++#define __NR_setresuid 164
++#define __NR_getresuid 165
++#define __NR_query_module 166
++#define __NR_poll 167
++#define __NR_nfsservctl 168
++#define __NR_setresgid 169
++#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_pread 179
++#define __NR_pwrite 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 /* some people actually want streams */
++#define __NR_putpmsg 188 /* some people actually want streams */
++#define __NR_vfork 189
++#define __NR_ugetrlimit 190 /* SuS compliant getrlimit */
++#define __NR_readahead 191
++#define __NR_mmap2 192
++#define __NR_truncate64 193
++#define __NR_ftruncate64 194
++#define __NR_stat64 195
++#define __NR_lstat64 196
++#define __NR_fstat64 197
++#define __NR_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
++#define __NR_fcntl64 204
++#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
++/* 224 currently unused */
++#define __NR_tuxcall 225
++#define __NR_sendfile64 226
++#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
++#define __NR_fadvise64_64 254
++#define __NR_rtas 255
++#define __NR_sys_debug_setcontext 256
++/* Number 257 is reserved for vserver */
++/* Number 258 is reserved for new sys_remap_file_pages */
++/* Number 259 is reserved for new sys_mbind */
++/* Number 260 is reserved for new sys_get_mempolicy */
++/* Number 261 is reserved for new sys_set_mempolicy */
++#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 syscall_weak(name,wsym,sym) \
++.text; \
++.type wsym,@function; \
++.weak wsym; \
++wsym: ; \
++.type sym,@function; \
++.global sym; \
++sym: \
++ li 0,__NR_##name; \
++ b __unified_syscall
++
++#define syscall(name,sym) \
++.text; \
++.type sym,@function; \
++.global sym; \
++sym: \
++ li 0,__NR_##name; \
++ b __unified_syscall
++
+Index: dietlibc-0.30/powerpc/unified.S
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc/unified.S
+@@ -0,0 +1,40 @@
++#include <dietfeatures.h>
++#include "syscalls.h"
++
++.text
++.type exit,@function
++.weak exit
++exit:
++.type _exit,@function
++.global _exit
++_exit:
++ li 0,__NR_exit
++.global __unified_syscall
++__unified_syscall:
++ sc
++ bnslr+
++
++.global error_unified_syscall
++error_unified_syscall:
++#ifdef WANT_THREAD_SAFE
++ stwu 1,-16(1)
++ mflr 0
++ stw 0,20(1)
++ stw 3,12(1)
++ bl __errno_location
++ lwz 0,12(1)
++ stw 0,0(3)
++ lwz 0,20(1)
++ mtlr 0
++ addi 1,1,16
++#else
++ lis 9,errno@ha
++ stw 3,errno@l(9)
++#endif
++ li 3,-1
++
++/* here we go and "reuse" the return for weak-void functions */
++#include "dietuglyweaks.h"
++
++ blr
++
+Index: dietlibc-0.30/ppc/Makefile.add
+===================================================================
+--- dietlibc-0.30.orig/ppc/Makefile.add
++++ /dev/null
+@@ -1,3 +0,0 @@
+-
+-CFLAGS+=-mpowerpc-gpopt -mpowerpc-gfxopt -Os
+-VPATH:=ppc:syscalls.s:$(VPATH)
+Index: dietlibc-0.30/ppc/__longjmp.S
+===================================================================
+--- dietlibc-0.30.orig/ppc/__longjmp.S
++++ /dev/null
+@@ -1,59 +0,0 @@
+-#include <setjmp.h>
+-
+-
+-#ifdef PIC
+-#define JUMPTARGET(name) name##@plt
+-#else
+-#define JUMPTARGET(name) name
+-#endif
+-
+-.global __longjmp
+-.type __longjmp,@function
+-.align 2
+-__longjmp:
+- lwz 1,(JB_GPR1*4)(3)
+- lwz 2,(JB_GPR2*4)(3)
+- lwz 0,(JB_LR*4)(3)
+- lwz 14,((JB_GPRS+0)*4)(3)
+- lfd 14,((JB_FPRS+0*2)*4)(3)
+- lwz 15,((JB_GPRS+1)*4)(3)
+- lfd 15,((JB_FPRS+1*2)*4)(3)
+- lwz 16,((JB_GPRS+2)*4)(3)
+- lfd 16,((JB_FPRS+2*2)*4)(3)
+- lwz 17,((JB_GPRS+3)*4)(3)
+- lfd 17,((JB_FPRS+3*2)*4)(3)
+- lwz 18,((JB_GPRS+4)*4)(3)
+- lfd 18,((JB_FPRS+4*2)*4)(3)
+- lwz 19,((JB_GPRS+5)*4)(3)
+- lfd 19,((JB_FPRS+5*2)*4)(3)
+- lwz 20,((JB_GPRS+6)*4)(3)
+- lfd 20,((JB_FPRS+6*2)*4)(3)
+- mtlr 0
+- lwz 21,((JB_GPRS+7)*4)(3)
+- lfd 21,((JB_FPRS+7*2)*4)(3)
+- lwz 22,((JB_GPRS+8)*4)(3)
+- lfd 22,((JB_FPRS+8*2)*4)(3)
+- lwz 0,(JB_CR*4)(3)
+- lwz 23,((JB_GPRS+9)*4)(3)
+- lfd 23,((JB_FPRS+9*2)*4)(3)
+- lwz 24,((JB_GPRS+10)*4)(3)
+- lfd 24,((JB_FPRS+10*2)*4)(3)
+- lwz 25,((JB_GPRS+11)*4)(3)
+- lfd 25,((JB_FPRS+11*2)*4)(3)
+- mtcrf 0xFF,0
+- lwz 26,((JB_GPRS+12)*4)(3)
+- lfd 26,((JB_FPRS+12*2)*4)(3)
+- lwz 27,((JB_GPRS+13)*4)(3)
+- lfd 27,((JB_FPRS+13*2)*4)(3)
+- lwz 28,((JB_GPRS+14)*4)(3)
+- lfd 28,((JB_FPRS+14*2)*4)(3)
+- lwz 29,((JB_GPRS+15)*4)(3)
+- lfd 29,((JB_FPRS+15*2)*4)(3)
+- lwz 30,((JB_GPRS+16)*4)(3)
+- lfd 30,((JB_FPRS+16*2)*4)(3)
+- lwz 31,((JB_GPRS+17)*4)(3)
+- lfd 31,((JB_FPRS+17*2)*4)(3)
+- mr 3,4
+- blr
+-.size __longjmp,.-__longjmp
+-
+Index: dietlibc-0.30/ppc/__testandset.S
+===================================================================
+--- dietlibc-0.30.orig/ppc/__testandset.S
++++ /dev/null
+@@ -1,12 +0,0 @@
+-.global __testandset
+-.type __testandset,@function
+-.align 2
+-__testandset:
+-1: lwarx 5,0,3
+- li 0,1
+- stwcx. 0,0,3
+- bne- 1b
+- mr 3,5
+- blr
+-.size __testandset,.-__testandset
+-
+Index: dietlibc-0.30/ppc/clone.S
+===================================================================
+--- dietlibc-0.30.orig/ppc/clone.S
++++ /dev/null
+@@ -1,48 +0,0 @@
+-#include <dietfeatures.h>
+-#include "syscalls.h"
+-#include <errno.h>
+-
+-.text
+-.weak clone
+-clone:
+-.global __clone
+-__clone:
+- cmpwi 4,0 /* check have non null child_stack pointer */
+- cmpwi cr1, 3,0 /* check have non null thread_funcion */
+- cror eq,4*cr1+eq,eq /* now if eq is set one is or both are zero */
+- beq .Lclone_error
+-
+- stwu 1,-32(1) /* alloc some space on the stack */
+- stmw 29, 16(1) /* save r29,r30,r31 on stack */
+-
+- rlwinm 4,4,0,0,27 /* mask out lower 4 bits */
+-
+- /* move parameter to positions clone wants them */
+- mr 29,3 /* r29 = r3 fn */
+- mr 30,4 /* r30 = r4 stack */
+- mr 31,6 /* r31 = r6 arg */
+- mr 3, 5 /* r3 = r5 flags */
+-
+- li 0, __NR_clone /* load syscall nr. */
+- sc
+-
+- cmpwi cr1,3,0 /* compare return of syscall with 0 */
+- crandc 4*cr1+eq,4*cr1+eq,so
+- bne .Lclone_parent /* return was non zero -> .Lclone_parent */
+-
+- /* we are the cloned process */
+- mr 1, 30 /* set stack pointer */
+- mtctr 29 /* set count register to fn ? */
+- mr 3, 31 /* set argument */
+- bctrl /* branch trough count register and link */
+- b _exit /* exit thread */
+-
+-.Lclone_parent:
+- lmw 29,16(1) /* restore saved registers */
+- addi 1, 1,32 /* free stack */
+- bnslr+ /* had cloned a thread so return to parent */
+- b error_unified_syscall
+-
+-.Lclone_error:
+- li 3, EINVAL
+- b error_unified_syscall
+Index: dietlibc-0.30/ppc/mmap.c
+===================================================================
+--- dietlibc-0.30.orig/ppc/mmap.c
++++ /dev/null
+@@ -1,40 +0,0 @@
+-#include "dietfeatures.h"
+-#include <sys/types.h>
+-#include <errno.h>
+-#include "syscalls.h"
+-
+-int mmap(void*start,size_t length,int prot,int flags,int fd,off_t offset) {
+- unsigned long __sc_ret, __sc_err;
+- {
+- register unsigned long __sc_0 __asm__ ("r0");
+- register unsigned long __sc_3 __asm__ ("r3");
+- register unsigned long __sc_4 __asm__ ("r4");
+- register unsigned long __sc_5 __asm__ ("r5");
+- register unsigned long __sc_6 __asm__ ("r6");
+- register unsigned long __sc_7 __asm__ ("r7");
+- register unsigned long __sc_8 __asm__ ("r8");
+-
+- __sc_3 = (unsigned long) (start);
+- __sc_4 = (unsigned long) (length);
+- __sc_5 = (unsigned long) (prot);
+- __sc_6 = (unsigned long) (flags);
+- __sc_7 = (unsigned long) (fd);
+- __sc_8 = (unsigned long) (offset);
+- __sc_0 = __NR_mmap;
+- __asm__ __volatile__
+- ("sc \n\t"
+- "mfcr %1 "
+- : "=&r" (__sc_3), "=&r" (__sc_0)
+- : "0" (__sc_3), "1" (__sc_0),
+- "r" (__sc_4),
+- "r" (__sc_5),
+- "r" (__sc_6),
+- "r" (__sc_7),
+- "r" (__sc_8)
+- : "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12");
+- __sc_ret = __sc_3;
+- __sc_err = __sc_0;
+- }
+- return (__sc_err & 0x10000000 ? errno = __sc_ret, __sc_ret = -1 : 0),
+- (int) __sc_ret;
+-}
+Index: dietlibc-0.30/ppc/setjmp.S
+===================================================================
+--- dietlibc-0.30.orig/ppc/setjmp.S
++++ /dev/null
+@@ -1,56 +0,0 @@
+-#include <setjmp.h>
+-
+-#ifdef PIC
+-#define JUMPTARGET(name) name##@plt
+-#else
+-#define JUMPTARGET(name) name
+-#endif
+-
+-.global __sigsetjmp
+-.type __sigsetjmp,@function
+-.align 2
+-__sigsetjmp:
+- stw 1,(JB_GPR1*4)(3)
+- mflr 0
+- stw 2,(JB_GPR2*4)(3)
+- stw 14,((JB_GPRS+0)*4)(3)
+- stfd 14,((JB_FPRS+0*2)*4)(3)
+- stw 0,(JB_LR*4)(3)
+- stw 15,((JB_GPRS+1)*4)(3)
+- stfd 15,((JB_FPRS+1*2)*4)(3)
+- mfcr 0
+- stw 16,((JB_GPRS+2)*4)(3)
+- stfd 16,((JB_FPRS+2*2)*4)(3)
+- stw 0,(JB_CR*4)(3)
+- stw 17,((JB_GPRS+3)*4)(3)
+- stfd 17,((JB_FPRS+3*2)*4)(3)
+- stw 18,((JB_GPRS+4)*4)(3)
+- stfd 18,((JB_FPRS+4*2)*4)(3)
+- stw 19,((JB_GPRS+5)*4)(3)
+- stfd 19,((JB_FPRS+5*2)*4)(3)
+- stw 20,((JB_GPRS+6)*4)(3)
+- stfd 20,((JB_FPRS+6*2)*4)(3)
+- stw 21,((JB_GPRS+7)*4)(3)
+- stfd 21,((JB_FPRS+7*2)*4)(3)
+- stw 22,((JB_GPRS+8)*4)(3)
+- stfd 22,((JB_FPRS+8*2)*4)(3)
+- stw 23,((JB_GPRS+9)*4)(3)
+- stfd 23,((JB_FPRS+9*2)*4)(3)
+- stw 24,((JB_GPRS+10)*4)(3)
+- stfd 24,((JB_FPRS+10*2)*4)(3)
+- stw 25,((JB_GPRS+11)*4)(3)
+- stfd 25,((JB_FPRS+11*2)*4)(3)
+- stw 26,((JB_GPRS+12)*4)(3)
+- stfd 26,((JB_FPRS+12*2)*4)(3)
+- stw 27,((JB_GPRS+13)*4)(3)
+- stfd 27,((JB_FPRS+13*2)*4)(3)
+- stw 28,((JB_GPRS+14)*4)(3)
+- stfd 28,((JB_FPRS+14*2)*4)(3)
+- stw 29,((JB_GPRS+15)*4)(3)
+- stfd 29,((JB_FPRS+15*2)*4)(3)
+- stw 30,((JB_GPRS+16)*4)(3)
+- stfd 30,((JB_FPRS+16*2)*4)(3)
+- stw 31,((JB_GPRS+17)*4)(3)
+- stfd 31,((JB_FPRS+17*2)*4)(3)
+- b JUMPTARGET (__sigjmp_save)
+-.size __sigsetjmp,.-__sigsetjmp
+Index: dietlibc-0.30/ppc/start.S
+===================================================================
+--- dietlibc-0.30.orig/ppc/start.S
++++ /dev/null
+@@ -1,52 +0,0 @@
+-#include "dietfeatures.h"
+-
+-.text
+-.global _start
+-.type _start,@function
+-_start:
+- /* Save the stack pointer, in case we're statically linked under Linux. */
+- mr 9,1
+- /* Set up an initial stack frame, and clear the LR. */
+- clrrwi 1,1,4
+- li 0,0
+- stwu 1,-16(1)
+- mtlr 0
+- stw 0,0(1)
+-
+- /* r9 contains the initial stack pointer
+- argc = (r9)
+- argv = (r9+4)
+- envp = argv+(argc+1)*4 */
+-
+- lis 14,__libc_stack_end@ha
+- stw 9,__libc_stack_end@l(14)
+-
+- lwzu 3,0(9) /* argc */
+- addi 4,9,4 /* argv */
+- add 5,0,3 /* argc... */
+- addi 5,5,1 /* argc+1...*/
+- slwi 5,5,2 /* (argc+1)*4 */
+- add 5,5,4 /* argv+(argc+1)*4 */
+-
+- lis 14,environ@ha
+- stw 5,environ@l(14)
+-
+-#ifdef WANT_DYNAMIC
+- mr 6,7
+- bl _dyn_start
+-#else
+- bl CALL_IN_STARTCODE
+-#endif
+- b exit
+-.size _start,.-_start
+-
+-
+-/* Define a symbol for the first piece of initialized data. */
+- .section ".data"
+-__data_start:
+-
+-/* this is needed for libgcc_eh.a - see gcc-3.4/gcc/config/rs6000/linux-unwind.h */
+- .weak __libc_stack_end
+- .lcomm __libc_stack_end,4,4
+- .type __libc_stack_end,@object
+-
+Index: dietlibc-0.30/ppc/syscalls.h
+===================================================================
+--- dietlibc-0.30.orig/ppc/syscalls.h
++++ /dev/null
+@@ -1,299 +0,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 /* Syscall for Andrew File System */
+-#define __NR_setfsuid 138
+-#define __NR_setfsgid 139
+-#define __NR__llseek 140
+-#define __NR_getdents 141
+-#define __NR__newselect 142
+-#define __NR_flock 143
+-#define __NR_msync 144
+-#define __NR_readv 145
+-#define __NR_writev 146
+-#define __NR_getsid 147
+-#define __NR_fdatasync 148
+-#define __NR__sysctl 149
+-#define __NR_mlock 150
+-#define __NR_munlock 151
+-#define __NR_mlockall 152
+-#define __NR_munlockall 153
+-#define __NR_sched_setparam 154
+-#define __NR_sched_getparam 155
+-#define __NR_sched_setscheduler 156
+-#define __NR_sched_getscheduler 157
+-#define __NR_sched_yield 158
+-#define __NR_sched_get_priority_max 159
+-#define __NR_sched_get_priority_min 160
+-#define __NR_sched_rr_get_interval 161
+-#define __NR_nanosleep 162
+-#define __NR_mremap 163
+-#define __NR_setresuid 164
+-#define __NR_getresuid 165
+-#define __NR_query_module 166
+-#define __NR_poll 167
+-#define __NR_nfsservctl 168
+-#define __NR_setresgid 169
+-#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_pread 179
+-#define __NR_pwrite 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 /* some people actually want streams */
+-#define __NR_putpmsg 188 /* some people actually want streams */
+-#define __NR_vfork 189
+-#define __NR_ugetrlimit 190 /* SuS compliant getrlimit */
+-#define __NR_readahead 191
+-#define __NR_mmap2 192
+-#define __NR_truncate64 193
+-#define __NR_ftruncate64 194
+-#define __NR_stat64 195
+-#define __NR_lstat64 196
+-#define __NR_fstat64 197
+-#define __NR_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
+-#define __NR_fcntl64 204
+-#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
+-/* 224 currently unused */
+-#define __NR_tuxcall 225
+-#define __NR_sendfile64 226
+-#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
+-#define __NR_fadvise64_64 254
+-#define __NR_rtas 255
+-#define __NR_sys_debug_setcontext 256
+-/* Number 257 is reserved for vserver */
+-/* Number 258 is reserved for new sys_remap_file_pages */
+-/* Number 259 is reserved for new sys_mbind */
+-/* Number 260 is reserved for new sys_get_mempolicy */
+-/* Number 261 is reserved for new sys_set_mempolicy */
+-#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 syscall_weak(name,wsym,sym) \
+-.text; \
+-.type wsym,@function; \
+-.weak wsym; \
+-wsym: ; \
+-.type sym,@function; \
+-.global sym; \
+-sym: \
+- li 0,__NR_##name; \
+- b __unified_syscall
+-
+-#define syscall(name,sym) \
+-.text; \
+-.type sym,@function; \
+-.global sym; \
+-sym: \
+- li 0,__NR_##name; \
+- b __unified_syscall
+-
+Index: dietlibc-0.30/ppc/unified.S
+===================================================================
+--- dietlibc-0.30.orig/ppc/unified.S
++++ /dev/null
+@@ -1,40 +0,0 @@
+-#include <dietfeatures.h>
+-#include "syscalls.h"
+-
+-.text
+-.type exit,@function
+-.weak exit
+-exit:
+-.type _exit,@function
+-.global _exit
+-_exit:
+- li 0,__NR_exit
+-.global __unified_syscall
+-__unified_syscall:
+- sc
+- bnslr+
+-
+-.global error_unified_syscall
+-error_unified_syscall:
+-#ifdef WANT_THREAD_SAFE
+- stwu 1,-16(1)
+- mflr 0
+- stw 0,20(1)
+- stw 3,12(1)
+- bl __errno_location
+- lwz 0,12(1)
+- stw 0,0(3)
+- lwz 0,20(1)
+- mtlr 0
+- addi 1,1,16
+-#else
+- lis 9,errno@ha
+- stw 3,errno@l(9)
+-#endif
+- li 3,-1
+-
+-/* here we go and "reuse" the return for weak-void functions */
+-#include "dietuglyweaks.h"
+-
+- blr
+-
+Index: dietlibc-0.30/syscalls.h
+===================================================================
+--- dietlibc-0.30.orig/syscalls.h
++++ dietlibc-0.30/syscalls.h
+@@ -15,7 +15,7 @@
+ #include "ppc64/syscalls.h"
+
+ #elif defined(__powerpc__)
+-#include "ppc/syscalls.h"
++#include "powerpc/syscalls.h"
+
+ #elif defined(__mips__)
+ #include "mips/syscalls.h"
diff --git a/dietlibc/patches/0.30-r1/205_ppc_cross-compiler.patch b/dietlibc/patches/0.30-r1/205_ppc_cross-compiler.patch
new file mode 100644
index 0000000..3d24788
--- /dev/null
+++ b/dietlibc/patches/0.30-r1/205_ppc_cross-compiler.patch
@@ -0,0 +1,15 @@
+Index: dietlibc-0.30/Makefile
+===================================================================
+--- dietlibc-0.30.orig/Makefile
++++ dietlibc-0.30/Makefile
+@@ -397,10 +397,6 @@ mipsel:
+ mips-gnu:
+ $(MAKE) ARCH=$@ CROSS=$@-linux-gnu- all
+
+-# Some people named their cross compiler toolchain powerpc-linux-gcc
+-powerpc:
+- $(MAKE) ARCH=powerpc CROSS=powerpc-linux- all
+-
+ hppa:
+ ln -sf bin-parisc bin-hppa
+ $(MAKE) ARCH=parisc CROSS=hppa-linux- all
diff --git a/dietlibc/patches/0.30-r1/250_ppc64_rename-ppc64-powerpc64.patch b/dietlibc/patches/0.30-r1/250_ppc64_rename-ppc64-powerpc64.patch
new file mode 100644
index 0000000..b82d20b
--- /dev/null
+++ b/dietlibc/patches/0.30-r1/250_ppc64_rename-ppc64-powerpc64.patch
@@ -0,0 +1,1499 @@
+Index: dietlibc-0.30/Makefile
+===================================================================
+--- dietlibc-0.30.orig/Makefile
++++ dietlibc-0.30/Makefile
+@@ -26,8 +26,8 @@ else
+ ifeq ($(MYARCH),powerpc)
+ ARCH=powerpc
+ else
+-ifeq ($(MYARCH),ppc64)
+-ARCH=ppc64
++ifeq ($(MYARCH),powerpc64)
++ARCH=powerpc64
+ else
+ ifeq ($(MYARCH),arm)
+ ARCH=arm
+@@ -371,9 +371,9 @@ uninstall:
+ -rmdir $(DESTDIR)$(ILIBDIR) $(DESTDIR)$(MAN1DIR) $(DESTDIR)$(BINDIR)
+
+ .PHONY: sparc powerpc mips arm alpha i386 parisc mipsel powerpc s390 sparc64
+-.PHONY: x86_64 ia64 ppc64 s390x
++.PHONY: x86_64 ia64 powerpc64 s390x
+
+-arm sparc alpha mips parisc s390 sparc64 x86_64 ia64 ppc64 s390x:
++arm sparc alpha mips parisc s390 sparc64 x86_64 ia64 powerpc64 s390x:
+ $(MAKE) ARCH=$@ CROSS=$@-linux- all
+
+ i386:
+@@ -384,7 +384,7 @@ else
+ endif
+
+ powerpc:
+-ifeq ($(MYARCH),ppc64)
++ifeq ($(MYARCH),powerpc64)
+ $(MAKE) ARCH=$@ CC="$(CC) -m32" all
+ else
+ $(MAKE) ARCH=$@ CROSS=$@-linux- all
+Index: dietlibc-0.30/diet.c
+===================================================================
+--- dietlibc-0.30.orig/diet.c
++++ dietlibc-0.30/diet.c
+@@ -36,7 +36,7 @@ static const char* Os[] = {
+ "mips","-Os","-fomit-frame-pointer","-mno-abicalls","-fno-pic","-G","0",0,
+ "mipsel","-Os","-fomit-frame-pointer","-mno-abicalls","-fno-pic","-G","0",0,
+ "powerpc","-Os","-fomit-frame-pointer","-mpowerpc-gpopt","-mpowerpc-gfxopt",0,
+- "ppc64","-Os","-fomit-frame-pointer","-mpowerpc-gpopt","-mpowerpc-gfxopt",0,
++ "powerpc64","-Os","-fomit-frame-pointer","-mpowerpc-gpopt","-mpowerpc-gfxopt",0,
+ "s390","-Os","-fomit-frame-pointer",0,
+ "s390x","-Os","-fomit-frame-pointer",0,
+ "sh","-Os","-fomit-frame-pointer",0,
+@@ -154,7 +154,7 @@ int main(int argc,char *argv[]) {
+ shortplatform="powerpc";
+ #endif
+ #ifdef __powerpc64__
+- shortplatform="ppc64";
++ shortplatform="powerpc64";
+ #endif
+ #ifdef __i386__
+ shortplatform="i386";
+Index: dietlibc-0.30/powerpc64/Makefile.add
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc64/Makefile.add
+@@ -0,0 +1,5 @@
++
++CFLAGS+=-Os -mpowerpc64
++VPATH:=ppc64:syscalls.s:$(VPATH)
++
++CC+=-m64
+Index: dietlibc-0.30/powerpc64/__longjmp.S
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc64/__longjmp.S
+@@ -0,0 +1,54 @@
++#include <setjmp.h>
++
++ .quad .__longjmp,.TOC.@tocbase,0
++ .text
++ .size __longjmp,24
++ .type .__longjmp,@function
++ .globl .__longjmp
++.align 2
++.__longjmp:
++ ld 1,(JB_GPR1*8)(3)
++ ld 2,(JB_GPR2*8)(3)
++ ld 0,(JB_LR*8)(3)
++ ld 14,((JB_GPRS+0)*8)(3)
++ lfd 14,((JB_FPRS+0)*8)(3)
++ ld 15,((JB_GPRS+1)*8)(3)
++ lfd 15,((JB_FPRS+1)*8)(3)
++ ld 16,((JB_GPRS+2)*8)(3)
++ lfd 16,((JB_FPRS+2)*8)(3)
++ ld 17,((JB_GPRS+3)*8)(3)
++ lfd 17,((JB_FPRS+3)*8)(3)
++ ld 18,((JB_GPRS+4)*8)(3)
++ lfd 18,((JB_FPRS+4)*8)(3)
++ ld 19,((JB_GPRS+5)*8)(3)
++ lfd 19,((JB_FPRS+5)*8)(3)
++ ld 20,((JB_GPRS+6)*8)(3)
++ lfd 20,((JB_FPRS+6)*8)(3)
++ mtlr 0
++ ld 21,((JB_GPRS+7)*8)(3)
++ lfd 21,((JB_FPRS+7)*8)(3)
++ ld 22,((JB_GPRS+8)*8)(3)
++ lfd 22,((JB_FPRS+8)*8)(3)
++ ld 0,(JB_CR*8)(3)
++ ld 23,((JB_GPRS+9)*8)(3)
++ lfd 23,((JB_FPRS+9)*8)(3)
++ ld 24,((JB_GPRS+10)*8)(3)
++ lfd 24,((JB_FPRS+10)*8)(3)
++ ld 25,((JB_GPRS+11)*8)(3)
++ lfd 25,((JB_FPRS+11)*8)(3)
++ mtcrf 0xFF,0
++ ld 26,((JB_GPRS+12)*8)(3)
++ lfd 26,((JB_FPRS+12)*8)(3)
++ ld 27,((JB_GPRS+13)*8)(3)
++ lfd 27,((JB_FPRS+13)*8)(3)
++ ld 28,((JB_GPRS+14)*8)(3)
++ lfd 28,((JB_FPRS+14)*8)(3)
++ ld 29,((JB_GPRS+15)*8)(3)
++ lfd 29,((JB_FPRS+15)*8)(3)
++ ld 30,((JB_GPRS+16)*8)(3)
++ lfd 30,((JB_FPRS+16)*8)(3)
++ ld 31,((JB_GPRS+17)*8)(3)
++ lfd 31,((JB_FPRS+17)*8)(3)
++ mr 3,4
++ blr
++.size .__longjmp,.-.__longjmp
+Index: dietlibc-0.30/powerpc64/__testandset.S
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc64/__testandset.S
+@@ -0,0 +1,12 @@
++.global __testandset
++.type __testandset,@function
++.align 2
++__testandset:
++1: lwarx 5,0,3
++ li 0,1
++ stwcx. 0,0,3
++ bne- 1b
++ mr 3,5
++ blr
++.size __testandset,.-__testandset
++
+Index: dietlibc-0.30/powerpc64/clone.S
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc64/clone.S
+@@ -0,0 +1,52 @@
++#include <dietfeatures.h>
++#include "syscalls.h"
++#include <errno.h>
++
++.text
++.weak clone
++clone:
++.global __clone
++__clone:
++ cmpwi 4,0 /* check have non null child_stack pointer */
++ cmpwi cr1, 3,0 /* check have non null thread_funcion */
++ cror eq,4*cr1+eq,eq /* now if eq is set one is or both are zero */
++ beq .Lclone_error
++
++ stdu 1,-64(1) /* alloc some space on the stack */
++ std 29, 16(1) /* save r29,r30,r31 on stack */
++ std 30, 24(1)
++ std 31, 32(1)
++
++ rlwinm 4,4,0,0,27 /* mask out lower 4 bits */
++
++ /* move parameter to positions clone wants them */
++ mr 29,3 /* r29 = r3 fn */
++ mr 30,4 /* r30 = r4 stack */
++ mr 31,6 /* r31 = r6 arg */
++ mr 3, 5 /* r3 = r5 flags */
++
++ li 0, __NR_clone /* load syscall nr. */
++ sc
++
++ cmpwi cr1,3,0 /* compare return of syscall with 0 */
++ crandc 4*cr1+eq,4*cr1+eq,so
++ bne .Lclone_parent /* return was non zero -> .Lclone_parent */
++
++ /* we are the cloned process */
++ mr 1, 30 /* set stack pointer */
++ mtctr 29 /* set count register to fn ? */
++ mr 3, 31 /* set argument */
++ bctrl /* branch trough count register and link */
++ b _exit /* exit thread */
++
++.Lclone_parent:
++ ld 29,16(1) /* restore saved registers */
++ ld 30,24(1)
++ ld 31,32(1)
++ addi 1, 1,64 /* free stack */
++ bnslr+ /* had cloned a thread so return to parent */
++ b error_unified_syscall
++
++.Lclone_error:
++ li 3, EINVAL
++ b error_unified_syscall
+Index: dietlibc-0.30/powerpc64/setjmp.S
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc64/setjmp.S
+@@ -0,0 +1,59 @@
++#include <setjmp.h>
++
++#ifdef PIC
++#define JUMPTARGET(name) name##@plt
++#else
++#define JUMPTARGET(name) .name
++#endif
++
++ .quad .__sigsetjmp,.TOC.@tocbase,0
++ .text
++ .size __sigsetjmp,24
++ .type .__sigsetjmp,@function
++ .globl .__sigsetjmp
++.align 2
++.__sigsetjmp:
++ std 1,(JB_GPR1*8)(3)
++ mflr 0
++ std 2,(JB_GPR2*8)(3)
++ std 14,((JB_GPRS+0)*8)(3)
++ stfd 14,((JB_FPRS+0)*8)(3)
++ std 0,(JB_LR*8)(3)
++ std 15,((JB_GPRS+1)*8)(3)
++ stfd 15,((JB_FPRS+1)*8)(3)
++ mfcr 0
++ std 16,((JB_GPRS+2)*8)(3)
++ stfd 16,((JB_FPRS+2)*8)(3)
++ std 0,(JB_CR*8)(3)
++ std 17,((JB_GPRS+3)*8)(3)
++ stfd 17,((JB_FPRS+3)*8)(3)
++ std 18,((JB_GPRS+4)*8)(3)
++ stfd 18,((JB_FPRS+4)*8)(3)
++ std 19,((JB_GPRS+5)*8)(3)
++ stfd 19,((JB_FPRS+5)*8)(3)
++ std 20,((JB_GPRS+6)*8)(3)
++ stfd 20,((JB_FPRS+6)*8)(3)
++ std 21,((JB_GPRS+7)*8)(3)
++ stfd 21,((JB_FPRS+7)*8)(3)
++ std 22,((JB_GPRS+8)*8)(3)
++ stfd 22,((JB_FPRS+8)*8)(3)
++ std 23,((JB_GPRS+9)*8)(3)
++ stfd 23,((JB_FPRS+9)*8)(3)
++ std 24,((JB_GPRS+10)*8)(3)
++ stfd 24,((JB_FPRS+10)*8)(3)
++ std 25,((JB_GPRS+11)*8)(3)
++ stfd 25,((JB_FPRS+11)*8)(3)
++ std 26,((JB_GPRS+12)*8)(3)
++ stfd 26,((JB_FPRS+12)*8)(3)
++ std 27,((JB_GPRS+13)*8)(3)
++ stfd 27,((JB_FPRS+13)*8)(3)
++ std 28,((JB_GPRS+14)*8)(3)
++ stfd 28,((JB_FPRS+14)*8)(3)
++ std 29,((JB_GPRS+15)*8)(3)
++ stfd 29,((JB_FPRS+15)*8)(3)
++ std 30,((JB_GPRS+16)*8)(3)
++ stfd 30,((JB_FPRS+16)*8)(3)
++ std 31,((JB_GPRS+17)*8)(3)
++ stfd 31,((JB_FPRS+17)*8)(3)
++ b JUMPTARGET (__sigjmp_save)
++.size .__sigsetjmp,.-.__sigsetjmp
+Index: dietlibc-0.30/powerpc64/start.S
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc64/start.S
+@@ -0,0 +1,91 @@
++#include "dietfeatures.h"
++
++ .section ".text"
++ .align 2
++ .globl ._start
++ .type ._start,@function
++ .globl _start
++ .section ".opd","aw"
++_start:
++ .quad ._start
++ .quad .TOC.@tocbase, 0
++ .previous
++._start:
++
++/*
++ .section ".text"
++ .align 2
++ .globl ._start
++ .type ._start,@function
++ .globl _start
++ .section ".opd","aw"
++_start:
++ .quad ._start
++ .quad .TOC.@tocbase, 0
++ .previous
++._start:
++*/
++ /* Save the stack pointer, in case we're statically linked under Linux. */
++ mr 9,1
++ /* Set up an initial stack frame, and clear the LR. */
++ clrrdi 1,1,4
++ li 0,0
++ stdu 1,-128(1)
++ mtlr 0
++ std 0,0(1)
++
++ /* r9 contains the initial stack pointer
++ argc = (r9)
++ argv = (r9+4)
++ envp = argv+(argc+1)*4 */
++
++ lis 14,__libc_stack_end@highesta
++ ori 14,14,__libc_stack_end@highera
++ sldi 14,14,32
++ oris 14,14,__libc_stack_end@ha
++ std 9,__libc_stack_end@l(14)
++
++ ldu 3,0(9) /* argc */
++ addi 4,9,8 /* argv */
++ add 5,0,3 /* argc... */
++ addi 5,5,1 /* argc+1...*/
++ slwi 5,5,3 /* (argc+1)*8 */
++ add 5,5,4 /* argv+(argc+1)*8 */
++
++ lis 14,environ@highesta
++ ori 14,14,environ@highera
++ sldi 14,14,32
++ oris 14,14,environ@ha
++ std 5,environ@l(14)
++
++#ifdef WANT_DYNAMIC
++/* #warning dynamic */
++ mr 6,7
++ bl ._dyn_start
++#else
++/* #warning static */
++#define DOTIFY(name) .##name
++ bl DOTIFY(CALL_IN_STARTCODE)
++#endif
++ b .exit
++
++.LT_start:
++ .long 0
++ .quad 0x000c000000000000 | 0x0000200000000000 | 0x0000004000000000
++ .long .LT_start-._start
++ .short .LT_start_name_end-.LT_start_name_start
++.LT_start_name_start:
++ .ascii "_start"
++.LT_start_name_end:
++ .align 2
++ .size _start,.-_start
++
++/* Define a symbol for the first piece of initialized data. */
++ .section ".data"
++__data_start:
++
++/* this is needed for libgcc_eh.a - see gcc-3.4/gcc/config/rs6000/linux-unwind.h */
++ .weak __libc_stack_end
++ .lcomm __libc_stack_end,8,8
++ .type __libc_stack_end,@object
++
+Index: dietlibc-0.30/powerpc64/syscalls.h
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc64/syscalls.h
+@@ -0,0 +1,317 @@
++
++#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 /* Syscall for Andrew File System */
++#define __NR_setfsuid 138
++#define __NR_setfsgid 139
++#define __NR__llseek 140
++#define __NR_getdents 141
++#define __NR__newselect 142
++#define __NR_flock 143
++#define __NR_msync 144
++#define __NR_readv 145
++#define __NR_writev 146
++#define __NR_getsid 147
++#define __NR_fdatasync 148
++#define __NR__sysctl 149
++#define __NR_mlock 150
++#define __NR_munlock 151
++#define __NR_mlockall 152
++#define __NR_munlockall 153
++#define __NR_sched_setparam 154
++#define __NR_sched_getparam 155
++#define __NR_sched_setscheduler 156
++#define __NR_sched_getscheduler 157
++#define __NR_sched_yield 158
++#define __NR_sched_get_priority_max 159
++#define __NR_sched_get_priority_min 160
++#define __NR_sched_rr_get_interval 161
++#define __NR_nanosleep 162
++#define __NR_mremap 163
++#define __NR_setresuid 164
++#define __NR_getresuid 165
++#define __NR_query_module 166
++#define __NR_poll 167
++#define __NR_nfsservctl 168
++#define __NR_setresgid 169
++#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_pread 179
++#define __NR_pwrite 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 /* some people actually want streams */
++#define __NR_putpmsg 188 /* some people actually want streams */
++#define __NR_vfork 189
++#define __NR_ugetrlimit 190 /* SuS compliant getrlimit */
++#define __NR_readahead 191
++/* #define __NR_mmap2 192 32bit only */
++/* #define __NR_truncate64 193 32bit only */
++/* #define __NR_ftruncate64 194 32bit only */
++/* #define __NR_stat64 195 32bit only */
++/* #define __NR_lstat64 196 32bit only */
++/* #define __NR_fstat64 197 32bit only */
++#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
++/* #define __NR_fcntl64 204 32bit only */
++#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
++/* 224 currently unused */
++#define __NR_tuxcall 225
++/* #define __NR_sendfile64 226 32bit only */
++#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
++/* #define __NR_fadvise64_64 254 32bit only */
++#define __NR_rtas 255
++/* Number 256 is reserved for sys_debug_setcontext */
++/* Number 257 is reserved for vserver */
++/* Number 258 is reserved for new sys_remap_file_pages */
++#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 __diet_proto_common(sym) \
++ .section ".opd","aw"; \
++ .align 3; \
++sym: \
++ .quad .sym,.TOC.@tocbase,0; \
++ .previous; \
++ .size sym,24; \
++ .type .sym,@function
++
++#define diet_proto_weak(sym) \
++ .weak sym; \
++ .weak .sym; \
++ __diet_proto_common(sym)
++
++#define diet_proto(sym) \
++ .globl sym; \
++ .globl .sym; \
++ __diet_proto_common(sym)
++
++
++#define syscall_weak(name,wsym,sym) \
++.text; \
++diet_proto_weak(wsym); \
++diet_proto(sym); \
++.wsym: \
++.sym: \
++ li 0,__NR_##name; \
++ b __unified_syscall
++
++#define syscall(name,sym) \
++.text; \
++diet_proto(sym); \
++.sym: \
++ li 0,__NR_##name; \
++ b __unified_syscall
++
+Index: dietlibc-0.30/powerpc64/umount.S
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc64/umount.S
+@@ -0,0 +1,8 @@
++#include "syscalls.h"
++
++ .text
++diet_proto(umount)
++.umount:
++ li 0, __NR_umount2
++ li 4, 0
++ b __unified_syscall
+Index: dietlibc-0.30/powerpc64/unified.S
+===================================================================
+--- /dev/null
++++ dietlibc-0.30/powerpc64/unified.S
+@@ -0,0 +1,71 @@
++#include <dietfeatures.h>
++#include "syscalls.h"
++
++ .text
++.exit:
++ .weak .exit
++._exit:
++ li 0,__NR_exit
++ .global __unified_syscall
++__unified_syscall:
++ sc
++ bnslr+
++
++ .global error_unified_syscall
++error_unified_syscall:
++
++#ifdef WANT_THREAD_SAFE
++ stdu 1,-128(1)
++ mflr 0
++ std 0,20(1)
++ std 3,12(1)
++ bl .__errno_location
++ ld 0,12(1)
++ stw 0,0(3)
++ ld 0,20(1)
++ mtlr 0
++ addi 1,1,128
++#else
++ lis 9,errno@highesta
++ ori 9,9,errno@highera
++ sldi 9,9,32
++ oris 9,9,errno@ha
++ stw 3,errno@l(9)
++#endif
++ li 3,-1
++
++/* here we go and "reuse" the return for weak-void functions */
++//#include "dietuglyweaks.h"
++.__thread_doexit:
++ .weak .__thread_doexit
++.__fflush_stdin:
++ .weak .__fflush_stdin
++.__fflush_stdout:
++ .weak .__fflush_stdout
++.__fflush_stderr:
++ .weak .__fflush_stderr
++.flockfile:
++ .weak .flockfile
++.funlockfile:
++ .weak .funlockfile
++.__nop:
++ .weak .__nop
++.__you_tried_to_link_a_dietlibc_object_against_glibc:
++ .weak .__you_tried_to_link_a_dietlibc_object_against_glibc
++
++ blr
++ .long 0
++ .byte 0,0,0,1,128,0,0,0
++ .size ._exit,.-._exit
++ .size .exit,.-.exit
++
++diet_proto_weak(__thread_doexit)
++diet_proto_weak(__fflush_stdin)
++diet_proto_weak(__fflush_stdout)
++diet_proto_weak(__fflush_stderr)
++diet_proto_weak(flockfile)
++diet_proto_weak(funlockfile)
++diet_proto_weak(__nop)
++diet_proto_weak(__you_tried_to_link_a_dietlibc_object_against_glibc)
++diet_proto_weak(exit)
++diet_proto(_exit)
+Index: dietlibc-0.30/ppc64/Makefile.add
+===================================================================
+--- dietlibc-0.30.orig/ppc64/Makefile.add
++++ /dev/null
+@@ -1,5 +0,0 @@
+-
+-CFLAGS+=-Os -mpowerpc64
+-VPATH:=ppc64:syscalls.s:$(VPATH)
+-
+-CC+=-m64
+Index: dietlibc-0.30/ppc64/__longjmp.S
+===================================================================
+--- dietlibc-0.30.orig/ppc64/__longjmp.S
++++ /dev/null
+@@ -1,54 +0,0 @@
+-#include <setjmp.h>
+-
+- .quad .__longjmp,.TOC.@tocbase,0
+- .text
+- .size __longjmp,24
+- .type .__longjmp,@function
+- .globl .__longjmp
+-.align 2
+-.__longjmp:
+- ld 1,(JB_GPR1*8)(3)
+- ld 2,(JB_GPR2*8)(3)
+- ld 0,(JB_LR*8)(3)
+- ld 14,((JB_GPRS+0)*8)(3)
+- lfd 14,((JB_FPRS+0)*8)(3)
+- ld 15,((JB_GPRS+1)*8)(3)
+- lfd 15,((JB_FPRS+1)*8)(3)
+- ld 16,((JB_GPRS+2)*8)(3)
+- lfd 16,((JB_FPRS+2)*8)(3)
+- ld 17,((JB_GPRS+3)*8)(3)
+- lfd 17,((JB_FPRS+3)*8)(3)
+- ld 18,((JB_GPRS+4)*8)(3)
+- lfd 18,((JB_FPRS+4)*8)(3)
+- ld 19,((JB_GPRS+5)*8)(3)
+- lfd 19,((JB_FPRS+5)*8)(3)
+- ld 20,((JB_GPRS+6)*8)(3)
+- lfd 20,((JB_FPRS+6)*8)(3)
+- mtlr 0
+- ld 21,((JB_GPRS+7)*8)(3)
+- lfd 21,((JB_FPRS+7)*8)(3)
+- ld 22,((JB_GPRS+8)*8)(3)
+- lfd 22,((JB_FPRS+8)*8)(3)
+- ld 0,(JB_CR*8)(3)
+- ld 23,((JB_GPRS+9)*8)(3)
+- lfd 23,((JB_FPRS+9)*8)(3)
+- ld 24,((JB_GPRS+10)*8)(3)
+- lfd 24,((JB_FPRS+10)*8)(3)
+- ld 25,((JB_GPRS+11)*8)(3)
+- lfd 25,((JB_FPRS+11)*8)(3)
+- mtcrf 0xFF,0
+- ld 26,((JB_GPRS+12)*8)(3)
+- lfd 26,((JB_FPRS+12)*8)(3)
+- ld 27,((JB_GPRS+13)*8)(3)
+- lfd 27,((JB_FPRS+13)*8)(3)
+- ld 28,((JB_GPRS+14)*8)(3)
+- lfd 28,((JB_FPRS+14)*8)(3)
+- ld 29,((JB_GPRS+15)*8)(3)
+- lfd 29,((JB_FPRS+15)*8)(3)
+- ld 30,((JB_GPRS+16)*8)(3)
+- lfd 30,((JB_FPRS+16)*8)(3)
+- ld 31,((JB_GPRS+17)*8)(3)
+- lfd 31,((JB_FPRS+17)*8)(3)
+- mr 3,4
+- blr
+-.size .__longjmp,.-.__longjmp
+Index: dietlibc-0.30/ppc64/__testandset.S
+===================================================================
+--- dietlibc-0.30.orig/ppc64/__testandset.S
++++ /dev/null
+@@ -1,12 +0,0 @@
+-.global __testandset
+-.type __testandset,@function
+-.align 2
+-__testandset:
+-1: lwarx 5,0,3
+- li 0,1
+- stwcx. 0,0,3
+- bne- 1b
+- mr 3,5
+- blr
+-.size __testandset,.-__testandset
+-
+Index: dietlibc-0.30/ppc64/clone.S
+===================================================================
+--- dietlibc-0.30.orig/ppc64/clone.S
++++ /dev/null
+@@ -1,52 +0,0 @@
+-#include <dietfeatures.h>
+-#include "syscalls.h"
+-#include <errno.h>
+-
+-.text
+-.weak clone
+-clone:
+-.global __clone
+-__clone:
+- cmpwi 4,0 /* check have non null child_stack pointer */
+- cmpwi cr1, 3,0 /* check have non null thread_funcion */
+- cror eq,4*cr1+eq,eq /* now if eq is set one is or both are zero */
+- beq .Lclone_error
+-
+- stdu 1,-64(1) /* alloc some space on the stack */
+- std 29, 16(1) /* save r29,r30,r31 on stack */
+- std 30, 24(1)
+- std 31, 32(1)
+-
+- rlwinm 4,4,0,0,27 /* mask out lower 4 bits */
+-
+- /* move parameter to positions clone wants them */
+- mr 29,3 /* r29 = r3 fn */
+- mr 30,4 /* r30 = r4 stack */
+- mr 31,6 /* r31 = r6 arg */
+- mr 3, 5 /* r3 = r5 flags */
+-
+- li 0, __NR_clone /* load syscall nr. */
+- sc
+-
+- cmpwi cr1,3,0 /* compare return of syscall with 0 */
+- crandc 4*cr1+eq,4*cr1+eq,so
+- bne .Lclone_parent /* return was non zero -> .Lclone_parent */
+-
+- /* we are the cloned process */
+- mr 1, 30 /* set stack pointer */
+- mtctr 29 /* set count register to fn ? */
+- mr 3, 31 /* set argument */
+- bctrl /* branch trough count register and link */
+- b _exit /* exit thread */
+-
+-.Lclone_parent:
+- ld 29,16(1) /* restore saved registers */
+- ld 30,24(1)
+- ld 31,32(1)
+- addi 1, 1,64 /* free stack */
+- bnslr+ /* had cloned a thread so return to parent */
+- b error_unified_syscall
+-
+-.Lclone_error:
+- li 3, EINVAL
+- b error_unified_syscall
+Index: dietlibc-0.30/ppc64/setjmp.S
+===================================================================
+--- dietlibc-0.30.orig/ppc64/setjmp.S
++++ /dev/null
+@@ -1,59 +0,0 @@
+-#include <setjmp.h>
+-
+-#ifdef PIC
+-#define JUMPTARGET(name) name##@plt
+-#else
+-#define JUMPTARGET(name) .name
+-#endif
+-
+- .quad .__sigsetjmp,.TOC.@tocbase,0
+- .text
+- .size __sigsetjmp,24
+- .type .__sigsetjmp,@function
+- .globl .__sigsetjmp
+-.align 2
+-.__sigsetjmp:
+- std 1,(JB_GPR1*8)(3)
+- mflr 0
+- std 2,(JB_GPR2*8)(3)
+- std 14,((JB_GPRS+0)*8)(3)
+- stfd 14,((JB_FPRS+0)*8)(3)
+- std 0,(JB_LR*8)(3)
+- std 15,((JB_GPRS+1)*8)(3)
+- stfd 15,((JB_FPRS+1)*8)(3)
+- mfcr 0
+- std 16,((JB_GPRS+2)*8)(3)
+- stfd 16,((JB_FPRS+2)*8)(3)
+- std 0,(JB_CR*8)(3)
+- std 17,((JB_GPRS+3)*8)(3)
+- stfd 17,((JB_FPRS+3)*8)(3)
+- std 18,((JB_GPRS+4)*8)(3)
+- stfd 18,((JB_FPRS+4)*8)(3)
+- std 19,((JB_GPRS+5)*8)(3)
+- stfd 19,((JB_FPRS+5)*8)(3)
+- std 20,((JB_GPRS+6)*8)(3)
+- stfd 20,((JB_FPRS+6)*8)(3)
+- std 21,((JB_GPRS+7)*8)(3)
+- stfd 21,((JB_FPRS+7)*8)(3)
+- std 22,((JB_GPRS+8)*8)(3)
+- stfd 22,((JB_FPRS+8)*8)(3)
+- std 23,((JB_GPRS+9)*8)(3)
+- stfd 23,((JB_FPRS+9)*8)(3)
+- std 24,((JB_GPRS+10)*8)(3)
+- stfd 24,((JB_FPRS+10)*8)(3)
+- std 25,((JB_GPRS+11)*8)(3)
+- stfd 25,((JB_FPRS+11)*8)(3)
+- std 26,((JB_GPRS+12)*8)(3)
+- stfd 26,((JB_FPRS+12)*8)(3)
+- std 27,((JB_GPRS+13)*8)(3)
+- stfd 27,((JB_FPRS+13)*8)(3)
+- std 28,((JB_GPRS+14)*8)(3)
+- stfd 28,((JB_FPRS+14)*8)(3)
+- std 29,((JB_GPRS+15)*8)(3)
+- stfd 29,((JB_FPRS+15)*8)(3)
+- std 30,((JB_GPRS+16)*8)(3)
+- stfd 30,((JB_FPRS+16)*8)(3)
+- std 31,((JB_GPRS+17)*8)(3)
+- stfd 31,((JB_FPRS+17)*8)(3)
+- b JUMPTARGET (__sigjmp_save)
+-.size .__sigsetjmp,.-.__sigsetjmp
+Index: dietlibc-0.30/ppc64/start.S
+===================================================================
+--- dietlibc-0.30.orig/ppc64/start.S
++++ /dev/null
+@@ -1,91 +0,0 @@
+-#include "dietfeatures.h"
+-
+- .section ".text"
+- .align 2
+- .globl ._start
+- .type ._start,@function
+- .globl _start
+- .section ".opd","aw"
+-_start:
+- .quad ._start
+- .quad .TOC.@tocbase, 0
+- .previous
+-._start:
+-
+-/*
+- .section ".text"
+- .align 2
+- .globl ._start
+- .type ._start,@function
+- .globl _start
+- .section ".opd","aw"
+-_start:
+- .quad ._start
+- .quad .TOC.@tocbase, 0
+- .previous
+-._start:
+-*/
+- /* Save the stack pointer, in case we're statically linked under Linux. */
+- mr 9,1
+- /* Set up an initial stack frame, and clear the LR. */
+- clrrdi 1,1,4
+- li 0,0
+- stdu 1,-128(1)
+- mtlr 0
+- std 0,0(1)
+-
+- /* r9 contains the initial stack pointer
+- argc = (r9)
+- argv = (r9+4)
+- envp = argv+(argc+1)*4 */
+-
+- lis 14,__libc_stack_end@highesta
+- ori 14,14,__libc_stack_end@highera
+- sldi 14,14,32
+- oris 14,14,__libc_stack_end@ha
+- std 9,__libc_stack_end@l(14)
+-
+- ldu 3,0(9) /* argc */
+- addi 4,9,8 /* argv */
+- add 5,0,3 /* argc... */
+- addi 5,5,1 /* argc+1...*/
+- slwi 5,5,3 /* (argc+1)*8 */
+- add 5,5,4 /* argv+(argc+1)*8 */
+-
+- lis 14,environ@highesta
+- ori 14,14,environ@highera
+- sldi 14,14,32
+- oris 14,14,environ@ha
+- std 5,environ@l(14)
+-
+-#ifdef WANT_DYNAMIC
+-/* #warning dynamic */
+- mr 6,7
+- bl ._dyn_start
+-#else
+-/* #warning static */
+-#define DOTIFY(name) .##name
+- bl DOTIFY(CALL_IN_STARTCODE)
+-#endif
+- b .exit
+-
+-.LT_start:
+- .long 0
+- .quad 0x000c000000000000 | 0x0000200000000000 | 0x0000004000000000
+- .long .LT_start-._start
+- .short .LT_start_name_end-.LT_start_name_start
+-.LT_start_name_start:
+- .ascii "_start"
+-.LT_start_name_end:
+- .align 2
+- .size _start,.-_start
+-
+-/* Define a symbol for the first piece of initialized data. */
+- .section ".data"
+-__data_start:
+-
+-/* this is needed for libgcc_eh.a - see gcc-3.4/gcc/config/rs6000/linux-unwind.h */
+- .weak __libc_stack_end
+- .lcomm __libc_stack_end,8,8
+- .type __libc_stack_end,@object
+-
+Index: dietlibc-0.30/ppc64/syscalls.h
+===================================================================
+--- dietlibc-0.30.orig/ppc64/syscalls.h
++++ /dev/null
+@@ -1,317 +0,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 /* Syscall for Andrew File System */
+-#define __NR_setfsuid 138
+-#define __NR_setfsgid 139
+-#define __NR__llseek 140
+-#define __NR_getdents 141
+-#define __NR__newselect 142
+-#define __NR_flock 143
+-#define __NR_msync 144
+-#define __NR_readv 145
+-#define __NR_writev 146
+-#define __NR_getsid 147
+-#define __NR_fdatasync 148
+-#define __NR__sysctl 149
+-#define __NR_mlock 150
+-#define __NR_munlock 151
+-#define __NR_mlockall 152
+-#define __NR_munlockall 153
+-#define __NR_sched_setparam 154
+-#define __NR_sched_getparam 155
+-#define __NR_sched_setscheduler 156
+-#define __NR_sched_getscheduler 157
+-#define __NR_sched_yield 158
+-#define __NR_sched_get_priority_max 159
+-#define __NR_sched_get_priority_min 160
+-#define __NR_sched_rr_get_interval 161
+-#define __NR_nanosleep 162
+-#define __NR_mremap 163
+-#define __NR_setresuid 164
+-#define __NR_getresuid 165
+-#define __NR_query_module 166
+-#define __NR_poll 167
+-#define __NR_nfsservctl 168
+-#define __NR_setresgid 169
+-#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_pread 179
+-#define __NR_pwrite 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 /* some people actually want streams */
+-#define __NR_putpmsg 188 /* some people actually want streams */
+-#define __NR_vfork 189
+-#define __NR_ugetrlimit 190 /* SuS compliant getrlimit */
+-#define __NR_readahead 191
+-/* #define __NR_mmap2 192 32bit only */
+-/* #define __NR_truncate64 193 32bit only */
+-/* #define __NR_ftruncate64 194 32bit only */
+-/* #define __NR_stat64 195 32bit only */
+-/* #define __NR_lstat64 196 32bit only */
+-/* #define __NR_fstat64 197 32bit only */
+-#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
+-/* #define __NR_fcntl64 204 32bit only */
+-#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
+-/* 224 currently unused */
+-#define __NR_tuxcall 225
+-/* #define __NR_sendfile64 226 32bit only */
+-#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
+-/* #define __NR_fadvise64_64 254 32bit only */
+-#define __NR_rtas 255
+-/* Number 256 is reserved for sys_debug_setcontext */
+-/* Number 257 is reserved for vserver */
+-/* Number 258 is reserved for new sys_remap_file_pages */
+-#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 __diet_proto_common(sym) \
+- .section ".opd","aw"; \
+- .align 3; \
+-sym: \
+- .quad .sym,.TOC.@tocbase,0; \
+- .previous; \
+- .size sym,24; \
+- .type .sym,@function
+-
+-#define diet_proto_weak(sym) \
+- .weak sym; \
+- .weak .sym; \
+- __diet_proto_common(sym)
+-
+-#define diet_proto(sym) \
+- .globl sym; \
+- .globl .sym; \
+- __diet_proto_common(sym)
+-
+-
+-#define syscall_weak(name,wsym,sym) \
+-.text; \
+-diet_proto_weak(wsym); \
+-diet_proto(sym); \
+-.wsym: \
+-.sym: \
+- li 0,__NR_##name; \
+- b __unified_syscall
+-
+-#define syscall(name,sym) \
+-.text; \
+-diet_proto(sym); \
+-.sym: \
+- li 0,__NR_##name; \
+- b __unified_syscall
+-
+Index: dietlibc-0.30/ppc64/umount.S
+===================================================================
+--- dietlibc-0.30.orig/ppc64/umount.S
++++ /dev/null
+@@ -1,8 +0,0 @@
+-#include "syscalls.h"
+-
+- .text
+-diet_proto(umount)
+-.umount:
+- li 0, __NR_umount2
+- li 4, 0
+- b __unified_syscall
+Index: dietlibc-0.30/ppc64/unified.S
+===================================================================
+--- dietlibc-0.30.orig/ppc64/unified.S
++++ /dev/null
+@@ -1,71 +0,0 @@
+-#include <dietfeatures.h>
+-#include "syscalls.h"
+-
+- .text
+-.exit:
+- .weak .exit
+-._exit:
+- li 0,__NR_exit
+- .global __unified_syscall
+-__unified_syscall:
+- sc
+- bnslr+
+-
+- .global error_unified_syscall
+-error_unified_syscall:
+-
+-#ifdef WANT_THREAD_SAFE
+- stdu 1,-128(1)
+- mflr 0
+- std 0,20(1)
+- std 3,12(1)
+- bl .__errno_location
+- ld 0,12(1)
+- stw 0,0(3)
+- ld 0,20(1)
+- mtlr 0
+- addi 1,1,128
+-#else
+- lis 9,errno@highesta
+- ori 9,9,errno@highera
+- sldi 9,9,32
+- oris 9,9,errno@ha
+- stw 3,errno@l(9)
+-#endif
+- li 3,-1
+-
+-/* here we go and "reuse" the return for weak-void functions */
+-//#include "dietuglyweaks.h"
+-.__thread_doexit:
+- .weak .__thread_doexit
+-.__fflush_stdin:
+- .weak .__fflush_stdin
+-.__fflush_stdout:
+- .weak .__fflush_stdout
+-.__fflush_stderr:
+- .weak .__fflush_stderr
+-.flockfile:
+- .weak .flockfile
+-.funlockfile:
+- .weak .funlockfile
+-.__nop:
+- .weak .__nop
+-.__you_tried_to_link_a_dietlibc_object_against_glibc:
+- .weak .__you_tried_to_link_a_dietlibc_object_against_glibc
+-
+- blr
+- .long 0
+- .byte 0,0,0,1,128,0,0,0
+- .size ._exit,.-._exit
+- .size .exit,.-.exit
+-
+-diet_proto_weak(__thread_doexit)
+-diet_proto_weak(__fflush_stdin)
+-diet_proto_weak(__fflush_stdout)
+-diet_proto_weak(__fflush_stderr)
+-diet_proto_weak(flockfile)
+-diet_proto_weak(funlockfile)
+-diet_proto_weak(__nop)
+-diet_proto_weak(__you_tried_to_link_a_dietlibc_object_against_glibc)
+-diet_proto_weak(exit)
+-diet_proto(_exit)
+Index: dietlibc-0.30/syscalls.h
+===================================================================
+--- dietlibc-0.30.orig/syscalls.h
++++ dietlibc-0.30/syscalls.h
+@@ -12,7 +12,7 @@
+ #endif
+
+ #elif defined(__powerpc64__)
+-#include "ppc64/syscalls.h"
++#include "powerpc64/syscalls.h"
+
+ #elif defined(__powerpc__)
+ #include "powerpc/syscalls.h"