From 190dce0965f152d147a0a57a65719c004bbe4648 Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Wed, 16 May 2007 15:31:12 +0000 Subject: [PATCH] * config/arm/embed.mt (DEPRECATED_TM_FILE): Set to tm-arm.h. * config/arm/tm-embed.h: Delete file. * arm-tdep.h (arm_software_single_step): Declare. * arm-tdep.c (arm_software_single_step): Make global. (arm_gdbarch_init): Move set_gdbarch_software_single_step call from here to ... * arm-linux-tdep.c (arm_linux_init_abi): ... here ... * armnbsd-tdep.c (arm_netbsd_init_abi_common): ... here ... * armobsd-tdep.c (armobsd_init_abi): ... here ... * arm-wince-tdep.c (arm_wince_init_abi): ... and here. * arm-tdep.c (ARM_LE_BREAKPOINT, ARM_BE_BREAKPOINT): No longer allow defines to be overriden by TM file. (THUMB_LE_BREAKPOINT, THUMB_BE_BREAKPOINT): Likewise. Also, change default to {0xbe,0xbe}. * armobsd-tdep.c (arm_obsd_thumb_le_breakpoint, arm_obsd_thumb_be_breakpoint): New global variables. (armobsd_init_abi): Override tdep->thumb_breakpoint and tdep->thumb_breakpoint_size. * arm-wince-tdep.c (arm_wince_thumb_le_breakpoint): New variable. (arm_wince_init_abi): Override tdep->thumb_breakpoint and tdep->thumb_breakpoint_size. * arm-tdep.c (arm_gdbarch_init): Add set_gdbarch_skip_trampoline_code. --- gdb/ChangeLog | 28 +++++++++++++++++++++++++++ gdb/arm-linux-tdep.c | 3 +++ gdb/arm-tdep.c | 24 ++++++------------------ gdb/arm-tdep.h | 2 ++ gdb/arm-wince-tdep.c | 6 ++++++ gdb/armnbsd-tdep.c | 3 +++ gdb/armobsd-tdep.c | 21 +++++++++++++++++++++ gdb/config/arm/embed.mt | 2 +- gdb/config/arm/tm-embed.h | 48 ----------------------------------------------- 9 files changed, 70 insertions(+), 67 deletions(-) delete mode 100644 gdb/config/arm/tm-embed.h diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 29edcde..faf8d89 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,31 @@ +2007-05-16 Ulrich Weigand + + * config/arm/embed.mt (DEPRECATED_TM_FILE): Set to tm-arm.h. + * config/arm/tm-embed.h: Delete file. + + * arm-tdep.h (arm_software_single_step): Declare. + * arm-tdep.c (arm_software_single_step): Make global. + (arm_gdbarch_init): Move set_gdbarch_software_single_step call + from here to ... + * arm-linux-tdep.c (arm_linux_init_abi): ... here ... + * armnbsd-tdep.c (arm_netbsd_init_abi_common): ... here ... + * armobsd-tdep.c (armobsd_init_abi): ... here ... + * arm-wince-tdep.c (arm_wince_init_abi): ... and here. + + * arm-tdep.c (ARM_LE_BREAKPOINT, ARM_BE_BREAKPOINT): No longer + allow defines to be overriden by TM file. + (THUMB_LE_BREAKPOINT, THUMB_BE_BREAKPOINT): Likewise. Also, + change default to {0xbe,0xbe}. + * armobsd-tdep.c (arm_obsd_thumb_le_breakpoint, + arm_obsd_thumb_be_breakpoint): New global variables. + (armobsd_init_abi): Override tdep->thumb_breakpoint and + tdep->thumb_breakpoint_size. + * arm-wince-tdep.c (arm_wince_thumb_le_breakpoint): New variable. + (arm_wince_init_abi): Override tdep->thumb_breakpoint and + tdep->thumb_breakpoint_size. + + * arm-tdep.c (arm_gdbarch_init): Add set_gdbarch_skip_trampoline_code. + 2007-05-16 Daniel Jacobowitz * NEWS: Mention removed "set mips stack-arg-size" and "set mips diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c index 6651f66..c9b5296 100644 --- a/gdb/arm-linux-tdep.c +++ b/gdb/arm-linux-tdep.c @@ -605,6 +605,9 @@ arm_linux_init_abi (struct gdbarch_info info, set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_ilp32_fetch_link_map_offsets); + /* Single stepping. */ + set_gdbarch_software_single_step (gdbarch, arm_software_single_step); + /* Shared library handling. */ set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver); diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c index 8a3a1f9..2cfb5c0 100644 --- a/gdb/arm-tdep.c +++ b/gdb/arm-tdep.c @@ -1904,7 +1904,7 @@ arm_get_next_pc (CORE_ADDR pc) single-step support. We find the target of the coming instruction and breakpoint it. */ -static int +int arm_software_single_step (struct regcache *regcache) { /* NOTE: This may insert the wrong breakpoint instruction when @@ -1989,21 +1989,10 @@ gdb_print_insn_arm (bfd_vma memaddr, disassemble_info *info) instruction to force a trap. This can be handled by by the abi-specific code during establishment of the gdbarch vector. */ - -/* NOTE rearnsha 2002-02-18: for now we allow a non-multi-arch gdb to - override these definitions. */ -#ifndef ARM_LE_BREAKPOINT #define ARM_LE_BREAKPOINT {0xFE,0xDE,0xFF,0xE7} -#endif -#ifndef ARM_BE_BREAKPOINT #define ARM_BE_BREAKPOINT {0xE7,0xFF,0xDE,0xFE} -#endif -#ifndef THUMB_LE_BREAKPOINT -#define THUMB_LE_BREAKPOINT {0xfe,0xdf} -#endif -#ifndef THUMB_BE_BREAKPOINT -#define THUMB_BE_BREAKPOINT {0xdf,0xfe} -#endif +#define THUMB_LE_BREAKPOINT {0xbe,0xbe} +#define THUMB_BE_BREAKPOINT {0xbe,0xbe} static const char arm_default_arm_le_breakpoint[] = ARM_LE_BREAKPOINT; static const char arm_default_arm_be_breakpoint[] = ARM_BE_BREAKPOINT; @@ -2939,6 +2928,9 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) /* Advance PC across function entry code. */ set_gdbarch_skip_prologue (gdbarch, arm_skip_prologue); + /* Skip trampolines. */ + set_gdbarch_skip_trampoline_code (gdbarch, arm_skip_stub); + /* The stack grows downward. */ set_gdbarch_inner_than (gdbarch, core_addr_lessthan); @@ -2969,10 +2961,6 @@ arm_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) /* Returning results. */ set_gdbarch_return_value (gdbarch, arm_return_value); - /* Single stepping. */ - /* XXX For an RDI target we should ask the target if it can single-step. */ - set_gdbarch_software_single_step (gdbarch, arm_software_single_step); - /* Disassembly. */ set_gdbarch_print_insn (gdbarch, gdb_print_insn_arm); diff --git a/gdb/arm-tdep.h b/gdb/arm-tdep.h index 6cc6b0e..29f2328 100644 --- a/gdb/arm-tdep.h +++ b/gdb/arm-tdep.h @@ -182,6 +182,8 @@ struct gdbarch_tdep #define LOWEST_PC (gdbarch_tdep (current_gdbarch)->lowest_pc) #endif +int arm_software_single_step (struct regcache *); + /* Functions exported from armbsd-tdep.h. */ /* Return the appropriate register set for the core section identified diff --git a/gdb/arm-wince-tdep.c b/gdb/arm-wince-tdep.c index bfebef1..db9cffe 100644 --- a/gdb/arm-wince-tdep.c +++ b/gdb/arm-wince-tdep.c @@ -30,6 +30,7 @@ #include "arm-tdep.h" static const char arm_wince_le_breakpoint[] = { 0x10, 0x00, 0x00, 0xe6 }; +static const char arm_wince_thumb_le_breakpoint[] = { 0xfe, 0xdf }; /* Description of the longjmp buffer. */ #define ARM_WINCE_JB_ELEMENT_SIZE INT_REGISTER_SIZE @@ -42,6 +43,8 @@ arm_wince_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) tdep->arm_breakpoint = arm_wince_le_breakpoint; tdep->arm_breakpoint_size = sizeof (arm_wince_le_breakpoint); + tdep->thumb_breakpoint = arm_wince_thumb_le_breakpoint; + tdep->thumb_breakpoint_size = sizeof (arm_wince_thumb_le_breakpoint); tdep->struct_return = pcc_struct_return; tdep->fp_model = ARM_FLOAT_SOFT_VFP; @@ -57,6 +60,9 @@ arm_wince_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) /* Shared library handling. */ set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); + + /* Single stepping. */ + set_gdbarch_software_single_step (gdbarch, arm_software_single_step); } static enum gdb_osabi diff --git a/gdb/armnbsd-tdep.c b/gdb/armnbsd-tdep.c index 5c29826..a446bd7 100644 --- a/gdb/armnbsd-tdep.c +++ b/gdb/armnbsd-tdep.c @@ -68,6 +68,9 @@ arm_netbsd_init_abi_common (struct gdbarch_info info, tdep->jb_pc = ARM_NBSD_JB_PC; tdep->jb_elt_size = ARM_NBSD_JB_ELEMENT_SIZE; + + /* Single stepping. */ + set_gdbarch_software_single_step (gdbarch, arm_software_single_step); } static void diff --git a/gdb/armobsd-tdep.c b/gdb/armobsd-tdep.c index 87df203..53e3d16 100644 --- a/gdb/armobsd-tdep.c +++ b/gdb/armobsd-tdep.c @@ -72,6 +72,10 @@ static const struct tramp_frame armobsd_sigframe = }; +/* Override default thumb breakpoints. */ +static const char arm_obsd_thumb_le_breakpoint[] = {0xfe, 0xdf}; +static const char arm_obsd_thumb_be_breakpoint[] = {0xdf, 0xfe}; + static void armobsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) @@ -96,6 +100,23 @@ armobsd_init_abi (struct gdbarch_info info, /* OpenBSD/arm uses -fpcc-struct-return by default. */ tdep->struct_return = pcc_struct_return; + + /* Single stepping. */ + set_gdbarch_software_single_step (gdbarch, arm_software_single_step); + + /* Breakpoints. */ + switch (info.byte_order) + { + case BFD_ENDIAN_BIG: + tdep->thumb_breakpoint = arm_obsd_thumb_be_breakpoint; + tdep->thumb_breakpoint_size = sizeof (arm_obsd_thumb_be_breakpoint); + break; + + case BFD_ENDIAN_LITTLE: + tdep->thumb_breakpoint = arm_obsd_thumb_le_breakpoint; + tdep->thumb_breakpoint_size = sizeof (arm_obsd_thumb_le_breakpoint); + break; + } } diff --git a/gdb/config/arm/embed.mt b/gdb/config/arm/embed.mt index 45f09c8..1fe3524 100644 --- a/gdb/config/arm/embed.mt +++ b/gdb/config/arm/embed.mt @@ -1,6 +1,6 @@ # Target: ARM embedded system TDEPFILES= arm-tdep.o -DEPRECATED_TM_FILE= tm-embed.h +DEPRECATED_TM_FILE= tm-arm.h SIM_OBS = remote-sim.o SIM = ../sim/arm/libsim.a diff --git a/gdb/config/arm/tm-embed.h b/gdb/config/arm/tm-embed.h deleted file mode 100644 index baaecf5..0000000 --- a/gdb/config/arm/tm-embed.h +++ /dev/null @@ -1,48 +0,0 @@ -/* Definitions to target GDB to ARM embedded systems. - Copyright 1986, 1987, 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2007 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 - (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, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#ifndef TM_ARMEMBED_H -#define TM_ARMEMBED_H - -/* Include the common ARM definitions. */ -#include "arm/tm-arm.h" - -/* The remote stub should be able to single-step. */ -#undef SOFTWARE_SINGLE_STEP_P -#define SOFTWARE_SINGLE_STEP_P() 0 - -/* The first 0x20 bytes are the trap vectors. */ -#undef LOWEST_PC -#define LOWEST_PC 0x20 - -/* Override defaults. */ - -#undef THUMB_LE_BREAKPOINT -#define THUMB_LE_BREAKPOINT {0xbe,0xbe} -#undef THUMB_BE_BREAKPOINT -#define THUMB_BE_BREAKPOINT {0xbe,0xbe} - -/* Functions for dealing with Thumb call thunks. */ -#define SKIP_TRAMPOLINE_CODE(pc) arm_skip_stub (pc) -extern int arm_in_call_stub (CORE_ADDR pc, char *name); -extern CORE_ADDR arm_skip_stub (CORE_ADDR pc); - -#endif /* TM_ARMEMBED_H */ -- 2.7.4