SCORE: Replace regset_alloc() invocation by a static regset structure.
[deliverable/binutils-gdb.git] / gdb / m68kbsd-tdep.c
index eb5dfe003497b10957769be88595f2aec47da5d1..d27beb8828ca65fd4688bd6cbca306da52ff3c76 100644 (file)
@@ -1,12 +1,12 @@
 /* Target-dependent code for Motorola 68000 BSD's.
 
 /* Target-dependent code for Motorola 68000 BSD's.
 
-   Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2004-2014 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
    This file is part of GDB.
 
    This program 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 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,9 +15,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
 #include "arch-utils.h"
 
 #include "defs.h"
 #include "arch-utils.h"
 #include "regset.h"
 #include "trad-frame.h"
 #include "tramp-frame.h"
 #include "regset.h"
 #include "trad-frame.h"
 #include "tramp-frame.h"
+#include "gdbtypes.h"
 
 #include "gdb_assert.h"
 
 #include "gdb_assert.h"
-#include "gdb_string.h"
+#include <string.h>
 
 #include "m68k-tdep.h"
 #include "solib-svr4.h"
 
 #include "m68k-tdep.h"
 #include "solib-svr4.h"
 #define M68KBSD_SIZEOF_FPREGS  (((8 * 3) + 3) * 4)
 
 int
 #define M68KBSD_SIZEOF_FPREGS  (((8 * 3) + 3) * 4)
 
 int
-m68kbsd_fpreg_offset (int regnum)
+m68kbsd_fpreg_offset (struct gdbarch *gdbarch, int regnum)
 {
 {
+  int fp_len = TYPE_LENGTH (gdbarch_register_type (gdbarch, regnum));
+  
   if (regnum >= M68K_FPC_REGNUM)
   if (regnum >= M68K_FPC_REGNUM)
-    return 8 * 12 + (regnum - M68K_FPC_REGNUM) * 4;
+    return 8 * fp_len + (regnum - M68K_FPC_REGNUM) * 4;
 
 
-  return (regnum - M68K_FP0_REGNUM) * 12;
+  return (regnum - M68K_FP0_REGNUM) * fp_len;
 }
 
 /* Supply register REGNUM from the buffer specified by FPREGS and LEN
 }
 
 /* Supply register REGNUM from the buffer specified by FPREGS and LEN
@@ -60,6 +61,7 @@ m68kbsd_supply_fpregset (const struct regset *regset,
                         struct regcache *regcache,
                         int regnum, const void *fpregs, size_t len)
 {
                         struct regcache *regcache,
                         int regnum, const void *fpregs, size_t len)
 {
+  struct gdbarch *gdbarch = get_regcache_arch (regcache);
   const gdb_byte *regs = fpregs;
   int i;
 
   const gdb_byte *regs = fpregs;
   int i;
 
@@ -68,7 +70,8 @@ m68kbsd_supply_fpregset (const struct regset *regset,
   for (i = M68K_FP0_REGNUM; i <= M68K_PC_REGNUM; i++)
     {
       if (regnum == i || regnum == -1)
   for (i = M68K_FP0_REGNUM; i <= M68K_PC_REGNUM; i++)
     {
       if (regnum == i || regnum == -1)
-       regcache_raw_supply (regcache, i, regs + m68kbsd_fpreg_offset (i));
+       regcache_raw_supply (regcache, i,
+                            regs + m68kbsd_fpreg_offset (gdbarch, i));
     }
 }
 
     }
 }
 
@@ -102,13 +105,13 @@ m68kbsd_supply_gregset (const struct regset *regset,
 
 /* Motorola 68000 register sets.  */
 
 
 /* Motorola 68000 register sets.  */
 
-static struct regset m68kbsd_gregset =
+static const struct regset m68kbsd_gregset =
 {
   NULL,
   m68kbsd_supply_gregset
 };
 
 {
   NULL,
   m68kbsd_supply_gregset
 };
 
