This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[PATCH] ARM: Add Thumb and ARM-be breakpoints for NetBSD
- From: Richard Earnshaw <rearnsha at gcc dot gnu dot org>
- To: gdb-patches at sources dot redhat dot com
- Date: Mon, 23 Aug 2004 11:31:57 +0100
- Subject: [PATCH] ARM: Add Thumb and ARM-be breakpoints for NetBSD
- Organization: GNU
This patch adds some more breakpoints for NetBSD to permit debugging of
Big-endian ARM and Thumb code.
R.
2004-08-23 Richard Earnshaw <rearnsha@arm.com>
* armnbsd-tdep.c (arm_nbsd_arm_be_breakpoint): Define.
(arm_nbsd_thumb_[lb]e_breakpoint): Define.
(arm_netbsd_init_abi_common): Register them.
Index: armnbsd-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/armnbsd-tdep.c,v
retrieving revision 1.12
diff -p -r1.12 armnbsd-tdep.c
*** armnbsd-tdep.c 8 May 2004 17:33:23 -0000 1.12
--- armnbsd-tdep.c 23 Aug 2004 10:23:46 -0000
***************
*** 35,40 ****
--- 35,43 ----
/* For compatibility with previous implemenations of GDB on arm/NetBSD,
override the default little-endian breakpoint. */
static const char arm_nbsd_arm_le_breakpoint[] = {0x11, 0x00, 0x00, 0xe6};
+ static const char arm_nbsd_arm_be_breakpoint[] = {0xe6, 0x00, 0x00, 0x11};
+ static const char arm_nbsd_thumb_le_breakpoint[] = {0xfe, 0xde};
+ static const char arm_nbsd_thumb_be_breakpoint[] = {0xde, 0xfe};
static int
arm_netbsd_aout_in_solib_call_trampoline (CORE_ADDR pc, char *name)
*************** arm_netbsd_init_abi_common (struct gdbar
*** 52,59 ****
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
tdep->lowest_pc = 0x8000;
! tdep->arm_breakpoint = arm_nbsd_arm_le_breakpoint;
! tdep->arm_breakpoint_size = sizeof (arm_nbsd_arm_le_breakpoint);
tdep->jb_pc = ARM_NBSD_JB_PC;
tdep->jb_elt_size = ARM_NBSD_JB_ELEMENT_SIZE;
--- 55,80 ----
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
tdep->lowest_pc = 0x8000;
! switch (info.byte_order)
! {
! case BFD_ENDIAN_LITTLE:
! tdep->arm_breakpoint = arm_nbsd_arm_le_breakpoint;
! tdep->thumb_breakpoint = arm_nbsd_thumb_le_breakpoint;
! tdep->arm_breakpoint_size = sizeof (arm_nbsd_arm_le_breakpoint);
! tdep->thumb_breakpoint_size = sizeof (arm_nbsd_thumb_le_breakpoint);
! break;
!
! case BFD_ENDIAN_BIG:
! tdep->arm_breakpoint = arm_nbsd_arm_be_breakpoint;
! tdep->thumb_breakpoint = arm_nbsd_thumb_be_breakpoint;
! tdep->arm_breakpoint_size = sizeof (arm_nbsd_arm_be_breakpoint);
! tdep->thumb_breakpoint_size = sizeof (arm_nbsd_thumb_be_breakpoint);
! break;
!
! default:
! internal_error (__FILE__, __LINE__,
! "arm_gdbarch_init: bad byte order for float format");
! }
tdep->jb_pc = ARM_NBSD_JB_PC;
tdep->jb_elt_size = ARM_NBSD_JB_ELEMENT_SIZE;