summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/ppc
diff options
context:
space:
mode:
authorGuillaume Cottenceau <gc@mandriva.com>2001-01-04 20:04:45 +0000
committerGuillaume Cottenceau <gc@mandriva.com>2001-01-04 20:04:45 +0000
commit02fec4701cee79f875c1d02b8b4aee09380dbcb8 (patch)
treef4f291aedbb2e60ee58351481858a8cd3ec80b6b /mdk-stage1/dietlibc/ppc
parent9887fe04751edf39e8389f2c3ec3f020b5e1c17d (diff)
downloaddrakx-backup-do-not-use-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar
drakx-backup-do-not-use-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar.gz
drakx-backup-do-not-use-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar.bz2
drakx-backup-do-not-use-02fec4701cee79f875c1d02b8b4aee09380dbcb8.tar.xz
drakx-backup-do-not-use-02fec4701cee79f875c1d02b8b4aee09380dbcb8.zip
integrate dietlibc/stdio per default for cdrom and disk only installs
Diffstat (limited to 'mdk-stage1/dietlibc/ppc')
-rw-r--r--mdk-stage1/dietlibc/ppc/Makefile.add3
-rw-r--r--mdk-stage1/dietlibc/ppc/__longjmp.S61
-rw-r--r--mdk-stage1/dietlibc/ppc/mmap.c37
-rw-r--r--mdk-stage1/dietlibc/ppc/setjmp.S56
-rw-r--r--mdk-stage1/dietlibc/ppc/start.S44
-rw-r--r--mdk-stage1/dietlibc/ppc/unified.S21
6 files changed, 222 insertions, 0 deletions
diff --git a/mdk-stage1/dietlibc/ppc/Makefile.add b/mdk-stage1/dietlibc/ppc/Makefile.add
new file mode 100644
index 000000000..b71031e05
--- /dev/null
+++ b/mdk-stage1/dietlibc/ppc/Makefile.add
@@ -0,0 +1,3 @@
+
+CFLAGS+=-mpowerpc-gpopt -mpowerpc-gfxopt -Os
+override VPATH=ppc:syscalls.s:lib
diff --git a/mdk-stage1/dietlibc/ppc/__longjmp.S b/mdk-stage1/dietlibc/ppc/__longjmp.S
new file mode 100644
index 000000000..deada115e
--- /dev/null
+++ b/mdk-stage1/dietlibc/ppc/__longjmp.S
@@ -0,0 +1,61 @@
+#define _ASM
+#define _SETJMP_H
+#include <bits/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
+
diff --git a/mdk-stage1/dietlibc/ppc/mmap.c b/mdk-stage1/dietlibc/ppc/mmap.c
new file mode 100644
index 000000000..25d2926b2
--- /dev/null
+++ b/mdk-stage1/dietlibc/ppc/mmap.c
@@ -0,0 +1,37 @@
+#include <linux/types.h>
+#include <linux/unistd.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)
+ : __syscall_clobbers);
+ __sc_ret = __sc_3;
+ __sc_err = __sc_0;
+ }
+ __syscall_return (int);
+}
diff --git a/mdk-stage1/dietlibc/ppc/setjmp.S b/mdk-stage1/dietlibc/ppc/setjmp.S
new file mode 100644
index 000000000..50fa2bdd4
--- /dev/null
+++ b/mdk-stage1/dietlibc/ppc/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
diff --git a/mdk-stage1/dietlibc/ppc/start.S b/mdk-stage1/dietlibc/ppc/start.S
new file mode 100644
index 000000000..c7afeecd2
--- /dev/null
+++ b/mdk-stage1/dietlibc/ppc/start.S
@@ -0,0 +1,44 @@
+#include "start.h"
+
+#ifdef __powerpc__
+
+.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 enthält den initialen Stackpointer.
+ argc = (r9)
+ argv = (r9+4)
+ envp = argv+(argc+1)*4 */
+
+ 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 6,environ@ha
+ stw 5,environ@l(6)
+
+ bl main
+ b exit
+.size _start,.-_start
+
+
+/* Define a symbol for the first piece of initialized data. */
+ .section ".data"
+__data_start:
+
+
+#endif
+
diff --git a/mdk-stage1/dietlibc/ppc/unified.S b/mdk-stage1/dietlibc/ppc/unified.S
new file mode 100644
index 000000000..d2b419f0b
--- /dev/null
+++ b/mdk-stage1/dietlibc/ppc/unified.S
@@ -0,0 +1,21 @@
+#include <dietfeatures.h>
+
+.text
+.global __unified_syscall
+__unified_syscall:
+ sc
+ mfcr 0
+ andis. 9,0,4096
+ mr 0,3
+ beq .L1
+#ifdef WANT_THREAD_SAVE
+ bl __set_errno
+#else
+ lis 9,errno@ha
+ stw 3,errno@l(9)
+#endif
+ li 0,-1
+.L1:
+ mr 3,0
+ blr
+