Imported Upstream version 7.9
[platform/upstream/gdb.git] / gdb / mn10300-linux-tdep.c
index 4377463..9ac6c15 100644 (file)
@@ -1,6 +1,6 @@
 /* Target-dependent code for the Matsushita MN10300 for GDB, the GNU debugger.
 
-   Copyright (C) 2003-2014 Free Software Foundation, Inc.
+   Copyright (C) 2003-2015 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
 
 #include "defs.h"
 #include "gdbcore.h"
-#include <string.h>
 #include "regcache.h"
 #include "mn10300-tdep.h"
-#include "gdb_assert.h"
 #include "bfd.h"
 #include "elf-bfd.h"
 #include "osabi.h"
@@ -33,8 +31,6 @@
 #include "tramp-frame.h"
 #include "linux-tdep.h"
 
-#include <stdlib.h>
-
 /* Transliterated from <asm-mn10300/elf.h>...  */
 #define MN10300_ELF_NGREG 28
 #define MN10300_ELF_NFPREG 32
@@ -94,7 +90,7 @@ am33_supply_gregset_method (const struct regset *regset,
   const mn10300_elf_greg_t *regp = (const mn10300_elf_greg_t *) gregs;
   int i;
 
-  gdb_assert (len == sizeof (mn10300_elf_gregset_t));
+  gdb_assert (len >= sizeof (mn10300_elf_gregset_t));
 
   switch (regnum) {
   case E_D0_REGNUM:
@@ -249,7 +245,7 @@ am33_supply_fpregset_method (const struct regset *regset,
 {
   const mn10300_elf_fpregset_t *fpregset = fpregs;
 
-  gdb_assert (len == sizeof (mn10300_elf_fpregset_t));
+  gdb_assert (len >= sizeof (mn10300_elf_fpregset_t));
 
   if (regnum == -1)
     {
@@ -282,7 +278,7 @@ am33_collect_gregset_method (const struct regset *regset,
   mn10300_elf_gregset_t *regp = gregs;
   int i;
 
-  gdb_assert (len == sizeof (mn10300_elf_gregset_t));
+  gdb_assert (len >= sizeof (mn10300_elf_gregset_t));
 
   switch (regnum) {
   case E_D0_REGNUM:
@@ -429,7 +425,7 @@ am33_collect_fpregset_method (const struct regset *regset,
 {
   mn10300_elf_fpregset_t *fpregset = fpregs;
 
-  gdb_assert (len == sizeof (mn10300_elf_fpregset_t));
+  gdb_assert (len >= sizeof (mn10300_elf_fpregset_t));
 
   if (regnum == -1)
     {
@@ -461,17 +457,18 @@ static const struct regset am33_fpregset =
     NULL, am33_supply_fpregset_method, am33_collect_fpregset_method
   };
 
-/* Create a struct regset from a corefile register section.  */
+/* Iterate over core file register note sections.  */
 
-static const struct regset *
-am33_regset_from_core_section (struct gdbarch *gdbarch, 
-                              const char *sect_name, 
-                              size_t sect_size)
+static void
+am33_iterate_over_regset_sections (struct gdbarch *gdbarch,
+                                  iterate_over_regset_sections_cb *cb,
+                                  void *cb_data,
+                                  const struct regcache *regcache)
 {
-  if (sect_size == sizeof (mn10300_elf_fpregset_t))
-    return &am33_fpregset;
-  else
-    return &am33_gregset;
+  cb (".reg", sizeof (mn10300_elf_gregset_t), &am33_gregset,
+      NULL, cb_data);
+  cb (".reg2", sizeof(mn10300_elf_fpregset_t), &am33_fpregset,
+      NULL, cb_data);
 }
 \f
 static void
@@ -718,8 +715,8 @@ am33_linux_init_osabi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
   linux_init_abi (info, gdbarch);
 
-  set_gdbarch_regset_from_core_section (gdbarch, 
-                                       am33_regset_from_core_section);
+  set_gdbarch_iterate_over_regset_sections
+    (gdbarch, am33_iterate_over_regset_sections);
   set_solib_svr4_fetch_link_map_offsets
     (gdbarch, svr4_ilp32_fetch_link_map_offsets);