cvs commit: src/contrib/gcc gthr-posix.h

Marius Strobl marius at FreeBSD.org
Sat Jan 5 14:58:51 PST 2008


marius      2008-01-05 22:58:51 UTC

  FreeBSD src repository

  Modified files:        (Branch: RELENG_7)
    contrib/gcc          gthr-posix.h 
  Log:
  On FreeBSD GCC 4.2.x checks for the existence of pthread_cancel() in
  order to determine whether a program is running with multithreading
  support. This check causes __gthread_active_p() to always return 1
  however, regardless of whether the program was actually compiled with
  -pthread or not, due to the fact that the FreeBSD libc contains a
  pthread_cancel() stub. Fix this by using the __gthread_active_p()
  version that GCC uses for Solaris and which actively checks for a
  working POSIX threads implementation (if such functions exist) instead
  of checking for the mere existence of corresponding functions.
  
  On platforms without TLS support, i.e. on arm and sparc64 due to the
  lack of GNU TLS support for these archs in binutils 2.15., the false
  positives returned by __gthread_active_p() for non-threaded programs
  cause the exception handling implementation GCC uses in this case to
  crash. This is because GCC assumes that the POSIX threading functions
  actually work when __gthread_active_p() returns 1 while in fact the
  corresponding stubs in libc just immediately return.
  Given that __gthread_active_p() is also used in a couple of other
  places besides exception handling, this bug has great potential to
  also cause problems in other areas and on all archs.
  
  This is committed to RELENG_7 directly in order to get a fix into
  RELENG_7_0 as soon as possible while allowing to loop the official
  fix back into the vendor branch and not taking gthr-posix.h off the
  vendor branch in HEAD.
  
  PR:             119289
  Reviewed by:    obrien (plus style fix)
  Approved by:    re (kensmith)
  
  Revision     Changes    Path
  1.1.1.8.2.1  +7 -4      src/contrib/gcc/gthr-posix.h


More information about the cvs-src mailing list