From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1843 invoked by alias); 30 Aug 2004 09:19:01 -0000 Mailing-List: contact libc-hacker-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-hacker-owner@sources.redhat.com Received: (qmail 1808 invoked from network); 30 Aug 2004 09:18:58 -0000 Received: from unknown (HELO sunsite.ms.mff.cuni.cz) (195.113.15.26) by sourceware.org with SMTP; 30 Aug 2004 09:18:58 -0000 Received: from sunsite.ms.mff.cuni.cz (sunsite.mff.cuni.cz [127.0.0.1]) by sunsite.ms.mff.cuni.cz (8.12.8/8.12.8) with ESMTP id i7U71C3j011103; Mon, 30 Aug 2004 09:01:12 +0200 Received: (from jakub@localhost) by sunsite.ms.mff.cuni.cz (8.12.8/8.12.8/Submit) id i7U71BO2011101; Mon, 30 Aug 2004 09:01:11 +0200 Date: Mon, 30 Aug 2004 09:19:00 -0000 From: Jakub Jelinek To: Ulrich Drepper Cc: Glibc hackers Subject: [PATCH] Fix NPTL x86-64 headers for -m32 compilation Message-ID: <20040830070111.GB30497@sunsite.ms.mff.cuni.cz> Reply-To: Jakub Jelinek Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.1i X-SW-Source: 2004-08/txt/msg00081.txt.bz2 Hi! Seems compiling against NPTL pthread.h/semaphore.h on x86-64 with -m32 doesn't DTRT. 2004-08-30 Jakub Jelinek * sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h: Include bits/wordsize.h. Make the header match i386 header when __WORDSIZE != 64. * sysdeps/unix/sysv/linux/x86_64/bits/semaphore.h: Likewise. --- libc/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h.jj 2004-06-11 14:45:54.000000000 +0200 +++ libc/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h 2004-08-30 11:11:48.883542018 +0200 @@ -20,15 +20,29 @@ #ifndef _BITS_PTHREADTYPES_H #define _BITS_PTHREADTYPES_H 1 -#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 -#define __SIZEOF_PTHREAD_BARRIER_T 32 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 +#include + +#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 +# define __SIZEOF_PTHREAD_BARRIER_T 32 +# define __SIZEOF_PTHREAD_BARRIERATTR_T 4 +#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 +# define __SIZEOF_PTHREAD_BARRIER_T 20 +# define __SIZEOF_PTHREAD_BARRIERATTR_T 4 +#endif /* Thread identifiers. The structure of the attribute type is not @@ -52,10 +66,15 @@ typedef union int __lock; unsigned int __count; int __owner; +#if __WORDSIZE == 64 unsigned int __nusers; +#endif /* KIND must stay at this position in the structure to maintain binary compatibility. */ int __kind; +#if __WORDSIZE != 64 + unsigned int __nusers; +#endif int __spins; } __data; char __size[__SIZEOF_PTHREAD_MUTEX_T]; @@ -85,7 +104,7 @@ typedef union unsigned int __broadcast_seq; } __data; char __size[__SIZEOF_PTHREAD_COND_T]; - long int __align; + long long int __align; } pthread_cond_t; typedef union @@ -108,6 +127,7 @@ typedef int pthread_once_t; structure of the attribute type is not exposed on purpose. */ typedef union { +# if __WORDSIZE == 64 struct { int __lock; @@ -124,6 +144,21 @@ typedef union binary compatibility. */ unsigned int __flags; } __data; +# else + struct + { + int __lock; + unsigned int __nr_readers; + unsigned int __readers_wakeup; + unsigned int __writer_wakeup; + unsigned int __nr_readers_queued; + unsigned int __nr_writers_queued; + /* FLAGS must stay at this position in the structure to maintain + binary compatibility. */ + unsigned int __flags; + int __writer; + } __data; +# endif char __size[__SIZEOF_PTHREAD_RWLOCK_T]; long int __align; } pthread_rwlock_t; --- libc/nptl/sysdeps/unix/sysv/linux/x86_64/bits/semaphore.h.jj 2004-04-20 19:03:26.000000000 +0200 +++ libc/nptl/sysdeps/unix/sysv/linux/x86_64/bits/semaphore.h 2004-08-30 11:05:13.377347474 +0200 @@ -21,8 +21,13 @@ # error "Never use directly; include instead." #endif +#include -#define __SIZEOF_SEM_T 32 +#if __WORDSIZE == 64 +# define __SIZEOF_SEM_T 32 +#else +# define __SIZEOF_SEM_T 16 +#endif /* Value returned if `sem_open' failed. */ Jakub