[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