Define PSEUDO_NOERRNO, PSEUDO_END_NOERRNO, and ret_NOERRNO.
authordrepper <drepper>
Sun, 23 Mar 2003 19:42:22 +0000 (19:42 +0000)
committerdrepper <drepper>
Sun, 23 Mar 2003 19:42:22 +0000 (19:42 +0000)
16 files changed:
sysdeps/powerpc/powerpc32/sysdep.h
sysdeps/powerpc/powerpc64/sysdep.h
sysdeps/unix/alpha/sysdep.h
sysdeps/unix/sparc/sysdep.h
sysdeps/unix/sysdep.h
sysdeps/unix/sysv/linux/arm/sysdep.h
sysdeps/unix/sysv/linux/cris/sysdep.h
sysdeps/unix/sysv/linux/hppa/sysdep.h
sysdeps/unix/sysv/linux/i386/sysdep.h
sysdeps/unix/sysv/linux/ia64/sysdep.h
sysdeps/unix/sysv/linux/m68k/sysdep.h
sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h
sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h
sysdeps/unix/sysv/linux/sh/sysdep.h
sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h
sysdeps/unix/sysv/linux/x86_64/sysdep.h

index bc201a8..338c69a 100644 (file)
 #define        PSEUDO_END(name)                                                      \
   END (name)
 
+#define PSEUDO_NOERRNO(name, syscall_name, args)                             \
+  .section ".text";                                                          \
+  ENTRY (name)                                                               \
+    DO_CALL (SYS_ify (syscall_name));
+
+#define PSEUDO_RET_NOERRNO                                                   \
+    blr
+#define ret_NOERRNO PSEUDO_RET_NOERRNO
+
+#undef PSEUDO_END_NOERRNO
+#define        PSEUDO_END_NOERRNO(name)                                              \
+  END (name)
+
 /* Local labels stripped out by the linker.  */
 #undef L
 #define L(x) .L##x
index 9b895df..34c9caa 100644 (file)
@@ -225,6 +225,20 @@ LT_LABELSUFFIX(name,_name_end): ; \
 #define        PSEUDO_END(name) \
   END (name)
 
+#define PSEUDO_NOERRNO(name, syscall_name, args) \
+  .section ".text";    \
+  ENTRY (name) \
+  DO_CALL (SYS_ify (syscall_name));
+
+#define PSEUDO_RET_NOERRNO \
+    blr
+
+#define ret_NOERRNO PSEUDO_RET_NOERRNO
+
+#undef PSEUDO_END_NOERRNO
+#define        PSEUDO_END_NOERRO(name) \
+  END (name)
+
 /* Label in text section.  */
 /* ppc64 function descriptors which requires . notation */
 #define C_TEXT(name) .##name
index cb04cec..6e55061 100644 (file)
@@ -119,6 +119,21 @@ $syscall_error:                                    \
        END(sym)
 #endif
 
+#define PSEUDO_NOERRNO(name, syscall_name, args)       \
+       .globl name;                                    \
+       .align 4;                                       \
+       .ent name,0;                                    \
+__LABEL(name)                                          \
+       PSEUDO_PROLOGUE;                                \
+       PSEUDO_PREPARE_ARGS                             \
+       lda     v0, SYS_ify(syscall_name);              \
+       call_pal PAL_callsys;
+
+#undef PSEUDO_END_NOERRNO
+#define PSEUDO_END_NOERRNO(sym)  END(sym)
+
+#define ret_NOERRNO ret
+
 #define r0     v0
 #define r1     a4
 
@@ -167,8 +182,8 @@ $syscall_error:                                     \
 /* If TLS is in use, we have a conflict between the PAL_rduniq primitive,
    as modeled within GCC, and explicit use of the R0 register.  If we use
    the register via the asm, the scheduler may place the PAL_rduniq insn
-   before we've copied the data from R0 into _sc_ret.  If this happens 
-   we'll get a reload abort, since R0 is live at the same time it is 
+   before we've copied the data from R0 into _sc_ret.  If this happens
+   we'll get a reload abort, since R0 is live at the same time it is
    needed for the PAL_rduniq.
 
    Solve this by using the "v" constraint instead of an asm for the syscall
index e103ba3..3f6a92a 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1994, 1995, 1997, 2003 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
   jmp %g1 + %lo(syscall_error);        nop;            \
 1:
 
+#define        PSEUDO_NOERRNO(name, syscall_name, args) \
+  .global syscall_error;                       \
+  ENTRY (name)                                 \
+  mov SYS_ify(syscall_name), %g1;              \
+  ta 0
+
 #define        ret             retl; nop
+#define        ret_NOERRNO     retl; nop
 #define        r0              %o0
 #define        r1              %o1
 #define        MOVE(x,y)       mov x, y
index 616a9b5..c19e98a 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 92, 93, 96, 98 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 93, 96, 98, 2003 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
@@ -47,6 +47,9 @@
 #ifndef PSEUDO_END
 #define PSEUDO_END(sym)
 #endif
+#ifndef PSEUDO_END_NOENTRY
+#define PSEUDO_END_NOENTRY(sym)
+#endif
 
 /* Wrappers around system calls should normally inline the system call code.
    But sometimes it is not possible or implemented and we use this code.  */
