diff mbox series

[1/2] rs6000: Debug regnums for TM registers

Message ID a9b2a91e3769702f159da0b630625670b07d908f.1556818314.git.segher@kernel.crashing.org
State New
Headers show
Series [1/2] rs6000: Debug regnums for TM registers | expand

Commit Message

Segher Boessenkool May 2, 2019, 6:24 p.m. UTC
Since GCC 8, we have output incorrect numbers for the transactional
memory registers.

Also, we didn't output the correct DWARF register numbers for those.
The number for sprN is 100+N.

This fixes both these issues.

Tested on powerpc64-linux (-m32,-m64} and on powerpc64le-linux.
Committing.  I hope this (and the next patch) doesn't break targets
using the old DWARF register numbers, I cannot easily test that; but
it's stage 1.

This should be backported to GCC 8 and GCC 9 (9.2).


Segher


2019-05-02  Segher Boessenkool  <segher@kernel.crashing.org>

	* config/rs6000/rs6000.c (rs6000_dbx_register_number): Return the
	correct numbers for TFHAR, TFIAR, TEXASR.

---
 gcc/config/rs6000/rs6000.c | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

Comments

Segher Boessenkool Aug. 4, 2019, 7:31 p.m. UTC | #1
On Thu, May 02, 2019 at 06:24:10PM +0000, Segher Boessenkool wrote:
> Since GCC 8, we have output incorrect numbers for the transactional
> memory registers.
> 
> Also, we didn't output the correct DWARF register numbers for those.
> The number for sprN is 100+N.
> 
> This fixes both these issues.
> 
> Tested on powerpc64-linux (-m32,-m64} and on powerpc64le-linux.
> Committing.  I hope this (and the next patch) doesn't break targets
> using the old DWARF register numbers, I cannot easily test that; but
> it's stage 1.
> 
> This should be backported to GCC 8 and GCC 9 (9.2).

I did those backports now.


Segher
diff mbox series

Patch

diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index f0de18d..f8e9fd2 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -36269,10 +36269,20 @@  rs6000_init_dwarf_reg_sizes_extra (tree address)
 unsigned int
 rs6000_dbx_register_number (unsigned int regno, unsigned int format)
 {
-  /* Except for the above, we use the internal number for non-DWARF
-     debug information, and also for .eh_frame.  */
+  /* We use the GCC 7 (and before) internal number for non-DWARF debug
+     information, and also for .eh_frame.  */
   if ((format == 0 && write_symbols != DWARF2_DEBUG) || format == 2)
-    return regno;
+    {
+      /* Translate the regnos to their numbers in GCC 7 (and before).  */
+      if (regno == TFHAR_REGNO)
+	regno = 114;
+      else if (regno == TFIAR_REGNO)
+	regno = 115;
+      else if (regno == TEXASR_REGNO)
+	regno = 116;
+
+      return regno;
+    }
 
   /* On some platforms, we use the standard DWARF register
      numbering for .debug_info and .debug_frame.  */
@@ -36299,6 +36309,12 @@  rs6000_dbx_register_number (unsigned int regno, unsigned int format)
     return 356;
   if (regno == VSCR_REGNO)
     return 67;
+  if (regno == TFHAR_REGNO)
+    return 228;
+  if (regno == TFIAR_REGNO)
+    return 229;
+  if (regno == TEXASR_REGNO)
+    return 230;
 #endif
   return regno;
 }