Extract Linux-specific portitions of cris-tdep.c to a new file.
authorRicard Wanderlof <ricard@sourceware.org>
Fri, 6 Sep 2013 10:50:10 +0000 (10:50 +0000)
committerRicard Wanderlof <ricard@sourceware.org>
Fri, 6 Sep 2013 10:50:10 +0000 (10:50 +0000)
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.

gdb/ChangeLog
gdb/Makefile.in
gdb/configure.tgt
gdb/cris-linux-tdep.c [new file with mode: 0644]
gdb/cris-tdep.c
gdb/cris-tdep.h [new file with mode: 0644]

index 73032e2..2dddbf3 100644 (file)
@@ -1,3 +1,16 @@
+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.
+
 2013-09-06  Andrew Burgess  <aburgess@broadcom.com>
 
        * tui/tui-io.c (tui_initialize_io): Remove legacy comment referring
index c75ec38..93a3d6a 100644 (file)
@@ -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 \
index 0ac4e33..95c7217 100644 (file)
@@ -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 (file)
index 0000000..ea6e2f0
--- /dev/null
@@ -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);
+}
index ef2746d..8ba1677 100644 (file)
@@ -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 (file)
index 0000000..247f91f
--- /dev/null
@@ -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 */