diff options
| author | rmathew <rmathew@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-04-09 04:39:24 +0000 |
|---|---|---|
| committer | rmathew <rmathew@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-04-09 04:39:24 +0000 |
| commit | 9bd39433796abde75eedc5f29bedd557fefb8190 (patch) | |
| tree | bee37dba73aef5eae797ab35d14db74a96616823 /libjava/gnu/gcj | |
| parent | 887a58de081b625431ffc8bca625d0752762f389 (diff) | |
| download | ppe42-gcc-9bd39433796abde75eedc5f29bedd557fefb8190.tar.gz ppe42-gcc-9bd39433796abde75eedc5f29bedd557fefb8190.zip | |
* java/lang/VMThrowable.java (getStackTrace): Pass trace as-is to
modified lookup().
* gnu/gcj/runtime/NameFinder.java (lookup): Change to take in a
StackTraceElement directly.
(newElement): New native helper method to create StackTraceElement
bypassing Java access control.
(createStackTraceElement): Use newElement() instead of directly
calling StackTraceElement's constructor.
* gnu/gcj/runtime/natNameFinder.cc (newElement): New method.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@80541 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/gnu/gcj')
| -rw-r--r-- | libjava/gnu/gcj/runtime/NameFinder.java | 21 | ||||
| -rw-r--r-- | libjava/gnu/gcj/runtime/natNameFinder.cc | 13 |
2 files changed, 29 insertions, 5 deletions
diff --git a/libjava/gnu/gcj/runtime/NameFinder.java b/libjava/gnu/gcj/runtime/NameFinder.java index 0c358368390..024a6eeb232 100644 --- a/libjava/gnu/gcj/runtime/NameFinder.java +++ b/libjava/gnu/gcj/runtime/NameFinder.java @@ -1,5 +1,5 @@ /* NameFinder.java -- Translates addresses to StackTraceElements. - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2004 Free Software Foundation, Inc. This file is part of libgcj. @@ -241,8 +241,11 @@ public class NameFinder * Given an Throwable and a native stacktrace returns an array of * StackTraceElement containing class, method, file and linenumbers. */ - public StackTraceElement[] lookup(Throwable t, RawData addrs, int length) + public StackTraceElement[] lookup(Throwable t, StackTrace trace) { + RawData addrs = trace.stackTraceAddrs(); + int length = trace.length(); + StackTraceElement[] elements = new StackTraceElement[length]; for (int i=0; i < length; i++) elements[i] = lookup(addrs, i); @@ -353,6 +356,16 @@ public class NameFinder } /** + * Native helper method to create a StackTraceElement. Needed to work + * around normal Java access restrictions. + */ + native private StackTraceElement newElement(String fileName, + int lineNumber, + String className, + String methName, + boolean isNative); + + /** * Creates a StackTraceElement given a string and a filename. * Splits the given string into the class and method part. * The string name will be a demangled to a fully qualified java method @@ -363,7 +376,7 @@ public class NameFinder private StackTraceElement createStackTraceElement(String name, String file) { if (!demangle) - return new StackTraceElement(file, -1, null, name, false); + return newElement(file, -1, null, name, false); String s = demangleName(name); String methodName = s; @@ -409,7 +422,7 @@ public class NameFinder } } - return new StackTraceElement(fileName, line, className, methodName, false); + return newElement(fileName, line, className, methodName, false); } /** diff --git a/libjava/gnu/gcj/runtime/natNameFinder.cc b/libjava/gnu/gcj/runtime/natNameFinder.cc index 41b8f4badf2..d688884ca36 100644 --- a/libjava/gnu/gcj/runtime/natNameFinder.cc +++ b/libjava/gnu/gcj/runtime/natNameFinder.cc @@ -1,6 +1,6 @@ // natNameFinder.cc - native helper methods for NameFinder.java -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc +/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc This file is part of libgcj. @@ -48,6 +48,17 @@ details. */ #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) { |

