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