mirror of git://sourceware.org/git/glibc.git
* sysdeps/alpha/bits/atomic.h (__arch_compare_and_exchange_xxx_8_int): Cast old up to uint64_t before back down to inner width. (__arch_compare_and_exchange_xxx_16_int): Likewise. (__arch_compare_and_exchange_xxx_32_int): Likewise. (__arch_compare_and_exchange_xxx_64_int): Likewise. (__arch_compare_and_exchange_val_8_int): Cast result to the type of the memory. (__arch_compare_and_exchange_val_16_int): Likewise. (__arch_compare_and_exchange_val_32_int): Likewise. (__arch_compare_and_exchange_val_64_int): Likewise. (atomic_compare_and_exchange_bool_acq): Use __atomic_bool_bysize. (atomic_compare_and_exchange_bool_rel): Likewise.
* sysdeps/unix/alpha/sysdep.h: Select inline_syscall_r0_asm
based on HAVE___THREAD instead of USE_TLS.
* sysdeps/unix/sysv/linux/alpha/adjtime.c (ADJTIMEX32): New.
(__adjtimex_tv64): Use it.
* sysdeps/unix/sysv/linux/alpha/semctl.c (__new_semctl): Cast
to void* rather than directly to the compatibility structure type.
* sysdeps/unix/sysv/linux/alpha/shmctl.c (__new_shmctl): Likewise.
* sysdeps/unix/sysv/linux/alpha/sigaction.c (struct kernel_sigaction):
Forward declare.
* sysdeps/alpha/bits/atomic.h (__arch_compare_and_exchange_xxx_8_int):
Cast old up to uint64_t before back down to inner width.
(__arch_compare_and_exchange_xxx_16_int): Likewise.
(__arch_compare_and_exchange_xxx_32_int): Likewise.
(__arch_compare_and_exchange_xxx_64_int): Likewise.
(__arch_compare_and_exchange_val_8_int): Cast result to
the type of the memory.
(__arch_compare_and_exchange_val_16_int): Likewise.
(__arch_compare_and_exchange_val_32_int): Likewise.
(__arch_compare_and_exchange_val_64_int): Likewise.
(atomic_compare_and_exchange_bool_acq): Use __atomic_bool_bysize.
(atomic_compare_and_exchange_bool_rel): Likewise.
* sysdeps/unix/alpha/sysdep.h: Select inline_syscall_r0_asm
based on HAVE___THREAD instead of USE_TLS.
* sysdeps/unix/sysv/linux/alpha/adjtime.c (ADJTIMEX32): New.
(__adjtimex_tv64): Use it.
* sysdeps/unix/sysv/linux/alpha/semctl.c (__new_semctl): Cast
to void* rather than directly to the compatibility structure type.
* sysdeps/unix/sysv/linux/alpha/shmctl.c (__new_shmctl): Likewise.
* sysdeps/unix/sysv/linux/alpha/sigaction.c (struct kernel_sigaction):
Forward declare.
2004-01-13 Richard Henderson <rth@redhat.com>
Paolo Bonzini <bonzini@gnu.org>
Compare the node sets after all the other comparisons.
the old thread-m.h header too.
This commit is contained in:
parent
1705f0a392
commit
141749ca16
28
ChangeLog
28
ChangeLog
|
|
@ -1,3 +1,31 @@
|
||||||
|
2004-01-13 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/alpha/bits/atomic.h (__arch_compare_and_exchange_xxx_8_int):
|
||||||
|
Cast old up to uint64_t before back down to inner width.
|
||||||
|
(__arch_compare_and_exchange_xxx_16_int): Likewise.
|
||||||
|
(__arch_compare_and_exchange_xxx_32_int): Likewise.
|
||||||
|
(__arch_compare_and_exchange_xxx_64_int): Likewise.
|
||||||
|
(__arch_compare_and_exchange_val_8_int): Cast result to
|
||||||
|
the type of the memory.
|
||||||
|
(__arch_compare_and_exchange_val_16_int): Likewise.
|
||||||
|
(__arch_compare_and_exchange_val_32_int): Likewise.
|
||||||
|
(__arch_compare_and_exchange_val_64_int): Likewise.
|
||||||
|
(atomic_compare_and_exchange_bool_acq): Use __atomic_bool_bysize.
|
||||||
|
(atomic_compare_and_exchange_bool_rel): Likewise.
|
||||||
|
|
||||||
|
* sysdeps/unix/alpha/sysdep.h: Select inline_syscall_r0_asm
|
||||||
|
based on HAVE___THREAD instead of USE_TLS.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/adjtime.c (ADJTIMEX32): New.
|
||||||
|
(__adjtimex_tv64): Use it.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/semctl.c (__new_semctl): Cast
|
||||||
|
to void* rather than directly to the compatibility structure type.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/shmctl.c (__new_shmctl): Likewise.
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/sigaction.c (struct kernel_sigaction):
|
||||||
|
Forward declare.
|
||||||
|
|
||||||
2004-01-13 Richard Henderson <rth@redhat.com>
|
2004-01-13 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
* Versions.def (libm): Add GLIBC_2.3.3.
|
* Versions.def (libm): Add GLIBC_2.3.3.
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ typedef uintmax_t uatomic_max_t;
|
||||||
[__cmp] "=&r" (__cmp), \
|
[__cmp] "=&r" (__cmp), \
|
||||||
[__addr64] "=&r" (__addr64) \
|
[__addr64] "=&r" (__addr64) \
|
||||||
: [__addr8] "r" (mem), \
|
: [__addr8] "r" (mem), \
|
||||||
[__old] "Ir" ((uint64_t)(uint8_t)(old)), \
|
[__old] "Ir" ((uint64_t)(uint8_t)(uint64_t)(old)), \
|
||||||
[__new] "r" (new) \
|
[__new] "r" (new) \
|
||||||
: "memory"); \
|
: "memory"); \
|
||||||
})
|
})
|
||||||
|
|
@ -106,7 +106,7 @@ typedef uintmax_t uatomic_max_t;
|
||||||
[__cmp] "=&r" (__cmp), \
|
[__cmp] "=&r" (__cmp), \
|
||||||
[__addr64] "=&r" (__addr64) \
|
[__addr64] "=&r" (__addr64) \
|
||||||
: [__addr16] "r" (mem), \
|
: [__addr16] "r" (mem), \
|
||||||
[__old] "Ir" ((uint64_t)(uint16_t)(old)), \
|
[__old] "Ir" ((uint64_t)(uint16_t)(uint64_t)(old)), \
|
||||||
[__new] "r" (new) \
|
[__new] "r" (new) \
|
||||||
: "memory"); \
|
: "memory"); \
|
||||||
})
|
})
|
||||||
|
|
@ -126,7 +126,7 @@ typedef uintmax_t uatomic_max_t;
|
||||||
: [__prev] "=&r" (__prev), \
|
: [__prev] "=&r" (__prev), \
|
||||||
[__cmp] "=&r" (__cmp) \
|
[__cmp] "=&r" (__cmp) \
|
||||||
: [__mem] "m" (*(mem)), \
|
: [__mem] "m" (*(mem)), \
|
||||||
[__old] "Ir" ((uint64_t)(atomic32_t)(old)), \
|
[__old] "Ir" ((uint64_t)(atomic32_t)(uint64_t)(old)), \
|
||||||
[__new] "Ir" (new) \
|
[__new] "Ir" (new) \
|
||||||
: "memory"); \
|
: "memory"); \
|
||||||
})
|
})
|
||||||
|
|
@ -146,7 +146,7 @@ typedef uintmax_t uatomic_max_t;
|
||||||
: [__prev] "=&r" (__prev), \
|
: [__prev] "=&r" (__prev), \
|
||||||
[__cmp] "=&r" (__cmp) \
|
[__cmp] "=&r" (__cmp) \
|
||||||
: [__mem] "m" (*(mem)), \
|
: [__mem] "m" (*(mem)), \
|
||||||
[__old] "Ir" (old), \
|
[__old] "Ir" ((uint64_t)(old)), \
|
||||||
[__new] "Ir" (new) \
|
[__new] "Ir" (new) \
|
||||||
: "memory"); \
|
: "memory"); \
|
||||||
})
|
})
|
||||||
|
|
@ -179,27 +179,27 @@ typedef uintmax_t uatomic_max_t;
|
||||||
#define __arch_compare_and_exchange_val_8_int(mem, new, old, mb1, mb2) \
|
#define __arch_compare_and_exchange_val_8_int(mem, new, old, mb1, mb2) \
|
||||||
({ unsigned long __prev; int __cmp; \
|
({ unsigned long __prev; int __cmp; \
|
||||||
__arch_compare_and_exchange_xxx_8_int(mem, new, old, mb1, mb2); \
|
__arch_compare_and_exchange_xxx_8_int(mem, new, old, mb1, mb2); \
|
||||||
__prev; })
|
(typeof (*mem))__prev; })
|
||||||
|
|
||||||
#define __arch_compare_and_exchange_val_16_int(mem, new, old, mb1, mb2) \
|
#define __arch_compare_and_exchange_val_16_int(mem, new, old, mb1, mb2) \
|
||||||
({ unsigned long __prev; int __cmp; \
|
({ unsigned long __prev; int __cmp; \
|
||||||
__arch_compare_and_exchange_xxx_16_int(mem, new, old, mb1, mb2); \
|
__arch_compare_and_exchange_xxx_16_int(mem, new, old, mb1, mb2); \
|
||||||
__prev; })
|
(typeof (*mem))__prev; })
|
||||||
|
|
||||||
#define __arch_compare_and_exchange_val_32_int(mem, new, old, mb1, mb2) \
|
#define __arch_compare_and_exchange_val_32_int(mem, new, old, mb1, mb2) \
|
||||||
({ unsigned long __prev; int __cmp; \
|
({ unsigned long __prev; int __cmp; \
|
||||||
__arch_compare_and_exchange_xxx_32_int(mem, new, old, mb1, mb2); \
|
__arch_compare_and_exchange_xxx_32_int(mem, new, old, mb1, mb2); \
|
||||||
__prev; })
|
(typeof (*mem))__prev; })
|
||||||
|
|
||||||
#define __arch_compare_and_exchange_val_64_int(mem, new, old, mb1, mb2) \
|
#define __arch_compare_and_exchange_val_64_int(mem, new, old, mb1, mb2) \
|
||||||
({ unsigned long __prev; int __cmp; \
|
({ unsigned long __prev; int __cmp; \
|
||||||
__arch_compare_and_exchange_xxx_64_int(mem, new, old, mb1, mb2); \
|
__arch_compare_and_exchange_xxx_64_int(mem, new, old, mb1, mb2); \
|
||||||
__prev; })
|
(typeof (*mem))__prev; })
|
||||||
|
|
||||||
/* Compare and exchange with "acquire" semantics, ie barrier after. */
|
/* Compare and exchange with "acquire" semantics, ie barrier after. */
|
||||||
|
|
||||||
#define atomic_compare_and_exchange_bool_acq(mem, new, old) \
|
#define atomic_compare_and_exchange_bool_acq(mem, new, old) \
|
||||||
__atomic_val_bysize (__arch_compare_and_exchange_bool, int, \
|
__atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \
|
||||||
mem, new, old, "", __MB)
|
mem, new, old, "", __MB)
|
||||||
|
|
||||||
#define atomic_compare_and_exchange_val_acq(mem, new, old) \
|
#define atomic_compare_and_exchange_val_acq(mem, new, old) \
|
||||||
|
|
@ -209,7 +209,7 @@ typedef uintmax_t uatomic_max_t;
|
||||||
/* Compare and exchange with "release" semantics, ie barrier before. */
|
/* Compare and exchange with "release" semantics, ie barrier before. */
|
||||||
|
|
||||||
#define atomic_compare_and_exchange_bool_rel(mem, new, old) \
|
#define atomic_compare_and_exchange_bool_rel(mem, new, old) \
|
||||||
__atomic_val_bysize (__arch_compare_and_exchange_bool, int, \
|
__atomic_bool_bysize (__arch_compare_and_exchange_bool, int, \
|
||||||
mem, new, old, __MB, "")
|
mem, new, old, __MB, "")
|
||||||
|
|
||||||
#define atomic_compare_and_exchange_val_rel(mem, new, old) \
|
#define atomic_compare_and_exchange_val_rel(mem, new, old) \
|
||||||
|
|
|
||||||
|
|
@ -61,10 +61,34 @@ typedef double double_t;
|
||||||
# define FP_ILOGB0 (-2147483647)
|
# define FP_ILOGB0 (-2147483647)
|
||||||
# define FP_ILOGBNAN (2147483647)
|
# define FP_ILOGBNAN (2147483647)
|
||||||
|
|
||||||
#endif /* ISO C99 */
|
#endif /* ISO C99 && MATH_H */
|
||||||
|
|
||||||
#ifndef __NO_LONG_DOUBLE_MATH
|
#ifndef __NO_LONG_DOUBLE_MATH
|
||||||
/* Signal that we do not really have a `long double'. The disables the
|
/* Signal that we do not really have a `long double'. The disables the
|
||||||
declaration of all the `long double' function variants. */
|
declaration of all the `long double' function variants. */
|
||||||
# define __NO_LONG_DOUBLE_MATH 1
|
# define __NO_LONG_DOUBLE_MATH 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined _COMPLEX_H && !defined _COMPLEX_H_MATHDEF
|
||||||
|
# define _COMPLEX_H_MATHDEF 1
|
||||||
|
# if defined(__GNUC__) && !__GNUC_PREREQ(3,4)
|
||||||
|
|
||||||
|
/* Due to an ABI change, we need to remap the complex float symbols. */
|
||||||
|
# define _Mdouble_ float
|
||||||
|
# define __MATHCALL(function, args) \
|
||||||
|
__MATHDECL (_Complex float, function, args)
|
||||||
|
# define __MATHDECL(type, function, args) \
|
||||||
|
__MATHDECL_1(type, function##f, args, __c1_##function##f); \
|
||||||
|
__MATHDECL_1(type, __##function##f, args, __c1_##function##f)
|
||||||
|
# define __MATHDECL_1(type, function, args, alias) \
|
||||||
|
extern type function args __asm__(#alias) __THROW
|
||||||
|
|
||||||
|
# include <bits/cmathcalls.h>
|
||||||
|
|
||||||
|
# undef _Mdouble_
|
||||||
|
# undef __MATHCALL
|
||||||
|
# undef __MATHDECL
|
||||||
|
# undef __MATHDECL_1
|
||||||
|
|
||||||
|
# endif /* GNUC before 3.4 */
|
||||||
|
#endif /* COMPLEX_H */
|
||||||
|
|
|
||||||
|
|
@ -205,7 +205,7 @@ __LABEL(name) \
|
||||||
output. We don't do this unconditionally to allow compilation with
|
output. We don't do this unconditionally to allow compilation with
|
||||||
older compilers. */
|
older compilers. */
|
||||||
|
|
||||||
#ifdef USE_TLS
|
#ifdef HAVE___THREAD
|
||||||
#define inline_syscall_r0_asm
|
#define inline_syscall_r0_asm
|
||||||
#define inline_syscall_r0_out_constraint "=v"
|
#define inline_syscall_r0_out_constraint "=v"
|
||||||
#else
|
#else
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,7 @@ struct timex32 {
|
||||||
#define TIMEX timex32
|
#define TIMEX timex32
|
||||||
#define ADJTIME __adjtime_tv32
|
#define ADJTIME __adjtime_tv32
|
||||||
#define ADJTIMEX(x) INLINE_SYSCALL (old_adjtimex, 1, x)
|
#define ADJTIMEX(x) INLINE_SYSCALL (old_adjtimex, 1, x)
|
||||||
|
#define ADJTIMEX32(x) INLINE_SYSCALL (old_adjtimex, 1, x)
|
||||||
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
|
||||||
#define LINKAGE
|
#define LINKAGE
|
||||||
#else
|
#else
|
||||||
|
|
@ -180,7 +181,7 @@ __adjtimex_tv64 (struct timex *tx)
|
||||||
tx32.errcnt = tx->errcnt;
|
tx32.errcnt = tx->errcnt;
|
||||||
tx32.stbcnt = tx->stbcnt;
|
tx32.stbcnt = tx->stbcnt;
|
||||||
|
|
||||||
ret = __adjtimex_tv32 (&tx32);
|
ret = ADJTIMEX32 (&tx32);
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
{
|
{
|
||||||
tx->modes = tx32.modes;
|
tx->modes = tx32.modes;
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ __new_semctl (int semid, int semnum, int cmd, ...)
|
||||||
|
|
||||||
__set_errno(save_errno);
|
__set_errno(save_errno);
|
||||||
buf = arg.buf;
|
buf = arg.buf;
|
||||||
arg.buf = (struct semid_ds *)&old;
|
arg.buf = (void *)&old;
|
||||||
if (cmd == IPC_SET)
|
if (cmd == IPC_SET)
|
||||||
{
|
{
|
||||||
old.sem_perm.uid = buf->sem_perm.uid;
|
old.sem_perm.uid = buf->sem_perm.uid;
|
||||||
|
|
|
||||||
|
|
@ -116,7 +116,7 @@ __new_shmctl (int shmid, int cmd, struct shmid_ds *buf)
|
||||||
}
|
}
|
||||||
else if (result != -1 && cmd == IPC_INFO)
|
else if (result != -1 && cmd == IPC_INFO)
|
||||||
{
|
{
|
||||||
struct __old_shminfo *oldi = (struct __old_shminfo *)&old;
|
struct __old_shminfo *oldi = (void *)&old;
|
||||||
struct shminfo *i = (struct shminfo *)buf;
|
struct shminfo *i = (struct shminfo *)buf;
|
||||||
|
|
||||||
memset(i, 0, sizeof(*i));
|
memset(i, 0, sizeof(*i));
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@
|
||||||
? __syscall_rt_sigaction(args) \
|
? __syscall_rt_sigaction(args) \
|
||||||
: INLINE_SYSCALL1(name, nr, args))
|
: INLINE_SYSCALL1(name, nr, args))
|
||||||
|
|
||||||
|
struct kernel_sigaction;
|
||||||
extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *__unbounded,
|
extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *__unbounded,
|
||||||
struct kernel_sigaction *__unbounded, size_t);
|
struct kernel_sigaction *__unbounded, size_t);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue