Skip to content

Commit

Permalink
Merge pull request #2 from ibmruntimes/APARIJ47413_11.0.19.7
Browse files Browse the repository at this point in the history
Disable safe point OSR if sampled object allocate hook is used
  • Loading branch information
yathamravali committed Jul 4, 2023
2 parents d57d059 + acbe94d commit 4cf085e
Showing 1 changed file with 23 additions and 14 deletions.
37 changes: 23 additions & 14 deletions runtime/vm/vmhook.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@
#include "j9.h"
#include "j9protos.h"
#include "j9consts.h"
#include "vmhook_internal.h"
#include "mmhook.h"
#include "vmhook.h"
#include "ut_j9vm.h"
#include "vm_internal.h"

Expand Down Expand Up @@ -116,28 +117,36 @@ hookAboutToBootstrapEvent(J9HookInterface** hook, UDATA eventNum, void* voidEven
J9VMAboutToBootstrapEvent* eventData = voidEventData;
J9VMThread* vmThread = eventData->currentThread;
J9JavaVM* vm = vmThread->javaVM;
J9HookInterface** hookInterface = J9_HOOK_INTERFACE(vm->hookInterface);
J9HookInterface** vmHook = vm->internalVMFunctions->getVMHookInterface(vm);
J9HookInterface** gcHook = vm->memoryManagerFunctions->j9gc_get_hook_interface(vm);

/* these hooks must be reserved by now. Attempt to disable them so that they're in a well-known state after this */
(*hookInterface)->J9HookDisable(hookInterface, J9HOOK_VM_MONITOR_CONTENDED_EXIT);
(*vmHook)->J9HookDisable(vmHook, J9HOOK_VM_MONITOR_CONTENDED_EXIT);

/* The instrumentable object allocate hook disables safepoint OSR */
if ((*hookInterface)->J9HookDisable(hookInterface, J9HOOK_VM_OBJECT_ALLOCATE_INSTRUMENTABLE)) {
if ((*vmHook)->J9HookDisable(vmHook, J9HOOK_VM_OBJECT_ALLOCATE_INSTRUMENTABLE)) {
omrthread_monitor_enter(vm->runtimeFlagsMutex);
vm->extendedRuntimeFlags &= ~(UDATA)(J9_EXTENDED_RUNTIME_OSR_SAFE_POINT| J9_EXTENDED_RUNTIME_OSR_SAFE_POINT_FV);
omrthread_monitor_exit(vm->runtimeFlagsMutex);
}

/* The sampled object allocate hook disables safepoint OSR */
if ((*gcHook)->J9HookDisable(gcHook, J9HOOK_MM_OBJECT_ALLOCATION_SAMPLING)) {
omrthread_monitor_enter(vm->runtimeFlagsMutex);
vm->extendedRuntimeFlags &= ~(UDATA)(J9_EXTENDED_RUNTIME_OSR_SAFE_POINT| J9_EXTENDED_RUNTIME_OSR_SAFE_POINT_FV);
omrthread_monitor_exit(vm->runtimeFlagsMutex);
}

if ((*hookInterface)->J9HookDisable(hookInterface, J9HOOK_VM_METHOD_ENTER)
|| (*hookInterface)->J9HookDisable(hookInterface, J9HOOK_VM_METHOD_RETURN)
|| (*hookInterface)->J9HookDisable(hookInterface, J9HOOK_VM_FRAME_POP)
|| (*hookInterface)->J9HookDisable(hookInterface, J9HOOK_VM_POP_FRAMES_INTERRUPT)
|| (*hookInterface)->J9HookDisable(hookInterface, J9HOOK_VM_SINGLE_STEP)
|| (*hookInterface)->J9HookDisable(hookInterface, J9HOOK_VM_BREAKPOINT)
|| (*hookInterface)->J9HookDisable(hookInterface, J9HOOK_VM_GET_FIELD)
|| (*hookInterface)->J9HookDisable(hookInterface, J9HOOK_VM_PUT_FIELD)
|| (*hookInterface)->J9HookDisable(hookInterface, J9HOOK_VM_GET_STATIC_FIELD)
|| (*hookInterface)->J9HookDisable(hookInterface, J9HOOK_VM_PUT_STATIC_FIELD)
if ((*vmHook)->J9HookDisable(vmHook, J9HOOK_VM_METHOD_ENTER)
|| (*vmHook)->J9HookDisable(vmHook, J9HOOK_VM_METHOD_RETURN)
|| (*vmHook)->J9HookDisable(vmHook, J9HOOK_VM_FRAME_POP)
|| (*vmHook)->J9HookDisable(vmHook, J9HOOK_VM_POP_FRAMES_INTERRUPT)
|| (*vmHook)->J9HookDisable(vmHook, J9HOOK_VM_SINGLE_STEP)
|| (*vmHook)->J9HookDisable(vmHook, J9HOOK_VM_BREAKPOINT)
|| (*vmHook)->J9HookDisable(vmHook, J9HOOK_VM_GET_FIELD)
|| (*vmHook)->J9HookDisable(vmHook, J9HOOK_VM_PUT_FIELD)
|| (*vmHook)->J9HookDisable(vmHook, J9HOOK_VM_GET_STATIC_FIELD)
|| (*vmHook)->J9HookDisable(vmHook, J9HOOK_VM_PUT_STATIC_FIELD)
|| (vm->extendedRuntimeFlags & J9_EXTENDED_RUNTIME_METHOD_TRACE_ENABLED)
|| (vm->requiredDebugAttributes & J9VM_DEBUG_ATTRIBUTE_CAN_ACCESS_LOCALS))
{
Expand Down

0 comments on commit 4cf085e

Please sign in to comment.