Mercurial > hg > graal-compiler
changeset 6388:6b74f44c5059
added Log.printObject() and Log.printlnObject() for more detailed logging of objects
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 14 Sep 2012 10:49:34 +0200 |
parents | d44835610b52 |
children | 2d84f74e394c |
files | graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/RuntimeCall.java graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/Log.java src/cpu/x86/vm/c1_Runtime1_x86.cpp src/share/vm/c1/c1_Runtime1.cpp src/share/vm/c1/c1_Runtime1.hpp src/share/vm/graal/graalCodeInstaller.cpp |
diffstat | 6 files changed, 39 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- 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;
--- 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() {
--- 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();
--- 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");
--- 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);
--- 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));