xref: /dflybsd-src/contrib/gdb-7/gdb/i386dfly-tdep.c (revision ffd49a44576ac6919c30847a4587ded460b0c99d)
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
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 
96 /* Provide a prototype to silence -Wmissing-prototypes.  */
97 void _initialize_i386dfly_tdep(void);
98 
99 void
100 _initialize_i386dfly_tdep(void)
101 {
102 	gdbarch_register_osabi(bfd_arch_i386, 0, GDB_OSABI_DRAGONFLY,
103 	    i386dfly_init_abi);
104 }
105