This is the mail archive of the elfutils-devel@sourceware.org mailing list for the elfutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] 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>
---
 backends/ChangeLog           |  5 +++++
 backends/ppc_corenote.c      | 13 ++++++++++++-
 backends/ppc_regs.c          | 10 +++++++++-
 libebl/ChangeLog             |  4 ++++
 libebl/eblcorenotetypename.c |  1 +
 libelf/ChangeLog             |  4 ++++
 libelf/elf.h                 |  1 +
 tests/ChangeLog              |  5 +++++
 tests/run-addrcfi.sh         | 18 +++++++++---------
 tests/run-allregs.sh         | 12 ++++++------
 10 files changed, 56 insertions(+), 17 deletions(-)

diff --git a/backends/ChangeLog b/backends/ChangeLog
index d628245..6cecdf9 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -1,3 +1,8 @@
+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-06-17  Mark Wielaard  <mark@klomp.org>
 
 	* s390_initreg.c: Swap sys/ptrace.h and asm/ptrace.h include order.
diff --git a/backends/ppc_corenote.c b/backends/ppc_corenote.c
index 9ac8871..2b4ada7 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 bcf4f7a..c2d5011 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 506915b..efeb7c3 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-04-20  Ulf Hermann  <ulf.hermann@qt.io>
 
 	* libebl.h: Use __pure_attribute__.
diff --git a/libebl/eblcorenotetypename.c b/libebl/eblcorenotetypename.c
index fa81dbe..d3a56fa 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 594bec9..e5529e9 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-04-20  Ulf Hermann  <ulf.hermann@qt.io>
 
 	* libelfP.h: Don't include config.h.
diff --git a/libelf/elf.h b/libelf/elf.h
index b6112d9..fa35203 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 3dd6f2a..84742c6 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-14  Mark Wielaard  <mark@klomp.org>
 
 	* run-strip-remove-keep.sh: New test.
diff --git a/tests/run-addrcfi.sh b/tests/run-addrcfi.sh
index c864eea..376a6dc 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 d82f37e..7ddd452 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
-- 
2.7.4


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]