mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 06:14:32 +08:00
headers.txt (gnu/gcj/jvmti/Breakpoint.h): Add _Jv_RewriteBreakpointInsn friend declaration.
* headers.txt (gnu/gcj/jvmti/Breakpoint.h)[DIRECT_THREADED]: Add _Jv_RewriteBreakpointInsn friend declaration. * gnu/gcj/jvmti/natBreakpoint.cc (_Jv_RewriteBreakpointInsn) [DIRECT_THREADED]: New function. * gnu/gcj/jvmti/Breakpoint.h: Regenerate. * interpret-run.cc: Define new REWRITE_INSN macro. Changed all occurrences of insn rewriting to call REWRITE_INSN. From-SVN: r124111
This commit is contained in:
parent
676b23ba25
commit
9872ecadbd
@ -1,3 +1,22 @@
|
||||
2007-04-24 Keith Seitz <keiths@redhat.com>
|
||||
|
||||
* headers.txt (gnu/gcj/jvmti/Breakpoint.h)[DIRECT_THREADED]:
|
||||
Add _Jv_RewriteBreakpointInsn friend declaration.
|
||||
* gnu/gcj/jvmti/natBreakpoint.cc (_Jv_RewriteBreakpointInsn)
|
||||
[DIRECT_THREADED]: New function.
|
||||
* gnu/gcj/jvmti/Breakpoint.h: Regenerate.
|
||||
* interpret-run.cc: Define new REWRITE_INSN macro.
|
||||
Changed all occurrences of insn rewriting to call REWRITE_INSN.
|
||||
|
||||
2007-04-23 Keith Seitz <keiths@redhat.com>
|
||||
|
||||
* include/no-gc.h (_Jv_IsThreadSuspended): Declare.
|
||||
* include/boehm-gc.h (_Jv_IsThreadSuspended): Likewise.
|
||||
* boehm.cc (_Jv_IsThreadSuspended): New function.
|
||||
* nogc.cc (_Jv_IsThreadSuspended): Likewise.
|
||||
* jvmti.cc (_Jv_JVMTI_GetThreadState): New function.
|
||||
(_Jv_JVMTI_Interface): Define GetThreadState.
|
||||
|
||||
2007-04-23 Kyle Galloway <kgallowa@redhat.com>
|
||||
|
||||
* include/java-interp.h (_Jv_InterpFrame): Add pointer to the
|
||||
|
@ -22,9 +22,17 @@ extern "Java"
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DIRECT_THREADED
|
||||
void _Jv_RewriteBreakpointInsn (jmethodID, jlocation, pc_t);
|
||||
#endif
|
||||
|
||||
class gnu::gcj::jvmti::Breakpoint : public ::java::lang::Object
|
||||
{
|
||||
|
||||
#ifdef DIRECT_THREADED
|
||||
friend void (::_Jv_RewriteBreakpointInsn (jmethodID, jlocation, pc_t));
|
||||
#endif
|
||||
|
||||
public:
|
||||
Breakpoint(jlong, jlong);
|
||||
private:
|
||||
|
@ -17,6 +17,7 @@ details. */
|
||||
#include <jvmti.h>
|
||||
|
||||
#include <gnu/gcj/jvmti/Breakpoint.h>
|
||||
#include <gnu/gcj/jvmti/BreakpointManager.h>
|
||||
|
||||
static _Jv_InterpMethod *
|
||||
get_interp_method (jlong method)
|
||||
@ -54,3 +55,18 @@ gnu::gcj::jvmti::Breakpoint::remove ()
|
||||
_Jv_InterpMethod *imeth = get_interp_method (method);
|
||||
imeth->set_insn (location, reinterpret_cast<pc_t> (data));
|
||||
}
|
||||
|
||||
#ifdef DIRECT_THREADED
|
||||
void
|
||||
_Jv_RewriteBreakpointInsn (jmethodID mid, jlocation loc, pc_t new_insn)
|
||||
{
|
||||
using namespace ::gnu::gcj::jvmti;
|
||||
Breakpoint *bp
|
||||
= BreakpointManager::getBreakpoint (reinterpret_cast<jlong> (mid), loc);
|
||||
if (bp != NULL)
|
||||
{
|
||||
pc_t old_insn = (pc_t) bp->data;
|
||||
old_insn->insn = new_insn;
|
||||
}
|
||||
}
|
||||
#endif // DIRECT_THREADED
|
||||
|
@ -63,5 +63,13 @@ friend class java::lang::Class;
|
||||
friend class java::io::ObjectInputStream;
|
||||
friend java::lang::reflect::Method* ::_Jv_GetReflectedMethod (jclass, _Jv_Utf8Const*, _Jv_Utf8Const*);
|
||||
|
||||
class gnu/gcj/jvmti/Breakpoint
|
||||
prepend #ifdef DIRECT_THREADED
|
||||
prepend void _Jv_RewriteBreakpointInsn (jmethodID, jlocation, pc_t);
|
||||
prepend #endif
|
||||
add #ifdef DIRECT_THREADED
|
||||
add friend void (::_Jv_RewriteBreakpointInsn (jmethodID, jlocation, pc_t));
|
||||
add #endif
|
||||
|
||||
class gnu/gcj/runtime/ExtensionClassLoader
|
||||
friend class ::java::lang::ClassLoader;
|
||||
|
@ -359,9 +359,32 @@ details. */
|
||||
goto *((pc++)->insn); \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#undef REWRITE_INSN
|
||||
#define REWRITE_INSN(INSN,SLOT,VALUE) \
|
||||
do { \
|
||||
if (pc[-2].insn == breakpoint_insn->insn) \
|
||||
{ \
|
||||
using namespace ::gnu::gcj::jvmti; \
|
||||
jlocation location = meth->insn_index (pc - 2); \
|
||||
_Jv_RewriteBreakpointInsn (meth->self, location, (pc_t) INSN); \
|
||||
} \
|
||||
else \
|
||||
pc[-2].insn = INSN; \
|
||||
\
|
||||
pc[-1].SLOT = VALUE; \
|
||||
} \
|
||||
while (0)
|
||||
|
||||
#else
|
||||
#undef NEXT_INSN
|
||||
#define NEXT_INSN goto *((pc++)->insn)
|
||||
#define REWRITE_INSN(INSN,SLOT,VALUE) \
|
||||
do { \
|
||||
pc[-2].insn = INSN; \
|
||||
pc[-1].SLOT = VALUE; \
|
||||
} \
|
||||
while (0)
|
||||
#endif
|
||||
|
||||
#define INTVAL() ((pc++)->int_val)
|
||||
@ -511,8 +534,7 @@ details. */
|
||||
#ifdef DIRECT_THREADED
|
||||
// Rewrite instruction so that we use a faster pre-resolved
|
||||
// method.
|
||||
pc[-2].insn = &&invokevirtual_resolved;
|
||||
pc[-1].datum = rmeth;
|
||||
REWRITE_INSN (&&invokevirtual_resolved, datum, rmeth);
|
||||
#endif /* DIRECT_THREADED */
|
||||
}
|
||||
goto perform_invoke;
|
||||
@ -1846,8 +1868,7 @@ details. */
|
||||
}
|
||||
|
||||
#ifdef DIRECT_THREADED
|
||||
pc[-2].insn = newinsn;
|
||||
pc[-1].datum = field->u.addr;
|
||||
REWRITE_INSN (newinsn, datum, field->u.addr);
|
||||
#endif /* DIRECT_THREADED */
|
||||
}
|
||||
NEXT_INSN;
|
||||
@ -1937,8 +1958,7 @@ details. */
|
||||
}
|
||||
|
||||
#ifdef DIRECT_THREADED
|
||||
pc[-2].insn = newinsn;
|
||||
pc[-1].int_val = field_offset;
|
||||
REWRITE_INSN (newinsn, int_val, field_offset);
|
||||
#endif /* DIRECT_THREADED */
|
||||
}
|
||||
NEXT_INSN;
|
||||
@ -2053,8 +2073,7 @@ details. */
|
||||
}
|
||||
|
||||
#ifdef DIRECT_THREADED
|
||||
pc[-2].insn = newinsn;
|
||||
pc[-1].datum = field->u.addr;
|
||||
REWRITE_INSN (newinsn, datum, field->u.addr);
|
||||
#endif /* DIRECT_THREADED */
|
||||
}
|
||||
NEXT_INSN;
|
||||
@ -2152,8 +2171,7 @@ details. */
|
||||
}
|
||||
|
||||
#ifdef DIRECT_THREADED
|
||||
pc[-2].insn = newinsn;
|
||||
pc[-1].int_val = field_offset;
|
||||
REWRITE_INSN (newinsn, int_val, field_offset);
|
||||
#endif /* DIRECT_THREADED */
|
||||
}
|
||||
NEXT_INSN;
|
||||
@ -2228,8 +2246,7 @@ details. */
|
||||
#ifdef DIRECT_THREADED
|
||||
// Rewrite instruction so that we use a faster pre-resolved
|
||||
// method.
|
||||
pc[-2].insn = &&invokespecial_resolved;
|
||||
pc[-1].datum = rmeth;
|
||||
REWRITE_INSN (&&invokespecial_resolved, datum, rmeth);
|
||||
#endif /* DIRECT_THREADED */
|
||||
}
|
||||
goto perform_invoke;
|
||||
@ -2266,8 +2283,7 @@ details. */
|
||||
#ifdef DIRECT_THREADED
|
||||
// Rewrite instruction so that we use a faster pre-resolved
|
||||
// method.
|
||||
pc[-2].insn = &&invokestatic_resolved;
|
||||
pc[-1].datum = rmeth;
|
||||
REWRITE_INSN (&&invokestatic_resolved, datum, rmeth);
|
||||
#endif /* DIRECT_THREADED */
|
||||
}
|
||||
goto perform_invoke;
|
||||
@ -2305,8 +2321,7 @@ details. */
|
||||
#ifdef DIRECT_THREADED
|
||||
// Rewrite instruction so that we use a faster pre-resolved
|
||||
// method.
|
||||
pc[-2].insn = &&invokeinterface_resolved;
|
||||
pc[-1].datum = rmeth;
|
||||
REWRITE_INSN (&&invokeinterface_resolved, datum, rmeth);
|
||||
#else
|
||||
// Skip dummy bytes.
|
||||
pc += 2;
|
||||
@ -2344,8 +2359,7 @@ details. */
|
||||
PUSHA (res);
|
||||
|
||||
#ifdef DIRECT_THREADED
|
||||
pc[-2].insn = &&new_resolved;
|
||||
pc[-1].datum = klass;
|
||||
REWRITE_INSN (&&new_resolved, datum, klass);
|
||||
#endif /* DIRECT_THREADED */
|
||||
}
|
||||
NEXT_INSN;
|
||||
@ -2380,8 +2394,7 @@ details. */
|
||||
PUSHA (result);
|
||||
|
||||
#ifdef DIRECT_THREADED
|
||||
pc[-2].insn = &&anewarray_resolved;
|
||||
pc[-1].datum = klass;
|
||||
REWRITE_INSN (&&anewarray_resolved, datum, klass);
|
||||
#endif /* DIRECT_THREADED */
|
||||
}
|
||||
NEXT_INSN;
|
||||
@ -2425,8 +2438,7 @@ details. */
|
||||
PUSHA (value);
|
||||
|
||||
#ifdef DIRECT_THREADED
|
||||
pc[-2].insn = &&checkcast_resolved;
|
||||
pc[-1].datum = to;
|
||||
REWRITE_INSN (&&checkcast_resolved, datum, to);
|
||||
#endif /* DIRECT_THREADED */
|
||||
}
|
||||
NEXT_INSN;
|
||||
@ -2453,8 +2465,7 @@ details. */
|
||||
PUSHI (to->isInstance (value));
|
||||
|
||||
#ifdef DIRECT_THREADED
|
||||
pc[-2].insn = &&instanceof_resolved;
|
||||
pc[-1].datum = to;
|
||||
REWRITE_INSN (&&instanceof_resolved, datum, to);
|
||||
#endif /* DIRECT_THREADED */
|
||||
}
|
||||
NEXT_INSN;
|
||||
|
Loading…
Reference in New Issue
Block a user