This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH][CRISv32] Extract Linux-specific portions from cris-tdep.c



This patch attempts to follow up on the previous discussion regarding breaking out Linux-specific parts from cris-tdep.c into a new cris-linux-tdep.c . A new cris-tdep.h was created in order to share common definitions between the two files. I'm sure this could be done to a certain degree with the *sigtramp* functions too, but looking at other archs it's not clear to me exactly where these functions really belong, so I've left them where they are. The most importand thing with the patch is really to introduce a cris-linux-tdep.c file clearly showing that there is Linux support for CRIS in GDB.

The patch doesn't really introduce any new functionality except for the call to linux_init_abi in cris-linux-tdep.c . This brings in support for a couple of things missing from this arch before, such as the ability to do 'info proc'.

Tested by running against gdbserver on a CRISv32 target system, debugging a minimal threaded application, and verifying that threaded debugging works (access to __thread variables works), as well as some of the functionality brought in by linux_init_abi, such as a meaningful response to the 'info proc' command.

Patch supplied inline for review and as attachment. Note that it actually applies on top of the other CRISv32 patches I sent, so I guess it should really have been part three of that patch set; I didn't think I'd be able to get around to doing this as soon as I was.

/Ricard


Signed-off-by: Ricard Wanderlof <ricardw@axis.com>


2013-09-04  Ricard Wanderlof  <ricardw@axis.com>

	* Makefile.in (ALL_TARGET_OBS): Add cris-linux-tdep.o.
	* configure.tgt: Add cris-linux-tdep.o and cris-tdep.o to
	gdb_target_obs for cris target.
	* cris-tdep.c (struct gdbarch_tdep): Move to cris-tdep.h.
	(cris_gdbarch_init): Move calls to
	set_gdbarch_fetch_tls_load_module_address and
	set_solib_svr4_fetch_link_map_offsets to cris-linux-tdep.c.
	Add call to gdbarch_init_osabi.
	* cris-linux-tdep.c: New file.
	* cris-tdep.h: New file.


diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index c75ec38..93a3d6a 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -550,7 +550,7 @@ ALL_TARGET_OBS = \
 	arm-tdep.o arm-wince-tdep.o \
 	avr-tdep.o \
 	bfin-linux-tdep.o bfin-tdep.o \
-	cris-tdep.o \
+	cris-linux-tdep.o cris-tdep.o \
 	dicos-tdep.o \
 	frv-linux-tdep.o frv-tdep.o \
 	h8300-tdep.o \
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 0ac4e33..95c7217 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -131,7 +131,7 @@ bfin-*-*)

 cris*)
 	# Target: CRIS
-	gdb_target_obs="cris-tdep.o solib-svr4.o"
+	gdb_target_obs="cris-tdep.o cris-linux-tdep.o linux-tdep.o solib-svr4.o"
 	;;

 frv-*-*)
diff --git a/gdb/cris-linux-tdep.c b/gdb/cris-linux-tdep.c
new file mode 100644
index 0000000..173020c
--- /dev/null
+++ b/gdb/cris-linux-tdep.c
@@ -0,0 +1,57 @@
+/* Target-dependent code for GNU/Linux on CRIS processors, for GDB.
+
+   Copyright (C) 2001-2013 Free Software Foundation, Inc.
+
+   Contributed by Axis Communications AB.
+   Written by Hendrik Ruijter, Stefan Andersson, Orjan Friberg,
+   Edgar Iglesias and Ricard Wanderlof.
+
+   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 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "osabi.h"
+#include "linux-tdep.h"
+#include "solib-svr4.h"
+#include "symtab.h"
+
+#include "cris-tdep.h"
+
+static void
+cris_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+  linux_init_abi (info, gdbarch);
+
+  if (tdep->cris_version == 32)
+    /* Threaded debugging is only supported on CRISv32 for now.  */
+    set_gdbarch_fetch_tls_load_module_address (gdbarch,
+                                               svr4_fetch_objfile_link_map);
+
+  set_solib_svr4_fetch_link_map_offsets (gdbarch,
+					 svr4_ilp32_fetch_link_map_offsets);
+
+}
+
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_cris_linux_tdep;
+
+void
+_initialize_cris_linux_tdep (void)
+{
+  gdbarch_register_osabi (bfd_arch_cris, 0, GDB_OSABI_LINUX,
+			  cris_linux_init_abi);
+}
diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c
index ef2746d..8ba1677 100644
--- a/gdb/cris-tdep.c
+++ b/gdb/cris-tdep.c
@@ -34,6 +34,7 @@
 #include "target.h"
 #include "value.h"
 #include "opcode/cris.h"
+#include "osabi.h"
 #include "arch-utils.h"
 #include "regcache.h"
 #include "gdb_assert.h"
@@ -45,6 +46,8 @@
 #include "gdb_string.h"
 #include "dis-asm.h"

