equal
deleted
inserted
replaced
2630 return true; |
2630 return true; |
2631 } |
2631 } |
2632 |
2632 |
2633 char* os::reserve_memory_special(size_t bytes, char* addr, bool exec) { |
2633 char* os::reserve_memory_special(size_t bytes, char* addr, bool exec) { |
2634 |
2634 |
|
2635 const DWORD prot = exec ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE; |
|
2636 |
2635 if (UseLargePagesIndividualAllocation) { |
2637 if (UseLargePagesIndividualAllocation) { |
2636 if (TracePageSizes && Verbose) { |
2638 if (TracePageSizes && Verbose) { |
2637 tty->print_cr("Reserving large pages individually."); |
2639 tty->print_cr("Reserving large pages individually."); |
2638 } |
2640 } |
2639 char * p_buf; |
2641 char * p_buf; |
2692 p_new = NULL; |
2694 p_new = NULL; |
2693 } else { |
2695 } else { |
2694 p_new = (char *) VirtualAlloc(next_alloc_addr, |
2696 p_new = (char *) VirtualAlloc(next_alloc_addr, |
2695 bytes_to_rq, |
2697 bytes_to_rq, |
2696 MEM_RESERVE | MEM_COMMIT | MEM_LARGE_PAGES, |
2698 MEM_RESERVE | MEM_COMMIT | MEM_LARGE_PAGES, |
2697 PAGE_READWRITE); |
2699 prot); |
2698 if (p_new != NULL && exec) { |
|
2699 DWORD oldprot; |
|
2700 // Windows doc says to use VirtualProtect to get execute permissions |
|
2701 VirtualProtect(next_alloc_addr, bytes_to_rq, |
|
2702 PAGE_EXECUTE_READWRITE, &oldprot); |
|
2703 } |
|
2704 } |
2700 } |
2705 |
2701 |
2706 if (p_new == NULL) { |
2702 if (p_new == NULL) { |
2707 // Free any allocated pages |
2703 // Free any allocated pages |
2708 if (next_alloc_addr > p_buf) { |
2704 if (next_alloc_addr > p_buf) { |
2727 return p_buf; |
2723 return p_buf; |
2728 |
2724 |
2729 } else { |
2725 } else { |
2730 // normal policy just allocate it all at once |
2726 // normal policy just allocate it all at once |
2731 DWORD flag = MEM_RESERVE | MEM_COMMIT | MEM_LARGE_PAGES; |
2727 DWORD flag = MEM_RESERVE | MEM_COMMIT | MEM_LARGE_PAGES; |
2732 char * res = (char *)VirtualAlloc(NULL, bytes, flag, PAGE_READWRITE); |
2728 char * res = (char *)VirtualAlloc(NULL, bytes, flag, prot); |
2733 if (res != NULL && exec) { |
|
2734 DWORD oldprot; |
|
2735 // Windows doc says to use VirtualProtect to get execute permissions |
|
2736 VirtualProtect(res, bytes, PAGE_EXECUTE_READWRITE, &oldprot); |
|
2737 } |
|
2738 return res; |
2729 return res; |
2739 } |
2730 } |
2740 } |
2731 } |
2741 |
2732 |
2742 bool os::release_memory_special(char* base, size_t bytes) { |
2733 bool os::release_memory_special(char* base, size_t bytes) { |