2002-08-21 Elena Zannoni <ezannoni@redhat.com>

* rs6000-tdep.c (rs6000_gdbarch_init): Figure out whether we have
        an e500 executable.
This commit is contained in:
Elena Zannoni 2002-08-21 22:56:02 +00:00
parent 18f8152171
commit 5bf1c6772c
2 changed files with 27 additions and 0 deletions

View file

@ -1,3 +1,8 @@
2002-08-21 Elena Zannoni <ezannoni@redhat.com>
* rs6000-tdep.c (rs6000_gdbarch_init): Figure out whether we have
an e500 executable.
2002-08-21 Michael Snyder <msnyder@redhat.com>
* mips-tdep.c (MSYMBOL_IS_SPECIAL): Replace macro with function.

View file

@ -2426,6 +2426,7 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
bfd abfd;
int sysv_abi;
enum gdb_osabi osabi = GDB_OSABI_UNKNOWN;
asection *sect;
from_xcoff_exec = info.abfd && info.abfd->format == bfd_object &&
bfd_get_flavour (info.abfd) == bfd_target_xcoff_flavour;
@ -2499,6 +2500,27 @@ rs6000_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
tdep = xmalloc (sizeof (struct gdbarch_tdep));
tdep->wordsize = wordsize;
tdep->osabi = osabi;
/* For e500 executables, the apuinfo section is of help here. Such
section contains the identifier and revision number of each
Application-specific Processing Unit that is present on the
chip. The content of the section is determined by the assembler
which looks at each instruction and determines which unit (and
which version of it) can execute it. In our case we just look for
the existance of the section. */
if (info.abfd)
{
sect = bfd_get_section_by_name (info.abfd, ".PPC.EMB.apuinfo");
if (sect)
{
arch = info.bfd_arch_info->arch;
mach = bfd_mach_ppc_e500;
bfd_default_set_arch_mach (&abfd, arch, mach);
info.bfd_arch_info = bfd_get_arch_info (&abfd);
}
}
gdbarch = gdbarch_alloc (&info, tdep);
power = arch == bfd_arch_rs6000;