From patchwork Tue Jun 23 17:50:52 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Juan Manuel Torres Palma X-Patchwork-Id: 487758 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 1911B14012C for ; Wed, 24 Jun 2015 03:51:05 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=sourceware.org header.i=@sourceware.org header.b=Kro7CEsB; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:date:message-id:subject:from:to :content-type; q=dns; s=default; b=vFd/JCQUmJUX8Jizp8F4nXPW+nn0C V39tKjoMqcaB0dwBzBdFZWx6aupsdg7foqw1jZWfBzmvdNCmWdRgboedUN6nMHzz bU3MfxXbJcMCOcu/z4GlMQEX28OsFP7Mk8xAMLHJPiCSrB0P6dcFw6Z6CEHAoilW ueIDK+YurjRwkg= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:date:message-id:subject:from:to :content-type; s=default; bh=ct8IkmHj6dF2Yh6N19ohZBnug38=; b=Kro 7CEsBY4vzPV/1Q+M84u9dnrNY+7Jyn0xlpG/Wxc9rtZHt/xonDFwBlc3ESE0uTNJ 5L9H5bhgv6b5wnHixFRzcsBTlS5OenZTL8AKNSHCRadjN9PPaukMbcK88Ks7m5G+ OunKQFIKuyiePHtuuSplwtII7Cb2V3boFDqQLHOs= Received: (qmail 83858 invoked by alias); 23 Jun 2015 17:50:58 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 83839 invoked by uid 89); 23 Jun 2015 17:50:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-vn0-f45.google.com MIME-Version: 1.0 X-Received: by 10.52.171.199 with SMTP id aw7mr24224838vdc.87.1435081852913; Tue, 23 Jun 2015 10:50:52 -0700 (PDT) Date: Tue, 23 Jun 2015 19:50:52 +0200 Message-ID: Subject: [PATCH] Clean pthread types namespaces on x86 and x86_64 From: Juan Manuel Torres Palma To: libc-alpha 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 * 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 . (__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 From 140d97e40a56cb3b3e70c21fc0526dc484c59407 Mon Sep 17 00:00:00 2001 From: Juan Manuel Torres Palma 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 + . */ + + +/* 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 + +/* 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 + . */ + +/* 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 + +#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 +#include #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