/hg/icedtea: 9 new changesets

andrew at icedtea.classpath.org andrew at icedtea.classpath.org
Mon Aug 18 20:14:02 UTC 2014


changeset 22f2903c68e7 in /hg/icedtea
details: http://icedtea.classpath.org/hg/icedtea?cmd=changeset;node=22f2903c68e7
author: Andrew John Hughes <gnu_andrew at member.fsf.org>
date: Mon Aug 18 15:13:08 2014 +0100

	PR1935: HotSpot extraction needs to depend on the tarball being downloaded

	2014-08-18  Andrew John Hughes  <gnu.andrew at member.fsf.org>

		PR1935: HotSpot extraction needs to depend on the
		tarball being downloaded
		* Makefile.am:
		(extract-hotspot): Depend on download-hotspot.
		* NEWS: Updated.


changeset 5b8955f66ecf in /hg/icedtea
details: http://icedtea.classpath.org/hg/icedtea?cmd=changeset;node=5b8955f66ecf
author: Mark Wielaard <mark at klomp.org>
date: Tue Mar 13 16:29:10 2012 +0100

	* tapset/jstack.stp.in: Don't hard code constantPoolOopDesc_size.

	The size of constantPoolOopDesc had changed, but it was hard coded.
	We use a trick now to calculate it from the DWARF data. Pretend we have
	an array at address zero and take address of second element and we have
	the size.


changeset 5dc8260e9813 in /hg/icedtea
details: http://icedtea.classpath.org/hg/icedtea?cmd=changeset;node=5dc8260e9813
author: Mark Wielaard <mark at klomp.org>
date: Tue Mar 13 16:41:32 2012 +0100

	jstack.stp support multiple running hotspots by indexing globals by pid().


changeset 4beecbb117be in /hg/icedtea
details: http://icedtea.classpath.org/hg/icedtea?cmd=changeset;node=4beecbb117be
author: Mark Wielaard <mark at klomp.org>
date: Tue Mar 13 17:24:50 2012 +0100

	* tapset/jstack.stp.in: Use @var construct if available.

	Newer versions of systemtap (since 1.8) make it possible to use the @var
	construct if available to pick target variables from the right CU. Which
	is needed by newer DWARF/gcc versions which don't add a defining variable
	declaration to each CU anymore.


changeset f62721317535 in /hg/icedtea
details: http://icedtea.classpath.org/hg/icedtea?cmd=changeset;node=f62721317535
author: Mark Wielaard <mark at klomp.org>
date: Tue Mar 13 23:21:36 2012 +0100

	* tapset/jstack.stp.in: Wrap heap accessors in try-catch block.

	When we cannot read some part of the hotspot code heap catch that error
	and report the frame (address) without trying to decode it.


changeset 0558abf641a6 in /hg/icedtea
details: http://icedtea.classpath.org/hg/icedtea?cmd=changeset;node=0558abf641a6
author: Yasumasa Suenaga  <suenaga.yasumasa at lab.ntt.co.jp>
date: Sun Aug 05 22:16:29 2012 +0200

	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.


changeset 3d3704be7a15 in /hg/icedtea
details: http://icedtea.classpath.org/hg/icedtea?cmd=changeset;node=3d3704be7a15
author: Mark Wielaard <mark at klomp.org>
date: Fri Mar 16 13:15:15 2012 +0100

	jstack: Change symbolOopDesc to Symbol to accomodate S6990754.

	Use native memory and reference counting to implement SymbolTable.


changeset b8116dc80b69 in /hg/icedtea
details: http://icedtea.classpath.org/hg/icedtea?cmd=changeset;node=b8116dc80b69
author: Yasumasa Suenaga  <yasu at ysfactory.dip.jp>
date: Wed Oct 02 12:26:39 2013 +0900

	jstack.stp should be adapted CR#7172967
	Reviewed-by: Jiri Vanek  <jvanek at redhat.com> , Andrew Hughes  <gnu.andrew at redhat.com>
	Review-thread: http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2013-October/024880.html


