* configure.tgt: Add i[34567]86-*-dicos* and x86_64-*-dicos*.
(i[34567]86-*-dicos*, x86_64-*-dicos*): Set gdb_osabi to GDB_OSABI_DICOS. * defs.h (enum gdb_osabi): Add GDB_OSABI_DICOS. * osabi.c (gdb_osabi_name): Add "DICOS". * i386-dicos-tdep.c: New file. * Makefile.in (ALL_TARGET_OBS): Add i386-dicos-tdep.o. (ALLDEPFILES): Add i386-dicos-tdep.c. (i386-dicos-tdep.o): New rule.
This commit is contained in:
parent
728c8f5867
commit
a15c5c831a
6 changed files with 149 additions and 0 deletions
|
@ -1,3 +1,18 @@
|
||||||
|
2008-05-01 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
|
* configure.tgt: Add i[34567]86-*-dicos* and x86_64-*-dicos*.
|
||||||
|
(i[34567]86-*-dicos*, x86_64-*-dicos*):
|
||||||
|
Set gdb_osabi to GDB_OSABI_DICOS.
|
||||||
|
|
||||||
|
* defs.h (enum gdb_osabi): Add GDB_OSABI_DICOS.
|
||||||
|
* osabi.c (gdb_osabi_name): Add "DICOS".
|
||||||
|
|
||||||
|
* i386-dicos-tdep.c: New file.
|
||||||
|
|
||||||
|
* Makefile.in (ALL_TARGET_OBS): Add i386-dicos-tdep.o.
|
||||||
|
(ALLDEPFILES): Add i386-dicos-tdep.c.
|
||||||
|
(i386-dicos-tdep.o): New rule.
|
||||||
|
|
||||||
2008-05-01 Pedro Alves <pedro@codesourcery.com>
|
2008-05-01 Pedro Alves <pedro@codesourcery.com>
|
||||||
|
|
||||||
* linux-nat.c (linux_nat_switch_fork): Reinit GDB's thread list
|
* linux-nat.c (linux_nat_switch_fork): Reinit GDB's thread list
|
||||||
|
|
|
@ -464,6 +464,7 @@ ALL_TARGET_OBS = \
|
||||||
i386bsd-tdep.o i386-cygwin-tdep.o i386fbsd-tdep.o i386gnu-tdep.o \
|
i386bsd-tdep.o i386-cygwin-tdep.o i386fbsd-tdep.o i386gnu-tdep.o \
|
||||||
i386-linux-tdep.o i386nbsd-tdep.o i386-nto-tdep.o i386obsd-tdep.o \
|
i386-linux-tdep.o i386nbsd-tdep.o i386-nto-tdep.o i386obsd-tdep.o \
|
||||||
i386-sol2-tdep.o i386-tdep.o i387-tdep.o \
|
i386-sol2-tdep.o i386-tdep.o i387-tdep.o \
|
||||||
|
i386-dicos-tdep.o \
|
||||||
iq2000-tdep.o \
|
iq2000-tdep.o \
|
||||||
m32c-tdep.o \
|
m32c-tdep.o \
|
||||||
m32r-linux-tdep.o m32r-tdep.o \
|
m32r-linux-tdep.o m32r-tdep.o \
|
||||||
|
@ -1572,6 +1573,7 @@ ALLDEPFILES = \
|
||||||
i386bsd-nat.c i386bsd-tdep.c i386fbsd-nat.c i386fbsd-tdep.c \
|
i386bsd-nat.c i386bsd-tdep.c i386fbsd-nat.c i386fbsd-tdep.c \
|
||||||
i386nbsd-nat.c i386nbsd-tdep.c i386obsd-nat.c i386obsd-tdep.c \
|
i386nbsd-nat.c i386nbsd-tdep.c i386obsd-nat.c i386obsd-tdep.c \
|
||||||
i387-tdep.c \
|
i387-tdep.c \
|
||||||
|
i386-dicos-tdep.c \
|
||||||
i386-linux-tdep.c i386-nat.c \
|
i386-linux-tdep.c i386-nat.c \
|
||||||
i386-sol2-nat.c i386-sol2-tdep.c \
|
i386-sol2-nat.c i386-sol2-tdep.c \
|
||||||
i386gnu-nat.c i386gnu-tdep.c \
|
i386gnu-nat.c i386gnu-tdep.c \
|
||||||
|
@ -2235,6 +2237,8 @@ i386bsd-tdep.o: i386bsd-tdep.c $(defs_h) $(arch_utils_h) $(frame_h) \
|
||||||
i386-cygwin-tdep.o: i386-cygwin-tdep.c $(defs_h) $(osabi_h) $(gdb_string_h) \
|
i386-cygwin-tdep.o: i386-cygwin-tdep.c $(defs_h) $(osabi_h) $(gdb_string_h) \
|
||||||
$(i386_tdep_h) $(regset_h) $(gdb_obstack_h) $(xml_support_h) \
|
$(i386_tdep_h) $(regset_h) $(gdb_obstack_h) $(xml_support_h) \
|
||||||
$(gdbcore_h) $(solib_h) $(solib_target_h) $(i386_cygwin_tdep_h)
|
$(gdbcore_h) $(solib_h) $(solib_target_h) $(i386_cygwin_tdep_h)
|
||||||
|
i386-dicos-tdep.o: i386-dicos-tdep.c $(defs_h) $(osabi_h) $(gdb_string_h) \
|
||||||
|
$(solib_h) $(solib_target_h)
|
||||||
i386fbsd-nat.o: i386fbsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \
|
i386fbsd-nat.o: i386fbsd-nat.c $(defs_h) $(inferior_h) $(regcache_h) \
|
||||||
$(target_h) $(fbsd_nat_h) $(i386_tdep_h) $(i386bsd_nat_h) \
|
$(target_h) $(fbsd_nat_h) $(i386_tdep_h) $(i386bsd_nat_h) \
|
||||||
$(bsd_kvm_h)
|
$(bsd_kvm_h)
|
||||||
|
|
|
@ -145,6 +145,12 @@ hppa*-*-*)
|
||||||
gdb_target_obs="hppa-tdep.o"
|
gdb_target_obs="hppa-tdep.o"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
i[34567]86-*-dicos*)
|
||||||
|
# Target: DICOS/i386
|
||||||
|
gdb_target_obs="i386-tdep.o i387-tdep.o \
|
||||||
|
i386-dicos-tdep.o \
|
||||||
|
corelow.o solib.o solib-target.o"
|
||||||
|
;;
|
||||||
i[34567]86-*-freebsd* | i[34567]86-*-kfreebsd*-gnu)
|
i[34567]86-*-freebsd* | i[34567]86-*-kfreebsd*-gnu)
|
||||||
# Target: FreeBSD/i386
|
# Target: FreeBSD/i386
|
||||||
gdb_target_obs="i386-tdep.o i387-tdep.o i386bsd-tdep.o i386fbsd-tdep.o \
|
gdb_target_obs="i386-tdep.o i387-tdep.o i386bsd-tdep.o i386fbsd-tdep.o \
|
||||||
|
@ -491,6 +497,12 @@ vax-*-*)
|
||||||
gdb_target_obs="vax-tdep.o"
|
gdb_target_obs="vax-tdep.o"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
x86_64-*-dicos*)
|
||||||
|
# Target: DICOS/x86-64
|
||||||
|
gdb_target_obs="amd64-tdep.o i386-tdep.o i387-tdep.o \
|
||||||
|
i386-dicos-tdep.o \
|
||||||
|
corelow.o solib.o solib-target.o"
|
||||||
|
;;
|
||||||
x86_64-*-linux*)
|
x86_64-*-linux*)
|
||||||
# Target: GNU/Linux x86-64
|
# Target: GNU/Linux x86-64
|
||||||
gdb_target_obs="amd64-tdep.o amd64-linux-tdep.o i386-tdep.o \
|
gdb_target_obs="amd64-tdep.o amd64-linux-tdep.o i386-tdep.o \
|
||||||
|
@ -542,4 +554,5 @@ m68*-*-openbsd* | m88*-*-openbsd* | vax-*-openbsd*) ;;
|
||||||
*-*-mingw32ce*) gdb_osabi=GDB_OSABI_WINCE ;;
|
*-*-mingw32ce*) gdb_osabi=GDB_OSABI_WINCE ;;
|
||||||
*-*-mingw* | *-*-cygwin*)
|
*-*-mingw* | *-*-cygwin*)
|
||||||
gdb_osabi=GDB_OSABI_CYGWIN ;;
|
gdb_osabi=GDB_OSABI_CYGWIN ;;
|
||||||
|
*-*-dicos*) gdb_osabi=GDB_OSABI_DICOS ;;
|
||||||
esac
|
esac
|
||||||
|
|
|
@ -924,6 +924,7 @@ enum gdb_osabi
|
||||||
|
|
||||||
GDB_OSABI_CYGWIN,
|
GDB_OSABI_CYGWIN,
|
||||||
GDB_OSABI_AIX,
|
GDB_OSABI_AIX,
|
||||||
|
GDB_OSABI_DICOS,
|
||||||
|
|
||||||
GDB_OSABI_INVALID /* keep this last */
|
GDB_OSABI_INVALID /* keep this last */
|
||||||
};
|
};
|
||||||
|
|
115
gdb/i386-dicos-tdep.c
Normal file
115
gdb/i386-dicos-tdep.c
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
/* Target-dependent code for DICOS running on i386's, for GDB.
|
||||||
|
|
||||||
|
Copyright (C) 2008 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 "solib.h"
|
||||||
|
#include "solib-target.h"
|
||||||
|
|
||||||
|
static void
|
||||||
|
i386_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
|
||||||
|
{
|
||||||
|
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
||||||
|
|
||||||
|
set_solib_ops (gdbarch, &solib_target_so_ops);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Look in the elf symbol table of ABFD for a symbol named WANTED.
|
||||||
|
Return true if found. */
|
||||||
|
static int
|
||||||
|
i386_dicos_bfd_has_symbol_p (bfd *abfd, const char *wanted)
|
||||||
|
{
|
||||||
|
long storage_needed;
|
||||||
|
int ret = 0;
|
||||||
|
asymbol **symbol_table = NULL;
|
||||||
|
|
||||||
|
storage_needed = bfd_get_symtab_upper_bound (abfd);
|
||||||
|
if (storage_needed < 0)
|
||||||
|
{
|
||||||
|
warning (_("Can't read elf symbols from %s: %s"), bfd_get_filename (abfd),
|
||||||
|
bfd_errmsg (bfd_get_error ()));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (storage_needed > 0)
|
||||||
|
{
|
||||||
|
long i, symcount;
|
||||||
|
|
||||||
|
symbol_table = xmalloc (storage_needed);
|
||||||
|
symcount = bfd_canonicalize_symtab (abfd, symbol_table);
|
||||||
|
|
||||||
|
if (symcount < 0)
|
||||||
|
warning (_("Can't read elf symbols from %s: %s"),
|
||||||
|
bfd_get_filename (abfd),
|
||||||
|
bfd_errmsg (bfd_get_error ()));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (i = 0; i < symcount; i++)
|
||||||
|
{
|
||||||
|
asymbol *sym = symbol_table[i];
|
||||||
|
if (sym->name != NULL
|
||||||
|
&& wanted[0] == sym->name[0]
|
||||||
|
&& strcmp (wanted + 1, sym->name + 1) == 0)
|
||||||
|
{
|
||||||
|
ret = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
xfree (symbol_table);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static enum gdb_osabi
|
||||||
|
i386_dicos_osabi_sniffer (bfd *abfd)
|
||||||
|
{
|
||||||
|
char *target_name = bfd_get_target (abfd);
|
||||||
|
|
||||||
|
/* DICOS debug info files don't have a .note.ABI-tag marker or
|
||||||
|
something similar. We do know there's always a "header" section
|
||||||
|
of 36 bytes, and there's always a "Dicos_loadModuleInfo" symbol
|
||||||
|
defined. Look for the section first, as that should be
|
||||||
|
cheaper. */
|
||||||
|
if (strcmp (target_name, "elf32-i386") == 0)
|
||||||
|
{
|
||||||
|
asection *section = bfd_get_section_by_name (abfd, "header");
|
||||||
|
if (section
|
||||||
|
&& bfd_section_size (abfd, section) == 36
|
||||||
|
&& i386_dicos_bfd_has_symbol_p (abfd, "Dicos_loadModuleInfo"))
|
||||||
|
return GDB_OSABI_DICOS;
|
||||||
|
}
|
||||||
|
|
||||||
|
return GDB_OSABI_UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||||
|
void _initialize_i386_dicos_tdep (void);
|
||||||
|
|
||||||
|
void
|
||||||
|
_initialize_i386_dicos_tdep (void)
|
||||||
|
{
|
||||||
|
gdbarch_register_osabi_sniffer (bfd_arch_i386, bfd_target_elf_flavour,
|
||||||
|
i386_dicos_osabi_sniffer);
|
||||||
|
|
||||||
|
gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_DICOS,
|
||||||
|
i386_dicos_init_abi);
|
||||||
|
}
|
|
@ -72,6 +72,7 @@ static const char * const gdb_osabi_names[] =
|
||||||
|
|
||||||
"Cygwin",
|
"Cygwin",
|
||||||
"AIX",
|
"AIX",
|
||||||
|
"DICOS",
|
||||||
|
|
||||||
"<invalid>"
|
"<invalid>"
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue