[PATCH 1 of 2] Support CompressedOops for jstack.stp

Mark Wielaard mjw at redhat.com
Mon Aug 6 07:30:51 PDT 2012


 ChangeLog            |   7 +++++++
 tapset/jstack.stp.in |  34 +++++++++++++++++++++++++++++-----
 2 files changed, 36 insertions(+), 5 deletions(-)


# HG changeset patch
# User Yasumasa Suenaga  <suenaga.yasumasa at lab.ntt.co.jp>
# Date 1344197789 -7200
# Node ID 069e50dcd06a3b25ce2caff2c981dbfe03cb4826
# Parent  f61cb5d6d39b76fe3d230379458bb373b8b6d779
Support CompressedOops for jstack.stp.

     * tapset/jstack.stp.in (NarrowOopStruct): New global.
     (hotspot.vm_init_end): Initialize NarrowOopStruct.
     (hotspot.vm_shutdown): Delete NarrowOopStruct for pid.
     (jstack_call): Use NarrowOopStruct to calculate methodOopKlass.

diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-08-03  Yasumasa Suenaga  <suenaga.yasumasa at lab.ntt.co.jp>
+
+	* tapset/jstack.stp.in (NarrowOopStruct): New global.
+	(hotspot.vm_init_end): Initialize NarrowOopStruct.
+	(hotspot.vm_shutdown): Delete NarrowOopStruct for pid.
+	(jstack_call): Use NarrowOopStruct to calculate methodOopKlass.
+
 2012-07-27  Andrew John Hughes  <gnu_andrew at member.fsf.org>
 
 	* Makefile.am:
diff --git a/tapset/jstack.stp.in b/tapset/jstack.stp.in
--- a/tapset/jstack.stp.in
+++ b/tapset/jstack.stp.in
@@ -49,6 +49,7 @@
 global Universe_collectedHeap;
 global HeapWordSize;
 global CodeCache_heap;
+global NarrowOopStruct;
 
 global sp_register;
 global fp_register;
@@ -71,9 +72,6 @@
                                      %? @var("_methodKlassObj at universe.cpp")
                                      %: $_methodKlassObj %);
 
-  // For compressed oops.
-  // Universe_heap_base = $_heap_base;
-
   /**
    * The Universe class holds some of the interesting statics for
    * introspection into HotSpot. The CollectedHeap
@@ -109,6 +107,17 @@
                             %? @var("_heap at codeCache.cpp")
                             %: $_heap %);
 
+  /**
+   * Does target process use CompressedOops ?
+   */
+  NarrowOopStruct[pid()] = 0;
+  %( systemtap_v >= "1.8"
+    %? if (@var("UseCompressedOops at globals.cpp"))
+         NarrowOopStruct[pid()] = &@var("_narrow_oop at universe.cpp");
+    %: if($UseCompressedOops)
+         NarrowOopStruct[pid()] = $_narrow_oop;
+  %)
+
   // Should really check arch of user space (for 32bit jvm on 64bit kernel).
   %( arch == "i386" %?
      sp_register = "esp";
@@ -142,6 +151,7 @@
   delete(Universe_collectedHeap[pid()]);
   delete(HeapWordSize[pid()]);
   delete(CodeCache_heap[pid()]);
+  delete(NarrowOopStruct[pid()]);
   delete(vm_inited[pid()]);
 }
 
@@ -353,8 +363,22 @@
                 isMethodOop = 0
               else
                 {
-                  methodOopKlass = @cast(methodOopPtr, "methodOopDesc",
-                                         "@ABS_SERVER_LIBJVM_SO@")->_metadata->_klass;
+                  if (NarrowOopStruct[pid()])
+                    {
+                      methodOopKlass = @cast(methodOopPtr, "methodOopDesc",
+                                             "@ABS_SERVER_LIBJVM_SO@")->_metadata->_compressed_klass;
+                      methodOopKlass = (@cast(NarrowOopStruct[pid()],
+                                              "NarrowOopStruct",
+                                              "@ABS_SERVER_LIBJVM_SO@")->_base
+                                        + (methodOopKlass
+                                           << @cast(NarrowOopStruct[pid()],
+                                                    "NarrowOopStruct",
+                                                    "@ABS_SERVER_LIBJVM_SO@")->_shift));
+                    }
+                  else
+                    methodOopKlass = @cast(methodOopPtr, "methodOopDesc",
+                                           "@ABS_SERVER_LIBJVM_SO@")->_metadata->_klass;
+
                   isMethodOop = (methodOopKlass == Universe_methodKlassObj[pid()]);
                 }
 



More information about the distro-pkg-dev mailing list