aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--linuxthreads/manager.c1
-rwxr-xr-xscripts/config.sub6
-rw-r--r--sysdeps/alpha/atomicity.h102
-rw-r--r--sysdeps/alpha/fpu/s_floor.c11
-rw-r--r--sysdeps/alpha/fpu/s_floorf.c14
-rw-r--r--sysdeps/generic/elf/backtracesyms.c8
7 files changed, 135 insertions, 19 deletions
diff --git a/ChangeLog b/ChangeLog
index 5f1db4db07..adefded996 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+1999-01-29 Richard Henderson <rth@twiddle.net>
+
+ * scripts/config.sub: Recognize alpha{pca5[67],ev[67]}.
+
+ * sysdeps/generic/elf/backtracesyms.c (__backtrace_symbols):
+ Format pointer differences as longs.
+
+ * sysdeps/alpha/fpu/s_floor.c, sysdeps/alpha/fpu/s_floorf.c:
+ Copy commentary from bits/mathinclude.h. Kill unused defines.
+
+ * sysdeps/alpha/atomicity.h: New file.
+
1999-01-29 Ulrich Drepper <drepper@cygnus.com>
* version.h (VERSION): Bump to 2.0.112.
diff --git a/linuxthreads/manager.c b/linuxthreads/manager.c
index b244d87686..033e5adc5f 100644
--- a/linuxthreads/manager.c
+++ b/linuxthreads/manager.c
@@ -314,6 +314,7 @@ static int pthread_handle_create(pthread_t *thread, const pthread_attr_t *attr,
&guardaddr, &guardsize) == 0)
break;
}
+ __pthread_handles_num++;
/* Allocate new thread identifier */
pthread_threads_counter += PTHREAD_THREADS_MAX;
new_thread_id = sseg + pthread_threads_counter;
diff --git a/scripts/config.sub b/scripts/config.sub
index df7022d37e..8e0adacb9b 100755
--- a/scripts/config.sub
+++ b/scripts/config.sub
@@ -152,7 +152,8 @@ case $basic_machine in
tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
| 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 | hppa2.0 \
- | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
+ | alpha | alphaev5 | alphaev56 | alphapca56 | alphaev6 \
+ | alphapca57 | alphaev7 | we32k | ns16k | clipper \
| i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
| mips64 | mipsel | mips64el | mips64orion | mips64orionel \
| mipstx39 | mipstx39el | armv[34][lb] \
@@ -176,7 +177,8 @@ case $basic_machine in
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
| power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
| xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \
- | alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \
+ | alpha-* | alphaev5-* | alphaev56-* | alphapca56-* \
+ | alphaev6-* | alphapca57-* | alphaev7-* | we32k-* | cydra-* \
| ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
| sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
| sparc64-* | mips64-* | mipsel-* | armv[34][lb]-* \
diff --git a/sysdeps/alpha/atomicity.h b/sysdeps/alpha/atomicity.h
new file mode 100644
index 0000000000..34a538f4c0
--- /dev/null
+++ b/sysdeps/alpha/atomicity.h
@@ -0,0 +1,102 @@
+/* Low-level functions for atomic operations. Alpha version.
+ Copyright (C) 1999 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
+ modify it under the terms of the GNU Library General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with the GNU C Library; see the file COPYING.LIB. If not,
+ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+#ifndef _ATOMICITY_H
+#define _ATOMICITY_H 1
+
+#include <inttypes.h>
+
+
+static inline int
+__attribute__ ((unused))
+exchange_and_add (volatile uint32_t *mem, int val)
+{
+ register int result, tmp;
+
+ __asm__ __volatile__ (
+ "/* Inline exchange & add */\n"
+ "1:\t"
+ "ldl_l %0,%3\n\t"
+ "addl %0,%4,%1\n\t"
+ "stl_c %1,%2\n\t"
+ "beq %1,2f\n"
+ ".subsection 2\n"
+ "2:\t"
+ "br 1b\n"
+ ".subsection 1\n\t"
+ "mb\n\t"
+ "/* End exchange & add */"
+ : "=&r"(result), "=&r"(tmp), "=m"(*mem)
+ : "m" (*mem), "r"(val));
+
+ return result;
+}
+
+static inline void
+__attribute__ ((unused))
+atomic_add (volatile uint32_t *mem, int val)
+{
+ register int result;
+
+ __asm__ __volatile__ (
+ "/* Inline exchange & add */\n"
+ "1:\t"
+ "ldl_l %0,%2\n\t"
+ "addl %0,%3,%0\n\t"
+ "stl_c %0,%1\n\t"
+ "beq %0,2f\n\t"
+ ".subsection 2\n"
+ "2:\t"
+ "br 1b\n"
+ ".subsection 1\n\t"
+ "mb\n\t"
+ "/* End exchange & add */"
+ : "=&r"(result), "=m"(*mem)
+ : "m" (*mem), "r"(val));
+}
+
+static inline long
+__attribute__ ((unused))
+compare_and_swap (volatile long int *p, long int oldval, long int newval)
+{
+ long int ret;
+
+ __asm__ __volatile__ (
+ "/* Inline compare & swap */\n"
+ "1:\t"
+ "ldq_l %0,%4\n\t"
+ "cmpeq %0,%2,%0\n\t"
+ "beq %0,3f\n\t"
+ "mov %3,%0\n\t"
+ "stq_c %0,%1\n\t"
+ "beq %0,2f\n\t"
+ ".subsection 2\n"
+ "2:\t"
+ "br 1b\n"
+ ".subsection 1\n\t"
+ "3:\t"
+ "mb\n\t"
+ "/* End compare & swap */"
+ : "=&r"(ret), "=m"(*p)
+ : "r"(oldval), "r"(newval), "m"(*p));
+
+ return ret;
+}
+
+#endif /* atomicity.h */
diff --git a/sysdeps/alpha/fpu/s_floor.c b/sysdeps/alpha/fpu/s_floor.c
index c7e14662fe..146e19b35a 100644
--- a/sysdeps/alpha/fpu/s_floor.c
+++ b/sysdeps/alpha/fpu/s_floor.c
@@ -17,18 +17,17 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#ifndef __USE_EXTERN_INLINES
-#define __USE_EXTERN_INLINES
-#endif
-#define __floor __i_floor
-
#include <math.h>
-#undef __floor
+
+/* Use the -inf rounding mode conversion instructions to implement
+ floor. We note when the exponent is large enough that the value
+ must be integral, as this avoids unpleasant integer overflows. */
double
__floor (double x)
{
+ /* Check not zero since floor(-0) == -0. */
if (x != 0 && fabs (x) < 9007199254740992.0) /* 1 << DBL_MANT_DIG */
{
double __tmp1;
diff --git a/sysdeps/alpha/fpu/s_floorf.c b/sysdeps/alpha/fpu/s_floorf.c
index 7502b6781e..9e693642dd 100644
--- a/sysdeps/alpha/fpu/s_floorf.c
+++ b/sysdeps/alpha/fpu/s_floorf.c
@@ -17,14 +17,12 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#ifndef __USE_EXTERN_INLINES
-#define __USE_EXTERN_INLINES
-#endif
-#define __floorf __i_floorf
-
#include <math.h>
-#undef __floorf
+
+/* Use the -inf rounding mode conversion instructions to implement
+ floor. We note when the exponent is large enough that the value
+ must be integral, as this avoids unpleasant integer overflows. */
float
__floorf (float x)
@@ -37,7 +35,7 @@ __floorf (float x)
convert back to S_Floating in the end. The initial
conversion to T_Floating is needed to handle denormals. */
- float __tmp1, __tmp2;
+ float tmp1, tmp2;
__asm ("cvtst/s %3,%2\n\t"
#ifdef _IEEE_FP_INEXACT
@@ -46,7 +44,7 @@ __floorf (float x)
"cvttq/svm %2,%1\n\t"
#endif
"cvtqt/m %1,%0\n\t"
- : "=f"(x), "=&f"(__tmp1), "=&f"(__tmp2)
+ : "=f"(x), "=&f"(tmp1), "=&f"(tmp2)
: "f"(x));
}
return x;
diff --git a/sysdeps/generic/elf/backtracesyms.c b/sysdeps/generic/elf/backtracesyms.c
index a14ac596b4..100d94aa42 100644
--- a/sysdeps/generic/elf/backtracesyms.c
+++ b/sysdeps/generic/elf/backtracesyms.c
@@ -1,5 +1,5 @@
/* Return list with names for address in backtrace.
- Copyright (C) 1998 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -76,9 +76,11 @@ __backtrace_symbols (array, size)
char buf[20];
if (array[cnt] >= (void *) info[cnt].dli_saddr)
- sprintf (buf, "+0x%x", array[cnt] - info[cnt].dli_saddr);
+ sprintf (buf, "+%#lx",
+ (unsigned long)(array[cnt] - info[cnt].dli_saddr));
else
- sprintf (buf, "-0x%x", info[cnt].dli_saddr - array[cnt]);
+ sprintf (buf, "-%#lx",
+ (unsigned long)(info[cnt].dli_saddr - array[cnt]));
last += 1 + sprintf (last, "%s%s%s%s%s[%p]",
info[cnt].dli_fname ?: "",