# HG changeset patch # User Andrew John Hughes # Date 1550458994 0 # Node ID 3bf391328fbeecaa66da078fe73c2d452c4f54d9 # Parent 38d89be5d3f4d27ecfbd0011da30d5edb7d40fb6 PR3698: jstack.stp should support ppc64[le,be] 2019-02-10 Andrew John Hughes PR3698: jstack.stp should support ppc64[le,be] * NEWS: Updated. 2019-01-28 Mark Wielaard PR3698: jstack.stp should support ppc64[le,be] * tapset/jstack.stp.in: Add ppc64 support. diff -r 38d89be5d3f4 -r 3bf391328fbe ChangeLog --- a/ChangeLog Tue Jan 08 03:41:49 2019 +0000 +++ b/ChangeLog Mon Feb 18 03:03:14 2019 +0000 @@ -1,3 +1,13 @@ +2019-02-10 Andrew John Hughes + + PR3698: jstack.stp should support ppc64[le,be] + * NEWS: Updated. + +2019-01-28 Mark Wielaard + + PR3698: jstack.stp should support ppc64[le,be] + * tapset/jstack.stp.in: Add ppc64 support. + 2019-01-02 Andrew John Hughes PR3676: Update CVE URL diff -r 38d89be5d3f4 -r 3bf391328fbe NEWS --- a/NEWS Tue Jan 08 03:41:49 2019 +0000 +++ b/NEWS Mon Feb 18 03:03:14 2019 +0000 @@ -16,6 +16,8 @@ * Bug fixes - PR3676: Update CVE URL +* SystemTap + - PR3698: jstack.stp should support ppc64[le,be] New in release 2.6.16 (2019-01-01): diff -r 38d89be5d3f4 -r 3bf391328fbe tapset/jstack.stp.in --- a/tapset/jstack.stp.in Tue Jan 08 03:41:49 2019 +0000 +++ b/tapset/jstack.stp.in Mon Feb 18 03:03:14 2019 +0000 @@ -59,7 +59,12 @@ @_private global NarrowOopStruct; @_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; @@ -146,6 +151,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 = ""; @@ -153,7 +164,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. @@ -331,9 +342,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) { @@ -530,9 +548,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"