Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clean up J9HookDisable calls in the compiler #16960

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 15 additions & 23 deletions runtime/compiler/control/J9Options.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include "j9cfg.h"
#include "j9modron.h"
#include "jvminit.h"
#include "j9hookable.h"
#if defined(J9VM_OPT_JITSERVER)
#include "j9vmnls.h"
#include "omrformatconsts.h"
Expand Down Expand Up @@ -2812,7 +2813,6 @@ bool J9::Options::feLatePostProcess(void * base, TR::OptionSet * optionSet)

J9JITConfig * jitConfig = (J9JITConfig*)base;
J9JavaVM * javaVM = jitConfig->javaVM;
J9HookInterface * * vmHooks = javaVM->internalVMFunctions->getVMHookInterface(javaVM);

TR_J9VMBase * vm = TR_J9VMBase::get(jitConfig, 0);
TR::CompilationInfo * compInfo = TR::CompilationInfo::get(jitConfig);
Expand Down Expand Up @@ -2847,16 +2847,16 @@ bool J9::Options::feLatePostProcess(void * base, TR::OptionSet * optionSet)
(javaVM->requiredDebugAttributes & J9VM_DEBUG_ATTRIBUTE_CAN_ACCESS_LOCALS) ||
#endif
#if defined (J9VM_INTERP_HOT_CODE_REPLACEMENT)
(*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_POP_FRAMES_INTERRUPT) ||
J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_POP_FRAMES_INTERRUPT) ||
#endif
(*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_BREAKPOINT) ||
(*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_FRAME_POPPED) ||
(*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_FRAME_POP) ||
(*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_GET_FIELD) ||
(*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_PUT_FIELD) ||
(*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_GET_STATIC_FIELD) ||
(*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_PUT_STATIC_FIELD) ||
(*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_SINGLE_STEP))
J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_BREAKPOINT) ||
J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_FRAME_POPPED) ||
J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_FRAME_POP) ||
J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_GET_FIELD) ||
J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_PUT_FIELD) ||
J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_GET_STATIC_FIELD) ||
J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_PUT_STATIC_FIELD) ||
J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_SINGLE_STEP))
{
static bool TR_DisableFullSpeedDebug = (feGetEnv("TR_DisableFullSpeedDebug") != NULL);
static bool TR_DisableFullSpeedDebugAOT = (feGetEnv("TR_DisableFullSpeedDebugAOT") != NULL);
Expand All @@ -2883,20 +2883,12 @@ bool J9::Options::feLatePostProcess(void * base, TR::OptionSet * optionSet)
}

bool exceptionEventHooked = false;
#if defined(J9VM_OPT_CRIU_SUPPORT)
if (J9_EVENT_IS_HOOKED(javaVM->hookInterface, J9HOOK_VM_EXCEPTION_CATCH) || J9_EVENT_IS_RESERVED(javaVM->hookInterface, J9HOOK_VM_EXCEPTION_CATCH))
#else /* defined(J9VM_OPT_CRIU_SUPPORT) */
if ((*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_EXCEPTION_CATCH))
#endif /* defined(J9VM_OPT_CRIU_SUPPORT) */
if (J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_EXCEPTION_CATCH))
{
jitConfig->jitExceptionCaught = jitExceptionCaught;
exceptionEventHooked = true;
}
#if defined(J9VM_OPT_CRIU_SUPPORT)
if (J9_EVENT_IS_HOOKED(javaVM->hookInterface, J9HOOK_VM_EXCEPTION_THROW) || J9_EVENT_IS_RESERVED(javaVM->hookInterface, J9HOOK_VM_EXCEPTION_THROW))
#else /* defined(J9VM_OPT_CRIU_SUPPORT) */
if ((*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_EXCEPTION_THROW))
#endif /* defined(J9VM_OPT_CRIU_SUPPORT) */
if (J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_EXCEPTION_THROW))
{
exceptionEventHooked = true;
}
Expand All @@ -2908,14 +2900,14 @@ bool J9::Options::feLatePostProcess(void * base, TR::OptionSet * optionSet)

