| Index: gdb/gdbserver/inferiors.c
|
| diff --git a/gdb/gdbserver/inferiors.c b/gdb/gdbserver/inferiors.c
|
| index cac9878e9395cc64440a34a8f0b2232708cedbdc..76abaf5353ee57747f72fa9f99f93b42c2d5138a 100644
|
| --- a/gdb/gdbserver/inferiors.c
|
| +++ b/gdb/gdbserver/inferiors.c
|
| @@ -21,16 +21,14 @@
|
| #include <stdlib.h>
|
|
|
| #include "server.h"
|
| +#include "gdbthread.h"
|
|
|
| struct inferior_list all_processes;
|
| struct inferior_list all_threads;
|
| -struct inferior_list all_dlls;
|
| -int dlls_changed;
|
|
|
| struct thread_info *current_inferior;
|
|
|
| #define get_thread(inf) ((struct thread_info *)(inf))
|
| -#define get_dll(inf) ((struct dll_info *)(inf))
|
|
|
| void
|
| add_inferior_to_list (struct inferior_list *list,
|
| @@ -228,86 +226,6 @@ set_inferior_regcache_data (struct thread_info *inferior, void *data)
|
| inferior->regcache_data = data;
|
| }
|
|
|
| -static void
|
| -free_one_dll (struct inferior_list_entry *inf)
|
| -{
|
| - struct dll_info *dll = get_dll (inf);
|
| - if (dll->name != NULL)
|
| - free (dll->name);
|
| - free (dll);
|
| -}
|
| -
|
| -/* Find a DLL with the same name and/or base address. A NULL name in
|
| - the key is ignored; so is an all-ones base address. */
|
| -
|
| -static int
|
| -match_dll (struct inferior_list_entry *inf, void *arg)
|
| -{
|
| - struct dll_info *iter = (void *) inf;
|
| - struct dll_info *key = arg;
|
| -
|
| - if (key->base_addr != ~(CORE_ADDR) 0
|
| - && iter->base_addr == key->base_addr)
|
| - return 1;
|
| - else if (key->name != NULL
|
| - && iter->name != NULL
|
| - && strcmp (key->name, iter->name) == 0)
|
| - return 1;
|
| -
|
| - return 0;
|
| -}
|
| -
|
| -/* Record a newly loaded DLL at BASE_ADDR. */
|
| -
|
| -void
|
| -loaded_dll (const char *name, CORE_ADDR base_addr)
|
| -{
|
| - struct dll_info *new_dll = xmalloc (sizeof (*new_dll));
|
| - memset (new_dll, 0, sizeof (*new_dll));
|
| -
|
| - new_dll->entry.id = minus_one_ptid;
|
| -
|
| - new_dll->name = xstrdup (name);
|
| - new_dll->base_addr = base_addr;
|
| -
|
| - add_inferior_to_list (&all_dlls, &new_dll->entry);
|
| - dlls_changed = 1;
|
| -}
|
| -
|
| -/* Record that the DLL with NAME and BASE_ADDR has been unloaded. */
|
| -
|
| -void
|
| -unloaded_dll (const char *name, CORE_ADDR base_addr)
|
| -{
|
| - struct dll_info *dll;
|
| - struct dll_info key_dll;
|
| -
|
| - /* Be careful not to put the key DLL in any list. */
|
| - key_dll.name = (char *) name;
|
| - key_dll.base_addr = base_addr;
|
| -
|
| - dll = (void *) find_inferior (&all_dlls, match_dll, &key_dll);
|
| -
|
| - if (dll == NULL)
|
| - /* For some inferiors we might get unloaded_dll events without having
|
| - a corresponding loaded_dll. In that case, the dll cannot be found
|
| - in ALL_DLL, and there is nothing further for us to do.
|
| -
|
| - This has been observed when running 32bit executables on Windows64
|
| - (i.e. through WOW64, the interface between the 32bits and 64bits
|
| - worlds). In that case, the inferior always does some strange
|
| - unloading of unnamed dll. */
|
| - return;
|
| - else
|
| - {
|
| - /* DLL has been found so remove the entry and free associated
|
| - resources. */
|
| - remove_inferior (&all_dlls, &dll->entry);
|
| - free_one_dll (&dll->entry);
|
| - dlls_changed = 1;
|
| - }
|
| -}
|
| -
|
| #define clear_list(LIST) \
|
| do { (LIST)->head = (LIST)->tail = NULL; } while (0)
|
|
|
| @@ -315,41 +233,11 @@ void
|
| clear_inferiors (void)
|
| {
|
| for_each_inferior (&all_threads, free_one_thread);
|
| - for_each_inferior (&all_dlls, free_one_dll);
|
| -
|
| clear_list (&all_threads);
|
| - clear_list (&all_dlls);
|
| -
|
| - current_inferior = NULL;
|
| -}
|
|
|
| -/* Two utility functions for a truly degenerate inferior_list: a simple
|
| - PID listing. */
|
| + clear_dlls ();
|
|
|
| -void
|
| -add_pid_to_list (struct inferior_list *list, unsigned long pid)
|
| -{
|
| - struct inferior_list_entry *new_entry;
|
| -
|
| - new_entry = xmalloc (sizeof (struct inferior_list_entry));
|
| - new_entry->id = pid_to_ptid (pid);
|
| - add_inferior_to_list (list, new_entry);
|
| -}
|
| -
|
| -int
|
| -pull_pid_from_list (struct inferior_list *list, unsigned long pid)
|
| -{
|
| - struct inferior_list_entry *new_entry;
|
| -
|
| - new_entry = find_inferior_id (list, pid_to_ptid (pid));
|
| - if (new_entry == NULL)
|
| - return 0;
|
| - else
|
| - {
|
| - remove_inferior (list, new_entry);
|
| - free (new_entry);
|
| - return 1;
|
| - }
|
| + current_inferior = NULL;
|
| }
|
|
|
| struct process_info *
|
|
|