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 tcomplain
PARAMS ((void));
59 nomemory
PARAMS ((CORE_ADDR
, char *, int, int));
62 ignore
PARAMS ((void));
64 target_command
PARAMS ((char *, int));
66 /* Pointer to array of target architecture structures; the size of the
67 array; the current index into the array; the allocated size of the
69 struct target_ops
**target_structs
;
70 unsigned target_struct_size
;
71 unsigned target_struct_index
;
72 unsigned target_struct_allocsize
;
73 #define DEFAULT_ALLOCSIZE 10
75 /* The initial current target, so that there is always a semi-valid
78 struct target_ops dummy_target
= {"None", "None", "",
79 0, 0, 0, 0, /* open, close, attach, detach */
80 0, 0, /* resume, wait */
81 0, 0, 0, /* registers */
84 0, 0, 0, 0, 0, /* terminal */
85 0, 0, /* kill, load */
86 0, /* lookup_symbol */
87 0, 0, /* create_inferior, mourn_inferior */
88 dummy_stratum
, 0, /* stratum, next */
89 0, 0, 0, 0, 0, /* all mem, mem, stack, regs, exec */
90 0, 0, /* section pointers */
94 /* The target structure we are currently using to talk to a process
95 or file or whatever "inferior" we have. */
97 struct target_ops
*current_target
;
99 /* The stack of target structures that have been pushed. */
101 struct target_ops
**current_target_stack
;
103 /* Command list for target. */
105 static struct cmd_list_element
*targetlist
= NULL
;
107 /* The user just typed 'target' without the name of a target. */
111 target_command (arg
, from_tty
)
115 fputs_filtered ("Argument required (target name).\n", stdout
);
118 /* Add a possible target architecture to the list. */
122 struct target_ops
*t
;
124 if (t
->to_magic
!= OPS_MAGIC
)
126 fprintf_filtered(stderr
, "Magic number of %s target struct wrong\n",
133 target_struct_allocsize
= DEFAULT_ALLOCSIZE
;
134 target_structs
= (struct target_ops
**) xmalloc
135 (target_struct_allocsize
* sizeof (*target_structs
));
137 if (target_struct_size
>= target_struct_allocsize
)
139 target_struct_allocsize
*= 2;
140 target_structs
= (struct target_ops
**)
141 xrealloc ((char *) target_structs
,
142 target_struct_allocsize
* sizeof (*target_structs
));
144 target_structs
[target_struct_size
++] = t
;
147 if (targetlist
== NULL
)
148 add_prefix_cmd ("target", class_run
, target_command
,
149 "Connect to a target machine or process.\n\
150 The first argument is the type or protocol of the target machine.\n\
151 Remaining arguments are interpreted by the target protocol. For more\n\
152 information on the arguments for a particular protocol, type\n\
153 `help target ' followed by the protocol name.",
154 &targetlist
, "target ", 0, &cmdlist
);
155 add_cmd (t
->to_shortname
, no_class
, t
->to_open
, t
->to_doc
, &targetlist
);
167 nomemory (memaddr
, myaddr
, len
, write
)
173 errno
= EIO
; /* Can't read/write this location */
174 return 0; /* No bytes handled */
180 error ("You can't do that when your target is `%s'",
181 current_target
->to_shortname
);
187 error ("You can't do that without a process to debug");
192 nosymbol (name
, addrp
)
196 return 1; /* Symbol does not exist in target env */
201 default_terminal_info (args
, from_tty
)
205 printf_filtered("No saved terminal information.\n");
209 /* With strata, this function is no longer needed. FIXME. */
210 /* This is the default target_create_inferior function. It looks up
211 the stack for some target that cares to create inferiors, then
212 calls it -- or complains if not found. */
215 upstack_create_inferior (exec
, args
, env
)
220 struct target_ops
*t
;
222 for (t
= current_target
;
226 if (t
->to_create_inferior
!= upstack_create_inferior
)
228 t
->to_create_inferior (exec
, args
, env
);
237 /* This is the default target_create_inferior and target_attach function.
238 If the current target is executing, it asks whether to kill it off.
239 If this function returns without calling error(), it has killed off
240 the target, and the operation should be attempted. */
243 kill_or_be_killed (from_tty
)
246 if (target_has_execution
)
248 printf_filtered ("You are already running a program:\n");
249 target_files_info ();
250 if (query ("Kill it? ")) {
252 if (target_has_execution
)
253 error ("Killing the program did not help.");
256 error ("Program not killed.");
263 maybe_kill_then_attach (args
, from_tty
)
267 kill_or_be_killed (from_tty
);
268 target_attach (args
, from_tty
);
272 maybe_kill_then_create_inferior (exec
, args
, env
)
277 kill_or_be_killed (0);
278 target_create_inferior (exec
, args
, env
);
281 /* Clean up a target struct so it no longer has any zero pointers in it.
282 We default entries, at least to stubs that print error messages. */
286 struct target_ops
*t
;
289 /* Check magic number. If wrong, it probably means someone changed
290 the struct definition, but not all the places that initialize one. */
291 if (t
->to_magic
!= OPS_MAGIC
)
293 fprintf_filtered(stderr
, "Magic number of %s target struct wrong\n",
298 #define de_fault(field, value) \
299 if (!t->field) t->field = value
301 /* FIELD DEFAULT VALUE */
303 de_fault (to_open
, (void (*)())tcomplain
);
304 de_fault (to_close
, (void (*)())ignore
);
305 de_fault (to_attach
, maybe_kill_then_attach
);
306 de_fault (to_detach
, (void (*)())ignore
);
307 de_fault (to_resume
, (void (*)())noprocess
);
308 de_fault (to_wait
, (int (*)())noprocess
);
309 de_fault (to_fetch_registers
, (void (*)())ignore
);
310 de_fault (to_store_registers
, (void (*)())noprocess
);
311 de_fault (to_prepare_to_store
, (void (*)())noprocess
);
312 de_fault (to_xfer_memory
, (int (*)())nomemory
);
313 de_fault (to_files_info
, (void (*)())ignore
);
314 de_fault (to_insert_breakpoint
, memory_insert_breakpoint
);
315 de_fault (to_remove_breakpoint
, memory_remove_breakpoint
);
316 de_fault (to_terminal_init
, ignore
);
317 de_fault (to_terminal_inferior
, ignore
);
318 de_fault (to_terminal_ours_for_output
,ignore
);
319 de_fault (to_terminal_ours
, ignore
);
320 de_fault (to_terminal_info
, default_terminal_info
);
321 de_fault (to_kill
, (void (*)())noprocess
);
322 de_fault (to_load
, (void (*)())tcomplain
);
323 de_fault (to_lookup_symbol
, nosymbol
);
324 de_fault (to_create_inferior
, maybe_kill_then_create_inferior
);
325 de_fault (to_mourn_inferior
, (void (*)())noprocess
);
326 de_fault (to_next
, 0);
327 de_fault (to_has_all_memory
, 0);
328 de_fault (to_has_memory
, 0);
329 de_fault (to_has_stack
, 0);
330 de_fault (to_has_registers
, 0);
331 de_fault (to_has_execution
, 0);
336 /* Push a new target type into the stack of the existing target accessors,
337 possibly superseding some of the existing accessors.
339 Result is zero if the pushed target ended up on top of the stack,
340 nonzero if at least one target is on top of it.
342 Rather than allow an empty stack, we always have the dummy target at
343 the bottom stratum, so we can call the function vectors without
348 struct target_ops
*t
;
350 struct target_ops
*st
, *prev
;
352 for (prev
= 0, st
= current_target
;
354 prev
= st
, st
= st
->to_next
) {
355 if ((int)(t
->to_stratum
) >= (int)(st
->to_stratum
))
359 while (t
->to_stratum
== st
->to_stratum
) {
360 /* There's already something on this stratum. Close it off. */
363 prev
->to_next
= st
->to_next
; /* Unchain old target_ops */
365 current_target
= st
->to_next
; /* Unchain first on list */
369 /* We have removed all targets in our stratum, now add ourself. */
376 cleanup_target (current_target
);
380 /* Remove a target_ops vector from the stack, wherever it may be.
381 Return how many times it was removed (0 or 1 unless bug). */
385 struct target_ops
*t
;
387 struct target_ops
*u
, *v
;
390 for (u
= current_target
, v
= 0;
392 v
= u
, u
= u
->to_next
)
396 pop_target(); /* unchain top copy */
398 (t
->to_close
)(0); /* Let it clean up */
399 v
->to_next
= t
->to_next
; /* unchain middle copy */
409 (current_target
->to_close
)(0); /* Let it clean up */
410 current_target
= current_target
->to_next
;
411 if (!current_target
) /* At bottom, push dummy. */
412 push_target (&dummy_target
);
415 #define MIN(A, B) (((A) <= (B)) ? (A) : (B))
417 /* target_read_string -- read a null terminated string from MEMADDR in target.
418 The read may also be terminated early by getting an error from target_xfer_
420 LEN is the size of the buffer pointed to by MYADDR. Note that a terminating
421 null will only be written if there is sufficient room. The return value is
422 is the number of bytes (including the null) actually transferred.
426 target_read_string (memaddr
, myaddr
, len
)
431 int tlen
, origlen
, offset
, i
;
438 tlen
= MIN (len
, 4 - (memaddr
& 3));
439 offset
= memaddr
& 3;
441 if (target_xfer_memory (memaddr
& ~3, buf
, 4, 0))
442 return origlen
- len
;
444 for (i
= 0; i
< tlen
; i
++)
446 *myaddr
++ = buf
[i
+ offset
];
447 if (buf
[i
+ offset
] == '\000')
448 return (origlen
- len
) + i
+ 1;
457 /* Move memory to or from the targets. Iterate until all of it has
458 been moved, if necessary. The top target gets priority; anything
459 it doesn't want, is offered to the next one down, etc. Note the
460 business with curlen: if an early target says "no, but I have a
461 boundary overlapping this xfer" then we shorten what we offer to
462 the subsequent targets so the early guy will get a chance at the
463 tail before the subsequent ones do.
465 Result is 0 or errno value. */
468 target_read_memory (memaddr
, myaddr
, len
)
473 return target_xfer_memory (memaddr
, myaddr
, len
, 0);
477 target_write_memory (memaddr
, myaddr
, len
)
482 return target_xfer_memory (memaddr
, myaddr
, len
, 1);
486 target_xfer_memory (memaddr
, myaddr
, len
, write
)
494 struct target_ops
*t
;
496 /* The quick case is that the top target does it all. */
497 res
= current_target
->to_xfer_memory
498 (memaddr
, myaddr
, len
, write
, current_target
);
504 /* If res <= 0 then we call it again in the loop. Ah well. */
508 curlen
= len
; /* Want to do it all */
509 for (t
= current_target
;
511 t
= t
->to_has_all_memory
? 0: t
->to_next
)
513 res
= t
->to_xfer_memory(memaddr
, myaddr
, curlen
, write
, t
);
514 if (res
> 0) break; /* Handled all or part of xfer */
515 if (res
== 0) continue; /* Handled none */
516 curlen
= -res
; /* Could handle once we get past res bytes */
520 /* If this address is for nonexistent memory,
521 read zeros if reading, or do nothing if writing. Return error. */
523 memset (myaddr
, 0, len
);
534 return 0; /* We managed to cover it all somehow. */
540 target_info (args
, from_tty
)
544 struct target_ops
*t
;
547 if (symfile_objfile
!= NULL
)
548 printf_filtered ("Symbols from \"%s\".\n", symfile_objfile
->name
);
550 #ifdef FILES_INFO_HOOK
551 if (FILES_INFO_HOOK ())
555 for (t
= current_target
;
559 if ((int)(t
->to_stratum
) <= (int)dummy_stratum
)
562 printf_filtered("\tWhile running this, gdb does not access memory from...\n");
563 printf_filtered("%s:\n", t
->to_longname
);
564 (t
->to_files_info
)(t
);
565 has_all_mem
= t
->to_has_all_memory
;
569 /* This is to be called by the open routine before it does
573 target_preopen (from_tty
)
578 if (target_has_execution
)
580 if (query ("A program is being debugged already. Kill it? "))
583 error ("Program not killed.");
587 static char targ_desc
[] =
588 "Names of targets and files being debugged.\n\
589 Shows the entire stack of targets currently in use (including the exec-file,\n\
590 core-file, and process, if any), as well as the symbol file name.";
593 _initialize_targets ()
595 current_target
= &dummy_target
;
596 cleanup_target (current_target
);
598 add_info ("target", target_info
, targ_desc
);
599 add_info ("files", target_info
, targ_desc
);