From c0235a33de8c4f78cce35b2a8c2035c83fe1bd14 Mon Sep 17 00:00:00 2001
From: hainque <hainque@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 5 Dec 2014 17:01:42 +0000
Subject: [PATCH] 2014-12-05  Olivier Hainque  <hainque@adacore.com>

        gcc/
        * defaults.h: (DWARF_REG_TO_UNWIND_COLUMN): Define default.
        * dwarf2cfi.c (init_one_dwarf_reg_size): Honor
        DWARF_REG_TO_UNWIND_COLUMN.

        libgcc/
        * unwind-dw2.c (DWARF_REG_TO_UNWIND_COLUMN): Remove default def,
        now provided by defaults.h.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@218429 138bc75d-0d04-0410-961f-82ee72b054a4

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Upstream-Status: Backport [gcc 5.0]

---
 gcc/ChangeLog       | 6 ++++++
 gcc/defaults.h      | 5 +++++
 gcc/dwarf2cfi.c     | 3 ++-
 libgcc/ChangeLog    | 5 +++++
 libgcc/unwind-dw2.c | 4 ----
 5 files changed, 18 insertions(+), 5 deletions(-)

Index: gcc-4.9.2/gcc/defaults.h
===================================================================
--- gcc-4.9.2.orig/gcc/defaults.h
+++ gcc-4.9.2/gcc/defaults.h
@@ -438,6 +438,11 @@ see the files COPYING3 and COPYING.RUNTI
 #define DWARF_FRAME_REGNUM(REG) DBX_REGISTER_NUMBER (REG)
 #endif
 
+/* The mapping from dwarf CFA reg number to internal dwarf reg numbers.  */
+#ifndef DWARF_REG_TO_UNWIND_COLUMN
+#define DWARF_REG_TO_UNWIND_COLUMN(REGNO) (REGNO)
+#endif
+
 /* 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.  */
Index: gcc-4.9.2/gcc/dwarf2cfi.c
===================================================================
--- gcc-4.9.2.orig/gcc/dwarf2cfi.c
+++ gcc-4.9.2/gcc/dwarf2cfi.c
@@ -280,8 +280,9 @@ void init_one_dwarf_reg_size (int regno,
 {
   const unsigned int dnum = DWARF_FRAME_REGNUM (regno);
   const unsigned int rnum = DWARF2_FRAME_REG_OUT (dnum, 1);
+  const unsigned int dcol = DWARF_REG_TO_UNWIND_COLUMN (rnum);
 
-  const HOST_WIDE_INT slotoffset = rnum * GET_MODE_SIZE (slotmode);
+  const HOST_WIDE_INT slotoffset = dcol * GET_MODE_SIZE (slotmode);
   const HOST_WIDE_INT regsize = GET_MODE_SIZE (regmode);
 
   init_state->processed_regno[regno] = true;
Index: gcc-4.9.2/libgcc/unwind-dw2.c
===================================================================
--- gcc-4.9.2.orig/libgcc/unwind-dw2.c
+++ gcc-4.9.2/libgcc/unwind-dw2.c
@@ -55,10 +55,6 @@
 #define PRE_GCC3_DWARF_FRAME_REGISTERS DWARF_FRAME_REGISTERS
 #endif
 
-#ifndef DWARF_REG_TO_UNWIND_COLUMN
-#define DWARF_REG_TO_UNWIND_COLUMN(REGNO) (REGNO)
-#endif
-
 /* ??? For the public function interfaces, we tend to gcc_assert that the
    column numbers are in range.  For the dwarf2 unwind info this does happen,
    although so far in a case that doesn't actually matter.
