1 /* Select target systems and architectures at runtime for GDB.
2 Copyright 1990, 1992 Free Software Foundation, Inc.
3 Contributed by Cygnus Support.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
35 target_info PARAMS ((char *, int));
38 cleanup_target PARAMS ((struct target_ops *));
41 maybe_kill_then_create_inferior PARAMS ((char *, char *, char **));
44 maybe_kill_then_attach PARAMS ((char *, int));
47 kill_or_be_killed PARAMS ((int));
50 default_terminal_info PARAMS ((char *, int));
53 nosymbol PARAMS ((char *, CORE_ADDR *));
56 noprocess PARAMS ((void));
59 tcomplain PARAMS ((void));
62 nomemory PARAMS ((CORE_ADDR, char *, int, int));
65 ignore PARAMS ((void));
68 target_command PARAMS ((char *, int));
70 /* Pointer to array of target architecture structures; the size of the
71 array; the current index into the array; the allocated size of the
73 struct target_ops **target_structs;
74 unsigned target_struct_size;
75 unsigned target_struct_index;
76 unsigned target_struct_allocsize;
77 #define DEFAULT_ALLOCSIZE 10
79 /* The initial current target, so that there is always a semi-valid
82 struct target_ops dummy_target = {"None", "None", "",
83 0, 0, 0, 0, /* open, close, attach, detach */
84 0, 0, /* resume, wait */
85 0, 0, 0, 0, 0, /* registers */
88 0, 0, 0, 0, 0, /* terminal */
89 0, 0, /* kill, load */
90 0, /* lookup_symbol */
91 0, 0, /* create_inferior, mourn_inferior */
92 dummy_stratum, 0, /* stratum, next */
93 0, 0, 0, 0, 0, /* all mem, mem, stack, regs, exec */
94 0, 0, /* section pointers */
98 /* The target structure we are currently using to talk to a process
99 or file or whatever "inferior" we have. */
101 struct target_ops *current_target;
103 /* The stack of target structures that have been pushed. */
105 struct target_ops **current_target_stack;
107 /* Command list for target. */
109 static struct cmd_list_element *targetlist = NULL;
111 /* The user just typed 'target' without the name of a target. */
115 target_command (arg, from_tty)
119 fputs_filtered ("Argument required (target name).\n", stdout);
122 /* Add a possible target architecture to the list. */
126 struct target_ops *t;
128 if (t->to_magic != OPS_MAGIC)
130 fprintf(stderr, "Magic number of %s target struct wrong\n",
137 target_struct_allocsize = DEFAULT_ALLOCSIZE;
138 target_structs = (struct target_ops **) xmalloc
139 (target_struct_allocsize * sizeof (*target_structs));
141 if (target_struct_size >= target_struct_allocsize)
143 target_struct_allocsize *= 2;
144 target_structs = (struct target_ops **)
145 xrealloc ((char *) target_structs,
146 target_struct_allocsize * sizeof (*target_structs));
148 target_structs[target_struct_size++] = t;
151 if (targetlist == NULL)
152 add_prefix_cmd ("target", class_run, target_command,
153 "Connect to a target machine or process.\n\
154 The first argument is the type or protocol of the target machine.\n\
155 Remaining arguments are interpreted by the target protocol. For more\n\
156 information on the arguments for a particular protocol, type\n\
157 `help target ' followed by the protocol name.",
158 &targetlist, "target ", 0, &cmdlist);
159 add_cmd (t->to_shortname, no_class, t->to_open, t->to_doc, &targetlist);
171 nomemory (memaddr, myaddr, len, write)
177 return 0; /* No bytes handled */
183 error ("You can't do that when your target is `%s'",
184 current_target->to_shortname);
190 error ("You can't do that without a process to debug");
195 nosymbol (name, addrp)
199 return 1; /* Symbol does not exist in target env */
204 default_terminal_info (args, from_tty)
208 printf("No saved terminal information.\n");
212 /* With strata, this function is no longer needed. FIXME. */
213 /* This is the default target_create_inferior function. It looks up
214 the stack for some target that cares to create inferiors, then
215 calls it -- or complains if not found. */
218 upstack_create_inferior (exec, args, env)
223 struct target_ops *t;
225 for (t = current_target;
229 if (t->to_create_inferior != upstack_create_inferior)
231 t->to_create_inferior (exec, args, env);
240 /* This is the default target_create_inferior and target_attach function.
241 If the current target is executing, it asks whether to kill it off.
242 If this function returns without calling error(), it has killed off
243 the target, and the operation should be attempted. */
246 kill_or_be_killed (from_tty)
249 if (target_has_execution)
251 printf ("You are already running a program:\n");
252 target_files_info ();
253 if (query ("Kill it? ")) {
255 if (target_has_execution)
256 error ("Killing the program did not help.");
259 error ("Program not killed.");
266 maybe_kill_then_attach (args, from_tty)
270 kill_or_be_killed (from_tty);
271 target_attach (args, from_tty);
275 maybe_kill_then_create_inferior (exec, args, env)
280 kill_or_be_killed (0);
281 target_create_inferior (exec, args, env);
284 /* Clean up a target struct so it no longer has any zero pointers in it.
285 We default entries, at least to stubs that print error messages. */
289 struct target_ops *t;
292 /* Check magic number. If wrong, it probably means someone changed
293 the struct definition, but not all the places that initialize one. */
294 if (t->to_magic != OPS_MAGIC)
296 fprintf(stderr, "Magic number of %s target struct wrong\n",
301 #define de_fault(field, value) \
302 if (!t->field) t->field = value
304 /* FIELD DEFAULT VALUE */
306 de_fault (to_open, (void (*)())tcomplain);
307 de_fault (to_close, (void (*)())ignore);
308 de_fault (to_attach, maybe_kill_then_attach);
309 de_fault (to_detach, (void (*)())ignore);
310 de_fault (to_resume, (void (*)())noprocess);
311 de_fault (to_wait, (int (*)())noprocess);
312 de_fault (to_fetch_registers, (void (*)())ignore);
313 de_fault (to_store_registers, (void (*)())noprocess);
314 de_fault (to_prepare_to_store, (void (*)())noprocess);
315 de_fault (to_convert_to_virtual, host_convert_to_virtual);
316 de_fault (to_convert_from_virtual, host_convert_from_virtual);
317 de_fault (to_xfer_memory, (int (*)())nomemory);
318 de_fault (to_files_info, (void (*)())ignore);
319 de_fault (to_insert_breakpoint, memory_insert_breakpoint);
320 de_fault (to_remove_breakpoint, memory_remove_breakpoint);
321 de_fault (to_terminal_init, ignore);
322 de_fault (to_terminal_inferior, ignore);
323 de_fault (to_terminal_ours_for_output,ignore);
324 de_fault (to_terminal_ours, ignore);
325 de_fault (to_terminal_info, default_terminal_info);
326 de_fault (to_kill, (void (*)())noprocess);
327 de_fault (to_load, (void (*)())tcomplain);
328 de_fault (to_lookup_symbol, nosymbol);
329 de_fault (to_create_inferior, maybe_kill_then_create_inferior);
330 de_fault (to_mourn_inferior, (void (*)())noprocess);
331 de_fault (to_next, 0);
332 de_fault (to_has_all_memory, 0);
333 de_fault (to_has_memory, 0);
334 de_fault (to_has_stack, 0);
335 de_fault (to_has_registers, 0);
336 de_fault (to_has_execution, 0);
341 /* Push a new target type into the stack of the existing target accessors,
342 possibly superseding some of the existing accessors.
344 Result is zero if the pushed target ended up on top of the stack,
345 nonzero if at least one target is on top of it.
347 Rather than allow an empty stack, we always have the dummy target at
348 the bottom stratum, so we can call the function vectors without
353 struct target_ops *t;
355 struct target_ops *st, *prev;
357 for (prev = 0, st = current_target;
359 prev = st, st = st->to_next) {
360 if ((int)(t->to_stratum) >= (int)(st->to_stratum))
364 while (t->to_stratum == st->to_stratum) {
365 /* There's already something on this stratum. Close it off. */
368 prev->to_next = st->to_next; /* Unchain old target_ops */
370 current_target = st->to_next; /* Unchain first on list */
374 /* We have removed all targets in our stratum, now add ourself. */
381 cleanup_target (current_target);
385 /* Remove a target_ops vector from the stack, wherever it may be.
386 Return how many times it was removed (0 or 1 unless bug). */
390 struct target_ops *t;
392 struct target_ops *u, *v;
395 for (u = current_target, v = 0;
397 v = u, u = u->to_next)
401 pop_target(); /* unchain top copy */
403 (t->to_close)(0); /* Let it clean up */
404 v->to_next = t->to_next; /* unchain middle copy */
414 (current_target->to_close)(0); /* Let it clean up */
415 current_target = current_target->to_next;
416 if (!current_target) /* At bottom, push dummy. */
417 push_target (&dummy_target);
420 #define MIN(A, B) (((A) <= (B)) ? (A) : (B))
422 /* target_read_string -- read a null terminated string from MEMADDR in target.
423 The read may also be terminated early by getting an error from target_xfer_
425 LEN is the size of the buffer pointed to by MYADDR. Note that a terminating
426 null will only be written if there is sufficient room. The return value is
427 is the number of bytes (including the null) actually transferred.
431 target_read_string (memaddr, myaddr, len)
436 int tlen, origlen, offset, i;
443 tlen = MIN (len, 4 - (memaddr & 3));
444 offset = memaddr & 3;
446 if (target_xfer_memory (memaddr & ~3, buf, 4, 0))
447 return origlen - len;
449 for (i = 0; i < tlen; i++)
451 *myaddr++ = buf[i + offset];
452 if (buf[i + offset] == '\000')
453 return (origlen - len) + i + 1;
462 /* Move memory to or from the targets. Iterate until all of it has
463 been moved, if necessary. The top target gets priority; anything
464 it doesn't want, is offered to the next one down, etc. Note the
465 business with curlen: if an early target says "no, but I have a
466 boundary overlapping this xfer" then we shorten what we offer to
467 the subsequent targets so the early guy will get a chance at the
468 tail before the subsequent ones do.
470 Result is 0 or errno value. */
473 target_read_memory (memaddr, myaddr, len)
478 return target_xfer_memory (memaddr, myaddr, len, 0);
482 target_write_memory (memaddr, myaddr, len)
487 return target_xfer_memory (memaddr, myaddr, len, 1);
491 target_xfer_memory (memaddr, myaddr, len, write)
499 struct target_ops *t;
501 /* The quick case is that the top target does it all. */
502 res = current_target->to_xfer_memory
503 (memaddr, myaddr, len, write, current_target);
509 /* If res <= 0 then we call it again in the loop. Ah well. */
513 curlen = len; /* Want to do it all */
514 for (t = current_target;
516 t = t->to_has_all_memory? 0: t->to_next)
518 res = t->to_xfer_memory(memaddr, myaddr, curlen, write, t);
519 if (res > 0) break; /* Handled all or part of xfer */
520 if (res == 0) continue; /* Handled none */
521 curlen = -res; /* Could handle once we get past res bytes */
525 /* If this address is for nonexistent memory,
526 read zeros if reading, or do nothing if writing. Return error. */
539 return 0; /* We managed to cover it all somehow. */
545 target_info (args, from_tty)
549 struct target_ops *t;
552 if (symfile_objfile != 0)
553 printf ("Symbols from \"%s\".\n", symfile_objfile->name);
555 #ifdef FILES_INFO_HOOK
556 if (FILES_INFO_HOOK ())
560 for (t = current_target;
564 if ((int)(t->to_stratum) <= (int)dummy_stratum)
567 printf("\tWhile running this, gdb does not access memory from...\n");
568 printf("%s:\n", t->to_longname);
569 (t->to_files_info)(t);
570 has_all_mem = t->to_has_all_memory;
574 /* This is to be called by the open routine before it does
578 target_preopen (from_tty)
583 if (target_has_execution)
585 if (query ("A program is being debugged already. Kill it? "))
588 error ("Program not killed.");
592 static char targ_desc[] =
593 "Names of targets and files being debugged.\n\
594 Shows the entire stack of targets currently in use (including the exec-file,\n\
595 core-file, and process, if any), as well as the symbol file name.";
598 _initialize_targets ()
600 current_target = &dummy_target;
601 cleanup_target (current_target);
603 add_info ("target", target_info, targ_desc);
604 add_info ("files", target_info, targ_desc);