changeset 3d683cd79209 in /hg/icedtea
details: http://icedtea.classpath.org/hg/icedtea?cmd=changeset;node=3d683cd79209
author: Andrew John Hughes <gnu_andrew at member.fsf.org>
date: Mon Aug 18 21:13:28 2014 +0100

	PR1845: jstack.stp in OpenJDK8 is broken

	2014-08-18  Andrew John Hughes  <gnu.andrew at member.fsf.org>

		* AUTHORS: Add Yasumasa Suenaga.
		* NEWS: Updated.

	2014-08-18  Yasumasa Suenaga  <yasuenag at gmail.com>

		PR1845: jstack.stp in OpenJDK8 is broken
		* tapset/jstack.stp.in: Updated.


diffstat:

 AUTHORS              |    1 +
 ChangeLog            |   55 +++++++++++++
 Makefile.am          |    3 +-
 NEWS                 |   22 ++--
 tapset/jstack.stp.in |  212 +++++++++++++++++++++-----------------------------
 5 files changed, 161 insertions(+), 132 deletions(-)

diffs (453 lines):

diff -r c728621e76f2 -r 3d683cd79209 AUTHORS
--- a/AUTHORS	Mon Jun 02 18:41:24 2014 +0100
+++ b/AUTHORS	Mon Aug 18 21:13:28 2014 +0100
@@ -30,6 +30,7 @@
 Bernhard Rosenkränzer <bero at arklinux.org>
 Marc Schoenefeld <mschoene at redhat.com>
 Keith Seitz <keiths at redhat.com>
+Yasumasa Suenaga  <yasuenag at gmail.com>
 Joshua Sumali <jsumali at redhat.com>
 Pavel Tisnovsky <ptisnovs at redhat.com>
 Christian Thalinger <twisti at complang.tuwien.ac.at>
diff -r c728621e76f2 -r 3d683cd79209 ChangeLog
--- a/ChangeLog	Mon Jun 02 18:41:24 2014 +0100
+++ b/ChangeLog	Mon Aug 18 21:13:28 2014 +0100
@@ -1,3 +1,58 @@
+2014-08-18  Andrew John Hughes  <gnu.andrew at member.fsf.org>
+
+	* AUTHORS: Add Yasumasa Suenaga.
+	* NEWS: Updated.
+
+2014-08-18  Yasumasa Suenaga  <yasuenag at gmail.com>
+
+	PR1845: jstack.stp in OpenJDK8 is broken
+	* tapset/jstack.stp.in: Updated.
+
+2013-10-02  Yasumasa Suenaga  <yasu at ysfactory.dip.jp>
+
+	* jstack.stp should be adapted CR#7172967
+
+2012-03-16  Mark Wielaard  <mjw at redhat.com>
+
+	* tapset/jstack.stp.in: Change symbolOopDesc to Symbol to accomodate
+	S6990754 - Use native memory and reference counting to implement
+	SymbolTable.
+
+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-03-13  Mark Wielaard  <mjw at redhat.com>
+
+	* tapset/jstack.stp.in: Wrap heap accessors in try-catch block to be
+	able to report unusual frames.
+
+2012-03-13  Mark Wielaard  <mjw at redhat.com>
+
+	* tapset/jstack.stp.in: Use @var construct if available to pick
+	target variable from the right CU (needed by newer DWARF/gcc
+	versions).
+
+2012-03-13  Mark Wielaard  <mjw at redhat.com>
+
+	* tapset/jstack.stp.in: Index globals on pid() to support multiple
+	running hotspot jstacks at the same time.
+
+2012-03-13  Mark Wielaard  <mjw at redhat.com>
+
+	* tapset/jstack.stp.in: Don't hard code constantPoolOopDesc_size.
+
+2014-08-18  Andrew John Hughes  <gnu.andrew at member.fsf.org>
+
+	PR1935: HotSpot extraction needs to depend on the
+	tarball being downloaded
+	* Makefile.am:
+	(extract-hotspot): Depend on download-hotspot.
+	* NEWS: Updated.
+
 2014-06-02  Andrew John Hughes  <gnu.andrew at member.fsf.org>
 
 	PR1813: HotSpot URL should be used with --enable-hg
diff -r c728621e76f2 -r 3d683cd79209 Makefile.am
--- a/Makefile.am	Mon Jun 02 18:41:24 2014 +0100
+++ b/Makefile.am	Mon Aug 18 21:13:28 2014 +0100
@@ -927,7 +927,8 @@
 	rm -rf openjdk
 	rm -f stamps/extract-openjdk.stamp
 
