2011-02-26 Michael Snyder <msnyder@vmware.com>
[deliverable/binutils-gdb.git] / gdb / armnbsd-tdep.c
CommitLineData
424f3115 1/* Target-dependent code for NetBSD/arm.
527ca6bb 2
7b6bb8da 3 Copyright (C) 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011
9b254dd1 4 Free Software Foundation, Inc.
66e810cd
RE
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
a9762ec7 10 the Free Software Foundation; either version 3 of the License, or
66e810cd
RE
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
a9762ec7 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
66e810cd
RE
20
21#include "defs.h"
4be87837 22#include "osabi.h"
66e810cd 23
527ca6bb
MK
24#include "gdb_string.h"
25
66e810cd 26#include "arm-tdep.h"
9eeef8ef 27#include "solib-svr4.h"
66e810cd 28
9df628e0 29/* Description of the longjmp buffer. */
625602f2 30#define ARM_NBSD_JB_PC 24
7a5ea0d4 31#define ARM_NBSD_JB_ELEMENT_SIZE INT_REGISTER_SIZE
9df628e0 32
66e810cd
RE
33/* For compatibility with previous implemenations of GDB on arm/NetBSD,
34 override the default little-endian breakpoint. */
35static const char arm_nbsd_arm_le_breakpoint[] = {0x11, 0x00, 0x00, 0xe6};
2afeb6b8
RE
36static const char arm_nbsd_arm_be_breakpoint[] = {0xe6, 0x00, 0x00, 0x11};
37static const char arm_nbsd_thumb_le_breakpoint[] = {0xfe, 0xde};
38static const char arm_nbsd_thumb_be_breakpoint[] = {0xde, 0xfe};
66e810cd
RE
39
40static void
41arm_netbsd_init_abi_common (struct gdbarch_info info,
42 struct gdbarch *gdbarch)
43{
44 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
45
46 tdep->lowest_pc = 0x8000;
2afeb6b8
RE
47 switch (info.byte_order)
48 {
49 case BFD_ENDIAN_LITTLE:
50 tdep->arm_breakpoint = arm_nbsd_arm_le_breakpoint;
51 tdep->thumb_breakpoint = arm_nbsd_thumb_le_breakpoint;
52 tdep->arm_breakpoint_size = sizeof (arm_nbsd_arm_le_breakpoint);
53 tdep->thumb_breakpoint_size = sizeof (arm_nbsd_thumb_le_breakpoint);
54 break;
55
56 case BFD_ENDIAN_BIG:
57 tdep->arm_breakpoint = arm_nbsd_arm_be_breakpoint;
58 tdep->thumb_breakpoint = arm_nbsd_thumb_be_breakpoint;
59 tdep->arm_breakpoint_size = sizeof (arm_nbsd_arm_be_breakpoint);
60 tdep->thumb_breakpoint_size = sizeof (arm_nbsd_thumb_be_breakpoint);
61 break;
62
63 default:
64 internal_error (__FILE__, __LINE__,
edefbb7c 65 _("arm_gdbarch_init: bad byte order for float format"));
2afeb6b8 66 }
9df628e0 67
625602f2
RE
68 tdep->jb_pc = ARM_NBSD_JB_PC;
69 tdep->jb_elt_size = ARM_NBSD_JB_ELEMENT_SIZE;
190dce09
UW
70
71 /* Single stepping. */
72 set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
66e810cd
RE
73}
74
75static void
76arm_netbsd_aout_init_abi (struct gdbarch_info info,
77 struct gdbarch *gdbarch)
78{
08216dd7
RE
79 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
80
66e810cd 81 arm_netbsd_init_abi_common (info, gdbarch);
28e97307
DJ
82 if (tdep->fp_model == ARM_FLOAT_AUTO)
83 tdep->fp_model = ARM_FLOAT_SOFT_FPA;
66e810cd
RE
84}
85
86static void
424f3115 87arm_netbsd_elf_init_abi (struct gdbarch_info info,
66e810cd
RE
88 struct gdbarch *gdbarch)
89{
08216dd7
RE
90 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
91
66e810cd 92 arm_netbsd_init_abi_common (info, gdbarch);
28e97307
DJ
93 if (tdep->fp_model == ARM_FLOAT_AUTO)
94 tdep->fp_model = ARM_FLOAT_SOFT_VFP;
a4ab4a25
MK
95
96 /* NetBSD ELF uses SVR4-style shared libraries. */
97 set_solib_svr4_fetch_link_map_offsets
424f3115 98 (gdbarch, svr4_ilp32_fetch_link_map_offsets);
66e810cd
RE
99}
100
70f80edf
JT
101static enum gdb_osabi
102arm_netbsd_aout_osabi_sniffer (bfd *abfd)
103{
104 if (strcmp (bfd_get_target (abfd), "a.out-arm-netbsd") == 0)
105 return GDB_OSABI_NETBSD_AOUT;
106
107 return GDB_OSABI_UNKNOWN;
108}
109
63807e1d
PA
110/* Provide a prototype to silence -Wmissing-prototypes. */
111extern initialize_file_ftype _initialize_arm_netbsd_tdep;
112
66e810cd
RE
113void
114_initialize_arm_netbsd_tdep (void)
115{
70f80edf
JT
116 gdbarch_register_osabi_sniffer (bfd_arch_arm, bfd_target_aout_flavour,
117 arm_netbsd_aout_osabi_sniffer);
118
05816f70 119 gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_NETBSD_AOUT,
70f80edf 120 arm_netbsd_aout_init_abi);
05816f70 121 gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_NETBSD_ELF,
70f80edf 122 arm_netbsd_elf_init_abi);
66e810cd 123}
This page took 0.55401 seconds and 4 git commands to generate.