diff options
author | Mark Wielaard <mark@klomp.org> | 2002-08-24 22:46:19 +0000 |
---|---|---|
committer | Mark Wielaard <mark@gcc.gnu.org> | 2002-08-24 22:46:19 +0000 |
commit | 6e0532cdf6f9fb4776bfa0f05a29c06a362d466b (patch) | |
tree | 2194f5746d8d192d6202800f3df90a8ccb1675e0 /libjava/java/lang/natVMThrowable.cc | |
parent | 4906d5d83e08494b70297808d6818faffd89c2a0 (diff) | |
download | gcc-6e0532cdf6f9fb4776bfa0f05a29c06a362d466b.zip gcc-6e0532cdf6f9fb4776bfa0f05a29c06a362d466b.tar.gz gcc-6e0532cdf6f9fb4776bfa0f05a29c06a362d466b.tar.bz2 |
Makefile.am (libgcj_la_SOURCES): Remove name-finder.cc.
* Makefile.am (libgcj_la_SOURCES): Remove name-finder.cc.
(core_java_source_files): Add VMThrowable.java and NameFinder.java
(nat_source_files): Remove natThrowable.cc, add natVMThrowable.cc
and natNameFinder.cc.
* Makefile.in: Regenerate.
* prims.cc: Use trace_enabled from VMThrowable.
* name-finder.cc: Removed.
* gcj/javaprims.h: Add class VMThrowable.
* gnu/gcj/runtime/NameFinder.java: New file.
* gnu/gcj/runtime/natNameFinder.cc: Likewise.
* include/name-finder.h: Removed.
* java/lang/Throwable.java (printStackTrace (PrintStream)): Use new
method stackTraceString().
(printStackTrace (PrintWriter)): Likewise.
(stackTraceString): Complete rewrite of old printStackTrace using
StringBuffer.
(stackTraceStringBuffer): New helper method for stackTraceString().
(fillInStackTrace): Delegate to VMTrowable.
(getStackTrace): Likewise.
(getStackTrace0): Removed.
(trace_enabled, stackTraceBytes): Moved to new VMThrowable.java.
(setStackTrace): Copy given array.
* java/lang/natThrowable.cc: Removed (replaced by natVMThrowable).
* java/lang/VMThrowable.java: New class.
* java/lang/natVMThrowable.cc: New file.
From-SVN: r56556
Diffstat (limited to 'libjava/java/lang/natVMThrowable.cc')
-rw-r--r-- | libjava/java/lang/natVMThrowable.cc | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/libjava/java/lang/natVMThrowable.cc b/libjava/java/lang/natVMThrowable.cc new file mode 100644 index 0000000..358bab7 --- /dev/null +++ b/libjava/java/lang/natVMThrowable.cc @@ -0,0 +1,73 @@ +// natVMThrowable.cc - native helper methods for Throwable + +/* Copyright (C) 2000, 2002 Free Software Foundation, Inc + + 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. */ + +/** + * @author Andrew Haley <aph@cygnus.com> + * @author Mark Wielaard <mark@klomp.org> + * + * Native helper methods for VM specific Throwable support. + */ + +#include <config.h> + +#include <string.h> + +#include <jvm.h> +#include <gcj/cni.h> +#include <gnu/gcj/RawData.h> +#include <java/lang/Object.h> +#include <java-threads.h> +#include <java/lang/Throwable.h> +#include <java/lang/VMThrowable.h> + +#include <sys/types.h> + +#include <stdlib.h> + +#include <unistd.h> + +#ifdef HAVE_EXECINFO_H +#include <execinfo.h> +#endif + +/* FIXME: size of the stack trace is limited to 128 elements. It's + undoubtedly sensible to limit the stack trace, but 128 is rather + arbitrary. It may be better to configure this. */ + +java::lang::VMThrowable * +java::lang::VMThrowable::fillInStackTrace (java::lang::Throwable* t) +{ + if (! trace_enabled) + return NULL; +#if defined (HAVE_BACKTRACE) + VMThrowable* state = new VMThrowable; + void *p[128]; + + // We subtract 1 from the number of elements because we don't want + // to include the calls to fillInStackTrace in the trace. + int n = backtrace (p, 128) - 1; + + void **addrs; + if (n > 0) + { + state->length = n; + addrs = (void **) _Jv_Malloc (n * sizeof p[0]); + while (n--) + addrs[n] = p[n]; + } + else + addrs = NULL; + + state->stackTraceAddrs = reinterpret_cast<gnu::gcj::RawData *> (addrs); + + return state; +#endif + return NULL; +} |