-stamps/extract-hotspot.stamp: stamps/extract-openjdk.stamp
+stamps/extract-hotspot.stamp: stamps/extract-openjdk.stamp \
+ stamps/download-hotspot.stamp
 	set -e ; \
 	if [ ! -z $(HOTSPOT_SRC_ZIP) ] ; then \
 	  if test -e ${HOTSPOT_SRC_ZIP} ; \
diff -r c728621e76f2 -r 3d683cd79209 NEWS
--- a/NEWS	Mon Jun 02 18:41:24 2014 +0100
+++ b/NEWS	Mon Aug 18 21:13:28 2014 +0100
@@ -26,19 +26,21 @@
   - PR1347: Update list of checked JDKs
   - PR1357: Make XRender mandatory
   - PR1359: Check for /usr/lib64 JVMs and generic JPackage alternative
+  - PR1364: Replace hgforest support
+  - PR1748: Allow clang to be used to build
+  - PR1766: Expand architecture support
+  - PR1774: Support GIF lib v5
+  - PR1774: Correct #ifdef to #if
+  - PR1778: Allow an alternate JAR program to be used
+  - PR1796: make fails with "computed checksum did NOT match"
+  - PR1806: Support Debian/Ubuntu 7 & 8 OpenJDK Installs as Boot JDK
+  - PR1812: Unable to locate HotSpot checksum when downloading
+  - PR1813: HotSpot URL should be used with --enable-hg
+  - PR1845: jstack.stp in OpenJDK8 is broken
+  - PR1935: HotSpot extraction needs to depend on the tarball being downloaded
   - Don't substitute 'j' for '-j' inside -I directives
   - Extend 8041658 to all files in the HotSpot build.
-  - PR1748: Allow clang to be used to build
-  - PR1766: Expand architecture support
-  - PR1774: Correct #ifdef to #if
-  - PR1774: Support GIF lib v5
-  - PR1778: Allow an alternate JAR program to be used
-  - PR1796: make fails with "computed checksum did NOT match"
   - Remove jcheck
-  - PR1806: Support Debian/Ubuntu 7 & 8 OpenJDK Installs as Boot JDK
-  - PR1812: Unable to locate HotSpot checksum when downloading
-  - PR1364: Replace hgforest support
-  - PR1813: HotSpot URL should be used with --enable-hg
 * JamVM
   - JSR 292: Invoke Dynamic
   - JSR 308: Type Annotations
diff -r c728621e76f2 -r 3d683cd79209 tapset/jstack.stp.in
--- a/tapset/jstack.stp.in	Mon Jun 02 18:41:24 2014 +0100
+++ b/tapset/jstack.stp.in	Mon Aug 18 21:13:28 2014 +0100
@@ -1,5 +1,5 @@
 /* jstack systemtap tapset, for extracting hotspot java backtraces.
-   Copyright (C) 2009, Red Hat Inc.
+   Copyright (C) 2009, 2012 Red Hat Inc.
 
 This file is part of IcedTea.
 
@@ -45,9 +45,6 @@
  semantic error: failed to retrieve location attribute for local
 */
 
-global Universe_methodKlassObj;
-global Universe_collectedHeap;
-global HeapWordSize;
 global CodeCache_heap;
 
 global sp_register;
@@ -56,9 +53,8 @@
 global ptr_size;
 global ptr_mask;
 
-global constantPoolOopDesc_size;
+global constantPool_size;
 global HeapBlock_Header_size;
-global oopDesc_size;
 
 global vm_inited;
 
