From: Alan Modra Date: Fri, 12 Dec 2014 05:32:34 +0000 (+1030) Subject: PowerPC register numbers in DWARF X-Git-Tag: binutils-2_25_1~244 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ca78c40e846a5be76c76482569ebf09459faafe1;p=thirdparty%2Fbinutils-gdb.git PowerPC register numbers in DWARF This makes gas .cfi output to .debug_frame match register numbering emitted by gcc. md_reg_eh_frame_to_debug_frame follows the ABI, targets not using it, notably Linux, don't. * config/tc-ppc.h (md_reg_eh_frame_to_debug_frame): Match current gcc behaviour. * config/te-aix.h: New file. * configure.tgt: Use em=aix for powerpc-aix. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index b4f0eea4c0f..f7945e65824 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,12 @@ +2015-02-11 Alan Modra + + Apply from master. + 2014-12-12 Alan Modra + * config/tc-ppc.h (md_reg_eh_frame_to_debug_frame): Match current + gcc behaviour. + * config/te-aix.h: New file. + * configure.tgt: Use em=aix for powerpc-aix. + 2015-01-28 Matthew Wahab * config/tc-arm.c (parse_ifimm_zero): Accept #0x0 as a synonym for #0, diff --git a/gas/config/tc-ppc.h b/gas/config/tc-ppc.h index 3cd9bf16c78..d9551c19ff4 100644 --- a/gas/config/tc-ppc.h +++ b/gas/config/tc-ppc.h @@ -267,11 +267,24 @@ extern int ppc_parse_name (const char *, struct expressionS *); #define md_cleanup() ppc_cleanup () extern void ppc_cleanup (void); +#if (defined TE_AIX5 || defined TE_AIX \ + || defined TE_FreeBSD || defined TE_NetBSD || defined TE_LYNX) /* ppc uses different register numbers between .eh_frame and .debug_frame. This macro translates the .eh_frame register numbers to .debug_frame register numbers. */ -#define md_reg_eh_frame_to_debug_frame(regno) \ - ((regno) == 70 ? 64 /* cr2 */ : (regno)) +#define md_reg_eh_frame_to_debug_frame(regno) \ + ((regno) == 70 ? 64 /* cr2 */ \ + : (regno) == 65 ? 108 /* lr */ \ + : (regno) == 66 ? 109 /* ctr */ \ + : (regno) >= 68 && (regno) <= 75 ? (regno) + 86 - 68 /* crN */ \ + : (regno) == 76 ? 101 /* xer */ \ + : (regno) >= 77 && (regno) <= 108 ? (regno) + 1124 - 77 /* vrN */ \ + : (regno) == 109 ? 356 /* vrsave */ \ + : (regno) == 110 ? 67 /* vscr */ \ + : (regno) == 111 ? 99 /* spe_acc */ \ + : (regno) == 112 ? 612 /* spefscr */ \ + : (regno)) +#endif #define TARGET_USE_CFIPOP 1 diff --git a/gas/config/te-aix.h b/gas/config/te-aix.h new file mode 100644 index 00000000000..b0da4fb9c7c --- /dev/null +++ b/gas/config/te-aix.h @@ -0,0 +1,22 @@ +/* Copyright (C) 2014 Free Software Foundation, Inc. + + This file is part of GAS, the GNU Assembler. + + GAS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 3, + or (at your option) any later version. + + GAS is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See + the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GAS; see the file COPYING. If not, write to the Free + Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA + 02110-1301, USA. */ + +#define TE_AIX + +#include "obj-format.h" diff --git a/gas/configure.tgt b/gas/configure.tgt index d07d445ab8f..9abc7681bc6 100644 --- a/gas/configure.tgt +++ b/gas/configure.tgt @@ -372,7 +372,7 @@ case ${generic_target} in ppc-*-winnt*) fmt=coff em=pe ;; ppc-*-aix5.[01]) fmt=coff em=aix5 ;; ppc-*-aix[5-9].*) fmt=coff em=aix5 ;; - ppc-*-aix*) fmt=coff ;; + ppc-*-aix*) fmt=coff em=aix ;; ppc-*-beos*) fmt=coff ;; ppc-*-*n*bsd* | ppc-*-elf*) fmt=elf ;; ppc-*-eabi* | ppc-*-sysv4*) fmt=elf ;;