hotspot/src/os/linux/vm/os_linux.cpp
changeset 1889 24b003a6fe46
parent 1664 fc9ed50498fb
child 1892 6cb9181f6061
equal deleted inserted replaced
1888:bbf498fb4354 1889:24b003a6fe46
  1158         // Skip blank chars
  1158         // Skip blank chars
  1159         do s++; while (isspace(*s));
  1159         do s++; while (isspace(*s));
  1160 
  1160 
  1161         /*                                     1   1   1   1   1   1   1   1   1   1   2   2   2   2   2   2   2   2   2 */
  1161         /*                                     1   1   1   1   1   1   1   1   1   1   2   2   2   2   2   2   2   2   2 */
  1162         /*              3  4  5  6  7  8   9   0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5   6   7   8 */
  1162         /*              3  4  5  6  7  8   9   0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5   6   7   8 */
  1163         i = sscanf(s, "%c %d %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %ld %ld %ld %ld %ld %ld %lu %lu %ld %lu %lu %lu %lu",
  1163         i = sscanf(s, "%c %d %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %ld %ld %ld %ld %ld %ld "
       
  1164                    UINTX_FORMAT UINTX_FORMAT UINTX_FORMAT
       
  1165                    " %lu "
       
  1166                    UINTX_FORMAT UINTX_FORMAT UINTX_FORMAT,
  1164              &state,          /* 3  %c  */
  1167              &state,          /* 3  %c  */
  1165              &ppid,           /* 4  %d  */
  1168              &ppid,           /* 4  %d  */
  1166              &pgrp,           /* 5  %d  */
  1169              &pgrp,           /* 5  %d  */
  1167              &session,        /* 6  %d  */
  1170              &session,        /* 6  %d  */
  1168              &nr,             /* 7  %d  */
  1171              &nr,             /* 7  %d  */
  1178              &cstime,         /* 17 %ld  */
  1181              &cstime,         /* 17 %ld  */
  1179              &prio,           /* 18 %ld  */
  1182              &prio,           /* 18 %ld  */
  1180              &nice,           /* 19 %ld  */
  1183              &nice,           /* 19 %ld  */
  1181              &junk,           /* 20 %ld  */
  1184              &junk,           /* 20 %ld  */
  1182              &it_real,        /* 21 %ld  */
  1185              &it_real,        /* 21 %ld  */
  1183              &start,          /* 22 %lu  */
  1186              &start,          /* 22 UINTX_FORMAT  */
  1184              &vsize,          /* 23 %lu  */
  1187              &vsize,          /* 23 UINTX_FORMAT  */
  1185              &rss,            /* 24 %ld  */
  1188              &rss,            /* 24 UINTX_FORMAT  */
  1186              &rsslim,         /* 25 %lu  */
  1189              &rsslim,         /* 25 %lu  */
  1187              &scodes,         /* 26 %lu  */
  1190              &scodes,         /* 26 UINTX_FORMAT  */
  1188              &ecode,          /* 27 %lu  */
  1191              &ecode,          /* 27 UINTX_FORMAT  */
  1189              &stack_start);   /* 28 %lu  */
  1192              &stack_start);   /* 28 UINTX_FORMAT  */
  1190       }
  1193       }
  1191 
  1194 
  1192       if (i != 28 - 2) {
  1195       if (i != 28 - 2) {
  1193          assert(false, "Bad conversion from /proc/self/stat");
  1196          assert(false, "Bad conversion from /proc/self/stat");
  1194          // product mode - assume we are the initial thread, good luck in the
  1197          // product mode - assume we are the initial thread, good luck in the
  2022   char dli_fname[MAXPATHLEN];
  2025   char dli_fname[MAXPATHLEN];
  2023   bool ret = dll_address_to_library_name(
  2026   bool ret = dll_address_to_library_name(
  2024                 CAST_FROM_FN_PTR(address, os::jvm_path),
  2027                 CAST_FROM_FN_PTR(address, os::jvm_path),
  2025                 dli_fname, sizeof(dli_fname), NULL);
  2028                 dli_fname, sizeof(dli_fname), NULL);
  2026   assert(ret != 0, "cannot locate libjvm");
  2029   assert(ret != 0, "cannot locate libjvm");
  2027   realpath(dli_fname, buf);
  2030   if (realpath(dli_fname, buf) == NULL)
       
  2031     return;
  2028 
  2032 
  2029   if (strcmp(Arguments::sun_java_launcher(), "gamma") == 0) {
  2033   if (strcmp(Arguments::sun_java_launcher(), "gamma") == 0) {
  2030     // Support for the gamma launcher.  Typical value for buf is
  2034     // Support for the gamma launcher.  Typical value for buf is
  2031     // "<JAVA_HOME>/jre/lib/<arch>/<vmtype>/libjvm.so".  If "/jre/lib/" appears at
  2035     // "<JAVA_HOME>/jre/lib/<arch>/<vmtype>/libjvm.so".  If "/jre/lib/" appears at
  2032     // the right place in the string, then assume we are installed in a JDK and
  2036     // the right place in the string, then assume we are installed in a JDK and
  2046         // Check the current module name "libjvm.so" or "libjvm_g.so".
  2050         // Check the current module name "libjvm.so" or "libjvm_g.so".
  2047         p = strrchr(buf, '/');
  2051         p = strrchr(buf, '/');
  2048         assert(strstr(p, "/libjvm") == p, "invalid library name");
  2052         assert(strstr(p, "/libjvm") == p, "invalid library name");
  2049         p = strstr(p, "_g") ? "_g" : "";
  2053         p = strstr(p, "_g") ? "_g" : "";
  2050 
  2054 
  2051         realpath(java_home_var, buf);
  2055         if (realpath(java_home_var, buf) == NULL)
       
  2056           return;
  2052         sprintf(buf + strlen(buf), "/jre/lib/%s", cpu_arch);
  2057         sprintf(buf + strlen(buf), "/jre/lib/%s", cpu_arch);
  2053         if (0 == access(buf, F_OK)) {
  2058         if (0 == access(buf, F_OK)) {
  2054           // Use current module name "libjvm[_g].so" instead of
  2059           // Use current module name "libjvm[_g].so" instead of
  2055           // "libjvm"debug_only("_g")".so" since for fastdebug version
  2060           // "libjvm"debug_only("_g")".so" since for fastdebug version
  2056           // we should have "libjvm.so" but debug_only("_g") adds "_g"!
  2061           // we should have "libjvm.so" but debug_only("_g") adds "_g"!
  2057           // It is used when we are choosing the HPI library's name
  2062           // It is used when we are choosing the HPI library's name
  2058           // "libhpi[_g].so" in hpi::initialize_get_interface().
  2063           // "libhpi[_g].so" in hpi::initialize_get_interface().
  2059           sprintf(buf + strlen(buf), "/hotspot/libjvm%s.so", p);
  2064           sprintf(buf + strlen(buf), "/hotspot/libjvm%s.so", p);
  2060         } else {
  2065         } else {
  2061           // Go back to path of .so
  2066           // Go back to path of .so
  2062           realpath(dli_fname, buf);
  2067           if (realpath(dli_fname, buf) == NULL)
       
  2068             return;
  2063         }
  2069         }
  2064       }
  2070       }
  2065     }
  2071     }
  2066   }
  2072   }
  2067 
  2073 
  4182   if (s == NULL ) return -1;
  4188   if (s == NULL ) return -1;
  4183 
  4189 
  4184   // Skip blank chars
  4190   // Skip blank chars
  4185   do s++; while (isspace(*s));
  4191   do s++; while (isspace(*s));
  4186 
  4192 
  4187   count = sscanf(s,"%c %d %d %d %d %d %lu %lu %lu %lu %lu %lu %lu",
  4193   count = sscanf(s,"%*c %d %d %d %d %d %lu %lu %lu %lu %lu %lu %lu",
  4188                  &idummy, &idummy, &idummy, &idummy, &idummy, &idummy,
  4194                  &idummy, &idummy, &idummy, &idummy, &idummy,
  4189                  &ldummy, &ldummy, &ldummy, &ldummy, &ldummy,
  4195                  &ldummy, &ldummy, &ldummy, &ldummy, &ldummy,
  4190                  &user_time, &sys_time);
  4196                  &user_time, &sys_time);
  4191   if ( count != 13 ) return -1;
  4197   if ( count != 12 ) return -1;
  4192   if (user_sys_cpu_time) {
  4198   if (user_sys_cpu_time) {
  4193     return ((jlong)sys_time + (jlong)user_time) * (1000000000 / clock_tics_per_sec);
  4199     return ((jlong)sys_time + (jlong)user_time) * (1000000000 / clock_tics_per_sec);
  4194   } else {
  4200   } else {
  4195     return (jlong)user_time * (1000000000 / clock_tics_per_sec);
  4201     return (jlong)user_time * (1000000000 / clock_tics_per_sec);
  4196   }
  4202   }