hotspot/src/os/solaris/vm/os_solaris.cpp
changeset 37113 5a33bf5089ac
parent 37040 a18ea1416ff8
child 37118 42d3dc23603e
equal deleted inserted replaced
37111:98572401ab0a 37113:5a33bf5089ac
  1007   if (status == 0) {
  1007   if (status == 0) {
  1008     log_info(os, thread)("Thread started (tid: " UINTX_FORMAT ", attributes: %s). ",
  1008     log_info(os, thread)("Thread started (tid: " UINTX_FORMAT ", attributes: %s). ",
  1009       (uintx) tid, describe_thr_create_attributes(buf, sizeof(buf), stack_size, flags));
  1009       (uintx) tid, describe_thr_create_attributes(buf, sizeof(buf), stack_size, flags));
  1010   } else {
  1010   } else {
  1011     log_warning(os, thread)("Failed to start thread - thr_create failed (%s) for attributes: %s.",
  1011     log_warning(os, thread)("Failed to start thread - thr_create failed (%s) for attributes: %s.",
  1012       strerror(status), describe_thr_create_attributes(buf, sizeof(buf), stack_size, flags));
  1012       os::errno_name(status), describe_thr_create_attributes(buf, sizeof(buf), stack_size, flags));
  1013   }
  1013   }
  1014 
  1014 
  1015   if (status != 0) {
  1015   if (status != 0) {
  1016     thread->set_osthread(NULL);
  1016     thread->set_osthread(NULL);
  1017     // Need to clean up stuff we've allocated so far
  1017     // Need to clean up stuff we've allocated so far
  1352 
  1352 
  1353 // Must return millis since Jan 1 1970 for JVM_CurrentTimeMillis
  1353 // Must return millis since Jan 1 1970 for JVM_CurrentTimeMillis
  1354 jlong os::javaTimeMillis() {
  1354 jlong os::javaTimeMillis() {
  1355   timeval t;
  1355   timeval t;
  1356   if (gettimeofday(&t, NULL) == -1) {
  1356   if (gettimeofday(&t, NULL) == -1) {
  1357     fatal("os::javaTimeMillis: gettimeofday (%s)", strerror(errno));
  1357     fatal("os::javaTimeMillis: gettimeofday (%s)", os::strerror(errno));
  1358   }
  1358   }
  1359   return jlong(t.tv_sec) * 1000  +  jlong(t.tv_usec) / 1000;
  1359   return jlong(t.tv_sec) * 1000  +  jlong(t.tv_usec) / 1000;
  1360 }
  1360 }
  1361 
  1361 
  1362 void os::javaTimeSystemUTC(jlong &seconds, jlong &nanos) {
  1362 void os::javaTimeSystemUTC(jlong &seconds, jlong &nanos) {
  1363   timeval t;
  1363   timeval t;
  1364   if (gettimeofday(&t, NULL) == -1) {
  1364   if (gettimeofday(&t, NULL) == -1) {
  1365     fatal("os::javaTimeSystemUTC: gettimeofday (%s)", strerror(errno));
  1365     fatal("os::javaTimeSystemUTC: gettimeofday (%s)", os::strerror(errno));
  1366   }
  1366   }
  1367   seconds = jlong(t.tv_sec);
  1367   seconds = jlong(t.tv_sec);
  1368   nanos = jlong(t.tv_usec) * 1000;
  1368   nanos = jlong(t.tv_usec) * 1000;
  1369 }
  1369 }
  1370 
  1370 
  2159 // from src/solaris/hpi/src/system_md.c
  2159 // from src/solaris/hpi/src/system_md.c
  2160 
  2160 
  2161 size_t os::lasterror(char *buf, size_t len) {
  2161 size_t os::lasterror(char *buf, size_t len) {
  2162   if (errno == 0)  return 0;
  2162   if (errno == 0)  return 0;
  2163 
  2163 
  2164   const char *s = ::strerror(errno);
  2164   const char *s = os::strerror(errno);
  2165   size_t n = ::strlen(s);
  2165   size_t n = ::strlen(s);
  2166   if (n >= len) {
  2166   if (n >= len) {
  2167     n = len - 1;
  2167     n = len - 1;
  2168   }
  2168   }
  2169   ::strncpy(buf, s, n);
  2169   ::strncpy(buf, s, n);
  2368 
  2368 
  2369 static void warn_fail_commit_memory(char* addr, size_t bytes, bool exec,
  2369 static void warn_fail_commit_memory(char* addr, size_t bytes, bool exec,
  2370                                     int err) {
  2370                                     int err) {
  2371   warning("INFO: os::commit_memory(" PTR_FORMAT ", " SIZE_FORMAT
  2371   warning("INFO: os::commit_memory(" PTR_FORMAT ", " SIZE_FORMAT
  2372           ", %d) failed; error='%s' (errno=%d)", addr, bytes, exec,
  2372           ", %d) failed; error='%s' (errno=%d)", addr, bytes, exec,
  2373           strerror(err), err);
  2373           os::strerror(err), err);
  2374 }
  2374 }
  2375 
  2375 
  2376 static void warn_fail_commit_memory(char* addr, size_t bytes,
  2376 static void warn_fail_commit_memory(char* addr, size_t bytes,
  2377                                     size_t alignment_hint, bool exec,
  2377                                     size_t alignment_hint, bool exec,
  2378                                     int err) {
  2378                                     int err) {
  2379   warning("INFO: os::commit_memory(" PTR_FORMAT ", " SIZE_FORMAT
  2379   warning("INFO: os::commit_memory(" PTR_FORMAT ", " SIZE_FORMAT
  2380           ", " SIZE_FORMAT ", %d) failed; error='%s' (errno=%d)", addr, bytes,
  2380           ", " SIZE_FORMAT ", %d) failed; error='%s' (errno=%d)", addr, bytes,
  2381           alignment_hint, exec, strerror(err), err);
  2381           alignment_hint, exec, os::strerror(err), err);
  2382 }
  2382 }
  2383 
  2383 
  2384 int os::Solaris::commit_memory_impl(char* addr, size_t bytes, bool exec) {
  2384 int os::Solaris::commit_memory_impl(char* addr, size_t bytes, bool exec) {
  2385   int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE;
  2385   int prot = exec ? PROT_READ|PROT_WRITE|PROT_EXEC : PROT_READ|PROT_WRITE;
  2386   size_t size = bytes;
  2386   size_t size = bytes;
  2757 
  2757 
  2758   if (PrintMiscellaneous && Verbose) {
  2758   if (PrintMiscellaneous && Verbose) {
  2759     char buf[256];
  2759     char buf[256];
  2760     buf[0] = '\0';
  2760     buf[0] = '\0';
  2761     if (addr == NULL) {
  2761     if (addr == NULL) {
  2762       jio_snprintf(buf, sizeof(buf), ": %s", strerror(err));
  2762       jio_snprintf(buf, sizeof(buf), ": %s", os::strerror(err));
  2763     }
  2763     }
  2764     warning("attempt_reserve_memory_at: couldn't reserve " SIZE_FORMAT " bytes at "
  2764     warning("attempt_reserve_memory_at: couldn't reserve " SIZE_FORMAT " bytes at "
  2765             PTR_FORMAT ": reserve_memory_helper returned " PTR_FORMAT
  2765             PTR_FORMAT ": reserve_memory_helper returned " PTR_FORMAT
  2766             "%s", bytes, requested_addr, addr, buf);
  2766             "%s", bytes, requested_addr, addr, buf);
  2767   }
  2767   }
  4371 
  4371 
  4372   init_random(1234567);
  4372   init_random(1234567);
  4373 
  4373 
  4374   page_size = sysconf(_SC_PAGESIZE);
  4374   page_size = sysconf(_SC_PAGESIZE);
  4375   if (page_size == -1) {
  4375   if (page_size == -1) {
  4376     fatal("os_solaris.cpp: os::init: sysconf failed (%s)", strerror(errno));
  4376     fatal("os_solaris.cpp: os::init: sysconf failed (%s)", os::strerror(errno));
  4377   }
  4377   }
  4378   init_page_sizes((size_t) page_size);
  4378   init_page_sizes((size_t) page_size);
  4379 
  4379 
  4380   Solaris::initialize_system_info();
  4380   Solaris::initialize_system_info();
  4381 
  4381 
  4383   // if we need them.
  4383   // if we need them.
  4384   Solaris::misc_sym_init();
  4384   Solaris::misc_sym_init();
  4385 
  4385 
  4386   int fd = ::open("/dev/zero", O_RDWR);
  4386   int fd = ::open("/dev/zero", O_RDWR);
  4387   if (fd < 0) {
  4387   if (fd < 0) {
  4388     fatal("os::init: cannot open /dev/zero (%s)", strerror(errno));
  4388     fatal("os::init: cannot open /dev/zero (%s)", os::strerror(errno));
  4389   } else {
  4389   } else {
  4390     Solaris::set_dev_zero_fd(fd);
  4390     Solaris::set_dev_zero_fd(fd);
  4391 
  4391 
  4392     // Close on exec, child won't inherit.
  4392     // Close on exec, child won't inherit.
  4393     fcntl(fd, F_SETFD, FD_CLOEXEC);
  4393     fcntl(fd, F_SETFD, FD_CLOEXEC);
  5624     pid = fork1();
  5624     pid = fork1();
  5625   }
  5625   }
  5626 
  5626 
  5627   if (pid < 0) {
  5627   if (pid < 0) {
  5628     // fork failed
  5628     // fork failed
  5629     warning("fork failed: %s", strerror(errno));
  5629     warning("fork failed: %s", os::strerror(errno));
  5630     return -1;
  5630     return -1;
  5631 
  5631 
  5632   } else if (pid == 0) {
  5632   } else if (pid == 0) {
  5633     // child process
  5633     // child process
  5634 
  5634