gdb: remove gdbarch_info_init

While reviewing another patch, I realized that gdbarch_info_init could
easily be removed in favor of initializing gdbarch_info fields directly
in the struct declaration.  The only odd part is the union.  I don't
know if it's actually important for it to be zero-initialized, but I
presume it is.  I added a constructor to gdbarch_info to take care of
that.  A proper solution would be to use std::variant.  Or, these could
also be separate fields, the little extra space required wouldn't
matter.

gdb/ChangeLog:

	* gdbarch.sh (struct gdbarch_info): Initialize fields, add
	constructor.
	* gdbarch.h: Re-generate.
	* arch-utils.h (gdbarch_info_init): Remove, delete all usages.
	* arch-utils.c (gdbarch_info_init): Remove.

Change-Id: I7502e08fe0f278d84eef1667a072e8a97bda5ab5
This commit is contained in:
Simon Marchi
2021-06-28 11:49:22 -04:00
parent c87c999c51
commit b447dd03c1
18 changed files with 43 additions and 92 deletions

View File

@ -389,8 +389,6 @@ set_endian (const char *ignore_args, int from_tty, struct cmd_list_element *c)
{
struct gdbarch_info info;
gdbarch_info_init (&info);
if (set_endian_string == endian_auto)
{
target_byte_order_user = BFD_ENDIAN_UNKNOWN;
@ -548,8 +546,6 @@ set_architecture (const char *ignore_args,
{
struct gdbarch_info info;
gdbarch_info_init (&info);
if (strcmp (set_architecture_string, "auto") == 0)
{
target_architecture_user = NULL;
@ -630,7 +626,6 @@ struct gdbarch *
gdbarch_from_bfd (bfd *abfd)
{
struct gdbarch_info info;
gdbarch_info_init (&info);
info.abfd = abfd;
return gdbarch_find_by_info (info);
@ -645,7 +640,6 @@ set_gdbarch_from_file (bfd *abfd)
struct gdbarch_info info;
struct gdbarch *gdbarch;
gdbarch_info_init (&info);
info.abfd = abfd;
info.target_desc = target_current_description ();
gdbarch = gdbarch_find_by_info (info);
@ -679,10 +673,6 @@ void
initialize_current_architecture (void)
{
const char **arches = gdbarch_printable_names ();
struct gdbarch_info info;
/* determine a default architecture and byte order. */
gdbarch_info_init (&info);
/* Find a default architecture. */
if (default_bfd_arch == NULL)
@ -705,6 +695,7 @@ initialize_current_architecture (void)
_("initialize_current_architecture: Arch not found"));
}
gdbarch_info info;
info.bfd_arch_info = default_bfd_arch;
/* Take several guesses at a byte order. */
@ -769,21 +760,6 @@ initialize_current_architecture (void)
}
}
/* Initialize a gdbarch info to values that will be automatically
overridden. Note: Originally, this ``struct info'' was initialized
using memset(0). Unfortunately, that ran into problems, namely
BFD_ENDIAN_BIG is zero. An explicit initialization function that
can explicitly set each field to a well defined value is used. */
void
gdbarch_info_init (struct gdbarch_info *info)
{
memset (info, 0, sizeof (struct gdbarch_info));
info->byte_order = BFD_ENDIAN_UNKNOWN;
info->byte_order_for_code = info->byte_order;
}
/* Similar to init, but this time fill in the blanks. Information is
obtained from the global "set ..." options and explicitly
initialized INFO fields. */