This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc 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]

[PATCH] Clean pthread types namespaces on x86 and x86_64


This patch creates the file bits/pthread_ct.h which contains types
pthread_mutex_t and pthread_cond_t, that were previously in
pthreadtypes.h. The actual structure declaration
is in pthread_st.h, that stands for specific types, so now when
creating mtx_t and cnd_t structs, namespaces won't be corrupted.

It's my first ever patch so I wanted it to be a small one. A few more
are coming in the next couple days. I'm not sure if the patch format
is ok, if it isn't let me know and how to fix it. I attach the
changelog too because gmail doesn't allow me to use tabs here.

Cheers.

Tested for x86_64.

2015-06-23  Juan Manuel Torres Palma  <jmtorrespalma@gmail.com>

    * posix/Makefile (headers): Add files bits/pthread_ct.h and
    bits/pthread_st.h to this variable.
    * bits/pthread_ct: New file.
    (pthread_mutex_t): Move struct definition.
    (pthread_cond_t): Likewise.
    * sysdeps/x86/bits/pthread_st.h: New file.
    (__SIZEOF_PTHREAD_MUTEX_T): Definition.
    (__SIZEOF_PTHREAD_COND_T): Likewise.
    (__pthread_list_t) [__x86_64__]: Likewise.
    (__pthread_slist_t) [!__x86_64__]: Likewise.
    (__pthread_mutex_s): Likewise.
    (__PTHREAD_MUTEX_T_CONTENT): Likewise.
    (__PTHREAD_COND_T_CONTENT): Likewise.
    (__PTHREAD_MUTEX_HAVE_PREV)[__x86_64__]: Likewise
    (__elision)[!__x86_64__]: Likewise
    (__spins)[!__x86_64__]: Likewise
    (__PTHREAD_SPINS): Likewise
    * sysdeps/x86/bits/pthread_st.h: Include <bits/pthread_ct.h>.
    (__SIZEOF_PTHREAD_MUTEX_T): Remove.
    (__SIZEOF_PTHREAD_COND_T): Likewise.
    (__pthread_list_t): Likewise.
    (__pthread_slist_t): Likewise.
    (__pthread_mutex_s): Likewise.
    (__PTHREAD_MUTEX_T_CONTENT): Likewise.
    (__PTHREAD_COND_T_CONTENT): Likewise.
    (__PTHREAD_MUTEX_HAVE_PREV): Likewise
    (__elision): Likewise
    (__spins): Likewise
    (__PTHREAD_SPINS): Likewise

-- 
Juan Manuel Torres Palma.
Computer Science Student at Universidad de Granada.
From 140d97e40a56cb3b3e70c21fc0526dc484c59407 Mon Sep 17 00:00:00 2001
From: Juan Manuel Torres Palma <jmtorrespalma@gmail.com>
Date: Tue, 23 Jun 2015 17:54:25 +0200
Subject: [PATCH] Clean pthread types namespaces on x86 and x86_64

This patch creates the file bits/pthread_ct.h which contains types
pthread_mutex_t and pthread_cond_t, that were previously in
pthreadtypes.h. The actual structure declaration
is in pthread_st.h, that stands for specific types, so now when
creating mtx_t and cnd_t structs, namespaces won't be corrupted.
---
 bits/pthread_ct.h               |  43 +++++++++++++++
 posix/Makefile                  |   3 +-
 sysdeps/x86/bits/pthread_st.h   | 116 ++++++++++++++++++++++++++++++++++++++++
 sysdeps/x86/bits/pthreadtypes.h |  76 +-------------------------
 4 files changed, 162 insertions(+), 76 deletions(-)
 create mode 100644 bits/pthread_ct.h
 create mode 100644 sysdeps/x86/bits/pthread_st.h

diff --git a/bits/pthread_ct.h b/bits/pthread_ct.h
new file mode 100644
index 0000000..4f7cfef
--- /dev/null
+++ b/bits/pthread_ct.h
@@ -0,0 +1,43 @@
+/* Copyright (C) 2002-2015 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+
+/* Declaration of common pthread types for all architectures.
+   Macros *_CONTENT are architecture dependent and defined in
+   bits/pthread_st.h */
+
+#ifndef _BITS_THREAD_CT_H
+# define _BITS_THREAD_CT_H	1
+
+# include <bits/pthread_st.h>
+
+/* Common definition of pthread_mutex_t. */
+
+typedef union
+{
+	__PTHREAD_MUTEX_T_CONTENT
+} pthread_mutex_t;
+
+
+/* Common definition of pthread_cond_t. */
+
+typedef union
+{
+	__PTHREAD_COND_T_CONTENT
+} pthread_cond_t;
+
+#endif /* _BITS_THREAD_CT_H */
diff --git a/posix/Makefile b/posix/Makefile
index 15e8818..eabe3ff 100644
--- a/posix/Makefile
+++ b/posix/Makefile
@@ -29,7 +29,8 @@ headers	:= sys/utsname.h sys/times.h sys/wait.h sys/types.h unistd.h	      \
 	   bits/local_lim.h tar.h bits/utsname.h bits/confname.h	      \
 	   bits/waitflags.h bits/waitstatus.h sys/unistd.h sched.h	      \
 	   bits/sched.h re_comp.h wait.h bits/environments.h cpio.h	      \
