rs6000.h (DBX_REGISTER_NUMBER): Pass format argument to rs6000_dbx_register_number.
authorUlrich Weigand <uweigand@de.ibm.com>
Mon, 13 Oct 2014 17:47:20 +0000 (17:47 +0000)
committerUlrich Weigand <uweigand@gcc.gnu.org>
Mon, 13 Oct 2014 17:47:20 +0000 (17:47 +0000)
* config/rs6000/rs6000.h (DBX_REGISTER_NUMBER): Pass format argument
to rs6000_dbx_register_number.
(DWARF_FRAME_REGNUM): Redefine as identity map.
(DWARF2_FRAME_REG_OUT): Call rs6000_dbx_register_number.
* config/rs6000/rs6000-protos.h (rs6000_dbx_register_number): Update.
* config/rs6000/rs6000.c (rs6000_dbx_register_number): Add format
argument to handle .debug_frame and .eh_frame directly.  Always
translate SPE high register numbers.  Add special treatment for CR,
but only in .debug_frame.  Respect RS6000_USE_DWARF_NUMBERING.

* config/rs6000/sysv.h (DBX_REGISTER_NUMBER): Do not undefine.
* config/rs6000/freebsd.h (DBX_REGISTER_NUMBER): Remove.
(RS6000_USE_DWARF_NUMBERING): Define.
* config/rs6000/freebsd64.h (DBX_REGISTER_NUMBER): Remove.
(RS6000_USE_DWARF_NUMBERING): Define.
* config/rs6000/netbsd.h (DBX_REGISTER_NUMBER): Remove.
(RS6000_USE_DWARF_NUMBERING): Define.
* config/rs6000/lynx.h (DBX_REGISTER_NUMBER): Remove.
(RS6000_USE_DWARF_NUMBERING): Define.
* config/rs6000/aix.h (RS6000_USE_DWARF_NUMBERING): Define.
* config/rs6000/darwin.h (RS6000_USE_DWARF_NUMBERING): Define.

From-SVN: r216157

gcc/ChangeLog
gcc/config/rs6000/aix.h
gcc/config/rs6000/darwin.h
gcc/config/rs6000/freebsd.h
gcc/config/rs6000/freebsd64.h
gcc/config/rs6000/lynx.h
gcc/config/rs6000/netbsd.h
gcc/config/rs6000/rs6000-protos.h
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.h
gcc/config/rs6000/sysv4.h

index 7dfd1b80bb0dcbf39b8e10f430a68e9e2e6f0899..61990be970c68304bcbbe5c4f3a5ba55bf80c223 100644 (file)
@@ -1,3 +1,27 @@
+2014-10-13  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
+
+       * config/rs6000/rs6000.h (DBX_REGISTER_NUMBER): Pass format argument
+       to rs6000_dbx_register_number.
+       (DWARF_FRAME_REGNUM): Redefine as identity map.
+       (DWARF2_FRAME_REG_OUT): Call rs6000_dbx_register_number.
+       * config/rs6000/rs6000-protos.h (rs6000_dbx_register_number): Update.
+       * config/rs6000/rs6000.c (rs6000_dbx_register_number): Add format
+       argument to handle .debug_frame and .eh_frame directly.  Always
+       translate SPE high register numbers.  Add special treatment for CR,
+       but only in .debug_frame.  Respect RS6000_USE_DWARF_NUMBERING.
+
+       * config/rs6000/sysv.h (DBX_REGISTER_NUMBER): Do not undefine.
+       * config/rs6000/freebsd.h (DBX_REGISTER_NUMBER): Remove.
+       (RS6000_USE_DWARF_NUMBERING): Define.
+       * config/rs6000/freebsd64.h (DBX_REGISTER_NUMBER): Remove.
+       (RS6000_USE_DWARF_NUMBERING): Define.
+       * config/rs6000/netbsd.h (DBX_REGISTER_NUMBER): Remove.
+       (RS6000_USE_DWARF_NUMBERING): Define.
+       * config/rs6000/lynx.h (DBX_REGISTER_NUMBER): Remove.
+       (RS6000_USE_DWARF_NUMBERING): Define.
+       * config/rs6000/aix.h (RS6000_USE_DWARF_NUMBERING): Define.
+       * config/rs6000/darwin.h (RS6000_USE_DWARF_NUMBERING): Define.
+
 2014-10-13  Evgeny Stupachenko  <evstupac@gmail.com>
 
        * config/i386/i386.c (ix86_address_cost): Lower cost for
index 5ab01848643eb40ef14335e484cbac39f3eead11..037ef577a333ce16795e0134e7f4f47e13ca6847 100644 (file)
 
 /* Static stack checking is supported by means of probes.  */
 #define STACK_CHECK_STATIC_BUILTIN 1
