From 749c8b38fa890781f09f237e0ac2c4b00b666557 Mon Sep 17 00:00:00 2001 From: Ricard Wanderlof Date: Fri, 6 Sep 2013 10:50:10 +0000 Subject: [PATCH] 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 * 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 | 13 ++++++++++ gdb/Makefile.in | 2 +- gdb/configure.tgt | 2 +- gdb/cris-linux-tdep.c | 57 +++++++++++++++++++++++++++++++++++++++++++ gdb/cris-tdep.c | 22 +++++------------ gdb/cris-tdep.h | 34 ++++++++++++++++++++++++++ 6 files changed, 112 insertions(+), 18 deletions(-) create mode 100644 gdb/cris-linux-tdep.c create mode 100644 gdb/cris-tdep.h diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 73032e264e..2dddbf36ce 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2013-09-06 Ricard Wanderlof + + * 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 * tui/tui-io.c (tui_initialize_io): Remove legacy comment referring diff --git a/gdb/Makefile.in b/gdb/Makefile.in index c75ec38bd4..93a3d6aefa 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 0ac4e331e8..95c7217bd9 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 0000000000..ea6e2f07ed --- /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 . */ + +#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 ef2746d7d1..8ba16770d0 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 0000000000..247f91fd77 --- /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 . */ + +#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 */ -- 2.34.1