The frame pointer and the argument pointer aren't real registers. MQ was a register on old POWER. All three are still used as arguments to rs6000_dbx_register_number during initialisation. If we handle them explicitly we can do a gcc_unreachable to catch other unexpected registers.
Tested on powerpc64-linux {-m32,-m64} and on powerpc64le-linux; installing on trunk. Segher 2019-05-06 Segher Boessenkool <seg...@kernel.crashing.org> * config/rs6000/rs6000.c (rs6000_dbx_register_number): Handle FRAME_POINTER_REGNUM, ARG_POINTER_REGNUM, and 64 (which was MQ). -- gcc/config/rs6000/rs6000.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index c75fd86..6f46fdd 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -36305,7 +36305,15 @@ rs6000_dbx_register_number (unsigned int regno, unsigned int format) if (regno == TEXASR_REGNO) return 230; - return regno; + /* These do not make much sense. */ + if (regno == FRAME_POINTER_REGNUM) + return 111; + if (regno == ARG_POINTER_REGNUM) + return 67; + if (regno == 64) + return 100; + + gcc_unreachable (); #endif } @@ -36337,7 +36345,14 @@ rs6000_dbx_register_number (unsigned int regno, unsigned int format) if (regno == TEXASR_REGNO) return 116; - return regno; + if (regno == FRAME_POINTER_REGNUM) + return 111; + if (regno == ARG_POINTER_REGNUM) + return 67; + if (regno == 64) + return 64; + + gcc_unreachable (); } /* target hook eh_return_filter_mode */ -- 1.8.3.1