gdb: add target_ops::supports_displaced_step
[deliverable/binutils-gdb.git] / gdb / i386-bsd-tdep.c
CommitLineData
b7247919 1/* Target-dependent code for i386 BSD's.
8a96bc77 2
b811d2c2 3 Copyright (C) 2001-2020 Free Software Foundation, Inc.
b7247919
MK
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
b7247919
MK
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
b7247919
MK
19
20#include "defs.h"
9c5045b5 21#include "arch-utils.h"
b7247919
MK
22#include "frame.h"
23#include "gdbcore.h"
24#include "regcache.h"
4be87837 25#include "osabi.h"
b7247919 26
8201327c 27#include "i386-tdep.h"
b7247919 28
8201327c 29/* Support for signal handlers. */
b7247919 30
10458914
DJ
31/* Assuming THIS_FRAME is for a BSD sigtramp routine, return the
32 address of the associated sigcontext structure. */
b7247919 33
acd5c798 34static CORE_ADDR
10458914 35i386bsd_sigcontext_addr (struct frame_info *this_frame)
b7247919 36{
e17a4113
UW
37 struct gdbarch *gdbarch = get_frame_arch (this_frame);
38 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
63c0089f 39 gdb_byte buf[4];
acd5c798 40 CORE_ADDR sp;
b4700d91 41
10458914 42 get_frame_register (this_frame, I386_ESP_REGNUM, buf);
e17a4113 43 sp = extract_unsigned_integer (buf, 4, byte_order);
b7247919 44
e17a4113 45 return read_memory_unsigned_integer (sp + 8, 4, byte_order);
b7247919 46}
8201327c
MK
47\f
48
9c5045b5
MK
49/* Support for shared libraries. */
50
8201327c
MK
51/* Traditional BSD (4.3 BSD, still used for BSDI and 386BSD). */
52
53/* From <machine/signal.h>. */
155c1d33 54int i386bsd_sc_reg_offset[] =
a3386186
MK
55{
56 -1, /* %eax */
57 -1, /* %ecx */
58 -1, /* %edx */
59 -1, /* %ebx */
60 8 + 0 * 4, /* %esp */
61 8 + 1 * 4, /* %ebp */
62 -1, /* %esi */
63 -1, /* %edi */
64 8 + 3 * 4, /* %eip */
65 8 + 4 * 4, /* %eflags */
66 -1, /* %cs */
67 -1, /* %ss */
68 -1, /* %ds */
69 -1, /* %es */
70 -1, /* %fs */
71 -1 /* %gs */
72};
8201327c 73
3cac699e 74void
8201327c
MK
75i386bsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
76{
77 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
78
8201327c
MK
79 tdep->jb_pc_offset = 0;
80
8201327c
MK
81 tdep->sigtramp_start = 0xfdbfdfc0;
82 tdep->sigtramp_end = 0xfdbfe000;
21d0e8a4 83 tdep->sigcontext_addr = i386bsd_sigcontext_addr;
a3386186 84 tdep->sc_reg_offset = i386bsd_sc_reg_offset;
155c1d33 85 tdep->sc_num_regs = ARRAY_SIZE (i386bsd_sc_reg_offset);
8201327c
MK
86}
87
8201327c 88\f
This page took 1.65101 seconds and 4 git commands to generate.