88 #if defined(ENABLE_JIT)
100 #if defined(ENABLE_INTRP)
106 #if defined(ENABLE_JIT)
107 # if defined(__SPARC_64__)
123 #if defined(ENABLE_JIT)
124 # if defined(ENABLE_INTRP)
129 # if defined(__I386__) || defined(__X86_64__) || defined(__S390__)
151 # if defined(ENABLE_INTRP)
162 xpc = (
void *) (((intptr_t) ra) - 1);
167 sfi->prev = currentsfi;
177 log_print(
"[stackframeinfo add : sfi=%p, method=%p, pv=%p, sp=%p, ra=%p, xpc=%p, method=",
178 sfi, sfi->code->m, sfi->pv, sfi->sp, sfi->ra, sfi->xpc);
214 log_print(
"[stackframeinfo remove: sfi=%p, method=%p, pv=%p, sp=%p, ra=%p, xpc=%p, method=",
243 assert(tmpsfi != NULL);
249 tmpsfi->
pv = sfi->
pv;
250 tmpsfi->
sp = sfi->
sp;
251 tmpsfi->
ra = sfi->
ra;
291 assert(tmpsfi != NULL);
310 #if defined(ENABLE_JIT)
311 # if defined(ENABLE_INTRP)
326 #if defined(ENABLE_INTRP)
332 #if defined(ENABLE_JIT)
333 # if defined(__SPARC_64__)
348 #if defined(ENABLE_INTRP)
350 sp = *(
u1 **) (sp - framesize);
354 #if STACKFRAME_RA_BETWEEN_FRAMES
355 sp = (
void *) (((intptr_t)
sp) + framesize + SIZEOF_VOID_P);
356 #elif defined(__SPARC_64__)
359 sp = (
void *) (((intptr_t)
sp) + framesize);
369 prevsfi = tmpsfi->
prev;
376 if (prevsfi == NULL) {
395 tmpsfi->
xpc = (
void *) (((intptr_t) ra) - 1);
403 log_print(
"[stacktrace: method=%p, pv=%p, sp=%p, ra=%p, xpc=%p, method=",
404 tmpsfi->
code->
m, tmpsfi->
pv, tmpsfi->
sp, tmpsfi->
ra,
431 assert(tmpsfi != NULL);
433 if ((tmpsfi->
code == NULL) && (tmpsfi->
prev == NULL)) {
524 bool skip_fillInStackTrace =
true;
525 bool skip_init =
true;
578 if (skip_fillInStackTrace) {
579 if (m->
name == utf8::fillInStackTrace) {
583 skip_fillInStackTrace =
false;
589 if (skip_init ==
true) {
601 ste->
pc = tmpsfi.
xpc;
655 #if defined(ENABLE_JAVASE)
660 if ((index < 0) || (index >= st->
length)) {
691 #if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
693 #elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
696 # error unknown classpath configuration
703 linenumber = (linenumber == 0) ? -1 : linenumber;
709 #if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
717 #elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
724 # error unknown classpath configuration
739 #if defined(ENABLE_JAVASE)
762 oa.set_element(
i, h);
765 return oa.get_handle();
783 #if defined(ENABLE_JAVASE)
818 #if defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
860 log_println(
"[stacktrace_first_nonnull_classloader]");
876 #if defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
898 #if defined(ENABLE_JAVASE)
902 while (parent != NULL) {
905 if (loader == parent)
925 #if defined(ENABLE_JAVASE)
936 log_println(
"[stacktrace_first_nonsystem_classloader]");
1066 #if defined(ENABLE_JAVASE)
1075 #if !defined(NDEBUG)
1108 if (m->
clazz != NULL) {
1134 #if defined(ENABLE_JAVASE) && defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
1146 #if !defined(NDEBUG)
1256 puts(
"(Native Method)");
1265 printf(
":%d)\n", linenumber);
1295 for (i = 0; i < st->
length; i++, ste++) {
1327 puts(
"\t<<No stacktrace available>>");
1401 puts(
"\t<<No stacktrace available>>");
1441 #if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH)
1446 #elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK) || defined(WITH_JAVA_RUNTIME_LIBRARY_CLDC1_1)
1451 # error unknown classpath configuration
1456 assert(backtrace.is_non_null());
1471 #if defined(ENABLE_CYCLES_STATS)
1472 void stacktrace_print_cycles_stats(FILE *file)
classinfo * stacktrace_get_caller_class(int depth)
virtual java_handle_t * get_handle() const
void method_print(methodinfo *m)
static int stacktrace_depth(stackframeinfo_t *sfi)
void stacktrace_print_current(void)
static struct stackframeinfo_t * threads_get_current_stackframeinfo(void)
classloader_t * stacktrace_first_nonsystem_classloader(void)
Returns the first non-system (user-defined) classloader on the stack.
stacktrace_entry_t entries[1]
virtual java_handle_array_t * get_handle() const
JavaString intern() const
static bool stacktrace_stackframeinfo_end_check(stackframeinfo_t *tmpsfi)
classloader_t * stacktrace_first_nonnull_classloader(void)
Returns the first non-null (user-defined) classloader on the stack.
static JavaString from_utf8(Utf8String)
int8_t * get_raw_data_ptr()
java_handle_t * get_vmState() const
void utf_display_printable_ascii_classname(Utf8String u)
#define CYCLES_STATS_PRINT(name, file)
#define THREAD_NATIVEWORLD_EXIT
Actual implementation of access class for Java Object arrays.
static void stacktrace_print_entry(methodinfo *m, int32_t linenumber)
u1 * intrp_md_stacktrace_get_returnaddress(u1 *sp, u4 framesize)
#define LLNI_CRITICAL_END
static void * md_get_framepointer(void *sp)
void stacktrace_print_exception(java_handle_t *h)
GNU Classpath java/lang/StackTraceElement.
void set_element(int32_t index, T value)
void stacktrace_print(stacktrace_t *st)
void log_println(const char *text,...)
static classloader_t * class_get_classloader(classinfo *c)
GNU Classpath java/lang/VMThrowable.
static int code_is_leafmethod(codeinfo *code)
java_handle_t * builtin_new(classinfo *c)
static bool is_ancestor_of(classloader_t *loader, classloader_t *parent)
Checks if a given classloader is equal to the the second classloader or one of its ancestors (parents...
#define CYCLES_STATS_PRINT_OVERHEAD(name, file)
java_handle_t * get_parent() const
java_handle_t * stacktrace_get_StackTraceElement(stacktrace_t *st, int32_t index)
Creates a java.lang.StackTraceElement for one element of the given stacktrace.
java_handle_t * class_get_classname(classinfo *c)
Returns the classname of the class, where slashes ('/') are replaced by dots ('.
java_handle_objectarray_t * stacktrace_get_StackTraceElements(stacktrace_t *st)
Creates a complete array of java.lang.StackTraceElement objects for the given stacktrace.
void log_print(const char *text,...)
classinfo * stacktrace_get_current_class(void)
jlong jlong jlong jlong jint depth
#define CYCLES_STATS_END_WITH_OVERHEAD(name, ovname)
stacktrace_t * stacktrace_get_of_thread(threadobject *t)
Creates a stacktrace for the given thread.
#define CYCLES_STATS_DECLARE_AND_START
classinfo * arrayclass_java_lang_Object
static codeinfo * code_get_codeinfo_for_pv(void *pv)
java_handle_bytearray_t * stacktrace_get(stackframeinfo_t *sfi)
java_handle_objectarray_t * stacktrace_getClassContext(void)
void stacktrace_stackframeinfo_add(stackframeinfo_t *sfi, void *pv, void *sp, void *ra, void *xpc)
static void * md_get_pv_from_stackframe(void *sp)
JNIEnv jclass jobject loader
#define CYCLES_STATS_END(name)
GNU Classpath java/lang/Throwable.
static void * md_codegen_get_pv_from_pc(void *ra)
void stacktrace_print_of_thread(threadobject *t)
static java_handle_t * invoke_getSystemClassLoader()
Invokes the static Java method getSystemClassLoader().
bool class_issubclass(classinfo *sub, classinfo *super)
#define CYCLES_STATS_DECLARE_AND_START_WITH_OVERHEAD
void utf_display_printable_ascii(Utf8String u)
void exceptions_throw_arrayindexoutofboundsexception(void)
GNU Classpath java/lang/ClassLoader.
classinfo * class_java_lang_String
void stacktrace_stackframeinfo_remove(stackframeinfo_t *sfi)
LinenumberTable * linenumbertable
static void * md_stacktrace_get_returnaddress(void *sp, int32_t stackframesize)
#define LLNI_CRITICAL_START
#define CYCLES_STATS_DECLARE(name, nbins, divisor)
stackframeinfo_t * _stackframeinfo
classinfo * class_java_lang_StackTraceElement
java_handle_objectarray_t * stacktrace_get_stack(void)
int32_t find(methodinfo **pm, void *pc)
Search the the line number table for the line corresponding to a given program counter.
methodinfo * method_java_lang_reflect_Method_invoke
static JavaString literal(Utf8String)
#define THREAD_NATIVEWORLD_ENTER
static void stacktrace_stackframeinfo_fill(stackframeinfo_t *tmpsfi, stackframeinfo_t *sfi)
Actual implementation of access class for java.lang.Class arrays.
classinfo * class_java_security_PrivilegedAction
const char const void jint length
classinfo * class_java_lang_Throwable
int opt_DebugStackFrameInfo
java_handle_bytearray_t * stacktrace_get_current(void)
static void stacktrace_stackframeinfo_next(stackframeinfo_t *tmpsfi)
static void threads_set_current_stackframeinfo(struct stackframeinfo_t *sfi)
static int32_t md_stacktrace_get_framesize(codeinfo *code)
Returns the size (in bytes) of the current stackframe, specified by the passed codeinfo structure...