* arch-utils.c (deprecated_select_gdbarch_hack): New function.
(gdbarch_from_bfd): New function. (set_gdbarch_from_file): Re-implement using gdbarch_from_bfd and deprecated_select_gdbarch_hack. * arch-utils.h (gdbarch_from_bfd): New prototype.
This commit is contained in:
parent
0bcad58476
commit
2b0266504e
3 changed files with 68 additions and 4 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2003-10-27 Mark Kettenis <kettenis@gnu.org>
|
||||||
|
|
||||||
|
* arch-utils.c (deprecated_select_gdbarch_hack): New function.
|
||||||
|
(gdbarch_from_bfd): New function.
|
||||||
|
(set_gdbarch_from_file): Re-implement using gdbarch_from_bfd and
|
||||||
|
deprecated_select_gdbarch_hack.
|
||||||
|
* arch-utils.h (gdbarch_from_bfd): New prototype.
|
||||||
|
|
||||||
2003-10-27 Andrew Cagney <cagney@redhat.com>
|
2003-10-27 Andrew Cagney <cagney@redhat.com>
|
||||||
|
|
||||||
* osabi.c (gdbarch_init_osabi): Use info.bfd_arch_info instead of
|
* osabi.c (gdbarch_init_osabi): Use info.bfd_arch_info instead of
|
||||||
|
|
|
@ -496,17 +496,68 @@ set_architecture (char *ignore_args, int from_tty, struct cmd_list_element *c)
|
||||||
show_architecture (NULL, from_tty);
|
show_architecture (NULL, from_tty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FIXME: kettenis/20031124: Of the functions that follow, only
|
||||||
|
gdbarch_from_bfd is supposed to survive. The others will
|
||||||
|
dissappear since in the future GDB will (hopefully) be truly
|
||||||
|
multi-arch. However, for now we're still stuck with the concept of
|
||||||
|
a single active architecture. */
|
||||||
|
|
||||||
|
/* Make GDBARCH the currently selected architecture. */
|
||||||
|
|
||||||
|
static void
|
||||||
|
deprecated_select_gdbarch_hack (struct gdbarch *gdbarch)
|
||||||
|
{
|
||||||
|
struct gdbarch_info info;
|
||||||
|
|
||||||
|
/* FIXME: kettenis/20031024: The only way to select a specific
|
||||||
|
architecture is to clone its `struct gdbarch_info', and update
|
||||||
|
according to that copy. This is gross, but significant work will
|
||||||
|
need to be done before we can take a more sane approach. */
|
||||||
|
gdbarch_info_init (&info);
|
||||||
|
info.bfd_arch_info = gdbarch_bfd_arch_info (gdbarch);
|
||||||
|
info.byte_order = gdbarch_byte_order (gdbarch);
|
||||||
|
info.osabi = gdbarch_osabi (gdbarch);
|
||||||
|
gdbarch_update_p (info);
|
||||||
|
gdb_assert (gdbarch == current_gdbarch);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the architecture for ABFD. If no suitable architecture
|
||||||
|
could be find, return NULL. */
|
||||||
|
|
||||||
|
struct gdbarch *
|
||||||
|
gdbarch_from_bfd (bfd *abfd)
|
||||||
|
{
|
||||||
|
struct gdbarch *old_gdbarch = current_gdbarch;
|
||||||
|
struct gdbarch *new_gdbarch;
|
||||||
|
struct gdbarch_info info;
|
||||||
|
|
||||||
|
/* FIXME: kettenis/20031024: The only way to find the architecture
|
||||||
|
for a certain BFD is by doing an architecture update. This
|
||||||
|
activates the architecture, so we need to reactivate the old
|
||||||
|
architecture. This is gross, but significant work will need to
|
||||||
|
be done before we can take a more sane approach. */
|
||||||
|
gdbarch_info_init (&info);
|
||||||
|
info.abfd = abfd;
|
||||||
|
if (! gdbarch_update_p (info))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
new_gdbarch = current_gdbarch;
|
||||||
|
deprecated_select_gdbarch_hack (old_gdbarch);
|
||||||
|
return new_gdbarch;
|
||||||
|
}
|
||||||
|
|
||||||
/* Set the dynamic target-system-dependent parameters (architecture,
|
/* Set the dynamic target-system-dependent parameters (architecture,
|
||||||
byte-order) using information found in the BFD */
|
byte-order) using information found in the BFD */
|
||||||
|
|
||||||
void
|
void
|
||||||
set_gdbarch_from_file (bfd *abfd)
|
set_gdbarch_from_file (bfd *abfd)
|
||||||
{
|
{
|
||||||
struct gdbarch_info info;
|
struct gdbarch *gdbarch;
|
||||||
gdbarch_info_init (&info);
|
|
||||||
info.abfd = abfd;
|
gdbarch = gdbarch_from_bfd (abfd);
|
||||||
if (! gdbarch_update_p (info))
|
if (gdbarch == NULL)
|
||||||
error ("Architecture of file not recognized.\n");
|
error ("Architecture of file not recognized.\n");
|
||||||
|
deprecated_select_gdbarch_hack (gdbarch);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize the current architecture. Update the ``set
|
/* Initialize the current architecture. Update the ``set
|
||||||
|
|
|
@ -151,4 +151,9 @@ extern int legacy_register_sim_regno (int regnum);
|
||||||
default values are not zero. */
|
default values are not zero. */
|
||||||
extern void gdbarch_info_init (struct gdbarch_info *info);
|
extern void gdbarch_info_init (struct gdbarch_info *info);
|
||||||
|
|
||||||
|
/* Return the architecture for ABFD. If no suitable architecture
|
||||||
|
could be find, return NULL. */
|
||||||
|
|
||||||
|
extern struct gdbarch *gdbarch_from_bfd (bfd *abfd);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue