public inbox for frysk-cvs@sourceware.org help / color / mirror / Atom feed
From: cagney@sourceware.org To: frysk-cvs@sourceware.org Subject: [SCM] master: Implement jni/LocalMemory.cxx. Date: Wed, 07 May 2008 05:36:00 -0000 [thread overview] Message-ID: <20080507053625.21528.qmail@sourceware.org> (raw) The branch, master has been updated via 12cea45ad5e923dce81131eab960b85d65eeb690 (commit) from 263254a7939cf7db35ef7d85cc781e88bca232b0 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email. - Log ----------------------------------------------------------------- commit 12cea45ad5e923dce81131eab960b85d65eeb690 Author: Andrew Cagney <cagney@redhat.com> Date: Wed May 7 01:35:28 2008 -0400 Implement jni/LocalMemory.cxx. frysk-sys/frysk/jnixx/ChangeLog 2008-05-07 Andrew Cagney <cagney@redhat.com> * PrintCxxDefinitions.java: Generate _class$ variable of nested classes. * Main.java: Ditto. * ClassVisitor.java: Visit nested classes. * ClassWalker.java: Update. * PrintCxxDefinitions.java: Update. * PrintHxxDefinitions.java: Update. * PrintDeclarations.java: Update. * Printer.java: Encode "$". frysk-sys/frysk/testbed/ChangeLog 2008-05-07 Andrew Cagney <cagney@redhat.com> * jni/LocalMemory.cxx: Implement. ----------------------------------------------------------------------- Summary of changes: frysk-sys/frysk/jnixx/ChangeLog | 10 ++ frysk-sys/frysk/jnixx/ClassVisitor.java | 7 +- frysk-sys/frysk/jnixx/ClassWalker.java | 2 +- frysk-sys/frysk/jnixx/Main.java | 1 + frysk-sys/frysk/jnixx/PrintCxxDefinitions.java | 12 ++- frysk-sys/frysk/jnixx/PrintDeclarations.java | 2 +- frysk-sys/frysk/jnixx/PrintHxxDefinitions.java | 3 +- frysk-sys/frysk/jnixx/Printer.java | 1 + frysk-sys/frysk/testbed/ChangeLog | 4 + frysk-sys/frysk/testbed/jni/LocalMemory.cxx | 139 +++++++++--------------- 10 files changed, 90 insertions(+), 91 deletions(-) First 500 lines of diff: diff --git a/frysk-sys/frysk/jnixx/ChangeLog b/frysk-sys/frysk/jnixx/ChangeLog index 5efff6c..40740d1 100644 --- a/frysk-sys/frysk/jnixx/ChangeLog +++ b/frysk-sys/frysk/jnixx/ChangeLog @@ -1,5 +1,15 @@ 2008-05-07 Andrew Cagney <cagney@redhat.com> + * PrintCxxDefinitions.java: Generate _class$ variable of nested + classes. + * Main.java: Ditto. + * ClassVisitor.java: Visit nested classes. + * ClassWalker.java: Update. + * PrintCxxDefinitions.java: Update. + * PrintHxxDefinitions.java: Update. + * PrintDeclarations.java: Update. + * Printer.java: Encode "$". + * print.cxx: Include Errno-jni.hxx. * exceptions.cxx: Include Errno-jni.hxx. * Main.java: Move jnixx::exception definition to ... diff --git a/frysk-sys/frysk/jnixx/ClassVisitor.java b/frysk-sys/frysk/jnixx/ClassVisitor.java index 2a883d0..a83be56 100644 --- a/frysk-sys/frysk/jnixx/ClassVisitor.java +++ b/frysk-sys/frysk/jnixx/ClassVisitor.java @@ -71,6 +71,11 @@ abstract class ClassVisitor { continue; acceptMethod(method); } + Class[] classes = klass.getClasses(); + for (int i = 0; i < classes.length; i++) { + Class inner = classes[i]; + acceptClass(inner); + } } abstract void acceptInterface(Class constructor); @@ -78,5 +83,5 @@ abstract class ClassVisitor { abstract void acceptField(Field field); abstract void acceptMethod(Method method); abstract void acceptComponent(Class klass); - abstract void acceptNested(Class klass); + abstract void acceptClass(Class klass); } diff --git a/frysk-sys/frysk/jnixx/ClassWalker.java b/frysk-sys/frysk/jnixx/ClassWalker.java index ae85ca3..2154f76 100644 --- a/frysk-sys/frysk/jnixx/ClassWalker.java +++ b/frysk-sys/frysk/jnixx/ClassWalker.java @@ -68,7 +68,7 @@ abstract class ClassWalker { walk(method.getReturnType()); walk(method.getParameterTypes()); } - void acceptNested(Class klass) { + void acceptClass(Class klass) { walk(klass); } }; diff --git a/frysk-sys/frysk/jnixx/Main.java b/frysk-sys/frysk/jnixx/Main.java index e2a6453..42eacac 100644 --- a/frysk-sys/frysk/jnixx/Main.java +++ b/frysk-sys/frysk/jnixx/Main.java @@ -66,6 +66,7 @@ class Main { p.print("#include \""); p.printHeaderFileName(klass); p.println("\""); + p.println(); p.print("jclass "); p.printQualifiedCxxName(klass); p.println("::_class$;"); diff --git a/frysk-sys/frysk/jnixx/PrintCxxDefinitions.java b/frysk-sys/frysk/jnixx/PrintCxxDefinitions.java index 9325b32..38b7492 100644 --- a/frysk-sys/frysk/jnixx/PrintCxxDefinitions.java +++ b/frysk-sys/frysk/jnixx/PrintCxxDefinitions.java @@ -98,7 +98,11 @@ class PrintCxxDefinitions extends ClassVisitor { } else if (returnType == String.class) { p.print("(jstring) ret._object"); } else if (returnType.isArray()) { - p.print("(jobjectArray) ret._object"); + if (returnType.getComponentType().isPrimitive()) { + p.print("ret"); + } else { + p.print("(jobjectArray) ret._object"); + } } else { p.print("ret._object"); } @@ -133,6 +137,10 @@ class PrintCxxDefinitions extends ClassVisitor { } void acceptComponent(Class klass) { } - void acceptNested(Class klass) { + void acceptClass(Class klass) { + p.println(); + p.print("jclass "); + p.printQualifiedCxxName(klass); + p.println("::_class$;"); } } diff --git a/frysk-sys/frysk/jnixx/PrintDeclarations.java b/frysk-sys/frysk/jnixx/PrintDeclarations.java index a0735ef..449e42f 100644 --- a/frysk-sys/frysk/jnixx/PrintDeclarations.java +++ b/frysk-sys/frysk/jnixx/PrintDeclarations.java @@ -79,7 +79,7 @@ class PrintDeclarations extends ClassWalker { private final ClassVisitor printer = new ClassVisitor() { public void acceptComponent(Class klass) { } - public void acceptNested(Class klass) { + public void acceptClass(Class klass) { } public void acceptInterface(Class klass) { } diff --git a/frysk-sys/frysk/jnixx/PrintHxxDefinitions.java b/frysk-sys/frysk/jnixx/PrintHxxDefinitions.java index aa9c93b..6782ea0 100644 --- a/frysk-sys/frysk/jnixx/PrintHxxDefinitions.java +++ b/frysk-sys/frysk/jnixx/PrintHxxDefinitions.java @@ -195,7 +195,7 @@ class PrintHxxDefinitions extends ClassWalker { } void acceptInterface(Class klass) { } - void acceptNested(Class klass) { + void acceptClass(Class klass) { } void acceptConstructor(Constructor constructor) { p.println(); @@ -250,6 +250,7 @@ class PrintHxxDefinitions extends ClassWalker { void acceptPrimitive(Class klass) { } void acceptInterface(Class klass) { + acceptClass(klass); } void acceptClass(Class klass) { // The class, via reflection. diff --git a/frysk-sys/frysk/jnixx/Printer.java b/frysk-sys/frysk/jnixx/Printer.java index b1ee3fb..ac12fd8 100644 --- a/frysk-sys/frysk/jnixx/Printer.java +++ b/frysk-sys/frysk/jnixx/Printer.java @@ -325,6 +325,7 @@ class Printer { .replaceAll("_", "_1") .replaceAll(";", "_2") .replaceAll("\\[", "_3") + .replaceAll("\\$", "_00024") .replaceAll("/", "_")); } return this; diff --git a/frysk-sys/frysk/testbed/ChangeLog b/frysk-sys/frysk/testbed/ChangeLog index 38a81a1..542937f 100644 --- a/frysk-sys/frysk/testbed/ChangeLog +++ b/frysk-sys/frysk/testbed/ChangeLog @@ -1,3 +1,7 @@ +2008-05-07 Andrew Cagney <cagney@redhat.com> + + * jni/LocalMemory.cxx: Implement. + 2008-05-06 Andrew Cagney <cagney@redhat.com> * LocalMemory.java (dataByte, dataShort, dataInt, dataLong): diff --git a/frysk-sys/frysk/testbed/jni/LocalMemory.cxx b/frysk-sys/frysk/testbed/jni/LocalMemory.cxx index 2d17fc3..4ca84f1 100644 --- a/frysk-sys/frysk/testbed/jni/LocalMemory.cxx +++ b/frysk-sys/frysk/testbed/jni/LocalMemory.cxx @@ -1,6 +1,6 @@ // This file is part of the program FRYSK. // -// Copyright 2008, Red Hat Inc. +// Copyright 2005, 2006, 2007 Red Hat Inc. // // FRYSK is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by @@ -37,105 +37,74 @@ // version and license this file solely under the GPL without // exception. -#include "frysk_testbed_LocalMemory.h" +#include <stdint.h> +#include <stdio.h> +#include <string.h> +#include "frysk/testbed/LocalMemory-jni.hxx" +#include "frysk/jnixx/exceptions.hxx" -JNIEXPORT jlong -Java_frysk_testbed_LocalMemory_getByteDataAddr (JNIEnv *env, jclass) -{ - jclass cls = env->FindClass("java/lang/RuntimeException"); - if (cls != NULL) { - env->ThrowNew(cls, __FILE__ ":Java_frysk_testbed_LocalMemory_getByteDataAddr not implemented"); - } - return 0; +static jbyteArray +getBytes(jnixx::env& env, void *addr, size_t length) { + jbyteArray bytes = env.newByteArray(length); + jbyte* elements = env.getByteArrayElements(bytes, NULL); + memcpy(elements, addr, length); + env.releaseByteArrayElements(bytes, elements, 0); + return bytes; } -JNIEXPORT jlong -Java_frysk_testbed_LocalMemory_getShortDataAddr (JNIEnv *env, jclass) -{ - jclass cls = env->FindClass("java/lang/RuntimeException"); - if (cls != NULL) { - env->ThrowNew(cls, __FILE__ ":Java_frysk_testbed_LocalMemory_getShortDataAddr not implemented"); - } - return 0; -} +struct m { + jbyte byteData; + jshort shortData; + jint intData; + jlong longData; +} memory = { 43, 45, 42, 44 }; -JNIEXPORT jlong -Java_frysk_testbed_LocalMemory_getIntDataAddr (JNIEnv *env, jclass) -{ - jclass cls = env->FindClass("java/lang/RuntimeException"); - if (cls != NULL) { - env->ThrowNew(cls, __FILE__ ":Java_frysk_testbed_LocalMemory_getIntDataAddr not implemented"); - } - return 0; +jlong +frysk::testbed::LocalMemory::getDataAddr(jnixx::env&) { + return (jlong) &memory; } -JNIEXPORT jlong -Java_frysk_testbed_LocalMemory_getLongDataAddr (JNIEnv *env, jclass) -{ - jclass cls = env->FindClass("java/lang/RuntimeException"); - if (cls != NULL) { - env->ThrowNew(cls, __FILE__ ":Java_frysk_testbed_LocalMemory_getLongDataAddr not implemented"); - } - return 0; +jbyteArray +frysk::testbed::LocalMemory::getDataBytes(jnixx::env& env) { + return getBytes(env, &memory, sizeof(memory)); } -JNIEXPORT jbyteArray -Java_frysk_testbed_LocalMemory_getBytes (JNIEnv *env, jclass, jlong, jint) -{ - jclass cls = env->FindClass("java/lang/RuntimeException"); - if (cls != NULL) { - env->ThrowNew(cls, __FILE__ ":Java_frysk_testbed_LocalMemory_getBytes not implemented"); - } - return 0; -} +/** + * Function used by getCode*(), must be on a single line for __LINE__ + * to work correctly. + */ +jint frysk::testbed::LocalMemory::getCodeLine (jnixx::env&) { return __LINE__; } -JNIEXPORT jlong -Java_frysk_testbed_LocalMemory_getDataAddr (JNIEnv *env, jclass) -{ - jclass cls = env->FindClass("java/lang/RuntimeException"); - if (cls != NULL) { - env->ThrowNew(cls, __FILE__ ":Java_frysk_testbed_LocalMemory_getDataAddr not implemented"); - } - return 0; +java::lang::String +frysk::testbed::LocalMemory::getCodeFile(jnixx::env& env) { + return env.newStringUTF (__FILE__); } -JNIEXPORT jlong -Java_frysk_testbed_LocalMemory_getCodeAddr (JNIEnv *env, jclass) -{ - jclass cls = env->FindClass("java/lang/RuntimeException"); - if (cls != NULL) { - env->ThrowNew(cls, __FILE__ ":Java_frysk_testbed_LocalMemory_getCodeAddr not implemented"); - } - return 0; +static void* +codeAddr() { +#ifdef __powerpc64__ + return *((void**) frysk::testbed::LocalMemory::getCodeLine); +#else + return (void*)&frysk::testbed::LocalMemory::getCodeLine; +#endif } - -JNIEXPORT jint -Java_frysk_testbed_LocalMemory_getCodeLine (JNIEnv *env, jclass) -{ - jclass cls = env->FindClass("java/lang/RuntimeException"); - if (cls != NULL) { - env->ThrowNew(cls, __FILE__ ":Java_frysk_testbed_LocalMemory_getCodeLine not implemented"); - } - return 0; +jlong +frysk::testbed::LocalMemory::getCodeAddr(jnixx::env&) { + return (jlong)codeAddr(); } -JNIEXPORT jstring -Java_frysk_testbed_LocalMemory_getCodeFile (JNIEnv *env, jclass) -{ - jclass cls = env->FindClass("java/lang/RuntimeException"); - if (cls != NULL) { - env->ThrowNew(cls, __FILE__ ":Java_frysk_testbed_LocalMemory_getCodeFile not implemented"); - } - return 0; +jbyteArray +frysk::testbed::LocalMemory::getCodeBytes(jnixx::env& env) { + return getBytes(env, codeAddr(), sizeof(memory)); } -JNIEXPORT void -Java_frysk_testbed_LocalMemory_constructStack (JNIEnv *env, jclass, jobject) -{ - jclass cls = env->FindClass("java/lang/RuntimeException"); - if (cls != NULL) { - env->ThrowNew(cls, __FILE__ ":Java_frysk_testbed_LocalMemory_constructStack not implemented"); - } - return; +void +frysk::testbed::LocalMemory::constructStack(jnixx::env& env, + frysk::testbed::LocalMemory$StackBuilder builder) { + // Copy known data onto the stack. + uint8_t addr[sizeof(memory)]; + memcpy(addr, &memory, sizeof(memory)); + jbyteArray bytes = getBytes(env, addr, sizeof(memory)); + builder.stack(env, (jlong)addr, bytes); } hooks/post-receive -- frysk system monitor/debugger
reply other threads:[~2008-05-07 5:36 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20080507053625.21528.qmail@sourceware.org \ --to=cagney@sourceware.org \ --cc=frysk-cvs@sourceware.org \ --cc=frysk@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).