VMThrowable.java (getStackTrace): Pass trace as-is to modified lookup().
authorRanjit Mathew <rmathew@hotmail.com>
Fri, 9 Apr 2004 04:39:24 +0000 (04:39 +0000)
committerRanjit Mathew <rmathew@gcc.gnu.org>
Fri, 9 Apr 2004 04:39:24 +0000 (04:39 +0000)
* 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

libjava/ChangeLog
libjava/gnu/gcj/runtime/NameFinder.java
libjava/gnu/gcj/runtime/natNameFinder.cc
libjava/java/lang/VMThrowable.java

index 6d3454a5eeebbb2ec21d7895c492b948bd5cffdf..787119bde05cea8d6439707ac29e2f7a5d3fdc49 100644 (file)
@@ -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
index 0c3583683900bfca22266c01051f6273e09e7b88..024a6eeb232a0c9e4f578dbc30c11827de29df62 100644 (file)
@@ -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);
@@ -352,6 +355,16 @@ public class NameFinder
     return stack;
   }
 
+  /**
+   * 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.
@@ -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);
   }
 
   /**
index 41b8f4badf2e74e6c781941f12d2b635fe182ce4..d688884ca366bec9048f98cc5018175042aa59e0 100644 (file)
@@ -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)
 {
index 4c3385757c4b681f85ff8f3a64673dfdac04d138..102916a5d7cbdf7925c76699a3bb88c50a8cc87f 100644 (file)
@@ -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