summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChung-Lin Tang <cltang@codesourcery.com>2015-09-22 06:45:22 +0000
committerChung-Lin Tang <cltang@gcc.gnu.org>2015-09-22 06:45:22 +0000
commit6bb4c3e2d8a978c590c01df7807c4e0819b33b85 (patch)
treefa49e89a9624dff958ff59af53b25d34ea4cdb4e
parentdc2a24eddf28bf75a8869168202fa19a856af055 (diff)
re PR libgomp/67141 (wrong libgomp mutex initialisation order)
2015-09-22 Chung-Lin Tang <cltang@codesourcery.com> PR libgomp/67141 * oacc-int.h (goacc_host_init): Add declaration. * oacc-host.c (goacc_host_init): Remove static and constructor attribute. * oacc-init.c (goacc_runtime_initialize): Call goacc_host_init() at end. From-SVN: r227994
-rw-r--r--libgomp/ChangeLog7
-rw-r--r--libgomp/oacc-host.c2
-rw-r--r--libgomp/oacc-init.c3
-rw-r--r--libgomp/oacc-int.h1
4 files changed, 12 insertions, 1 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index 29665c226e1..8e5655db891 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,10 @@
+2015-09-22 Chung-Lin Tang <cltang@codesourcery.com>
+
+ PR libgomp/67141
+ * oacc-int.h (goacc_host_init): Add declaration.
+ * oacc-host.c (goacc_host_init): Remove static and constructor attribute.
+ * oacc-init.c (goacc_runtime_initialize): Call goacc_host_init() at end.
+
2015-09-08 Aditya Kumar <hiraditya@msn.com>
Sebastian Pop <s.pop@samsung.com>
diff --git a/libgomp/oacc-host.c b/libgomp/oacc-host.c
index 55bb16b278a..284bb0ea411 100644
--- a/libgomp/oacc-host.c
+++ b/libgomp/oacc-host.c
@@ -256,7 +256,7 @@ static struct gomp_device_descr host_dispatch =
};
/* Initialize and register this device type. */
-static __attribute__ ((constructor)) void
+void
goacc_host_init (void)
{
gomp_mutex_init (&host_dispatch.lock);
diff --git a/libgomp/oacc-init.c b/libgomp/oacc-init.c
index c12f8ad7137..2258a72bbe5 100644
--- a/libgomp/oacc-init.c
+++ b/libgomp/oacc-init.c
@@ -644,6 +644,9 @@ goacc_runtime_initialize (void)
goacc_threads = NULL;
gomp_mutex_init (&goacc_thread_lock);
+
+ /* Initialize and register the 'host' device type. */
+ goacc_host_init ();
}
/* Compiler helper functions */
diff --git a/libgomp/oacc-int.h b/libgomp/oacc-int.h
index 0ace737884a..f11e216c44f 100644
--- a/libgomp/oacc-int.h
+++ b/libgomp/oacc-int.h
@@ -97,6 +97,7 @@ void goacc_runtime_initialize (void);
void goacc_save_and_set_bind (acc_device_t);
void goacc_restore_bind (void);
void goacc_lazy_initialize (void);
+void goacc_host_init (void);
#ifdef HAVE_ATTRIBUTE_VISIBILITY
# pragma GCC visibility pop