+#include "cris-tdep.h"
+
 enum cris_num_regs
 {
   /* There are no floating point registers.  Used in gdbserver low-linux.c.  */
@@ -164,14 +167,6 @@ static const char *usr_cmd_cris_mode = cris_mode_normal;
 /* Whether to make use of Dwarf-2 CFI (default on).  */
 static int usr_cmd_cris_dwarf2_cfi = 1;

-/* CRIS architecture specific information.  */
-struct gdbarch_tdep
-{
-  unsigned int cris_version;
-  const char *cris_mode;
-  int cris_dwarf2_cfi;
-};
-
 /* Sigtramp identification code copied from i386-linux-tdep.c.  */

 #define SIGTRAMP_INSN0    0x9c5f  /* movu.w 0xXX, $r9 */
@@ -4137,11 +4132,6 @@ cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
       set_gdbarch_single_step_through_delay
 	(gdbarch, crisv32_single_step_through_delay);

-      /* FIXME: Ricard W/2013-09-03: Linux-specific stuff like this
-         should really go in (a new) cris-linux-tdep.c. */
-      set_gdbarch_fetch_tls_load_module_address (gdbarch,
-                                                 svr4_fetch_objfile_link_map);
-
       break;

     default:
@@ -4181,9 +4171,9 @@ cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   frame_unwind_append_unwinder (gdbarch, &cris_frame_unwind);
   frame_base_set_default (gdbarch, &cris_frame_base);

-  set_solib_svr4_fetch_link_map_offsets
-    (gdbarch, svr4_ilp32_fetch_link_map_offsets);
- + /* Hook in ABI-specific overrides, if they have been registered. */
+  gdbarch_init_osabi (info, gdbarch);
+
   /* FIXME: cagney/2003-08-27: It should be possible to select a CRIS
      disassembler, even when there is no BFD.  Does something like
      "gdb; target remote; disassmeble *0x123" work?  */
diff --git a/gdb/cris-tdep.h b/gdb/cris-tdep.h
new file mode 100644
index 0000000..247f91f
--- /dev/null
+++ b/gdb/cris-tdep.h
@@ -0,0 +1,34 @@
+/* Target dependent code for CRIS, for GDB, the GNU debugger.
+
+   Copyright (C) 2001-2013 Free Software Foundation, Inc.
+
+   Contributed by Axis Communications AB.
+   Written by Hendrik Ruijter, Stefan Andersson, and Orjan Friberg.
+
+   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 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef CRIS_TDEP_H
+#define CRIS_TDEP_H
+
+/* CRIS architecture specific information.  */
+struct gdbarch_tdep
+{
+  unsigned int cris_version;
+  const char *cris_mode;
+  int cris_dwarf2_cfi;
+};
+
+#endif /* CRIS_TDEP_H */

--
Ricard Wolf Wanderlöf                           ricardw(at)axis.com
Axis Communications AB, Lund, Sweden            www.axis.com
Phone +46 46 272 2016                           Fax +46 46 13 61 30
2013-09-04  Ricard Wanderlof  <ricardw@axis.com>

	* Makefile.in (ALL_TARGET_OBS): Add cris-linux-tdep.o.
	* configure.tgt: Add cris-linux-tdep.o and cris-tdep.o to
	gdb_target_obs for cris target.
	* cris-tdep.c (struct gdbarch_tdep): Move to cris-tdep.h.
	(cris_gdbarch_init): Move calls to
	set_gdbarch_fetch_tls_load_module_address and
	set_solib_svr4_fetch_link_map_offsets to cris-linux-tdep.c.
	Add call to gdbarch_init_osabi.
	* cris-linux-tdep.c: New file.
	* cris-tdep.h: New file.

diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index c75ec38..93a3d6a 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -550,7 +550,7 @@ ALL_TARGET_OBS = \
 	arm-tdep.o arm-wince-tdep.o \
 	avr-tdep.o \
 	bfin-linux-tdep.o bfin-tdep.o \
-	cris-tdep.o \
+	cris-linux-tdep.o cris-tdep.o \
 	dicos-tdep.o \
 	frv-linux-tdep.o frv-tdep.o \
 	h8300-tdep.o \
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 0ac4e33..95c7217 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -131,7 +131,7 @@ bfin-*-*)
 
 cris*)
 	# Target: CRIS
-	gdb_target_obs="cris-tdep.o solib-svr4.o"
+	gdb_target_obs="cris-tdep.o cris-linux-tdep.o linux-tdep.o solib-svr4.o"
 	;;
 
 frv-*-*)