// Determine whether or not to generate method enter and exit hooks
//
if ((*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_METHOD_ENTER))
if (J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_METHOD_ENTER))
{
self()->setOption(TR_ReportMethodEnter);
#if !defined(TR_HOST_S390) && !defined(TR_HOST_POWER) && !defined(TR_HOST_X86)
doAOT = false;
#endif
}
if ((*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_METHOD_RETURN))
if (J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_METHOD_RETURN))
{
self()->setOption(TR_ReportMethodExit);
#if !defined(TR_HOST_S390) && !defined(TR_HOST_POWER) && !defined(TR_HOST_X86)
Expand Down Expand Up @@ -3031,7 +3023,7 @@ bool J9::Options::feLatePostProcess(void * base, TR::OptionSet * optionSet)

// Check NextGenHCR is supported by the VM
if (!(javaVM->extendedRuntimeFlags & J9_EXTENDED_RUNTIME_OSR_SAFE_POINT) ||
(*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_OBJECT_ALLOCATE_INSTRUMENTABLE) || disableHCR)
J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_OBJECT_ALLOCATE_INSTRUMENTABLE) || disableHCR)
{
self()->setOption(TR_DisableNextGenHCR);
}
Expand Down
9 changes: 3 additions & 6 deletions runtime/compiler/control/OptionsPostRestore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "j9nonbuilder.h"
#include "jvminit.h"
#include "j9comp.h"
#include "j9hookable.h"
#include "jitprotos.h"
#include "env/CompilerEnv.hpp"
#include "env/TRMemory.hpp"
Expand Down Expand Up @@ -621,12 +622,8 @@ J9::OptionsPostRestore::postProcessInternalCompilerOptions()
// post-restore (and not pre-checkpoint), invalidate all method bodies
bool invalidateAll = false;
bool disableAOT = _disableAOTPostRestore;
bool exceptionCatchEventHooked
= J9_EVENT_IS_HOOKED(vm->hookInterface, J9HOOK_VM_EXCEPTION_CATCH)
|| J9_EVENT_IS_RESERVED(vm->hookInterface, J9HOOK_VM_EXCEPTION_CATCH);
bool exceptionThrowEventHooked
= J9_EVENT_IS_HOOKED(vm->hookInterface, J9HOOK_VM_EXCEPTION_THROW)
|| J9_EVENT_IS_RESERVED(vm->hookInterface, J9HOOK_VM_EXCEPTION_THROW);
bool exceptionCatchEventHooked = J9_EVENT_CAN_BE_HOOKED(vm, J9HOOK_VM_EXCEPTION_CATCH);
bool exceptionThrowEventHooked = J9_EVENT_CAN_BE_HOOKED(vm, J9HOOK_VM_EXCEPTION_THROW);

if (!_disableTrapsPreCheckpoint
&& (J9_ARE_ALL_BITS_SET(vm->sigFlags, J9_SIG_XRS_SYNC)
Expand Down
22 changes: 5 additions & 17 deletions runtime/compiler/env/VMJ9.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
#include "stackwalk.h"
#include "thrtypes.h"
#include "vmaccess.h"
#include "j9hookable.h"
#undef min
#undef max
#include "codegen/AheadOfTimeCompile.hpp"
Expand Down Expand Up @@ -2935,18 +2936,16 @@ bool
TR_J9VMBase::canMethodEnterEventBeHooked()
{
J9JavaVM * javaVM = _jitConfig->javaVM;
J9HookInterface * * vmHooks = javaVM->internalVMFunctions->getVMHookInterface(javaVM);

return ((*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_METHOD_ENTER) != 0);
return J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_METHOD_ENTER);
}

bool
TR_J9VMBase::canMethodExitEventBeHooked()
{
J9JavaVM * javaVM = _jitConfig->javaVM;
J9HookInterface * * vmHooks = javaVM->internalVMFunctions->getVMHookInterface(javaVM);

return ((*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_METHOD_RETURN) != 0);
return J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_METHOD_RETURN);
}

bool
Expand All @@ -2959,20 +2958,9 @@ bool
TR_J9VMBase::canExceptionEventBeHooked()
{
J9JavaVM * javaVM = _jitConfig->javaVM;
J9HookInterface * * vmHooks = javaVM->internalVMFunctions->getVMHookInterface(javaVM);

bool catchCanBeHooked =
#if defined(J9VM_OPT_CRIU_SUPPORT)
J9_EVENT_IS_HOOKED(javaVM->hookInterface, J9HOOK_VM_EXCEPTION_CATCH) || J9_EVENT_IS_RESERVED(javaVM->hookInterface, J9HOOK_VM_EXCEPTION_CATCH);
#else /* defined(J9VM_OPT_CRIU_SUPPORT) */
((*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_EXCEPTION_CATCH) != 0);
#endif /* defined(J9VM_OPT_CRIU_SUPPORT) */
bool throwCanBeHooked =
#if defined(J9VM_OPT_CRIU_SUPPORT)
J9_EVENT_IS_HOOKED(javaVM->hookInterface, J9HOOK_VM_EXCEPTION_THROW) || J9_EVENT_IS_RESERVED(javaVM->hookInterface, J9HOOK_VM_EXCEPTION_THROW);
#else /* defined(J9VM_OPT_CRIU_SUPPORT) */
((*vmHooks)->J9HookDisable(vmHooks, J9HOOK_VM_EXCEPTION_THROW) != 0);
#endif /* defined(J9VM_OPT_CRIU_SUPPORT) */
bool catchCanBeHooked = J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_EXCEPTION_CATCH);
bool throwCanBeHooked = J9_EVENT_CAN_BE_HOOKED(javaVM, J9HOOK_VM_EXCEPTION_THROW);

return (catchCanBeHooked || throwCanBeHooked);
}
Expand Down
2 changes: 2 additions & 0 deletions runtime/oti/j9hookable.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,6 @@

#include "omrhookable.h"

#define J9_EVENT_CAN_BE_HOOKED(javaVM, J9_EVENT_MASK) (J9_EVENT_IS_HOOKED(javaVM->hookInterface, J9_EVENT_MASK) || J9_EVENT_IS_RESERVED(javaVM->hookInterface, J9_EVENT_MASK))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this added to OpenJ9 rather than OMR?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Partly to minimize the number of PRs needed, but also because usually if the name has J9 in it I try as much as possible to keep in the openj9 codebase. However, if you think I should move it to OMR I can do that and open that PR.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it should be in OMR. The macros J9_EVENT_IS_HOOKED and J9_EVENT_IS_RESERVED are defined in omrhookable.h

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, will do (pending GAC's blessing wrt the rest of the changes in this PR).


#endif /* J9HOOKABLE_H_ */