[PATCH v2] libgcc, libstdc++: Make TU-local declarations in headers external linkage [PR115126]
Jonathan Wakely
jwakely.gcc@gmail.com
Thu Sep 26 22:50:30 GMT 2024
On Thu, 26 Sept 2024 at 13:07, Jakub Jelinek <jakub@redhat.com> wrote:
>
> On Thu, Sep 26, 2024 at 08:34:45PM +1000, Nathaniel Shead wrote:
> > --- a/libgcc/gthr-posix.h
> > +++ b/libgcc/gthr-posix.h
> > @@ -44,6 +44,21 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
> > # endif
> > #endif
> >
> > +#ifdef __has_attribute
> > +# if __has_attribute(__always_inline__)
> > +# define __GTHREAD_ALWAYS_INLINE __attribute__((__always_inline__))
> > +# endif
> > +#endif
> > +#ifndef __GTHREAD_ALWAYS_INLINE
> > +# define __GTHREAD_ALWAYS_INLINE
> > +#endif
> > +
> > +#ifdef __cplusplus
> > +# define __GTHREAD_INLINE inline __GTHREAD_ALWAYS_INLINE
> > +#else
> > +# define __GTHREAD_INLINE static inline
> > +#endif
>
> Thanks.
>
> > @@ -182,22 +197,29 @@ __gthrw(pthread_setschedparam)
> >
> > #if defined(__FreeBSD__) || (defined(__sun) && defined(__svr4__))
> >
> > -static volatile int __gthread_active = -1;
> > +#pragma GCC visibility push(hidden)
> > +__GTHREAD_INLINE volatile int *
> > +__gthread_active (void)
> > +{
> > + static volatile int __gthread_active_var = -1;
> > + return &__gthread_active_var;
> > +}
> > +#pragma GCC visibility pop
>
> I think something like the above
>
> > -static void
> > +__GTHREAD_INLINE void
> > __gthread_trigger (void)
> > {
> > - __gthread_active = 1;
> > + *__gthread_active () = 1;
> > }
> >
> > -static inline int
> > +__GTHREAD_INLINE int
> > __gthread_active_p (void)
> > {
> > static pthread_mutex_t __gthread_active_mutex = PTHREAD_MUTEX_INITIALIZER;
> > static pthread_once_t __gthread_active_once = PTHREAD_ONCE_INIT;
>
> is needed also around this one.
>
> > @@ -257,13 +279,15 @@ __gthrw2(__gthrw_(__pthread_key_create),
> > # define GTHR_ACTIVE_PROXY __gthrw_(pthread_cancel)
> > #endif
> >
> > -static inline int
> > +#pragma GCC visibility push(hidden)
> > +__GTHREAD_INLINE int
> > __gthread_active_p (void)
> > {
> > static void *const __gthread_active_ptr
> > = __extension__ (void *) >HR_ACTIVE_PROXY;
> > return __gthread_active_ptr != 0;
> > }
> > +#pragma GCC visibility pop
>
> And this one but you've added it to that one already.
>
> Otherwise LGTM for the libgcc side, will defer to Jon for libstdc++ side.
The libstdc++ parts are OK too, thanks for working on this.
More information about the Libstdc++
mailing list