OSDN Git Service

mips/syscall-error: Choose the correct version for setting up errno.
authorKhem Raj <raj.khem@gmail.com>
Wed, 30 Jun 2010 11:10:37 +0000 (04:10 -0700)
committerKhem Raj <raj.khem@gmail.com>
Wed, 30 Jun 2010 11:10:37 +0000 (04:10 -0700)
* Current function is a C protype and PSEUDO macro does not
  transfer syscall return parameters to correct argument registers
  for a C function. This causes problem with syscalls setting wrong
  value for errno when they encounter an error.

* Fixes PR/2089 for mips/nptl

Signed-off-by: Khem Raj <raj.khem@gmail.com>
libc/sysdeps/linux/mips/Makefile.arch
libc/sysdeps/linux/mips/syscall_error.S
libpthread/nptl/sysdeps/mips/Makefile.arch

index e8925e4..8bbc0bc 100644 (file)
@@ -6,11 +6,11 @@
 #
 
 CSRC := \
-       __longjmp.c  brk.c setjmp_aux.c mmap.c __syscall_error.c \
+       __longjmp.c  brk.c setjmp_aux.c mmap.c \
        cacheflush.c pread_write.c sysmips.c _test_and_set.c \
        readahead.c
 
-SSRC := bsd-_setjmp.S bsd-setjmp.S setjmp.S syscall.S pipe.S
+SSRC := bsd-_setjmp.S bsd-setjmp.S setjmp.S syscall.S pipe.S syscall_error.S
 
 ifeq ($(UCLIBC_HAS_ADVANCED_REALTIME),y)
 CSRC += posix_fadvise.c posix_fadvise64.c
@@ -21,6 +21,7 @@ CSRC += sigaction.c
 SSRC += vfork.S clone.S
 endif
 
+ASFLAGS-syscall_error.S += -D_LIBC_REENTRANT
 
 ARCH_HEADERS := sgidefs.h
 # regdef.h
index 1e348ad..51a8efa 100644 (file)
@@ -22,7 +22,7 @@
 #include <sysdep.h>
 #include <bits/errno.h>
 
-#ifdef __UCLIBC_HAS_THREADS__
+#ifdef _LIBC_REENTRANT
 
 LOCALSZ= 3
 FRAMESZ= (((NARGSAVE+LOCALSZ)*SZREG)+ALSZ)&ALMASK
@@ -61,12 +61,14 @@ ENTRY(__syscall_error)
        j       ra
        END(__syscall_error)
 
-#else /* __UCLIBC_HAS_THREADS__ */
+#else /* __LIBC_REENTRANT */
 
 
 ENTRY(__syscall_error)
 #ifdef __PIC__
+       .set noat
        SETUP_GPX (AT)
+       .set at
 #endif
        SETUP_GPX64 (t9, AT)
 
@@ -79,4 +81,4 @@ ENTRY(__syscall_error)
        RESTORE_GP64
        j ra
        END(__syscall_error)
-#endif  /* __UCLIBC_HAS_THREADS__ */
+#endif  /* _LIBC_REENTRANT*/
index 7a922b6..2992f35 100644 (file)
@@ -15,6 +15,7 @@ CFLAGS-pt-raise.c = -DNOT_IN_libc=1 -DIS_IN_libpthread=1
 ASFLAGS-pthread_spin_lock.S = -DNOT_IN_libc=1 -DIS_IN_libpthread=1
 ASFLAGS-pthread_spin_trylock.S = -DNOT_IN_libc=1 -DIS_IN_libpthread=1
 ASFLAGS-nptl-sysdep.S = -DNOT_IN_libc=1 -DIS_IN_libpthread=1   \
+                       -D_LIBC_REENTRANT \
                        -I$(top_srcdir)libc/sysdeps/linux/mips
 
 CFLAGS-mips = $(SSP_ALL_CFLAGS)