]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
ppc64: Add HTM SPRs support to readelf
authorGustavo Romero <gromero@linux.vnet.ibm.com>
Thu, 20 Jul 2017 21:49:02 +0000 (17:49 -0400)
committerMark Wielaard <mark@klomp.org>
Tue, 25 Jul 2017 10:20:42 +0000 (12:20 +0200)
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
backends/ppc_corenote.c
backends/ppc_regs.c
libebl/ChangeLog
libebl/eblcorenotetypename.c
libelf/ChangeLog
libelf/elf.h
tests/ChangeLog
tests/run-addrcfi.sh
tests/run-allregs.sh

index 88b9764ab57f5ef35c7dc650ccd9a73cf77cad7d..83710c19d3527c1ff3788ef74ddcadd3033bd61e 100644 (file)
@@ -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.
index 9ac88712fbe94f563d13550af20afa03bc706cd3..2b4ada7ae94f367cea316c7924c0c9af0d4bc025 100644 (file)
@@ -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
index bcf4f7a3e72f7232fc8041fead111ccb45b1ab53..c2d501181cc207ccecd66b35a3d38ac1475e905d 100644 (file)
@@ -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';
index f44744968aba5f9c137259e1a6f1759538b73646..334bf224a201c6090646d3d3293275df0d6837aa 100644 (file)
@@ -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.
index fa81dbecc9084a1d6733de335109f757228bb8e2..d3a56fa91a6c2220e63d279899d2098ea8d5510b 100644 (file)
@@ -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);
index 214a4f7e7c00dca719a9032e426426ff2894b449..b17e1c5e52cb59d38282cc04875011ac83852e70 100644 (file)
@@ -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,
index b6112d9d556ab4f82f7ba5cb6907b29898953f6f..fa35203dfef08aaf4d46eef2f594c0b5555a3854 100644 (file)
@@ -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 */
index 6c70d02079b9128556d6fc7a8459fa03312e0d72..0700e7ca5057646d65fd39248cfffb1db5df60a4 100644 (file)
@@ -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.
index c864eeaeb71a29b8de3fb3ed151c5a8e65fda741..376a6dc3109bca50901af5ee54449bf41c7f7826 100755 (executable)
@@ -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
index d82f37e6d55417ac72cf6d3d18fe7ff591f35f1c..7ddd4520dd19e610174c4feeb183f3f511d84537 100755 (executable)
@@ -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