RFR: 8017234: Hotspot should stop using mapfiles [v4]
Kevin Walls
kevinw at openjdk.org
Thu Feb 22 14:35:55 UTC 2024
On Thu, 22 Feb 2024 14:05:28 GMT, Kevin Walls <kevinw at openjdk.org> wrote:
>> Ok, I see now that there is indeed a slight difference. The debug.cpp symbols are present as local symbols in the .symtab, both before and after this patch. However, before this patch they had visibility DEFAULT and now they have visibility HIDDEN. I don't think this matters for anything except the linker, but I should probably verify that they are still correctly usable from gcc.
>>
>> I would appreciate it if someone could provide a step-by-step instruction on how to verify these functions on gdb (I haven't used it for 10-15 years so I apologize if I'm a bit rusty), or provide a pointer to where I can find such instructions. Is this supposed to work on core dumps, live attached processes or both?
>
> On a latest JDK build today, in Linux I can attach to a live process (not a core dump):
> gdb --pid PID
> ..and type:
> call universe()
> (I think you need to switch to a JavaThread first) and see on the JVM's output:
>
> "Executing universe"
> Heap
> garbage-first heap total reserved 30932992K, ...etc...
>
>
> Removing JNIEXPORT here on Linux and rebuilding: still works.
>
> readelf shows:
> existing build (using JNIEXPORT):
> 32252: 0000000000698160 249 FUNC LOCAL DEFAULT 11 universe
>
> without JNIEXPORT:
> 32252: 0000000000698160 249 FUNC LOCAL HIDDEN 11 universe
>
> So gdb on Linux can call a HIDDEN function, i.e. without the JNIEXPORT. It seems happy either way, not affected by visibility.
Windows:
Attach Visual Studio,
in the Immediate Window, type (funny VS syntax I do not claim to understand):
{,,JVM}universe()
...and on the JVM's console window I see:
"Executing universe"
Heap
garbage-first heap total reserved 8343552K,...etc...
(It actually did nothing on the first invocation for me, I have typed it 5 times, only got 4 sets of output. But the symbol is working...)
In that working (JNIEXPORT) case, the map file jdk/bin/server/jvm.dll.map shows:
0001:0027ff50 universe 0000000180280f50 f debug.obj
(I do like that we call it jvm.dll.map now, not just "jvm.map"!)
Test removing JNIEXPORT:
Without JNIEXPORT, on Windows, the symbol universe is just not there. Nothing in the map file. In Visual Studio:
{,,JVM}universe()
identifier "universe" is undefined
That confirms the expected Windows behaviour: we still need JNIEXPORT to make debug.cpp utils callable by a debugger.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/17955#discussion_r1499341256
More information about the build-dev
mailing list