re PR libgomp/67141 (wrong libgomp mutex initialisation order)
authorChung-Lin Tang <cltang@codesourcery.com>
Tue, 22 Sep 2015 06:45:22 +0000 (06:45 +0000)
committerChung-Lin Tang <cltang@gcc.gnu.org>
Tue, 22 Sep 2015 06:45:22 +0000 (06:45 +0000)
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

libgomp/ChangeLog
libgomp/oacc-host.c
libgomp/oacc-init.c
libgomp/oacc-int.h

index 29665c226e140574deeead2bc920fb6b841aaefa..8e5655db8912358f633d3a48fda676b00302cbc4 100644 (file)
@@ -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>
 
index 55bb16b278a5a53b2554f513216eaee39398144d..284bb0ea4116a4cfa3d6520f4a48df05216c5229 100644 (file)
@@ -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);
index c12f8ad713732af53dfcc910f8a074c2229123c2..2258a72bbe58fafc97e1023a37901aba73daadc9 100644 (file)
@@ -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 */
index 0ace737884aa60d4a7bd0c82b73bf0d814b51522..f11e216c44fe60ed2782bcb736740b380fcc929f 100644 (file)
@@ -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