@@ -66,25 +62,6 @@
    in a bare function and vm_init_end seems a good place to use. */
 probe hotspot.vm_init_end
 {
-  // The parent/type oop for a methodOop.
-  Universe_methodKlassObj = $_methodKlassObj;
-
-  // For compressed oops.
-  // Universe_heap_base = $_heap_base;
-
-  /**
-   * The Universe class holds some of the interesting statics for
-   * introspection into HotSpot. The CollectedHeap
-   * (Universe::_collectedHeap) is an abstraction of a java heap for Hotspot
-   * it contains a _reserved MemRegion which represents a contigous
-   * region of the address space consisting of HeapWords (which just
-   * have one field member char *i).
-   *
-   * Note that we access it through its "short name" _collectedHeap.
-   */
-  Universe_collectedHeap = $_collectedHeap;
-  HeapWordSize = $HeapWordSize;
-
   /**
    * The CodeCache class contains the static CodeHeap _heap that
    * is malloced at the start of the vm run and holds all generated
@@ -101,7 +78,9 @@
    * the segment at index - N (which can be recursive if a block
    * contains more than 0xFE segments).
    */
-  CodeCache_heap = $_heap;
+  CodeCache_heap[pid()] = %( systemtap_v >= "1.8"
+                            %? @var("_heap at codeCache.cpp")
+                            %: $_heap %);
 
   // Should really check arch of user space (for 32bit jvm on 64bit kernel).
   %( arch == "i386" %?
@@ -110,22 +89,29 @@
      pc_register = "eip";
      ptr_size = 4;
      ptr_mask = 0xFFFFFFFF;
-     constantPoolOopDesc_size = 32; // Should use dwarf @size
   %: %(arch == "x86_64" %?
      sp_register = "rsp";
      fp_register = "rbp";
      pc_register = "rip";
      ptr_size = 8; // XXX - might be probing 32-on-64 jvm.
      ptr_mask = 0xFFFFFFFFFFFFFFFF;
-     constantPoolOopDesc_size = 56; // Should use dwarf @size
   %: **ERROR** unknown architecture
   %) %)
 
+  // Pretend we have an array at address zero and take address of second
+  // element and we have the size.
+  constantPool_size = &@cast(0, "ConstantPool")[1];
+
   // Really should get from dwarf: @size("HeapBlock::Header"), @size("oopDesc")
   HeapBlock_Header_size = 2 * ptr_size;
-  oopDesc_size = 2 * ptr_size;
 
-  vm_inited = 1;
+  vm_inited[pid()] = 1;
+}
+
+probe hotspot.vm_shutdown
+{
+  delete(CodeCache_heap[pid()]);
+  delete(vm_inited[pid()]);
 }
 
 function jstack:string()
