From 8aaf02b5663f7669d192ffddf56b776f1b8092ef Mon Sep 17 00:00:00 2001 From: Andreas Jaeger Date: Wed, 6 Jun 2001 11:57:49 +0000 Subject: HPPA setjmp implementation. --- sysdeps/unix/sysv/linux/hppa/getrlimit.c | 1 - sysdeps/unix/sysv/linux/hppa/setrlimit.c | 1 - sysdeps/unix/sysv/linux/hppa/syscall.S | 13 ++----------- sysdeps/unix/sysv/linux/hppa/syscalls.list | 2 ++ sysdeps/unix/sysv/linux/hppa/sysdep.c | 27 ++++++++++++++++++++++++++- 5 files changed, 30 insertions(+), 14 deletions(-) delete mode 100644 sysdeps/unix/sysv/linux/hppa/getrlimit.c delete mode 100644 sysdeps/unix/sysv/linux/hppa/setrlimit.c (limited to 'sysdeps/unix/sysv/linux/hppa') diff --git a/sysdeps/unix/sysv/linux/hppa/getrlimit.c b/sysdeps/unix/sysv/linux/hppa/getrlimit.c deleted file mode 100644 index fc06dbd641..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/getrlimit.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/hppa/setrlimit.c b/sysdeps/unix/sysv/linux/hppa/setrlimit.c deleted file mode 100644 index bfaef74c38..0000000000 --- a/sysdeps/unix/sysv/linux/hppa/setrlimit.c +++ /dev/null @@ -1 +0,0 @@ -#include diff --git a/sysdeps/unix/sysv/linux/hppa/syscall.S b/sysdeps/unix/sysv/linux/hppa/syscall.S index 413c572c34..96b5b922b2 100644 --- a/sysdeps/unix/sysv/linux/hppa/syscall.S +++ b/sysdeps/unix/sysv/linux/hppa/syscall.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1998, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -16,13 +16,4 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include - -/* Please consult the file sysdeps/unix/sysv/linux/i386/sysdep.h for - more information about the value -4095 used below.*/ - - .text -ENTRY (syscall) - b . - nop - +/* HPPA implements syscall() in 'C'; see sysdep.c. */ diff --git a/sysdeps/unix/sysv/linux/hppa/syscalls.list b/sysdeps/unix/sysv/linux/hppa/syscalls.list index 6d7cd6a23f..ed9f1a3982 100644 --- a/sysdeps/unix/sysv/linux/hppa/syscalls.list +++ b/sysdeps/unix/sysv/linux/hppa/syscalls.list @@ -35,3 +35,5 @@ socketpair - socketpair i:iiif __socketpair socketpair getresuid - getresuid i:ppp getresuid getresgid - getresgid i:ppp getresgid +setrlimit - setrlimit i:ip __setrlimit setrlimit +getrlimit - getrlimit i:ip __getrlimit getrlimit diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep.c b/sysdeps/unix/sysv/linux/hppa/sysdep.c index 0559cc7065..e185da5f34 100644 --- a/sysdeps/unix/sysv/linux/hppa/sysdep.c +++ b/sysdeps/unix/sysv/linux/hppa/sysdep.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -32,3 +32,28 @@ __syscall_error (int err_no) #undef errno int errno = 0; weak_alias (errno, _errno) + + +/* HPPA implements syscall() in 'C'; the assembler version would + typically be in syscall.S. */ + +int +syscall (int sysnum, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5) +{ + long __sys_res; + { + register unsigned long __res asm("r28"); + LOAD_ARGS_6(arg0, arg1, arg2, arg3, arg4, arg5) + asm volatile ("ble 0x100(%%sr2, %%r0)\n\t" + "copy %1, %%r20" + : "=r" (__res) + : "r" (sysnum) ASM_ARGS_6); + __sys_res = __res; + } + if ((unsigned long) __sys_res >= (unsigned long)-4095) + { + __set_errno(-__sys_res); + __sys_res = -1; + } + return __sys_res; +} -- cgit 1.4.1