aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cagney <cagney@redhat.com>2003-11-09 23:52:28 +0000
committerAndrew Cagney <cagney@redhat.com>2003-11-09 23:52:28 +0000
commitbf922ad9fa36a3072ec439b024f3285feddbee7d (patch)
tree5a50e4117108245392fa4ac743c30f76c2c082c8
parent0800d55de8af4966eac7c03dea5f90158004921f (diff)
downloadgdb-bf922ad9fa36a3072ec439b024f3285feddbee7d.zip
gdb-bf922ad9fa36a3072ec439b024f3285feddbee7d.tar.gz
gdb-bf922ad9fa36a3072ec439b024f3285feddbee7d.tar.bz2
2003-11-09 Andrew Cagney <cagney@redhat.com>
* Makefile.in (arch-utils.o): Update dependencies. * arch-utils.c: Include "osabi.h". (gdbarch_info_fill): New function. * arch-utils.h (gdbarch_info_fill): Declare. * gdbarch.sh (gdbarch_update_p): Call "gdbarch_info_fill". * gdbarch.c: Re-generate.
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/arch-utils.c50
-rw-r--r--gdb/arch-utils.h6
-rw-r--r--gdb/gdbarch.c33
-rwxr-xr-xgdb/gdbarch.sh33
5 files changed, 67 insertions, 64 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 5b75c88..58f3522 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2003-11-09 Andrew Cagney <cagney@redhat.com>
+
+ * Makefile.in (arch-utils.o): Update dependencies.
+ * arch-utils.c: Include "osabi.h".
+ (gdbarch_info_fill): New function.
+ * arch-utils.h (gdbarch_info_fill): Declare.
+ * gdbarch.sh (gdbarch_update_p): Call "gdbarch_info_fill".
+ * gdbarch.c: Re-generate.
+
2003-11-09 Mark Kettenis <kettenis@gnu.org>
David S. Miller <davem@redhat.com>
diff --git a/gdb/arch-utils.c b/gdb/arch-utils.c
index 2c564e7..9483b93 100644
--- a/gdb/arch-utils.c
+++ b/gdb/arch-utils.c
@@ -31,6 +31,8 @@
#include "gdb_assert.h"
#include "sim-regno.h"
+#include "osabi.h"
+
#include "version.h"
#include "floatformat.h"
@@ -680,6 +682,54 @@ gdbarch_info_init (struct gdbarch_info *info)
info->osabi = GDB_OSABI_UNINITIALIZED;
}
+/* Similar it init, but this time fill in the blanks. Information is
+ obtained from the specified architecture, global "set ..." options,
+ and explicitly initialized INFO fields. */
+
+void
+gdbarch_info_fill (struct gdbarch *gdbarch, struct gdbarch_info *info)
+{
+ /* "(gdb) set architecture ...". */
+ if (info->bfd_arch_info == NULL
+ && !target_architecture_auto
+ && gdbarch != NULL)
+ info->bfd_arch_info = gdbarch_bfd_arch_info (gdbarch);
+ if (info->bfd_arch_info == NULL
+ && info->abfd != NULL
+ && bfd_get_arch (info->abfd) != bfd_arch_unknown
+ && bfd_get_arch (info->abfd) != bfd_arch_obscure)
+ info->bfd_arch_info = bfd_get_arch_info (info->abfd);
+ if (info->bfd_arch_info == NULL
+ && gdbarch != NULL)
+ info->bfd_arch_info = gdbarch_bfd_arch_info (gdbarch);
+
+ /* "(gdb) set byte-order ...". */
+ if (info->byte_order == BFD_ENDIAN_UNKNOWN
+ && !target_byte_order_auto
+ && gdbarch != NULL)
+ info->byte_order = gdbarch_byte_order (gdbarch);
+ /* From the INFO struct. */
+ if (info->byte_order == BFD_ENDIAN_UNKNOWN
+ && info->abfd != NULL)
+ info->byte_order = (bfd_big_endian (info->abfd) ? BFD_ENDIAN_BIG
+ : bfd_little_endian (info->abfd) ? BFD_ENDIAN_LITTLE
+ : BFD_ENDIAN_UNKNOWN);
+ /* From the current target. */
+ if (info->byte_order == BFD_ENDIAN_UNKNOWN
+ && gdbarch != NULL)
+ info->byte_order = gdbarch_byte_order (gdbarch);
+
+ /* "(gdb) set osabi ...". Handled by gdbarch_lookup_osabi. */
+ if (info->osabi == GDB_OSABI_UNINITIALIZED)
+ info->osabi = gdbarch_lookup_osabi (info->abfd);
+ if (info->osabi == GDB_OSABI_UNINITIALIZED
+ && gdbarch != NULL)
+ info->osabi = gdbarch_osabi (gdbarch);
+
+ /* Must have at least filled in the architecture. */
+ gdb_assert (info->bfd_arch_info != NULL);
+}
+
/* */
extern initialize_file_ftype _initialize_gdbarch_utils; /* -Wmissing-prototypes */
diff --git a/gdb/arch-utils.h b/gdb/arch-utils.h
index a180fda..db9d24e 100644
--- a/gdb/arch-utils.h
+++ b/gdb/arch-utils.h
@@ -153,6 +153,12 @@ extern int legacy_register_sim_regno (int regnum);
default values are not zero. */
extern void gdbarch_info_init (struct gdbarch_info *info);
+/* Similar it init, but this time fill in the blanks. Information is
+ obtained from the specified architecture, global "set ..." options,
+ and explicitly initialized INFO fields. */
+extern void gdbarch_info_fill (struct gdbarch *gdbarch,
+ struct gdbarch_info *info);
+
/* Return the architecture for ABFD. If no suitable architecture
could be find, return NULL. */
diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c
index 75652a8..40fbdd9 100644
--- a/gdb/gdbarch.c
+++ b/gdb/gdbarch.c
@@ -5922,38 +5922,7 @@ gdbarch_update_p (struct gdbarch_info info)
/* Fill in missing parts of the INFO struct using a number of
sources: ``set ...''; INFOabfd supplied; existing target. */
-
- /* ``(gdb) set architecture ...'' */
- if (info.bfd_arch_info == NULL
- && !TARGET_ARCHITECTURE_AUTO)
- info.bfd_arch_info = TARGET_ARCHITECTURE;
- if (info.bfd_arch_info == NULL
- && info.abfd != NULL
- && bfd_get_arch (info.abfd) != bfd_arch_unknown
- && bfd_get_arch (info.abfd) != bfd_arch_obscure)
- info.bfd_arch_info = bfd_get_arch_info (info.abfd);
- if (info.bfd_arch_info == NULL)
- info.bfd_arch_info = TARGET_ARCHITECTURE;
-
- /* ``(gdb) set byte-order ...'' */
- if (info.byte_order == BFD_ENDIAN_UNKNOWN
- && !TARGET_BYTE_ORDER_AUTO)
- info.byte_order = TARGET_BYTE_ORDER;
- /* From the INFO struct. */
- if (info.byte_order == BFD_ENDIAN_UNKNOWN
- && info.abfd != NULL)
- info.byte_order = (bfd_big_endian (info.abfd) ? BFD_ENDIAN_BIG
- : bfd_little_endian (info.abfd) ? BFD_ENDIAN_LITTLE
- : BFD_ENDIAN_UNKNOWN);
- /* From the current target. */
- if (info.byte_order == BFD_ENDIAN_UNKNOWN)
- info.byte_order = TARGET_BYTE_ORDER;
-
- /* ``(gdb) set osabi ...'' is handled by gdbarch_lookup_osabi. */
- if (info.osabi == GDB_OSABI_UNINITIALIZED)
- info.osabi = gdbarch_lookup_osabi (info.abfd);
- if (info.osabi == GDB_OSABI_UNINITIALIZED)
- info.osabi = current_gdbarch->osabi;
+ gdbarch_info_fill (current_gdbarch, &info);
/* Must have found some sort of architecture. */
gdb_assert (info.bfd_arch_info != NULL);
diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh
index c1c39f6..afc5e02 100755
--- a/gdb/gdbarch.sh
+++ b/gdb/gdbarch.sh
@@ -2138,38 +2138,7 @@ gdbarch_update_p (struct gdbarch_info info)
/* Fill in missing parts of the INFO struct using a number of
sources: \`\`set ...''; INFOabfd supplied; existing target. */
-
- /* \`\`(gdb) set architecture ...'' */
- if (info.bfd_arch_info == NULL
- && !TARGET_ARCHITECTURE_AUTO)
- info.bfd_arch_info = TARGET_ARCHITECTURE;
- if (info.bfd_arch_info == NULL
- && info.abfd != NULL
- && bfd_get_arch (info.abfd) != bfd_arch_unknown
- && bfd_get_arch (info.abfd) != bfd_arch_obscure)
- info.bfd_arch_info = bfd_get_arch_info (info.abfd);
- if (info.bfd_arch_info == NULL)
- info.bfd_arch_info = TARGET_ARCHITECTURE;
-
- /* \`\`(gdb) set byte-order ...'' */
- if (info.byte_order == BFD_ENDIAN_UNKNOWN
- && !TARGET_BYTE_ORDER_AUTO)
- info.byte_order = TARGET_BYTE_ORDER;
- /* From the INFO struct. */
- if (info.byte_order == BFD_ENDIAN_UNKNOWN
- && info.abfd != NULL)
- info.byte_order = (bfd_big_endian (info.abfd) ? BFD_ENDIAN_BIG
- : bfd_little_endian (info.abfd) ? BFD_ENDIAN_LITTLE
- : BFD_ENDIAN_UNKNOWN);
- /* From the current target. */
- if (info.byte_order == BFD_ENDIAN_UNKNOWN)
- info.byte_order = TARGET_BYTE_ORDER;
-
- /* \`\`(gdb) set osabi ...'' is handled by gdbarch_lookup_osabi. */
- if (info.osabi == GDB_OSABI_UNINITIALIZED)
- info.osabi = gdbarch_lookup_osabi (info.abfd);
- if (info.osabi == GDB_OSABI_UNINITIALIZED)
- info.osabi = current_gdbarch->osabi;
+ gdbarch_info_fill (current_gdbarch, &info);
/* Must have found some sort of architecture. */
gdb_assert (info.bfd_arch_info != NULL);