diff options
author | Andrew Cagney <cagney@redhat.com> | 2003-11-09 23:52:28 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2003-11-09 23:52:28 +0000 |
commit | bf922ad9fa36a3072ec439b024f3285feddbee7d (patch) | |
tree | 5a50e4117108245392fa4ac743c30f76c2c082c8 /gdb/arch-utils.c | |
parent | 0800d55de8af4966eac7c03dea5f90158004921f (diff) | |
download | gdb-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.
Diffstat (limited to 'gdb/arch-utils.c')
-rw-r--r-- | gdb/arch-utils.c | 50 |
1 files changed, 50 insertions, 0 deletions
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 */ |