rs6000: Debug regnums for TM registers
authorSegher Boessenkool <segher@kernel.crashing.org>
Thu, 2 May 2019 18:45:22 +0000 (20:45 +0200)
committerSegher Boessenkool <segher@gcc.gnu.org>
Thu, 2 May 2019 18:45:22 +0000 (20:45 +0200)
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.

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

From-SVN: r270819

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 9149eaad186f583dec670108ce2bf96079ccc5c5..88d83640e26c32fefff70d72a7a3fe6df5df8687 100644 (file)
@@ -1,3 +1,8 @@
+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.
+
 2019-05-02  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/89653
index f0de18d4dcd0baf35bfb5c149fc4875b68546ebc..f8e9fd2fd80461bf82b1430949da533a00aa0ae9 100644 (file)
@@ -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;
 }