* ldmain.c (main): Error if --gc-sections and
[deliverable/binutils-gdb.git] / gdb / target.c
CommitLineData
bd5635a1 1/* Select target systems and architectures at runtime for GDB.
47b8a5ce 2 Copyright 1990, 1992, 1993, 1994, 1995, 1998 Free Software Foundation, Inc.
bd5635a1
RP
3 Contributed by Cygnus Support.
4
5This file is part of GDB.
6
e17960fb 7This program is free software; you can redistribute it and/or modify
bd5635a1 8it under the terms of the GNU General Public License as published by
e17960fb
JG
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
bd5635a1 11
e17960fb 12This program is distributed in the hope that it will be useful,
bd5635a1
RP
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
e17960fb 18along with this program; if not, write to the Free Software
8fc2b417 19Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
bd5635a1 20
80d68b1d 21#include "defs.h"
bd5635a1
RP
22#include <errno.h>
23#include <ctype.h>
2b576293 24#include "gdb_string.h"
bd5635a1
RP
25#include "target.h"
26#include "gdbcmd.h"
27#include "symtab.h"
28#include "inferior.h"
29#include "bfd.h"
30#include "symfile.h"
51b57ded 31#include "objfiles.h"
4ad0021e
JK
32#include "wait.h"
33#include <signal.h>
bd5635a1 34
e17960fb
JG
35extern int errno;
36
7919c3ed
JG
37static void
38target_info PARAMS ((char *, int));
39
40static void
41cleanup_target PARAMS ((struct target_ops *));
42
43static void
44maybe_kill_then_create_inferior PARAMS ((char *, char *, char **));
45
46static void
47maybe_kill_then_attach PARAMS ((char *, int));
48
49static void
50kill_or_be_killed PARAMS ((int));
51
52static void
53default_terminal_info PARAMS ((char *, int));
54
55static int
56nosymbol PARAMS ((char *, CORE_ADDR *));
57
7919c3ed
JG
58static void
59tcomplain PARAMS ((void));
60
61static int
4fc5969d 62nomemory PARAMS ((CORE_ADDR, char *, int, int, struct target_ops *));
7919c3ed 63
597dc86b
SG
64static int
65return_zero PARAMS ((void));
66
7919c3ed
JG
67static void
68ignore PARAMS ((void));
597dc86b 69
7919c3ed
JG
70static void
71target_command PARAMS ((char *, int));
bd5635a1 72
597dc86b
SG
73static struct target_ops *
74find_default_run_target PARAMS ((char *));
75
47b8a5ce
PS
76static void
77update_current_target PARAMS ((void));
78
79/* Transfer LEN bytes between target address MEMADDR and GDB address MYADDR.
80 Returns 0 for success, errno code for failure (which includes partial
81 transfers--if you want a more useful response to partial transfers, try
82 target_read_memory_partial). */
83
84static int
85target_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len,
86 int write, asection *bfd_section));
87
88static void
89debug_to_open PARAMS ((char *, int));
90
91static void
92debug_to_close PARAMS ((int));
93
94static void
95debug_to_attach PARAMS ((char *, int));
96
97static void
98debug_to_detach PARAMS ((char *, int));
99
100static void
101debug_to_resume PARAMS ((int, int, enum target_signal));
102
103static int
104debug_to_wait PARAMS ((int, struct target_waitstatus *));
105
106static void
107debug_to_fetch_registers PARAMS ((int));
108
109static void
110debug_to_store_registers PARAMS ((int));
111
112static void
113debug_to_prepare_to_store PARAMS ((void));
114
115static int
116debug_to_xfer_memory PARAMS ((CORE_ADDR, char *, int, int, struct target_ops *));
117
118static void
119debug_to_files_info PARAMS ((struct target_ops *));
120
121static int
122debug_to_insert_breakpoint PARAMS ((CORE_ADDR, char *));
123
124static int
125debug_to_remove_breakpoint PARAMS ((CORE_ADDR, char *));
126
127static void
128debug_to_terminal_init PARAMS ((void));
129
130static void
131debug_to_terminal_inferior PARAMS ((void));
132
133static void
134debug_to_terminal_ours_for_output PARAMS ((void));
135
136static void
137debug_to_terminal_ours PARAMS ((void));
138
139static void
140debug_to_terminal_info PARAMS ((char *, int));
141
142static void
143debug_to_kill PARAMS ((void));
144
145static void
146debug_to_load PARAMS ((char *, int));
147
148static int
149debug_to_lookup_symbol PARAMS ((char *, CORE_ADDR *));
150
151static void
152debug_to_create_inferior PARAMS ((char *, char *, char **));
153
154static void
155debug_to_mourn_inferior PARAMS ((void));
156
157static int
158debug_to_can_run PARAMS ((void));
159
160static void
161debug_to_notice_signals PARAMS ((int));
162
163static int
164debug_to_thread_alive PARAMS ((int));
165
166static void
167debug_to_stop PARAMS ((void));
168
bd5635a1
RP
169/* Pointer to array of target architecture structures; the size of the
170 array; the current index into the array; the allocated size of the
171 array. */
172struct target_ops **target_structs;
173unsigned target_struct_size;
174unsigned target_struct_index;
175unsigned target_struct_allocsize;
176#define DEFAULT_ALLOCSIZE 10
177
178/* The initial current target, so that there is always a semi-valid
179 current target. */
180
43fc25c8
JL
181struct target_ops dummy_target = {
182 "None", /* to_shortname */
183 "None", /* to_longname */
184 "", /* to_doc */
185 0, /* to_open */
186 0, /* to_close */
187 find_default_attach, /* to_attach */
188 0, /* to_detach */
189 0, /* to_resume */
190 0, /* to_wait */
191 0, /* to_fetch_registers */
192 0, /* to_store_registers */
193 0, /* to_prepare_to_store */
194 0, /* to_xfer_memory */
195 0, /* to_files_info */
196 0, /* to_insert_breakpoint */
197 0, /* to_remove_breakpoint */
198 0, /* to_terminal_init */
199 0, /* to_terminal_inferior */
200 0, /* to_terminal_ours_for_output */
201 0, /* to_terminal_ours */
202 0, /* to_terminal_info */
203 0, /* to_kill */
204 0, /* to_load */
205 0, /* to_lookup_symbol */
206 find_default_create_inferior, /* to_create_inferior */
207 0, /* to_mourn_inferior */
208 0, /* to_can_run */
209 0, /* to_notice_signals */
210 0, /* to_thread_alive */
211 0, /* to_stop */
212 dummy_stratum, /* to_stratum */
213 0, /* to_next */
43fc25c8
JL
214 0, /* to_has_all_memory */
215 0, /* to_has_memory */
47b8a5ce 216 0, /* to_has_stack */
43fc25c8
JL
217 0, /* to_has_registers */
218 0, /* to_has_execution */
219 0, /* to_sections */
220 0, /* to_sections_end */
221 OPS_MAGIC, /* to_magic */
bd5635a1
RP
222};
223
cad1498f 224/* Top of target stack. */
bd5635a1 225
cad1498f 226struct target_stack_item *target_stack;
bd5635a1 227
cad1498f
SG
228/* The target structure we are currently using to talk to a process
229 or file or whatever "inferior" we have. */
bd5635a1 230
cad1498f 231struct target_ops current_target;
bd5635a1 232
f2fc6e7a
JK
233/* Command list for target. */
234
235static struct cmd_list_element *targetlist = NULL;
236
16d2cc80
SS
237/* Nonzero if we are debugging an attached outside process
238 rather than an inferior. */
239
240int attach_flag;
241
43fc25c8
JL
242#ifdef MAINTENANCE_CMDS
243/* Non-zero if we want to see trace of target level stuff. */
244
245static int targetdebug = 0;
246
247static void setup_target_debug PARAMS ((void));
248
249#endif
250
f2fc6e7a
JK
251/* The user just typed 'target' without the name of a target. */
252
e1ce8aa5 253/* ARGSUSED */
f2fc6e7a
JK
254static void
255target_command (arg, from_tty)
256 char *arg;
257 int from_tty;
258{
597dc86b 259 fputs_filtered ("Argument required (target name). Try `help target'\n",
67ac9759 260 gdb_stdout);
f2fc6e7a 261}
bd5635a1
RP
262
263/* Add a possible target architecture to the list. */
264
265void
266add_target (t)
267 struct target_ops *t;
268{
bd5635a1
RP
269 if (!target_structs)
270 {
271 target_struct_allocsize = DEFAULT_ALLOCSIZE;
272 target_structs = (struct target_ops **) xmalloc
273 (target_struct_allocsize * sizeof (*target_structs));
274 }
275 if (target_struct_size >= target_struct_allocsize)
276 {
277 target_struct_allocsize *= 2;
7919c3ed
JG
278 target_structs = (struct target_ops **)
279 xrealloc ((char *) target_structs,
280 target_struct_allocsize * sizeof (*target_structs));
bd5635a1
RP
281 }
282 target_structs[target_struct_size++] = t;
a3ecbe7c 283/* cleanup_target (t);*/
f2fc6e7a
JK
284
285 if (targetlist == NULL)
286 add_prefix_cmd ("target", class_run, target_command,
287 "Connect to a target machine or process.\n\
288The first argument is the type or protocol of the target machine.\n\
289Remaining arguments are interpreted by the target protocol. For more\n\
290information on the arguments for a particular protocol, type\n\
291`help target ' followed by the protocol name.",
292 &targetlist, "target ", 0, &cmdlist);
293 add_cmd (t->to_shortname, no_class, t->to_open, t->to_doc, &targetlist);
bd5635a1
RP
294}
295
296/* Stub functions */
297
298static void
299ignore ()
300{
301}
302
303/* ARGSUSED */
304static int
4fc5969d 305nomemory (memaddr, myaddr, len, write, t)
bd5635a1
RP
306 CORE_ADDR memaddr;
307 char *myaddr;
308 int len;
309 int write;
4fc5969d 310 struct target_ops *t;
bd5635a1 311{
51b57ded 312 errno = EIO; /* Can't read/write this location */
bd5635a1
RP
313 return 0; /* No bytes handled */
314}
315
316static void
317tcomplain ()
318{
319 error ("You can't do that when your target is `%s'",
cad1498f 320 current_target.to_shortname);
bd5635a1
RP
321}
322
80d68b1d 323void
bd5635a1
RP
324noprocess ()
325{
326 error ("You can't do that without a process to debug");
327}
328
e1ce8aa5 329/* ARGSUSED */
bd5635a1
RP
330static int
331nosymbol (name, addrp)
332 char *name;
333 CORE_ADDR *addrp;
334{
335 return 1; /* Symbol does not exist in target env */
336}
337
e1ce8aa5 338/* ARGSUSED */
bd5635a1
RP
339static void
340default_terminal_info (args, from_tty)
341 char *args;
342 int from_tty;
343{
67ac9759 344 printf_unfiltered("No saved terminal information.\n");
bd5635a1
RP
345}
346
bd5635a1
RP
347/* This is the default target_create_inferior and target_attach function.
348 If the current target is executing, it asks whether to kill it off.
349 If this function returns without calling error(), it has killed off
350 the target, and the operation should be attempted. */
351
352static void
353kill_or_be_killed (from_tty)
354 int from_tty;
355{
bd5635a1
RP
356 if (target_has_execution)
357 {
67ac9759 358 printf_unfiltered ("You are already running a program:\n");
bd5635a1
RP
359 target_files_info ();
360 if (query ("Kill it? ")) {
e17960fb 361 target_kill ();
bd5635a1
RP
362 if (target_has_execution)
363 error ("Killing the program did not help.");
364 return;
365 } else {
366 error ("Program not killed.");
367 }
368 }
369 tcomplain();
370}
371
372static void
373maybe_kill_then_attach (args, from_tty)
374 char *args;
375 int from_tty;
376{
377 kill_or_be_killed (from_tty);
378 target_attach (args, from_tty);
379}
380
381static void
382maybe_kill_then_create_inferior (exec, args, env)
383 char *exec;
384 char *args;
385 char **env;
386{
387 kill_or_be_killed (0);
388 target_create_inferior (exec, args, env);
389}
390
391/* Clean up a target struct so it no longer has any zero pointers in it.
392 We default entries, at least to stubs that print error messages. */
393
394static void
395cleanup_target (t)
396 struct target_ops *t;
397{
398
bd5635a1
RP
399#define de_fault(field, value) \
400 if (!t->field) t->field = value
401
402 /* FIELD DEFAULT VALUE */
403
47b8a5ce
PS
404 de_fault (to_open, (void (*) PARAMS((char *, int))) tcomplain);
405 de_fault (to_close, (void (*) PARAMS((int))) ignore);
bd5635a1 406 de_fault (to_attach, maybe_kill_then_attach);
47b8a5ce
PS
407 de_fault (to_detach, (void (*) PARAMS((char *, int))) ignore);
408 de_fault (to_resume, (void (*) PARAMS((int, int, enum target_signal))) noprocess);
409 de_fault (to_wait, (int (*) PARAMS((int, struct target_waitstatus *))) noprocess);
410 de_fault (to_fetch_registers, (void (*) PARAMS((int))) ignore);
411 de_fault (to_store_registers, (void (*) PARAMS((int))) noprocess);
412 de_fault (to_prepare_to_store, (void (*) PARAMS((void))) noprocess);
413 de_fault (to_xfer_memory, (int (*) PARAMS((CORE_ADDR, char *, int, int, struct target_ops *))) nomemory);
414 de_fault (to_files_info, (void (*) PARAMS((struct target_ops *))) ignore);
bd5635a1
RP
415 de_fault (to_insert_breakpoint, memory_insert_breakpoint);
416 de_fault (to_remove_breakpoint, memory_remove_breakpoint);
47b8a5ce
PS
417 de_fault (to_terminal_init, (void (*) PARAMS((void))) ignore);
418 de_fault (to_terminal_inferior, (void (*) PARAMS ((void))) ignore);
419 de_fault (to_terminal_ours_for_output,(void (*) PARAMS ((void))) ignore);
420 de_fault (to_terminal_ours, (void (*) PARAMS ((void))) ignore);
bd5635a1 421 de_fault (to_terminal_info, default_terminal_info);
47b8a5ce
PS
422 de_fault (to_kill, (void (*) PARAMS((void))) noprocess);
423 de_fault (to_load, (void (*) PARAMS((char *, int))) tcomplain);
424 de_fault (to_lookup_symbol, (int (*) PARAMS ((char *, CORE_ADDR *))) nosymbol);
bd5635a1 425 de_fault (to_create_inferior, maybe_kill_then_create_inferior);
47b8a5ce 426 de_fault (to_mourn_inferior, (void (*) PARAMS((void))) noprocess);
597dc86b 427 de_fault (to_can_run, return_zero);
47b8a5ce
PS
428 de_fault (to_notice_signals, (void (*) PARAMS((int))) ignore);
429 de_fault (to_thread_alive, (int (*) PARAMS((int))) ignore);
430 de_fault (to_stop, (void (*) PARAMS((void))) ignore);
bd5635a1
RP
431
432#undef de_fault
433}
434
cad1498f
SG
435/* Go through the target stack from top to bottom, copying over zero entries in
436 current_target. In effect, we are doing class inheritance through the
437 pushed target vectors. */
438
439static void
440update_current_target ()
441{
442 struct target_stack_item *item;
443 struct target_ops *t;
444
445 /* First, reset current_target */
446 memset (&current_target, 0, sizeof current_target);
447
448 for (item = target_stack; item; item = item->next)
449 {
450 t = item->target_ops;
451
452#define INHERIT(FIELD, TARGET) \
453 if (!current_target.FIELD) \
454 current_target.FIELD = TARGET->FIELD
455
456 INHERIT (to_shortname, t);
457 INHERIT (to_longname, t);
458 INHERIT (to_doc, t);
459 INHERIT (to_open, t);
460 INHERIT (to_close, t);
461 INHERIT (to_attach, t);
462 INHERIT (to_detach, t);
463 INHERIT (to_resume, t);
464 INHERIT (to_wait, t);
465 INHERIT (to_fetch_registers, t);
466 INHERIT (to_store_registers, t);
467 INHERIT (to_prepare_to_store, t);
468 INHERIT (to_xfer_memory, t);
469 INHERIT (to_files_info, t);
470 INHERIT (to_insert_breakpoint, t);
471 INHERIT (to_remove_breakpoint, t);
472 INHERIT (to_terminal_init, t);
473 INHERIT (to_terminal_inferior, t);
474 INHERIT (to_terminal_ours_for_output, t);
475 INHERIT (to_terminal_ours, t);
476 INHERIT (to_terminal_info, t);
477 INHERIT (to_kill, t);
478 INHERIT (to_load, t);
479 INHERIT (to_lookup_symbol, t);
480 INHERIT (to_create_inferior, t);
481 INHERIT (to_mourn_inferior, t);
482 INHERIT (to_can_run, t);
483 INHERIT (to_notice_signals, t);
43fc25c8
JL
484 INHERIT (to_thread_alive, t);
485 INHERIT (to_stop, t);
cad1498f
SG
486 INHERIT (to_stratum, t);
487 INHERIT (DONT_USE, t);
488 INHERIT (to_has_all_memory, t);
489 INHERIT (to_has_memory, t);
490 INHERIT (to_has_stack, t);
491 INHERIT (to_has_registers, t);
492 INHERIT (to_has_execution, t);
493 INHERIT (to_sections, t);
494 INHERIT (to_sections_end, t);
495 INHERIT (to_magic, t);
496
497#undef INHERIT
498 }
499}
500
bd5635a1
RP
501/* Push a new target type into the stack of the existing target accessors,
502 possibly superseding some of the existing accessors.
503
504 Result is zero if the pushed target ended up on top of the stack,
505 nonzero if at least one target is on top of it.
506
507 Rather than allow an empty stack, we always have the dummy target at
508 the bottom stratum, so we can call the function vectors without
509 checking them. */
510
511int
512push_target (t)
513 struct target_ops *t;
514{
cad1498f
SG
515 struct target_stack_item *cur, *prev, *tmp;
516
517 /* Check magic number. If wrong, it probably means someone changed
518 the struct definition, but not all the places that initialize one. */
519 if (t->to_magic != OPS_MAGIC)
520 {
521 fprintf_unfiltered(gdb_stderr,
522 "Magic number of %s target struct wrong\n",
523 t->to_shortname);
524 abort();
525 }
526
527 /* Find the proper stratum to install this target in. */
528
529 for (prev = NULL, cur = target_stack; cur; prev = cur, cur = cur->next)
530 {
531 if ((int)(t->to_stratum) >= (int)(cur->target_ops->to_stratum))
532 break;
533 }
534
535 /* If there's already targets at this stratum, remove them. */
536
537 if (cur)
538 while (t->to_stratum == cur->target_ops->to_stratum)
539 {
540 /* There's already something on this stratum. Close it off. */
8fc2b417
SG
541 if (cur->target_ops->to_close)
542 (cur->target_ops->to_close) (0);
cad1498f
SG
543 if (prev)
544 prev->next = cur->next; /* Unchain old target_ops */
545 else
546 target_stack = cur->next; /* Unchain first on list */
547 tmp = cur->next;
548 free (cur);
549 cur = tmp;
550 }
551
552 /* We have removed all targets in our stratum, now add the new one. */
553
f6d5d006
JK
554 tmp = (struct target_stack_item *)
555 xmalloc (sizeof (struct target_stack_item));
cad1498f
SG
556 tmp->next = cur;
557 tmp->target_ops = t;
bd5635a1 558
bd5635a1 559 if (prev)
cad1498f 560 prev->next = tmp;
bd5635a1 561 else
cad1498f
SG
562 target_stack = tmp;
563
564 update_current_target ();
bd5635a1 565
cad1498f 566 cleanup_target (&current_target); /* Fill in the gaps */
43fc25c8
JL
567
568#ifdef MAINTENANCE_CMDS
569 if (targetdebug)
570 setup_target_debug ();
571#endif
572
bd5635a1
RP
573 return prev != 0;
574}
575
576/* Remove a target_ops vector from the stack, wherever it may be.
cad1498f 577 Return how many times it was removed (0 or 1). */
bd5635a1
RP
578
579int
580unpush_target (t)
581 struct target_ops *t;
582{
cad1498f 583 struct target_stack_item *cur, *prev;
bd5635a1 584
a3ecbe7c
SG
585 if (t->to_close)
586 t->to_close (0); /* Let it clean up */
67e947de 587
cad1498f
SG
588 /* Look for the specified target. Note that we assume that a target
589 can only occur once in the target stack. */
590
591 for (cur = target_stack, prev = NULL; cur; prev = cur, cur = cur->next)
592 if (cur->target_ops == t)
593 break;
594
595 if (!cur)
596 return 0; /* Didn't find target_ops, quit now */
597
598 /* Unchain the target */
599
600 if (!prev)
67e947de 601 target_stack = cur->next;
cad1498f
SG
602 else
603 prev->next = cur->next;
604
605 free (cur); /* Release the target_stack_item */
606
67e947de
SG
607 update_current_target ();
608 cleanup_target (&current_target);
cad1498f
SG
609
610 return 1;
bd5635a1
RP
611}
612
613void
614pop_target ()
615{
cad1498f
SG
616 (current_target.to_close)(0); /* Let it clean up */
617 if (unpush_target (target_stack->target_ops) == 1)
618 return;
619
620 fprintf_unfiltered(gdb_stderr,
621 "pop_target couldn't find target %s\n",
622 current_target.to_shortname);
623 abort();
bd5635a1
RP
624}
625
49781499 626#undef MIN
e17960fb
JG
627#define MIN(A, B) (((A) <= (B)) ? (A) : (B))
628
4ad0021e
JK
629/* target_read_string -- read a null terminated string, up to LEN bytes,
630 from MEMADDR in target. Set *ERRNOP to the errno code, or 0 if successful.
631 Set *STRING to a pointer to malloc'd memory containing the data; the caller
632 is responsible for freeing it. Return the number of bytes successfully
633 read. */
e17960fb
JG
634
635int
4ad0021e 636target_read_string (memaddr, string, len, errnop)
e17960fb 637 CORE_ADDR memaddr;
4ad0021e 638 char **string;
e17960fb 639 int len;
4ad0021e 640 int *errnop;
e17960fb
JG
641{
642 int tlen, origlen, offset, i;
643 char buf[4];
4ad0021e
JK
644 int errcode = 0;
645 char *buffer;
646 int buffer_allocated;
647 char *bufptr;
648 unsigned int nbytes_read = 0;
649
650 /* Small for testing. */
651 buffer_allocated = 4;
652 buffer = xmalloc (buffer_allocated);
653 bufptr = buffer;
e17960fb
JG
654
655 origlen = len;
656
657 while (len > 0)
658 {
659 tlen = MIN (len, 4 - (memaddr & 3));
660 offset = memaddr & 3;
661
47b8a5ce 662 errcode = target_xfer_memory (memaddr & ~3, buf, 4, 0, NULL);
4ad0021e 663 if (errcode != 0)
47b8a5ce
PS
664 {
665 /* The transfer request might have crossed the boundary to an
666 unallocated region of memory. Retry the transfer, requesting
667 a single byte. */
668 tlen = 1;
669 offset = 0;
670 errcode = target_xfer_memory (memaddr, buf, 1, 0, NULL);
671 if (errcode != 0)
672 goto done;
673 }
4ad0021e
JK
674
675 if (bufptr - buffer + tlen > buffer_allocated)
676 {
677 unsigned int bytes;
678 bytes = bufptr - buffer;
679 buffer_allocated *= 2;
680 buffer = xrealloc (buffer, buffer_allocated);
681 bufptr = buffer + bytes;
682 }
e17960fb
JG
683
684 for (i = 0; i < tlen; i++)
685 {
4ad0021e 686 *bufptr++ = buf[i + offset];
e17960fb 687 if (buf[i + offset] == '\000')
4ad0021e
JK
688 {
689 nbytes_read += i + 1;
690 goto done;
691 }
e17960fb
JG
692 }
693
694 memaddr += tlen;
695 len -= tlen;
4ad0021e 696 nbytes_read += tlen;
e17960fb 697 }
4ad0021e
JK
698 done:
699 if (errnop != NULL)
700 *errnop = errcode;
701 if (string != NULL)
702 *string = buffer;
703 return nbytes_read;
e17960fb
JG
704}
705
49781499
JK
706/* Read LEN bytes of target memory at address MEMADDR, placing the results in
707 GDB's memory at MYADDR. Returns either 0 for success or an errno value
708 if any error occurs.
bd5635a1 709
49781499
JK
710 If an error occurs, no guarantee is made about the contents of the data at
711 MYADDR. In particular, the caller should not depend upon partial reads
712 filling the buffer with good data. There is no way for the caller to know
713 how much good data might have been transfered anyway. Callers that can
714 deal with partial reads should call target_read_memory_partial. */
bd5635a1
RP
715
716int
717target_read_memory (memaddr, myaddr, len)
718 CORE_ADDR memaddr;
719 char *myaddr;
720 int len;
721{
47b8a5ce
PS
722 return target_xfer_memory (memaddr, myaddr, len, 0, NULL);
723}
724
725int
726target_read_memory_section (memaddr, myaddr, len, bfd_section)
727 CORE_ADDR memaddr;
728 char *myaddr;
729 int len;
730 asection *bfd_section;
731{
732 return target_xfer_memory (memaddr, myaddr, len, 0, bfd_section);
bd5635a1
RP
733}
734
49781499
JK
735/* Read LEN bytes of target memory at address MEMADDR, placing the results
736 in GDB's memory at MYADDR. Returns a count of the bytes actually read,
737 and optionally an errno value in the location pointed to by ERRNOPTR
738 if ERRNOPTR is non-null. */
739
740int
741target_read_memory_partial (memaddr, myaddr, len, errnoptr)
742 CORE_ADDR memaddr;
743 char *myaddr;
744 int len;
745 int *errnoptr;
746{
747 int nread; /* Number of bytes actually read. */
748 int errcode; /* Error from last read. */
749
750 /* First try a complete read. */
47b8a5ce 751 errcode = target_xfer_memory (memaddr, myaddr, len, 0, NULL);
49781499
JK
752 if (errcode == 0)
753 {
754 /* Got it all. */
755 nread = len;
756 }
757 else
758 {
759 /* Loop, reading one byte at a time until we get as much as we can. */
760 for (errcode = 0, nread = 0; len > 0 && errcode == 0; nread++, len--)
761 {
47b8a5ce 762 errcode = target_xfer_memory (memaddr++, myaddr++, 1, 0, NULL);
49781499
JK
763 }
764 /* If an error, the last read was unsuccessful, so adjust count. */
765 if (errcode != 0)
766 {
767 nread--;
768 }
769 }
770 if (errnoptr != NULL)
771 {
772 *errnoptr = errcode;
773 }
774 return (nread);
775}
776
bd5635a1
RP
777int
778target_write_memory (memaddr, myaddr, len)
779 CORE_ADDR memaddr;
780 char *myaddr;
781 int len;
782{
47b8a5ce 783 return target_xfer_memory (memaddr, myaddr, len, 1, NULL);
bd5635a1
RP
784}
785
47b8a5ce
PS
786/* This variable is used to pass section information down to targets. This
787 *should* be done by adding an argument to the target_xfer_memory function
788 of all the targets, but I didn't feel like changing 50+ files. */
789
790asection *target_memory_bfd_section = NULL;
791
49781499
JK
792/* Move memory to or from the targets. Iterate until all of it has
793 been moved, if necessary. The top target gets priority; anything
794 it doesn't want, is offered to the next one down, etc. Note the
795 business with curlen: if an early target says "no, but I have a
796 boundary overlapping this xfer" then we shorten what we offer to
797 the subsequent targets so the early guy will get a chance at the
798 tail before the subsequent ones do.
799
800 Result is 0 or errno value. */
801
47b8a5ce
PS
802static int
803target_xfer_memory (memaddr, myaddr, len, write, bfd_section)
bd5635a1
RP
804 CORE_ADDR memaddr;
805 char *myaddr;
806 int len;
807 int write;
47b8a5ce 808 asection *bfd_section;
bd5635a1
RP
809{
810 int curlen;
811 int res;
812 struct target_ops *t;
cad1498f 813 struct target_stack_item *item;
49781499 814
47b8a5ce
PS
815 /* Zero length requests are ok and require no work. */
816 if (len == 0)
817 return 0;
818
819 target_memory_bfd_section = bfd_section;
820
49781499
JK
821 /* to_xfer_memory is not guaranteed to set errno, even when it returns
822 0. */
823 errno = 0;
824
bd5635a1 825 /* The quick case is that the top target does it all. */
cad1498f
SG
826 res = current_target.to_xfer_memory
827 (memaddr, myaddr, len, write, &current_target);
bd5635a1
RP
828 if (res == len)
829 return 0;
830
831 if (res > 0)
832 goto bump;
833 /* If res <= 0 then we call it again in the loop. Ah well. */
834
835 for (; len > 0;)
836 {
837 curlen = len; /* Want to do it all */
cad1498f 838 for (item = target_stack; item; item = item->next)
bd5635a1 839 {
cad1498f 840 t = item->target_ops;
a3ecbe7c
SG
841 if (!t->to_has_memory)
842 continue;
cad1498f
SG
843
844 res = t->to_xfer_memory (memaddr, myaddr, curlen, write, t);
845 if (res > 0)
846 break; /* Handled all or part of xfer */
847 if (t->to_has_all_memory)
848 break;
bd5635a1 849 }
cad1498f 850
bd5635a1
RP
851 if (res <= 0)
852 {
853 /* If this address is for nonexistent memory,
854 read zeros if reading, or do nothing if writing. Return error. */
855 if (!write)
a8e033f2 856 memset (myaddr, 0, len);
e17960fb
JG
857 if (errno == 0)
858 return EIO;
859 else
860 return errno;
bd5635a1
RP
861 }
862bump:
863 memaddr += res;
864 myaddr += res;
865 len -= res;
866 }
867 return 0; /* We managed to cover it all somehow. */
868}
869
870
e1ce8aa5 871/* ARGSUSED */
bd5635a1
RP
872static void
873target_info (args, from_tty)
874 char *args;
875 int from_tty;
876{
877 struct target_ops *t;
cad1498f 878 struct target_stack_item *item;
bd5635a1
RP
879 int has_all_mem = 0;
880
80d68b1d 881 if (symfile_objfile != NULL)
67ac9759 882 printf_unfiltered ("Symbols from \"%s\".\n", symfile_objfile->name);
bd5635a1
RP
883
884#ifdef FILES_INFO_HOOK
885 if (FILES_INFO_HOOK ())
886 return;
887#endif
888
cad1498f 889 for (item = target_stack; item; item = item->next)
bd5635a1 890 {
cad1498f
SG
891 t = item->target_ops;
892
a3ecbe7c
SG
893 if (!t->to_has_memory)
894 continue;
895
bd5635a1
RP
896 if ((int)(t->to_stratum) <= (int)dummy_stratum)
897 continue;
898 if (has_all_mem)
cad1498f 899 printf_unfiltered("\tWhile running this, GDB does not access memory from...\n");
67ac9759 900 printf_unfiltered("%s:\n", t->to_longname);
e17960fb 901 (t->to_files_info)(t);
bd5635a1
RP
902 has_all_mem = t->to_has_all_memory;
903 }
904}
905
f2fc6e7a
JK
906/* This is to be called by the open routine before it does
907 anything. */
bd5635a1 908
f2fc6e7a
JK
909void
910target_preopen (from_tty)
bd5635a1
RP
911 int from_tty;
912{
bd5635a1
RP
913 dont_repeat();
914
bd5635a1
RP
915 if (target_has_execution)
916 {
917 if (query ("A program is being debugged already. Kill it? "))
e17960fb 918 target_kill ();
bd5635a1
RP
919 else
920 error ("Program not killed.");
921 }
4ad0021e
JK
922
923 /* Calling target_kill may remove the target from the stack. But if
924 it doesn't (which seems like a win for UDI), remove it now. */
925
926 if (target_has_execution)
927 pop_target ();
bd5635a1
RP
928}
929
49781499
JK
930/* Detach a target after doing deferred register stores. */
931
932void
933target_detach (args, from_tty)
934 char *args;
935 int from_tty;
936{
937 /* Handle any optimized stores to the inferior. */
938#ifdef DO_DEFERRED_STORES
939 DO_DEFERRED_STORES;
940#endif
cad1498f 941 (current_target.to_detach) (args, from_tty);
49781499
JK
942}
943
1340861c
KH
944void
945target_link (modname, t_reloc)
946 char *modname;
947 CORE_ADDR *t_reloc;
948{
cad1498f 949 if (STREQ(current_target.to_shortname, "rombug"))
1340861c 950 {
cad1498f 951 (current_target.to_lookup_symbol) (modname, t_reloc);
16d2cc80
SS
952 if (*t_reloc == 0)
953 error("Unable to link to %s and get relocation in rombug", modname);
1340861c
KH
954 }
955 else
956 *t_reloc = (CORE_ADDR)-1;
957}
958
597dc86b
SG
959/* Look through the list of possible targets for a target that can
960 execute a run or attach command without any other data. This is
961 used to locate the default process stratum.
962
963 Result is always valid (error() is called for errors). */
964
965static struct target_ops *
966find_default_run_target (do_mesg)
967 char *do_mesg;
968{
969 struct target_ops **t;
49781499 970 struct target_ops *runable = NULL;
597dc86b
SG
971 int count;
972
973 count = 0;
974
975 for (t = target_structs; t < target_structs + target_struct_size;
976 ++t)
977 {
43fc25c8 978 if ((*t)->to_can_run && target_can_run(*t))
597dc86b
SG
979 {
980 runable = *t;
981 ++count;
982 }
983 }
984
985 if (count != 1)
986 error ("Don't know how to %s. Try \"help target\".", do_mesg);
987
988 return runable;
989}
990
991void
992find_default_attach (args, from_tty)
993 char *args;
994 int from_tty;
995{
996 struct target_ops *t;
997
998 t = find_default_run_target("attach");
999 (t->to_attach) (args, from_tty);
1000 return;
1001}
1002
1003void
1004find_default_create_inferior (exec_file, allargs, env)
1005 char *exec_file;
1006 char *allargs;
1007 char **env;
1008{
1009 struct target_ops *t;
1010
1011 t = find_default_run_target("run");
1012 (t->to_create_inferior) (exec_file, allargs, env);
1013 return;
1014}
1015
1016static int
1017return_zero ()
1018{
1019 return 0;
1020}
1021
49781499
JK
1022struct target_ops *
1023find_core_target ()
1024{
1025 struct target_ops **t;
1026 struct target_ops *runable = NULL;
1027 int count;
1028
1029 count = 0;
1030
1031 for (t = target_structs; t < target_structs + target_struct_size;
1032 ++t)
1033 {
1034 if ((*t)->to_stratum == core_stratum)
1035 {
1036 runable = *t;
1037 ++count;
1038 }
1039 }
1040
1041 return(count == 1 ? runable : NULL);
1042}
67ac9759 1043\f
16d2cc80
SS
1044/* The inferior process has died. Long live the inferior! */
1045
1046void
1047generic_mourn_inferior ()
1048{
cad1498f
SG
1049 extern int show_breakpoint_hit_counts;
1050
16d2cc80
SS
1051 inferior_pid = 0;
1052 attach_flag = 0;
1053 breakpoint_init_inferior ();
1054 registers_changed ();
1055
1056#ifdef CLEAR_DEFERRED_STORES
1057 /* Delete any pending stores to the inferior... */
1058 CLEAR_DEFERRED_STORES;
1059#endif
1060
1061 reopen_exec_file ();
1062 reinit_frame_cache ();
1063
1064 /* It is confusing to the user for ignore counts to stick around
1065 from previous runs of the inferior. So clear them. */
cad1498f
SG
1066 /* However, it is more confusing for the ignore counts to disappear when
1067 using hit counts. So don't clear them if we're counting hits. */
1068 if (!show_breakpoint_hit_counts)
1069 breakpoint_clear_ignore_counts ();
16d2cc80
SS
1070}
1071\f
67ac9759
JK
1072/* This table must match in order and size the signals in enum target_signal
1073 in target.h. */
1074static struct {
1075 char *name;
1076 char *string;
1077 } signals [] =
1078{
1079 {"0", "Signal 0"},
1080 {"SIGHUP", "Hangup"},
1081 {"SIGINT", "Interrupt"},
1082 {"SIGQUIT", "Quit"},
1083 {"SIGILL", "Illegal instruction"},
1084 {"SIGTRAP", "Trace/breakpoint trap"},
1085 {"SIGABRT", "Aborted"},
1086 {"SIGEMT", "Emulation trap"},
1087 {"SIGFPE", "Arithmetic exception"},
1088 {"SIGKILL", "Killed"},
1089 {"SIGBUS", "Bus error"},
1090 {"SIGSEGV", "Segmentation fault"},
1091 {"SIGSYS", "Bad system call"},
1092 {"SIGPIPE", "Broken pipe"},
1093 {"SIGALRM", "Alarm clock"},
1094 {"SIGTERM", "Terminated"},
1095 {"SIGURG", "Urgent I/O condition"},
1096 {"SIGSTOP", "Stopped (signal)"},
1097 {"SIGTSTP", "Stopped (user)"},
1098 {"SIGCONT", "Continued"},
1099 {"SIGCHLD", "Child status changed"},
1100 {"SIGTTIN", "Stopped (tty input)"},
1101 {"SIGTTOU", "Stopped (tty output)"},
1102 {"SIGIO", "I/O possible"},
1103 {"SIGXCPU", "CPU time limit exceeded"},
1104 {"SIGXFSZ", "File size limit exceeded"},
1105 {"SIGVTALRM", "Virtual timer expired"},
1106 {"SIGPROF", "Profiling timer expired"},
1107 {"SIGWINCH", "Window size changed"},
1108 {"SIGLOST", "Resource lost"},
1109 {"SIGUSR1", "User defined signal 1"},
1110 {"SIGUSR2", "User defined signal 2"},
1111 {"SIGPWR", "Power fail/restart"},
1112 {"SIGPOLL", "Pollable event occurred"},
1113 {"SIGWIND", "SIGWIND"},
1114 {"SIGPHONE", "SIGPHONE"},
1115 {"SIGWAITING", "Process's LWPs are blocked"},
1116 {"SIGLWP", "Signal LWP"},
1117 {"SIGDANGER", "Swap space dangerously low"},
1118 {"SIGGRANT", "Monitor mode granted"},
1119 {"SIGRETRACT", "Need to relinguish monitor mode"},
1120 {"SIGMSG", "Monitor mode data available"},
1121 {"SIGSOUND", "Sound completed"},
1122 {"SIGSAK", "Secure attention"},
43fc25c8
JL
1123 {"SIGPRIO", "SIGPRIO"},
1124 {"SIG33", "Real-time event 33"},
1125 {"SIG34", "Real-time event 34"},
1126 {"SIG35", "Real-time event 35"},
1127 {"SIG36", "Real-time event 36"},
1128 {"SIG37", "Real-time event 37"},
1129 {"SIG38", "Real-time event 38"},
1130 {"SIG39", "Real-time event 39"},
1131 {"SIG40", "Real-time event 40"},
1132 {"SIG41", "Real-time event 41"},
1133 {"SIG42", "Real-time event 42"},
1134 {"SIG43", "Real-time event 43"},
1135 {"SIG44", "Real-time event 44"},
1136 {"SIG45", "Real-time event 45"},
1137 {"SIG46", "Real-time event 46"},
1138 {"SIG47", "Real-time event 47"},
1139 {"SIG48", "Real-time event 48"},
1140 {"SIG49", "Real-time event 49"},
1141 {"SIG50", "Real-time event 50"},
1142 {"SIG51", "Real-time event 51"},
1143 {"SIG52", "Real-time event 52"},
1144 {"SIG53", "Real-time event 53"},
1145 {"SIG54", "Real-time event 54"},
1146 {"SIG55", "Real-time event 55"},
1147 {"SIG56", "Real-time event 56"},
1148 {"SIG57", "Real-time event 57"},
1149 {"SIG58", "Real-time event 58"},
1150 {"SIG59", "Real-time event 59"},
1151 {"SIG60", "Real-time event 60"},
1152 {"SIG61", "Real-time event 61"},
1153 {"SIG62", "Real-time event 62"},
1154 {"SIG63", "Real-time event 63"},
1155
47b8a5ce 1156#if defined(MACH) || defined(__MACH__)
647e52ea
SG
1157 /* Mach exceptions */
1158 {"EXC_BAD_ACCESS", "Could not access memory"},
1159 {"EXC_BAD_INSTRUCTION", "Illegal instruction/operand"},
1160 {"EXC_ARITHMETIC", "Arithmetic exception"},
1161 {"EXC_EMULATION", "Emulation instruction"},
1162 {"EXC_SOFTWARE", "Software generated exception"},
1163 {"EXC_BREAKPOINT", "Breakpoint"},
47b8a5ce 1164#endif
67ac9759 1165 {NULL, "Unknown signal"},
4ad0021e
JK
1166 {NULL, "Internal error: printing TARGET_SIGNAL_DEFAULT"},
1167
67ac9759
JK
1168 /* Last entry, used to check whether the table is the right size. */
1169 {NULL, "TARGET_SIGNAL_MAGIC"}
1170};
1171
1172/* Return the string for a signal. */
1173char *
1174target_signal_to_string (sig)
1175 enum target_signal sig;
1176{
1177 return signals[sig].string;
1178}
1179
1180/* Return the name for a signal. */
1181char *
1182target_signal_to_name (sig)
1183 enum target_signal sig;
1184{
1185 if (sig == TARGET_SIGNAL_UNKNOWN)
1186 /* I think the code which prints this will always print it along with
1187 the string, so no need to be verbose. */
1188 return "?";
1189 return signals[sig].name;
1190}
1191
1192/* Given a name, return its signal. */
1193enum target_signal
1194target_signal_from_name (name)
1195 char *name;
1196{
1197 enum target_signal sig;
1198
1199 /* It's possible we also should allow "SIGCLD" as well as "SIGCHLD"
1200 for TARGET_SIGNAL_SIGCHLD. SIGIOT, on the other hand, is more
1201 questionable; seems like by now people should call it SIGABRT
1202 instead. */
1203
4ad0021e
JK
1204 /* This ugly cast brought to you by the native VAX compiler. */
1205 for (sig = TARGET_SIGNAL_HUP;
1206 signals[sig].name != NULL;
1207 sig = (enum target_signal)((int)sig + 1))
67ac9759
JK
1208 if (STREQ (name, signals[sig].name))
1209 return sig;
1210 return TARGET_SIGNAL_UNKNOWN;
1211}
4ad0021e
JK
1212\f
1213/* The following functions are to help certain targets deal
1214 with the signal/waitstatus stuff. They could just as well be in
1215 a file called native-utils.c or unixwaitstatus-utils.c or whatever. */
1216
1217/* Convert host signal to our signals. */
1218enum target_signal
1219target_signal_from_host (hostsig)
1220 int hostsig;
1221{
1222 /* A switch statement would make sense but would require special kludges
1223 to deal with the cases where more than one signal has the same number. */
1224
1225 if (hostsig == 0) return TARGET_SIGNAL_0;
1226
1227#if defined (SIGHUP)
1228 if (hostsig == SIGHUP) return TARGET_SIGNAL_HUP;
1229#endif
1230#if defined (SIGINT)
1231 if (hostsig == SIGINT) return TARGET_SIGNAL_INT;
1232#endif
1233#if defined (SIGQUIT)
1234 if (hostsig == SIGQUIT) return TARGET_SIGNAL_QUIT;
1235#endif
1236#if defined (SIGILL)
1237 if (hostsig == SIGILL) return TARGET_SIGNAL_ILL;
1238#endif
1239#if defined (SIGTRAP)
1240 if (hostsig == SIGTRAP) return TARGET_SIGNAL_TRAP;
1241#endif
1242#if defined (SIGABRT)
1243 if (hostsig == SIGABRT) return TARGET_SIGNAL_ABRT;
1244#endif
1245#if defined (SIGEMT)
1246 if (hostsig == SIGEMT) return TARGET_SIGNAL_EMT;
1247#endif
1248#if defined (SIGFPE)
1249 if (hostsig == SIGFPE) return TARGET_SIGNAL_FPE;
1250#endif
1251#if defined (SIGKILL)
1252 if (hostsig == SIGKILL) return TARGET_SIGNAL_KILL;
1253#endif
1254#if defined (SIGBUS)
1255 if (hostsig == SIGBUS) return TARGET_SIGNAL_BUS;
1256#endif
1257#if defined (SIGSEGV)
1258 if (hostsig == SIGSEGV) return TARGET_SIGNAL_SEGV;
1259#endif
1260#if defined (SIGSYS)
1261 if (hostsig == SIGSYS) return TARGET_SIGNAL_SYS;
1262#endif
1263#if defined (SIGPIPE)
1264 if (hostsig == SIGPIPE) return TARGET_SIGNAL_PIPE;
1265#endif
1266#if defined (SIGALRM)
1267 if (hostsig == SIGALRM) return TARGET_SIGNAL_ALRM;
1268#endif
1269#if defined (SIGTERM)
1270 if (hostsig == SIGTERM) return TARGET_SIGNAL_TERM;
1271#endif
1272#if defined (SIGUSR1)
1273 if (hostsig == SIGUSR1) return TARGET_SIGNAL_USR1;
1274#endif
1275#if defined (SIGUSR2)
1276 if (hostsig == SIGUSR2) return TARGET_SIGNAL_USR2;
1277#endif
1278#if defined (SIGCLD)
1279 if (hostsig == SIGCLD) return TARGET_SIGNAL_CHLD;
1280#endif
1281#if defined (SIGCHLD)
1282 if (hostsig == SIGCHLD) return TARGET_SIGNAL_CHLD;
1283#endif
1284#if defined (SIGPWR)
1285 if (hostsig == SIGPWR) return TARGET_SIGNAL_PWR;
1286#endif
1287#if defined (SIGWINCH)
1288 if (hostsig == SIGWINCH) return TARGET_SIGNAL_WINCH;
1289#endif
1290#if defined (SIGURG)
1291 if (hostsig == SIGURG) return TARGET_SIGNAL_URG;
1292#endif
1293#if defined (SIGIO)
1294 if (hostsig == SIGIO) return TARGET_SIGNAL_IO;
1295#endif
1296#if defined (SIGPOLL)
1297 if (hostsig == SIGPOLL) return TARGET_SIGNAL_POLL;
1298#endif
1299#if defined (SIGSTOP)
1300 if (hostsig == SIGSTOP) return TARGET_SIGNAL_STOP;
1301#endif
1302#if defined (SIGTSTP)
1303 if (hostsig == SIGTSTP) return TARGET_SIGNAL_TSTP;
1304#endif
1305#if defined (SIGCONT)
1306 if (hostsig == SIGCONT) return TARGET_SIGNAL_CONT;
1307#endif
1308#if defined (SIGTTIN)
1309 if (hostsig == SIGTTIN) return TARGET_SIGNAL_TTIN;
1310#endif
1311#if defined (SIGTTOU)
1312 if (hostsig == SIGTTOU) return TARGET_SIGNAL_TTOU;
1313#endif
1314#if defined (SIGVTALRM)
1315 if (hostsig == SIGVTALRM) return TARGET_SIGNAL_VTALRM;
1316#endif
1317#if defined (SIGPROF)
1318 if (hostsig == SIGPROF) return TARGET_SIGNAL_PROF;
1319#endif
1320#if defined (SIGXCPU)
1321 if (hostsig == SIGXCPU) return TARGET_SIGNAL_XCPU;
1322#endif
1323#if defined (SIGXFSZ)
1324 if (hostsig == SIGXFSZ) return TARGET_SIGNAL_XFSZ;
1325#endif
1326#if defined (SIGWIND)
1327 if (hostsig == SIGWIND) return TARGET_SIGNAL_WIND;
1328#endif
1329#if defined (SIGPHONE)
1330 if (hostsig == SIGPHONE) return TARGET_SIGNAL_PHONE;
1331#endif
1332#if defined (SIGLOST)
1333 if (hostsig == SIGLOST) return TARGET_SIGNAL_LOST;
1334#endif
1335#if defined (SIGWAITING)
1336 if (hostsig == SIGWAITING) return TARGET_SIGNAL_WAITING;
1337#endif
1338#if defined (SIGLWP)
1339 if (hostsig == SIGLWP) return TARGET_SIGNAL_LWP;
1340#endif
1341#if defined (SIGDANGER)
1342 if (hostsig == SIGDANGER) return TARGET_SIGNAL_DANGER;
1343#endif
1344#if defined (SIGGRANT)
1345 if (hostsig == SIGGRANT) return TARGET_SIGNAL_GRANT;
1346#endif
1347#if defined (SIGRETRACT)
1348 if (hostsig == SIGRETRACT) return TARGET_SIGNAL_RETRACT;
1349#endif
1350#if defined (SIGMSG)
1351 if (hostsig == SIGMSG) return TARGET_SIGNAL_MSG;
1352#endif
1353#if defined (SIGSOUND)
1354 if (hostsig == SIGSOUND) return TARGET_SIGNAL_SOUND;
1355#endif
1356#if defined (SIGSAK)
1357 if (hostsig == SIGSAK) return TARGET_SIGNAL_SAK;
43fc25c8
JL
1358#endif
1359#if defined (SIGPRIO)
1360 if (hostsig == SIGPRIO) return TARGET_SIGNAL_PRIO;
1361#endif
647e52ea
SG
1362
1363 /* Mach exceptions. Assumes that the values for EXC_ are positive! */
1364#if defined (EXC_BAD_ACCESS) && defined (_NSIG)
1365 if (hostsig == _NSIG + EXC_BAD_ACCESS) return TARGET_EXC_BAD_ACCESS;
1366#endif
1367#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
1368 if (hostsig == _NSIG + EXC_BAD_INSTRUCTION) return TARGET_EXC_BAD_INSTRUCTION;
1369#endif
1370#if defined (EXC_ARITHMETIC) && defined (_NSIG)
1371 if (hostsig == _NSIG + EXC_ARITHMETIC) return TARGET_EXC_ARITHMETIC;
1372#endif
1373#if defined (EXC_EMULATION) && defined (_NSIG)
1374 if (hostsig == _NSIG + EXC_EMULATION) return TARGET_EXC_EMULATION;
1375#endif
1376#if defined (EXC_SOFTWARE) && defined (_NSIG)
1377 if (hostsig == _NSIG + EXC_SOFTWARE) return TARGET_EXC_SOFTWARE;
1378#endif
1379#if defined (EXC_BREAKPOINT) && defined (_NSIG)
1380 if (hostsig == _NSIG + EXC_BREAKPOINT) return TARGET_EXC_BREAKPOINT;
1381#endif
1382
43fc25c8
JL
1383#if defined (REALTIME_LO)
1384 if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
1385 return (enum target_signal)
1386 (hostsig - 33 + (int) TARGET_SIGNAL_REALTIME_33);
4ad0021e
JK
1387#endif
1388 return TARGET_SIGNAL_UNKNOWN;
1389}
1390
1391int
1392target_signal_to_host (oursig)
1393 enum target_signal oursig;
1394{
1395 switch (oursig)
1396 {
1397 case TARGET_SIGNAL_0: return 0;
1398
1399#if defined (SIGHUP)
1400 case TARGET_SIGNAL_HUP: return SIGHUP;
1401#endif
1402#if defined (SIGINT)
1403 case TARGET_SIGNAL_INT: return SIGINT;
1404#endif
1405#if defined (SIGQUIT)
1406 case TARGET_SIGNAL_QUIT: return SIGQUIT;
1407#endif
1408#if defined (SIGILL)
1409 case TARGET_SIGNAL_ILL: return SIGILL;
1410#endif
1411#if defined (SIGTRAP)
1412 case TARGET_SIGNAL_TRAP: return SIGTRAP;
1413#endif
1414#if defined (SIGABRT)
1415 case TARGET_SIGNAL_ABRT: return SIGABRT;
1416#endif
1417#if defined (SIGEMT)
1418 case TARGET_SIGNAL_EMT: return SIGEMT;
1419#endif
1420#if defined (SIGFPE)
1421 case TARGET_SIGNAL_FPE: return SIGFPE;
1422#endif
1423#if defined (SIGKILL)
1424 case TARGET_SIGNAL_KILL: return SIGKILL;
1425#endif
1426#if defined (SIGBUS)
1427 case TARGET_SIGNAL_BUS: return SIGBUS;
1428#endif
1429#if defined (SIGSEGV)
1430 case TARGET_SIGNAL_SEGV: return SIGSEGV;
1431#endif
1432#if defined (SIGSYS)
1433 case TARGET_SIGNAL_SYS: return SIGSYS;
1434#endif
1435#if defined (SIGPIPE)
1436 case TARGET_SIGNAL_PIPE: return SIGPIPE;
1437#endif
1438#if defined (SIGALRM)
1439 case TARGET_SIGNAL_ALRM: return SIGALRM;
1440#endif
1441#if defined (SIGTERM)
1442 case TARGET_SIGNAL_TERM: return SIGTERM;
1443#endif
1444#if defined (SIGUSR1)
1445 case TARGET_SIGNAL_USR1: return SIGUSR1;
1446#endif
1447#if defined (SIGUSR2)
1448 case TARGET_SIGNAL_USR2: return SIGUSR2;
1449#endif
1450#if defined (SIGCHLD) || defined (SIGCLD)
1451 case TARGET_SIGNAL_CHLD:
1452#if defined (SIGCHLD)
1453 return SIGCHLD;
1454#else
1455 return SIGCLD;
1456#endif
1457#endif /* SIGCLD or SIGCHLD */
1458#if defined (SIGPWR)
1459 case TARGET_SIGNAL_PWR: return SIGPWR;
1460#endif
1461#if defined (SIGWINCH)
1462 case TARGET_SIGNAL_WINCH: return SIGWINCH;
1463#endif
1464#if defined (SIGURG)
1465 case TARGET_SIGNAL_URG: return SIGURG;
1466#endif
1467#if defined (SIGIO)
1468 case TARGET_SIGNAL_IO: return SIGIO;
1469#endif
1470#if defined (SIGPOLL)
1471 case TARGET_SIGNAL_POLL: return SIGPOLL;
1472#endif
1473#if defined (SIGSTOP)
1474 case TARGET_SIGNAL_STOP: return SIGSTOP;
1475#endif
1476#if defined (SIGTSTP)
1477 case TARGET_SIGNAL_TSTP: return SIGTSTP;
1478#endif
1479#if defined (SIGCONT)
1480 case TARGET_SIGNAL_CONT: return SIGCONT;
1481#endif
1482#if defined (SIGTTIN)
1483 case TARGET_SIGNAL_TTIN: return SIGTTIN;
1484#endif
1485#if defined (SIGTTOU)
1486 case TARGET_SIGNAL_TTOU: return SIGTTOU;
1487#endif
1488#if defined (SIGVTALRM)
1489 case TARGET_SIGNAL_VTALRM: return SIGVTALRM;
1490#endif
1491#if defined (SIGPROF)
1492 case TARGET_SIGNAL_PROF: return SIGPROF;
1493#endif
1494#if defined (SIGXCPU)
1495 case TARGET_SIGNAL_XCPU: return SIGXCPU;
1496#endif
1497#if defined (SIGXFSZ)
1498 case TARGET_SIGNAL_XFSZ: return SIGXFSZ;
1499#endif
1500#if defined (SIGWIND)
1501 case TARGET_SIGNAL_WIND: return SIGWIND;
1502#endif
1503#if defined (SIGPHONE)
1504 case TARGET_SIGNAL_PHONE: return SIGPHONE;
1505#endif
1506#if defined (SIGLOST)
1507 case TARGET_SIGNAL_LOST: return SIGLOST;
1508#endif
1509#if defined (SIGWAITING)
1510 case TARGET_SIGNAL_WAITING: return SIGWAITING;
1511#endif
1512#if defined (SIGLWP)
1513 case TARGET_SIGNAL_LWP: return SIGLWP;
1514#endif
1515#if defined (SIGDANGER)
1516 case TARGET_SIGNAL_DANGER: return SIGDANGER;
1517#endif
1518#if defined (SIGGRANT)
1519 case TARGET_SIGNAL_GRANT: return SIGGRANT;
1520#endif
1521#if defined (SIGRETRACT)
1522 case TARGET_SIGNAL_RETRACT: return SIGRETRACT;
1523#endif
1524#if defined (SIGMSG)
1525 case TARGET_SIGNAL_MSG: return SIGMSG;
1526#endif
1527#if defined (SIGSOUND)
1528 case TARGET_SIGNAL_SOUND: return SIGSOUND;
1529#endif
1530#if defined (SIGSAK)
1531 case TARGET_SIGNAL_SAK: return SIGSAK;
43fc25c8
JL
1532#endif
1533#if defined (SIGPRIO)
1534 case TARGET_SIGNAL_PRIO: return SIGPRIO;
4ad0021e 1535#endif
647e52ea
SG
1536
1537 /* Mach exceptions. Assumes that the values for EXC_ are positive! */
1538#if defined (EXC_BAD_ACCESS) && defined (_NSIG)
1539 case TARGET_EXC_BAD_ACCESS: return _NSIG + EXC_BAD_ACCESS;
1540#endif
1541#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
1542 case TARGET_EXC_BAD_INSTRUCTION: return _NSIG + EXC_BAD_INSTRUCTION;
1543#endif
1544#if defined (EXC_ARITHMETIC) && defined (_NSIG)
1545 case TARGET_EXC_ARITHMETIC: return _NSIG + EXC_ARITHMETIC;
1546#endif
1547#if defined (EXC_EMULATION) && defined (_NSIG)
1548 case TARGET_EXC_EMULATION: return _NSIG + EXC_EMULATION;
1549#endif
1550#if defined (EXC_SOFTWARE) && defined (_NSIG)
1551 case TARGET_EXC_SOFTWARE: return _NSIG + EXC_SOFTWARE;
1552#endif
1553#if defined (EXC_BREAKPOINT) && defined (_NSIG)
1554 case TARGET_EXC_BREAKPOINT: return _NSIG + EXC_BREAKPOINT;
1555#endif
1556
4ad0021e 1557 default:
43fc25c8
JL
1558#if defined (REALTIME_LO)
1559 if (oursig >= TARGET_SIGNAL_REALTIME_33
1560 && oursig <= TARGET_SIGNAL_REALTIME_63)
1561 {
1562 int retsig =
1563 (int)oursig - (int)TARGET_SIGNAL_REALTIME_33 + REALTIME_LO;
1564 if (retsig < REALTIME_HI)
1565 return retsig;
1566 }
1567#endif
4ad0021e
JK
1568 /* The user might be trying to do "signal SIGSAK" where this system
1569 doesn't have SIGSAK. */
1570 warning ("Signal %s does not exist on this system.\n",
1571 target_signal_to_name (oursig));
1572 return 0;
1573 }
1574}
1575
1576/* Helper function for child_wait and the Lynx derivatives of child_wait.
1577 HOSTSTATUS is the waitstatus from wait() or the equivalent; store our
1578 translation of that in OURSTATUS. */
1579void
1580store_waitstatus (ourstatus, hoststatus)
1581 struct target_waitstatus *ourstatus;
1582 int hoststatus;
1583{
1584#ifdef CHILD_SPECIAL_WAITSTATUS
1585 /* CHILD_SPECIAL_WAITSTATUS should return nonzero and set *OURSTATUS
1586 if it wants to deal with hoststatus. */
1587 if (CHILD_SPECIAL_WAITSTATUS (ourstatus, hoststatus))
1588 return;
1589#endif
1590
1591 if (WIFEXITED (hoststatus))
1592 {
1593 ourstatus->kind = TARGET_WAITKIND_EXITED;
1594 ourstatus->value.integer = WEXITSTATUS (hoststatus);
1595 }
1596 else if (!WIFSTOPPED (hoststatus))
1597 {
1598 ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
1599 ourstatus->value.sig = target_signal_from_host (WTERMSIG (hoststatus));
1600 }
1601 else
1602 {
1603 ourstatus->kind = TARGET_WAITKIND_STOPPED;
1604 ourstatus->value.sig = target_signal_from_host (WSTOPSIG (hoststatus));
1605 }
1606}
43fc25c8
JL
1607\f
1608/* In some circumstances we allow a command to specify a numeric
1609 signal. The idea is to keep these circumstances limited so that
1610 users (and scripts) develop portable habits. For comparison,
1611 POSIX.2 `kill' requires that 1,2,3,6,9,14, and 15 work (and using a
1612 numeric signal at all is obscelescent. We are slightly more
1613 lenient and allow 1-15 which should match host signal numbers on
1614 most systems. Use of symbolic signal names is strongly encouraged. */
4ad0021e 1615
43fc25c8
JL
1616enum target_signal
1617target_signal_from_command (num)
1618 int num;
1619{
1620 if (num >= 1 && num <= 15)
1621 return (enum target_signal)num;
1622 error ("Only signals 1-15 are valid as numeric signals.\n\
1623Use \"info signals\" for a list of symbolic signals.");
1624}
cad1498f
SG
1625\f
1626/* Returns zero to leave the inferior alone, one to interrupt it. */
1627int (*target_activity_function) PARAMS ((void));
1628int target_activity_fd;
67ac9759 1629\f
49781499
JK
1630/* Convert a normal process ID to a string. Returns the string in a static
1631 buffer. */
1632
1633char *
1634normal_pid_to_str (pid)
1635 int pid;
1636{
1637 static char buf[30];
1638
43fc25c8
JL
1639 if (STREQ (current_target.to_shortname, "remote"))
1640 sprintf (buf, "thread %d", pid);
1641 else
1642 sprintf (buf, "process %d", pid);
49781499
JK
1643
1644 return buf;
1645}
67ac9759 1646\f
43fc25c8
JL
1647#ifdef MAINTENANCE_CMDS
1648static struct target_ops debug_target;
1649
1650static void
1651debug_to_open (args, from_tty)
1652 char *args;
1653 int from_tty;
1654{
1655 debug_target.to_open (args, from_tty);
1656
1657 fprintf_unfiltered (stderr, "target_open (%s, %d)\n", args, from_tty);
1658}
1659
1660static void
1661debug_to_close (quitting)
1662 int quitting;
1663{
1664 debug_target.to_close (quitting);
1665
1666 fprintf_unfiltered (stderr, "target_close (%d)\n", quitting);
1667}
1668
1669static void
1670debug_to_attach (args, from_tty)
1671 char *args;
1672 int from_tty;
1673{
1674 debug_target.to_attach (args, from_tty);
1675
1676 fprintf_unfiltered (stderr, "target_attach (%s, %d)\n", args, from_tty);
1677}
1678
1679static void
1680debug_to_detach (args, from_tty)
1681 char *args;
1682 int from_tty;
1683{
1684 debug_target.to_detach (args, from_tty);
1685
1686 fprintf_unfiltered (stderr, "target_detach (%s, %d)\n", args, from_tty);
1687}
1688
1689static void
1690debug_to_resume (pid, step, siggnal)
1691 int pid;
1692 int step;
1693 enum target_signal siggnal;
1694{
1695 debug_target.to_resume (pid, step, siggnal);
1696
1697 fprintf_unfiltered (stderr, "target_resume (%d, %s, %s)\n", pid,
1698 step ? "step" : "continue",
1699 target_signal_to_name (siggnal));
1700}
1701
1702static int
1703debug_to_wait (pid, status)
1704 int pid;
1705 struct target_waitstatus *status;
1706{
1707 int retval;
1708
1709 retval = debug_target.to_wait (pid, status);
1710
1711 fprintf_unfiltered (stderr, "target_wait (%d, status) = %d, ", pid, retval);
1712 fprintf_unfiltered (stderr, "status->kind = ");
1713 switch (status->kind)
1714 {
1715 case TARGET_WAITKIND_EXITED:
1716 fprintf_unfiltered (stderr, "exited, status = %d\n", status->value.integer);
1717 break;
1718 case TARGET_WAITKIND_STOPPED:
1719 fprintf_unfiltered (stderr, "stopped, signal = %s\n",
1720 target_signal_to_name (status->value.sig));
1721 break;
1722 case TARGET_WAITKIND_SIGNALLED:
1723 fprintf_unfiltered (stderr, "signalled, signal = %s\n",
1724 target_signal_to_name (status->value.sig));
1725 break;
1726 case TARGET_WAITKIND_LOADED:
1727 fprintf_unfiltered (stderr, "loaded\n");
1728 break;
1729 case TARGET_WAITKIND_SPURIOUS:
1730 fprintf_unfiltered (stderr, "spurious\n");
1731 break;
1732 default:
1733 fprintf_unfiltered (stderr, "unknown???\n");
1734 break;
1735 }
1736
1737 return retval;
1738}
1739
1740static void
1741debug_to_fetch_registers (regno)
1742 int regno;
1743{
1744 debug_target.to_fetch_registers (regno);
1745
1746 fprintf_unfiltered (stderr, "target_fetch_registers (%s)",
1747 regno != -1 ? reg_names[regno] : "-1");
1748 if (regno != -1)
47b8a5ce
PS
1749 fprintf_unfiltered (stderr, " = 0x%x %d",
1750 (unsigned long) read_register (regno),
43fc25c8
JL
1751 read_register (regno));
1752 fprintf_unfiltered (stderr, "\n");
1753}
1754
1755static void
1756debug_to_store_registers (regno)
1757 int regno;
1758{
1759 debug_target.to_store_registers (regno);
1760
1761 if (regno >= 0 && regno < NUM_REGS)
1762 fprintf_unfiltered (stderr, "target_store_registers (%s) = 0x%x %d\n",
47b8a5ce
PS
1763 reg_names[regno],
1764 (unsigned long) read_register (regno),
1765 (unsigned long) read_register (regno));
43fc25c8
JL
1766 else
1767 fprintf_unfiltered (stderr, "target_store_registers (%d)\n", regno);
1768}
1769
1770static void
1771debug_to_prepare_to_store ()
1772{
1773 debug_target.to_prepare_to_store ();
1774
1775 fprintf_unfiltered (stderr, "target_prepare_to_store ()\n");
1776}
1777
1778static int
1779debug_to_xfer_memory (memaddr, myaddr, len, write, target)
1780 CORE_ADDR memaddr;
1781 char *myaddr;
1782 int len;
1783 int write;
1784 struct target_ops *target;
1785{
1786 int retval;
1787
1788 retval = debug_target.to_xfer_memory (memaddr, myaddr, len, write, target);
1789
647e52ea
SG
1790 fprintf_unfiltered (stderr,
1791 "target_xfer_memory (0x%x, xxx, %d, %s, xxx) = %d",
47b8a5ce
PS
1792 (unsigned int) memaddr, /* possable truncate long long */
1793 len, write ? "write" : "read", retval);
1794
1795
43fc25c8
JL
1796
1797 if (retval > 0)
1798 {
1799 int i;
1800
1801 fputs_unfiltered (", bytes =", gdb_stderr);
1802 for (i = 0; i < retval; i++)
647e52ea
SG
1803 {
1804 if ((((long) &(myaddr[i])) & 0xf) == 0)
1805 fprintf_unfiltered (stderr, "\n");
1806 fprintf_unfiltered (stderr, " %02x", myaddr[i] & 0xff);
1807 }
43fc25c8
JL
1808 }
1809
1810 fputc_unfiltered ('\n', gdb_stderr);
1811
1812 return retval;
1813}
1814
1815static void
1816debug_to_files_info (target)
1817 struct target_ops *target;
1818{
1819 debug_target.to_files_info (target);
1820
1821 fprintf_unfiltered (stderr, "target_files_info (xxx)\n");
1822}
1823
1824static int
1825debug_to_insert_breakpoint (addr, save)
1826 CORE_ADDR addr;
1827 char *save;
1828{
1829 int retval;
1830
1831 retval = debug_target.to_insert_breakpoint (addr, save);
1832
1833 fprintf_unfiltered (stderr, "target_insert_breakpoint (0x%x, xxx) = %d\n",
47b8a5ce 1834 (unsigned long) addr, retval);
43fc25c8
JL
1835 return retval;
1836}
1837
1838static int
1839debug_to_remove_breakpoint (addr, save)
1840 CORE_ADDR addr;
1841 char *save;
1842{
1843 int retval;
1844
1845 retval = debug_target.to_remove_breakpoint (addr, save);
1846
1847 fprintf_unfiltered (stderr, "target_remove_breakpoint (0x%x, xxx) = %d\n",
47b8a5ce 1848 (unsigned long)addr, retval);
43fc25c8
JL
1849 return retval;
1850}
1851
1852static void
1853debug_to_terminal_init ()
1854{
1855 debug_target.to_terminal_init ();
1856
1857 fprintf_unfiltered (stderr, "target_terminal_init ()\n");
1858}
1859
1860static void
1861debug_to_terminal_inferior ()
1862{
1863 debug_target.to_terminal_inferior ();
1864
1865 fprintf_unfiltered (stderr, "target_terminal_inferior ()\n");
1866}
1867
1868static void
1869debug_to_terminal_ours_for_output ()
1870{
1871 debug_target.to_terminal_ours_for_output ();
1872
1873 fprintf_unfiltered (stderr, "target_terminal_ours_for_output ()\n");
1874}
1875
1876static void
1877debug_to_terminal_ours ()
1878{
1879 debug_target.to_terminal_ours ();
1880
1881 fprintf_unfiltered (stderr, "target_terminal_ours ()\n");
1882}
1883
1884static void
1885debug_to_terminal_info (arg, from_tty)
1886 char *arg;
1887 int from_tty;
1888{
1889 debug_target.to_terminal_info (arg, from_tty);
1890
1891 fprintf_unfiltered (stderr, "target_terminal_info (%s, %d)\n", arg,
1892 from_tty);
1893}
1894
1895static void
1896debug_to_kill ()
1897{
1898 debug_target.to_kill ();
1899
1900 fprintf_unfiltered (stderr, "target_kill ()\n");
1901}
1902
1903static void
1904debug_to_load (args, from_tty)
1905 char *args;
1906 int from_tty;
1907{
1908 debug_target.to_load (args, from_tty);
1909
1910 fprintf_unfiltered (stderr, "target_load (%s, %d)\n", args, from_tty);
1911}
1912
1913static int
1914debug_to_lookup_symbol (name, addrp)
1915 char *name;
1916 CORE_ADDR *addrp;
1917{
1918 int retval;
1919
1920 retval = debug_target.to_lookup_symbol (name, addrp);
1921
1922 fprintf_unfiltered (stderr, "target_lookup_symbol (%s, xxx)\n", name);
1923
1924 return retval;
1925}
1926
1927static void
1928debug_to_create_inferior (exec_file, args, env)
1929 char *exec_file;
1930 char *args;
1931 char **env;
1932{
1933 debug_target.to_create_inferior (exec_file, args, env);
1934
1935 fprintf_unfiltered (stderr, "target_create_inferior (%s, %s, xxx)\n",
1936 exec_file, args);
1937}
1938
1939static void
1940debug_to_mourn_inferior ()
1941{
1942 debug_target.to_mourn_inferior ();
1943
1944 fprintf_unfiltered (stderr, "target_mourn_inferior ()\n");
1945}
1946
1947static int
1948debug_to_can_run ()
1949{
1950 int retval;
1951
1952 retval = debug_target.to_can_run ();
1953
1954 fprintf_unfiltered (stderr, "target_can_run () = %d\n", retval);
1955
1956 return retval;
1957}
1958
1959static void
1960debug_to_notice_signals (pid)
1961 int pid;
1962{
1963 debug_target.to_notice_signals (pid);
1964
1965 fprintf_unfiltered (stderr, "target_notice_signals (%d)\n", pid);
1966}
1967
2b576293 1968static int
43fc25c8
JL
1969debug_to_thread_alive (pid)
1970 int pid;
1971{
647e52ea
SG
1972 int retval;
1973
1974 retval = debug_target.to_thread_alive (pid);
43fc25c8 1975
647e52ea
SG
1976 fprintf_unfiltered (stderr, "target_thread_alive (%d) = %d\n", pid, retval);
1977
1978 return retval;
43fc25c8
JL
1979}
1980
1981static void
1982debug_to_stop ()
1983{
1984 debug_target.to_stop ();
1985
1986 fprintf_unfiltered (stderr, "target_stop ()\n");
1987}
1988
1989static void
1990setup_target_debug ()
1991{
1992 memcpy (&debug_target, &current_target, sizeof debug_target);
1993
1994 current_target.to_open = debug_to_open;
1995 current_target.to_close = debug_to_close;
1996 current_target.to_attach = debug_to_attach;
1997 current_target.to_detach = debug_to_detach;
1998 current_target.to_resume = debug_to_resume;
1999 current_target.to_wait = debug_to_wait;
2000 current_target.to_fetch_registers = debug_to_fetch_registers;
2001 current_target.to_store_registers = debug_to_store_registers;
2002 current_target.to_prepare_to_store = debug_to_prepare_to_store;
2003 current_target.to_xfer_memory = debug_to_xfer_memory;
2004 current_target.to_files_info = debug_to_files_info;
2005 current_target.to_insert_breakpoint = debug_to_insert_breakpoint;
2006 current_target.to_remove_breakpoint = debug_to_remove_breakpoint;
2007 current_target.to_terminal_init = debug_to_terminal_init;
2008 current_target.to_terminal_inferior = debug_to_terminal_inferior;
2009 current_target.to_terminal_ours_for_output = debug_to_terminal_ours_for_output;
2010 current_target.to_terminal_ours = debug_to_terminal_ours;
2011 current_target.to_terminal_info = debug_to_terminal_info;
2012 current_target.to_kill = debug_to_kill;
2013 current_target.to_load = debug_to_load;
2014 current_target.to_lookup_symbol = debug_to_lookup_symbol;
2015 current_target.to_create_inferior = debug_to_create_inferior;
2016 current_target.to_mourn_inferior = debug_to_mourn_inferior;
2017 current_target.to_can_run = debug_to_can_run;
2018 current_target.to_notice_signals = debug_to_notice_signals;
2019 current_target.to_thread_alive = debug_to_thread_alive;
2020 current_target.to_stop = debug_to_stop;
2021}
2022#endif /* MAINTENANCE_CMDS */
2023\f
bd5635a1
RP
2024static char targ_desc[] =
2025 "Names of targets and files being debugged.\n\
2026Shows the entire stack of targets currently in use (including the exec-file,\n\
2027core-file, and process, if any), as well as the symbol file name.";
2028
2029void
4fc5969d 2030initialize_targets ()
bd5635a1 2031{
cad1498f 2032 push_target (&dummy_target);
bd5635a1 2033
bd5635a1
RP
2034 add_info ("target", target_info, targ_desc);
2035 add_info ("files", target_info, targ_desc);
67ac9759 2036
43fc25c8
JL
2037#ifdef MAINTENANCE_CMDS
2038 add_show_from_set (
2039 add_set_cmd ("targetdebug", class_maintenance, var_zinteger,
2040 (char *)&targetdebug,
2041 "Set target debugging.\n\
2042When non-zero, target debugging is enabled.", &setlist),
2043 &showlist);
2044#endif
2045
67ac9759
JK
2046 if (!STREQ (signals[TARGET_SIGNAL_LAST].string, "TARGET_SIGNAL_MAGIC"))
2047 abort ();
bd5635a1 2048}
This page took 0.478198 seconds and 4 git commands to generate.