index 785d3cf..3e3c874 100644 (file)
   SYSCALL_ERROR_HANDLER                                                              \
   END (name)
 
+#undef PSEUDO_NOERRNO
+#define        PSEUDO_NOERRNO(name, syscall_name, args)                              \
+  .text;                                                                     \
+  ENTRY (name);                                                                      \
+    DO_CALL (syscall_name, args);
+
+#define PSEUDO_RET_NOERRNO                                                   \
+    RETINSTR(movcc, pc, lr);                                                 \
+    nop
+#undef ret_NOERRNO
+#define ret_NOERRNO PSEUDO_RET_NOERRNO
+
+#undef PSEUDO_END_NOERRNO
+#define        PSEUDO_END_NOERRNO(name)                                              \
+  END (name)
+
 #if NOT_IN_libc
 # define SYSCALL_ERROR __local_syscall_error
 # define SYSCALL_ERROR_HANDLER                                 \
index 4446b26..f22a3d2 100644 (file)
@@ -1,5 +1,5 @@
 /* Assembler macros for CRIS.
-   Copyright (C) 1999, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2001, 2003 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
   PLTJUMP (syscall_error)                              @ \
   END (name)
 
+#define        PSEUDO_NOERRNO(name, syscall_name, args) \
+  ENTRY        (name)                                          @ \
+  DOARGS_##args                                                @ \
+  movu.w SYS_ify (syscall_name),$r9                    @ \
+  break        13                                              @ \
+  UNDOARGS_return_##args
+
+#define ret_NOERRNO
+
+#define        PSEUDO_END_NOERRNO(name) \
+  END (name)
+
 #define DOARGS_0
 #define DOARGS_1
 #define DOARGS_2
index 4f08cc6..771c55c 100644 (file)
@@ -1,5 +1,5 @@
 /* Assembler macros for PA-RISC.
-   Copyright (C) 1999,2001,02 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper, <drepper@cygnus.com>, August 1999.
    Linux/PA-RISC changes by Philipp Rumpf, <prumpf@tux.org>, March 2000.
        bv 0(2)                                 ASM_LINE_SEP    \
        nop
 
+#define ret_NOERRNO \
+       bv 0(2)                                 ASM_LINE_SEP    \
+       nop
+
 #undef END
 #define END(name)                                              \
 1:     .size   C_SYMBOL_NAME(name),1b-C_SYMBOL_NAME(name)
 #define        PSEUDO_END(name)                                                      \
   END (name)
 
+#define        PSEUDO_NOERRNO(name, syscall_name, args)                              \
+  ENTRY (name)                                                               \
+  DO_CALL(syscall_name, args)                                  ASM_LINE_SEP  \
+  nop
+
+#undef PSEUDO_END_NOERRNO
+#define        PSEUDO_END_NOERRNO(name)                                              \
+  END (name)
+
 #define JUMPTARGET(name)       name
 #define SYSCALL_PIC_SETUP      /* Nothing.  */
 
index 02a78d3..2e660c3 100644 (file)
   SYSCALL_ERROR_HANDLER                                                              \
   END (name)
 
+#undef PSEUDO_NOERRNO
+#define        PSEUDO_NOERRNO(name, syscall_name, args)                              \
+  .text;                                                                     \
+  ENTRY (name)                                                               \
+    DO_CALL (syscall_name, args)
+
+#undef PSEUDO_END_NOERRNO
+#define        PSEUDO_END_NOERRNO(name)                                              \
+  END (name)
+
+#define ret_NOERRNO ret
+
 #ifndef PIC
 # define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used.  */
 #else
index 556e266..3065782 100644 (file)
 #undef PSEUDO_END
 #define PSEUDO_END(name)       .endp C_SYMBOL_NAME(name);
 
+#undef PSEUDO_NOERRNO
+#define        PSEUDO_NOERRNO(name, syscall_name, args)        \
+  ENTRY(name)                                          \
+    DO_CALL (SYS_ify(syscall_name));
+
+#undef PSEUDO_END_NOERRNO
+#define PSEUDO_END_NOERRNO(name)       .endp C_SYMBOL_NAME(name);
+
 #undef END
 #define END(name)                                              \
        .size   C_SYMBOL_NAME(name), . - C_SYMBOL_NAME(name) ;  \
        .endp   C_SYMBOL_NAME(name)
 
 #define ret                    br.ret.sptk.few b0
+#define ret_NOERRNO            br.ret.sptk.few b0
 
 #else /* not __ASSEMBLER__ */
 
