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) {