aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libjava/ChangeLog12
-rw-r--r--libjava/gnu/gcj/runtime/NameFinder.java21
-rw-r--r--libjava/gnu/gcj/runtime/natNameFinder.cc13
-rw-r--r--libjava/java/lang/VMThrowable.java5
4 files changed, 43 insertions, 8 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 6d3454a..787119b 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,15 @@
+2004-04-09 Ranjit Mathew <rmathew@hotmail.com>
+
+ * 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.
+
2004-04-01 Michael Koch <konqueror@gmx.de>
* java/lang/SecurityManager.java
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)
{
diff --git a/libjava/java/lang/VMThrowable.java b/libjava/java/lang/VMThrowable.java
index 4c33857..102916a 100644
--- a/libjava/java/lang/VMThrowable.java
+++ b/libjava/java/lang/VMThrowable.java
@@ -1,5 +1,5 @@
/* java.lang.VMThrowable -- VM support methods for Throwable.
- Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1998, 1999, 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -96,8 +96,7 @@ final class VMThrowable
if (trace != null)
{
NameFinder nameFinder = new NameFinder();
- result = nameFinder.lookup(t, trace.stackTraceAddrs(),
- trace.length());
+ result = nameFinder.lookup(t, trace);
nameFinder.close();
}
else