diff --git a/gdb/cris-linux-tdep.c b/gdb/cris-linux-tdep.c
new file mode 100644
index 0000000..173020c
--- /dev/null
+++ b/gdb/cris-linux-tdep.c
@@ -0,0 +1,57 @@
+/* Target-dependent code for GNU/Linux on CRIS processors, for GDB.
+
+   Copyright (C) 2001-2013 Free Software Foundation, Inc.
+
+   Contributed by Axis Communications AB.
+   Written by Hendrik Ruijter, Stefan Andersson, Orjan Friberg,
+   Edgar Iglesias and Ricard Wanderlof.
+
+   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 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   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, see <http://www.gnu.org/licenses/>.  */
+
+#include "defs.h"
+#include "osabi.h"
+#include "linux-tdep.h"
+#include "solib-svr4.h"
+#include "symtab.h"
+
+#include "cris-tdep.h"
+
+static void
+cris_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+  linux_init_abi (info, gdbarch);
+
+  if (tdep->cris_version == 32)
+    /* Threaded debugging is only supported on CRISv32 for now.  */
+    set_gdbarch_fetch_tls_load_module_address (gdbarch,
+                                               svr4_fetch_objfile_link_map);
+
+  set_solib_svr4_fetch_link_map_offsets (gdbarch,
+					 svr4_ilp32_fetch_link_map_offsets);
+
+}
+
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_cris_linux_tdep;
+
+void
+_initialize_cris_linux_tdep (void)
+{
+  gdbarch_register_osabi (bfd_arch_cris, 0, GDB_OSABI_LINUX,
+			  cris_linux_init_abi);
+}
diff --git a/gdb/cris-tdep.c b/gdb/cris-tdep.c
index ef2746d..8ba1677 100644
--- a/gdb/cris-tdep.c
+++ b/gdb/cris-tdep.c
@@ -34,6 +34,7 @@
 #include "target.h"
 #include "value.h"
 #include "opcode/cris.h"
+#include "osabi.h"
 #include "arch-utils.h"
 #include "regcache.h"
 #include "gdb_assert.h"
@@ -45,6 +46,8 @@
 #include "gdb_string.h"
 #include "dis-asm.h"
 
+#include "cris-tdep.h"
+
 enum cris_num_regs
 {
   /* There are no floating point registers.  Used in gdbserver low-linux.c.  */
@@ -164,14 +167,6 @@ static const char *usr_cmd_cris_mode = cris_mode_normal;
 /* Whether to make use of Dwarf-2 CFI (default on).  */
 static int usr_cmd_cris_dwarf2_cfi = 1;
 
-/* CRIS architecture specific information.  */
-struct gdbarch_tdep
-{
-  unsigned int cris_version;
-  const char *cris_mode;
-  int cris_dwarf2_cfi;
-};
-
 /* Sigtramp identification code copied from i386-linux-tdep.c.  */
 
 #define SIGTRAMP_INSN0    0x9c5f  /* movu.w 0xXX, $r9 */
@@ -4137,11 +4132,6 @@ cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
       set_gdbarch_single_step_through_delay 
 	(gdbarch, crisv32_single_step_through_delay);
 
-      /* FIXME: Ricard W/2013-09-03: Linux-specific stuff like this
-         should really go in (a new) cris-linux-tdep.c. */
-      set_gdbarch_fetch_tls_load_module_address (gdbarch,
-                                                 svr4_fetch_objfile_link_map);
-
       break;
 
     default:
@@ -4181,9 +4171,9 @@ cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   frame_unwind_append_unwinder (gdbarch, &cris_frame_unwind);
   frame_base_set_default (gdbarch, &cris_frame_base);
 
-  set_solib_svr4_fetch_link_map_offsets
-    (gdbarch, svr4_ilp32_fetch_link_map_offsets);
-  
+  /* Hook in ABI-specific overrides, if they have been registered.  */
+  gdbarch_init_osabi (info, gdbarch);
+
   /* FIXME: cagney/2003-08-27: It should be possible to select a CRIS
      disassembler, even when there is no BFD.  Does something like
      "gdb; target remote; disassmeble *0x123" work?  */
diff --git a/gdb/cris-tdep.h b/gdb/cris-tdep.h
new file mode 100644
index 0000000..247f91f
--- /dev/null
+++ b/gdb/cris-tdep.h
@@ -0,0 +1,34 @@
+/* Target dependent code for CRIS, for GDB, the GNU debugger.
+
+   Copyright (C) 2001-2013 Free Software Foundation, Inc.
+
+   Contributed by Axis Communications AB.
+   Written by Hendrik Ruijter, Stefan Andersson, and Orjan Friberg.
+
+   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 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   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, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef CRIS_TDEP_H
+#define CRIS_TDEP_H
+
+/* CRIS architecture specific information.  */
+struct gdbarch_tdep
+{
+  unsigned int cris_version;
+  const char *cris_mode;
+  int cris_dwarf2_cfi;
+};
+
+#endif /* CRIS_TDEP_H */

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]