1b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* Inferior process information for the remote server for GDB. 2b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Copyright (C) 2002, 2005, 2011 3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Free Software Foundation, Inc. 4b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Contributed by MontaVista Software. 6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 7b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov This file is part of GDB. 8b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov It has been modified to integrate it in valgrind 9b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov This program is free software; you can redistribute it and/or modify 11b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov it under the terms of the GNU General Public License as published by 12b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov the Free Software Foundation; either version 2 of the License, or 13b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov (at your option) any later version. 14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov This program is distributed in the hope that it will be useful, 16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov but WITHOUT ANY WARRANTY; without even the implied warranty of 17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov GNU General Public License for more details. 19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov You should have received a copy of the GNU General Public License 21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov along with this program; if not, write to the Free Software 22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Foundation, Inc., 51 Franklin Street, Fifth Floor, 23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov Boston, MA 02110-1301, USA. */ 24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include "server.h" 26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct thread_info 28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 29b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov struct inferior_list_entry entry; 30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov void *target_data; 31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov void *regcache_data; 32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov unsigned int gdb_id; 33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}; 34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct inferior_list all_threads; 36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct thread_info *current_inferior; 38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define get_thread(inf) ((struct thread_info *)(inf)) 40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid add_inferior_to_list (struct inferior_list *list, 42b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov struct inferior_list_entry *new_inferior) 43b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 44b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov new_inferior->next = NULL; 45b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (list->tail != NULL) 46b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov list->tail->next = new_inferior; 47b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov else 48b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov list->head = new_inferior; 49b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov list->tail = new_inferior; 50b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 51b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 52b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid for_each_inferior (struct inferior_list *list, 53b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov void (*action) (struct inferior_list_entry *)) 54b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 55b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov struct inferior_list_entry *cur = list->head, *next; 56b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 57b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov while (cur != NULL) { 58b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov next = cur->next; 59b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov (*action) (cur); 60b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cur = next; 61b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 62b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 63b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 64b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid change_inferior_id (struct inferior_list *list, 65b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov unsigned long new_id) 66b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 67b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (list->head != list->tail) 68b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov error ("tried to change thread ID after multiple threads are created\n"); 69b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 70b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov list->head->id = new_id; 71b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 72b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 73b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid remove_inferior (struct inferior_list *list, 74b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov struct inferior_list_entry *entry) 75b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 76b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov struct inferior_list_entry **cur; 77b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 78b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (list->head == entry) { 79b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov list->head = entry->next; 80b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (list->tail == entry) 81b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov list->tail = list->head; 82b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return; 83b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 84b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 85b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cur = &list->head; 86b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov while (*cur && (*cur)->next != entry) 87b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov cur = &(*cur)->next; 88b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 89b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (*cur == NULL) 90b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return; 91b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 92b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov (*cur)->next = entry->next; 93b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 94b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (list->tail == entry) 95b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov list->tail = *cur; 96b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 97b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 98b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid add_thread (unsigned long thread_id, void *target_data, unsigned int gdb_id) 99b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov struct thread_info *new_thread 101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov = (struct thread_info *) malloc (sizeof (*new_thread)); 102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov VG_(memset) (new_thread, 0, sizeof (*new_thread)); 104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov new_thread->entry.id = thread_id; 106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov add_inferior_to_list (&all_threads, & new_thread->entry); 108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (current_inferior == NULL) 110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov current_inferior = new_thread; 111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov new_thread->target_data = target_data; 113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov set_inferior_regcache_data (new_thread, new_register_cache ()); 114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov new_thread->gdb_id = gdb_id; 115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovunsigned int thread_id_to_gdb_id (unsigned long thread_id) 118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov struct inferior_list_entry *inf = all_threads.head; 120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov while (inf != NULL) { 122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov struct thread_info *thread = get_thread (inf); 123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (inf->id == thread_id) 124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return thread->gdb_id; 125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov inf = inf->next; 126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return 0; 129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovunsigned int thread_to_gdb_id (struct thread_info *thread) 132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return thread->gdb_id; 134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct thread_info * gdb_id_to_thread (unsigned int gdb_id) 137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov struct inferior_list_entry *inf = all_threads.head; 139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov while (inf != NULL) { 141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov struct thread_info *thread = get_thread (inf); 142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (thread->gdb_id == gdb_id) 143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return thread; 144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov inf = inf->next; 145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return NULL; 148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovunsigned long gdb_id_to_thread_id (unsigned int gdb_id) 151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov struct thread_info *thread = gdb_id_to_thread (gdb_id); 153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return thread ? thread->entry.id : 0; 155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstatic 158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid free_one_thread (struct inferior_list_entry *inf) 159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov struct thread_info *thread = get_thread (inf); 161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov free_register_cache (inferior_regcache_data (thread)); 162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov free (thread); 163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid remove_thread (struct thread_info *thread) 166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov remove_inferior (&all_threads, (struct inferior_list_entry *) thread); 168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov free_one_thread (&thread->entry); 169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid clear_inferiors (void) 172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov for_each_inferior (&all_threads, free_one_thread); 174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov all_threads.head = all_threads.tail = NULL; 176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct inferior_list_entry * find_inferior (struct inferior_list *list, 179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov int (*func) 180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov (struct inferior_list_entry *, 181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov void *), 182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov void *arg) 183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov struct inferior_list_entry *inf = list->head; 185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov while (inf != NULL) { 187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if ((*func) (inf, arg)) 188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return inf; 189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov inf = inf->next; 190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return NULL; 193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovstruct inferior_list_entry * find_inferior_id (struct inferior_list *list, 196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov unsigned long id) 197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov struct inferior_list_entry *inf = list->head; 199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov while (inf != NULL) { 201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov if (inf->id == id) 202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return inf; 203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov inf = inf->next; 204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return NULL; 207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid * inferior_target_data (struct thread_info *inferior) 210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return inferior->target_data; 212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid set_inferior_target_data (struct thread_info *inferior, void *data) 215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov inferior->target_data = data; 217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid * inferior_regcache_data (struct thread_info *inferior) 220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov return inferior->regcache_data; 222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov 224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid set_inferior_regcache_data (struct thread_info *inferior, void *data) 225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ 226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov inferior->regcache_data = data; 227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov} 228