NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: lib/49989: libc++ fails to build with g++ 5.1 due to libpthread volatiles



The following reply was made to PR lib/49989; it has been noted by GNATS.

From: Antti Kantee <pooka%iki.fi@localhost>
To: gnats-bugs%NetBSD.org@localhost, lib-bug-people%netbsd.org@localhost, 
 gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost
Cc: 
Subject: Re: lib/49989: libc++ fails to build with g++ 5.1 due to libpthread
 volatiles
Date: Sat, 20 Jun 2015 16:12:15 +0000

 Thanks, Christos!
 
 I'll ask the submitter to test.
 
 On 20/06/15 16:05, Christos Zoulas wrote:
 >   Index: pthread_types.h
 >   ===================================================================
 >   RCS file: /cvsroot/src/lib/libpthread/pthread_types.h,v
 >   retrieving revision 1.13
 >   diff -u -u -r1.13 pthread_types.h
 >   --- pthread_types.h	2 Aug 2008 19:46:30 -0000	1.13
 >   +++ pthread_types.h	20 Jun 2015 16:03:04 -0000
 >   @@ -84,6 +84,23 @@
 >    };
 >
 >    /*
 >   + * libc++ expects to be using PTHREAD_MUTEX_INITIALIZER as a member
 >   + * initializer. This does not work for volatile types. Since c++
 >   + * does not touch the guts of those types, we redefine them as non-volatile
 >   + */
 >   +#ifdef __cplusplus
 >   +# ifdef __CPU_SIMPLE_LOCK_PAD
 >   +#  define __pthread_mutex_spin_t unsigned char
 >   +# else
 >   +#  define __pthread_mutex_spin_t unsigned int
 >   +# endif
 >   +# define __pthread_mutex_volatile
 >   +#else
 >   +# define __pthread_mutex_spin_t pthread_spin_t
 >   +# define __pthread_mutex_volatile volatile
 >   +#endif
 >   +
 >   +/*
 >     * ptm_owner is the actual lock field which is locked via CAS operation.
 >     * This structure's layout is designed to compatible with the previous
 >     * version used in SA pthreads.
 >   @@ -100,16 +117,16 @@
 >    #endif
 >    struct	__pthread_mutex_st {
 >    	unsigned int	ptm_magic;
 >   -	pthread_spin_t	ptm_errorcheck;
 >   +	__pthread_mutex_spin_t	ptm_errorcheck;
 >    #ifdef __CPU_SIMPLE_LOCK_PAD
 >    	uint8_t		ptm_pad1[3];
 >    #endif
 >   -	pthread_spin_t	ptm_interlock;	/* unused - backwards compat */
 >   +	__pthread_mutex_spin_t	ptm_interlock;	/* unused - backwards compat */
 >    #ifdef __CPU_SIMPLE_LOCK_PAD
 >    	uint8_t		ptm_pad2[3];
 >    #endif
 >   -	volatile pthread_t ptm_owner;
 >   -	pthread_t * volatile ptm_waiters;
 >   +	__pthread_mutex_volatile pthread_t ptm_owner;
 >   +	pthread_t * __pthread_mutex_volatile ptm_waiters;
 >    	unsigned int	ptm_recursed;
 >    	void		*ptm_spare2;	/* unused - backwards compat */
 >    };
 >
 >
 


Home | Main Index | Thread Index | Old Index