X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fjit%2Fstacktrace.cpp;h=c59d05ac1bf7299add8422432dbd1cc7041da8ba;hb=4a6cefba48d8720b9e33f2e89823b8ed7fa0b78d;hp=ad3b438255da749d1107fa5f5e974d6e5e9e59dd;hpb=2ab77f5d50859fe9849586d1be0382fb61856b8f;p=cacao.git diff --git a/src/vm/jit/stacktrace.cpp b/src/vm/jit/stacktrace.cpp index ad3b43825..c59d05ac1 100644 --- a/src/vm/jit/stacktrace.cpp +++ b/src/vm/jit/stacktrace.cpp @@ -1,6 +1,6 @@ /* src/vm/jit/stacktrace.cpp - machine independent stacktrace system - Copyright (C) 1996-2005, 2006, 2007, 2008 + Copyright (C) 1996-2011 CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO Copyright (C) 2009 Theobroma Systems Ltd. @@ -904,6 +904,14 @@ classloader_t* stacktrace_first_nonnull_classloader(void) m = tmpsfi.code->m; cl = class_get_classloader(m->clazz); +#if defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK) + /* NOTE: See hotspot/src/share/vm/runtime/vframe.cpp + (vframeStreamCommon::skip_reflection_related_frames). */ + if (class_issubclass(m->clazz, class_sun_reflect_MethodAccessorImpl) || + class_issubclass(m->clazz, class_sun_reflect_ConstructorAccessorImpl)) + continue; +#endif + if (cl != NULL) return cl; } @@ -1402,7 +1410,8 @@ stacktrace_t* stacktrace_get_of_thread(threadobject* t) /* stacktrace_print_of_thread ************************************************** - Print the current stacktrace of the given thread. + Print the current stacktrace of the given thread. It will only work + for suspended threads. ARGUMENTS: t ... thread @@ -1422,7 +1431,7 @@ void stacktrace_print_of_thread(threadobject *t) sfi = t->_stackframeinfo; - if (sfi == NULL) { + if (!t->suspended || sfi == NULL) { puts("\t<>"); fflush(stdout); return;