-static struct regset m68kbsd_fpregset =
+static const struct regset m68kbsd_fpregset =
 {
   NULL,
   m68kbsd_supply_fpregset
 {
   NULL,
   m68kbsd_supply_fpregset
@@ -135,24 +138,24 @@ m68kbsd_regset_from_core_section (struct gdbarch *gdbarch,
 
 static void
 m68kobsd_sigtramp_cache_init (const struct tramp_frame *self,
 
 static void
 m68kobsd_sigtramp_cache_init (const struct tramp_frame *self,
-                             struct frame_info *next_frame,
+                             struct frame_info *this_frame,
                              struct trad_frame_cache *this_cache,
                              CORE_ADDR func)
 {
   CORE_ADDR addr, base, pc;
   int regnum;
 
                              struct trad_frame_cache *this_cache,
                              CORE_ADDR func)
 {
   CORE_ADDR addr, base, pc;
   int regnum;
 
-  base = frame_unwind_register_unsigned (next_frame, M68K_SP_REGNUM);
+  base = get_frame_register_unsigned (this_frame, M68K_SP_REGNUM);
 
   /* The 'addql #4,%sp' instruction at offset 8 adjusts the stack
      pointer.  Adjust the frame base accordingly.  */
 
   /* The 'addql #4,%sp' instruction at offset 8 adjusts the stack
      pointer.  Adjust the frame base accordingly.  */
-  pc = frame_unwind_register_unsigned (next_frame, M68K_PC_REGNUM);
+  pc = get_frame_register_unsigned (this_frame, M68K_PC_REGNUM);
   if ((pc - func) > 8)
     base -= 4;
 
   /* Get frame pointer, stack pointer, program counter and processor
      state from `struct sigcontext'.  */
   if ((pc - func) > 8)
     base -= 4;
 
   /* Get frame pointer, stack pointer, program counter and processor
      state from `struct sigcontext'.  */
-  addr = get_frame_memory_unsigned (next_frame, base + 8, 4);
+  addr = get_frame_memory_unsigned (this_frame, base + 8, 4);
   trad_frame_set_reg_addr (this_cache, M68K_FP_REGNUM, addr + 8);
   trad_frame_set_reg_addr (this_cache, M68K_SP_REGNUM, addr + 12);
   trad_frame_set_reg_addr (this_cache, M68K_PC_REGNUM, addr + 20);
   trad_frame_set_reg_addr (this_cache, M68K_FP_REGNUM, addr + 8);
   trad_frame_set_reg_addr (this_cache, M68K_SP_REGNUM, addr + 12);
   trad_frame_set_reg_addr (this_cache, M68K_PC_REGNUM, addr + 20);
@@ -160,7 +163,7 @@ m68kobsd_sigtramp_cache_init (const struct tramp_frame *self,
 
   /* The sc_ap member of `struct sigcontext' points to additional
      hardware state.  Here we find the missing registers.  */
 
   /* The sc_ap member of `struct sigcontext' points to additional
      hardware state.  Here we find the missing registers.  */
-  addr = get_frame_memory_unsigned (next_frame, addr + 16, 4) + 4;
+  addr = get_frame_memory_unsigned (this_frame, addr + 16, 4) + 4;
   for (regnum = M68K_D0_REGNUM; regnum < M68K_FP_REGNUM; regnum++, addr += 4)
     trad_frame_set_reg_addr (this_cache, regnum, addr);
 
   for (regnum = M68K_D0_REGNUM; regnum < M68K_FP_REGNUM; regnum++, addr += 4)
     trad_frame_set_reg_addr (this_cache, regnum, addr);
 
@@ -193,6 +196,8 @@ m68kbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   tdep->jb_pc = 5;
   tdep->jb_elt_size = 4;
 
   tdep->jb_pc = 5;
   tdep->jb_elt_size = 4;
 
+  set_gdbarch_decr_pc_after_break (gdbarch, 2);
+
   set_gdbarch_regset_from_core_section
     (gdbarch, m68kbsd_regset_from_core_section);
 }
   set_gdbarch_regset_from_core_section
     (gdbarch, m68kbsd_regset_from_core_section);
 }
This page took 0.025363 seconds and 4 git commands to generate.