summaryrefslogtreecommitdiffstats
path: root/libjava/gnu
diff options
context:
space:
mode:
authorkseitz <kseitz@138bc75d-0d04-0410-961f-82ee72b054a4>2007-04-24 18:18:56 +0000
committerkseitz <kseitz@138bc75d-0d04-0410-961f-82ee72b054a4>2007-04-24 18:18:56 +0000
commit60b0053114bcc86c6aff9e5c7464c2ac2d70b62a (patch)
treeabee94b0b7a0cb00f3aa1d59f96ec58c46c6bd9a /libjava/gnu
parent6d22e9da465fa099faa69a637aeb10a73b0fed9f (diff)
downloadppe42-gcc-60b0053114bcc86c6aff9e5c7464c2ac2d70b62a.tar.gz
ppe42-gcc-60b0053114bcc86c6aff9e5c7464c2ac2d70b62a.zip
* 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@124111 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/gnu')
-rw-r--r--libjava/gnu/gcj/jvmti/Breakpoint.h8
-rw-r--r--libjava/gnu/gcj/jvmti/natBreakpoint.cc16
2 files changed, 24 insertions, 0 deletions
diff --git a/libjava/gnu/gcj/jvmti/Breakpoint.h b/libjava/gnu/gcj/jvmti/Breakpoint.h
index ebdd8555366..b522c77b15d 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 2a85a939b92..5dbd3f834dd 100644
--- a/libjava/gnu/gcj/jvmti/natBreakpoint.cc
+++ b/libjava/gnu/gcj/jvmti/natBreakpoint.cc
@@ -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
OpenPOWER on IntegriCloud