This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH]: add tests for pthread initialization macros


Kaveh R. Ghazi wrote:

However, I would wait until your "fixes" for these macros are
installed before updating the testsuite.  That's what I did.

After that, yes please install this one.



Attached to this message, please find a follow-up patch that fixes all remaining glibc mutex initializers.

Patch was bootstrapped on x86_64-pc-linux-gnu and fixes all compile-time warnings during bootstrap, including all compile-time warnings in libstdc++ build. Additionally, patched gcc passes updated gcc.dg/pthread-init-[12].c tests.

As a test text, full glibc-2.3.5 definitions are included. The fixed result is exactly what newer glibcs provide for mutex initializers.

2006-10-01 Uros Bizjak <uros@kss-loka.si>

       * inclhack.def (glibc_mutex_init): Also fix
       PTHREAD_MUTEX_(RECURSIVE|ERRORCHECK|ADAPTIVE)_NP and
       PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP initializers.
       * tests/base/pthread.h: Update.

* fixincl.x: Regenerate.

Uros.
Index: inclhack.def
===================================================================
--- inclhack.def	(revision 117343)
+++ inclhack.def	(working copy)
@@ -1298,6 +1298,8 @@
     select   = '\{ *\{ *0, *\} *\}';
     sed      = "/define[ \t]\\+PTHREAD_MUTEX_INITIALIZER[ \t]*\\\\/,+1"
                "s/{ { 0, } }/{ { 0, 0, 0, 0, 0, 0 } }/";
+    sed      = "s/{ \\(0, 0, 0, 0, PTHREAD_MUTEX_\\(RECURSIVE\\|ERRORCHECK\\|ADAPTIVE\\)_NP\\) }/{ \\1, 0 }/\n"
+               "s/{ \\(0, 0, 0, PTHREAD_MUTEX_\\(RECURSIVE\\|ERRORCHECK\\|ADAPTIVE\\)_NP\\) }/{ \\1, 0, 0 }/";
     sed      = "/define[ \t]\\+PTHREAD_RWLOCK_INITIALIZER[ \t]*\\\\/"
                "N;s/^[ \t]*#[ \t]*"
                "\\(define[ \t]\\+PTHREAD_RWLOCK_INITIALIZER[ \t]*\\\\\\)\\n"
@@ -1308,14 +1310,42 @@
                "#  \\1\\n"
                "  { { 0, 0, 0, 0, 0, 0, 0, 0 } }\\n"
                "# endif/";
+    sed      = "s/{ \\(0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP\\) }/{ \\1, 0 }/";
     sed      = "/define[ \t]\\+PTHREAD_COND_INITIALIZER/"
                "s/{ { 0, } }/{ { 0, 0, 0, 0, 0, (void *) 0, 0, 0 } }/";
 
     test_text =
     "#define PTHREAD_MUTEX_INITIALIZER \\\\\n"
     "  { { 0, } }\n"
+    "#ifdef __USE_GNU\n"
+    "# if __WORDSIZE == 64\n"
+    "#  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \\\\\n"
+    "  { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP } }\n"
+    "#  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \\\\\n"
+    "  { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP } }\n"
+    "#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \\\\\n"
+    "  { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP } }\n"
+    "# else\n"
+    "#  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \\\\\n"
+    "  { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP } }\n"
+    "#  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \\\\\n"
+    "  { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP } }\n"
+    "#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \\\\\n"
+    "  { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP } }\n"
+    "# endif\n"
+    "#endif\n"
     "# define PTHREAD_RWLOCK_INITIALIZER \\\\\n"
     "  { { 0, } }\n"
+    "# ifdef __USE_GNU\n"
+    "#  if __WORDSIZE == 64\n"
+    "#   define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \\\\\n"
+    "  { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,					      \\\\\n"
+    "      PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }\n"
+    "#  else\n"
+    "#   define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \\\\\n"
+    "  { { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }\n"
+    "#  endif\n"
+    "# endif\n"
     "#define PTHREAD_COND_INITIALIZER { { 0, } }";
 };
 
Index: tests/base/pthread.h
===================================================================
--- tests/base/pthread.h	(revision 117343)
+++ tests/base/pthread.h	(working copy)
@@ -59,13 +59,40 @@
 #if defined( GLIBC_MUTEX_INIT_CHECK )
 #define PTHREAD_MUTEX_INITIALIZER \
   { { 0, 0, 0, 0, 0, 0 } }
+#ifdef __USE_GNU
 # if __WORDSIZE == 64
+#  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0 } }
+#  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0 } }
+#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0 } }
+# else
+#  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, 0 } }
+#  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, 0 } }
+#  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
+  { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, 0 } }
+# endif
+#endif
+# if __WORDSIZE == 64
 #  define PTHREAD_RWLOCK_INITIALIZER \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
 # else
 #  define PTHREAD_RWLOCK_INITIALIZER \
   { { 0, 0, 0, 0, 0, 0, 0, 0 } }
 # endif
+# ifdef __USE_GNU
+#  if __WORDSIZE == 64
+#   define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
+  { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,					      \
+      PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }
+#  else
+#   define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
+  { { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, 0 } }
+#  endif
+# endif
 #define PTHREAD_COND_INITIALIZER { { 0, 0, 0, 0, 0, (void *) 0, 0, 0 } }
 #endif  /* GLIBC_MUTEX_INIT_CHECK */
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]