# HG changeset patch # User Andrew John Hughes # Date 1613955007 0 # Node ID dc89882c06dae9b9e6b541019f3d085db620ae5c # Parent dad45f85e3a3ff3a66344ca5320a54059e8f7c7b PR3830: jstack.stp should support ppc64[le,be] 2019-02-10 Andrew John Hughes PR3830: jstack.stp should support ppc64[le,be] * NEWS: Updated. 2019-01-28 Mark Wielaard PR3830: jstack.stp should support ppc64[le,be] * tapset/jstack.stp.in: Add ppc64 support. diff -r dad45f85e3a3 -r dc89882c06da ChangeLog --- a/ChangeLog Mon Feb 22 00:35:57 2021 +0000 +++ b/ChangeLog Mon Feb 22 00:50:07 2021 +0000 @@ -1,3 +1,13 @@ +2019-02-10 Andrew John Hughes + + PR3830: jstack.stp should support ppc64[le,be] + * NEWS: Updated. + +2019-01-28 Mark Wielaard + + PR3830: jstack.stp should support ppc64[le,be] + * tapset/jstack.stp.in: Add ppc64 support. + 2018-11-20 Andrew John Hughes PR3829: arc_priority representation creates an diff -r dad45f85e3a3 -r dc89882c06da NEWS --- a/NEWS Mon Feb 22 00:35:57 2021 +0000 +++ b/NEWS Mon Feb 22 00:50:07 2021 +0000 @@ -14,6 +14,7 @@ * New features - PR3827: jstack.stp should support AArch64 + - PR3830: jstack.stp should support ppc64[le,be] * SystemTap - PR3825: SystemTap is heavily confused by multiple JDKs - PR3828: Architectures unsupported by SystemTap tapsets throw a parse error diff -r dad45f85e3a3 -r dc89882c06da tapset/jstack.stp.in --- a/tapset/jstack.stp.in Mon Feb 22 00:35:57 2021 +0000 +++ b/tapset/jstack.stp.in Mon Feb 22 00:50:07 2021 +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"