changeset 2882:449b25581834

PR3341: jstack.stp should support ppc64[le,be] 2019-02-10 Andrew John Hughes <gnu_andrew@member.fsf.org> PR3341: jstack.stp should support ppc64[le,be] * NEWS: Updated. 2019-01-28 Mark Wielaard <mjw@redhat.com> PR3341: jstack.stp should support ppc64[le,be] * tapset/jstack.stp.in: Add ppc64 support.
author Andrew John Hughes <gnu_andrew@member.fsf.org>
date Mon, 11 Feb 2019 03:36:11 +0000
parents fbc0e6cbc34f
children 97c468298911
files ChangeLog NEWS tapset/jstack.stp.in
diffstat 3 files changed, 39 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Thu Feb 07 18:18:55 2019 +0000
+++ b/ChangeLog	Mon Feb 11 03:36:11 2019 +0000
@@ -1,3 +1,13 @@
+2019-02-10  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+
+	PR3341: jstack.stp should support ppc64[le,be]
+	* NEWS: Updated.
+
+2019-01-28  Mark Wielaard  <mjw@redhat.com>
+
+	PR3341: jstack.stp should support ppc64[le,be]
+	* tapset/jstack.stp.in: Add ppc64 support.
+
 2019-02-03  Andrew John Hughes  <gnu_andrew@member.fsf.org>
 
 	Bump aarch32 to jdk8u192-b12-aarch32-181022.
--- a/NEWS	Thu Feb 07 18:18:55 2019 +0000
+++ b/NEWS	Mon Feb 11 03:36:11 2019 +0000
@@ -120,6 +120,8 @@
   - PR3675: Update CVE URL
   - PR3683: Addition of 8189170 in 8u192 breaks 8197429 backport
   - PR3691: wget not detected by configure
+* SystemTap
+  - PR3341: jstack.stp should support ppc64[le,be]
 * AArch64 port
   - S8160748, PR3682: [AArch64] Inconsistent types for ideal_reg
   - S8189170, PR3682: [AArch64] Add option to disable stack overflow checking in primordial thread for use with JNI_CreateJavaJVM
--- a/tapset/jstack.stp.in	Thu Feb 07 18:18:55 2019 +0000
+++ b/tapset/jstack.stp.in	Mon Feb 11 03:36:11 2019 +0000
@@ -55,7 +55,12 @@
 @_private global CodeCache_heap;
 
 @_private global sp_register;
+/* On PowerPC there is a link register, but no frame pointer register.  */
+%(arch == "powerpc" %?
+@_private global link_register;
+%:
 @_private global fp_register;
+%)
 @_private global pc_register;
 @_private global ptr_size;
 @_private global ptr_mask;
@@ -108,6 +113,12 @@
      pc_register = "pc";
      ptr_size = 8; // XXX - might be probing 32-on-64 jvm.
      ptr_mask = 0xFFFFFFFFFFFFFFFF;
+  %: %(arch == "powerpc" %?
+     sp_register = "r1";
+     link_register = "link";
+     pc_register = "nip";
+     ptr_size = 8; // XXX - might be probing 32-on-64 jvm.
+     ptr_mask = 0xFFFFFFFFFFFFFFFF;
   %:
      sp_register = "";
      fp_register = "";
@@ -115,7 +126,7 @@
      ptr_size = 8;
      ptr_mask = 0xFFFFFFFFFFFFFFFF;
      error("unknown architecture")
-  %) %) %)
+  %) %) %) %)
 
   // Pretend we have an array at address zero and take address of second
   // element and we have the size.
@@ -280,9 +291,16 @@
   // to "recover" the previous fp in case we hit a code blob that didn't
   // preserve it.
   frames = "";
+%(arch == "powerpc" %?
+  sp = register(sp_register);
+  fp = sp + 72; /* fp + (-3 * ptr_size) = 48, parameter save area offset */
+  link = register(link_register);
+  pc = register(pc_register);
+%:
   sp = register(sp_register);
   fp = register(fp_register);
   pc = register(pc_register);
+%)
   depth = 0;
   while (pc != 0 && depth < max_depth)
     {
@@ -441,9 +459,17 @@
         old_fp = fp;
         old_sp = sp
 
+%(arch == "powerpc" %?
+        sp = user_long(sp);
+        fp = sp + 72; /* fp + (-3 * ptr_size) = 48, parameter save area offset */
+        pc = link;
+        link = user_long(sp + 16);
+        trust_fp = 1; /* We don't need to recover the frame pointer.  */
+%:
         sp = fp;
         fp = user_long(sp);
         pc = user_long(fp + ptr_size);
+%)
 
         // Do we need to double check? We do not want to do this
         // unless necessary. We have to assume most code is "sane"