comparison src/os/solaris/vm/os_solaris.cpp @ 647:bd441136a5ce

Merge
author kvn
date Thu, 19 Mar 2009 09:13:24 -0700
parents 0fbdb4381b99 660978a2a31a
children 6bdd6923ba16
comparison
equal deleted inserted replaced
640:ba50942c8138 647:bd441136a5ce
3218 return false; 3218 return false;
3219 } 3219 }
3220 return true; 3220 return true;
3221 } 3221 }
3222 3222
3223 char* os::reserve_memory_special(size_t bytes) { 3223 char* os::reserve_memory_special(size_t bytes, char* addr) {
3224 assert(UseLargePages && UseISM, "only for ISM large pages"); 3224 assert(UseLargePages && UseISM, "only for ISM large pages");
3225 3225
3226 size_t size = bytes; 3226 size_t size = bytes;
3227 char* retAddr = NULL; 3227 char* retAddr = NULL;
3228 int shmid; 3228 int shmid;
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) {