+
+/* Use standard DWARF numbering for DWARF debugging information.  */
+#define RS6000_USE_DWARF_NUMBERING
+
index 0329f3f621b40d021d39d80a45032eb8c93f6f3b..06bd853c4c669af58389bc8a2b0803c0bcc080ac 100644 (file)
@@ -424,3 +424,7 @@ do {                                                                        \
 /* So far, there is no rs6000_fold_builtin, if one is introduced, then
    this will need to be modified similar to the x86 case.  */
 #define TARGET_FOLD_BUILTIN SUBTARGET_FOLD_BUILTIN
+
+/* Use standard DWARF numbering for DWARF debugging information.  */
+#define RS6000_USE_DWARF_NUMBERING
+
index 9293dcabbe77f8127f1c1cddb835c0de8c893057..131b122846bb12785b41b7d1fd089b3e0e5773e5 100644 (file)
@@ -73,6 +73,7 @@
 #define RELOCATABLE_NEEDS_FIXUP \
   (rs6000_isa_flags & rs6000_isa_flags_explicit & OPTION_MASK_RELOCATABLE)
 
-#define DBX_REGISTER_NUMBER(REGNO) rs6000_dbx_register_number (REGNO)
+/* Use standard DWARF numbering for DWARF debugging information.  */
+#define RS6000_USE_DWARF_NUMBERING
 
 #define POWERPC_FREEBSD
index 1f3ef199e867d03466d93d92bd13616f7ff371c8..1a69aea9f86df72a8f30adba3e9c3638a37b7ebf 100644 (file)
@@ -362,7 +362,8 @@ extern int dot_symbols;
 /* The default value isn't sufficient in 64-bit mode.  */
 #define STACK_CHECK_PROTECT (TARGET_64BIT ? 16 * 1024 : 12 * 1024)
 
-#define DBX_REGISTER_NUMBER(REGNO) rs6000_dbx_register_number (REGNO)
+/* Use standard DWARF numbering for DWARF debugging information.  */
+#define RS6000_USE_DWARF_NUMBERING
 
 /* PowerPC64 Linux word-aligns FP doubles when -malign-power is given.  */
 #undef  ADJUST_FIELD_ALIGN
index 6377846cf88f1920f00521ba9d23951129c4f30f..f6652003dbb320ac74f6b7f1cb529fc6dd9a2e2e 100644 (file)
@@ -99,7 +99,8 @@
 #undef HAVE_AS_TLS
 #define HAVE_AS_TLS 0
 
-#define DBX_REGISTER_NUMBER(REGNO) rs6000_dbx_register_number (REGNO)
+/* Use standard DWARF numbering for DWARF debugging information.  */
+#define RS6000_USE_DWARF_NUMBERING
 
 #ifdef CRT_BEGIN
 /* This function is part of crtbegin*.o which is at the beginning of
index a2be6df105d84ec5dbc9ffa44729a81a7586227a..7290375fe83bb62c454594b1b49b1439f8b52740 100644 (file)
@@ -87,4 +87,6 @@
   { "netbsd_endfile_spec",     NETBSD_ENDFILE_SPEC },
 
 
-#define DBX_REGISTER_NUMBER(REGNO) rs6000_dbx_register_number (REGNO)
+/* Use standard DWARF numbering for DWARF debugging information.  */
+#define RS6000_USE_DWARF_NUMBERING
+
index 27f694b4abb484ed07b7747450d2af8298a73f0b..04ddfa9fd93783dd6718c8af31dbe00c016fb439 100644 (file)
@@ -188,7 +188,7 @@ extern int rs6000_trampoline_size (void);
 extern alias_set_type get_TOC_alias_set (void);
 extern void rs6000_emit_prologue (void);
 extern void rs6000_emit_load_toc_table (int);
-extern unsigned int rs6000_dbx_register_number (unsigned int);
+extern unsigned int rs6000_dbx_register_number (unsigned int, unsigned int);
 extern void rs6000_emit_epilogue (int);
 extern void rs6000_emit_eh_reg_restore (rtx, rtx);
 extern const char * output_isel (rtx *);
index eb9f0c36d95c2299f2cbac893b571c14e9639c9d..912fe3d5c874e93206c5dbe05c1e851924c1a7c1 100644 (file)
@@ -31579,17 +31579,40 @@ rs6000_init_dwarf_reg_sizes_extra (tree address)
     }
 }
 
