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]

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



On Fri, 6 Sep 2013, Pedro Alves wrote:

On 09/05/2013 08:51 AM, Ricard Wanderlof wrote:

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

s/cris-tdep.o/linux-tdep.o/

Thanks for noticing this!


 	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.

Looks great to me.  Thanks for doing this.

Committed now, with the above change.

/Ricard


Extract Linux-specific portitions of cris-tdep.c to a new file.
This brings in some standard functionality hitherdo missing from
the CRIS/CRISv32 port thanks to the new call to gdbarch_init_osabi,
as well as clearly showing that there is Linux support for this
platform by virtue of the existence of a cris-linux-tdep.c file.

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

	* Makefile.in (ALL_TARGET_OBS): Add cris-linux-tdep.o.
	* configure.tgt: Add cris-linux-tdep.o and linux-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


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