[PATCH] libgcc, libstdc++: Make more entities no longer TU-local [PR115126]
Nathaniel Shead
nathanieloshead@gmail.com
Thu Sep 26 03:46:27 GMT 2024
On Wed, Sep 25, 2024 at 01:30:55PM +0200, Jakub Jelinek wrote:
> On Wed, Sep 25, 2024 at 12:18:07PM +0100, Jonathan Wakely wrote:
> > > > And whether similarly we couldn't use
> > > > __attribute__((__visibility__ ("hidden"))) on the static block scope
> > > > vars for C++ (again, if compiler supports that), so that the changes
> > > > don't affect ABI of C++ libraries.
> > >
> > > That sounds good too.
> >
> > Can you use visibility attributes on a local static? I get a warning
> > that it's ignored.
>
> Indeed :(
>
> And #pragma GCC visibility push(hidden)/#pragma GCC visibility pop around
> just the static block scope var definition does nothing.
> If it is around the whole inline function though, then it seems to work.
> Though, unsure if we want that around the whole header; wonder what it would
> do with the weakrefs.
>
> Jakub
>
Thanks for the thoughts. WRT visibility, it looks like the main gthr.h
surrounds the whole function in a
#ifndef HIDE_EXPORTS
#pragma GCC visibility push(default)
#endif
block, though I can't quite work out what the purpose of that is here
(since everything is currently internal linkage to start with).
But it sounds like doing something like
#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
and then marking maybe even just the new inline functions with
visibility hidden should be OK?
Nathaniel
More information about the Gcc-patches
mailing list