summaryrefslogtreecommitdiffstats
path: root/libjava/gnu/gcj/runtime/NameFinder.java
diff options
context:
space:
mode:
authortromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2002-08-29 17:53:28 +0000
committertromey <tromey@138bc75d-0d04-0410-961f-82ee72b054a4>2002-08-29 17:53:28 +0000
commit3196bed74979360646cbc8418db5c86c0527ced4 (patch)
tree538202560a3a2f376b6fb55ee3b836b195f01e73 /libjava/gnu/gcj/runtime/NameFinder.java
parent1153c2dcea1d760a4e4503c103995e48d5399800 (diff)
downloadppe42-gcc-3196bed74979360646cbc8418db5c86c0527ced4.tar.gz
ppe42-gcc-3196bed74979360646cbc8418db5c86c0527ced4.zip
* include/jvm.h (struct _Jv_frame_info): New structure.
* gnu/gcj/runtime/natNameFinder.cc: Include StringBuffer.h, java-interp.h. (lookupInterp): New method. (getAddrAsString): Use _Jv_frame_info. (dladdrLookup): Likewise. * gnu/gcj/runtime/NameFinder.java (lookup): Try to look up interpreted frame. (lookupInterp): Declare. * java/lang/natVMThrowable.cc: Include Thread.h, java-interp.h. (fillInStackTrace): Collect information on interpreted frames. Use _Jv_frame_info. * interpret.cc: Include Thread.h. (run): Create and push _Jv_MethodChain object. (_Jv_EndOfInterpreter): New global. * java/lang/Thread.java (interp_frame): New field. * include/java-interp.h (struct _Jv_MethodChain): New structure. Include NameFinder.h. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@56657 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/gnu/gcj/runtime/NameFinder.java')
-rw-r--r--libjava/gnu/gcj/runtime/NameFinder.java11
1 files changed, 10 insertions, 1 deletions
diff --git a/libjava/gnu/gcj/runtime/NameFinder.java b/libjava/gnu/gcj/runtime/NameFinder.java
index 60f47ac64fe..f32ebe0f530 100644
--- a/libjava/gnu/gcj/runtime/NameFinder.java
+++ b/libjava/gnu/gcj/runtime/NameFinder.java
@@ -173,17 +173,26 @@ public class NameFinder
native private String getAddrAsString(RawData addrs, int n);
/**
+ * If nth element of stack is an interpreted frame, return the
+ * element representing the method being interpreted.
+ */
+ native private StackTraceElement lookupInterp(RawData addrs, int n);
+
+ /**
* Creates the nth StackTraceElement from the given native stacktrace.
*/
private StackTraceElement lookup(RawData addrs, int n)
{
StackTraceElement result;
- result = dladdrLookup(addrs, n);
+ result = lookupInterp(addrs, n);
+ if (result == null)
+ result = dladdrLookup(addrs, n);
if (result == null)
{
String name = null;
String file = null;
+
String hex = getAddrAsString(addrs, n);
if (addr2line != null)
OpenPOWER on IntegriCloud