Why do we need both - export maps AND -fvisibility=hidden/__attribute__((visibility("default")))
David Holmes
david.holmes at oracle.com
Tue Feb 4 23:16:33 PST 2014
On 5/02/2014 5:09 PM, Jeremy Manson wrote:
> Also, don't you statically link libstdc++ into Hotspot?
Normally yes.
> It would break
> many, many things if the symbols from that were exported from Hotspot
> (pretty much anything with native code written in C++).
Doe static linking automatically re-export all the visible symbols of
the linked in library? That would seem undesirable under most circumstances.
David
> Jeremy
>
>
> On Tue, Feb 4, 2014 at 4:51 PM, David Holmes <david.holmes at oracle.com
> <mailto:david.holmes at oracle.com>> wrote:
>
> Hi Volker,
>
>
> On 5/02/2014 2:18 AM, Volker Simonis wrote:
>
> I know this is an old topic and actually I was involved myself
> in some
> of these discussions. Nevertheless, the topic regularly pops up
> again
> and every time this happens and I take a deeper look at the topic I
> have the feeling I still haven’t completely understood it.
>
> Current state:
>
> On Linux, we are currently compiling the HotSpot with the
> '-fvisibility=hidden' flag which effectively hides all symbols
> except
> the ones which are explicitely declared to have default visibility
> (with the macro JNIEXPORT which expands to
> __attribute__((visibility("__default")))).
>
> This was introduced by "6588413: Use -fvisibility=hidden for gcc
> compiles" [1] in HS 21 and it is potentially a good change
> because it
> hides all symbols by default and it enables certain compiler
> optimizations on some platforms (see "How To Write Shared Libraries"
> [2]).
>
> However, independently of this change, we still use export maps
> (i.e.
> --version-script=mapfile___reorder) in addition to setting the
> explicit
> symbol visibility. While [2] recommends this as good practice, I
> don't
> see the real benefit of having both -
> -fvisibility=hidden/____attribute__((visibility("__default")))
> and export
> maps except if we were maintaining a versioned ABI. But as far as I
> can tell, that's not the case for HotSpot.
>
> So finally my question: is there any real reason (except the
> fact that
> "we always did it that way") why we would still need to use export
> maps on Linux where symbol hiding is done with
> -fvisibility=hidden/____attribute__((visibility("__default")))
> anyway?
> Dropping the maps would make the maintenance of exported symbols
> easier as we wouldn't have to keep the export map files and the
> JNIEXPORT functions in sync.
>
>
> From past discussions isn't this because we need the map files to
> expose dynamically generated symbols? (And so we must then also add
> the other visible symbols.) Does that make the visibility attributes
> redundant? I'm not sure, but they serve as a clear statement of
> intent anyway.
>
> David
>
>
> Thank you and best regards,
> Volker
>
> [1] https://bugs.openjdk.java.net/__browse/JDK-6588413
> <https://bugs.openjdk.java.net/browse/JDK-6588413>
> [2] http://www.akkadia.org/__drepper/dsohowto.pdf
> <http://www.akkadia.org/drepper/dsohowto.pdf>
>
>
More information about the hotspot-dev
mailing list