From c322dea4027dd82a7727154b3eb33438db2859f7 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 12 Dec 2014 16:02:34 +1030 Subject: [PATCH] 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. --- gas/ChangeLog | 7 +++++++ gas/config/tc-ppc.h | 17 +++++++++++++++-- gas/config/te-aix.h | 22 ++++++++++++++++++++++ gas/configure.tgt | 2 +- 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 gas/config/te-aix.h diff --git a/gas/ChangeLog b/gas/ChangeLog index 4ad61083178..8ab23190c91 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +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. + 2014-12-09 Chen Gang * config/tc-tic4x.c (md_assemble): Ensure insn->name is zero 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 853988a3b17..0e44880874a 100644 --- a/gas/configure.tgt +++ b/gas/configure.tgt @@ -373,7 +373,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 ;; -- 2.30.2