gdb - Local mods (compile)
[dragonfly.git] / contrib / gdb-7 / i386dfly-tdep.c
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 \f
95 /* Provide a prototype to silence -Wmissing-prototypes.  */
96 void _initialize_i386dfly_tdep (void);
97
98 void
99 _initialize_i386dfly_tdep (void)
100 {
101   gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_DRAGONFLY,
102                           i386dfly_init_abi);
103 }