summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustavo Romero <gromero@linux.vnet.ibm.com>2017-07-20 17:49:02 -0400
committerMark Wielaard <mark@klomp.org>2017-07-25 12:20:42 +0200
commit55a471f5fe44945414af243613d4590c4e7cd8d1 (patch)
tree54e51962b2d00e9bb61a7fc3123f15a7fefb58fa
parent55cb7dfa7e9afb3660b21e51434641c7287baf11 (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/ChangeLog8
-rw-r--r--backends/ppc_corenote.c13
-rw-r--r--backends/ppc_regs.c10
-rw-r--r--libebl/ChangeLog4
-rw-r--r--libebl/eblcorenotetypename.c1
-rw-r--r--libelf/ChangeLog4
-rw-r--r--libelf/elf.h1
-rw-r--r--tests/ChangeLog5
-rwxr-xr-xtests/run-addrcfi.sh18
-rwxr-xr-xtests/run-allregs.sh12
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