aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/unix
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@suse.de>1998-06-10 01:37:21 +0000
committerAndreas Schwab <schwab@suse.de>1998-06-10 01:37:21 +0000
commit4bec453640d6ed6e9cd066347bc8199fb9dea28e (patch)
treea39c20aefe8c5195f43c1403d2556a749ed019a4 /sysdeps/unix
parent9e2c0dae9be993530623d0088b95f1278b2686c0 (diff)
downloadglibc-4bec453640d6ed6e9cd066347bc8199fb9dea28e.zip
glibc-4bec453640d6ed6e9cd066347bc8199fb9dea28e.tar.gz
glibc-4bec453640d6ed6e9cd066347bc8199fb9dea28e.tar.bz2
* sysdeps/unix/sysv/linux/m68k/sysdep.h (SYSCALL_ERROR_LABEL): New
definition. (PSEUDO, SYSCALL_ERROR_HANDLER): Use it instead of syscall_error. * sysdeps/unix/sysv/linux/m68k/clone.S: Likewise. * sysdeps/unix/sysv/linux/m68k/mmap.S: Likewise. * sysdeps/unix/sysv/linux/m68k/socket.S: Likewise. * sysdeps/unix/sysv/linux/m68k/syscall.S: Likewise. * sysdeps/unix/sysv/linux/m68k/sysdep.h (SYSCALL_ERROR_LABEL): New definition. (PSEUDO, SYSCALL_ERROR_HANDLER): Use it instead of syscall_error. * sysdeps/unix/sysv/linux/m68k/clone.S: Likewise. * sysdeps/unix/sysv/linux/m68k/mmap.S: Likewise. * sysdeps/unix/sysv/linux/m68k/socket.S: Likewise. * sysdeps/unix/sysv/linux/m68k/syscall.S: Likewise.
Diffstat (limited to 'sysdeps/unix')
-rw-r--r--sysdeps/unix/sysv/linux/m68k/clone.S8
-rw-r--r--sysdeps/unix/sysv/linux/m68k/mmap.S4
-rw-r--r--sysdeps/unix/sysv/linux/m68k/socket.S4
-rw-r--r--sysdeps/unix/sysv/linux/m68k/syscall.S4
-rw-r--r--sysdeps/unix/sysv/linux/m68k/sysdep.h17
5 files changed, 23 insertions, 14 deletions
diff --git a/sysdeps/unix/sysv/linux/m68k/clone.S b/sysdeps/unix/sysv/linux/m68k/clone.S
index d553ab7..622f811 100644
--- a/sysdeps/unix/sysv/linux/m68k/clone.S
+++ b/sysdeps/unix/sysv/linux/m68k/clone.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
Contributed by Andreas Schwab (schwab@issan.informatik.uni-dortmund.de)
The GNU C Library is free software; you can redistribute it and/or
@@ -32,10 +32,10 @@ ENTRY (__clone)
movel #-EINVAL, %d0
movel 4(%sp), %a0 /* no NULL function pointers */
tstl %a0
- jeq syscall_error
+ jeq SYSCALL_ERROR_LABEL
movel 8(%sp), %a1 /* no NULL stack pointers */
tstl %a1
- jeq syscall_error
+ jeq SYSCALL_ERROR_LABEL
/* Allocate space and copy the argument onto the new stack. */
movel 16(%sp), -(%a1)
@@ -48,7 +48,7 @@ ENTRY (__clone)
exg %d2, %a1 /* restore %d2 */
tstl %d0
- jmi syscall_error
+ jmi SYSCALL_ERROR_LABEL
jeq thread_start
rts
diff --git a/sysdeps/unix/sysv/linux/m68k/mmap.S b/sysdeps/unix/sysv/linux/m68k/mmap.S
index 9563204..9457831 100644
--- a/sysdeps/unix/sysv/linux/m68k/mmap.S
+++ b/sysdeps/unix/sysv/linux/m68k/mmap.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 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,7 +32,7 @@ ENTRY (__mmap)
/* Kludge: negative numbers are among the legal return values.
If %d0 is between -4096 and 0 then there was an error. */
cmp.l #-4096, %d0
- jhi syscall_error
+ jhi SYSCALL_ERROR_LABEL
/* Successful; return the syscall's value. Copy it to %a0 because
mmap is declared to return a pointer. */
diff --git a/sysdeps/unix/sysv/linux/m68k/socket.S b/sysdeps/unix/sysv/linux/m68k/socket.S
index 81e5a21..f25a55b 100644
--- a/sysdeps/unix/sysv/linux/m68k/socket.S
+++ b/sysdeps/unix/sysv/linux/m68k/socket.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 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
@@ -56,7 +56,7 @@ ENTRY (__socket)
/* %d0 is < 0 if there was an error. */
tst.l %d0
- jmi syscall_error
+ jmi SYSCALL_ERROR_LABEL
/* Successful; return the syscall's value. */
rts
diff --git a/sysdeps/unix/sysv/linux/m68k/syscall.S b/sysdeps/unix/sysv/linux/m68k/syscall.S
index f392b75..f34c076 100644
--- a/sysdeps/unix/sysv/linux/m68k/syscall.S
+++ b/sysdeps/unix/sysv/linux/m68k/syscall.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1998 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
@@ -28,6 +28,6 @@ ENTRY (syscall)
trap &0 /* Do the system call. */
UNDOARGS_5 /* Unfrob arguments. */
cmp.l &-4095, %d0 /* Check %d0 for error. */
- jcc syscall_error /* Jump to error handler if negative. */
+ jcc SYSCALL_ERROR_LABEL /* Jump to error handler if negative. */
rts /* Return to caller. */
PSEUDO_END (syscall)
diff --git a/sysdeps/unix/sysv/linux/m68k/sysdep.h b/sysdeps/unix/sysv/linux/m68k/sysdep.h
index 8fdd26f..4094172 100644
--- a/sysdeps/unix/sysv/linux/m68k/sysdep.h
+++ b/sysdeps/unix/sysv/linux/m68k/sysdep.h
@@ -43,13 +43,22 @@
for a real error by making sure the value in %d0 is a real error
number. Linus said he will make sure the no syscall returns a value
in -1 .. -4095 as a valid result so we can savely test with -4095. */
+
+/* We don't want the label for the error handler to be visible in the symbol
+ table when we define it here. */
+#ifdef PIC
+#define SYSCALL_ERROR_LABEL .Lsyscall_error
+#else
+#define SYSCALL_ERROR_LABEL __syscall_error
+#endif
+
#undef PSEUDO
#define PSEUDO(name, syscall_name, args) \
.text; \
ENTRY (name) \
DO_CALL (syscall_name, args); \
cmp.l &-4095, %d0; \
- jcc syscall_error
+ jcc SYSCALL_ERROR_LABEL
#undef PSEUDO_END
#define PSEUDO_END(name) \
@@ -60,7 +69,7 @@
/* Store (- %d0) into errno through the GOT. */
#ifdef _LIBC_REENTRANT
#define SYSCALL_ERROR_HANDLER \
-syscall_error: \
+SYSCALL_ERROR_LABEL: \
neg.l %d0; \
move.l %d0, -(%sp); \
jbsr __errno_location@PLTPC; \
@@ -70,9 +79,9 @@ syscall_error: \
a pointer (e.g., mmap). */ \
move.l %d0, %a0; \
rts;
-#else
+#else /* !_LIBC_REENTRANT */
#define SYSCALL_ERROR_HANDLER \
-syscall_error: \
+SYSCALL_ERROR_LABEL: \
move.l (errno@GOTPC, %pc), %a0; \
neg.l %d0; \
move.l %d0, (%a0); \