This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Make syscall() work on hppa


2001-05-01  Richard Hirst  <rhirst@linuxcare.com>

	* sysdeps/unix/sysv/linux/hppa/syscall.S: remove dummy syscall.
	* sysdeps/unix/sysv/linux/hppa/sysdep.c: implement syscall.

diff -urNx CVS glibc-223/sysdeps/unix/sysv/linux/hppa/syscall.S glibc-merge/sysdeps/unix/sysv/linux/hppa/syscall.S
--- glibc-223/sysdeps/unix/sysv/linux/hppa/syscall.S	Thu Nov 16 13:00:55 2000
+++ glibc-merge/sysdeps/unix/sysv/linux/hppa/syscall.S	Wed May  2 17:48:50 2001
@@ -21,8 +21,5 @@
 /* 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 -urNx CVS glibc-223/sysdeps/unix/sysv/linux/hppa/sysdep.c glibc-merge/sysdeps/unix/sysv/linux/hppa/sysdep.c
--- glibc-223/sysdeps/unix/sysv/linux/hppa/sysdep.c	Thu Nov 16 13:00:55 2000
+++ glibc-merge/sysdeps/unix/sysv/linux/hppa/sysdep.c	Wed May  2 17:48:50 2001
@@ -32,3 +32,28 @@
 #undef errno
 int errno = 0;
 weak_alias (errno, _errno)
+
+/* hppa implements syscall() in 'C'; 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;
+}
+


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]