index 125c584..23e4202 100644 (file)
   SYSCALL_ERROR_HANDLER;                                                     \
   END (name)
 
+#undef PSEUDO_NOERRNO
+#define        PSEUDO_NOERRNO(name, syscall_name, args)                              \
+  .text;                                                                     \
+  ENTRY (name)                                                               \
+    DO_CALL (syscall_name, args)
+
+#undef PSEUDO_END_NOERRNO
+#define PSEUDO_END_NOERRNO(name)                                             \
+  END (name)
+
 #ifdef PIC
 # if RTLD_PRIVATE_ERRNO
 #  define SYSCALL_ERROR_HANDLER                                                      \
index af8515b..8a98fbf 100644 (file)
   SYSCALL_ERROR_HANDLER;                                                     \
   END (name)
 
+#undef PSEUDO
+#define        PSEUDO_NOERRNO(name, syscall_name, args)                              \
+  .text;                                                                      \
+  ENTRY (name)                                                               \
+    DO_CALL (syscall_name, args)
+
+#undef PSEUDO_END_NOERRNO
+#define PSEUDO_END_NOERRNO(name)                                             \
+  END (name)
+
 #ifndef PIC
 # define SYSCALL_ERROR_LABEL 0f
 # define SYSCALL_ERROR_HANDLER \
 #define ret                                                                   \
     br      14
 
+#define ret_NOERRNO                                                          \
+    br      14
+
 #endif /* __ASSEMBLER__ */
 
 #undef INLINE_SYSCALL
index f5a074f..41ec395 100644 (file)
@@ -1,5 +1,5 @@
 /* Assembler macros for 64 bit S/390.
-   Copyright (C) 2001,02 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
    This file is part of the GNU C Library.
 
   SYSCALL_ERROR_HANDLER;                                                     \
   END (name)
 
+#undef PSEUDO_NOERRNO
+#define        PSEUDO_NOERRNO(name, syscall_name, args)                              \
+  .text;                                                                     \
+  ENTRY (name)                                                               \
+    DO_CALL (syscall_name, args)
+
+#undef PSEUDO_END_NOERRNO
+#define PSEUDO_END_NOERRNO(name)                                             \
+  SYSCALL_ERROR_HANDLER;                                                     \
+  END (name)
+
 #ifndef PIC
 # define SYSCALL_ERROR_LABEL syscall_error
 # define SYSCALL_ERROR_HANDLER
 #define ret                                                                  \
     br     14
 
+#define ret_NOERRNO                                                          \
+    br     14
+
 #endif /* __ASSEMBLER__ */
 
 #undef INLINE_SYSCALL
index ea1cffb..a2542fb 100644 (file)
 #define        PSEUDO_END(name) \
   END (name)
 
+#undef PSEUDO_NOERRNO
+#define        PSEUDO_NOERRNO(name, syscall_name, args) \
+ .text; \
+ ENTRY (name); \
+    DO_CALL (syscall_name, args)
+
+#undef PSEUDO_END_NOERRNO
+#define        PSEUDO_END_NOERRNO(name) \
+  END (name)
+
+#define ret_NOERRNO ret
+
 #ifndef PIC
 # define SYSCALL_ERROR_HANDLER \
        mov.l 0f,r1; \
index 7bf63b9..bc54b10 100644 (file)
@@ -35,6 +35,7 @@
 
 /* Linux/SPARC uses a different trap number */
 #undef PSEUDO
+#undef PSEUDO_NOERRNO
 #undef ENTRY
 #undef END
 #undef LOC
@@ -108,6 +109,12 @@ SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler)                       \
         nop;                                                   \
        SYSCALL_ERROR_HANDLER
 
+#define PSEUDO_NOERRNO(name, syscall_name, args)               \
+       .text;                                                  \
+       ENTRY(name);                                            \
+       LOADSYSCALL(syscall_name);                              \
+       ta 0x10
+
 #else  /* __ASSEMBLER__ */
 
 #define __SYSCALL_STRING                                               \
index c85c063..0edbe66 100644 (file)
   SYSCALL_ERROR_HANDLER                                                              \
   END (name)
 
+#undef PSEUDO_NOERRNO
+#define        PSEUDO_NOERRNO(name, syscall_name, args) \
+  .text;                                                                     \
+  ENTRY (name)                                                               \
+    DO_CALL (syscall_name, args)
+
+#undef PSEUDO_END_NOERRNO
+#define        PSEUDO_END_NOERRNO(name) \
+  END (name)
+
+#define ret_NOERRNO ret
+
 #ifndef PIC
 #define SYSCALL_ERROR_HANDLER  /* Nothing here; code in sysdep.S is used.  */
 #elif RTLD_PRIVATE_ERRNO
     called the stack is not aligned since the return address has just
     been pushed.
 
-     
+
     Syscalls of more than 6 arguments are not supported.  */
 
 #undef DO_CALL