* arch-utils.c (gdbarch_update_p): Use default values for

info.abfd and info.target_desc if they are NULL.
	(gdbarch_from_bfd): Remove assertion.
	(set_gdbarch_from_file): Call gdbarch_find_by_info directly,
	using the current target description.
	(gdbarch_info_fill): Do not use default values for info->abfd
	and info->target_desc.
This commit is contained in:
Ulrich Weigand 2008-05-04 15:21:05 +00:00
parent b2de52bb5a
commit a7f1256dcb
2 changed files with 29 additions and 20 deletions

View File

@ -1,3 +1,13 @@
2008-05-04 Ulrich Weigand <uweigand@de.ibm.com>
* arch-utils.c (gdbarch_update_p): Use default values for
info.abfd and info.target_desc if they are NULL.
(gdbarch_from_bfd): Remove assertion.
(set_gdbarch_from_file): Call gdbarch_find_by_info directly,
using the current target description.
(gdbarch_info_fill): Do not use default values for info->abfd
and info->target_desc.
2008-05-04 Jan Kratochvil <jan.kratochvil@redhat.com>
* symfile.c (reread_symbols): Reload EXEC_BFD on its change.

View File

@ -466,7 +466,19 @@ set_architecture (char *ignore_args, int from_tty, struct cmd_list_element *c)
int
gdbarch_update_p (struct gdbarch_info info)
{
struct gdbarch *new_gdbarch = gdbarch_find_by_info (info);
struct gdbarch *new_gdbarch;
/* Check for the current file. */
if (info.abfd == NULL)
info.abfd = exec_bfd;
if (info.abfd == NULL)
info.abfd = core_bfd;
/* Check for the current target description. */
if (info.target_desc == NULL)
info.target_desc = target_current_description ();
new_gdbarch = gdbarch_find_by_info (info);
/* If there no architecture by that name, reject the request. */
if (new_gdbarch == NULL)
@ -507,14 +519,6 @@ struct gdbarch *
gdbarch_from_bfd (bfd *abfd)
{
struct gdbarch_info info;
/* If we call gdbarch_find_by_info without filling in info.abfd,
then it will use the global exec_bfd. That's fine if we don't
have one of those either. And that's the only time we should
reach here with a NULL ABFD argument - when we are discarding
the executable. */
gdb_assert (abfd != NULL || exec_bfd == NULL);
gdbarch_info_init (&info);
info.abfd = abfd;
return gdbarch_find_by_info (info);
@ -526,9 +530,14 @@ gdbarch_from_bfd (bfd *abfd)
void
set_gdbarch_from_file (bfd *abfd)
{
struct gdbarch_info info;
struct gdbarch *gdbarch;
gdbarch = gdbarch_from_bfd (abfd);
gdbarch_info_init (&info);
info.abfd = abfd;
info.target_desc = target_current_description ();
gdbarch = gdbarch_find_by_info (info);
if (gdbarch == NULL)
error (_("Architecture of file not recognized."));
deprecated_current_gdbarch_select_hack (gdbarch);
@ -668,16 +677,6 @@ gdbarch_info_init (struct gdbarch_info *info)
void
gdbarch_info_fill (struct gdbarch_info *info)
{
/* Check for the current file. */
if (info->abfd == NULL)
info->abfd = exec_bfd;
if (info->abfd == NULL)
info->abfd = core_bfd;
/* Check for the current target description. */
if (info->target_desc == NULL)
info->target_desc = target_current_description ();
/* "(gdb) set architecture ...". */
if (info->bfd_arch_info == NULL
&& target_architecture_user)