This is the mail archive of the frysk-cvs@sources.redhat.com mailing list for the frysk project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[SCM] master: Implement jni/LocalMemory.cxx.


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]