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

Daniel D. Daugherty daniel.daugherty at oracle.com
Wed Dec 19 07:22:31 PST 2012


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?

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 serviceability-dev mailing list