aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog28
-rw-r--r--gdb/arm-linux-tdep.c3
-rw-r--r--gdb/arm-tdep.c24
-rw-r--r--gdb/arm-tdep.h2
-rw-r--r--gdb/arm-wince-tdep.c6
-rw-r--r--gdb/armnbsd-tdep.c3
-rw-r--r--gdb/armobsd-tdep.c21
-rw-r--r--gdb/config/arm/embed.mt2
-rw-r--r--gdb/config/arm/tm-embed.h48
9 files changed, 70 insertions, 67 deletions
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 <uweigand@de.ibm.com>
+
+ * 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 <dan@codesourcery.com>
* 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 */