-	   sys/sysmacros.h spawn.h bits/unistd.h
+	   sys/sysmacros.h spawn.h bits/unistd.h bits/pthread_st.h        \
+	   bits/pthread_ct.h
 
 routines :=								      \
 	uname								      \
diff --git a/sysdeps/x86/bits/pthread_st.h b/sysdeps/x86/bits/pthread_st.h
new file mode 100644
index 0000000..e64d194
--- /dev/null
+++ b/sysdeps/x86/bits/pthread_st.h
@@ -0,0 +1,116 @@
+/* Copyright (C) 2002-2015 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This header contains macros definition required for 
+   the declaration of pthread_mutex_t and pthread_cond_t, 
+   both needed by C11 types mtx_t and cnd_t. */
+
+#ifndef _BITS_PTHREAD_ST_H
+#define _BITS_PTHREAD_ST_H	1
+
+#include <bits/wordsize.h>
+
+#ifdef __x86_64__
+# if __WORDSIZE == 64
+#  define __SIZEOF_PTHREAD_MUTEX_T 40
+#  define __SIZEOF_PTHREAD_COND_T 48
+# else
+#  define __SIZEOF_PTHREAD_MUTEX_T 32
+#  define __SIZEOF_PTHREAD_COND_T 48
+# endif
+#else
+# define __SIZEOF_PTHREAD_MUTEX_T 24
+# define __SIZEOF_PTHREAD_COND_T 48
+#endif
+
+#ifdef __x86_64__
+typedef struct __pthread_internal_list
+{
+  struct __pthread_internal_list *__prev;
+  struct __pthread_internal_list *__next;
+} __pthread_list_t;
+#else
+typedef struct __pthread_internal_slist
+{
+  struct __pthread_internal_slist *__next;
+} __pthread_slist_t;
+#endif
+
+
+/* Data structure for mutex handling. */
+
+  struct __pthread_mutex_s
+  {
+    int __lock;
+    unsigned int __count;
+    int __owner;
+#ifdef __x86_64__
+    unsigned int __nusers;
+#endif
+    /* KIND must stay at this position in the structure to maintain
+       binary compatibility.  */
+    int __kind;
+#ifdef __x86_64__
+    short __spins;
+    short __elision;
+    __pthread_list_t __list;
+# define __PTHREAD_MUTEX_HAVE_PREV	1
+/* Mutex __spins initializer used by PTHREAD_MUTEX_INITIALIZER.  */
+# define __PTHREAD_SPINS             0, 0
+#else
+    unsigned int __nusers;
+    __extension__ union
+    {
+      struct
+      {
+	    short __espins;
+	    short __elision;
+# define __spins __elision_data.__espins
+# define __elision __elision_data.__elision
+# define __PTHREAD_SPINS         { 0, 0 }
+      } __elision_data;
+      __pthread_slist_t __list;
+    };
+#endif
+  };
+
+
+# define __PTHREAD_MUTEX_T_CONTENT            \
+  struct __pthread_mutex_s __data;            \
+  char __size[__SIZEOF_PTHREAD_MUTEX_T];      \
+  long int __align;
+
+
+/* Data structure for conditional variable handling */
+
+#define __PTHREAD_COND_T_CONTENT                          \
+  struct                                                  \
+  {                                                       \
+    int __lock;                                           \
+    unsigned int __futex;                                 \
+    __extension__ unsigned long long int __total_seq;     \
+    __extension__ unsigned long long int __wakeup_seq;    \
+    __extension__ unsigned long long int __woken_seq;     \
+    void *__mutex;                                        \
+    unsigned int __nwaiters;                              \
+    unsigned int __broadcast_seq;                         \
+  } __data;                                               \
+  char __size[__SIZEOF_PTHREAD_COND_T];                   \
+  __extension__ long long int __align;
+
+
+#endif	/* bits/pthread_st.h */
diff --git a/sysdeps/x86/bits/pthreadtypes.h b/sysdeps/x86/bits/pthreadtypes.h
index 4460615..ccb73b0 100644
--- a/sysdeps/x86/bits/pthreadtypes.h
+++ b/sysdeps/x86/bits/pthreadtypes.h
@@ -19,13 +19,12 @@
 #define _BITS_PTHREADTYPES_H	1
 
 #include <bits/wordsize.h>
