diff options
author | Andrew Cagney <cagney@redhat.com> | 2002-04-20 17:41:18 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2002-04-20 17:41:18 +0000 |
commit | 0f79675b658bbf6871b720d7b662ddfb6cce1533 (patch) | |
tree | 95162fc9721e697dd868128855446bab98e0c5cf | |
parent | c04a1aa88fa42d61fafa570de6ab6ab1b7a12d27 (diff) | |
download | fsf-binutils-gdb-0f79675b658bbf6871b720d7b662ddfb6cce1533.zip fsf-binutils-gdb-0f79675b658bbf6871b720d7b662ddfb6cce1533.tar.gz fsf-binutils-gdb-0f79675b658bbf6871b720d7b662ddfb6cce1533.tar.bz2 |
* gdbarch.sh (gdbarch_update_p): Keep the list of architectures
sorted in most most-recent-used order. Document.
* gdbarch.h, gdbarch.c: Regenerate.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/gdbarch.c | 64 | ||||
-rw-r--r-- | gdb/gdbarch.h | 13 | ||||
-rwxr-xr-x | gdb/gdbarch.sh | 77 |
4 files changed, 106 insertions, 54 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 16d3d76..043cf34 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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. diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c index 646b238..bc8f47a 100644 --- a/gdb/gdbarch.c +++ b/gdb/gdbarch.c @@ -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 = ®o->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; - } - } - - /* Append this new architecture to this targets list. */ - (*list) = XMALLOC (struct gdbarch_list); - (*list)->next = NULL; - (*list)->gdbarch = new_gdbarch; + /* 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 = ®o->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; + } + } + } + + /* 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; diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h index 7e66522..f6a690d 100644 --- a/gdb/gdbarch.h +++ b/gdb/gdbarch.h @@ -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 diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh index 32a68fc..cdce9c1 100755 --- a/gdb/gdbarch.sh +++ b/gdb/gdbarch.sh @@ -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 = ®o->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; - } - } - - /* Append this new architecture to this targets list. */ - (*list) = XMALLOC (struct gdbarch_list); - (*list)->next = NULL; - (*list)->gdbarch = new_gdbarch; + /* 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 = ®o->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; + } + } + } + + /* 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; |