From 02fec4701cee79f875c1d02b8b4aee09380dbcb8 Mon Sep 17 00:00:00 2001 From: Guillaume Cottenceau Date: Thu, 4 Jan 2001 20:04:45 +0000 Subject: integrate dietlibc/stdio per default for cdrom and disk only installs --- mdk-stage1/dietlibc/ppc/Makefile.add | 3 ++ mdk-stage1/dietlibc/ppc/__longjmp.S | 61 ++++++++++++++++++++++++++++++++++++ mdk-stage1/dietlibc/ppc/mmap.c | 37 ++++++++++++++++++++++ mdk-stage1/dietlibc/ppc/setjmp.S | 56 +++++++++++++++++++++++++++++++++ mdk-stage1/dietlibc/ppc/start.S | 44 ++++++++++++++++++++++++++ mdk-stage1/dietlibc/ppc/unified.S | 21 +++++++++++++ 6 files changed, 222 insertions(+) create mode 100644 mdk-stage1/dietlibc/ppc/Makefile.add create mode 100644 mdk-stage1/dietlibc/ppc/__longjmp.S create mode 100644 mdk-stage1/dietlibc/ppc/mmap.c create mode 100644 mdk-stage1/dietlibc/ppc/setjmp.S create mode 100644 mdk-stage1/dietlibc/ppc/start.S create mode 100644 mdk-stage1/dietlibc/ppc/unified.S (limited to 'mdk-stage1/dietlibc/ppc') 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 + + +#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 +#include + +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 + +#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 + +.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 + -- cgit v1.2.1