2003-11-09 Andrew Cagney * 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. Index: arch-utils.c =================================================================== RCS file: /cvs/src/src/gdb/arch-utils.c,v retrieving revision 1.102 diff -u -r1.102 arch-utils.c --- arch-utils.c 9 Nov 2003 12:07:16 -0000 1.102 +++ arch-utils.c 9 Nov 2003 23:42:45 -0000 @@ -31,6 +31,8 @@ #include "gdb_assert.h" #include "sim-regno.h" +#include "osabi.h" + #include "version.h" #include "floatformat.h" @@ -678,6 +680,54 @@ memset (info, 0, sizeof (struct gdbarch_info)); info->byte_order = BFD_ENDIAN_UNKNOWN; 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); } /* */ Index: arch-utils.h =================================================================== RCS file: /cvs/src/src/gdb/arch-utils.h,v retrieving revision 1.60 diff -u -r1.60 arch-utils.h --- arch-utils.h 9 Nov 2003 12:07:16 -0000 1.60 +++ arch-utils.h 9 Nov 2003 23:42:45 -0000 @@ -153,6 +153,12 @@ 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. */ Index: gdbarch.c =================================================================== RCS file: /cvs/src/src/gdb/gdbarch.c,v retrieving revision 1.256 diff -u -r1.256 gdbarch.c --- gdbarch.c 9 Nov 2003 12:07:16 -0000 1.256 +++ gdbarch.c 9 Nov 2003 23:43:07 -0000 @@ -5922,38 +5922,7 @@ /* 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); Index: gdbarch.sh =================================================================== RCS file: /cvs/src/src/gdb/gdbarch.sh,v retrieving revision 1.281 diff -u -r1.281 gdbarch.sh --- gdbarch.sh 9 Nov 2003 12:07:16 -0000 1.281 +++ gdbarch.sh 9 Nov 2003 23:43:30 -0000 @@ -2138,38 +2138,7 @@ /* 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);