Update.
2002-07-02 H.J. Lu <hjl@gnu.org> * sysdeps/mips/atomicity.h: Don't include <sgidefs.h>. Always use ll/sc. * sysdeps/unix/sysv/linux/mips/sys/tas.h: Likewise. * sysdeps/unix/sysv/linux/configure.in: Set arch_minimum_kernel to 2.4.0 for mips. TLS fail if USE_TLS is not defined.
This commit is contained in:
parent
807bce82b3
commit
a99bfa85d8
11
ChangeLog
11
ChangeLog
@ -1,7 +1,16 @@
|
||||
2002-07-02 H.J. Lu <hjl@gnu.org>
|
||||
|
||||
* sysdeps/mips/atomicity.h: Don't include <sgidefs.h>. Always
|
||||
use ll/sc.
|
||||
* sysdeps/unix/sysv/linux/mips/sys/tas.h: Likewise.
|
||||
|
||||
* sysdeps/unix/sysv/linux/configure.in: Set arch_minimum_kernel
|
||||
to 2.4.0 for mips.
|
||||
|
||||
2002-07-15 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* elf/dl-load.c (_dl_map_object_from_fd): If loaded object uses
|
||||
TLS fail is USE_TLS is not defined.
|
||||
TLS fail if USE_TLS is not defined.
|
||||
|
||||
* libio/wfileops.c (_IO_wfile_seekoff): Reposition wide pointers
|
||||
and adjust state for seek position. [PR libc/4070]
|
||||
|
@ -1,3 +1,9 @@
|
||||
2002-07-02 H.J. Lu <hjl@gnu.org>
|
||||
|
||||
* sysdeps/mips/pspinlock.c: Don't include <sgidefs.h>. Always
|
||||
use ll/sc.
|
||||
* sysdeps/mips/pt-machine.h: Likewise.
|
||||
|
||||
2002-07-14 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* manager.c (pthread_handle_create): Initialize self-reference in
|
||||
|
@ -19,12 +19,9 @@
|
||||
|
||||
#include <errno.h>
|
||||
#include <pthread.h>
|
||||
#include <sgidefs.h>
|
||||
#include <sys/tas.h>
|
||||
#include "internals.h"
|
||||
|
||||
#if (_MIPS_ISA >= _MIPS_ISA_MIPS2)
|
||||
|
||||
/* This implementation is similar to the one used in the Linux kernel. */
|
||||
int
|
||||
__pthread_spin_lock (pthread_spinlock_t *lock)
|
||||
@ -34,10 +31,13 @@ __pthread_spin_lock (pthread_spinlock_t *lock)
|
||||
asm volatile
|
||||
("\t\t\t# spin_lock\n"
|
||||
"1:\n\t"
|
||||
".set push\n\t"
|
||||
".set mips2\n\t"
|
||||
"ll %1,%3\n\t"
|
||||
"li %2,1\n\t"
|
||||
"bnez %1,1b\n\t"
|
||||
"sc %2,%0\n\t"
|
||||
".set pop\n\t"
|
||||
"beqz %2,1b"
|
||||
: "=m" (*lock), "=&r" (tmp1), "=&r" (tmp2)
|
||||
: "m" (*lock)
|
||||
@ -46,17 +46,6 @@ __pthread_spin_lock (pthread_spinlock_t *lock)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else /* !(_MIPS_ISA >= _MIPS_ISA_MIPS2) */
|
||||
|
||||
int
|
||||
__pthread_spin_lock (pthread_spinlock_t *lock)
|
||||
{
|
||||
while (_test_and_set ((int *) lock, 1));
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* !(_MIPS_ISA >= _MIPS_ISA_MIPS2) */
|
||||
|
||||
weak_alias (__pthread_spin_lock, pthread_spin_lock)
|
||||
|
||||
|
||||
|
@ -23,7 +23,6 @@
|
||||
#ifndef _PT_MACHINE_H
|
||||
#define _PT_MACHINE_H 1
|
||||
|
||||
#include <sgidefs.h>
|
||||
#include <sys/tas.h>
|
||||
|
||||
#ifndef PT_EI
|
||||
@ -51,8 +50,6 @@ register char * stack_pointer __asm__ ("$29");
|
||||
|
||||
/* Compare-and-swap for semaphores. */
|
||||
|
||||
#if (_MIPS_ISA >= _MIPS_ISA_MIPS2)
|
||||
|
||||
#define HAS_COMPARE_AND_SWAP
|
||||
PT_EI int
|
||||
__compare_and_swap (long int *p, long int oldval, long int newval)
|
||||
@ -62,11 +59,14 @@ __compare_and_swap (long int *p, long int oldval, long int newval)
|
||||
__asm__ __volatile__
|
||||
("/* Inline compare & swap */\n"
|
||||
"1:\n\t"
|
||||
".set push\n\t"
|
||||
".set mips2\n\t"
|
||||
"ll %1,%5\n\t"
|
||||
"move %0,$0\n\t"
|
||||
"bne %1,%3,2f\n\t"
|
||||
"move %0,%4\n\t"
|
||||
"sc %0,%2\n\t"
|
||||
".set pop\n\t"
|
||||
"beqz %0,1b\n"
|
||||
"2:\n\t"
|
||||
"/* End compare & swap */"
|
||||
@ -77,6 +77,4 @@ __compare_and_swap (long int *p, long int oldval, long int newval)
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* (_MIPS_ISA >= _MIPS_ISA_MIPS2) */
|
||||
|
||||
#endif /* pt-machine.h */
|
||||
|
@ -20,11 +20,8 @@
|
||||
#ifndef _MIPS_ATOMICITY_H
|
||||
#define _MIPS_ATOMICITY_H 1
|
||||
|
||||
#include <sgidefs.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
#if (_MIPS_ISA >= _MIPS_ISA_MIPS2)
|
||||
|
||||
static inline int
|
||||
__attribute__ ((unused))
|
||||
exchange_and_add (volatile uint32_t *mem, int val)
|
||||
@ -34,9 +31,12 @@ exchange_and_add (volatile uint32_t *mem, int val)
|
||||
__asm__ __volatile__
|
||||
("/* Inline exchange & add */\n"
|
||||
"1:\n\t"
|
||||
".set push\n\t"
|
||||
".set mips2\n\t"
|
||||
"ll %0,%3\n\t"
|
||||
"addu %1,%4,%0\n\t"
|
||||
"sc %1,%2\n\t"
|
||||
".set pop\n\t"
|
||||
"beqz %1,1b\n\t"
|
||||
"/* End exchange & add */"
|
||||
: "=&r"(result), "=&r"(tmp), "=m"(*mem)
|
||||
@ -55,9 +55,12 @@ atomic_add (volatile uint32_t *mem, int val)
|
||||
__asm__ __volatile__
|
||||
("/* Inline atomic add */\n"
|
||||
"1:\n\t"
|
||||
".set push\n\t"
|
||||
".set mips2\n\t"
|
||||
"ll %0,%2\n\t"
|
||||
"addu %0,%3,%0\n\t"
|
||||
"sc %0,%1\n\t"
|
||||
".set pop\n\t"
|
||||
"beqz %0,1b\n\t"
|
||||
"/* End atomic add */"
|
||||
: "=&r"(result), "=m"(*mem)
|
||||
@ -74,11 +77,14 @@ compare_and_swap (volatile long int *p, long int oldval, long int newval)
|
||||
__asm__ __volatile__
|
||||
("/* Inline compare & swap */\n"
|
||||
"1:\n\t"
|
||||
".set push\n\t"
|
||||
".set mips2\n\t"
|
||||
"ll %1,%5\n\t"
|
||||
"move %0,$0\n\t"
|
||||
"bne %1,%3,2f\n\t"
|
||||
"move %0,%4\n\t"
|
||||
"sc %0,%2\n\t"
|
||||
".set pop\n\t"
|
||||
"beqz %0,1b\n"
|
||||
"2:\n\t"
|
||||
"/* End compare & swap */"
|
||||
@ -89,37 +95,4 @@ compare_and_swap (volatile long int *p, long int oldval, long int newval)
|
||||
return ret;
|
||||
}
|
||||
|
||||
#else /* (_MIPS_ISA >= _MIPS_ISA_MIPS2) */
|
||||
|
||||
#warning MIPS I atomicity functions are not atomic
|
||||
|
||||
static inline int
|
||||
__attribute__ ((unused))
|
||||
exchange_and_add (volatile uint32_t *mem, int val)
|
||||
{
|
||||
int result = *mem;
|
||||
*mem += val;
|
||||
return result;
|
||||
}
|
||||
|
||||
static inline void
|
||||
__attribute__ ((unused))
|
||||
atomic_add (volatile uint32_t *mem, int val)
|
||||
{
|
||||
*mem += val;
|
||||
}
|
||||
|
||||
static inline int
|
||||
__attribute__ ((unused))
|
||||
compare_and_swap (volatile long int *p, long int oldval, long int newval)
|
||||
{
|
||||
if (*p != oldval)
|
||||
return 0;
|
||||
|
||||
*p = newval;
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif /* !(_MIPS_ISA >= _MIPS_ISA_MIPS2) */
|
||||
|
||||
#endif /* atomicity.h */
|
||||
|
2
sysdeps/unix/sysv/linux/configure
vendored
2
sysdeps/unix/sysv/linux/configure
vendored
@ -72,7 +72,7 @@ case "$machine" in
|
||||
libc_cv_gcc_unwind_find_fde=yes
|
||||
;;
|
||||
mips*)
|
||||
arch_minimum_kernel=2.2.15
|
||||
arch_minimum_kernel=2.4.0
|
||||
libc_cv_gcc_unwind_find_fde=yes
|
||||
;;
|
||||
powerpc*)
|
||||
|
@ -59,7 +59,7 @@ case "$machine" in
|
||||
libc_cv_gcc_unwind_find_fde=yes
|
||||
;;
|
||||
mips*)
|
||||
arch_minimum_kernel=2.2.15
|
||||
arch_minimum_kernel=2.4.0
|
||||
libc_cv_gcc_unwind_find_fde=yes
|
||||
;;
|
||||
powerpc*)
|
||||
|
@ -21,8 +21,6 @@
|
||||
#define _SYS_TAS_H 1
|
||||
|
||||
#include <features.h>
|
||||
#include <sgidefs.h>
|
||||
#include <sys/sysmips.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
@ -34,8 +32,6 @@ extern int _test_and_set (int *p, int v) __THROW;
|
||||
# define _EXTERN_INLINE extern __inline
|
||||
# endif
|
||||
|
||||
# if (_MIPS_ISA >= _MIPS_ISA_MIPS2)
|
||||
|
||||
_EXTERN_INLINE int
|
||||
_test_and_set (int *p, int v) __THROW
|
||||
{
|
||||
@ -44,10 +40,13 @@ _test_and_set (int *p, int v) __THROW
|
||||
__asm__ __volatile__
|
||||
("/* Inline test and set */\n"
|
||||
"1:\n\t"
|
||||
".set push\n\t"
|
||||
".set mips2\n\t"
|
||||
"ll %0,%3\n\t"
|
||||
"move %1,%4\n\t"
|
||||
"beq %0,%4,2f\n\t"
|
||||
"sc %1,%2\n\t"
|
||||
".set pop\n\t"
|
||||
"beqz %1,1b\n"
|
||||
"2:\n\t"
|
||||
"/* End test and set */"
|
||||
@ -58,16 +57,6 @@ _test_and_set (int *p, int v) __THROW
|
||||
return r;
|
||||
}
|
||||
|
||||
# else /* !(_MIPS_ISA >= _MIPS_ISA_MIPS2) */
|
||||
|
||||
_EXTERN_INLINE int
|
||||
_test_and_set (int *p, int v) __THROW
|
||||
{
|
||||
return sysmips (MIPS_ATOMIC_SET, (int) p, v, 0);
|
||||
}
|
||||
|
||||
# endif /* !(_MIPS_ISA >= _MIPS_ISA_MIPS2) */
|
||||
|
||||
#endif /* __USE_EXTERN_INLINES */
|
||||
|
||||
__END_DECLS
|
||||
|
Loading…
Reference in New Issue
Block a user