mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-25 22:04:51 +02:00
Merge
This commit is contained in:
commit
d7850a0df7
2 changed files with 14 additions and 5 deletions
|
@ -2597,10 +2597,14 @@ get_stack_bounds(uintptr_t *bottom, uintptr_t *top)
|
||||||
// where we're going to put our guard pages, truncate the mapping at
|
// where we're going to put our guard pages, truncate the mapping at
|
||||||
// that point by munmap()ping it. This ensures that when we later
|
// that point by munmap()ping it. This ensures that when we later
|
||||||
// munmap() the guard pages we don't leave a hole in the stack
|
// munmap() the guard pages we don't leave a hole in the stack
|
||||||
// mapping.
|
// mapping. This only affects the main/initial thread, but guard
|
||||||
|
// against future OS changes
|
||||||
bool os::create_stack_guard_pages(char* addr, size_t size) {
|
bool os::create_stack_guard_pages(char* addr, size_t size) {
|
||||||
uintptr_t stack_extent, stack_base;
|
uintptr_t stack_extent, stack_base;
|
||||||
if (get_stack_bounds(&stack_extent, &stack_base)) {
|
bool chk_bounds = NOT_DEBUG(os::Linux::is_initial_thread()) DEBUG_ONLY(true);
|
||||||
|
if (chk_bounds && get_stack_bounds(&stack_extent, &stack_base)) {
|
||||||
|
assert(os::Linux::is_initial_thread(),
|
||||||
|
"growable stack in non-initial thread");
|
||||||
if (stack_extent < (uintptr_t)addr)
|
if (stack_extent < (uintptr_t)addr)
|
||||||
::munmap((void*)stack_extent, (uintptr_t)addr - stack_extent);
|
::munmap((void*)stack_extent, (uintptr_t)addr - stack_extent);
|
||||||
}
|
}
|
||||||
|
@ -2609,10 +2613,15 @@ bool os::create_stack_guard_pages(char* addr, size_t size) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// If this is a growable mapping, remove the guard pages entirely by
|
// If this is a growable mapping, remove the guard pages entirely by
|
||||||
// munmap()ping them. If not, just call uncommit_memory().
|
// munmap()ping them. If not, just call uncommit_memory(). This only
|
||||||
|
// affects the main/initial thread, but guard against future OS changes
|
||||||
bool os::remove_stack_guard_pages(char* addr, size_t size) {
|
bool os::remove_stack_guard_pages(char* addr, size_t size) {
|
||||||
uintptr_t stack_extent, stack_base;
|
uintptr_t stack_extent, stack_base;
|
||||||
if (get_stack_bounds(&stack_extent, &stack_base)) {
|
bool chk_bounds = NOT_DEBUG(os::Linux::is_initial_thread()) DEBUG_ONLY(true);
|
||||||
|
if (chk_bounds && get_stack_bounds(&stack_extent, &stack_base)) {
|
||||||
|
assert(os::Linux::is_initial_thread(),
|
||||||
|
"growable stack in non-initial thread");
|
||||||
|
|
||||||
return ::munmap(addr, size) == 0;
|
return ::munmap(addr, size) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -382,7 +382,7 @@ void instanceKlass::initialize_impl(instanceKlassHandle this_oop, TRAPS) {
|
||||||
const char* desc = "Could not initialize class ";
|
const char* desc = "Could not initialize class ";
|
||||||
const char* className = this_oop->external_name();
|
const char* className = this_oop->external_name();
|
||||||
size_t msglen = strlen(desc) + strlen(className) + 1;
|
size_t msglen = strlen(desc) + strlen(className) + 1;
|
||||||
char* message = NEW_C_HEAP_ARRAY(char, msglen);
|
char* message = NEW_RESOURCE_ARRAY(char, msglen);
|
||||||
if (NULL == message) {
|
if (NULL == message) {
|
||||||
// Out of memory: can't create detailed error message
|
// Out of memory: can't create detailed error message
|
||||||
THROW_MSG(vmSymbols::java_lang_NoClassDefFoundError(), className);
|
THROW_MSG(vmSymbols::java_lang_NoClassDefFoundError(), className);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue