X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Farmobsd-tdep.c;h=e4f5948405fefbd3223f6ab96ff848efd780b6a5;hb=9f1b45b0da430a7a7abf9e54acbe6f2ef9d3a763;hp=87df203dbbe4f078010f34297377bbde5a832561;hpb=6aba47ca06d9150c6196a374b745c2711b46e045;p=deliverable%2Fbinutils-gdb.git
diff --git a/gdb/armobsd-tdep.c b/gdb/armobsd-tdep.c
index 87df203dbb..e4f5948405 100644
--- a/gdb/armobsd-tdep.c
+++ b/gdb/armobsd-tdep.c
@@ -1,12 +1,12 @@
/* Target-dependent code for OpenBSD/arm.
- Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2006-2014 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
+ 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,
@@ -15,16 +15,14 @@
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., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA. */
+ along with this program. If not, see . */
#include "defs.h"
#include "osabi.h"
#include "trad-frame.h"
#include "tramp-frame.h"
-#include "gdb_string.h"
+#include
#include "obsd-tdep.h"
#include "arm-tdep.h"
@@ -34,7 +32,7 @@
static void
armobsd_sigframe_init (const struct tramp_frame *self,
- struct frame_info *next_frame,
+ struct frame_info *this_frame,
struct trad_frame_cache *cache,
CORE_ADDR func)
{
@@ -43,7 +41,7 @@ armobsd_sigframe_init (const struct tramp_frame *self,
/* We find the appropriate instance of `struct sigcontext' at a
fixed offset in the signal frame. */
- sp = frame_unwind_register_signed (next_frame, ARM_SP_REGNUM);
+ sp = get_frame_register_signed (this_frame, ARM_SP_REGNUM);
sigcontext_addr = sp + 16;
/* PC. */
@@ -72,6 +70,10 @@ static const struct tramp_frame armobsd_sigframe =
};
+/* Override default thumb breakpoints. */
+static const gdb_byte arm_obsd_thumb_le_breakpoint[] = {0xfe, 0xdf};
+static const gdb_byte arm_obsd_thumb_be_breakpoint[] = {0xdf, 0xfe};
+
static void
armobsd_init_abi (struct gdbarch_info info,
struct gdbarch *gdbarch)
@@ -96,6 +98,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;
+ }
}
@@ -108,6 +127,9 @@ armobsd_core_osabi_sniffer (bfd *abfd)
return GDB_OSABI_UNKNOWN;
}
+/* Provide a prototype to silence -Wmissing-prototypes. */
+extern initialize_file_ftype _initialize_armobsd_tdep;
+
void
_initialize_armobsd_tdep (void)
{