From 9872ecadbd94fa67562ed7ff6825250b122aae62 Mon Sep 17 00:00:00 2001 From: Keith Seitz Date: Tue, 24 Apr 2007 18:18:56 +0000 Subject: 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 --- libjava/gnu/gcj/jvmti/Breakpoint.h | 8 ++++++++ libjava/gnu/gcj/jvmti/natBreakpoint.cc | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) (limited to 'libjava/gnu') diff --git a/libjava/gnu/gcj/jvmti/Breakpoint.h b/libjava/gnu/gcj/jvmti/Breakpoint.h index ebdd855..b522c77 100644 --- a/libjava/gnu/gcj/jvmti/Breakpoint.h +++ b/libjava/gnu/gcj/jvmti/Breakpoint.h @@ -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: diff --git a/libjava/gnu/gcj/jvmti/natBreakpoint.cc b/libjava/gnu/gcj/jvmti/natBreakpoint.cc index 2a85a93..5dbd3f8 100644 --- a/libjava/gnu/gcj/jvmti/natBreakpoint.cc +++ b/libjava/gnu/gcj/jvmti/natBreakpoint.cc @@ -17,6 +17,7 @@ details. */ #include #include +#include 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 (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 (mid), loc); + if (bp != NULL) + { + pc_t old_insn = (pc_t) bp->data; + old_insn->insn = new_insn; + } +} +#endif // DIRECT_THREADED -- cgit v1.1