diff -r e3c4398c54cd -r 0b2684d4f49f jdk/src/solaris/bin/java_md_solinux.c --- a/jdk/src/solaris/bin/java_md_solinux.c Wed Dec 18 09:56:54 2013 -0500 +++ b/jdk/src/solaris/bin/java_md_solinux.c Wed Dec 18 10:19:05 2013 -0800 @@ -47,23 +47,10 @@ #ifndef SETENV_REQUIRED #define SETENV_REQUIRED #endif -/* - * If a processor / os combination has the ability to run binaries of - * two data models and cohabitation of jre/jdk bits with both data - * models is supported, then DUAL_MODE is defined. When DUAL_MODE is - * defined, the architecture names for the narrow and wide version of - * the architecture are defined in LIBARCH64NAME and LIBARCH32NAME. - * Currently only Solaris on sparc/sparcv9 and i586/amd64 is DUAL_MODE; - * linux i586/amd64 could be defined as DUAL_MODE but that is not the - * current policy. - */ #ifdef __solaris__ -# ifndef LIBARCH32NAME -# error "The macro LIBARCH32NAME was not defined on the compile line" -# endif -# ifndef LIBARCH64NAME -# error "The macro LIBARCH64NAME was not defined on the compile line" +# ifndef LIBARCHNAME +# error "The macro LIBARCHNAME was not defined on the compile line" # endif # include # include @@ -118,24 +105,15 @@ * | * | * \|/ - * Have Desired Model ? --> NO --> Is Dual-Mode ? --> NO --> Exit(with error) - * | | - * | | - * | \|/ - * | YES - * | | - * | | - * | \|/ - * | CheckJvmType - * | (removes -client, -server etc.) - * | | - * | | - * \|/ \|/ - * YES Find the desired executable/library - * | | - * | | - * \|/ \|/ - * CheckJvmType RequiresSetenv + * Have Desired Model ? --> NO --> Exit(with error) + * | + * | + * \|/ + * YES + * | + * | + * \|/ + * CheckJvmType * (removes -client, -server, etc.) * | * | @@ -155,24 +133,24 @@ * \|/ * RequiresSetenv * Is LD_LIBRARY_PATH - * and friends set ? --> NO --> Have Desired Model ? NO --> Re-exec --> Main + * and friends set ? --> NO --> Have Desired Model ? NO --> Error/Exit * YES YES --> Continue * | * | * \|/ - * Path is desired JRE ? YES --> Have Desired Model ? NO --> Re-exec --> Main + * Path is desired JRE ? YES --> Have Desired Model ? NO --> Error/Exit * NO YES --> Continue * | * | * \|/ * Paths have well known - * jvm paths ? --> NO --> Have Desired Model ? NO --> Re-exec --> Main + * jvm paths ? --> NO --> Have Desired Model ? NO --> Error/Exit * YES YES --> Continue * | * | * \|/ * Does libjvm.so exit - * in any of them ? --> NO --> Have Desired Model ? NO --> Re-exec --> Main + * in any of them ? --> NO --> Have Desired Model ? NO --> Error/Exit * YES YES --> Continue * | * | @@ -188,8 +166,6 @@ * Main */ -#define GetArch() GetArchPath(CURRENT_DATA_MODEL) - /* Store the name of the executable once computed */ static char *execname = NULL; @@ -201,21 +177,6 @@ return execname; } -const char * -GetArchPath(int nbits) -{ - switch(nbits) { -#ifdef DUAL_MODE - case 32: - return LIBARCH32NAME; - case 64: - return LIBARCH64NAME; -#endif /* DUAL_MODE */ - default: - return LIBARCHNAME; - } -} - #ifdef SETENV_REQUIRED static jboolean JvmExists(const char *path) { @@ -228,10 +189,10 @@ return JNI_FALSE; } /* - * contains a lib/$LIBARCH/{server,client}/libjvm.so ? + * contains a lib/$LIBARCHNAME/{server,client}/libjvm.so ? */ static jboolean -ContainsLibJVM(int wanted, const char *env) { +ContainsLibJVM(const char *env) { char clientPattern[PATH_MAX + 1]; char serverPattern[PATH_MAX + 1]; char *envpath; @@ -245,8 +206,8 @@ } /* the usual suspects */ - JLI_Snprintf(clientPattern, PATH_MAX, "lib/%s/client", GetArchPath(wanted)); - JLI_Snprintf(serverPattern, PATH_MAX, "lib/%s/server", GetArchPath(wanted)); + JLI_Snprintf(clientPattern, PATH_MAX, "lib/%s/client", LIBARCHNAME); + JLI_Snprintf(serverPattern, PATH_MAX, "lib/%s/server", LIBARCHNAME); /* to optimize for time, test if any of our usual suspects are present. */ clientPatternFound = JLI_StrStr(env, clientPattern) != NULL; @@ -281,7 +242,7 @@ * Test whether the environment variable needs to be set, see flowchart. */ static jboolean -RequiresSetenv(int wanted, const char *jvmpath) { +RequiresSetenv(const char *jvmpath) { char jpath[PATH_MAX + 1]; char *llp; char *dmllp = NULL; @@ -289,9 +250,7 @@ llp = getenv("LD_LIBRARY_PATH"); #ifdef __solaris__ - dmllp = (CURRENT_DATA_MODEL == 32) - ? getenv("LD_LIBRARY_PATH_32") - : getenv("LD_LIBRARY_PATH_64"); + dmllp = getenv("LD_LIBRARY_PATH_64"); #endif /* __solaris__ */ /* no environment variable is a good environment variable */ if (llp == NULL && dmllp == NULL) { @@ -330,10 +289,10 @@ } /* scrutinize all the paths further */ - if (llp != NULL && ContainsLibJVM(wanted, llp)) { + if (llp != NULL && ContainsLibJVM(llp)) { return JNI_TRUE; } - if (dmllp != NULL && ContainsLibJVM(wanted, dmllp)) { + if (dmllp != NULL && ContainsLibJVM(dmllp)) { return JNI_TRUE; } return JNI_FALSE; @@ -349,10 +308,8 @@ * First, determine if we are running the desired data model. If we * are running the desired data model, all the error messages * associated with calling GetJREPath, ReadKnownVMs, etc. should be - * output. However, if we are not running the desired data model, - * some of the errors should be suppressed since it is more - * informative to issue an error message based on whether or not the - * os/processor combination has dual mode capabilities. + * output, otherwise we simply exit with an error, as we no longer + * support dual data models. */ jboolean jvmpathExists; @@ -361,16 +318,17 @@ /* Check data model flags, and exec process, if needed */ { - char *arch = (char *)GetArch(); /* like sparc or sparcv9 */ + char *arch = LIBARCHNAME; /* like sparc or sparcv9 */ char * jvmtype = NULL; int argc = *pargc; char **argv = *pargv; int running = CURRENT_DATA_MODEL; - - int wanted = running; /* What data mode is being - asked for? Current model is - fine unless another model - is asked for */ + /* + * As of jdk9, there is no support for dual mode operations, however + * for legacy error reporting purposes and until -d options are supported + * we need this. + */ + int wanted = running; #ifdef SETENV_REQUIRED jboolean mustsetenv = JNI_FALSE; char *runpath = NULL; /* existing effective LD_LIBRARY_PATH setting */ @@ -473,7 +431,7 @@ * we return back, otherwise proceed to set the environment. */ #ifdef SETENV_REQUIRED - mustsetenv = RequiresSetenv(wanted, jvmpath); + mustsetenv = RequiresSetenv(jvmpath); JLI_TraceLauncher("mustsetenv: %s\n", mustsetenv ? "TRUE" : "FALSE"); if (mustsetenv == JNI_FALSE) { @@ -481,47 +439,13 @@ return; } #else - JLI_MemFree(newargv); - return; + JLI_MemFree(newargv); + return; #endif /* SETENV_REQUIRED */ - } else { /* do the same speculatively or exit */ -#ifdef DUAL_MODE - if (running != wanted) { - /* Find out where the JRE is that we will be using. */ - if (!GetJREPath(jrepath, so_jrepath, GetArchPath(wanted), JNI_TRUE)) { - /* give up and let other code report error message */ - JLI_ReportErrorMessage(JRE_ERROR2, wanted); - exit(1); - } - JLI_Snprintf(jvmcfg, so_jvmcfg, "%s%slib%s%s%sjvm.cfg", - jrepath, FILESEP, FILESEP, GetArchPath(wanted), FILESEP); - /* - * Read in jvm.cfg for target data model and process vm - * selection options. - */ - if (ReadKnownVMs(jvmcfg, JNI_TRUE) < 1) { - /* give up and let other code report error message */ - JLI_ReportErrorMessage(JRE_ERROR2, wanted); - exit(1); - } - jvmpath[0] = '\0'; - jvmtype = CheckJvmType(pargc, pargv, JNI_TRUE); - if (JLI_StrCmp(jvmtype, "ERROR") == 0) { - JLI_ReportErrorMessage(CFG_ERROR9); - exit(4); - } - - /* exec child can do error checking on the existence of the path */ - jvmpathExists = GetJVMPath(jrepath, jvmtype, jvmpath, so_jvmpath, GetArchPath(wanted), 0); -#ifdef SETENV_REQUIRED - mustsetenv = RequiresSetenv(wanted, jvmpath); -#endif /* SETENV_REQUIRED */ - } -#else /* ! DUALMODE */ + } else { /* do the same speculatively or exit */ JLI_ReportErrorMessage(JRE_ERROR2, wanted); exit(1); -#endif /* DUAL_MODE */ - } + } #ifdef SETENV_REQUIRED if (mustsetenv) { /* @@ -545,10 +469,6 @@ * * 2. LD_LIBRARY_PATH_64 -- overrides and replaces LD_LIBRARY_PATH * for 64-bit binaries. - * - * 3. LD_LIBRARY_PATH_32 -- overrides and replaces LD_LIBRARY_PATH - * for 32-bit binaries. - * * The vm uses LD_LIBRARY_PATH to set the java.library.path system * property. To shield the vm from the complication of multiple * LD_LIBRARY_PATH variables, if the appropriate data model @@ -561,21 +481,9 @@ switch (wanted) { case 0: - if (running == 32) { - dmpath = getenv("LD_LIBRARY_PATH_32"); - wanted = 32; - } else { - dmpath = getenv("LD_LIBRARY_PATH_64"); - wanted = 64; - } - break; - - case 32: - dmpath = getenv("LD_LIBRARY_PATH_32"); - break; - case 64: dmpath = getenv("LD_LIBRARY_PATH_64"); + wanted = 64; break; default: @@ -624,13 +532,8 @@ "%s/lib/%s:" "%s/../lib/%s", jvmpath, -#ifdef DUAL_MODE - jrepath, GetArchPath(wanted), - jrepath, GetArchPath(wanted) -#else /* !DUAL_MODE */ jrepath, arch, jrepath, arch -#endif /* DUAL_MODE */ ); @@ -681,7 +584,7 @@ * in the environment for the exec'ed child. */ if (dmpath != NULL) - (void)UnsetEnv((wanted == 32) ? "LD_LIBRARY_PATH_32" : "LD_LIBRARY_PATH_64"); + (void)UnsetEnv("LD_LIBRARY_PATH_64"); #endif /* __solaris */ newenvp = environ; @@ -689,34 +592,6 @@ #endif /* SETENV_REQUIRED */ { char *newexec = execname; -#ifdef DUAL_MODE - /* - * If the data model is being changed, the path to the - * executable must be updated accordingly; the executable name - * and directory the executable resides in are separate. In the - * case of 32 => 64, the new bits are assumed to reside in, e.g. - * "olddir/LIBARCH64NAME/execname"; in the case of 64 => 32, - * the bits are assumed to be in "olddir/../execname". For example, - * - * olddir/sparcv9/execname - * olddir/amd64/execname - * - * for Solaris SPARC and Linux amd64, respectively. - */ - - if (running != wanted) { - char *oldexec = JLI_StrCpy(JLI_MemAlloc(JLI_StrLen(execname) + 1), execname); - char *olddir = oldexec; - char *oldbase = JLI_StrRChr(oldexec, '/'); - - - newexec = JLI_MemAlloc(JLI_StrLen(execname) + 20); - *oldbase++ = 0; - sprintf(newexec, "%s/%s/%s", olddir, - ((wanted == 64) ? LIBARCH64NAME : ".."), oldbase); - argv[0] = newexec; - } -#endif /* DUAL_MODE */ JLI_TraceLauncher("TRACER_MARKER:About to EXEC\n"); (void) fflush(stdout); (void) fflush(stderr); @@ -730,20 +605,6 @@ execv(newexec, argv); #endif /* SETENV_REQUIRED */ JLI_ReportErrorMessageSys(JRE_ERROR4, newexec); - -#ifdef DUAL_MODE - if (running != wanted) { - JLI_ReportErrorMessage(JRE_ERROR5, wanted, running); -#ifdef __solaris__ -#ifdef __sparc - JLI_ReportErrorMessage(JRE_ERROR6); -#else /* ! __sparc__ */ - JLI_ReportErrorMessage(JRE_ERROR7); -#endif /* __sparc */ -#endif /* __solaris__ */ - } -#endif /* DUAL_MODE */ - } exit(1); } @@ -961,12 +822,12 @@ char jrePath[MAXPATHLEN]; char splashPath[MAXPATHLEN]; - if (!GetJREPath(jrePath, sizeof(jrePath), GetArch(), JNI_FALSE)) { + if (!GetJREPath(jrePath, sizeof(jrePath), LIBARCHNAME, JNI_FALSE)) { JLI_ReportErrorMessage(JRE_ERROR1); return NULL; } ret = JLI_Snprintf(splashPath, sizeof(splashPath), "%s/lib/%s/%s", - jrePath, GetArch(), SPLASHSCREEN_SO); + jrePath, LIBARCHNAME, SPLASHSCREEN_SO); if (ret >= (int) sizeof(splashPath)) { JLI_ReportErrorMessage(JRE_ERROR11);