diff options
author | Pedro Alves <palves@redhat.com> | 2009-02-17 17:56:50 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2009-02-17 17:56:50 +0000 |
commit | 4c1d29734e9ca4e8921c9962e0f342bcc9e95c16 (patch) | |
tree | eb32db580082ecd49a7734cd89cfd5ecc8fa017e /gdb/amd64-dicos-tdep.c | |
parent | 1903f0e64bb6f600388af42a7af7aff02e70bdef (diff) | |
download | gdb-4c1d29734e9ca4e8921c9962e0f342bcc9e95c16.zip gdb-4c1d29734e9ca4e8921c9962e0f342bcc9e95c16.tar.gz gdb-4c1d29734e9ca4e8921c9962e0f342bcc9e95c16.tar.bz2 |
* Makefile.in (ALL_64_TARGET_OBS): Add amd64-dicos-tdep.o.
(ALL_TARGET_OBS): Add dicos-tdep.o.
(ALLDEPFILES): Add amd64-dicos-tdep.c and dicos-tdep.c.
* configure.tgt (i[34567]86-*-dicos*): Add dicos-tdep.o to
gdb_target_obs.
(x86_64-*-dicos*): Add dicos-tdep.o and amd64-dicos-tdep.o to
gdb_target_obs.
* dicos-tdep.h, dicos-tdep.c: New.
* amd64-dicos-tdep.c: New.
* i386-dicos-tdep.c: Don't include solib.h, solib-target.h or
inferior.h. Include dicos-tdep.h.
(i386_dicos_init_abi): Call dicos_init_abi.
(i386_dicos_bfd_has_symbol_p): Delete.
(i386_dicos_osabi_sniffer): Use dicos_load_module_p.
* NEWS: Mention x86-64 DICOS target support.
Diffstat (limited to 'gdb/amd64-dicos-tdep.c')
-rw-r--r-- | gdb/amd64-dicos-tdep.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/gdb/amd64-dicos-tdep.c b/gdb/amd64-dicos-tdep.c new file mode 100644 index 0000000..e10cd68 --- /dev/null +++ b/gdb/amd64-dicos-tdep.c @@ -0,0 +1,82 @@ +/* Target-dependent code for DICOS running on x86-64's, for GDB. + + Copyright (C) 2009 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" +#include "osabi.h" +#include "gdb_string.h" +#include "amd64-tdep.h" +#include "dicos-tdep.h" + +static CORE_ADDR +amd64_dicos_push_dummy_code (struct gdbarch *gdbarch, + CORE_ADDR sp, CORE_ADDR funaddr, + struct value **args, int nargs, + struct type *value_type, + CORE_ADDR *real_pc, CORE_ADDR *bp_addr, + struct regcache *regcache) +{ + int bplen; + CORE_ADDR bppc = sp; + + gdbarch_breakpoint_from_pc (gdbarch, &bppc, &bplen); + *bp_addr = sp - bplen; + *real_pc = funaddr; + + return *bp_addr; +} + +static void +amd64_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + + amd64_init_abi (info, gdbarch); + + dicos_init_abi (gdbarch); + + set_gdbarch_push_dummy_code (gdbarch, amd64_dicos_push_dummy_code); +} + +static enum gdb_osabi +amd64_dicos_osabi_sniffer (bfd *abfd) +{ + char *target_name = bfd_get_target (abfd); + + /* On amd64-DICOS, the Load Module's "header" section is 72 + bytes. */ + if (strcmp (target_name, "elf64-x86-64") == 0 + && dicos_load_module_p (abfd, 72)) + return GDB_OSABI_DICOS; + + return GDB_OSABI_UNKNOWN; +} + +/* Provide a prototype to silence -Wmissing-prototypes. */ +void _initialize_amd64_dicos_tdep (void); + +void +_initialize_amd64_dicos_tdep (void) +{ + gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour, + amd64_dicos_osabi_sniffer); + + gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64, + GDB_OSABI_DICOS, + amd64_dicos_init_abi); +} |