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 } |