From 4cd6a4a5d7e49d54d53dcf4a6f3393d50bd88e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gwenol=C3=A9=20Beauchesne?= Date: Wed, 4 Jun 2003 18:44:09 +0000 Subject: Import dietlibc 0.22 + other fixes for AMD64 --- mdk-stage1/dietlibc/ia64/Makefile.add | 2 + mdk-stage1/dietlibc/ia64/README | 4 + mdk-stage1/dietlibc/ia64/__alarm.c | 1 + mdk-stage1/dietlibc/ia64/__longjmp.S | 1 + mdk-stage1/dietlibc/ia64/__nice.c | 6 + mdk-stage1/dietlibc/ia64/__testandset.S | 11 ++ mdk-stage1/dietlibc/ia64/__time.c | 14 ++ mdk-stage1/dietlibc/ia64/__waitpid.c | 5 + mdk-stage1/dietlibc/ia64/accept.S | 3 + mdk-stage1/dietlibc/ia64/bind.S | 3 + mdk-stage1/dietlibc/ia64/clone.S | 41 ++++++ mdk-stage1/dietlibc/ia64/connect.S | 3 + mdk-stage1/dietlibc/ia64/fork.S | 8 ++ mdk-stage1/dietlibc/ia64/getpeername.S | 3 + mdk-stage1/dietlibc/ia64/getsockname.S | 3 + mdk-stage1/dietlibc/ia64/getsockopt.S | 3 + mdk-stage1/dietlibc/ia64/listen.S | 3 + mdk-stage1/dietlibc/ia64/mmap.S | 3 + mdk-stage1/dietlibc/ia64/msgctl.S | 3 + mdk-stage1/dietlibc/ia64/msgget.S | 3 + mdk-stage1/dietlibc/ia64/msgrcv.S | 3 + mdk-stage1/dietlibc/ia64/msgsnd.S | 3 + mdk-stage1/dietlibc/ia64/pipe.S | 20 +++ mdk-stage1/dietlibc/ia64/recv.S | 3 + mdk-stage1/dietlibc/ia64/recvfrom.S | 3 + mdk-stage1/dietlibc/ia64/recvmsg.S | 3 + mdk-stage1/dietlibc/ia64/semctl.S | 3 + mdk-stage1/dietlibc/ia64/semget.S | 3 + mdk-stage1/dietlibc/ia64/semop.S | 3 + mdk-stage1/dietlibc/ia64/send.S | 3 + mdk-stage1/dietlibc/ia64/sendmsg.S | 3 + mdk-stage1/dietlibc/ia64/sendto.S | 3 + mdk-stage1/dietlibc/ia64/setjmp.S | 1 + mdk-stage1/dietlibc/ia64/setsockopt.S | 3 + mdk-stage1/dietlibc/ia64/shmat.S | 3 + mdk-stage1/dietlibc/ia64/shmctl.S | 3 + mdk-stage1/dietlibc/ia64/shmdt.S | 3 + mdk-stage1/dietlibc/ia64/shmget.S | 3 + mdk-stage1/dietlibc/ia64/shutdown.S | 3 + mdk-stage1/dietlibc/ia64/socket.S | 3 + mdk-stage1/dietlibc/ia64/socketpair.S | 3 + mdk-stage1/dietlibc/ia64/start.S | 45 ++++++ mdk-stage1/dietlibc/ia64/syscalls.h | 242 ++++++++++++++++++++++++++++++++ mdk-stage1/dietlibc/ia64/unified.S | 46 ++++++ mdk-stage1/dietlibc/ia64/utime.S | 3 + mdk-stage1/dietlibc/ia64/vfork.S | 8 ++ 46 files changed, 545 insertions(+) create mode 100644 mdk-stage1/dietlibc/ia64/Makefile.add create mode 100644 mdk-stage1/dietlibc/ia64/README create mode 100644 mdk-stage1/dietlibc/ia64/__alarm.c create mode 100644 mdk-stage1/dietlibc/ia64/__longjmp.S create mode 100644 mdk-stage1/dietlibc/ia64/__nice.c create mode 100644 mdk-stage1/dietlibc/ia64/__testandset.S create mode 100644 mdk-stage1/dietlibc/ia64/__time.c create mode 100644 mdk-stage1/dietlibc/ia64/__waitpid.c create mode 100644 mdk-stage1/dietlibc/ia64/accept.S create mode 100644 mdk-stage1/dietlibc/ia64/bind.S create mode 100644 mdk-stage1/dietlibc/ia64/clone.S create mode 100644 mdk-stage1/dietlibc/ia64/connect.S create mode 100644 mdk-stage1/dietlibc/ia64/fork.S create mode 100644 mdk-stage1/dietlibc/ia64/getpeername.S create mode 100644 mdk-stage1/dietlibc/ia64/getsockname.S create mode 100644 mdk-stage1/dietlibc/ia64/getsockopt.S create mode 100644 mdk-stage1/dietlibc/ia64/listen.S create mode 100644 mdk-stage1/dietlibc/ia64/mmap.S create mode 100644 mdk-stage1/dietlibc/ia64/msgctl.S create mode 100644 mdk-stage1/dietlibc/ia64/msgget.S create mode 100644 mdk-stage1/dietlibc/ia64/msgrcv.S create mode 100644 mdk-stage1/dietlibc/ia64/msgsnd.S create mode 100644 mdk-stage1/dietlibc/ia64/pipe.S create mode 100644 mdk-stage1/dietlibc/ia64/recv.S create mode 100644 mdk-stage1/dietlibc/ia64/recvfrom.S create mode 100644 mdk-stage1/dietlibc/ia64/recvmsg.S create mode 100644 mdk-stage1/dietlibc/ia64/semctl.S create mode 100644 mdk-stage1/dietlibc/ia64/semget.S create mode 100644 mdk-stage1/dietlibc/ia64/semop.S create mode 100644 mdk-stage1/dietlibc/ia64/send.S create mode 100644 mdk-stage1/dietlibc/ia64/sendmsg.S create mode 100644 mdk-stage1/dietlibc/ia64/sendto.S create mode 100644 mdk-stage1/dietlibc/ia64/setjmp.S create mode 100644 mdk-stage1/dietlibc/ia64/setsockopt.S create mode 100644 mdk-stage1/dietlibc/ia64/shmat.S create mode 100644 mdk-stage1/dietlibc/ia64/shmctl.S create mode 100644 mdk-stage1/dietlibc/ia64/shmdt.S create mode 100644 mdk-stage1/dietlibc/ia64/shmget.S create mode 100644 mdk-stage1/dietlibc/ia64/shutdown.S create mode 100644 mdk-stage1/dietlibc/ia64/socket.S create mode 100644 mdk-stage1/dietlibc/ia64/socketpair.S create mode 100644 mdk-stage1/dietlibc/ia64/start.S create mode 100644 mdk-stage1/dietlibc/ia64/syscalls.h create mode 100644 mdk-stage1/dietlibc/ia64/unified.S create mode 100644 mdk-stage1/dietlibc/ia64/utime.S create mode 100644 mdk-stage1/dietlibc/ia64/vfork.S (limited to 'mdk-stage1/dietlibc/ia64') diff --git a/mdk-stage1/dietlibc/ia64/Makefile.add b/mdk-stage1/dietlibc/ia64/Makefile.add new file mode 100644 index 000000000..f660930af --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/Makefile.add @@ -0,0 +1,2 @@ +VPATH:=ia64:syscalls.s:$(VPATH) +LIBOBJ+=$(OBJDIR)/__time.o $(OBJDIR)/__waitpid.o $(OBJDIR)/__nice.o $(OBJDIR)/__alarm.o diff --git a/mdk-stage1/dietlibc/ia64/README b/mdk-stage1/dietlibc/ia64/README new file mode 100644 index 000000000..684364d93 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/README @@ -0,0 +1,4 @@ +A Port for IA64. + +Does not yet support: clone, FPU and profiling. And includes +some subtle bugs which will hopefully be fixed later. diff --git a/mdk-stage1/dietlibc/ia64/__alarm.c b/mdk-stage1/dietlibc/ia64/__alarm.c new file mode 100644 index 000000000..e2c499f2c --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/__alarm.c @@ -0,0 +1 @@ +#include "alpha/__alarm.c" diff --git a/mdk-stage1/dietlibc/ia64/__longjmp.S b/mdk-stage1/dietlibc/ia64/__longjmp.S new file mode 100644 index 000000000..698bda528 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/__longjmp.S @@ -0,0 +1 @@ +/* No longjmp yet */ diff --git a/mdk-stage1/dietlibc/ia64/__nice.c b/mdk-stage1/dietlibc/ia64/__nice.c new file mode 100644 index 000000000..012ea2628 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/__nice.c @@ -0,0 +1,6 @@ +#include + +int nice(int x) { + if (setpriority(PRIO_PROCESS,0,x)) return -1; + return getpriority(PRIO_PROCESS,0); +} diff --git a/mdk-stage1/dietlibc/ia64/__testandset.S b/mdk-stage1/dietlibc/ia64/__testandset.S new file mode 100644 index 000000000..d462e3c58 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/__testandset.S @@ -0,0 +1,11 @@ +.text +.globl __testandset +.proc __testandset +__testandset: + mov ar.ccv = r0 + mov r29 = 1 + ld8 r3 = [r32] + cmpxchg8.acq r8 = [r32], r29, ar.ccv /* cmpxchg is atomic */ + br.ret.sptk.clr b0 +.endp __testandset +.size __testandset, . - __testandset diff --git a/mdk-stage1/dietlibc/ia64/__time.c b/mdk-stage1/dietlibc/ia64/__time.c new file mode 100644 index 000000000..7547acb1d --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/__time.c @@ -0,0 +1,14 @@ +#include +#include + +time_t time(time_t*t) { + struct timeval tv; + time_t ret; + if (gettimeofday(&tv,0)) { + ret=(time_t)-1; + } else { + ret=(time_t)tv.tv_sec; + } + if (t) *t=ret; + return ret; +} diff --git a/mdk-stage1/dietlibc/ia64/__waitpid.c b/mdk-stage1/dietlibc/ia64/__waitpid.c new file mode 100644 index 000000000..8c228f375 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/__waitpid.c @@ -0,0 +1,5 @@ +#include + +pid_t waitpid(int pid, int * wait_stat, int flags) { + return wait4(pid, wait_stat, flags, 0); +} diff --git a/mdk-stage1/dietlibc/ia64/accept.S b/mdk-stage1/dietlibc/ia64/accept.S new file mode 100644 index 000000000..7bdc38c7e --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/accept.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(accept, accept); diff --git a/mdk-stage1/dietlibc/ia64/bind.S b/mdk-stage1/dietlibc/ia64/bind.S new file mode 100644 index 000000000..05849d470 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/bind.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(bind, bind); diff --git a/mdk-stage1/dietlibc/ia64/clone.S b/mdk-stage1/dietlibc/ia64/clone.S new file mode 100644 index 000000000..ba768141c --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/clone.S @@ -0,0 +1,41 @@ +/* This is untested code which probably won´t work out of the box! */ + +#include "syscalls.h" +#include + +.text +.globl __clone +.proc __clone +.weak __clone2 +__clone2: +__clone: + mov r8 = EINVAL + cmp.eq p6,p0=0,r32 +(p6) br.cond.spnt.few __error_unified_syscall + cmp.eq p6,p0=0,r33 +(p6) br.cond.spnt.few __error_unified_syscall + flushrs + + mov.m r17 = ar.rsc + mov r14 = r32 + mov r18 = r33 + mov r16 = r36;; + mov r15 = __NR_clone2 + break 0x100000 + cmp.eq p6,p0=-1,r10 +(p6) br.cond.spnt.few __error_unified_syscall + cmp.eq p6,p7=0,r8 +(p6) ld8 r34=[r14],8 +(p6) mov.m ar.bspstore=r18 +(p6) mov r32 = r16 + mov.m ar.rsc = r17 +(p7) br.ret.sptk b0 + ld8 r1 = [r14] + mov b6 = r34 + br.call.dptk.few b0=b6 + mov r32 = r8 + br.call.dptk.few b0=__error_unified_syscall + br.ret.sptk.few b0 +.endp __clone +.endp __clone2 +.size __clone, . - __clone diff --git a/mdk-stage1/dietlibc/ia64/connect.S b/mdk-stage1/dietlibc/ia64/connect.S new file mode 100644 index 000000000..5fbd151ae --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/connect.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(connect, connect); diff --git a/mdk-stage1/dietlibc/ia64/fork.S b/mdk-stage1/dietlibc/ia64/fork.S new file mode 100644 index 000000000..3b253a80b --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/fork.S @@ -0,0 +1,8 @@ +#include "syscalls.h" + +.text +.globl fork +fork: + mov r15 = __NR_clone + mov r32 = 17 + br __unified_syscall diff --git a/mdk-stage1/dietlibc/ia64/getpeername.S b/mdk-stage1/dietlibc/ia64/getpeername.S new file mode 100644 index 000000000..fdaa1038a --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/getpeername.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(getpeername, getpeername); diff --git a/mdk-stage1/dietlibc/ia64/getsockname.S b/mdk-stage1/dietlibc/ia64/getsockname.S new file mode 100644 index 000000000..1ea0bc000 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/getsockname.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(getsockname, getsockname); diff --git a/mdk-stage1/dietlibc/ia64/getsockopt.S b/mdk-stage1/dietlibc/ia64/getsockopt.S new file mode 100644 index 000000000..465c4e08e --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/getsockopt.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(getsockopt, getsockopt); diff --git a/mdk-stage1/dietlibc/ia64/listen.S b/mdk-stage1/dietlibc/ia64/listen.S new file mode 100644 index 000000000..66a3fe376 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/listen.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(listen, listen); diff --git a/mdk-stage1/dietlibc/ia64/mmap.S b/mdk-stage1/dietlibc/ia64/mmap.S new file mode 100644 index 000000000..cca4bbdbb --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/mmap.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall (mmap, mmap) diff --git a/mdk-stage1/dietlibc/ia64/msgctl.S b/mdk-stage1/dietlibc/ia64/msgctl.S new file mode 100644 index 000000000..d7caed2cc --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/msgctl.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(msgctl,msgctl) diff --git a/mdk-stage1/dietlibc/ia64/msgget.S b/mdk-stage1/dietlibc/ia64/msgget.S new file mode 100644 index 000000000..518d67ac4 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/msgget.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(msgget,msgget) diff --git a/mdk-stage1/dietlibc/ia64/msgrcv.S b/mdk-stage1/dietlibc/ia64/msgrcv.S new file mode 100644 index 000000000..ab62e6c30 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/msgrcv.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(msgrcv,msgrcv) diff --git a/mdk-stage1/dietlibc/ia64/msgsnd.S b/mdk-stage1/dietlibc/ia64/msgsnd.S new file mode 100644 index 000000000..890a996a2 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/msgsnd.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(msgsnd,msgsnd) diff --git a/mdk-stage1/dietlibc/ia64/pipe.S b/mdk-stage1/dietlibc/ia64/pipe.S new file mode 100644 index 000000000..c3bf4570b --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/pipe.S @@ -0,0 +1,20 @@ +#include "syscalls.h" + +.text +.globl pipe +.proc pipe + +pipe: + st8 [r12] = r32 + mov r15 = __NR_pipe + break.i 0x100000 + ld8 r2 = [r12] + cmp.eq p7,p6=-1,r10 +(p6) st4 [r2] = r8,4 + mov r8 = r0 +(p7) br.cond.spnt.few __error_unified_syscall +(p6) st4 [r2] = r9 +(p6) br.ret.sptk.few b0 + +.endp pipe +.size pipe, . - pipe diff --git a/mdk-stage1/dietlibc/ia64/recv.S b/mdk-stage1/dietlibc/ia64/recv.S new file mode 100644 index 000000000..1f1640390 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/recv.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(recv, recv); diff --git a/mdk-stage1/dietlibc/ia64/recvfrom.S b/mdk-stage1/dietlibc/ia64/recvfrom.S new file mode 100644 index 000000000..d3c2e602f --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/recvfrom.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(recvfrom, recvfrom); diff --git a/mdk-stage1/dietlibc/ia64/recvmsg.S b/mdk-stage1/dietlibc/ia64/recvmsg.S new file mode 100644 index 000000000..cfbbafdc1 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/recvmsg.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(recvmsg, recvmsg); diff --git a/mdk-stage1/dietlibc/ia64/semctl.S b/mdk-stage1/dietlibc/ia64/semctl.S new file mode 100644 index 000000000..e215ed955 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/semctl.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(semctl,semctl) diff --git a/mdk-stage1/dietlibc/ia64/semget.S b/mdk-stage1/dietlibc/ia64/semget.S new file mode 100644 index 000000000..67f488546 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/semget.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(semget,semget) diff --git a/mdk-stage1/dietlibc/ia64/semop.S b/mdk-stage1/dietlibc/ia64/semop.S new file mode 100644 index 000000000..81b6fc606 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/semop.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(semop,semop) diff --git a/mdk-stage1/dietlibc/ia64/send.S b/mdk-stage1/dietlibc/ia64/send.S new file mode 100644 index 000000000..38f47f398 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/send.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(send, send); diff --git a/mdk-stage1/dietlibc/ia64/sendmsg.S b/mdk-stage1/dietlibc/ia64/sendmsg.S new file mode 100644 index 000000000..c2bc80f72 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/sendmsg.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(sendmsg, sendmsg); diff --git a/mdk-stage1/dietlibc/ia64/sendto.S b/mdk-stage1/dietlibc/ia64/sendto.S new file mode 100644 index 000000000..1579a3b45 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/sendto.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(sendto, sendto); diff --git a/mdk-stage1/dietlibc/ia64/setjmp.S b/mdk-stage1/dietlibc/ia64/setjmp.S new file mode 100644 index 000000000..f0f5bc431 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/setjmp.S @@ -0,0 +1 @@ +/* No, I am not going to save 128 registers */ diff --git a/mdk-stage1/dietlibc/ia64/setsockopt.S b/mdk-stage1/dietlibc/ia64/setsockopt.S new file mode 100644 index 000000000..45fcfbb6c --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/setsockopt.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(setsockopt, setsockopt); diff --git a/mdk-stage1/dietlibc/ia64/shmat.S b/mdk-stage1/dietlibc/ia64/shmat.S new file mode 100644 index 000000000..51248173d --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/shmat.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(shmat,shmat) diff --git a/mdk-stage1/dietlibc/ia64/shmctl.S b/mdk-stage1/dietlibc/ia64/shmctl.S new file mode 100644 index 000000000..d56caace4 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/shmctl.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(shmctl,shmctl) diff --git a/mdk-stage1/dietlibc/ia64/shmdt.S b/mdk-stage1/dietlibc/ia64/shmdt.S new file mode 100644 index 000000000..d9812a799 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/shmdt.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(shmdt,shmdt) diff --git a/mdk-stage1/dietlibc/ia64/shmget.S b/mdk-stage1/dietlibc/ia64/shmget.S new file mode 100644 index 000000000..82914223f --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/shmget.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(shmget,shmget) diff --git a/mdk-stage1/dietlibc/ia64/shutdown.S b/mdk-stage1/dietlibc/ia64/shutdown.S new file mode 100644 index 000000000..024e99e18 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/shutdown.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(shutdown, shutdown); diff --git a/mdk-stage1/dietlibc/ia64/socket.S b/mdk-stage1/dietlibc/ia64/socket.S new file mode 100644 index 000000000..cc453881f --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/socket.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(socket, socket); diff --git a/mdk-stage1/dietlibc/ia64/socketpair.S b/mdk-stage1/dietlibc/ia64/socketpair.S new file mode 100644 index 000000000..d92eaa4d8 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/socketpair.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(socketpair, socketpair); diff --git a/mdk-stage1/dietlibc/ia64/start.S b/mdk-stage1/dietlibc/ia64/start.S new file mode 100644 index 000000000..dbacb25f6 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/start.S @@ -0,0 +1,45 @@ +/* + Copyright (C) 2002 Thomas M. Ogrisegg + + This is free software. You can redistribute and + modify it under the terms of the GNU General Public + Public License. + + This file is part of the IA64-Port of the dietlibc + + start.S + Implemenation of the _start startup function +*/ + +.psr abi64 +.psr lsb +.lsb + +.text +.globl _start +.proc _start + +_start: + alloc r2 = ar.pfs,0,0,7,0 + adds out1 = 16, sp /* base arguments */ + movl gp = @gprel(0f) /* base offset */ + ;; +0: + ld8 out0 = [out1], 8 /* load argc and set argv */ + mov r9 = ip + ;; + shladd out2=out0,3,out1 /* envp = argv+8*argc */ + sub gp = r9, gp /* subtract program counter */ + ;; + addl r15 = @ltoff(environ#), gp /* offset to environ */ + adds out2 = 8, out2 /* envp += 8 */ + ;; + ld8 r14 = [r15] + ;; + st8 [r14] = out2 /* store envp in environ */ + br.call.sptk.few rp = main /* call main */ + ;; + mov r32 = r8 /* store return code */ + br _exit /* branch to _exit */ +.endp _start +.size _start, . - _start diff --git a/mdk-stage1/dietlibc/ia64/syscalls.h b/mdk-stage1/dietlibc/ia64/syscalls.h new file mode 100644 index 000000000..65eda0ed2 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/syscalls.h @@ -0,0 +1,242 @@ +#ifndef __DLIBC_SYSCALL_H_ +#define __DLIBC_SYSCALL_H_ + +#define __NR_ni_syscall 1024 +#define __NR_exit 1025 +#define __NR_read 1026 +#define __NR_write 1027 +#define __NR_open 1028 +#define __NR_close 1029 +#define __NR_creat 1030 +#define __NR_link 1031 +#define __NR_unlink 1032 +#define __NR_execve 1033 +#define __NR_chdir 1034 +#define __NR_fchdir 1035 +#define __NR_utimes 1036 +#define __NR_mknod 1037 +#define __NR_chmod 1038 +#define __NR_chown 1039 +#define __NR_lseek 1040 +#define __NR_getpid 1041 +#define __NR_getppid 1042 +#define __NR_mount 1043 +#define __NR_umount 1044 +#define __NR_setuid 1045 +#define __NR_getuid 1046 +#define __NR_geteuid 1047 +#define __NR_ptrace 1048 +#define __NR_access 1049 +#define __NR_sync 1050 +#define __NR_fsync 1051 +#define __NR_fdatasync 1052 +#define __NR_kill 1053 +#define __NR_rename 1054 +#define __NR_mkdir 1055 +#define __NR_rmdir 1056 +#define __NR_dup 1057 +#define __NR_pipe 1058 +#define __NR_times 1059 +#define __NR_brk 1060 +#define __NR_setgid 1061 +#define __NR_getgid 1062 +#define __NR_getegid 1063 +#define __NR_acct 1064 +#define __NR_ioctl 1065 +#define __NR_fcntl 1066 +#define __NR_umask 1067 +#define __NR_chroot 1068 +#define __NR_ustat 1069 +#define __NR_dup2 1070 +#define __NR_setreuid 1071 +#define __NR_setregid 1072 +#define __NR_getresuid 1073 +#define __NR_setresuid 1074 +#define __NR_getresgid 1075 +#define __NR_setresgid 1076 +#define __NR_getgroups 1077 +#define __NR_setgroups 1078 +#define __NR_getpgid 1079 +#define __NR_setpgid 1080 +#define __NR_setsid 1081 +#define __NR_getsid 1082 +#define __NR_sethostname 1083 +#define __NR_setrlimit 1084 +#define __NR_getrlimit 1085 +#define __NR_getrusage 1086 +#define __NR_gettimeofday 1087 +#define __NR_settimeofday 1088 +#define __NR_select 1089 +#define __NR_poll 1090 +#define __NR_symlink 1091 +#define __NR_readlink 1092 +#define __NR_uselib 1093 +#define __NR_swapon 1094 +#define __NR_swapoff 1095 +#define __NR_reboot 1096 +#define __NR_truncate 1097 +#define __NR_ftruncate 1098 +#define __NR_fchmod 1099 +#define __NR_fchown 1100 +#define __NR_getpriority 1101 +#define __NR_setpriority 1102 +#define __NR_statfs 1103 +#define __NR_fstatfs 1104 +#define __NR_gettid 1105 +#define __NR_semget 1106 +#define __NR_semop 1107 +#define __NR_semctl 1108 +#define __NR_msgget 1109 +#define __NR_msgsnd 1110 +#define __NR_msgrcv 1111 +#define __NR_msgctl 1112 +#define __NR_shmget 1113 +#define __NR_shmat 1114 +#define __NR_shmdt 1115 +#define __NR_shmctl 1116 +#define __NR_syslog 1117 +#define __NR_setitimer 1118 +#define __NR_getitimer 1119 +#define __NR_old_stat 1120 +#define __NR_old_lstat 1121 +#define __NR_old_fstat 1122 +#define __NR_vhangup 1123 +#define __NR_lchown 1124 +#define __NR_vm86 1125 +#define __NR_wait4 1126 +#define __NR_sysinfo 1127 +#define __NR_clone 1128 +#define __NR_setdomainname 1129 +#define __NR_uname 1130 +#define __NR_adjtimex 1131 +#define __NR_create_module 1132 +#define __NR_init_module 1133 +#define __NR_delete_module 1134 +#define __NR_get_kernel_syms 1135 +#define __NR_query_module 1136 +#define __NR_quotactl 1137 +#define __NR_bdflush 1138 +#define __NR_sysfs 1139 +#define __NR_personality 1140 +#define __NR_afs_syscall 1141 +#define __NR_setfsuid 1142 +#define __NR_setfsgid 1143 +#define __NR_getdents 1144 +#define __NR_flock 1145 +#define __NR_readv 1146 +#define __NR_writev 1147 +#define __NR_pread 1148 +#define __NR_pwrite 1149 +#define __NR__sysctl 1150 +#define __NR_mmap 1151 +#define __NR_munmap 1152 +#define __NR_mlock 1153 +#define __NR_mlockall 1154 +#define __NR_mprotect 1155 +#define __NR_mremap 1156 +#define __NR_msync 1157 +#define __NR_munlock 1158 +#define __NR_munlockall 1159 +#define __NR_sched_getparam 1160 +#define __NR_sched_setparam 1161 +#define __NR_sched_getscheduler 1162 +#define __NR_sched_setscheduler 1163 +#define __NR_sched_yield 1164 +#define __NR_sched_get_priority_max 1165 +#define __NR_sched_get_priority_min 1166 +#define __NR_sched_rr_get_interval 1167 +#define __NR_nanosleep 1168 +#define __NR_nfsservctl 1169 +#define __NR_prctl 1170 +#define __NR_mmap2 1172 +#define __NR_pciconfig_read 1173 +#define __NR_pciconfig_write 1174 +#define __NR_perfmonctl 1175 +#define __NR_sigaltstack 1176 +#define __NR_rt_sigaction 1177 +#define __NR_rt_sigpending 1178 +#define __NR_rt_sigprocmask 1179 +#define __NR_rt_sigqueueinfo 1180 +#define __NR_rt_sigreturn 1181 +#define __NR_rt_sigsuspend 1182 +#define __NR_rt_sigtimedwait 1183 +#define __NR_getcwd 1184 +#define __NR_capget 1185 +#define __NR_capset 1186 +#define __NR_sendfile 1187 +#define __NR_getpmsg 1188 +#define __NR_putpmsg 1189 +#define __NR_socket 1190 +#define __NR_bind 1191 +#define __NR_connect 1192 +#define __NR_listen 1193 +#define __NR_accept 1194 +#define __NR_getsockname 1195 +#define __NR_getpeername 1196 +#define __NR_socketpair 1197 +#define __NR_send 1198 +#define __NR_sendto 1199 +#define __NR_recv 1200 +#define __NR_recvfrom 1201 +#define __NR_shutdown 1202 +#define __NR_setsockopt 1203 +#define __NR_getsockopt 1204 +#define __NR_sendmsg 1205 +#define __NR_recvmsg 1206 +#define __NR_pivot_root 1207 +#define __NR_mincore 1208 +#define __NR_madvise 1209 +#define __NR_stat 1210 +#define __NR_lstat 1211 +#define __NR_fstat 1212 +#define __NR_clone2 1213 +#define __NR_getdents64 1214 +#define __NR_getunwind 1215 +#define __NR_readahead 1216 +#define __NR_setxattr 1217 +#define __NR_lsetxattr 1218 +#define __NR_fsetxattr 1219 +#define __NR_getxattr 1220 +#define __NR_lgetxattr 1221 +#define __NR_fgetxattr 1222 +#define __NR_listxattr 1223 +#define __NR_llistxattr 1224 +#define __NR_flistxattr 1225 +#define __NR_removexattr 1226 +#define __NR_lremovexattr 1227 +#define __NR_fremovexattr 1228 +#define __NR_tkill 1229 +#define __NR_futex 1230 +#define __NR_sched_setaffinity 1231 +#define __NR_sched_getaffinity 1232 +#define __NR_security 1233 +#define __NR_alloc_hugepages 1234 +#define __NR_free_hugepages 1235 +#define __NR_exit_group 1236 +#define __NR_lookup_dcookie 1237 +#define __NR_io_setup 1238 +#define __NR_io_destroy 1239 +#define __NR_io_getevents 1240 +#define __NR_io_submit 1241 +#define __NR_io_cancel 1242 +#define __NR_epoll_create 1243 +#define __NR_epoll_ctl 1244 +#define __NR_epoll_wait 1245 + +#define syscall(name, sym) \ +.text; \ +.globl sym; \ +sym: \ + mov r15 = __NR_##name; \ + br __unified_syscall; + +#define syscall_weak(name, sym, wsym) \ +.text; \ +.weak wsym; \ +wsym: \ +.globl sym; \ +sym: \ + mov r15 = __NR_##name; \ + br __unified_syscall; + +#endif diff --git a/mdk-stage1/dietlibc/ia64/unified.S b/mdk-stage1/dietlibc/ia64/unified.S new file mode 100644 index 000000000..998fba75e --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/unified.S @@ -0,0 +1,46 @@ +/* + Copyright (C) 2002 Thomas M. Ogrisegg + + This is free software. You can redistribute and + modify it under the terms of the GNU General Public + Public License. + + This file is part of the ia64-Port of dietlibc + + unified.S + General system-call interface +*/ + +.lsb + +.text + +.globl __unified_syscall +.proc __unified_syscall +.globl __error_unified_syscall +.proc __error_unified_syscall +.globl _exit +.proc _exit + +_exit: + mov r15 = 1025 +.endp _exit +.size _exit, . - _exit + +__unified_syscall: + break.i 0x100000 + movl r2=errno + cmp.eq p6,p0=-1,r10 + ;; +__error_unified_syscall: +(p6) st4 [r2]=r8 +(p6) mov r8=-1 + +#include "dietuglyweaks.h" + + br.ret.sptk.few rp + +.endp __unified_syscall +.endp __error_unified_syscall +.size __unified_syscall, __error_unified_syscall - __unified_syscall +.size __error_unified_syscall, . - __error_unified_syscall diff --git a/mdk-stage1/dietlibc/ia64/utime.S b/mdk-stage1/dietlibc/ia64/utime.S new file mode 100644 index 000000000..a9a8aada6 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/utime.S @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall(utimes,utime) diff --git a/mdk-stage1/dietlibc/ia64/vfork.S b/mdk-stage1/dietlibc/ia64/vfork.S new file mode 100644 index 000000000..e59f04364 --- /dev/null +++ b/mdk-stage1/dietlibc/ia64/vfork.S @@ -0,0 +1,8 @@ +#include "syscalls.h" + +.text +.globl vfork +vfork: + mov r15 = __NR_clone + mov r32 = 16657 + br __unified_syscall -- cgit v1.2.1