X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fgdbserver%2Flinux-sh-low.c;h=fbd67c657ee2a1413e225df8feaa19fa8d5c87c8;hb=623b6bdf12dec583722ca6615e5ff26581597d6c;hp=7baaf42d67495c23258431b2b4a354fd02e3a6b7;hpb=f450004a28a0ca9548117ae78d5ad554a3e32c69;p=deliverable%2Fbinutils-gdb.git
diff --git a/gdb/gdbserver/linux-sh-low.c b/gdb/gdbserver/linux-sh-low.c
index 7baaf42d67..fbd67c657e 100644
--- a/gdb/gdbserver/linux-sh-low.c
+++ b/gdb/gdbserver/linux-sh-low.c
@@ -1,12 +1,12 @@
/* GNU/Linux/SH specific low level interface, for the remote server for GDB.
- Copyright 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2005
- Free Software Foundation, Inc.
+ Copyright (C) 1995-1996, 1998-2003, 2005, 2007-2012 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
- 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,
@@ -15,13 +15,14 @@
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., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
+ along with this program. If not, see . */
#include "server.h"
#include "linux-low.h"
+/* Defined in auto-generated file reg-sh.c. */
+void init_registers_sh (void);
+
#ifdef HAVE_SYS_REG_H
#include
#endif
@@ -58,18 +59,18 @@ sh_cannot_fetch_register (int regno)
}
static CORE_ADDR
-sh_get_pc ()
+sh_get_pc (struct regcache *regcache)
{
unsigned long pc;
- collect_register_by_name ("pc", &pc);
+ collect_register_by_name (regcache, "pc", &pc);
return pc;
}
static void
-sh_set_pc (CORE_ADDR pc)
+sh_set_pc (struct regcache *regcache, CORE_ADDR pc)
{
unsigned long newpc = pc;
- supply_register_by_name ("pc", &newpc);
+ supply_register_by_name (regcache, "pc", &newpc);
}
/* Correct in either endianness, obviously. */
@@ -90,11 +91,31 @@ sh_breakpoint_at (CORE_ADDR where)
return 0;
}
+/* Provide only a fill function for the general register set. ps_lgetregs
+ will use this for NPTL support. */
+
+static void sh_fill_gregset (struct regcache *regcache, void *buf)
+{
+ int i;
+
+ for (i = 0; i < 23; i++)
+ if (sh_regmap[i] != -1)
+ collect_register (regcache, i, (char *) buf + sh_regmap[i]);
+}
+
+struct regset_info target_regsets[] = {
+ { 0, 0, 0, 0, GENERAL_REGS, sh_fill_gregset, NULL },
+ { 0, 0, 0, -1, -1, NULL, NULL }
+};
+
struct linux_target_ops the_low_target = {
+ init_registers_sh,
sh_num_regs,
sh_regmap,
+ NULL,
sh_cannot_fetch_register,
sh_cannot_store_register,
+ NULL, /* fetch_register */
sh_get_pc,
sh_set_pc,
(const unsigned char *) &sh_breakpoint,