summaryrefslogtreecommitdiff
path: root/libjava/java/lang/natVMThrowable.cc
blob: b198f90732e302f0b4536c6444084c47ab135f34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// natVMThrowable.cc - Native part of VMThrowable class.

/* Copyright (C) 2003, 2006 Free Software Foundation

   This file is part of libgcj.

This software is copyrighted work licensed under the terms of the
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
details.  */

#include <config.h>

#include <stdlib.h>

#include <gcj/cni.h>
#include <jvm.h>
#include <java-stack.h>

#include <java/lang/Throwable.h>
#include <java/lang/VMThrowable.h>

using namespace gnu::gcj;

java::lang::VMThrowable *
java::lang::VMThrowable::fillInStackTrace (java::lang::Throwable *)
{
  using namespace java::lang;

  // Don't trace stack during initialization of the runtime.
  if (! gcj::runtimeInitialized)
    return NULL;
  
  _Jv_StackTrace *trace = _Jv_StackTrace::GetStackTrace ();
  VMThrowable *vmthrowable = new VMThrowable ();
  vmthrowable->data = (RawDataManaged *) trace;
  return vmthrowable;
}


JArray< ::java::lang::StackTraceElement *> *
java::lang::VMThrowable::getStackTrace (java::lang::Throwable *throwable)
{
  _Jv_StackTrace *trace = reinterpret_cast <_Jv_StackTrace *> (data);
  return _Jv_StackTrace::GetStackTraceElements (trace, throwable);
}