Skip to content

Commit

Permalink
Look for -XX:[+/-]UseZlibNX on AIX
Browse files Browse the repository at this point in the history
AIX puts zlibNX on the LIBPATH when running on P9 or later, but having
this in the environment may cause some things, such as git clone, to
fail when exec'ed from Java. For example,
`fatal: pack has bad object at offset 3872100: inflate returned -5`

Backport of ibmruntimes/openj9-openjdk-jdk#664

Signed-off-by: Peter Shipton <Peter_Shipton@ca.ibm.com>
  • Loading branch information
pshipton committed Sep 22, 2023
1 parent ae0c14a commit 4d926fa
Showing 1 changed file with 28 additions and 5 deletions.
33 changes: 28 additions & 5 deletions jdk/src/solaris/bin/java_md_solinux.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

/*
* ===========================================================================
* (c) Copyright IBM Corp. 2020, 2021 All Rights Reserved
* (c) Copyright IBM Corp. 2020, 2023 All Rights Reserved
* ===========================================================================
*/

Expand Down Expand Up @@ -553,12 +553,35 @@ CreateExecutionEnvironment(int *pargc, char ***pargv,
* o $JVMPATH (directory portion only)
* o $JRE/lib/$LIBARCHNAME
* o $JRE/../lib/$LIBARCHNAME
* o ZLIBNX_PATH (for AIX P9 or newer systems with NX)
* o ZLIBNX_PATH (for AIX P9 or newer systems with NX, unless -XX:-UseZlibNX is set)
*
* followed by the user's previous effective LD_LIBRARY_PATH, if
* any.
*/

#ifdef AIX
int aixargc = *pargc - 1; // skip the launcher name
char **aixargv = *pargv + 1;
const char *aixarg = NULL;
jboolean useZlibNX = JNI_TRUE;
while (aixargc > 0 && *(aixarg = *aixargv) == '-') {
if (JLI_StrCmp(aixarg, "-XX:+UseZlibNX") == 0) {
useZlibNX = JNI_TRUE;
} else if (JLI_StrCmp(aixarg, "-XX:-UseZlibNX") == 0) {
useZlibNX = JNI_FALSE;
}
aixargc--;
aixargv++;
}
useZlibNX = useZlibNX && power_9_andup() && power_nx_gzip();
if (JLI_IsTraceLauncher()) {
printf("Add " ZLIBNX_PATH " to the LIBPATH: %s P9+ %s NX %s\n",
useZlibNX ? "TRUE" : "FALSE",
power_9_andup() ? "TRUE" : "FALSE",
power_nx_gzip() ? "TRUE" : "FALSE");
}
#endif

#ifdef __solaris__
/*
* Starting in Solaris 7, ld.so.1 supports three LD_LIBRARY_PATH
Expand Down Expand Up @@ -633,8 +656,8 @@ CreateExecutionEnvironment(int *pargc, char ***pargv,
#ifdef AIX
/* On AIX we additionally need 'jli' in the path because ld doesn't support $ORIGIN. */
JLI_StrLen(jrepath) + JLI_StrLen(arch) + JLI_StrLen("/lib//jli:") +
/* On AIX P9 or newer with NX accelerator enabled, add the accelerated zlibNX to LIBPATH */
((power_9_andup() && power_nx_gzip()) ? JLI_StrLen(":" ZLIBNX_PATH) : 0) +
/* On AIX P9 or newer with NX accelerator enabled, add the accelerated zlibNX to LIBPATH. */
(useZlibNX ? JLI_StrLen(":" ZLIBNX_PATH) : 0) +
#endif
JLI_StrLen(jvmpath) + 52;
new_runpath = JLI_MemAlloc(new_runpath_size);
Expand Down Expand Up @@ -673,7 +696,7 @@ CreateExecutionEnvironment(int *pargc, char ***pargv,
jrepath, arch
#endif /* DUAL_MODE */
#ifdef AIX
, ((power_9_andup() && power_nx_gzip()) ? (":" ZLIBNX_PATH) : "")
, (useZlibNX ? (":" ZLIBNX_PATH) : "")
#endif
);

Expand Down

0 comments on commit 4d926fa

Please sign in to comment.