# HG changeset patch # User Doug Simon # Date 1347612574 -7200 # Node ID 6b74f44c50590683195d2ef9ac5b7e18051e2a1d # Parent d44835610b527ec78090e59a19bc03f0e5fc37c9 added Log.printObject() and Log.printlnObject() for more detailed logging of objects diff -r d44835610b52 -r 6b74f44c5059 graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RuntimeCall.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RuntimeCall.java Thu Sep 13 17:45:04 2012 +0200 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RuntimeCall.java Fri Sep 14 10:49:34 2012 +0200 @@ -48,7 +48,7 @@ ArithmeticSin(Double, Double), GenericCallback(Object, Object, Object), LogPrimitive(Void, Int, Long, Boolean), - LogObject(Void, Object, Boolean, Boolean); + LogObject(Void, Object, Int); public final Kind resultKind; public final Kind[] arguments; diff -r d44835610b52 -r 6b74f44c5059 graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/Log.java --- a/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/Log.java Thu Sep 13 17:45:04 2012 +0200 +++ b/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/Log.java Fri Sep 14 10:49:34 2012 +0200 @@ -33,9 +33,14 @@ */ public final class Log { + // Note: Must be kept in sync with constants in c1_Runtime1.hpp + private static final int LOG_OBJECT_NEWLINE = 0x01; + private static final int LOG_OBJECT_STRING = 0x02; + private static final int LOG_OBJECT_ADDRESS = 0x04; + @SuppressWarnings("unused") @NodeIntrinsic(RuntimeCallNode.class) - private static void log(@ConstantNodeParameter RuntimeCall logObject, Object object, boolean newline, boolean string) { + private static void log(@ConstantNodeParameter RuntimeCall logObject, Object object, int flags) { throw new UnsupportedOperationException("This method may only be compiled with the Graal compiler"); } @@ -94,11 +99,15 @@ } public static void print(String value) { - log(RuntimeCall.LogObject, value, false, true); + log(RuntimeCall.LogObject, value, LOG_OBJECT_STRING); } public static void printAddress(Object o) { - log(RuntimeCall.LogObject, o, false, false); + log(RuntimeCall.LogObject, o, LOG_OBJECT_ADDRESS); + } + + public static void printObject(Object o) { + log(RuntimeCall.LogObject, o, 0); } public static void println(boolean value) { @@ -150,11 +159,15 @@ } public static void println(String value) { - log(RuntimeCall.LogObject, value, true, true); + log(RuntimeCall.LogObject, value, LOG_OBJECT_NEWLINE | LOG_OBJECT_STRING); } public static void printlnAddress(Object o) { - log(RuntimeCall.LogObject, o, true, false); + log(RuntimeCall.LogObject, o, LOG_OBJECT_NEWLINE | LOG_OBJECT_ADDRESS); + } + + public static void printlnObject(Object o) { + log(RuntimeCall.LogObject, o, LOG_OBJECT_NEWLINE); } public static void println() { diff -r d44835610b52 -r 6b74f44c5059 src/cpu/x86/vm/c1_Runtime1_x86.cpp --- a/src/cpu/x86/vm/c1_Runtime1_x86.cpp Thu Sep 13 17:45:04 2012 +0200 +++ b/src/cpu/x86/vm/c1_Runtime1_x86.cpp Fri Sep 14 10:49:34 2012 +0200 @@ -1933,7 +1933,7 @@ __ enter(); oop_maps = new OopMapSet(); OopMap* oop_map = save_live_registers(sasm, 0); - int call_offset = __ call_RT(noreg, noreg, (address)graal_log_object, j_rarg0, j_rarg1, j_rarg2); + int call_offset = __ call_RT(noreg, noreg, (address)graal_log_object, j_rarg0, j_rarg1); oop_maps->add_gc_map(call_offset, oop_map); restore_live_registers(sasm); __ leave(); diff -r d44835610b52 -r 6b74f44c5059 src/share/vm/c1/c1_Runtime1.cpp --- a/src/share/vm/c1/c1_Runtime1.cpp Thu Sep 13 17:45:04 2012 +0200 +++ b/src/share/vm/c1/c1_Runtime1.cpp Fri Sep 14 10:49:34 2012 +0200 @@ -750,9 +750,17 @@ #endif JRT_END -JRT_ENTRY(void, Runtime1::graal_log_object(JavaThread* thread, oop obj, jboolean newline, jboolean string)) +JRT_ENTRY(void, Runtime1::graal_log_object(JavaThread* thread, oop obj, jint flags)) + bool string = flags & LOG_OBJECT_STRING; + bool address = flags & LOG_OBJECT_ADDRESS; + bool newline = flags & LOG_OBJECT_NEWLINE; if (!string) { - tty->print("%p", obj); + if (!address && obj->is_oop_or_null(true)) { + char buf[400]; + tty->print("%s@%p", obj->klass()->klass_part()->name()->as_C_string(buf, 400), obj); + } else { + tty->print("%p", obj); + } } else { assert(obj != NULL && java_lang_String::is_instance(obj), "must be"); diff -r d44835610b52 -r 6b74f44c5059 src/share/vm/c1/c1_Runtime1.hpp --- a/src/share/vm/c1/c1_Runtime1.hpp Thu Sep 13 17:45:04 2012 +0200 +++ b/src/share/vm/c1/c1_Runtime1.hpp Fri Sep 14 10:49:34 2012 +0200 @@ -207,7 +207,14 @@ static void graal_monitorenter(JavaThread* thread, oopDesc* obj, BasicLock* lock); static void graal_monitorexit (JavaThread* thread, oopDesc* obj, BasicLock* lock); static void graal_log_primitive(JavaThread* thread, jchar typeChar, jlong value, jboolean newline); - static void graal_log_object(JavaThread* thread, oop msg, jboolean newline, jboolean string); + + // Note: Must be kept in sync with constants in com.oracle.graal.snippets.Log + enum { + LOG_OBJECT_NEWLINE = 0x01, + LOG_OBJECT_STRING = 0x02, + LOG_OBJECT_ADDRESS = 0x04 + }; + static void graal_log_object(JavaThread* thread, oop msg, jint flags); #endif static void deoptimize(JavaThread* thread); diff -r d44835610b52 -r 6b74f44c5059 src/share/vm/graal/graalCodeInstaller.cpp --- a/src/share/vm/graal/graalCodeInstaller.cpp Thu Sep 13 17:45:04 2012 +0200 +++ b/src/share/vm/graal/graalCodeInstaller.cpp Fri Sep 14 10:49:34 2012 +0200 @@ -448,7 +448,7 @@ methodOop method = getMethodFromHotSpotMethod(hotspot_method); jint bci = BytecodePosition::bci(frame); bool reexecute; - if (bci == -1) { + if (bci == -1 || bci == -2){ reexecute = false; } else { Bytecodes::Code code = Bytecodes::java_code_at(method, method->bcp_from(bci));