Update i386 and amd64 ports for unwinder changes.
[deliverable/binutils-gdb.git] / gdb / i386bsd-tdep.c
CommitLineData
b7247919 1/* Target-dependent code for i386 BSD's.
8a96bc77 2
9b254dd1
DJ
3 Copyright (C) 2001, 2002, 2003, 2004, 2007, 2008
4 Free Software Foundation, Inc.
b7247919
MK
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
b7247919
MK
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/>. */
b7247919
MK
20
21#include "defs.h"
9c5045b5 22#include "arch-utils.h"
b7247919
MK
23#include "frame.h"
24#include "gdbcore.h"
25#include "regcache.h"
4be87837 26#include "osabi.h"
b7247919 27
ca39387d
MK
28#include "gdb_string.h"
29
8201327c 30#include "i386-tdep.h"
b7247919 31
8201327c 32/* Support for signal handlers. */
b7247919 33
10458914
DJ
34/* Assuming THIS_FRAME is for a BSD sigtramp routine, return the
35 address of the associated sigcontext structure. */
b7247919 36
acd5c798 37static CORE_ADDR
10458914 38i386bsd_sigcontext_addr (struct frame_info *this_frame)
b7247919 39{
63c0089f 40 gdb_byte buf[4];
acd5c798 41 CORE_ADDR sp;
b4700d91 42
10458914 43 get_frame_register (this_frame, I386_ESP_REGNUM, buf);
acd5c798 44 sp = extract_unsigned_integer (buf, 4);
b7247919 45
acd5c798 46 return read_memory_unsigned_integer (sp + 8, 4);
b7247919 47}
8201327c
MK
48\f
49
9c5045b5
MK
50/* Support for shared libraries. */
51
8201327c
MK
52/* Traditional BSD (4.3 BSD, still used for BSDI and 386BSD). */
53
54/* From <machine/signal.h>. */
155c1d33 55int i386bsd_sc_reg_offset[] =
a3386186
MK
56{
57 -1, /* %eax */
58 -1, /* %ecx */
59 -1, /* %edx */
60 -1, /* %ebx */
61 8 + 0 * 4, /* %esp */
62 8 + 1 * 4, /* %ebp */
63 -1, /* %esi */
64 -1, /* %edi */
65 8 + 3 * 4, /* %eip */
66 8 + 4 * 4, /* %eflags */
67 -1, /* %cs */
68 -1, /* %ss */
69 -1, /* %ds */
70 -1, /* %es */
71 -1, /* %fs */
72 -1 /* %gs */
73};
8201327c 74
3cac699e 75void
8201327c
MK
76i386bsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
77{
78 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
79
8201327c
MK
80 tdep->jb_pc_offset = 0;
81
8201327c
MK
82 tdep->sigtramp_start = 0xfdbfdfc0;
83 tdep->sigtramp_end = 0xfdbfe000;
21d0e8a4 84 tdep->sigcontext_addr = i386bsd_sigcontext_addr;
a3386186 85 tdep->sc_reg_offset = i386bsd_sc_reg_offset;
155c1d33 86 tdep->sc_num_regs = ARRAY_SIZE (i386bsd_sc_reg_offset);
8201327c
MK
87}
88
8201327c
MK
89\f
90static enum gdb_osabi
91i386bsd_aout_osabi_sniffer (bfd *abfd)
92{
93 if (strcmp (bfd_get_target (abfd), "a.out-i386-netbsd") == 0)
94 return GDB_OSABI_NETBSD_AOUT;
95
96 if (strcmp (bfd_get_target (abfd), "a.out-i386-freebsd") == 0)
97 return GDB_OSABI_FREEBSD_AOUT;
98
99 return GDB_OSABI_UNKNOWN;
100}
101
f6943e4a
MK
102static enum gdb_osabi
103i386bsd_core_osabi_sniffer (bfd *abfd)
104{
105 if (strcmp (bfd_get_target (abfd), "netbsd-core") == 0)
106 return GDB_OSABI_NETBSD_AOUT;
107
108 return GDB_OSABI_UNKNOWN;
109}
110
8201327c
MK
111\f
112/* Provide a prototype to silence -Wmissing-prototypes. */
113void _initialize_i386bsd_tdep (void);
114
115void
116_initialize_i386bsd_tdep (void)
117{
118 gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_aout_flavour,
119 i386bsd_aout_osabi_sniffer);
f6943e4a 120
8b0c3633
MK
121 /* BFD doesn't set a flavour for NetBSD style a.out core files. */
122 gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_unknown_flavour,
f6943e4a 123 i386bsd_core_osabi_sniffer);
8201327c 124}
This page took 0.548386 seconds and 4 git commands to generate.