4449 int_fnP_thread_t_i_gregset_t os::Solaris::_thr_setstate; |
4449 int_fnP_thread_t_i_gregset_t os::Solaris::_thr_setstate; |
4450 int_fnP_thread_t_i os::Solaris::_thr_setmutator; |
4450 int_fnP_thread_t_i os::Solaris::_thr_setmutator; |
4451 int_fnP_thread_t os::Solaris::_thr_suspend_mutator; |
4451 int_fnP_thread_t os::Solaris::_thr_suspend_mutator; |
4452 int_fnP_thread_t os::Solaris::_thr_continue_mutator; |
4452 int_fnP_thread_t os::Solaris::_thr_continue_mutator; |
4453 |
4453 |
|
4454 // (Static) wrapper for getisax(2) call. |
|
4455 os::Solaris::getisax_func_t os::Solaris::_getisax = 0; |
|
4456 |
4454 // (Static) wrappers for the liblgrp API |
4457 // (Static) wrappers for the liblgrp API |
4455 os::Solaris::lgrp_home_func_t os::Solaris::_lgrp_home; |
4458 os::Solaris::lgrp_home_func_t os::Solaris::_lgrp_home; |
4456 os::Solaris::lgrp_init_func_t os::Solaris::_lgrp_init; |
4459 os::Solaris::lgrp_init_func_t os::Solaris::_lgrp_init; |
4457 os::Solaris::lgrp_fini_func_t os::Solaris::_lgrp_fini; |
4460 os::Solaris::lgrp_fini_func_t os::Solaris::_lgrp_fini; |
4458 os::Solaris::lgrp_root_func_t os::Solaris::_lgrp_root; |
4461 os::Solaris::lgrp_root_func_t os::Solaris::_lgrp_root; |
4463 os::Solaris::lgrp_cookie_t os::Solaris::_lgrp_cookie = 0; |
4466 os::Solaris::lgrp_cookie_t os::Solaris::_lgrp_cookie = 0; |
4464 |
4467 |
4465 // (Static) wrapper for meminfo() call. |
4468 // (Static) wrapper for meminfo() call. |
4466 os::Solaris::meminfo_func_t os::Solaris::_meminfo = 0; |
4469 os::Solaris::meminfo_func_t os::Solaris::_meminfo = 0; |
4467 |
4470 |
4468 static address resolve_symbol(const char *name) { |
4471 static address resolve_symbol_lazy(const char* name) { |
4469 address addr; |
4472 address addr = (address) dlsym(RTLD_DEFAULT, name); |
4470 |
|
4471 addr = (address) dlsym(RTLD_DEFAULT, name); |
|
4472 if(addr == NULL) { |
4473 if(addr == NULL) { |
4473 // RTLD_DEFAULT was not defined on some early versions of 2.5.1 |
4474 // RTLD_DEFAULT was not defined on some early versions of 2.5.1 |
4474 addr = (address) dlsym(RTLD_NEXT, name); |
4475 addr = (address) dlsym(RTLD_NEXT, name); |
4475 if(addr == NULL) { |
4476 } |
4476 fatal(dlerror()); |
4477 return addr; |
4477 } |
4478 } |
|
4479 |
|
4480 static address resolve_symbol(const char* name) { |
|
4481 address addr = resolve_symbol_lazy(name); |
|
4482 if(addr == NULL) { |
|
4483 fatal(dlerror()); |
4478 } |
4484 } |
4479 return addr; |
4485 return addr; |
4480 } |
4486 } |
4481 |
4487 |
4482 |
4488 |
4671 } |
4677 } |
4672 return false; |
4678 return false; |
4673 } |
4679 } |
4674 |
4680 |
4675 void os::Solaris::misc_sym_init() { |
4681 void os::Solaris::misc_sym_init() { |
4676 address func = (address)dlsym(RTLD_DEFAULT, "meminfo"); |
4682 address func; |
4677 if(func == NULL) { |
4683 |
4678 func = (address) dlsym(RTLD_NEXT, "meminfo"); |
4684 // getisax |
4679 } |
4685 func = resolve_symbol_lazy("getisax"); |
|
4686 if (func != NULL) { |
|
4687 os::Solaris::_getisax = CAST_TO_FN_PTR(getisax_func_t, func); |
|
4688 } |
|
4689 |
|
4690 // meminfo |
|
4691 func = resolve_symbol_lazy("meminfo"); |
4680 if (func != NULL) { |
4692 if (func != NULL) { |
4681 os::Solaris::set_meminfo(CAST_TO_FN_PTR(meminfo_func_t, func)); |
4693 os::Solaris::set_meminfo(CAST_TO_FN_PTR(meminfo_func_t, func)); |
4682 } |
4694 } |
|
4695 } |
|
4696 |
|
4697 uint_t os::Solaris::getisax(uint32_t* array, uint_t n) { |
|
4698 assert(_getisax != NULL, "_getisax not set"); |
|
4699 return _getisax(array, n); |
4683 } |
4700 } |
4684 |
4701 |
4685 // Symbol doesn't exist in Solaris 8 pset.h |
4702 // Symbol doesn't exist in Solaris 8 pset.h |
4686 #ifndef PS_MYID |
4703 #ifndef PS_MYID |
4687 #define PS_MYID -3 |
4704 #define PS_MYID -3 |
4713 if (page_size == -1) |
4730 if (page_size == -1) |
4714 fatal1("os_solaris.cpp: os::init: sysconf failed (%s)", strerror(errno)); |
4731 fatal1("os_solaris.cpp: os::init: sysconf failed (%s)", strerror(errno)); |
4715 init_page_sizes((size_t) page_size); |
4732 init_page_sizes((size_t) page_size); |
4716 |
4733 |
4717 Solaris::initialize_system_info(); |
4734 Solaris::initialize_system_info(); |
|
4735 |
|
4736 // Initialize misc. symbols as soon as possible, so we can use them |
|
4737 // if we need them. |
|
4738 Solaris::misc_sym_init(); |
4718 |
4739 |
4719 int fd = open("/dev/zero", O_RDWR); |
4740 int fd = open("/dev/zero", O_RDWR); |
4720 if (fd < 0) { |
4741 if (fd < 0) { |
4721 fatal1("os::init: cannot open /dev/zero (%s)", strerror(errno)); |
4742 fatal1("os::init: cannot open /dev/zero (%s)", strerror(errno)); |
4722 } else { |
4743 } else { |
4855 if (!UseNUMA && ForceNUMA) { |
4876 if (!UseNUMA && ForceNUMA) { |
4856 UseNUMA = true; |
4877 UseNUMA = true; |
4857 } |
4878 } |
4858 } |
4879 } |
4859 |
4880 |
4860 Solaris::misc_sym_init(); |
|
4861 Solaris::signal_sets_init(); |
4881 Solaris::signal_sets_init(); |
4862 Solaris::init_signal_mem(); |
4882 Solaris::init_signal_mem(); |
4863 Solaris::install_signal_handlers(); |
4883 Solaris::install_signal_handlers(); |
4864 |
4884 |
4865 if (libjsigversion < JSIG_VERSION_1_4_1) { |
4885 if (libjsigversion < JSIG_VERSION_1_4_1) { |