On Wed, 6 Sep 2023 08:18:45 GMT, JoKern65 <[email protected]> wrote:
> After push of [JDK-8307478](https://bugs.openjdk.org/browse/JDK-8307478) ,
> the following test started to fail on AIX :
> com/sun/tools/attach/warnings/DynamicLoadWarningTest.java;
> The problem was described in
> [JDK-8309549](https://bugs.openjdk.org/browse/JDK-8309549) with a first try
> of a fix.
> A second fix via [JDK-8310191](https://bugs.openjdk.org/browse/JDK-8310191)
> was necessary.
> Both fixes just disable the specific subtest on AIX, without correction of
> the root cause.
> The root cause is, that dlopen() on AIX returns different handles every time,
> even if you load a library twice. There is no official AIX API available to
> get this information on a different way.
> My proposal is, to use the stat64x API with the fields st_device and
> st_inode. After a dlopen() the stat64x() API is called additionally to get
> this information which is then stored parallel to the library handle in the
> jvmtiAgent. For AIX we then can compare these values instead of the library
> handle and get the same functionality as on linux.
I would much rather see an AIX solution that was in the AIX version of
`os::dll_load` rather than having to pollute the shared JVMTI code. I'm not
sure how best to achieve that - it may not be possible to hide it completely -
but we should be able to refactor things so `stat64x_LIBPATH` is defined in AIX
code, and its use is via a helper so the code is only written once. Then we
would only need a handful of `AIX_ONLY(...)` statements.
src/hotspot/share/prims/jvmtiAgentList.cpp line 251:
> 249: while (it.has_next()) {
> 250: JvmtiAgent* const agent = it.next();
> 251: if (!agent->is_static_lib() && device && inode &&
Style nit: we don't use implicit booleans so check `device != 0` and `inode !=
0` explicitly please.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/15583#issuecomment-1714969165
PR Review Comment: https://git.openjdk.org/jdk/pull/15583#discussion_r1322387181