summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2010-06-30 04:10:37 -0700
committerKhem Raj <raj.khem@gmail.com>2010-06-30 04:10:37 -0700
commit8b48f745be1e086d6e486bbb8167e770f3d1fbc5 (patch)
tree80c28e847e50575b42a8a04ecebfd535d6d200f0
parent913b76abdd824ee3a6dbbc1527470ebcb8c06a65 (diff)
mips/syscall-error: Choose the correct version for setting up errno.
* 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>
-rw-r--r--libc/sysdeps/linux/mips/Makefile.arch5
-rw-r--r--libc/sysdeps/linux/mips/syscall_error.S8
-rw-r--r--libpthread/nptl/sysdeps/mips/Makefile.arch1
3 files changed, 9 insertions, 5 deletions
diff --git a/libc/sysdeps/linux/mips/Makefile.arch b/libc/sysdeps/linux/mips/Makefile.arch
index e8925e438..8bbc0bc19 100644
--- a/libc/sysdeps/linux/mips/Makefile.arch
+++ b/libc/sysdeps/linux/mips/Makefile.arch
@@ -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
diff --git a/libc/sysdeps/linux/mips/syscall_error.S b/libc/sysdeps/linux/mips/syscall_error.S
index 1e348ad4a..51a8efa5a 100644
--- a/libc/sysdeps/linux/mips/syscall_error.S
+++ b/libc/sysdeps/linux/mips/syscall_error.S
@@ -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*/
diff --git a/libpthread/nptl/sysdeps/mips/Makefile.arch b/libpthread/nptl/sysdeps/mips/Makefile.arch
index 7a922b637..2992f35f1 100644
--- a/libpthread/nptl/sysdeps/mips/Makefile.arch
+++ b/libpthread/nptl/sysdeps/mips/Makefile.arch
@@ -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)