diff options
author | Gustavo Romero <gromero@linux.vnet.ibm.com> | 2017-07-20 17:49:02 -0400 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2017-07-25 12:20:42 +0200 |
commit | 55a471f5fe44945414af243613d4590c4e7cd8d1 (patch) | |
tree | 54e51962b2d00e9bb61a7fc3123f15a7fefb58fa | |
parent | 55cb7dfa7e9afb3660b21e51434641c7287baf11 (diff) |
ppc64: Add HTM SPRs support to readelf
Since POWER8, PowerPC 64 supports Hardware Transactional Memory, which has
three special purpose registers associated to it: tfhar, tfiar, and texasr.
This commit add HTM SPRs set as known note type so it's possible to use
'readelf --notes' to inspect the HTM SPRs in a coredump file generated in
such a machines.
Signed-off-by: Gustavo Romero <gromero@linux.vnet.ibm.com>
-rw-r--r-- | backends/ChangeLog | 8 | ||||
-rw-r--r-- | backends/ppc_corenote.c | 13 | ||||
-rw-r--r-- | backends/ppc_regs.c | 10 | ||||
-rw-r--r-- | libebl/ChangeLog | 4 | ||||
-rw-r--r-- | libebl/eblcorenotetypename.c | 1 | ||||
-rw-r--r-- | libelf/ChangeLog | 4 | ||||
-rw-r--r-- | libelf/elf.h | 1 | ||||
-rw-r--r-- | tests/ChangeLog | 5 | ||||
-rwxr-xr-x | tests/run-addrcfi.sh | 18 | ||||
-rwxr-xr-x | tests/run-allregs.sh | 12 |
10 files changed, 58 insertions, 18 deletions
diff --git a/backends/ChangeLog b/backends/ChangeLog index 88b9764a..83710c19 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,4 +1,10 @@ -2017-08-20 Mark Wielaard <mark@klomp.org> +2017-07-19 Gustavo Romero <gromero@linux.vnet.ibm.com> + + * ppc_corenote.c: Add offsets for ppc64 HTM SPRs: thfar, tfiar, + and texasr. + * ppc_regs.c: Add names for ppc64 HTM SPRs mappings. + +2017-07-20 Mark Wielaard <mark@klomp.org> * aarch64_init.c (aarch64_init): Hook data_marker_symbol. * aarch64_symbol.c (aarch64_data_marker_symbol): New function. diff --git a/backends/ppc_corenote.c b/backends/ppc_corenote.c index 9ac88712..2b4ada7a 100644 --- a/backends/ppc_corenote.c +++ b/backends/ppc_corenote.c @@ -94,9 +94,20 @@ static const Ebl_Register_Location spe_regs[] = { .offset = 34 * 4, .regno = 612, .count = 1, .bits = 32 } }; +static const Ebl_Register_Location tm_spr_regs[] = + { + /* tfhar */ + { .offset = 0, .regno = 114, .count = 1, .bits = 64 }, + /* texasr */ + { .offset = 8, .regno = 116, .count = 1, .bits = 64 }, + /* tfiar */ + { .offset = 16, .regno = 115, .count = 1, .bits = 64 } + }; + #define EXTRA_NOTES \ EXTRA_REGSET (NT_PPC_VMX, 34 * 16, altivec_regs) \ - EXTRA_REGSET (NT_PPC_SPE, 35 * 4, spe_regs) + EXTRA_REGSET (NT_PPC_SPE, 35 * 4, spe_regs) \ + EXTRA_REGSET (NT_PPC_TM_SPR, 3 * 8, tm_spr_regs) #if BITS == 32 # define ULONG uint32_t diff --git a/backends/ppc_regs.c b/backends/ppc_regs.c index bcf4f7a3..c2d50118 100644 --- a/backends/ppc_regs.c +++ b/backends/ppc_regs.c @@ -149,7 +149,15 @@ ppc_register_info (Ebl *ebl __attribute__ ((unused)), namelen = 4; break; - case 110 ... 117: + case 114: + return stpcpy (name, "tfhar") + 1 - name; + case 115: + return stpcpy (name, "tfiar") + 1 - name; + case 116: + return stpcpy (name, "texasr") + 1 - name; + + case 110 ... 113: + case 117: case 120 ... 121: case 123 ... 199: name[0] = 's'; diff --git a/libebl/ChangeLog b/libebl/ChangeLog index f4474496..334bf224 100644 --- a/libebl/ChangeLog +++ b/libebl/ChangeLog @@ -1,3 +1,7 @@ +2017-07-19 Gustavo Romero <gromero@linux.vnet.ibm.com> + + * eblcorenotetypename.c: Add ppc64 HTM SPRs note as known type. + 2017-07-20 Mark Wielaard <mark@klomp.org> * Makefile.am (gen_SOURCES): Add ebl_data_marker_symbol.c. diff --git a/libebl/eblcorenotetypename.c b/libebl/eblcorenotetypename.c index fa81dbec..d3a56fa9 100644 --- a/libebl/eblcorenotetypename.c +++ b/libebl/eblcorenotetypename.c @@ -75,6 +75,7 @@ ebl_core_note_type_name (Ebl *ebl, uint32_t type, char *buf, size_t len) KNOWNSTYPE (PPC_VMX); KNOWNSTYPE (PPC_SPE); KNOWNSTYPE (PPC_VSX); + KNOWNSTYPE (PPC_TM_SPR); KNOWNSTYPE (386_TLS); KNOWNSTYPE (386_IOPERM); KNOWNSTYPE (X86_XSTATE); diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 214a4f7e..b17e1c5e 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,3 +1,7 @@ +2017-07-19 Gustavo Romero <gromero@linux.vnet.ibm.com> + + * elf.h: Add known type in notes segment descriptor for HTM SPRs. + 2017-02-17 Ulf hermann <ulf.hermann@qt.io> * Makefile.am: Add libelf_so_DEPS, which include libeu.a, diff --git a/libelf/elf.h b/libelf/elf.h index b6112d9d..fa35203d 100644 --- a/libelf/elf.h +++ b/libelf/elf.h @@ -763,6 +763,7 @@ typedef struct #define NT_PPC_SPE 0x101 /* PowerPC SPE/EVR registers */ #define NT_PPC_VSX 0x102 /* PowerPC VSX registers */ #define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */ +#define NT_PPC_TM_SPR 0x10c /* PowerPC HW Transactional Memory SPRs */ #define NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */ #define NT_X86_XSTATE 0x202 /* x86 extended state using xsave */ #define NT_S390_HIGH_GPRS 0x300 /* s390 upper register halves */ diff --git a/tests/ChangeLog b/tests/ChangeLog index 6c70d020..0700e7ca 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2017-07-19 Gustavo Romero <gromero@linux.vnet.ibm.com> + + * run-addrcfi.sh: Update generic SPRs names to HTM SPRs names + * run-allregs.sh: Update generic SPRs names to HTM SPRs names + 2017-07-20 Mark Wielaard <mark@klomp.org> * run-strip-g.sh: New test. diff --git a/tests/run-addrcfi.sh b/tests/run-addrcfi.sh index c864eeae..376a6dc3 100755 --- a/tests/run-addrcfi.sh +++ b/tests/run-addrcfi.sh @@ -397,9 +397,9 @@ dwarf_cfi_addrframe (.eh_frame): no matching address range privileged reg111 (spr11): undefined privileged reg112 (spr12): undefined privileged reg113 (spr13): undefined - privileged reg114 (spr14): undefined - privileged reg115 (spr15): undefined - privileged reg116 (spr16): undefined + privileged reg114 (tfhar): undefined + privileged reg115 (tfiar): undefined + privileged reg116 (texasr): undefined privileged reg117 (spr17): undefined privileged reg118 (dsisr): undefined privileged reg119 (dar): undefined @@ -1419,9 +1419,9 @@ testrun_compare ${abs_builddir}/addrcfi -e testfileppc32 0x100004d2 <<\EOF privileged reg111 (spr11): undefined privileged reg112 (spr12): undefined privileged reg113 (spr13): undefined - privileged reg114 (spr14): undefined - privileged reg115 (spr15): undefined - privileged reg116 (spr16): undefined + privileged reg114 (tfhar): undefined + privileged reg115 (tfiar): undefined + privileged reg116 (texasr): undefined privileged reg117 (spr17): undefined privileged reg118 (dsisr): undefined privileged reg119 (dar): undefined @@ -2447,9 +2447,9 @@ dwarf_cfi_addrframe (.eh_frame): no matching address range privileged reg111 (spr11): undefined privileged reg112 (spr12): undefined privileged reg113 (spr13): undefined - privileged reg114 (spr14): undefined - privileged reg115 (spr15): undefined - privileged reg116 (spr16): undefined + privileged reg114 (tfhar): undefined + privileged reg115 (tfiar): undefined + privileged reg116 (texasr): undefined privileged reg117 (spr17): undefined privileged reg118 (dsisr): undefined privileged reg119 (dar): undefined diff --git a/tests/run-allregs.sh b/tests/run-allregs.sh index d82f37e6..7ddd4520 100755 --- a/tests/run-allregs.sh +++ b/tests/run-allregs.sh @@ -253,9 +253,9 @@ privileged registers: 111: spr11 (spr11), unsigned 32 bits 112: spr12 (spr12), unsigned 32 bits 113: spr13 (spr13), unsigned 32 bits - 114: spr14 (spr14), unsigned 32 bits - 115: spr15 (spr15), unsigned 32 bits - 116: spr16 (spr16), unsigned 32 bits + 114: tfhar (tfhar), unsigned 32 bits + 115: tfiar (tfiar), unsigned 32 bits + 116: texasr (texasr), unsigned 32 bits 117: spr17 (spr17), unsigned 32 bits 118: dsisr (dsisr), unsigned 32 bits 119: dar (dar), unsigned 32 bits @@ -1276,9 +1276,9 @@ privileged registers: 111: spr11 (spr11), unsigned 64 bits 112: spr12 (spr12), unsigned 64 bits 113: spr13 (spr13), unsigned 64 bits - 114: spr14 (spr14), unsigned 64 bits - 115: spr15 (spr15), unsigned 64 bits - 116: spr16 (spr16), unsigned 64 bits + 114: tfhar (tfhar), unsigned 64 bits + 115: tfiar (tfiar), unsigned 64 bits + 116: texasr (texasr), unsigned 64 bits 117: spr17 (spr17), unsigned 64 bits 118: dsisr (dsisr), unsigned 64 bits 119: dar (dar), unsigned 64 bits |