1 /* Target-dependent code for DragonFly/i386.
2
3 Copyright (C) 2003-2013 Free Software Foundation, Inc.
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
9 the Free Software Foundation; either version 3 of the License, or
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
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #include "defs.h"
21 #include "arch-utils.h"
22 #include "gdbcore.h"
23 #include "osabi.h"
24 #include "regcache.h"
25
26 #include "gdb_assert.h"
27
28 #include "i386-tdep.h"
29 #include "i387-tdep.h"
30 #include "solib-svr4.h"
31
32 static int i386dfly_r_reg_offset[] =
33 {
34 44, /* %eax */
35 40, /* %ecx */
36 36, /* %edx */
37 32, /* %ebx */
38 72, /* %esp */
39 24, /* %ebp */
40 20, /* %esi */
41 16, /* %edi */
42 60, /* %eip */
43 68, /* %eflags */
44 64, /* %cs */
45 76, /* %ss */
46 12, /* %ds */
47 8, /* %es */
48 4, /* %fs */
49 0 /* %gs */
50 };
51
52 /* Sigtramp routine location. */
53 CORE_ADDR i386dfly_sigtramp_start_addr = 0xbfbfdf20;
54 CORE_ADDR i386dfly_sigtramp_end_addr = 0xbfbfdff0;
55
56 int i386dfly_sc_reg_offset[] =
57 {
58 64, /* %eax */
59 60, /* %ecx */
60 56, /* %edx */
61 52, /* %ebx */
62 92, /* %esp */
63 44, /* %ebp */
64 40, /* %esi */
65 36, /* %edi */
66 80, /* %eip */
67 88, /* %eflags */
68 84, /* %cs */
69 96, /* %ss */
70 32, /* %ds */
71 28, /* %es */
72 24, /* %fs */
73 20 /* %gs */
74 };
75
76 static void
i386dfly_init_abi(struct gdbarch_info info,struct gdbarch * gdbarch)77 i386dfly_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
78 {
79 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
80
81 i386_elf_init_abi(info, gdbarch);
82
83 tdep->gregset_reg_offset = i386dfly_r_reg_offset;
84 tdep->gregset_num_regs = ARRAY_SIZE (i386dfly_r_reg_offset);
85 tdep->sizeof_gregset = 80;
86
87 tdep->sc_reg_offset = i386dfly_sc_reg_offset;
88 tdep->sc_num_regs = ARRAY_SIZE (i386dfly_sc_reg_offset);
89
90 set_solib_svr4_fetch_link_map_offsets
91 (gdbarch, svr4_ilp32_fetch_link_map_offsets);
92 }
93
94
95 /* Provide a prototype to silence -Wmissing-prototypes. */
96 void _initialize_i386dfly_tdep (void);
97
98 void
_initialize_i386dfly_tdep(void)99 _initialize_i386dfly_tdep (void)
100 {
101 gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_DRAGONFLY,
102 i386dfly_init_abi);
103 }
104