}
-/*****************************************************************************
- METHOD LOGGING
-
- Various functions for printing a message at method entry or exit (for
- debugging)
-
-*****************************************************************************/
-
-/* builtin_print_argument ******************************************************
-
- Prints arguments and return values for the call trace.
-
-*******************************************************************************/
-
-#if !defined(NDEBUG)
-static char *builtin_print_argument(char *logtext, s4 *logtextlen,
- typedesc *paramtype, s8 value)
-{
- imm_union imu;
- java_object_t *o;
- classinfo *c;
- utf *u;
- u4 len;
-
- switch (paramtype->type) {
- case TYPE_INT:
- imu.i = (s4) value;
- sprintf(logtext + strlen(logtext), "%d (0x%08x)", imu.i, imu.i);
- break;
-
- case TYPE_LNG:
- imu.l = value;
-#if SIZEOF_VOID_P == 4
- sprintf(logtext + strlen(logtext), "%lld (0x%016llx)", imu.l, imu.l);
-#else
- sprintf(logtext + strlen(logtext), "%ld (0x%016lx)", imu.l, imu.l);
-#endif
- break;
-
- case TYPE_FLT:
-#if defined(__S390__)
- imu.l = value;
- /* The below won't work on S390 */
-#else
- imu.i = (s4) value;
-#endif
- sprintf(logtext + strlen(logtext), "%g (0x%08x)", imu.f, imu.i);
- break;
-
- case TYPE_DBL:
- imu.l = value;
-#if SIZEOF_VOID_P == 4
- sprintf(logtext + strlen(logtext), "%g (0x%016llx)", imu.d, imu.l);
-#else
- sprintf(logtext + strlen(logtext), "%g (0x%016lx)", imu.d, imu.l);
-#endif
- break;
-
- case TYPE_ADR:
-#if SIZEOF_VOID_P == 4
- sprintf(logtext + strlen(logtext), "0x%08x", (ptrint) value);
-#else
- sprintf(logtext + strlen(logtext), "0x%016lx", (ptrint) value);
-#endif
-
- /* cast to java.lang.Object */
-
- o = (java_object_t *) (ptrint) value;
-
- /* check return argument for java.lang.Class or java.lang.String */
-
- if (o != NULL) {
- if (o->vftbl->class == class_java_lang_String) {
- /* get java.lang.String object and the length of the
- string */
-
- u = javastring_toutf(o, false);
-
- len = strlen(" (String = \"") + utf_bytes(u) + strlen("\")");
-
- /* realloc memory for string length */
-
- logtext = DMREALLOC(logtext, char, *logtextlen, *logtextlen + len);
- *logtextlen += len;
-
- /* convert to utf8 string and strcat it to the logtext */
-
- strcat(logtext, " (String = \"");
- utf_cat(logtext, u);
- strcat(logtext, "\")");
- }
- else {
- if (o->vftbl->class == class_java_lang_Class) {
- /* if the object returned is a java.lang.Class
- cast it to classinfo structure and get the name
- of the class */
-
- c = (classinfo *) o;
-
- u = c->name;
- }
- else {
- /* if the object returned is not a java.lang.String or
- a java.lang.Class just print the name of the class */
-
- u = o->vftbl->class->name;
- }
-
- len = strlen(" (Class = \"") + utf_bytes(u) + strlen("\")");
-
- /* realloc memory for string length */
-
- logtext = DMREALLOC(logtext, char, *logtextlen, *logtextlen + len);
- *logtextlen += len;
-
- /* strcat to the logtext */
-
- strcat(logtext, " (Class = \"");
- utf_cat_classname(logtext, u);
- strcat(logtext, "\")");
- }
- }
- }
-
- return logtext;
-}
-#endif /* !defined(NDEBUG) */
-
/* builtin_verbosecall_enter ***************************************************
Print method call with arguments for -verbose:call.
*******************************************************************************/
#if !defined(NDEBUG)
-
#ifdef TRACE_ARGS_NUM
void builtin_verbosecall_enter(s8 a0, s8 a1,
# if TRACE_ARGS_NUM >= 4
# endif
methodinfo *m)
{
- methoddesc *md;
- char *logtext;
- s4 logtextlen;
- s4 dumpsize;
- s4 i;
- s4 pos;
- int methodindent;
- int callcount;
-
-#if defined(ENABLE_DEBUG_FILTER)
- if (! show_filters_test_verbosecall_enter(m)) return;
-#endif
-
-#if defined(ENABLE_VMLOG)
- vmlog_cacao_enter_method(m);
- return;
-#endif
-
- md = m->parseddesc;
-
- methodindent = TRACEJAVACALLINDENT;
-
- /* calculate message length */
-
- logtextlen =
- strlen("4294967295 ") +
- strlen("-2147483647-") + /* INT_MAX should be sufficient */
- methodindent +
- strlen("called: ") +
- utf_bytes(m->class->name) +
- strlen(".") +
- utf_bytes(m->name) +
- utf_bytes(m->descriptor);
-
- /* Actually it's not possible to have all flags printed, but:
- safety first! */
-
- logtextlen +=
- strlen(" PUBLIC") +
- strlen(" PRIVATE") +
- strlen(" PROTECTED") +
- strlen(" STATIC") +
- strlen(" FINAL") +
- strlen(" SYNCHRONIZED") +
- strlen(" VOLATILE") +
- strlen(" TRANSIENT") +
- strlen(" NATIVE") +
- strlen(" INTERFACE") +
- strlen(" ABSTRACT");
-
- /* add maximal argument length */
-
- logtextlen +=
- strlen("(") +
- strlen("-9223372036854775808 (0x123456789abcdef0), ") * TRACE_ARGS_NUM +
- strlen("...(255)") +
- strlen(")");
-
- /* allocate memory */
-
- dumpsize = dump_size();
-
- logtext = DMNEW(char, logtextlen);
-
- callcount = ++TRACEJAVACALLCOUNT;
-
- sprintf(logtext, "%10d ", callcount);
- sprintf(logtext + strlen(logtext), "-%d-", methodindent);
-
- pos = strlen(logtext);
-
- for (i = 0; i < methodindent; i++)
- logtext[pos++] = '\t';
-
- strcpy(logtext + pos, "called: ");
-
- utf_cat_classname(logtext, m->class->name);
- strcat(logtext, ".");
- utf_cat(logtext, m->name);
- utf_cat(logtext, m->descriptor);
-
- if (m->flags & ACC_PUBLIC) strcat(logtext, " PUBLIC");
- if (m->flags & ACC_PRIVATE) strcat(logtext, " PRIVATE");
- if (m->flags & ACC_PROTECTED) strcat(logtext, " PROTECTED");
- if (m->flags & ACC_STATIC) strcat(logtext, " STATIC");
- if (m->flags & ACC_FINAL) strcat(logtext, " FINAL");
- if (m->flags & ACC_SYNCHRONIZED) strcat(logtext, " SYNCHRONIZED");
- if (m->flags & ACC_VOLATILE) strcat(logtext, " VOLATILE");
- if (m->flags & ACC_TRANSIENT) strcat(logtext, " TRANSIENT");
- if (m->flags & ACC_NATIVE) strcat(logtext, " NATIVE");
- if (m->flags & ACC_INTERFACE) strcat(logtext, " INTERFACE");
- if (m->flags & ACC_ABSTRACT) strcat(logtext, " ABSTRACT");
-
- strcat(logtext, "(");
-
- if (md->paramcount >= 1) {
- logtext = builtin_print_argument(logtext, &logtextlen,
- &md->paramtypes[0], a0);
- }
-
- if (md->paramcount >= 2) {
- strcat(logtext, ", ");
-
- logtext = builtin_print_argument(logtext, &logtextlen,
- &md->paramtypes[1], a1);
- }
-
-#if TRACE_ARGS_NUM >= 4
- if (md->paramcount >= 3) {
- strcat(logtext, ", ");
-
- logtext = builtin_print_argument(logtext, &logtextlen,
- &md->paramtypes[2], a2);
- }
-
- if (md->paramcount >= 4) {
- strcat(logtext, ", ");
-
- logtext = builtin_print_argument(logtext, &logtextlen,
- &md->paramtypes[3], a3);
- }
-#endif
-
-#if TRACE_ARGS_NUM >= 6
- if (md->paramcount >= 5) {
- strcat(logtext, ", ");
-
- logtext = builtin_print_argument(logtext, &logtextlen,
- &md->paramtypes[4], a4);
- }
-
- if (md->paramcount >= 6) {
- strcat(logtext, ", ");
-
- logtext = builtin_print_argument(logtext, &logtextlen,
- &md->paramtypes[5], a5);
- }
-#endif
-
-#if TRACE_ARGS_NUM == 8
- if (md->paramcount >= 7) {
- strcat(logtext, ", ");
-
- logtext = builtin_print_argument(logtext, &logtextlen,
- &md->paramtypes[6], a6);
- }
-
- if (md->paramcount >= 8) {
- strcat(logtext, ", ");
-
- logtext = builtin_print_argument(logtext, &logtextlen,
- &md->paramtypes[7], a7);
- }
-#endif
-
- if (md->paramcount > 8) {
- sprintf(logtext + strlen(logtext), ", ...(%d)",
- md->paramcount - TRACE_ARGS_NUM);
- }
-
- strcat(logtext, ")");
-
- log_text(logtext);
-
- /* release memory */
-
- dump_release(dumpsize);
-
- TRACEJAVACALLINDENT++;
-
+ log_text("builtin_verbosecall_enter: Do not call me anymore!");
}
#endif
#endif /* !defined(NDEBUG) */
#if !defined(NDEBUG)
void builtin_verbosecall_exit(s8 l, double d, float f, methodinfo *m)
{
- methoddesc *md;
- char *logtext;
- s4 logtextlen;
- s4 dumpsize;
- s4 i;
- s4 pos;
- imm_union val;
- int methodindent;
-
-#if defined(ENABLE_DEBUG_FILTER)
- if (! show_filters_test_verbosecall_exit(m)) return;
-#endif
-
-#if defined(ENABLE_VMLOG)
- vmlog_cacao_leave_method(m);
- return;
-#endif
-
- md = m->parseddesc;
-
- /* outdent the log message */
-
- if (TRACEJAVACALLINDENT)
- TRACEJAVACALLINDENT--;
- else
- log_text("WARNING: unmatched methodindent--");
-
- methodindent = TRACEJAVACALLINDENT;
-
- /* calculate message length */
-
- logtextlen =
- strlen("4294967295 ") +
- strlen("-2147483647-") + /* INT_MAX should be sufficient */
- methodindent +
- strlen("finished: ") +
- utf_bytes(m->class->name) +
- strlen(".") +
- utf_bytes(m->name) +
- utf_bytes(m->descriptor) +
- strlen(" SYNCHRONIZED") + strlen("(") + strlen(")");
-
- /* add maximal argument length */
-
- logtextlen += strlen("->0.4872328470301428 (0x0123456789abcdef)");
-
- /* allocate memory */
-
- dumpsize = dump_size();
-
- logtext = DMNEW(char, logtextlen);
-
- /* generate the message */
-
- sprintf(logtext, " ");
- sprintf(logtext + strlen(logtext), "-%d-", methodindent);
-
- pos = strlen(logtext);
-
- for (i = 0; i < methodindent; i++)
- logtext[pos++] = '\t';
-
- strcpy(logtext + pos, "finished: ");
- utf_cat_classname(logtext, m->class->name);
- strcat(logtext, ".");
- utf_cat(logtext, m->name);
- utf_cat(logtext, m->descriptor);
-
- if (!IS_VOID_TYPE(md->returntype.type)) {
- strcat(logtext, "->");
-
- switch (md->returntype.type) {
- case TYPE_INT:
- case TYPE_LNG:
- case TYPE_ADR:
- val.l = l;
- break;
-
- case TYPE_FLT:
- val.f = f;
- break;
-
- case TYPE_DBL:
- val.d = d;
- break;
- }
-
- logtext =
- builtin_print_argument(logtext, &logtextlen, &md->returntype, val.l);
- }
-
- log_text(logtext);
-
- /* release memory */
-
- dump_release(dumpsize);
-
+ log_text("builtin_verbosecall_exit: Do not call me anymore!");
}
#endif /* !defined(NDEBUG) */