Mercurial > hg > truffle
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) { |