]> granicus.if.org Git - gc/commitdiff
2008-08-12 Geoff Norton <gnorton@novell.com>
authorGeoff Norton <grompf@sublimeintervention.com>
Tue, 12 Aug 2008 19:40:15 +0000 (19:40 +0000)
committerguest <ivmai@mail.ru>
Fri, 29 Jul 2011 11:31:21 +0000 (15:31 +0400)
        * pthread_support.c: GCC shipped with SLES9 ppc gets confused with our current
        GC_setspecific define.  Unfold the define into a static inline on all platforms
        except ppc where it is a static leaf function.

svn path=/trunk/mono/; revision=110289

ChangeLog
pthread_support.c

index 338e4bc9e4683ae8d5babad51ceae84e65dacdc4..4cf4cd880b7fc24c06fcd4b146bb71b789d97460 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-08-12  Geoff Norton  <gnorton@novell.com>
+
+       * pthread_support.c: GCC shipped with SLES9 ppc gets confused with our current
+       GC_setspecific define.  Unfold the define into a static inline on all platforms
+       except ppc where it is a static leaf function.
+
 2008-08-10  Zoltan Varga  <vargaz@gmail.com>
 
        * include/private/gc_locks.h: Add amd64 support so parallel mark works on
index 7b0c084e8bb86beaea6f058c03d3d344f5abe5b1..11d2cd6ad71514caa514d0312522247a9eca5b16 100644 (file)
       typedef pthread_key_t GC_key_t;
 #   endif
 #   if defined(USE_COMPILER_TLS)
+/* Note sles9 gcc on powerpc gets confused by the define to set GC_thread_tls and pthread_setspecific
+ * so we actually use a static inline function decalred below that is equivalent to:
+ *   define GC_setspecific(key, v) (GC_thread_tls = (v), pthread_setspecific ((key), (v)))
+ */
 #     define GC_getspecific(x) (GC_thread_tls)
-#     define GC_setspecific(key, v) (GC_thread_tls = (v), pthread_setspecific ((key), (v)))
 #     define GC_key_create pthread_key_create
       typedef pthread_key_t GC_key_t;
 #   endif
@@ -191,14 +194,19 @@ static
 GC_key_t GC_thread_key;
 
 #ifdef USE_COMPILER_TLS
+__thread MONO_TLS_FAST void* GC_thread_tls;
+
 /*
  * gcc errors out with /tmp/ccdPMFuq.s:2994: Error: symbol `.LTLS4' is already defined
- * if the static is removed on ppc.
+ * if the inline is added on powerpc
  */
-#if defined(__ppc__) || defined(__powerpc__)
-static
+#if !defined(__ppc__) && !defined(__powerpc__)
+inline
 #endif
-__thread MONO_TLS_FAST void* GC_thread_tls;
+static int GC_setspecific (GC_key_t key, void *value) {
+       GC_thread_tls = value;
+       return pthread_setspecific (key, value);
+}
 #endif
 
 static GC_bool keys_initialized;