hotspot/src/os/windows/vm/os_windows.cpp
changeset 1664 fc9ed50498fb
parent 1620 a85945264abc
child 4762 c75b48e6b250
child 2012 041fbc6030dd
equal deleted inserted replaced
1660:86be56b9ba46 1664:fc9ed50498fb
  2018 
  2018 
  2019         // In conservative mode, don't unguard unless the address is in the VM
  2019         // In conservative mode, don't unguard unless the address is in the VM
  2020         if (UnguardOnExecutionViolation > 0 && addr != last_addr &&
  2020         if (UnguardOnExecutionViolation > 0 && addr != last_addr &&
  2021             (UnguardOnExecutionViolation > 1 || os::address_is_in_vm(addr))) {
  2021             (UnguardOnExecutionViolation > 1 || os::address_is_in_vm(addr))) {
  2022 
  2022 
  2023           // Unguard and retry
  2023           // Set memory to RWX and retry
  2024           address page_start =
  2024           address page_start =
  2025             (address) align_size_down((intptr_t) addr, (intptr_t) page_size);
  2025             (address) align_size_down((intptr_t) addr, (intptr_t) page_size);
  2026           bool res = os::unguard_memory((char*) page_start, page_size);
  2026           bool res = os::protect_memory((char*) page_start, page_size,
       
  2027                                         os::MEM_PROT_RWX);
  2027 
  2028 
  2028           if (PrintMiscellaneous && Verbose) {
  2029           if (PrintMiscellaneous && Verbose) {
  2029             char buf[256];
  2030             char buf[256];
  2030             jio_snprintf(buf, sizeof(buf), "Execution protection violation "
  2031             jio_snprintf(buf, sizeof(buf), "Execution protection violation "
  2031                          "at " INTPTR_FORMAT
  2032                          "at " INTPTR_FORMAT
  2753   return VirtualProtect(addr, bytes, p, &old_status) != 0;
  2754   return VirtualProtect(addr, bytes, p, &old_status) != 0;
  2754 }
  2755 }
  2755 
  2756 
  2756 bool os::guard_memory(char* addr, size_t bytes) {
  2757 bool os::guard_memory(char* addr, size_t bytes) {
  2757   DWORD old_status;
  2758   DWORD old_status;
  2758   return VirtualProtect(addr, bytes, PAGE_EXECUTE_READWRITE | PAGE_GUARD, &old_status) != 0;
  2759   return VirtualProtect(addr, bytes, PAGE_READWRITE | PAGE_GUARD, &old_status) != 0;
  2759 }
  2760 }
  2760 
  2761 
  2761 bool os::unguard_memory(char* addr, size_t bytes) {
  2762 bool os::unguard_memory(char* addr, size_t bytes) {
  2762   DWORD old_status;
  2763   DWORD old_status;
  2763   return VirtualProtect(addr, bytes, PAGE_EXECUTE_READWRITE, &old_status) != 0;
  2764   return VirtualProtect(addr, bytes, PAGE_READWRITE, &old_status) != 0;
  2764 }
  2765 }
  2765 
  2766 
  2766 void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { }
  2767 void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) { }
  2767 void os::free_memory(char *addr, size_t bytes)         { }
  2768 void os::free_memory(char *addr, size_t bytes)         { }
  2768 void os::numa_make_global(char *addr, size_t bytes)    { }
  2769 void os::numa_make_global(char *addr, size_t bytes)    { }