mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-22 12:00:03 -05:00
jvmti.cc (_Jv_JVMTI_DisposeEnvironment): Check for enabled events.
* jvmti.cc (_Jv_JVMTI_DisposeEnvironment): Check for enabled
events.
(check_enabled_event): New function.
(check_enabled_events): New function.
(post_event): New function.
(_Jv_JVMTI_SetEventNotificationMode): New function.
(_Jv_JVMTI_SetEventCallbacks): New function.
(_Jv_JVMTI_Interface): Define SetEventNotificationMode and
SetEventCallbacks members.
* include/jvmti-int.h: New file.
* include/jvmti_md.h (EVENT_SLOTS) [__GCJ_JNI_IMP__]: Define.
(_CLASSPATH_JVMTIENV_CONTENTS) [__GCJ_JNI_IMPL__]: Define.
* testsuite/libjava.jvmti/events.java: New file.
* testsuite/libjava.jvmti/events.out: New file.
* testsuite/libjava.jvmti/natevents.cc: New file.
From-SVN: r117133
This commit is contained in:
85
libjava/include/jvmti-int.h
Normal file
85
libjava/include/jvmti-int.h
Normal file
@@ -0,0 +1,85 @@
|
||||
/* jvmti-int.h -- Internal JVMTI definitions
|
||||
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
As a special exception, if you link this library with other files to
|
||||
produce an executable, this library does not by itself cause the
|
||||
resulting executable to be covered by the GNU General Public License.
|
||||
This exception does not however invalidate any other reasons why the
|
||||
executable file might be covered by the GNU General Public License. */
|
||||
|
||||
#ifndef __GCJ_JVTMI_INT_H__
|
||||
#define __GCJ_JVMTI_INT_H__
|
||||
|
||||
/* A macro to map jvmtiEvent to an index in thread[] and enabled[]
|
||||
in the jvmtiEnv. This will only work if the order of events listed
|
||||
in jvmtiEvent and jvmtiEventCallbacks is kept the same (which should
|
||||
not be a problem). */
|
||||
#define EVENT_INDEX(jvmtievent) (int)(jvmtievent - JVMTI_EVENT_VM_INIT)
|
||||
|
||||
/* A few globals to help limit the impact of JVMTI on normal operations.
|
||||
False means no JVMTI environment requested that event type. */
|
||||
namespace JVMTI
|
||||
{
|
||||
bool VMInit;
|
||||
bool VMDeath;
|
||||
bool ThreadStart;
|
||||
bool ThreadEnd;
|
||||
bool ClassFileLoadHook;
|
||||
bool ClassLoad;
|
||||
bool ClassPrepare;
|
||||
bool VMStart;
|
||||
bool Exception;
|
||||
bool ExceptionCatch;
|
||||
bool SingleStep;
|
||||
bool FramePop;
|
||||
bool Breakpoint;
|
||||
bool FieldAccess;
|
||||
bool FieldModification;
|
||||
bool MethodEntry;
|
||||
bool MethodExit;
|
||||
bool NativeMethodBind;
|
||||
bool CompiledMethodLoad;
|
||||
bool CompiledMethodUnload;
|
||||
bool DynamicCodeGenerated;
|
||||
bool DataDumpRequest;
|
||||
bool reserved72;
|
||||
bool MonitorWait;
|
||||
bool MonitorWaited;
|
||||
bool MonitorContendedEnter;
|
||||
bool MonitorContendedEntered;
|
||||
bool reserved77;
|
||||
bool reserved78;
|
||||
bool reserved79;
|
||||
bool reserved80;
|
||||
bool GarbageCollectionStart;
|
||||
bool GarbageCollectionFinish;
|
||||
bool ObjectFree;
|
||||
bool VMObjectAlloc;
|
||||
};
|
||||
|
||||
/* A macro to test whether an event should be posted to JVMTI.*/
|
||||
#define JVMTI_REQUESTED_EVENT(Event) __builtin_expect (JVMTI::Event, false)
|
||||
|
||||
/* Post the event to requesting JVMTI environments.
|
||||
|
||||
For speed, this function should only be called after
|
||||
JVMTI_REQUESTED_EVENT is checked. */
|
||||
extern void _Jv_JVMTI_PostEvent (jvmtiEvent type, jthread event_thread, ...);
|
||||
#endif /* __GCJ_JVMTI_INT_H__ */
|
||||
@@ -27,6 +27,32 @@ executable file might be covered by the GNU General Public License. */
|
||||
#ifndef __GCJ_JVMTI_MD_H__
|
||||
#define __GCJ_JVMTI_MD_H__
|
||||
|
||||
// nothing
|
||||
#ifdef __GCJ_JNI_IMPL__
|
||||
|
||||
/* If __GCJ_JNI_IMPL__ is defined, then we assume that we're building
|
||||
libgcj itself, and we include functions which should not be exposed
|
||||
to JVMTI users. */
|
||||
|
||||
/* The number of event slots needed to keep track of event reporting
|
||||
constraints for an environment. This will only work if the order of
|
||||
events listed in jvmtiEvent and jvmtiEventCallbacks is kept the same
|
||||
(which should not be a problem). */
|
||||
#define EVENT_SLOTS \
|
||||
(int)(JVMTI_EVENT_VM_OBJECT_ALLOC - JVMTI_EVENT_VM_INIT + 1)
|
||||
|
||||
/* Contents of the jvmtiEnv; but only inside the implementation. */
|
||||
#define _CLASSPATH_JVMTIENV_CONTENTS \
|
||||
/* Event handlers registered via SetEventCallbacks */ \
|
||||
jvmtiEventCallbacks callbacks; \
|
||||
\
|
||||
/* Array of event thread for which to report event. */ \
|
||||
/* NULL means all threads. One for each callback. */ \
|
||||
jthread thread[EVENT_SLOTS]; \
|
||||
\
|
||||
/* Array of notification modes for callbacks. */ \
|
||||
/* One for each callback. */ \
|
||||
bool enabled[EVENT_SLOTS];
|
||||
|
||||
#endif /* __GCJ_JNI_IMPL__ */
|
||||
|
||||
#endif /* __GCJ_JVMTI_MD_H__ */
|
||||
|
||||
Reference in New Issue
Block a user