diff src/os/solaris/dtrace/jhelper.d @ 6725:da91efe96a93

6964458: Reimplement class meta-data storage to use native memory Summary: Remove PermGen, allocate meta-data in metaspace linked to class loaders, rewrite GC walking, rewrite and rename metadata to be C++ classes Reviewed-by: jmasa, stefank, never, coleenp, kvn, brutisso, mgerdin, dholmes, jrose, twisti, roland Contributed-by: jmasa <jon.masamitsu@oracle.com>, stefank <stefan.karlsson@oracle.com>, mgerdin <mikael.gerdin@oracle.com>, never <tom.rodriguez@oracle.com>
author coleenp
date Sat, 01 Sep 2012 13:25:18 -0400
parents 2fe087c3e814
children 8e47bac5643a
line wrap: on
line diff
--- a/src/os/solaris/dtrace/jhelper.d	Fri Aug 31 16:39:35 2012 -0700
+++ b/src/os/solaris/dtrace/jhelper.d	Sat Sep 01 13:25:18 2012 -0400
@@ -44,7 +44,6 @@
 extern pointer __JvmOffsets;
 
 extern pointer __1cJCodeCacheF_heap_;
-extern pointer __1cIUniverseP_methodKlassObj_;
 extern pointer __1cIUniverseO_collectedHeap_;
 extern pointer __1cIUniverseL_narrow_oop_;
 #ifdef _LP64
@@ -52,6 +51,7 @@
 #endif
 
 extern pointer __1cHnmethodG__vtbl_;
+extern pointer __1cGMethodG__vtbl_;
 extern pointer __1cKBufferBlobG__vtbl_;
 
 #define copyin_ptr(ADDR)    *(pointer*)  copyin((pointer) (ADDR), sizeof(pointer))
@@ -81,7 +81,7 @@
   init_done  = 0;
   this->error = (char *) NULL;
   this->result = (char *) NULL;
-  this->methodOop = 0;
+  this->isMethod = 0;
   this->codecache = 0;
   this->klass = (pointer) NULL;
   this->vtbl  = (pointer) NULL;
@@ -109,7 +109,7 @@
 
   copyin_offset(OFFSET_interpreter_frame_method);
   copyin_offset(OFFSET_Klass_name);
-  copyin_offset(OFFSET_constantPoolOopDesc_pool_holder);
+  copyin_offset(OFFSET_ConstantPool_pool_holder);
 
   copyin_offset(OFFSET_HeapBlockHeader_used);
   copyin_offset(OFFSET_oopDesc_metadata);
@@ -117,10 +117,10 @@
   copyin_offset(OFFSET_Symbol_length);
   copyin_offset(OFFSET_Symbol_body);
 
-  copyin_offset(OFFSET_methodOopDesc_constMethod);
-  copyin_offset(OFFSET_constMethodOopDesc_constants);
-  copyin_offset(OFFSET_constMethodOopDesc_name_index);
-  copyin_offset(OFFSET_constMethodOopDesc_signature_index);
+  copyin_offset(OFFSET_Method_constMethod);
+  copyin_offset(OFFSET_ConstMethod_constants);
+  copyin_offset(OFFSET_ConstMethod_name_index);
+  copyin_offset(OFFSET_ConstMethod_signature_index);
 
   copyin_offset(OFFSET_CodeHeap_memory);
   copyin_offset(OFFSET_CodeHeap_segmap);
@@ -134,7 +134,7 @@
   copyin_offset(OFFSET_nmethod_method);
   copyin_offset(SIZE_HeapBlockHeader);
   copyin_offset(SIZE_oopDesc);
-  copyin_offset(SIZE_constantPoolOopDesc);
+  copyin_offset(SIZE_ConstantPool);
 
   copyin_offset(OFFSET_NarrowOopStruct_base);
   copyin_offset(OFFSET_NarrowOopStruct_shift);
@@ -145,18 +145,17 @@
   this->pc = arg0;
 
   /*
-   * The methodOopPtr is in %l2 on SPARC.  This can be found at
+   * The methodPtr is in %l2 on SPARC.  This can be found at
    * offset 8 from the frame pointer on 32-bit processes.
    */
 #if   defined(__sparc)
-  this->methodOopPtr = copyin_ptr(arg1 + 2 * sizeof(pointer) + STACK_BIAS);
+  this->methodPtr = copyin_ptr(arg1 + 2 * sizeof(pointer) + STACK_BIAS);
 #elif defined(__i386) || defined(__amd64)
-  this->methodOopPtr = copyin_ptr(arg1 + OFFSET_interpreter_frame_method);
+  this->methodPtr = copyin_ptr(arg1 + OFFSET_interpreter_frame_method);
 #else
 #error "Don't know architecture"
 #endif
 
-  this->Universe_methodKlassOop = copyin_ptr(&``__1cIUniverseP_methodKlassObj_);
   this->CodeCache_heap_address = copyin_ptr(&``__1cJCodeCacheF_heap_);
 
   /* Reading volatile values */