-/* Map internal gcc register numbers to DWARF2 register numbers.  */
+/* Map internal gcc register numbers to debug format register numbers.
+   FORMAT specifies the type of debug register number to use:
+     0 -- debug information, except for frame-related sections
+     1 -- DWARF .debug_frame section
+     2 -- DWARF .eh_frame section  */
 
 unsigned int
-rs6000_dbx_register_number (unsigned int regno)
+rs6000_dbx_register_number (unsigned int regno, unsigned int format)
 {
-  if (regno <= 63 || write_symbols != DWARF2_DEBUG)
+  /* We never use the GCC internal number for SPE high registers.
+     Those are mapped to the 1200..1231 range for all debug formats.  */
+  if (SPE_HIGH_REGNO_P (regno))
+    return regno - FIRST_SPE_HIGH_REGNO + 1200;
+
+  /* Except for the above, we use the internal number for non-DWARF
+     debug information, and also for .eh_frame.  */
+  if ((format == 0 && write_symbols != DWARF2_DEBUG) || format == 2)
+    return regno;
+
+  /* On some platforms, we use the standard DWARF register
+     numbering for .debug_info and .debug_frame.  */
+#ifdef RS6000_USE_DWARF_NUMBERING
+  if (regno <= 63)
     return regno;
   if (regno == LR_REGNO)
     return 108;
   if (regno == CTR_REGNO)
     return 109;
+  /* Special handling for CR for .debug_frame: rs6000_emit_prologue has
+     translated any combination of CR2, CR3, CR4 saves to a save of CR2.
+     The actual code emitted saves the whole of CR, so we map CR2_REGNO
+     to the DWARF reg for CR.  */
+  if (format == 1 && regno == CR2_REGNO)
+    return 64;
   if (CR_REGNO_P (regno))
     return regno - CR0_REGNO + 86;
   if (regno == CA_REGNO)
@@ -31604,8 +31627,7 @@ rs6000_dbx_register_number (unsigned int regno)
     return 99;
   if (regno == SPEFSCR_REGNO)
     return 612;
-  if (SPE_HIGH_REGNO_P (regno))
-    return regno - FIRST_SPE_HIGH_REGNO + 1200;
+#endif
   return regno;
 }
 
index 01699f73ae54f56cec2f64e5b4b6d82f53391ec0..f343d7a4b4a6e1e42de0434b35e7f10e88aff6fe 100644 (file)
@@ -947,23 +947,16 @@ enum data_align { align_abi, align_opt, align_both };
   ((r) >= 1200 ? ((r) - 1200 + (DWARF_FRAME_REGISTERS - 32)) : (r))
 
 /* Use standard DWARF numbering for DWARF debugging information.  */
-#define DBX_REGISTER_NUMBER(REGNO) rs6000_dbx_register_number (REGNO)
+#define DBX_REGISTER_NUMBER(REGNO) rs6000_dbx_register_number ((REGNO), 0)
 
 /* Use gcc hard register numbering for eh_frame.  */
-#define DWARF_FRAME_REGNUM(REGNO) \
-  (SPE_HIGH_REGNO_P (REGNO) ? ((REGNO) - FIRST_SPE_HIGH_REGNO + 1200) : (REGNO))
+#define DWARF_FRAME_REGNUM(REGNO) (REGNO)
 
 /* Map register numbers held in the call frame info that gcc has
    collected using DWARF_FRAME_REGNUM to those that should be output in
-   .debug_frame and .eh_frame.  We continue to use gcc hard reg numbers
-   for .eh_frame, but use the numbers mandated by the various ABIs for
-   .debug_frame.  rs6000_emit_prologue has translated any combination of
-   CR2, CR3, CR4 saves to a save of CR2.  The actual code emitted saves
-   the whole of CR, so we map CR2_REGNO to the DWARF reg for CR.  */
-#define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH)    \
-  ((FOR_EH) ? (REGNO)                          \
-   : (REGNO) == CR2_REGNO ? 64                 \
-   : DBX_REGISTER_NUMBER (REGNO))
+   .debug_frame and .eh_frame.  */
+#define DWARF2_FRAME_REG_OUT(REGNO, FOR_EH) \
+  rs6000_dbx_register_number ((REGNO), (FOR_EH)? 2 : 1)
 
 /* 1 for registers that have pervasive standard uses
    and are not available for the register allocator.
index 4344dcd8f18df9b4fb38c3f89132c893ab67fb5e..64c5516e67728a68e3725b52c629adfaf14e7680 100644 (file)
@@ -949,4 +949,3 @@ ncrtn.o%s"
 /* This target uses the sysv4.opt file.  */
 #define TARGET_USES_SYSV4_OPT 1
 
-#undef DBX_REGISTER_NUMBER