+2010-06-09 Iain Sandoe <iains@gcc.gnu.org>
+
+ PR bootstrap/43170
+ * tls.m4 (GCC_CHECK_TLS): Add volatile qualifier to the test
+ references. Move the main () test reference ahead of
+ pthread_create(). Add a comment to explain the requirements
+ of the test.
+
2010-06-03 Joern Rennecke <joern.rennecke@embecosm.com>
Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
CFLAGS="$chktls_save_CFLAGS"
if test "X$thread_CFLAGS" != Xfailed; then
CFLAGS="$thread_CFLAGS $chktls_save_CFLAGS"
+ dnl Test for an old glibc bug that violated the __thread property.
+ dnl Use volatile to ensure the compiler won't optimize away pointer
+ dnl accesses it might otherwise assume to be redundant, or reorder
+ dnl them and reuse storage, which might lead to them pointing to
+ dnl the same location.
AC_RUN_IFELSE(
[AC_LANG_PROGRAM(
[#include <pthread.h>
__thread int a;
- static int *a_in_other_thread;
+ static int *volatile a_in_other_thread;
static void *
thread_func (void *arg)
{
}],
[pthread_t thread;
void *thread_retval;
- int *a_in_main_thread;
+ int *volatile a_in_main_thread;
+ a_in_main_thread = &a;
if (pthread_create (&thread, (pthread_attr_t *)0,
thread_func, (void *)0))
return 0;
- a_in_main_thread = &a;
if (pthread_join (thread, &thread_retval))
return 0;
return (a_in_other_thread == a_in_main_thread);])],
+2010-06-09 Iain Sandoe <iains@gcc.gnu.org>
+
+ PR bootstrap/43170
+ * configure: Regenerate.
+
2010-05-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
PR other/43620
/* end confdefs.h. */
#include <pthread.h>
__thread int a;
- static int *a_in_other_thread;
+ static int *volatile a_in_other_thread;
static void *
thread_func (void *arg)
{
{
pthread_t thread;
void *thread_retval;
- int *a_in_main_thread;
+ int *volatile a_in_main_thread;
+ a_in_main_thread = &a;
if (pthread_create (&thread, (pthread_attr_t *)0,
thread_func, (void *)0))
return 0;
- a_in_main_thread = &a;
if (pthread_join (thread, &thread_retval))
return 0;
return (a_in_other_thread == a_in_main_thread);
+2010-06-09 Iain Sandoe <iains@gcc.gnu.org>
+
+ PR bootstrap/43170
+ * configure: Regenerate.
+
2010-06-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* configure: Regenerate.
/* end confdefs.h. */
#include <pthread.h>
__thread int a;
- static int *a_in_other_thread;
+ static int *volatile a_in_other_thread;
static void *
thread_func (void *arg)
{
{
pthread_t thread;
void *thread_retval;
- int *a_in_main_thread;
+ int *volatile a_in_main_thread;
+ a_in_main_thread = &a;
if (pthread_create (&thread, (pthread_attr_t *)0,
thread_func, (void *)0))
return 0;
- a_in_main_thread = &a;
if (pthread_join (thread, &thread_retval))
return 0;
return (a_in_other_thread == a_in_main_thread);
+2010-06-09 Iain Sandoe <iains@gcc.gnu.org>
+
+ PR bootstrap/43170
+ * configure: Regenerate.
+
2010-05-16 Uros Bizjak <ubizjak@gmail.com>
* testsuite/libmudflap.c/pass46-frag.c (dg-options): Remove -Wall.
/* end confdefs.h. */
#include <pthread.h>
__thread int a;
- static int *a_in_other_thread;
+ static int *volatile a_in_other_thread;
static void *
thread_func (void *arg)
{
{
pthread_t thread;
void *thread_retval;
- int *a_in_main_thread;
+ int *volatile a_in_main_thread;
+ a_in_main_thread = &a;
if (pthread_create (&thread, (pthread_attr_t *)0,
thread_func, (void *)0))
return 0;
- a_in_main_thread = &a;
if (pthread_join (thread, &thread_retval))
return 0;
return (a_in_other_thread == a_in_main_thread);
+2010-06-09 Iain Sandoe <iains@gcc.gnu.org>
+
+ PR bootstrap/43170
+ * configure: Regenerate.
+
2010-06-09 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/44413
/* end confdefs.h. */
#include <pthread.h>
__thread int a;
- static int *a_in_other_thread;
+ static int *volatile a_in_other_thread;
static void *
thread_func (void *arg)
{
{
pthread_t thread;
void *thread_retval;
- int *a_in_main_thread;
+ int *volatile a_in_main_thread;
+ a_in_main_thread = &a;
if (pthread_create (&thread, (pthread_attr_t *)0,
thread_func, (void *)0))
return 0;
- a_in_main_thread = &a;
if (pthread_join (thread, &thread_retval))
return 0;
return (a_in_other_thread == a_in_main_thread);
/* end confdefs.h. */
#include <pthread.h>
__thread int a;
- static int *a_in_other_thread;
+ static int *volatile a_in_other_thread;
static void *
thread_func (void *arg)
{
{
pthread_t thread;
void *thread_retval;
- int *a_in_main_thread;
+ int *volatile a_in_main_thread;
+ a_in_main_thread = &a;
if (pthread_create (&thread, (pthread_attr_t *)0,
thread_func, (void *)0))
return 0;
- a_in_main_thread = &a;
if (pthread_join (thread, &thread_retval))
return 0;
return (a_in_other_thread == a_in_main_thread);
/* end confdefs.h. */
#include <pthread.h>
__thread int a;
- static int *a_in_other_thread;
+ static int *volatile a_in_other_thread;
static void *
thread_func (void *arg)
{
{
pthread_t thread;
void *thread_retval;
- int *a_in_main_thread;
+ int *volatile a_in_main_thread;
+ a_in_main_thread = &a;
if (pthread_create (&thread, (pthread_attr_t *)0,
thread_func, (void *)0))
return 0;
- a_in_main_thread = &a;
if (pthread_join (thread, &thread_retval))
return 0;
return (a_in_other_thread == a_in_main_thread);