From 4bec453640d6ed6e9cd066347bc8199fb9dea28e Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Wed, 10 Jun 1998 01:37:21 +0000 Subject: [PATCH] * 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. --- ChangeLog | 8 ++++++++ sysdeps/unix/sysv/linux/m68k/clone.S | 8 ++++---- sysdeps/unix/sysv/linux/m68k/mmap.S | 4 ++-- sysdeps/unix/sysv/linux/m68k/socket.S | 4 ++-- sysdeps/unix/sysv/linux/m68k/syscall.S | 4 ++-- sysdeps/unix/sysv/linux/m68k/sysdep.h | 17 +++++++++++++---- 6 files changed, 31 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7a105c6..1b4aadb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,14 @@ Wed Jun 10 10:32:11 1998 Andreas Schwab * math/Makefile (libm-calls): Add w_exp10 and e_exp10. 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); \ -- 2.7.4