Package: dietlibc-dev Version: 0.29-9 Followup-For: Bug #351875 The attached patch fixes the llseek (5 args) and the sendto/recvfrom (6 args) issue on hppa by using a syscall5/syscall6 wrapper to handle things with more than 4 arguments.
This patch can replace the debian/diff/parisc-sendto-recvfrom.diff that currently exists, as this fixes things in a better way. Herbert Poetzl is to be given kudos for coming up with this. Micah -- System Information: Debian Release: testing/unstable APT prefers unstable APT policy: (500, 'unstable') Architecture: i386 (i686) Shell: /bin/sh linked to /bin/bash Kernel: Linux 2.6.15+vserver Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) dietlibc-dev depends on no packages. Versions of packages dietlibc-dev recommends: pn dietlibc <none> (no description available) -- no debconf information
diff -NurpP -x '*.o' -x '*.orig' parisc/_llseek.S parisc/_llseek.S --- parisc/_llseek.S 1970-01-01 01:00:00.000000000 +0100 +++ parisc/_llseek.S 2006-03-26 03:55:09.000000000 +0200 @@ -0,0 +1,3 @@ +#include "syscalls.h" + +syscall5(llseek, llseek); diff -NurpP -x '*.o' -x '*.orig' parisc/recvfrom.S parisc/recvfrom.S --- parisc/recvfrom.S 2002-07-03 22:33:38.000000000 +0200 +++ parisc/recvfrom.S 2006-03-26 03:15:15.000000000 +0200 @@ -1,3 +1,3 @@ #include "syscalls.h" -syscall(recvfrom, recvfrom); +syscall6(recvfrom, recvfrom); diff -NurpP -x '*.o' -x '*.orig' parisc/sendto.S parisc/sendto.S --- parisc/sendto.S 2002-07-03 22:33:38.000000000 +0200 +++ parisc/sendto.S 2006-03-26 03:15:15.000000000 +0200 @@ -1,3 +1,3 @@ #include "syscalls.h" -syscall(sendto, sendto); +syscall6(sendto, sendto); diff -NurpP -x '*.o' -x '*.orig' parisc/syscalls.h parisc/syscalls.h --- parisc/syscalls.h 2005-03-23 20:05:25.000000000 +0100 +++ parisc/syscalls.h 2006-03-26 03:37:15.000000000 +0200 @@ -153,7 +153,7 @@ #define __NR_afs_syscall (__NR_Linux + 137) /* Syscall for Andrew File System */ #define __NR_setfsuid (__NR_Linux + 138) #define __NR_setfsgid (__NR_Linux + 139) -#define __NR__llseek (__NR_Linux + 140) +#define __NR_llseek (__NR_Linux + 140) #define __NR_getdents (__NR_Linux + 141) #define __NR_select (__NR_Linux + 142) #define __NR__newselect (__NR_Linux + 142) @@ -282,7 +282,7 @@ #define LINUX_GATEWAY_ADDR 0x100 -#define syscall_weak(name, sym, wsym) \ +#define syscall_weak(name, sym, wsym) \ .text! \ .type wsym, @function! \ .weak wsym! \ @@ -293,11 +293,16 @@ sym: \ b __unified_syscall! \ ldi __NR_##name, %r20! \ -#define syscall(name, sym) \ +#define __syscall(name, sym, imp) \ .text! \ .type sym,@function! \ .globl sym! \ .export sym! \ sym: \ - b __unified_syscall! \ + b imp! \ ldi __NR_##name, %r20! + +#define syscall(name, sym) __syscall(name, sym, __unified_syscall) +#define syscall5(name, sym) __syscall(name, sym, __unified_syscall5) +#define syscall6(name, sym) __syscall(name, sym, __unified_syscall6) + diff -NurpP -x '*.o' -x '*.orig' parisc/unified.S parisc/unified.S --- parisc/unified.S 2002-01-31 13:53:45.000000000 +0100 +++ parisc/unified.S 2006-03-26 04:43:08.000000000 +0200 @@ -21,14 +21,30 @@ .global __unified_syscall .type __unified_syscall,@function +.export __unified_syscall5 +.global __unified_syscall5 +.type __unified_syscall5,@function + +.export __unified_syscall6 +.global __unified_syscall6 +.type __unified_syscall6,@function + .export __error_unified_syscall .global __error_unified_syscall + .globl _exit .weak exit _exit: exit: ldi 1, %r20 + b __unified_syscall + nop + +__unified_syscall6: + ldw -0x38(%sr0, %sp), %r21 +__unified_syscall5: + ldw -0x34(%sr0, %sp), %r22 __unified_syscall: be,l 0x100(%sr2, %r0), %sr0, %r31 nop