diff options
author | Ranjit Mathew <rmathew@hotmail.com> | 2004-04-09 04:39:24 +0000 |
---|---|---|
committer | Ranjit Mathew <rmathew@gcc.gnu.org> | 2004-04-09 04:39:24 +0000 |
commit | 84264cb69e412b6626c2b24cd89592220f08474d (patch) | |
tree | bee37dba73aef5eae797ab35d14db74a96616823 /libjava/gnu | |
parent | 886733617a5414bf849d049b04df5ba6460295fe (diff) | |
download | gcc-84264cb69e412b6626c2b24cd89592220f08474d.zip gcc-84264cb69e412b6626c2b24cd89592220f08474d.tar.gz gcc-84264cb69e412b6626c2b24cd89592220f08474d.tar.bz2 |
VMThrowable.java (getStackTrace): Pass trace as-is to modified lookup().
* 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.
From-SVN: r80541
Diffstat (limited to 'libjava/gnu')
-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 0c35836..024a6ee 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 41b8f4b..d688884 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) { |