I cannot contribute much to the discussion, but I think this is a valuable
effort. These broad exports from hotspot have always bemused me.

It is probably safe to hide C++ mangled symbols since those decorations are
compiler-specific anyway, no? So they cannot have worked in a reliable
fashion?

On Wed, Feb 14, 2024 at 11:06 AM Magnus Ihse Bursie <
magnus.ihse.bur...@oracle.com> wrote:

> I am currently pursuing improved build functionality for static
> libraries. One of the issues with static libraries are name collisions,
> which led me back to an old discussion about which symbols are exported
> from Hotspot, and how this is achieved. A long discussion is available
> in JDK-8017234 [1], which was created in 2013 and has been on the back
> burner ever since, coming back to life every now and then.
>
> There are basically two different problems here. They are both distinct
> and interrelated, and we likely need to solve both in tandem.
>
> The first problem is how Hotspot should say which symbols (functions)
> that should be exported from libjvm.so. The historical, and still used,
> system is to have a mapfile. In the "new" (not so new anymore) build
> system, this was simplified to a list of function names in
> make/data/hotspot-symbols, from which a mapfile is built.
>
> This is in contrast with how all other libraries in the JDK are built,
> and also with modern best practices. A better approach would be to
> annotate the functions that should be exported in the source code. In
> fact, such annotation already exists, even in Hotspot, as JNIEXPORT, but
> this is currently not used in the compilation of Hotspot.
>
> The second problem is that in addition to these explicitly exported
> functions, we also export basically all other functions as well in
> Hotspot. (So currently we could basically just forgo this complicated
> machinery and just export everything by default...)
>
> The reason for this seem somewhat unclear. The specifics are probably
> forever lost in the mists of time past, but the essential point is that
> these symbols are needed for SA to do it's job.
>
> So what we do is that we list all symbols in hotspot after compiling
> (but before linking), and selects some (most, I think) of them using
> regexp patterns, and add these to the mapfile.
>
> As long as we're doing this, we cannot stop using a mapfile, and we're
> stuck from progressing on point 1.
>
> My takeaway from the discussions is that we are most likely exporting a
> way too broad set of symbols to SA. It seems likely that this set can be
> drastically cut down. Actually getting an understanding of exactly which
> symbols SA need seem like a very good first step.
>
> So, is this a journey anyone would be interested in embarkering on? I
> will help as much as I can from a build PoV, but I have no clue
> whatsoever about what SA needs.
>
> /Magnus
>
> [1] https://bugs.openjdk.org/browse/JDK-8017234
>
>

Reply via email to