@@ -223,7 +209,7 @@
 function jstack_call:string(max_depth:long, log_sig:long, log_native:long,
                             print_frames:long)
 {
-  if (! vm_inited)
+  if (! vm_inited[pid()])
     {
       frame = "<vm-not-inited>";
       if (print_frames)
@@ -235,24 +221,16 @@
         return frame;
     }
 
-  // Extract heap and code bounds.
-  heap_start = @cast(Universe_collectedHeap,
-                     "CollectedHeap",
-                     "@ABS_SERVER_LIBJVM_SO@")->_reserved->_start;
-  heap_size = HeapWordSize * @cast(Universe_collectedHeap,
-                                   "CollectedHeap",
-                                   "@ABS_SERVER_LIBJVM_SO@")->_reserved->_word_size;
-  heap_end = heap_start + heap_size;
-
-  CodeCache_low = @cast(CodeCache_heap, "CodeHeap",
+  // Extract code bounds.
+  CodeCache_low = @cast(CodeCache_heap[pid()], "CodeHeap",
                         "@ABS_SERVER_LIBJVM_SO@")->_memory->_low;
-  CodeCache_high =  @cast(CodeCache_heap, "CodeHeap",
+  CodeCache_high =  @cast(CodeCache_heap[pid()], "CodeHeap",
                           "@ABS_SERVER_LIBJVM_SO@")->_memory->_high;
 
-  CodeHeap_log2_segment_size = @cast(CodeCache_heap,
+  CodeHeap_log2_segment_size = @cast(CodeCache_heap[pid()],
                                      "CodeHeap",
                                      "@ABS_SERVER_LIBJVM_SO@")->_log2_segment_size;
-  CodeCache_segmap_low = @cast(CodeCache_heap,
+  CodeCache_segmap_low = @cast(CodeCache_heap[pid()],
                                "CodeHeap",
                                "@ABS_SERVER_LIBJVM_SO@")->_segmap->_low;
 
@@ -292,93 +270,86 @@
             }
           block = CodeCache_low + (segment << CodeHeap_log2_segment_size);
 
-          // Do some sanity checking.
-          used = @cast(block, "HeapBlock",
-                       "@ABS_SERVER_LIBJVM_SO@")->_header->_used;
-          if (used != 1)
+          // Some of this is "fuzzy" so catch any read error in case we
+          // "guessed" wrong.
+          try
             {
-              // Something very odd has happened.
-              frame = sprintf("0x%x <?unused-code-block?>", pc);
-              blob_name = "unused";
-              trust_fp = 0;
-              frame_size = 0;
-            }
-          else
-            {
-	      // We don't like spaces in frames (makes it hard to return
-              // a space separated frame list). So make sure they are
-              // replaced by underscores when used in frames.
-              blob = block + HeapBlock_Header_size;
-              blob_name_ptr = @cast(blob, "CodeBlob",
-                                    "@ABS_SERVER_LIBJVM_SO@")->_name;
-              blob_name = ((blob_name_ptr == 0) ? "<unknown-code-blob>"
-                           : user_string(blob_name_ptr));
-            }
 
-	  // For compiled code the methodOop is part of the code blob.
-          // For the interpreter (and other code blobs) it is on the
-          // stack relative to the frame pointer.
-          if (blob_name == "nmethod")
-            methodOopPtr = @cast(blob, "nmethod",
-                                 "@ABS_SERVER_LIBJVM_SO@")->_method
-          else 
-            methodOopPtr = user_long(fp + (-3 * ptr_size)) & ptr_mask
+              // Do some sanity checking.
+              used = @cast(block, "HeapBlock",
+                           "@ABS_SERVER_LIBJVM_SO@")->_header->_used;
+              if (used != 1)
+                {
+                  // Something very odd has happened.
+                  frame = sprintf("<unused_code_block at 0x%x>", pc);
+                  blob_name = "unused";
+                  trust_fp = 0;
+                  frame_size = 0;
+                }
+              else
+                {
+                  // We don't like spaces in frames (makes it hard to return
+                  // a space separated frame list). So make sure they are
+                  // replaced by underscores when used in frames.
+                  blob = block + HeapBlock_Header_size;
+                  blob_name_ptr = @cast(blob, "CodeBlob",
+                                        "@ABS_SERVER_LIBJVM_SO@")->_name;
+                  blob_name = ((blob_name_ptr == 0) ? "<unknown-code-blob>"
+                               : user_string(blob_name_ptr));
+                }
 
-          // Start optimistic. A methodOop is only valid if it was
-          // heap allocated. And if the "type class" oop equals the
-          // Universe::methodKlassObj.
-          if (heap_start > methodOopPtr || methodOopPtr >= heap_end)
-            isMethodOop = 0
-          else
-            {
-              methodOopKlass = @cast(methodOopPtr, "methodOopDesc",
-                                     "@ABS_SERVER_LIBJVM_SO@")->_metadata->_klass;
-              isMethodOop = (methodOopKlass == Universe_methodKlassObj);
-            }
+              // For compiled code the methodOop is part of the code blob.
+              // For the interpreter (and other code blobs) it is on the
+              // stack relative to the frame pointer.
+              if (blob_name == "nmethod")
+                methodPtr = @cast(blob, "nmethod",
+                                     "@ABS_SERVER_LIBJVM_SO@")->_method
+              else 
+                methodPtr = user_long(fp + (-3 * ptr_size)) & ptr_mask
 
-          if (isMethodOop)
-            {
               // The java class is the holder of the constants (strings)
               // that describe the method and signature. This constant pool
               // contains symbolic information that describe the properties
               // of the class. The indexes for methods and signaturates in
-              // the constant pool are symbolOopDescs that contain utf8
+              // the constant pool are Symbols that contain utf8
               // strings (plus lenghts). (We could also sanity check that
               // the tag value is correct [CONSTANT_String = 8]).
               // Note that the class name uses '/' instead of '.' as
               // package name separator and that the method signature is
               // encoded as a method descriptor string. Both of which we
               // don't demangle here.
-              constantPoolOopDesc = @cast(methodOopPtr, "methodOopDesc",
+              constMethod = @cast(methodPtr, "Method",
+                                          "@ABS_SERVER_LIBJVM_SO@")->_constMethod;
+              constantPool = @cast(constMethod, "ConstMethod",
                                           "@ABS_SERVER_LIBJVM_SO@")->_constants;
-              constantPoolOop_base = constantPoolOopDesc + constantPoolOopDesc_size;
+              constantPool_base = constantPool + constantPool_size;
 
-              klassPtr = @cast(constantPoolOopDesc, "constantPoolOopDesc",
+              klass = @cast(constantPool, "ConstantPool",
                                "@ABS_SERVER_LIBJVM_SO@")->_pool_holder;
-              klassSymbol = @cast(klassPtr + oopDesc_size, "Klass",
+              klassSymbol = @cast(klass, "Klass",
                                   "@ABS_SERVER_LIBJVM_SO@")->_name;
-              klassName = &@cast(klassSymbol, "symbolOopDesc",
+              klassName = &@cast(klassSymbol, "Symbol",
                                  "@ABS_SERVER_LIBJVM_SO@")->_body[0];
-              klassLength = @cast(klassSymbol, "symbolOopDesc",
+              klassLength = @cast(klassSymbol, "Symbol",
                                   "@ABS_SERVER_LIBJVM_SO@")->_length;
 
-              methodIndex = @cast(methodOopPtr, "methodOopDesc",
-                                  "@ABS_SERVER_LIBJVM_SO@")->_constMethod->_name_index;
-              methodOopDesc = user_long(constantPoolOop_base + (methodIndex * ptr_size));
-              methodName = &@cast(methodOopDesc, "symbolOopDesc",
+              methodIndex = @cast(constMethod, "ConstMethod",
+                                  "@ABS_SERVER_LIBJVM_SO@")->_name_index;
+              methodSymbol = user_long(constantPool_base + (methodIndex * ptr_size));
+              methodName = &@cast(methodSymbol, "Symbol",
                                   "@ABS_SERVER_LIBJVM_SO@")->_body[0];
-              methodLength = @cast(methodOopDesc, "symbolOopDesc",
+              methodLength = @cast(methodSymbol, "Symbol",
                                    "@ABS_SERVER_LIBJVM_SO@")->_length;
 
               if (log_sig)
                 {
-                  sigIndex = @cast(methodOopPtr, "methodOopDesc",
-                                   "@ABS_SERVER_LIBJVM_SO@")->_constMethod->_signature_index;
-                  sigOopDesc = user_long(constantPoolOop_base
+                  sigIndex = @cast(constMethod, "ConstMethod",
+                                   "@ABS_SERVER_LIBJVM_SO@")->_signature_index;
+                  sigSymbol = user_long(constantPool_base
                                          + (sigIndex * ptr_size));
-                  sigName = &@cast(sigOopDesc, "symbolOopDesc",
+                  sigName = &@cast(sigSymbol, "Symbol",
                                    "@ABS_SERVER_LIBJVM_SO@")->_body[0];
-                  sigLength = @cast(sigOopDesc, "symbolOopDesc",
+                  sigLength = @cast(sigSymbol, "Symbol",
                                     "@ABS_SERVER_LIBJVM_SO@")->_length;
                   sig = user_string_n(sigName, sigLength);
                 }
@@ -394,27 +365,26 @@
                               user_string_n(klassName, klassLength),
                               user_string_n(methodName, methodLength),
                               sig, code_name);
+
+              // We cannot trust the frame pointer of compiled methods.
+              // The server (c2) jit compiler uses the fp register.
+              // We do know the method frame size on the stack. But
+              // this seems to be useful only as a hint of the minimum
+              // stack being used.
+              if (blob_name == "nmethod")
+                {
+                  trust_fp = 0;
+                  frame_size = @cast(blob, "CodeBlob",
+                                     "@ABS_SERVER_LIBJVM_SO@")->_frame_size;
+                }
+
             }
-          else
+          catch
             {
-              // This is probably just an internal function, not a java
-              // method, just print the blob_name and continue.
-              // fp is probably still trusted.
-              if (log_native)
-                frame = sprintf("<%s at 0x%x>",
-                                str_replace(blob_name, " ", "_"), pc);
-            }
-
-          // We cannot trust the frame pointer of compiled methods.
-          // The server (c2) jit compiler uses the fp register.
-          // We do know the method frame size on the stack. But
-          // this seems to be useful only as a hint of the minimum
-          // stack being used.
-          if (blob_name == "nmethod")
-            {
+              // Some assumption above totally failed and we got an address
+              // read error. Give up and mark frame pointer as suspect.
+              frame = sprintf("<unknown_frame at 0x%x>", pc);
               trust_fp = 0;
-              frame_size = @cast(blob, "CodeBlob",
-                                 "@ABS_SERVER_LIBJVM_SO@")->_frame_size;
             }
         }
       else


More information about the distro-pkg-dev mailing list