@@ -186,6 +185,8 @@
   this->CodeHeap_log2_segment_size = copyin_uint32(
       this->CodeCache_heap_address + OFFSET_CodeHeap_log2_segment_size);
 
+  this->Method_vtbl             = (pointer) &``__1cGMethodG__vtbl_;
+
   /*
    * Get Java heap bounds
    */
@@ -298,9 +299,9 @@
 /!this->done && this->vtbl == this->nmethod_vtbl/
 {
   MARK_LINE;
-  this->methodOopPtr = copyin_ptr(this->start + OFFSET_nmethod_method);
+  this->methodPtr = copyin_ptr(this->start + OFFSET_nmethod_method);
   this->suffix = '*';
-  this->methodOop = 1;
+  this->isMethod = 1;
 }
 
 dtrace:helper:ustack:
@@ -310,35 +311,18 @@
   this->name = copyin_ptr(this->start + OFFSET_CodeBlob_name);
 }
 
+
 dtrace:helper:ustack:
-/!this->done && this->vtbl == this->BufferBlob_vtbl &&
-this->Use_Compressed_Oops == 0 &&
-this->methodOopPtr > this->heap_start && this->methodOopPtr < this->heap_end/
+/!this->done && this->vtbl == this->BufferBlob_vtbl && this->methodPtr != 0/
 {
   MARK_LINE;
-  this->klass = copyin_ptr(this->methodOopPtr + OFFSET_oopDesc_metadata);
-  this->methodOop = this->klass == this->Universe_methodKlassOop;
-  this->done = !this->methodOop;
+  this->klass = copyin_ptr(this->methodPtr);
+  this->isMethod = this->klass == this->Method_vtbl;
+  this->done = !this->isMethod;
 }
 
 dtrace:helper:ustack:
-/!this->done && this->vtbl == this->BufferBlob_vtbl &&
-this->Use_Compressed_Oops != 0 &&
-this->methodOopPtr > this->heap_start && this->methodOopPtr < this->heap_end/
-{
-  MARK_LINE;
-  /*
-   * Read compressed pointer and  decode heap oop, same as oop.inline.hpp
-   */
-  this->cklass = copyin_uint32(this->methodOopPtr + OFFSET_oopDesc_metadata);
-  this->klass = (uint64_t)((uintptr_t)this->Universe_narrow_oop_base +
-                ((uintptr_t)this->cklass << this->Universe_narrow_oop_shift));
-  this->methodOop = this->klass == this->Universe_methodKlassOop;
-  this->done = !this->methodOop;
-}
-
-dtrace:helper:ustack:
-/!this->done && !this->methodOop/
+/!this->done && !this->isMethod/
 {
   MARK_LINE;
   this->name = copyin_ptr(this->start + OFFSET_CodeBlob_name);
@@ -347,38 +331,38 @@
 }
 
 dtrace:helper:ustack:
-/!this->done && this->methodOop/
+/!this->done && this->isMethod/
 {
   MARK_LINE;
-  this->constMethod = copyin_ptr(this->methodOopPtr +
-      OFFSET_methodOopDesc_constMethod);
+  this->constMethod = copyin_ptr(this->methodPtr +
+      OFFSET_Method_constMethod);
 
   this->nameIndex = copyin_uint16(this->constMethod +
-      OFFSET_constMethodOopDesc_name_index);
+      OFFSET_ConstMethod_name_index);
 
   this->signatureIndex = copyin_uint16(this->constMethod +
-      OFFSET_constMethodOopDesc_signature_index);
+      OFFSET_ConstMethod_signature_index);
 
   this->constantPool = copyin_ptr(this->constMethod +
-      OFFSET_constMethodOopDesc_constants);
+      OFFSET_ConstMethod_constants);
 
   this->nameSymbol = copyin_ptr(this->constantPool +
-      this->nameIndex * sizeof (pointer) + SIZE_constantPoolOopDesc);
+      this->nameIndex * sizeof (pointer) + SIZE_ConstantPool);
 
   this->nameSymbolLength = copyin_uint16(this->nameSymbol +
       OFFSET_Symbol_length);
 
   this->signatureSymbol = copyin_ptr(this->constantPool +
-      this->signatureIndex * sizeof (pointer) + SIZE_constantPoolOopDesc);
+      this->signatureIndex * sizeof (pointer) + SIZE_ConstantPool);
 
   this->signatureSymbolLength = copyin_uint16(this->signatureSymbol +
       OFFSET_Symbol_length);
 
   this->klassPtr = copyin_ptr(this->constantPool +
-      OFFSET_constantPoolOopDesc_pool_holder);
+      OFFSET_ConstantPool_pool_holder);
 
   this->klassSymbol = copyin_ptr(this->klassPtr +
-      OFFSET_Klass_name + SIZE_oopDesc);
+      OFFSET_Klass_name);
 
   this->klassSymbolLength = copyin_uint16(this->klassSymbol +
       OFFSET_Symbol_length);