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 /* 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 } 104