aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix/sysv/linux/hppa/sysdep.c
diff options
context:
space:
mode:
authorAndreas Jaeger <aj@suse.de>2001-06-06 11:57:49 +0000
committerAndreas Jaeger <aj@suse.de>2001-06-06 11:57:49 +0000
commit8aaf02b5663f7669d192ffddf56b776f1b8092ef (patch)
treeb08f28f41251b73cf263732a4605bc40f9d388a6 /sysdeps/unix/sysv/linux/hppa/sysdep.c
parenta18f73be580ea822075b931f8f4d368b368d0e06 (diff)
downloadglibc-8aaf02b5663f7669d192ffddf56b776f1b8092ef.tar
glibc-8aaf02b5663f7669d192ffddf56b776f1b8092ef.tar.gz
glibc-8aaf02b5663f7669d192ffddf56b776f1b8092ef.tar.bz2
glibc-8aaf02b5663f7669d192ffddf56b776f1b8092ef.zip
HPPA setjmp implementation.
Diffstat (limited to 'sysdeps/unix/sysv/linux/hppa/sysdep.c')
-rw-r--r--sysdeps/unix/sysv/linux/hppa/sysdep.c27
1 files changed, 26 insertions, 1 deletions
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;
+}