Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Feb 2021 22:52:00 +0200
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        John Baldwin <jhb@freebsd.org>
Cc:        src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org
Subject:   Re: git: 24fd63e0970f - main - mips: Don't set __NO_TLS to disable some uses of TLS.
Message-ID:  <YC7TcMtrg8r7eAuL@kib.kiev.ua>
In-Reply-To: <9687575c-dd7c-1496-850b-2018f4bca3da@FreeBSD.org>
References:  <202102180035.11I0ZnL3070354@gitrepo.freebsd.org> <9687575c-dd7c-1496-850b-2018f4bca3da@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Feb 17, 2021 at 04:48:22PM -0800, John Baldwin wrote:
> On 2/17/21 4:35 PM, John Baldwin wrote:
> > The branch main has been updated by jhb:
> > 
> > URL: https://cgit.FreeBSD.org/src/commit/?id=24fd63e0970f91189dd2acde987bd2e4c8c04a50
> > 
> > commit 24fd63e0970f91189dd2acde987bd2e4c8c04a50
> > Author:     John Baldwin <jhb@FreeBSD.org>
> > AuthorDate: 2021-02-18 00:34:23 +0000
> > Commit:     John Baldwin <jhb@FreeBSD.org>
> > CommitDate: 2021-02-18 00:34:23 +0000
> > 
> >      mips: Don't set __NO_TLS to disable some uses of TLS.
> >      __NO_TLS was originally added to disable use of _Thread in the locale
> >      code in libc in 82dd5016bd749d1d9e1531bd1703aebeecceab34.  At the time
> >      libc did not support TLS on MIPS (I believe), but TLS support was
> >      added to libc (at least _set_tp.c) for MIPS about a month after
> >      __NO_TLS was added, but __NO_TLS was still left around.
> >      Reviewed by:    imp
> >      Sponsored by:   DARPA
> >      Differential Revision:  https://reviews.freebsd.org/D28713
> > ---
> >   sys/sys/cdefs.h | 3 +--
> >   1 file changed, 1 insertion(+), 2 deletions(-)
> > 
> > diff --git a/sys/sys/cdefs.h b/sys/sys/cdefs.h
> > index 64f26480a2f5..ff18911f6acf 100644
> > --- a/sys/sys/cdefs.h
> > +++ b/sys/sys/cdefs.h
> > @@ -768,8 +768,7 @@
> >   #endif
> >   #endif /* __STDC_WANT_LIB_EXT1__ */
> > -#if defined(__mips) || \
> > -    (defined(__powerpc64__) && (!defined(_CALL_ELF) || _CALL_ELF == 1))
> > +#if defined(__powerpc64__) && (!defined(_CALL_ELF) || _CALL_ELF == 1)
> >   #define	__NO_TLS 1
> >   #endif
> 
> It would be really nice to kill __NO_TLS entirely.  There is at least one
> unconditional use of _Thread_local (sorry, should have used that instead
> of _Thread above) in libc in stdlib/cxa_thread_atexit_impl.c, so it seems
> highly unlikely that TLS is actually broken on any of our platforms as the
> libc build would have been broken instead.

There is a difference between compile and runtime.  The mentioned libc
use in cxa_thread_atexit_impl.c is to support some (I believe) rarely
used C++ feature of thread-local storage with destructors, so it might
be simply not observed often.  OTOH, locale functions infect almost
everything string-related in libc, so the breakage would be quite
visible.

But, I wonder, what does CALL_ELF mean?  Is it for old 64bit PowerPC ABI,
that was abandoned with the switch to ELFv2?



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?YC7TcMtrg8r7eAuL>