From c2b038ad3c3c0e60d904c27f60b01d7dd194987a Mon Sep 17 00:00:00 2001 From: Florian Liekweg Date: Tue, 27 Apr 2004 18:49:02 +0000 Subject: [PATCH] Added aux/Dbginfo.c aux/Dbginfo.java --flo [r2789] --- auxilliary/Dbginfo.c | 98 +++++++++++++++++++++++++++++++++++++ auxilliary/Dbginfo.java | 105 ++++++++++++++++++++++++++++++++++++++++ configure | 2 +- 3 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 auxilliary/Dbginfo.c create mode 100644 auxilliary/Dbginfo.java diff --git a/auxilliary/Dbginfo.c b/auxilliary/Dbginfo.c new file mode 100644 index 000000000..7f19e7e42 --- /dev/null +++ b/auxilliary/Dbginfo.c @@ -0,0 +1,98 @@ +/* + * Project: libFIRM / Recoder frontend for libFIRM + * File name: firmjni/Dbginfo.c + * Purpose: Testing callback. + * Author: Goetz Lindenmaier + * Modified by: + * Created: 26.2.2003 + * CVS-ID: $Id$ + * Copyright: (c) 2003 Universität Karlsruhe + * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. + */ + +#include "Dbginfo.h" /* Generated. */ + +#include "firm.h" +#include "dbginfo.h" +#include + +static jmethodID pair_id; +static jmethodID sets_id; +static JNIEnv *my_env_jni_; +static jclass my_cls_jni_; + +struct dbg_info +{ + int idx; +}; + +static void +my_dbg_info_merge_pair(ir_node *nw, ir_node *old, dbg_action info) { + if (pair_id) { + (*my_env_jni_)->CallStaticVoidMethod(my_env_jni_, my_cls_jni_, pair_id, nw, old, info); + } +} + +static void +my_dbg_info_merge_sets(ir_node **new_nodes, int n_new_nodes, + ir_node **old_nodes, int n_old_nodes, + dbg_action info) { + if (sets_id) { + /* Convert argument arrays to java arrays. */ + jintArray j_new_nodes = (*my_env_jni_)->NewIntArray(my_env_jni_, n_new_nodes); + jintArray j_old_nodes = (*my_env_jni_)->NewIntArray(my_env_jni_, n_old_nodes); + if (j_new_nodes) + (*my_env_jni_)->SetIntArrayRegion(my_env_jni_, j_new_nodes, 0, n_new_nodes, (jint *)new_nodes); + if (j_old_nodes) + (*my_env_jni_)->SetIntArrayRegion(my_env_jni_, j_old_nodes, 0, n_old_nodes, (jint *)old_nodes); + + (*my_env_jni_)->CallStaticVoidMethod(my_env_jni_, my_cls_jni_, sets_id, j_new_nodes, j_old_nodes, info); + } +} + + +void Java_firmjni_Dbginfo_dbgInit (JNIEnv *env_jni_, jclass cls_jni_) { + pair_id = (*env_jni_)->GetStaticMethodID(env_jni_, cls_jni_, "myJavaDbgInfoMergePair", "(III)V"); + sets_id = (*env_jni_)->GetStaticMethodID(env_jni_, cls_jni_, "myJavaDbgInfoMergeSets", "([I[II)V"); + my_env_jni_ = env_jni_; + my_cls_jni_ = cls_jni_; + + dbg_init(&my_dbg_info_merge_pair, &my_dbg_info_merge_sets); +} + +/** Return the dbg object index of the given node. A new dbg object is created, if needed. */ +jint Java_firmjni_Dbginfo_getDbgInfoIdx (JNIEnv *env, jclass clss, jint jnode) +{ + /* + ir_node *node = (ir_node*) jnode; + + dbg_info *info = get_irn_dbg_info (node); + + if (0 == info) { + info = get_dbg_info (); + set_irn_dbg_info (node, info); + } + + return (info->idx); + */ + + return (0); +} + +/** Return the dbg object index of the given node, or -1 if none has been set. */ +jint Java_firmjni_Dbginfo_doGetDbgInfoIdx (JNIEnv *env, jclass clss, jint jnode) +{ + /* + ir_node *node = (ir_node*) jnode; + + dbg_info *info = get_irn_dbg_info (node); + + if (0 == info) { + return (-1); + } + + return (info->idx); + */ + + return (0); +} diff --git a/auxilliary/Dbginfo.java b/auxilliary/Dbginfo.java new file mode 100644 index 000000000..105da5d27 --- /dev/null +++ b/auxilliary/Dbginfo.java @@ -0,0 +1,105 @@ +package firmjni; + +/* + * Project: libFIRM / Recoder frontend for libFIRM. + * File name: firmjni/Dbginfo.java + * Purpose: + * Author: Goetz Lindenmaier + * Modified by: + * Created: 26.2.2003 + * CVS-ID: $Id$ + * Copyright: (c) 2003 Universitaet Karlsruhe + * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE. + */ + +import firmjni.*; + +public class Dbginfo { + + public Dbginfo (java.lang.Object file, int line) + { + _file = file; + _line = line; + } + + // Set env var LD_LIBRARY_PATH accordingly. + static { + System.loadLibrary("firmjni"); + dbgInit (); + } + + public static native void dbgInit (); + + /** Return the dbg object index of the given node. A new dbg object is created, if needed. */ + public static native int getDbgInfoIdx (int node); + + /** Return the dbg object index of the given node, or -1 if none has been set. */ + public static native int doGetDbgInfoIdx (int node); + + /** Return the dbg object of the given node, or null if none has been set. */ + public static Dbginfo getDbgInfo (int node) + { + int idx = doGetDbgInfoIdx (node); + + if (-1 == idx) { + return (null); + } + + return (_infos [idx]); + } + + public static void setDbgInfo (int node, java.lang.Object file, int line) + { + int idx = doGetDbgInfoIdx (node); + + if (_infos.length < idx) { + Dbginfo [] infos = new Dbginfo [idx+1]; + + for (int i = 0; i < _infos.length; i ++) { + infos [i] = _infos [i]; + } + + _infos = infos; + } + + _infos [idx] = new Dbginfo (file, line); + } + + public static void myJavaDbgInfoMergePair(int new_node, int old_node, int info) { + System.out.println("Optimization: "+ info); + System.out.println("new Node " + Irnode.getIrnNodeNr(new_node)); + System.out.println("old Node " + Irnode.getIrnNodeNr(old_node)); + } + + public static void myJavaDbgInfoMergeSets(int new_nodes[], int old_nodes[], int info) { + System.out.println("Optimization: "+ info); + System.out.print("new Nodes: "); + for (int i = 0; i < new_nodes.length; i++) + System.out.print(Irnode.getIrnNodeNr(new_nodes[i]) + ", "); + System.out.print("\nold Nodes: "); + for (int i = 0; i < old_nodes.length; i++) + System.out.print(Irnode.getIrnNodeNr(old_nodes[i]) + ", "); + System.out.println(""); + } + + /** +

Return the file this debug info object is from:

+ */ + public java.lang.Object getFile () + { + return (_file); + } + + /** +

Return which line this debug info object is from:

+ */ + public int getLine () + { + return (_line); + } + + private java.lang.Object _file; + private int _line; + + private static Dbginfo [] _infos = new Dbginfo [1000]; +} diff --git a/configure b/configure index 981bbdfa7..3beef5ab6 100755 --- a/configure +++ b/configure @@ -2474,7 +2474,7 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' touch tmp-install.a tmp-install.b if eval "$INSTALL -C tmp-install.a tmp-install.b" ; then - INSTALL="$INSTALL -C" + INSTALL="$INSTALL -C" fi rm tmp-install.a tmp-install.b -- 2.20.1