+#include <bits/pthread_ct.h>
 
 #ifdef __x86_64__
 # if __WORDSIZE == 64
 #  define __SIZEOF_PTHREAD_ATTR_T 56
-#  define __SIZEOF_PTHREAD_MUTEX_T 40
 #  define __SIZEOF_PTHREAD_MUTEXATTR_T 4
-#  define __SIZEOF_PTHREAD_COND_T 48
 #  define __SIZEOF_PTHREAD_CONDATTR_T 4
 #  define __SIZEOF_PTHREAD_RWLOCK_T 56
 #  define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
@@ -33,9 +32,7 @@
 #  define __SIZEOF_PTHREAD_BARRIERATTR_T 4
 # else
 #  define __SIZEOF_PTHREAD_ATTR_T 32
-#  define __SIZEOF_PTHREAD_MUTEX_T 32
 #  define __SIZEOF_PTHREAD_MUTEXATTR_T 4
-#  define __SIZEOF_PTHREAD_COND_T 48
 #  define __SIZEOF_PTHREAD_CONDATTR_T 4
 #  define __SIZEOF_PTHREAD_RWLOCK_T 44
 #  define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
@@ -44,9 +41,7 @@
 # endif
 #else
 # define __SIZEOF_PTHREAD_ATTR_T 36
-# define __SIZEOF_PTHREAD_MUTEX_T 24
 # define __SIZEOF_PTHREAD_MUTEXATTR_T 4
-# define __SIZEOF_PTHREAD_COND_T 48
 # define __SIZEOF_PTHREAD_CONDATTR_T 4
 # define __SIZEOF_PTHREAD_RWLOCK_T 32
 # define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
@@ -71,61 +66,8 @@ typedef union pthread_attr_t pthread_attr_t;
 #endif
 
 
-#ifdef __x86_64__
-typedef struct __pthread_internal_list
-{
-  struct __pthread_internal_list *__prev;
-  struct __pthread_internal_list *__next;
-} __pthread_list_t;
-#else
-typedef struct __pthread_internal_slist
-{
-  struct __pthread_internal_slist *__next;
-} __pthread_slist_t;
-#endif
-
-
 /* Data structures for mutex handling.  The structure of the attribute
    type is not exposed on purpose.  */
-typedef union
-{
-  struct __pthread_mutex_s
-  {
-    int __lock;
-    unsigned int __count;
-    int __owner;
-#ifdef __x86_64__
-    unsigned int __nusers;
-#endif
-    /* KIND must stay at this position in the structure to maintain
-       binary compatibility.  */
-    int __kind;
-#ifdef __x86_64__
-    short __spins;
-    short __elision;
-    __pthread_list_t __list;
-# define __PTHREAD_MUTEX_HAVE_PREV	1
-/* Mutex __spins initializer used by PTHREAD_MUTEX_INITIALIZER.  */
-# define __PTHREAD_SPINS             0, 0
-#else
-    unsigned int __nusers;
-    __extension__ union
-    {
-      struct
-      {
-	short __espins;
-	short __elision;
-# define __spins __elision_data.__espins
-# define __elision __elision_data.__elision
-# define __PTHREAD_SPINS         { 0, 0 }
-      } __elision_data;
-      __pthread_slist_t __list;
-    };
-#endif
-  } __data;
-  char __size[__SIZEOF_PTHREAD_MUTEX_T];
-  long int __align;
-} pthread_mutex_t;
 
 typedef union
 {
@@ -136,22 +78,6 @@ typedef union
 
 /* Data structure for conditional variable handling.  The structure of
    the attribute type is not exposed on purpose.  */
-typedef union
-{
-  struct
-  {
-    int __lock;
-    unsigned int __futex;
-    __extension__ unsigned long long int __total_seq;
-    __extension__ unsigned long long int __wakeup_seq;
-    __extension__ unsigned long long int __woken_seq;
-    void *__mutex;
-    unsigned int __nwaiters;
-    unsigned int __broadcast_seq;
-  } __data;
-  char __size[__SIZEOF_PTHREAD_COND_T];
-  __extension__ long long int __align;
-} pthread_cond_t;
 
 typedef union
 {
-- 
2.1.0

Attachment: ChangeLog-0001
Description: Binary data


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