On Fri, Feb 29, 2008 at 9:36 AM, Nicholas Nethercote
<[EMAIL PROTECTED]> wrote:
> On Thu, 28 Feb 2008 [EMAIL PROTECTED] wrote:
>
>  > Modified: trunk/exp-drd/drd_intercepts.c
>  > ===================================================================
>  > --- trunk/exp-drd/drd_intercepts.c    2008-02-28 01:36:38 UTC (rev 7495)
>  > +++ trunk/exp-drd/drd_intercepts.c    2008-02-28 07:36:04 UTC (rev 7496)
>  > @@ -116,7 +116,17 @@
>  >
>  > static MutexT mutex_type(pthread_mutex_t* mutex)
>  > {
>  > -   return pthread_to_drd_mutex_type(mutex->__data.__kind);
>  > +#if defined(_PTHREAD_DESCR_DEFINED)
>  > +   // Linuxthreads.
>  > +   const int kind = mutex->__m_kind;
>  > +#elif defined(__SIZEOF_PTHREAD_MUTEX_T)
>  > +   // NPTL.
>  > +   const int kind = mutex->__data.__kind;
>  > +#else
>  > +   // Another POSIX threads implementation. Regression tests will fail.
>  > +   const int kind = PTHREAD_MUTEX_DEFAULT;
>  > +#endif
>  > +   return pthread_to_drd_mutex_type(kind);
>  > }
>
>  I'd be inclined to make the 'else' case abort -- if you don't know what it
>  is, don't pretend to know...

I'm not entirely happy myself with the above code -- there is e.g. no
standard that guarantees that if the macro _PTHREAD_DESCR_DEFINED is
defined, that pthread_mutex_t has a data member with the name
__m_kind. And in the code above the name PTHREAD_MUTEX_ADAPTIVE_NP is
used, which also may cause portability issues. One possible solution
is that I add configure test that check for the following:
* If the expression &((pthread_mutex_t*)0)->__m_kind compiles, define
HAVE_PTHREAD_MUTEX_T__M_KIND.
* If the expression &((pthread_mutex_t*)0)->__data.__kind compiles,
define HAVE_PTHREAD_MUTEX_T__DATA__KIND.
* If the expression PTHREAD_MUTEX_ADAPTIVE_NP compiles, define
HAVE_PTHREAD_MUTEX_ADAPTIVE_NP.
Since the above tests only test whether or not compilation succeeds,
these tests should also work fine when cross-compiling Valgrind.

Bart.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Valgrind-developers mailing list
Valgrind-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-developers

Reply via email to