Code Review fix for 8005044 remove crufty '_g' support from HS runtime code

Staffan Larsen staffan.larsen at oracle.com
Wed Dec 19 09:55:56 PST 2012


On 19 dec 2012, at 16:22, Daniel D. Daugherty <daniel.daugherty at oracle.com> wrote:

> On 12/19/12 1:27 AM, Staffan Larsen wrote:
>> On 18 dec 2012, at 22:11, Daniel D. Daugherty <daniel.daugherty at oracle.com> wrote:
>> 
>>> Just for the record: I have reviewed all of Ron's changes
>>> and I approve them.
>>> 
>>> One thing I noticed of interest to launcher folks that
>>> is not due to any changes that Ron made:
>>> 
>>> src/os/windows/vm/os_windows.cpp:
>>> 
>>> 1718 // Find the full path to the current module, jvm.dll
>>> 1719 void os::jvm_path(char *buf, jint buflen) {
>>> 1720   // Error checking.
>>> 1721   if (buflen < MAX_PATH) {
>>> 1722     assert(false, "must use a large-enough buffer");
>>> 1723     buf[0] = '\0';
>>> 1724     return;
>>> 1725   }
>>> 1726   // Lazy resolve the path to current module.
>>> 1727   if (saved_jvm_path[0] != 0) {
>>> 1728     strcpy(buf, saved_jvm_path);
>>> 1729     return;
>>> 1730   }
>>> 1731
>>> 1732   buf[0] = '\0';
>>> 1733   if (Arguments::created_by_gamma_launcher()) {
>>> 1734      // Support for the gamma launcher. Check for an
>>> 1735      // JAVA_HOME environment variable
>>> 1736      // and fix up the path so it looks like
>>> 1737      // libjvm.so is installed there (append a fake suffix
>>> 1738      // hotspot/libjvm.so).
>>> 1739      char* java_home_var = ::getenv("JAVA_HOME");
>>> 1740      if (java_home_var != NULL && java_home_var[0] != 0) {
>>> 1741
>>> 1742         strncpy(buf, java_home_var, buflen);
>>> 1743
>>> 1744         // determine if this is a legacy image or modules image
>>> 1745         // modules image doesn't have "jre" subdirectory
>>> 1746         size_t len = strlen(buf);
>>> 1747         char* jrebin_p = buf + len;
>>> 1748         jio_snprintf(jrebin_p, buflen-len, "\\jre\\bin\\");
>>> 1749         if (0 != _access(buf, 0)) {
>>> 1750           jio_snprintf(jrebin_p, buflen-len, "\\bin\\");
>>> 1751         }
>>> 1752         len = strlen(buf);
>>> 1753         jio_snprintf(buf + len, buflen-len, "hotspot\\jvm.dll");
>>> 1754      }
>>> 1755   }
>>> 1756
>>> 1757   if(buf[0] == '\0') {
>>> 1758   GetModuleFileName(vm_lib_handle, buf, buflen);
>>> 1759   }
>>> 1760   strcpy(saved_jvm_path, buf);
>>> 1761 }
>>> 
>>> the block from line 1733 -> 1755 is dead code on Windows.
>>> The launcher on Windows is now called "hotspot" and is not
>>> called "gamma" so Arguments::created_by_gamma_launcher()
>>> will not return true on Windows.
>>> 
>>> And one more launcher nit:
>>> 
>>> $ grep gamma make/windows/makefiles/launcher.make
>>>    /D LAUNCHER_TYPE=\"gamma\" \
>>> 
>> Isn't it this line that makes it work? Arguments::created_by_gamma_launcher() essentially checks that -Dsun.java.launcher=gamma is set. And the LAUNCHER_TYPE=gamma is what sets -Dsun.java.launcher=gamma. I think, but I may be missing something?
>> 
>> Thanks,
>> /Staffan
> 
> Nope you weren't missing anything. I was thinking process name
> is "hotspot" instead of looking more closely at how the launcher
> origin was determined.
> 
> Just curious, when gamma was renamed to hotspot on Windows, that
> change wasn't made on Linux on Solaris. Any particular reason?

The "gamma" launcher still exists on Linux and Solaris, just as it were. There is a "hotspot" launcher however, which is just a script that wraps "gamma" but sets up the correct LD_LIBRARY_PATH and such.

I don't think there was a "gamma" launcher on windows.

/Staffan

> 
> Gory details below...
> 
> Dan
> 
> 
> 
> Chasing it back...
> 
> src/os/windows/vm/os_windows.cpp:
> 
>   1733   if (Arguments::created_by_gamma_launcher()) {
> 
> src/share/vm/runtime/arguments.cpp:
> 
>   1671 bool Arguments::created_by_gamma_launcher() {
>   1672   return _created_by_gamma_launcher;
>   1673 }
> 
>   1659 void Arguments::process_java_launcher_argument(const char* launcher, void* extra_info) {
>   1660   _sun_java_launcher = strdup(launcher);
>   1661   if (strcmp("gamma", _sun_java_launcher) == 0) {
>   1662     _created_by_gamma_launcher = true;
>   1663   }
>   1664 }
> 
>    126 // Process java launcher properties.
>    127 void Arguments::process_sun_java_launcher_properties(JavaVMInitArgs* args) {
>    128   // See if sun.java.launcher or sun.java.launcher.pid is defined.
>    129   // Must do this before setting up other system properties,
>    130   // as some of them may depend on launcher type.
>    131   for (int index = 0; index < args->nOptions; index++) {
>    132     const JavaVMOption* option = args->options + index;
>    133     const char* tail;
>    134
>    135     if (match_option(option, "-Dsun.java.launcher=", &tail)) {
>    136       process_java_launcher_argument(tail, option->extraInfo);
>    137       continue;
>    138     }
> 
> src/share/tools/launcher/java.c:
> 
>   1659 /*
>   1660  * JVM would like to know if it's created by a standard Sun launcher, or by
>   1661  * user native application, the following property indicates the former.
>   1662  */
>   1663 void SetJavaLauncherProp() {
>   1664   AddOption("-Dsun.java.launcher=" LAUNCHER_TYPE, NULL);
>   1665 }
> 
> make/windows/makefiles/launcher.make
>     26 LAUNCHER_FLAGS=$(CXX_FLAGS) $(ARCHFLAG) \
>     27         /D FULL_VERSION=\"$(HOTSPOT_RELEASE_VERSION)\" \
>     28         /D JDK_MAJOR_VERSION=\"$(JDK_MAJOR_VERSION)\" \
>     29         /D JDK_MINOR_VERSION=\"$(JDK_MINOR_VERSION)\" \
>     30         /D GAMMA \
>     31         /D LAUNCHER_TYPE=\"gamma\" \
> 



More information about the hotspot-runtime-dev mailing list