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));