summaryrefslogtreecommitdiff
path: root/gdb/arch-utils.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2008-05-04 15:21:05 +0000
committerUlrich Weigand <uweigand@de.ibm.com>2008-05-04 15:21:05 +0000
commitc21c1d817c79ab781931b6e0aea8c95107b2b2b7 (patch)
tree67c2c79722b1a3a8232ca43b010373a6a36d4602 /gdb/arch-utils.c
parent0b7a2b0e57e9f4525133824d440f364ca1774b5e (diff)
downloadgdb-c21c1d817c79ab781931b6e0aea8c95107b2b2b7.tar.gz
* 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.
Diffstat (limited to 'gdb/arch-utils.c')
-rw-r--r--gdb/arch-utils.c39
1 files changed, 19 insertions, 20 deletions
diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c
index c1816da67d9..259d1e3a5f4 100644
--- a/gdb/arch-utils.c
+++ b/gdb/arch-utils.c
@@ -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)