This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH]: add tests for pthread initialization macros
- From: Uros Bizjak <ubizjak at gmail dot com>
- To: "Kaveh R. Ghazi" <ghazi at caipclassic dot rutgers dot edu>
- Cc: Bruce Korb <bruce dot korb at gmail dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Sun, 01 Oct 2006 12:54:02 +0200
- Subject: Re: [PATCH]: add tests for pthread initialization macros
- References: <451AD9A7.9020709@gmail.com> <200609280110.k8S1ApVG029530@caipclassic.rutgers.edu> <451BFC34.2060402@gmail.com> <200609281756.k8SHuxl8009608@caipclassic.rutgers.edu> <200609292001.k8TK1BC7025677@caipclassic.rutgers.edu> <451E5953.6040202@gmail.com> <200609301453.k8UEr8Pv027554@caipclassic.rutgers.edu> <451E890B.7030909@gmail.com> <200609301524.k8UFO67J027676@caipclassic.rutgers.edu>
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 */