Insert breakpoint even when the raw breakpoint is found
[deliverable/binutils-gdb.git] / gdb / sparc64nbsd-tdep.c
index 5d6c27c17f4c7036ad42b2699642ce62e0309589..1abb721e2e01110bdf507ab3b02e3d8e9738db44 100644 (file)
@@ -1,7 +1,6 @@
 /* Target-dependent code for NetBSD/sparc64.
 
 /* Target-dependent code for NetBSD/sparc64.
 
-   Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-   Free Software Foundation, Inc.
+   Copyright (C) 2002-2016 Free Software Foundation, Inc.
    Based on code contributed by Wasabi Systems, Inc.
 
    This file is part of GDB.
    Based on code contributed by Wasabi Systems, Inc.
 
    This file is part of GDB.
 #include "solib-svr4.h"
 #include "trad-frame.h"
 
 #include "solib-svr4.h"
 #include "trad-frame.h"
 
-#include "gdb_assert.h"
-#include "gdb_string.h"
-
 #include "sparc64-tdep.h"
 #include "nbsd-tdep.h"
 
 /* From <machine/reg.h>.  */
 #include "sparc64-tdep.h"
 #include "nbsd-tdep.h"
 
 /* From <machine/reg.h>.  */
-const struct sparc_gregset sparc64nbsd_gregset =
+const struct sparc_gregmap sparc64nbsd_gregmap =
 {
   0 * 8,                       /* "tstate" */
   1 * 8,                       /* %pc */
 {
   0 * 8,                       /* "tstate" */
   1 * 8,                       /* %pc */
@@ -57,7 +53,7 @@ sparc64nbsd_supply_gregset (const struct regset *regset,
                            struct regcache *regcache,
                            int regnum, const void *gregs, size_t len)
 {
                            struct regcache *regcache,
                            int regnum, const void *gregs, size_t len)
 {
-  sparc64_supply_gregset (&sparc64nbsd_gregset, regcache, regnum, gregs);
+  sparc64_supply_gregset (&sparc64nbsd_gregmap, regcache, regnum, gregs);
 }
 
 static void
 }
 
 static void
@@ -65,7 +61,7 @@ sparc64nbsd_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)
 {
-  sparc64_supply_fpregset (regcache, regnum, fpregs);
+  sparc64_supply_fpregset (&sparc64_bsd_fpregmap, regcache, regnum, fpregs);
 }
 \f
 
 }
 \f
 
@@ -80,7 +76,7 @@ static const CORE_ADDR sparc64nbsd_sigtramp_start = 0xffffffffffffdee4ULL;
 static const CORE_ADDR sparc64nbsd_sigtramp_end = 0xffffffffffffe000ULL;
 
 static int
 static const CORE_ADDR sparc64nbsd_sigtramp_end = 0xffffffffffffe000ULL;
 
 static int
-sparc64nbsd_pc_in_sigtramp (CORE_ADDR pc, char *name)
+sparc64nbsd_pc_in_sigtramp (CORE_ADDR pc, const char *name)
 {
   if (pc >= sparc64nbsd_sigtramp_start && pc < sparc64nbsd_sigtramp_end)
     return 1;
 {
   if (pc >= sparc64nbsd_sigtramp_start && pc < sparc64nbsd_sigtramp_end)
     return 1;
@@ -160,7 +156,7 @@ sparc64nbsd_sigcontext_frame_cache (struct frame_info *this_frame,
   CORE_ADDR addr;
 
   if (*this_cache)
   CORE_ADDR addr;
 
   if (*this_cache)
-    return *this_cache;
+    return (struct sparc_frame_cache *) *this_cache;
 
   cache = sparc_frame_cache (this_frame, this_cache);
   gdb_assert (cache == *this_cache);
 
   cache = sparc_frame_cache (this_frame, this_cache);
   gdb_assert (cache == *this_cache);
@@ -173,7 +169,7 @@ sparc64nbsd_sigcontext_frame_cache (struct frame_info *this_frame,
 
       /* Since we couldn't find the frame's function, the cache was
          initialized under the assumption that we're frameless.  */
 
       /* Since we couldn't find the frame's function, the cache was
          initialized under the assumption that we're frameless.  */
-      cache->frameless_p = 0;
+      sparc_record_save_insn (cache);
       addr = get_frame_register_unsigned (this_frame, SPARC_FP_REGNUM);
       if (addr & 1)
        addr += BIAS;
       addr = get_frame_register_unsigned (this_frame, SPARC_FP_REGNUM);
       if (addr & 1)
        addr += BIAS;
@@ -215,12 +211,12 @@ sparc64nbsd_sigtramp_frame_sniffer (const struct frame_unwind *self,
                                    void **this_cache)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
                                    void **this_cache)
 {
   CORE_ADDR pc = get_frame_pc (this_frame);
-  char *name;
+  const char *name;
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   if (sparc64nbsd_pc_in_sigtramp (pc, name))
     {
 
   find_pc_partial_function (pc, &name, NULL, NULL);
   if (sparc64nbsd_pc_in_sigtramp (pc, name))
     {
-      if (name == NULL || strncmp (name, "__sigtramp_sigcontext", 21))
+      if (name == NULL || !startswith (name, "__sigtramp_sigcontext"))
        return 1;
     }
 
        return 1;
     }
 
@@ -238,15 +234,25 @@ static const struct frame_unwind sparc64nbsd_sigcontext_frame_unwind =
 };
 \f
 
 };
 \f
 
+static const struct regset sparc64nbsd_gregset =
+  {
+    NULL, sparc64nbsd_supply_gregset, NULL
+  };
+
+static const struct regset sparc64nbsd_fpregset =
+  {
+    NULL, sparc64nbsd_supply_fpregset, NULL
+  };
+
 static void
 sparc64nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
 static void
 sparc64nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
-  tdep->gregset = regset_alloc (gdbarch, sparc64nbsd_supply_gregset, NULL);
+  tdep->gregset = &sparc64nbsd_gregset;
   tdep->sizeof_gregset = 160;
 
   tdep->sizeof_gregset = 160;
 
-  tdep->fpregset = regset_alloc (gdbarch, sparc64nbsd_supply_fpregset, NULL);
+  tdep->fpregset =  &sparc64nbsd_fpregset;
   tdep->sizeof_fpregset = 272;
 
   /* Make sure we can single-step "new" syscalls.  */
   tdep->sizeof_fpregset = 272;
 
   /* Make sure we can single-step "new" syscalls.  */
This page took 0.025883 seconds and 4 git commands to generate.