Okay I now see from "RFR: 8379516: Adjust JVM debug helper exports" what is being considered.

Thanks,
David

On 11/03/2026 11:35 am, David Holmes wrote:
On 10/03/2026 7:23 pm, Baesken, Matthias wrote:
I'm not sure where this conclusion is coming from. The case in question
was about "debug" but as stated earlier and/or in the JBS issue this is
potentially an issue for any symbol exported from one of the JDK
libraries that clashes with a symbol from the application native code.


Hi David, I think we were running with exported debug-helper functions on Windows for some years without complains . And on Linux , there was only this single issue about "debug" . So in practice it was not THAT bad.

Agreed.
However you are correct, that it *could* clash in some scenarios .  (but all our other exported functions without nice prefix  could clash too)

Separate issue that those unprefixed symbols possibly should not (all) be exported.
So we have at least two option :
- prefix the names from debug.cpp  (jvm_debug_   or something like this, maybe there are better suggestions) - use an exported "helper" that references all those little functions , so that elimination is avoided , e.g.

// just an exported helper; to avoid link time elimination of the referenced functions extern "C" JNIEXPORT void JVM_debug_helpers_keeper(void* p1, void* p2, void* p3, intptr_t ip, oop oh, address adr) {
   blob((CodeBlob*)p1);
   dump_vtable(adr);
   nm(ip);
   disnm(ip);
   printnm(ip);
   universe();
   verify();
      ...........
}


This one is not there to be ever called, just for keeping the nm/pp/debug etc. functions.
What do you think ?

I'm a little confused. Calling the wrong function because of a name clash seems quite a different problem from linking stripping out functions it doesn't realize could be used. Are we using the prefixes to prevent linker stripping?

Would that  JVM_debug_helpers_keeper(...) approach  also work on Windows ?

No idea - sorry.

David

Best regards, Matthias



Reply via email to