* gdbarch.sh (gdbarch_update_p): Keep the list of architectures

sorted in most most-recent-used order.  Document.
* gdbarch.h, gdbarch.c: Regenerate.
This commit is contained in:
Andrew Cagney 2002-04-20 17:41:18 +00:00
parent c04a1aa88f
commit 0f79675b65
4 changed files with 104 additions and 52 deletions

View File

@ -1,3 +1,9 @@
2002-04-20 Andrew Cagney <ac131313@redhat.com>
* gdbarch.sh (gdbarch_update_p): Keep the list of architectures
sorted in most most-recent-used order. Document.
* gdbarch.h, gdbarch.c: Regenerate.
2002-04-20 Daniel Jacobowitz <drow@mvista.com>
* gdbserver/inferiors.c (struct inferior_info): Add regcache_data.

View File

@ -4854,7 +4854,6 @@ int
gdbarch_update_p (struct gdbarch_info info)
{
struct gdbarch *new_gdbarch;
struct gdbarch_list **list;
struct gdbarch_registration *rego;
/* Fill in missing parts of the INFO struct using a number of
@ -4947,29 +4946,46 @@ gdbarch_update_p (struct gdbarch_info info)
/* Swap all data belonging to the old target out */
swapout_gdbarch_swap (current_gdbarch);
/* Is this a pre-existing architecture? Yes. Swap it in. */
for (list = &rego->arches;
(*list) != NULL;
list = &(*list)->next)
{
if ((*list)->gdbarch == new_gdbarch)
{
if (gdbarch_debug)
fprintf_unfiltered (gdb_stdlog,
"gdbarch_update: Previous architecture 0x%08lx (%s) selected\n",
(long) new_gdbarch,
new_gdbarch->bfd_arch_info->printable_name);
current_gdbarch = new_gdbarch;
swapin_gdbarch_swap (new_gdbarch);
architecture_changed_event ();
return 1;
}
}
/* Is this a pre-existing architecture? Yes. Move it to the front
of the list of architectures (keeping the list sorted Most
Recently Used) and then copy it in. */
{
struct gdbarch_list **list;
for (list = &rego->arches;
(*list) != NULL;
list = &(*list)->next)
{
if ((*list)->gdbarch == new_gdbarch)
{
struct gdbarch_list *this;
if (gdbarch_debug)
fprintf_unfiltered (gdb_stdlog,
"gdbarch_update: Previous architecture 0x%08lx (%s) selected\n",
(long) new_gdbarch,
new_gdbarch->bfd_arch_info->printable_name);
/* Unlink this. */
this = (*list);
(*list) = this->next;
/* Insert in the front. */
this->next = rego->arches;
rego->arches = this;
/* Copy the new architecture in. */
current_gdbarch = new_gdbarch;
swapin_gdbarch_swap (new_gdbarch);
architecture_changed_event ();
return 1;
}
}
}
/* Append this new architecture to this targets list. */
(*list) = XMALLOC (struct gdbarch_list);
(*list)->next = NULL;
(*list)->gdbarch = new_gdbarch;
/* Prepend this new architecture to the architecture list (keep the
list sorted Most Recently Used). */
{
struct gdbarch_list *this = XMALLOC (struct gdbarch_list);
this->next = rego->arches;
this->gdbarch = new_gdbarch;
rego->arches = this;
}
/* Switch to this new architecture. Dump it out. */
current_gdbarch = new_gdbarch;

View File

@ -2406,9 +2406,16 @@ extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
architecture; ARCHES which is a list of the previously created
``struct gdbarch'' for this architecture.
The INIT function parameter INFO shall, as far as possible, be
pre-initialized with information obtained from INFO.ABFD or
previously selected architecture (if similar).
The INFO parameter is, as far as possible, be pre-initialized with
information obtained from INFO.ABFD or the previously selected
architecture.
The ARCHES parameter is a linked list (sorted most recently used)
of all the previously created architures for this architecture
family. The (possibly NULL) ARCHES->gdbarch can used to access
values from the previously selected architecture for this
architecture family. The global ``current_gdbarch'' shall not be
used.
The INIT function shall return any of: NULL - indicating that it
doesn't recognize the selected architecture; an existing ``struct

View File

@ -955,9 +955,16 @@ extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch);
architecture; ARCHES which is a list of the previously created
\`\`struct gdbarch'' for this architecture.
The INIT function parameter INFO shall, as far as possible, be
pre-initialized with information obtained from INFO.ABFD or
previously selected architecture (if similar).
The INFO parameter is, as far as possible, be pre-initialized with
information obtained from INFO.ABFD or the previously selected
architecture.
The ARCHES parameter is a linked list (sorted most recently used)
of all the previously created architures for this architecture
family. The (possibly NULL) ARCHES->gdbarch can used to access
values from the previously selected architecture for this
architecture family. The global \`\`current_gdbarch'' shall not be
used.
The INIT function shall return any of: NULL - indicating that it
doesn't recognize the selected architecture; an existing \`\`struct
@ -2050,7 +2057,6 @@ int
gdbarch_update_p (struct gdbarch_info info)
{
struct gdbarch *new_gdbarch;
struct gdbarch_list **list;
struct gdbarch_registration *rego;
/* Fill in missing parts of the INFO struct using a number of
@ -2143,29 +2149,46 @@ gdbarch_update_p (struct gdbarch_info info)
/* Swap all data belonging to the old target out */
swapout_gdbarch_swap (current_gdbarch);
/* Is this a pre-existing architecture? Yes. Swap it in. */
for (list = &rego->arches;
(*list) != NULL;
list = &(*list)->next)
{
if ((*list)->gdbarch == new_gdbarch)
{
if (gdbarch_debug)
fprintf_unfiltered (gdb_stdlog,
"gdbarch_update: Previous architecture 0x%08lx (%s) selected\\n",
(long) new_gdbarch,
new_gdbarch->bfd_arch_info->printable_name);
current_gdbarch = new_gdbarch;
swapin_gdbarch_swap (new_gdbarch);
architecture_changed_event ();
return 1;
}
}
/* Is this a pre-existing architecture? Yes. Move it to the front
of the list of architectures (keeping the list sorted Most
Recently Used) and then copy it in. */
{
struct gdbarch_list **list;
for (list = &rego->arches;
(*list) != NULL;
list = &(*list)->next)
{
if ((*list)->gdbarch == new_gdbarch)
{
struct gdbarch_list *this;
if (gdbarch_debug)
fprintf_unfiltered (gdb_stdlog,
"gdbarch_update: Previous architecture 0x%08lx (%s) selected\n",
(long) new_gdbarch,
new_gdbarch->bfd_arch_info->printable_name);
/* Unlink this. */
this = (*list);
(*list) = this->next;
/* Insert in the front. */
this->next = rego->arches;
rego->arches = this;
/* Copy the new architecture in. */
current_gdbarch = new_gdbarch;
swapin_gdbarch_swap (new_gdbarch);
architecture_changed_event ();
return 1;
}
}
}
/* Append this new architecture to this targets list. */
(*list) = XMALLOC (struct gdbarch_list);
(*list)->next = NULL;
(*list)->gdbarch = new_gdbarch;
/* Prepend this new architecture to the architecture list (keep the
list sorted Most Recently Used). */
{
struct gdbarch_list *this = XMALLOC (struct gdbarch_list);
this->next = rego->arches;
this->gdbarch = new_gdbarch;
rego->arches = this;
}
/* Switch to this new architecture. Dump it out. */
current_gdbarch = new_gdbarch;