aboutsummaryrefslogtreecommitdiff
path: root/libjava/gnu/gcj
diff options
context:
space:
mode:
authorBryce McKinlay <mckinlay@redhat.com>2005-03-11 04:30:20 +0000
committerBryce McKinlay <bryce@gcc.gnu.org>2005-03-11 04:30:20 +0000
commitc0cbd601303809da24e1ea49b711193cba4815be (patch)
tree326f8dfb57ca2a9f8fd10534252c07396695e0c0 /libjava/gnu/gcj
parent694d73e1659c7db09d415c8ba0ebeb441c0782a8 (diff)
downloadgcc-c0cbd601303809da24e1ea49b711193cba4815be.zip
gcc-c0cbd601303809da24e1ea49b711193cba4815be.tar.gz
gcc-c0cbd601303809da24e1ea49b711193cba4815be.tar.bz2
exception.cc: Remove stray MethodRef.h include.
2005-03-10 Bryce McKinlay <mckinlay@redhat.com> * exception.cc: Remove stray MethodRef.h include. * java/lang/natClass.cc: Likewise. * gnu/gcj/runtime/MethodRef.java: Removed. * gnu/gcj/runtime/StackTrace.java, gnu/gcj/runtime/natNameFinder.cc, gnu/gcj/runtime/natStackTrace.cc: Really removed. * java/lang/natRuntime.cc (_load): Remove unsed variable. * Makefile.am (ordinary_java_source_files): Remove MethodRef.java. * Makefile.in: Rebuilt. From-SVN: r96288
Diffstat (limited to 'libjava/gnu/gcj')
-rw-r--r--libjava/gnu/gcj/runtime/MethodRef.java25
-rw-r--r--libjava/gnu/gcj/runtime/StackTrace.java167
-rw-r--r--libjava/gnu/gcj/runtime/natNameFinder.cc157
-rw-r--r--libjava/gnu/gcj/runtime/natStackTrace.cc241
4 files changed, 0 insertions, 590 deletions
diff --git a/libjava/gnu/gcj/runtime/MethodRef.java b/libjava/gnu/gcj/runtime/MethodRef.java
deleted file mode 100644
index f157461..0000000
--- a/libjava/gnu/gcj/runtime/MethodRef.java
+++ /dev/null
@@ -1,25 +0,0 @@
-// gnu.gcj.runtime.MethodRef -- used by StackTrace.
-
-/* Copyright (C) 2002 Free Software Foundation
-
- This file is part of libgcj.
-
-This software is copyrighted work licensed under the terms of the
-Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
-details. */
-
-package gnu.gcj.runtime;
-
-import gnu.gcj.RawData;
-
-class MethodRef
-{
- MethodRef(RawData /* Actually _Jv_Method */ m, Class k)
- {
- klass = k;
- method = m;
- }
-
- public RawData method; // Actually a raw pointer to _Jv_Method
- public Class klass;
-}
diff --git a/libjava/gnu/gcj/runtime/StackTrace.java b/libjava/gnu/gcj/runtime/StackTrace.java
deleted file mode 100644
index c9f5a1a..0000000
--- a/libjava/gnu/gcj/runtime/StackTrace.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/* gnu.gcj.runtime.StackTrace -- VM support methods for walking the
- stack.
- Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING. If not, write to the
-Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-02111-1307 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library. Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module. An independent module is a module which is not derived from
-or based on this library. If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so. If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.gcj.runtime;
-
-import gnu.gcj.RawData;
-import java.util.TreeMap;
-import java.util.IdentityHashMap;
-import java.util.SortedMap;
-import gnu.gcj.runtime.NameFinder;
-import java.util.NoSuchElementException;
-
-/**
- * VM dependent state and support methods for walking the stack.
- * <p>
- * This is the version used by libgcj (http://gcc.gnu.org/java/).
- *
- * @author Mark Wielaard (mark@klomp.org)
- * @author Andrew Haley (aph@redhat.com)
- */
-public final class StackTrace
-{
- /**
- * Fill in the stack trace with the top n frames on current
- * execution stack. Can return null if the VM does not support
- * capturing the VM execution state.
- *
- * @see Throwable#fillInStackTrace()
- */
- public StackTrace(int n)
- {
- fillInStackTrace(n, 1);
- }
-
- /**
- * Fill in the stack trace with state of the entire execution stack,
- * starting from frame <code>offset</code>. Can return null if the
- * VM does not support capturing the VM execution state.
- *
- * This can be very expensive. If you only want part of the stack,
- * see <code>Throwable.fillInStackTrace(int)</code>
- *
- * @see Throwable#fillInStackTrace()
- */
- public StackTrace()
- {
- int n = 64;
-
- do
- {
- n *= 4;
- fillInStackTrace(n, 1);
- }
- while (len >= n);
- }
-
- /**
- * Return the class containing the execution point represented by
- * the Nth frame down the stack. The zeroth frame represents the
- * top of the stack, which is the method that called classAt().
- *
- * If the Nth frame down the stack was not create by a method
- * invocation, return null.
- *
- * It is not necessary to call <code>fillInStackTrace()</code> with
- * a size greater than N before calling this method; if the current
- * stack trace is insufficiently large, it will be expanded as
- * required. This requires some caution if
- * <code>fillInStackTrace()</code> is called from a different
- * invocation to the one that calls <code>classAt()</code>.
- * classAt() will not call <code>fillInStackTrace()</code> unless N
- * is greater than the current length.
- *
- */
- public native Class classAt(int n);
-
- /**
- * Return the name of the method containing the execution point
- * represented by the Nth frame down the stack. The zeroth frame
- * represents the top of the stack, which is the method that called
- * classAt().
- *
- * If the Nth frame down the stack was not create by a method
- * invocation, return null.
- *
- * It is not necessary to call <code>fillInStackTrace()</code> with
- * a size greater than N before calling this method; if the current
- * stack trace is insufficiently large, it will be expanded as
- * required. This requires some caution if
- * <code>fillInStackTrace()</code> is called from a different
- * invocation to the one that calls <code>classAt()</code>.
- * classAt() will not call <code>fillInStackTrace()</code> unless N
- * is greater than the current length.
- *
- */
- public native String methodAt(int n);
-
- /**
- * Return the length of this stack trace.
- *
- */
- public int length ()
- {
- return len;
- }
-
- public static native Class getClass(RawData ip);
-
- private static native void update();
- private static MethodRef methodAtAddress(RawData addr)
- {
- update();
- synchronized (map)
- {
- return (MethodRef) map.get (addr);
- }
- }
-
- gnu.gcj.RawData stackTraceAddrs()
- {
- return addrs;
- }
-
- private native void fillInStackTrace(int n, int offset);
- protected native void finalize();
-
- private static native MethodRef getCompiledMethodRef(RawData addr);
- private static IdentityHashMap map = new IdentityHashMap();
-
- private gnu.gcj.RawData addrs;
- private int len;
-}
diff --git a/libjava/gnu/gcj/runtime/natNameFinder.cc b/libjava/gnu/gcj/runtime/natNameFinder.cc
deleted file mode 100644
index d688884..0000000
--- a/libjava/gnu/gcj/runtime/natNameFinder.cc
+++ /dev/null
@@ -1,157 +0,0 @@
-// natNameFinder.cc - native helper methods for NameFinder.java
-
-/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc
-
- This file is part of libgcj.
-
-This software is copyrighted work licensed under the terms of the
-Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
-details. */
-
-/**
- * @author Mark Wielaard (mark@klomp.org)
- * Based on the old name-finder.cc by Andrew Haley <aph@cygnus.com>.
- */
-
-#include <config.h>
-
-#include <string.h>
-
-#include <gcj/cni.h>
-#include <jvm.h>
-#include <java/lang/String.h>
-#include <java/lang/StackTraceElement.h>
-#include <java/lang/StringBuffer.h>
-#include <java-interp.h>
-
-#include <gnu/gcj/runtime/NameFinder.h>
-
-#ifdef HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-// On some systems, a prefix is attached to a method name before
-// it is exported as a label. The GCC preprocessor predefines
-// this prefix as the macro __USER_LABEL_PREFIX__ which expands to
-// a string (not string constant) representing the prefix, if any.
-#undef LABEL_PREFIX
-#ifdef __USER_LABEL_PREFIX__
-
-#define USER_LABEL_PREFIX_STRING_0(s) #s
-#define USER_LABEL_PREFIX_STRING(s) USER_LABEL_PREFIX_STRING_0(s)
-
-#define LABEL_PREFIX USER_LABEL_PREFIX_STRING(__USER_LABEL_PREFIX__)
-
-#else /* __USER_LABEL_PREFIX__ */
-
-#define LABEL_PREFIX ""
-
-#endif /* ! __USER_LABEL_PREFIX__ */
-
-java::lang::StackTraceElement*
-gnu::gcj::runtime::NameFinder::newElement (java::lang::String* fileName,
- jint lineNumber,
- java::lang::String* className,
- java::lang::String* methName,
- jboolean isNative)
-{
- return new java::lang::StackTraceElement( fileName, lineNumber,
- className, methName, isNative);
-}
-
-java::lang::String*
-gnu::gcj::runtime::NameFinder::getExternalLabel (java::lang::String* name)
-{
- jsize nameLen = JvGetStringUTFLength (name);
- jsize pfxLen = strlen (LABEL_PREFIX);
- char *newName = (char *) JvMalloc (pfxLen + nameLen + 1);
- *(newName + 0) = '\0';
- strcpy (newName, LABEL_PREFIX);
- JvGetStringUTFRegion (name, 0, name->length(), newName + pfxLen);
- *(newName + pfxLen + nameLen) = '\0';
- return JvNewStringLatin1 (newName);
-}
-
-java::lang::String*
-gnu::gcj::runtime::NameFinder::getExecutable (void)
-{
- return JvNewStringLatin1 (_Jv_ThisExecutable ());
-}
-
-java::lang::String*
-gnu::gcj::runtime::NameFinder::getAddrAsString(RawData* addrs, jint n)
-{
- _Jv_frame_info *p = (_Jv_frame_info *) addrs;
- typedef unsigned word_t __attribute ((mode (word)));
- word_t w = (word_t) p[n].addr;
- int digits = sizeof (void *) * 2;
- char hex[digits+5];
-
- strcpy (hex, "0x");
- for (int i = digits - 1; i >= 0; i--)
- {
- int digit = w % 16;
-
- w /= 16;
- hex[i+2] = digit > 9 ? 'a' + digit - 10 : '0' + digit;
- }
- hex [digits+2] = 0;
-
- return JvNewStringLatin1(hex);
-}
-
-java::lang::StackTraceElement*
-gnu::gcj::runtime::NameFinder::dladdrLookup(RawData* addrs, jint n)
-{
-#if defined (HAVE_DLFCN_H) && defined (HAVE_DLADDR)
- extern char **_Jv_argv;
- char name[1024];
- char file_name[1024];
- _Jv_frame_info *stack = (_Jv_frame_info *) addrs;
- void* p = stack[n].addr;
- Dl_info dl_info;
-
- if (dladdr (p, &dl_info))
- {
- if (dl_info.dli_fname)
- strncpy (file_name, dl_info.dli_fname, sizeof file_name);
- if (dl_info.dli_sname)
- strncpy (name, dl_info.dli_sname, sizeof name);
-
- /* Don't trust dladdr() if the address is from the main program. */
- if (dl_info.dli_fname != NULL
- && dl_info.dli_sname != NULL
- && (_Jv_argv == NULL || strcmp (file_name, _Jv_argv[0]) != 0))
- return createStackTraceElement (JvNewStringLatin1 (name),
- JvNewStringLatin1 (file_name));
- }
-#endif
- return NULL;
-}
-
-java::lang::StackTraceElement *
-gnu::gcj::runtime::NameFinder::lookupInterp(RawData* addrs, jint n)
-{
-#ifdef INTERPRETER
- _Jv_frame_info *stack = (_Jv_frame_info *) addrs;
- if (stack[n].interp == NULL)
- return NULL;
-
- _Jv_InterpMethod *meth
- = reinterpret_cast<_Jv_InterpMethod *> (stack[n].interp);
- java::lang::StringBuffer *sb = new java::lang::StringBuffer();
- sb->append(_Jv_NewStringUtf8Const(meth->self->name));
- sb->append(_Jv_NewStringUtf8Const(meth->self->signature));
- // FIXME: source file name and line number can be found from
- // bytecode debug information. But currently we don't keep that
- // around.
- // FIXME: is using the defining class correct here?
- java::lang::String *className = meth->defining_class->getName();
- java::lang::String *methodName
- = demangleInterpreterMethod(sb->toString(), className);
- return new java::lang::StackTraceElement(NULL, -1,
- className, methodName, false);
-#else // INTERPRETER
- return NULL;
-#endif // INTERPRETER
-}
diff --git a/libjava/gnu/gcj/runtime/natStackTrace.cc b/libjava/gnu/gcj/runtime/natStackTrace.cc
deleted file mode 100644
index d9f3355..0000000
--- a/libjava/gnu/gcj/runtime/natStackTrace.cc
+++ /dev/null
@@ -1,241 +0,0 @@
-// natStackTrace.cc - native helper methods for Throwable
-
-/* Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc
-
- This file is part of libgcj.
-
-This software is copyrighted work licensed under the terms of the
-Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
-details. */
-
-/**
- * @author Andrew Haley <aph@cygnus.com>
- * @author Mark Wielaard <mark@klomp.org>
- *
- * Native helper methods for VM specific Throwable support.
- */
-
-#include <config.h>
-#include <platform.h>
-
-#include <string.h>
-
-#include <jvm.h>
-#include <gcj/cni.h>
-#include <gnu/gcj/RawData.h>
-#include <java/lang/Object.h>
-#include <java-threads.h>
-#include <gnu/gcj/runtime/MethodRef.h>
-#include <gnu/gcj/runtime/StackTrace.h>
-#include <java/lang/Thread.h>
-#include <java-interp.h>
-#include <java/util/IdentityHashMap.h>
-#include <java/lang/ArrayIndexOutOfBoundsException.h>
-
-#include <sys/types.h>
-
-#include <stdlib.h>
-
-#include <unistd.h>
-
-#ifdef HAVE_EXECINFO_H
-#include <execinfo.h>
-#endif
-
-#include <unwind.h>
-
-
-#ifdef INTERPRETER
-extern "C" void *_Unwind_FindEnclosingFunction (void *pc)
- __attribute__((pure));
-#endif // INTERPRETER
-
-// Fill in this stack trace with MAXLEN elements starting at offset.
-void
-gnu::gcj::runtime::StackTrace::fillInStackTrace (jint maxlen, jint offset)
-{
-#ifdef HAVE_BACKTRACE
- offset += 1;
- void *_p[maxlen + offset];
- len = backtrace (_p, maxlen + offset) - offset;
- void **p = _p + offset;
- _Jv_frame_info *frame;
- if (len > 0)
- {
-#ifdef INTERPRETER
- extern void *const _Jv_StartOfInterpreter;
- extern void * _Jv_EndOfInterpreter;
-
- java::lang::Thread *thread = java::lang::Thread::currentThread();
- _Jv_MethodChain *interp_frame
- = (thread ? reinterpret_cast<_Jv_MethodChain *> (thread->interp_frame)
- : NULL);
-#endif // INTERPRETER
-
- frame = (_Jv_frame_info *) _Jv_Malloc (len * sizeof (_Jv_frame_info));
- for (int n = 0; n < len; n++)
- {
- void *pc = p[n];
- frame[n].addr = pc;
-
-#ifdef INTERPRETER
- frame[n].interp = 0;
-
- // If _Jv_StartOfInterpreter is NULL either we've never
- // entered the intepreter or _Unwind_FindEnclosingFunction
- // is broken.
- if (__builtin_expect (_Jv_StartOfInterpreter != NULL, false))
- {
- // _Jv_StartOfInterpreter marks the very first
- // instruction in the interpreter, but
- // _Jv_EndOfInterpreter is an upper bound. If PC is
- // less than _Jv_EndOfInterpreter it might be in the
- // interpreter: we call _Unwind_FindEnclosingFunction to
- // find out.
- if (pc >= _Jv_StartOfInterpreter
- && (pc < _Jv_EndOfInterpreter
- || _Jv_EndOfInterpreter == NULL))
- {
- if (_Unwind_FindEnclosingFunction (pc)
- == _Jv_StartOfInterpreter)
- {
- frame[n].interp = (void *) interp_frame->self;
- interp_frame = interp_frame->next;
- }
- else
- {
- // We've found an address that we know is not within
- // the interpreter. We use that to refine our upper
- // bound on where the interpreter ends.
- _Jv_EndOfInterpreter = pc;
- }
- }
- }
-#endif // INTERPRETER
-
- }
- }
- else
- frame = NULL;
-
- addrs = reinterpret_cast<gnu::gcj::RawData *> (frame);
-#else // HAVE_BACKTRACE
- (void)maxlen;
- (void)offset;
-#endif // HAVE_BACKTRACE
-}
-
-/* Obtain the next power-of-2 of some integer. */
-static inline jint
-nextpowerof2 (jint n)
-{
- n |= (n >> 1);
- n |= (n >> 2);
- n |= (n >> 4);
- n |= (n >> 8);
- n |= (n >> 16);
- return n+1;
-}
-
-#define GET_FRAME(N) \
-({ \
- if ((N) >= len) \
- fillInStackTrace (nextpowerof2 (N), 1); \
- if ((N) < 0 || (N) >= len) \
- throw new ::java::lang::ArrayIndexOutOfBoundsException (); \
- \
- _Jv_frame_info *frame = (_Jv_frame_info *)addrs; \
- &frame[N]; \
-})
-
-gnu::gcj::runtime::MethodRef *
-gnu::gcj::runtime::StackTrace::getCompiledMethodRef (gnu::gcj::RawData *addr)
-{
- void *p = _Unwind_FindEnclosingFunction (addr);
- return gnu::gcj::runtime::StackTrace
- ::methodAtAddress ((gnu::gcj::RawData *)p);
-}
-
-java::lang::Class *
-gnu::gcj::runtime::StackTrace::getClass (gnu::gcj::RawData *p)
-{
- gnu::gcj::runtime::MethodRef *ref = getCompiledMethodRef (p);
- if (ref)
- return ref->klass;
- else
- return NULL;
-}
-
-java::lang::Class *
-gnu::gcj::runtime::StackTrace::classAt (jint n)
-{
- _Jv_frame_info *frame = GET_FRAME (n);
-
-#ifdef INTERPRETER
- if (frame->interp)
- {
- _Jv_InterpMethod *meth
- = reinterpret_cast<_Jv_InterpMethod *> (frame->interp);
- return meth->defining_class;
- }
-#endif // INTERPRETER
-
- return getClass ((gnu::gcj::RawData *)frame->addr);
-}
-
-java::lang::String*
-gnu::gcj::runtime::StackTrace::methodAt (jint n)
-{
- _Jv_frame_info *frame = GET_FRAME (n);
- _Jv_Method *meth = NULL;
-
-#ifdef INTERPRETER
- if (frame->interp)
- {
- meth
- = reinterpret_cast<_Jv_InterpMethod *> (frame->interp)
- ->get_method();
- }
-#endif // INTERPRETER
-
- if (! meth)
- {
- gnu::gcj::runtime::MethodRef *ref
- = getCompiledMethodRef ((gnu::gcj::RawData *)frame->addr);
- if (ref)
- meth = (_Jv_Method *)ref->method;
- }
-
- return meth
- ? _Jv_NewStringUtf8Const (meth->name)
- : NULL ;
-}
-
-void
-gnu::gcj::runtime::StackTrace::update(void)
-{
- jclass klass;
-
- while ((klass = _Jv_PopClass ()))
- {
- for (int i=0; i<klass->method_count; i++)
- {
- JvSynchronize sync (map);
- _Jv_Method *meth = &(klass->methods[i]);
- if (meth->ncode) // i.e. if p is not abstract
- {
- gnu::gcj::runtime::MethodRef *ref
- = new gnu::gcj::runtime::MethodRef
- ((gnu::gcj::RawData *)meth, klass);
- map->put ((java::lang::Object*)(meth->ncode), ref);
- }
- }
- }
-}
-
-void
-gnu::gcj::runtime::StackTrace::finalize(void)
-{
- if (addrs != NULL)
- _Jv_Free (addrs);
-}