1 /* Remote debugging interface for boot monitors, for GDB. 2 Copyright 1990, 1991, 1992, 1993, 1995, 1996 3 Free Software Foundation, Inc. 4 Contributed by Cygnus Support. Written by Rob Savoye for Cygnus. 5 Resurrected from the ashes by Stu Grossman. 6 7 This file is part of GDB. 8 9 This program is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 2 of the License, or 12 (at your option) any later version. 13 14 This program is distributed in the hope that it will be useful, 15 but WITHOUT ANY WARRANTY; without even the implied warranty of 16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 GNU General Public License for more details. 18 19 You should have received a copy of the GNU General Public License 20 along with this program; if not, write to the Free Software 21 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 22 23 /* This file was derived from various remote-* modules. It is a collection 24 of generic support functions so GDB can talk directly to a ROM based 25 monitor. This saves use from having to hack an exception based handler 26 into existance, and makes for quick porting. 27 28 This module talks to a debug monitor called 'MONITOR', which 29 We communicate with MONITOR via either a direct serial line, or a TCP 30 (or possibly TELNET) stream to a terminal multiplexor, 31 which in turn talks to the target board. */ 32 33 /* FIXME 32x64: This code assumes that registers and addresses are at 34 most 32 bits long. If they can be larger, you will need to declare 35 values as LONGEST and use %llx or some such to print values when 36 building commands to send to the monitor. Since we don't know of 37 any actual 64-bit targets with ROM monitors that use this code, 38 it's not an issue right now. -sts 4/18/96 */ 39 40 #include "defs.h" 41 #include "gdbcore.h" 42 #include "target.h" 43 #include "wait.h" 44 #ifdef ANSI_PROTOTYPES 45 #include <stdarg.h> 46 #else 47 #include <varargs.h> 48 #endif 49 #include <signal.h> 50 #include <ctype.h> 51 #include "gdb_string.h" 52 #include <sys/types.h> 53 #include "command.h" 54 #include "serial.h" 55 #include "monitor.h" 56 #include "gdbcmd.h" 57 #include "inferior.h" 58 #include "gnu-regex.h" 59 #include "dcache.h" 60 #include "srec.h" 61 62 static char *dev_name; 63 static struct target_ops *targ_ops; 64 65 static int readchar PARAMS ((int timeout)); 66 67 static void monitor_command PARAMS ((char *args, int fromtty)); 68 69 static void monitor_fetch_register PARAMS ((int regno)); 70 static void monitor_store_register PARAMS ((int regno)); 71 72 static void monitor_detach PARAMS ((char *args, int from_tty)); 73 static void monitor_resume PARAMS ((int pid, int step, enum target_signal sig)); 74 static void monitor_interrupt PARAMS ((int signo)); 75 static void monitor_interrupt_twice PARAMS ((int signo)); 76 static void monitor_interrupt_query PARAMS ((void)); 77 static void monitor_wait_cleanup PARAMS ((int old_timeout)); 78 79 static int monitor_wait PARAMS ((int pid, struct target_waitstatus *status)); 80 static void monitor_fetch_registers PARAMS ((int regno)); 81 static void monitor_store_registers PARAMS ((int regno)); 82 static void monitor_prepare_to_store PARAMS ((void)); 83 static int monitor_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len, int write, struct target_ops *target)); 84 static void monitor_files_info PARAMS ((struct target_ops *ops)); 85 static int monitor_insert_breakpoint PARAMS ((CORE_ADDR addr, char *shadow)); 86 static int monitor_remove_breakpoint PARAMS ((CORE_ADDR addr, char *shadow)); 87 static void monitor_kill PARAMS ((void)); 88 static void monitor_load PARAMS ((char *file, int from_tty)); 89 static void monitor_mourn_inferior PARAMS ((void)); 90 static void monitor_stop PARAMS ((void)); 91 static void monitor_debug PARAMS ((char *prefix, char *string, char *suffix)); 92 93 static int monitor_read_memory PARAMS ((CORE_ADDR addr, char *myaddr,int len)); 94 static int monitor_write_memory PARAMS ((CORE_ADDR addr, char *myaddr,int len)); 95 96 static int monitor_expect_regexp PARAMS ((struct re_pattern_buffer *pat, 97 char *buf, int buflen)); 98 static int from_hex PARAMS ((int a)); 99 static unsigned long get_hex_word PARAMS ((void)); 100 101 static struct monitor_ops *current_monitor; 102 103 static int hashmark; /* flag set by "set hash" */ 104 105 static int timeout = 30; 106 107 static int in_monitor_wait = 0; /* Non-zero means we are in monitor_wait() */ 108 109 static void (*ofunc)(); /* Old SIGINT signal handler */ 110 111 /* Descriptor for I/O to remote machine. Initialize it to NULL so 112 that monitor_open knows that we don't have a file open when the 113 program starts. */ 114 115 static serial_t monitor_desc = NULL; 116 117 /* Pointer to regexp pattern matching data */ 118 119 static struct re_pattern_buffer register_pattern; 120 static char register_fastmap[256]; 121 122 static struct re_pattern_buffer getmem_resp_delim_pattern; 123 static char getmem_resp_delim_fastmap[256]; 124 125 static int dump_reg_flag; /* Non-zero means do a dump_registers cmd when 126 monitor_wait wakes up. */ 127 128 static DCACHE *remote_dcache; 129 static int first_time=0; /* is this the first time we're executing after 130 gaving created the child proccess? */ 131 132 /* monitor_debug is like fputs_unfiltered, except it prints special 133 characters in printable fashion. */ 134 135 static void 136 monitor_debug (prefix, string, suffix) 137 char *prefix; 138 char *string; 139 char *suffix; 140 { 141 int ch; 142 143 /* print prefix and suffix after each line */ 144 static int new_line=1; 145 static char *prev_prefix = ""; 146 static char *prev_suffix = ""; 147 148 /* if the prefix is changing, print the previous suffix, a new line, 149 and the new prefix */ 150 if (strcmp(prev_prefix, prefix) != 0 && !new_line) 151 { 152 fputs_unfiltered (prev_suffix, gdb_stderr); 153 fputs_unfiltered ("\n", gdb_stderr); 154 fputs_unfiltered (prefix, gdb_stderr); 155 } 156 prev_prefix = prefix; 157 prev_suffix = suffix; 158 159 /* print prefix if last char was a newline*/ 160 161 if (new_line == 1) { 162 fputs_unfiltered (prefix, gdb_stderr); 163 new_line=0; 164 } 165 if (strchr(string,'\n')) /* save state for next call */ 166 new_line=1; 167 168 while ((ch = *string++) != '\0') 169 { 170 switch (ch) { 171 default: 172 if (isprint (ch)) 173 fputc_unfiltered (ch, gdb_stderr); 174 175 else 176 fprintf_unfiltered (gdb_stderr, "\\%03o", ch); 177 178 break; 179 180 case '\\': fputs_unfiltered ("\\\\", gdb_stderr); break; 181 case '\b': fputs_unfiltered ("\\b", gdb_stderr); break; 182 case '\f': fputs_unfiltered ("\\f", gdb_stderr); break; 183 case '\n': fputs_unfiltered ("\\n", gdb_stderr); break; 184 case '\r': fputs_unfiltered ("\\r", gdb_stderr); break; 185 case '\t': fputs_unfiltered ("\\t", gdb_stderr); break; 186 case '\v': fputs_unfiltered ("\\v", gdb_stderr); break; 187 } 188 } 189 190 if (new_line==1) { /* print suffix if last char was a newline */ 191 fputs_unfiltered (suffix, gdb_stderr); 192 fputs_unfiltered ("\n", gdb_stderr); 193 } 194 } 195 196 /* monitor_printf_noecho -- Send data to monitor, but don't expect an echo. 197 Works just like printf. */ 198 199 void 200 #ifdef ANSI_PROTOTYPES 201 monitor_printf_noecho (char *pattern, ...) 202 #else 203 monitor_printf_noecho (va_alist) 204 va_dcl 205 #endif 206 { 207 va_list args; 208 char sndbuf[2000]; 209 int len; 210 211 #if ANSI_PROTOTYPES 212 va_start (args, pattern); 213 #else 214 char *pattern; 215 va_start (args); 216 pattern = va_arg (args, char *); 217 #endif 218 219 vsprintf (sndbuf, pattern, args); 220 221 if (remote_debug > 0) 222 monitor_debug ("sent -->", sndbuf, "<--"); 223 224 len = strlen (sndbuf); 225 226 if (len + 1 > sizeof sndbuf) 227 abort (); 228 229 if (SERIAL_WRITE(monitor_desc, sndbuf, len)) 230 fprintf_unfiltered (stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno)); 231 } 232 233 /* monitor_printf -- Send data to monitor and check the echo. Works just like 234 printf. */ 235 236 void 237 #ifdef ANSI_PROTOTYPES 238 monitor_printf (char *pattern, ...) 239 #else 240 monitor_printf (va_alist) 241 va_dcl 242 #endif 243 { 244 va_list args; 245 char sndbuf[2000]; 246 int len; 247 248 #ifdef ANSI_PROTOTYPES 249 va_start (args, pattern); 250 #else 251 char *pattern; 252 va_start (args); 253 pattern = va_arg (args, char *); 254 #endif 255 256 vsprintf (sndbuf, pattern, args); 257 258 if (remote_debug > 0) 259 monitor_debug ("sent -->", sndbuf, "<--"); 260 261 len = strlen (sndbuf); 262 263 if (len + 1 > sizeof sndbuf) 264 abort (); 265 266 if (SERIAL_WRITE(monitor_desc, sndbuf, len)) 267 fprintf_unfiltered (stderr, "SERIAL_WRITE failed: %s\n", safe_strerror (errno)); 268 269 /* We used to expect that the next immediate output was the characters we 270 just output, but sometimes some extra junk appeared before the characters 271 we expected, like an extra prompt, or a portmaster sending telnet negotiations. 272 So, just start searching for what we sent, and skip anything unknown. */ 273 monitor_expect (sndbuf, (char *)0, 0); 274 } 275 276 /* Read a character from the remote system, doing all the fancy 277 timeout stuff. */ 278 279 static int 280 readchar (timeout) 281 int timeout; 282 { 283 int c; 284 static enum { last_random, last_nl, last_cr, last_crnl } state = last_random; 285 int looping; 286 287 do 288 { 289 looping = 0; 290 c = SERIAL_READCHAR (monitor_desc, timeout); 291 292 if (c >= 0) 293 { 294 c &= 0x7f; 295 if (remote_debug > 0) 296 { 297 char buf[2]; 298 buf[0] = c; 299 buf[1] = '\0'; 300 monitor_debug ("read -->", buf, "<--"); 301 } 302 } 303 304 /* Canonicialize \n\r combinations into one \r */ 305 if ((current_monitor->flags & MO_HANDLE_NL) != 0) 306 { 307 if ((c == '\r' && state == last_nl) 308 || (c == '\n' && state == last_cr)) 309 { 310 state = last_crnl; 311 looping = 1; 312 } 313 else if (c == '\r') 314 state = last_cr; 315 else if (c != '\n') 316 state = last_random; 317 else 318 { 319 state = last_nl; 320 c = '\r'; 321 } 322 } 323 } 324 while (looping); 325 326 if (c >= 0) 327 return c; 328 329 if (c == SERIAL_TIMEOUT) 330 #ifdef MAINTENANCE_CMDS 331 if (in_monitor_wait) /* Watchdog went off */ 332 { 333 target_mourn_inferior (); 334 error ("Watchdog has expired. Target detached.\n"); 335 } 336 else 337 #endif 338 error ("Timeout reading from remote system."); 339 340 perror_with_name ("remote-monitor"); 341 } 342 343 /* Scan input from the remote system, until STRING is found. If BUF is non- 344 zero, then collect input until we have collected either STRING or BUFLEN-1 345 chars. In either case we terminate BUF with a 0. If input overflows BUF 346 because STRING can't be found, return -1, else return number of chars in BUF 347 (minus the terminating NUL). Note that in the non-overflow case, STRING 348 will be at the end of BUF. */ 349 350 int 351 monitor_expect (string, buf, buflen) 352 char *string; 353 char *buf; 354 int buflen; 355 { 356 char *p = string; 357 int obuflen = buflen; 358 int c; 359 extern struct target_ops *targ_ops; 360 361 immediate_quit = 1; 362 while (1) 363 { 364 if (buf) 365 { 366 if (buflen < 2) 367 { 368 *buf = '\000'; 369 immediate_quit = 0; 370 return -1; 371 } 372 373 c = readchar (timeout); 374 if (c == '\000') 375 continue; 376 *buf++ = c; 377 buflen--; 378 } 379 else 380 c = readchar (timeout); 381 382 /* Don't expect any ^C sent to be echoed */ 383 384 if (*p == '\003' || c == *p) 385 { 386 p++; 387 if (*p == '\0') 388 { 389 immediate_quit = 0; 390 391 if (buf) 392 { 393 *buf++ = '\000'; 394 return obuflen - buflen; 395 } 396 else 397 return 0; 398 } 399 } 400 else if ((c == '\021' || c == '\023') && 401 (strcmp(targ_ops->to_shortname, "m32r") == 0)) 402 { /* m32r monitor emits random DC1/DC3 chars */ 403 continue; 404 } 405 else 406 { 407 p = string; 408 if (c == *p) 409 p++; 410 } 411 } 412 } 413 414 /* Search for a regexp. */ 415 416 static int 417 monitor_expect_regexp (pat, buf, buflen) 418 struct re_pattern_buffer *pat; 419 char *buf; 420 int buflen; 421 { 422 char *mybuf; 423 char *p; 424 425 if (buf) 426 mybuf = buf; 427 else 428 { 429 mybuf = alloca (1024); 430 buflen = 1024; 431 } 432 433 p = mybuf; 434 while (1) 435 { 436 int retval; 437 438 if (p - mybuf >= buflen) 439 { /* Buffer about to overflow */ 440 441 /* On overflow, we copy the upper half of the buffer to the lower half. Not 442 great, but it usually works... */ 443 444 memcpy (mybuf, mybuf + buflen / 2, buflen / 2); 445 p = mybuf + buflen / 2; 446 } 447 448 *p++ = readchar (timeout); 449 450 retval = re_search (pat, mybuf, p - mybuf, 0, p - mybuf, NULL); 451 if (retval >= 0) 452 return 1; 453 } 454 } 455 456 /* Keep discarding input until we see the MONITOR prompt. 457 458 The convention for dealing with the prompt is that you 459 o give your command 460 o *then* wait for the prompt. 461 462 Thus the last thing that a procedure does with the serial line will 463 be an monitor_expect_prompt(). Exception: monitor_resume does not 464 wait for the prompt, because the terminal is being handed over to 465 the inferior. However, the next thing which happens after that is 466 a monitor_wait which does wait for the prompt. Note that this 467 includes abnormal exit, e.g. error(). This is necessary to prevent 468 getting into states from which we can't recover. */ 469 470 int 471 monitor_expect_prompt (buf, buflen) 472 char *buf; 473 int buflen; 474 { 475 return monitor_expect (current_monitor->prompt, buf, buflen); 476 } 477 478 /* Get N 32-bit words from remote, each preceded by a space, and put 479 them in registers starting at REGNO. */ 480 481 static unsigned long 482 get_hex_word () 483 { 484 unsigned long val; 485 int i; 486 int ch; 487 488 do 489 ch = readchar (timeout); 490 while (isspace(ch)); 491 492 val = from_hex (ch); 493 494 for (i = 7; i >= 1; i--) 495 { 496 ch = readchar (timeout); 497 if (!isxdigit (ch)) 498 break; 499 val = (val << 4) | from_hex (ch); 500 } 501 502 return val; 503 } 504 505 static void 506 compile_pattern (pattern, compiled_pattern, fastmap) 507 char *pattern; 508 struct re_pattern_buffer *compiled_pattern; 509 char *fastmap; 510 { 511 int tmp; 512 char *val; 513 514 compiled_pattern->fastmap = fastmap; 515 516 tmp = re_set_syntax (RE_SYNTAX_EMACS); 517 val = re_compile_pattern (pattern, 518 strlen (pattern), 519 compiled_pattern); 520 re_set_syntax (tmp); 521 522 if (val) 523 error ("compile_pattern: Can't compile pattern string `%s': %s!", pattern, val); 524 525 if (fastmap) 526 re_compile_fastmap (compiled_pattern); 527 } 528 529 /* Open a connection to a remote debugger. NAME is the filename used 530 for communication. */ 531 532 void 533 monitor_open (args, mon_ops, from_tty) 534 char *args; 535 struct monitor_ops *mon_ops; 536 int from_tty; 537 { 538 char *name; 539 int i; 540 char **p; 541 542 if (mon_ops->magic != MONITOR_OPS_MAGIC) 543 error ("Magic number of monitor_ops struct wrong."); 544 545 targ_ops = mon_ops->target; 546 name = targ_ops->to_shortname; 547 548 if (!args) 549 error ("Use `target %s DEVICE-NAME' to use a serial port, or \n\ 550 `target %s HOST-NAME:PORT-NUMBER' to use a network connection.", name, name); 551 552 target_preopen (from_tty); 553 554 /* Setup pattern for register dump */ 555 556 if (mon_ops->register_pattern) 557 compile_pattern (mon_ops->register_pattern, ®ister_pattern, 558 register_fastmap); 559 560 if (mon_ops->getmem.resp_delim) 561 compile_pattern (mon_ops->getmem.resp_delim, &getmem_resp_delim_pattern, 562 getmem_resp_delim_fastmap); 563 564 unpush_target (targ_ops); 565 566 if (dev_name) 567 free (dev_name); 568 dev_name = strsave (args); 569 570 monitor_desc = SERIAL_OPEN (dev_name); 571 572 if (!monitor_desc) 573 perror_with_name (dev_name); 574 575 if (baud_rate != -1) 576 { 577 if (SERIAL_SETBAUDRATE (monitor_desc, baud_rate)) 578 { 579 SERIAL_CLOSE (monitor_desc); 580 perror_with_name (dev_name); 581 } 582 } 583 584 SERIAL_RAW (monitor_desc); 585 586 SERIAL_FLUSH_INPUT (monitor_desc); 587 588 /* some systems only work with 2 stop bits */ 589 590 SERIAL_SETSTOPBITS (monitor_desc, mon_ops->stopbits); 591 592 current_monitor = mon_ops; 593 594 /* See if we can wake up the monitor. First, try sending a stop sequence, 595 then send the init strings. Last, remove all breakpoints. */ 596 597 if (current_monitor->stop) 598 { 599 monitor_stop (); 600 if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0) 601 { 602 monitor_expect_prompt (NULL, 0); 603 } 604 } 605 606 /* wake up the monitor and see if it's alive */ 607 for (p = mon_ops->init; *p != NULL; p++) 608 { 609 /* Some of the characters we send may not be echoed, 610 but we hope to get a prompt at the end of it all. */ 611 612 if ((current_monitor->flags & MO_NO_ECHO_ON_OPEN) == 0) 613 monitor_printf(*p); 614 else 615 monitor_printf_noecho (*p); 616 monitor_expect_prompt (NULL, 0); 617 } 618 619 SERIAL_FLUSH_INPUT (monitor_desc); 620 621 /* Remove all breakpoints */ 622 623 if (mon_ops->clr_all_break) 624 { 625 monitor_printf (mon_ops->clr_all_break); 626 monitor_expect_prompt (NULL, 0); 627 } 628 629 if (from_tty) 630 printf_unfiltered ("Remote target %s connected to %s\n", name, dev_name); 631 632 push_target (targ_ops); 633 634 inferior_pid = 42000; /* Make run command think we are busy... */ 635 636 /* Give monitor_wait something to read */ 637 638 monitor_printf (current_monitor->line_term); 639 640 remote_dcache = dcache_init (monitor_read_memory, monitor_write_memory); 641 642 start_remote (); 643 } 644 645 /* Close out all files and local state before this target loses 646 control. */ 647 648 void 649 monitor_close (quitting) 650 int quitting; 651 { 652 if (monitor_desc) 653 SERIAL_CLOSE (monitor_desc); 654 monitor_desc = NULL; 655 } 656 657 /* Terminate the open connection to the remote debugger. Use this 658 when you want to detach and do something else with your gdb. */ 659 660 static void 661 monitor_detach (args, from_tty) 662 char *args; 663 int from_tty; 664 { 665 pop_target (); /* calls monitor_close to do the real work */ 666 if (from_tty) 667 printf_unfiltered ("Ending remote %s debugging\n", target_shortname); 668 } 669 670 /* Convert VALSTR into the target byte-ordered value of REGNO and store it. */ 671 672 char * 673 monitor_supply_register (regno, valstr) 674 int regno; 675 char *valstr; 676 { 677 unsigned int val; 678 unsigned char regbuf[MAX_REGISTER_RAW_SIZE]; 679 char *p; 680 681 val = strtoul (valstr, &p, 16); 682 683 if (val == 0 && valstr == p) 684 error ("monitor_supply_register (%d): bad value from monitor: %s.", 685 regno, valstr); 686 687 /* supply register stores in target byte order, so swap here */ 688 689 store_unsigned_integer (regbuf, REGISTER_RAW_SIZE (regno), val); 690 691 supply_register (regno, regbuf); 692 693 return p; 694 } 695 696 /* Tell the remote machine to resume. */ 697 698 static void 699 monitor_resume (pid, step, sig) 700 int pid, step; 701 enum target_signal sig; 702 { 703 /* Some monitors require a different command when starting a program */ 704 if (current_monitor->flags & MO_RUN_FIRST_TIME && first_time == 1) 705 { 706 first_time = 0; 707 monitor_printf ("run\r"); 708 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT) 709 dump_reg_flag = 1; 710 return; 711 } 712 dcache_flush (remote_dcache); 713 if (step) 714 monitor_printf (current_monitor->step); 715 else 716 { 717 monitor_printf (current_monitor->cont); 718 if (current_monitor->flags & MO_NEED_REGDUMP_AFTER_CONT) 719 dump_reg_flag = 1; 720 } 721 } 722 723 /* Parse the output of a register dump command. A monitor specific 724 regexp is used to extract individual register descriptions of the 725 form REG=VAL. Each description is split up into a name and a value 726 string which are passed down to monitor specific code. */ 727 728 static char * 729 parse_register_dump (buf, len) 730 char *buf; 731 int len; 732 { 733 while (1) 734 { 735 int regnamelen, vallen; 736 char *regname, *val; 737 /* Element 0 points to start of register name, and element 1 738 points to the start of the register value. */ 739 struct re_registers register_strings; 740 741 if (re_search (®ister_pattern, buf, len, 0, len, 742 ®ister_strings) == -1) 743 break; 744 745 regnamelen = register_strings.end[1] - register_strings.start[1]; 746 regname = buf + register_strings.start[1]; 747 vallen = register_strings.end[2] - register_strings.start[2]; 748 val = buf + register_strings.start[2]; 749 750 current_monitor->supply_register (regname, regnamelen, val, vallen); 751 752 buf += register_strings.end[0]; 753 len -= register_strings.end[0]; 754 } 755 } 756 757 /* Send ^C to target to halt it. Target will respond, and send us a 758 packet. */ 759 760 static void 761 monitor_interrupt (signo) 762 int signo; 763 { 764 /* If this doesn't work, try more severe steps. */ 765 signal (signo, monitor_interrupt_twice); 766 767 if (remote_debug) 768 printf_unfiltered ("monitor_interrupt called\n"); 769 770 target_stop (); 771 } 772 773 /* The user typed ^C twice. */ 774 775 static void 776 monitor_interrupt_twice (signo) 777 int signo; 778 { 779 signal (signo, ofunc); 780 781 monitor_interrupt_query (); 782 783 signal (signo, monitor_interrupt); 784 } 785 786 /* Ask the user what to do when an interrupt is received. */ 787 788 static void 789 monitor_interrupt_query () 790 { 791 target_terminal_ours (); 792 793 if (query ("Interrupted while waiting for the program.\n\ 794 Give up (and stop debugging it)? ")) 795 { 796 target_mourn_inferior (); 797 return_to_top_level (RETURN_QUIT); 798 } 799 800 target_terminal_inferior (); 801 } 802 803 static void 804 monitor_wait_cleanup (old_timeout) 805 int old_timeout; 806 { 807 timeout = old_timeout; 808 signal (SIGINT, ofunc); 809 in_monitor_wait = 0; 810 } 811 812 /* Wait until the remote machine stops, then return, storing status in 813 status just as `wait' would. */ 814 815 static int 816 monitor_wait (pid, status) 817 int pid; 818 struct target_waitstatus *status; 819 { 820 int old_timeout = timeout; 821 char buf[1024]; 822 int resp_len; 823 struct cleanup *old_chain; 824 825 status->kind = TARGET_WAITKIND_EXITED; 826 status->value.integer = 0; 827 828 old_chain = make_cleanup (monitor_wait_cleanup, old_timeout); 829 830 #ifdef MAINTENANCE_CMDS 831 in_monitor_wait = 1; 832 timeout = watchdog > 0 ? watchdog : -1; 833 #else 834 timeout = -1; /* Don't time out -- user program is running. */ 835 #endif 836 837 ofunc = (void (*)()) signal (SIGINT, monitor_interrupt); 838 839 do 840 { 841 resp_len = monitor_expect_prompt (buf, sizeof (buf)); 842 843 if (resp_len <= 0) 844 fprintf_unfiltered (gdb_stderr, "monitor_wait: excessive response from monitor: %s.", buf); 845 } 846 while (resp_len < 0); 847 848 signal (SIGINT, ofunc); 849 850 timeout = old_timeout; 851 852 if (dump_reg_flag && current_monitor->dump_registers) 853 { 854 dump_reg_flag = 0; 855 856 monitor_printf (current_monitor->dump_registers); 857 resp_len = monitor_expect_prompt (buf, sizeof (buf)); 858 } 859 860 if (current_monitor->register_pattern) 861 parse_register_dump (buf, resp_len); 862 863 status->kind = TARGET_WAITKIND_STOPPED; 864 status->value.sig = TARGET_SIGNAL_TRAP; 865 866 discard_cleanups (old_chain); 867 868 in_monitor_wait = 0; 869 870 return inferior_pid; 871 } 872 873 /* Fetch register REGNO, or all registers if REGNO is -1. Returns 874 errno value. */ 875 876 static void 877 monitor_fetch_register (regno) 878 int regno; 879 { 880 char *name; 881 static char zerobuf[MAX_REGISTER_RAW_SIZE] = {0}; 882 char regbuf[MAX_REGISTER_RAW_SIZE * 2 + 1]; 883 int i; 884 885 name = current_monitor->regnames[regno]; 886 887 if (!name) 888 { 889 supply_register (regno, zerobuf); 890 return; 891 } 892 893 /* send the register examine command */ 894 895 monitor_printf (current_monitor->getreg.cmd, name); 896 897 /* If RESP_DELIM is specified, we search for that as a leading 898 delimiter for the register value. Otherwise, we just start 899 searching from the start of the buf. */ 900 901 if (current_monitor->getreg.resp_delim) 902 monitor_expect (current_monitor->getreg.resp_delim, NULL, 0); 903 904 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set */ 905 if (current_monitor->flags & MO_HEX_PREFIX) 906 { 907 int c; 908 c = readchar (timeout); 909 while (c == ' ') 910 c = readchar (timeout); 911 if ((c == '0') && ((c = readchar (timeout)) == 'x')) 912 ; 913 else 914 error ("Bad value returned from monitor while fetching register %x.", 915 regno); 916 } 917 918 /* Read upto the maximum number of hex digits for this register, skipping 919 spaces, but stop reading if something else is seen. Some monitors 920 like to drop leading zeros. */ 921 922 for (i = 0; i < REGISTER_RAW_SIZE (regno) * 2; i++) 923 { 924 int c; 925 c = readchar (timeout); 926 while (c == ' ') 927 c = readchar (timeout); 928 929 if (!isxdigit (c)) 930 break; 931 932 regbuf[i] = c; 933 } 934 935 regbuf[i] = '\000'; /* terminate the number */ 936 937 /* If TERM is present, we wait for that to show up. Also, (if TERM 938 is present), we will send TERM_CMD if that is present. In any 939 case, we collect all of the output into buf, and then wait for 940 the normal prompt. */ 941 942 if (current_monitor->getreg.term) 943 { 944 monitor_expect (current_monitor->getreg.term, NULL, 0); /* get response */ 945 946 if (current_monitor->getreg.term_cmd) 947 { 948 monitor_printf (current_monitor->getreg.term_cmd); 949 monitor_expect_prompt (NULL, 0); 950 } 951 } 952 else 953 monitor_expect_prompt (NULL, 0); /* get response */ 954 955 monitor_supply_register (regno, regbuf); 956 } 957 958 /* Read the remote registers into the block regs. */ 959 960 static void monitor_dump_regs () 961 { 962 char buf[1024]; 963 int resp_len; 964 965 if (current_monitor->dump_registers) 966 { 967 monitor_printf (current_monitor->dump_registers); 968 resp_len = monitor_expect_prompt (buf, sizeof (buf)); 969 parse_register_dump (buf, resp_len); 970 } 971 else 972 abort(); /* Need some way to read registers */ 973 } 974 975 static void 976 monitor_fetch_registers (regno) 977 int regno; 978 { 979 if (current_monitor->getreg.cmd) 980 { 981 if (regno >= 0) 982 { 983 monitor_fetch_register (regno); 984 return; 985 } 986 987 for (regno = 0; regno < NUM_REGS; regno++) 988 monitor_fetch_register (regno); 989 } 990 else { 991 monitor_dump_regs (); 992 } 993 } 994 995 /* Store register REGNO, or all if REGNO == 0. Return errno value. */ 996 997 static void 998 monitor_store_register (regno) 999 int regno; 1000 { 1001 char *name; 1002 unsigned int val; 1003 1004 name = current_monitor->regnames[regno]; 1005 if (!name) 1006 return; 1007 1008 val = read_register (regno); 1009 1010 /* send the register deposit command */ 1011 1012 if (current_monitor->flags & MO_REGISTER_VALUE_FIRST) 1013 monitor_printf (current_monitor->setreg.cmd, val, name); 1014 else 1015 monitor_printf (current_monitor->setreg.cmd, name, val); 1016 1017 /* It's possible that there are actually some monitors out there that 1018 will prompt you when you set a register. In that case, you may 1019 need to add some code here to deal with TERM and TERM_CMD (see 1020 monitor_fetch_register to get an idea of what's needed...) */ 1021 1022 monitor_expect_prompt (NULL, 0); 1023 } 1024 1025 /* Store the remote registers. */ 1026 1027 static void 1028 monitor_store_registers (regno) 1029 int regno; 1030 { 1031 if (regno >= 0) 1032 { 1033 monitor_store_register (regno); 1034 return; 1035 } 1036 1037 for (regno = 0; regno < NUM_REGS; regno++) 1038 monitor_store_register (regno); 1039 } 1040 1041 /* Get ready to modify the registers array. On machines which store 1042 individual registers, this doesn't need to do anything. On machines 1043 which store all the registers in one fell swoop, this makes sure 1044 that registers contains all the registers from the program being 1045 debugged. */ 1046 1047 static void 1048 monitor_prepare_to_store () 1049 { 1050 /* Do nothing, since we can store individual regs */ 1051 } 1052 1053 static void 1054 monitor_files_info (ops) 1055 struct target_ops *ops; 1056 { 1057 printf_unfiltered ("\tAttached to %s at %d baud.\n", dev_name, baud_rate); 1058 } 1059 1060 static int 1061 monitor_write_memory (memaddr, myaddr, len) 1062 CORE_ADDR memaddr; 1063 char *myaddr; 1064 int len; 1065 { 1066 unsigned int val; 1067 char *cmd; 1068 int i; 1069 1070 /* Use memory fill command for leading 0 bytes. */ 1071 1072 if (current_monitor->fill) 1073 { 1074 for (i = 0; i < len; i++) 1075 if (myaddr[i] != 0) 1076 break; 1077 1078 if (i > 4) /* More than 4 zeros is worth doing */ 1079 { 1080 if (current_monitor->flags & MO_FILL_USES_ADDR) 1081 monitor_printf (current_monitor->fill, memaddr, memaddr + i, 0); 1082 else 1083 monitor_printf (current_monitor->fill, memaddr, i, 0); 1084 1085 monitor_expect_prompt (NULL, 0); 1086 1087 return i; 1088 } 1089 } 1090 1091 #if 0 1092 /* Can't actually use long longs if VAL is an int (nice idea, though). */ 1093 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->setmem.cmdll) 1094 { 1095 len = 8; 1096 cmd = current_monitor->setmem.cmdll; 1097 } 1098 else 1099 #endif 1100 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->setmem.cmdl) 1101 { 1102 len = 4; 1103 cmd = current_monitor->setmem.cmdl; 1104 } 1105 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->setmem.cmdw) 1106 { 1107 len = 2; 1108 cmd = current_monitor->setmem.cmdw; 1109 } 1110 else 1111 { 1112 len = 1; 1113 cmd = current_monitor->setmem.cmdb; 1114 } 1115 1116 val = extract_unsigned_integer (myaddr, len); 1117 1118 if (current_monitor->flags & MO_NO_ECHO_ON_SETMEM) 1119 monitor_printf_noecho (cmd, memaddr, val); 1120 else 1121 monitor_printf (cmd, memaddr, val); 1122 1123 monitor_expect_prompt (NULL, 0); 1124 1125 return len; 1126 } 1127 1128 /* This is an alternate form of monitor_read_memory which is used for monitors 1129 which can only read a single byte/word/etc. at a time. */ 1130 1131 static int 1132 monitor_read_memory_single (memaddr, myaddr, len) 1133 CORE_ADDR memaddr; 1134 char *myaddr; 1135 int len; 1136 { 1137 unsigned int val; 1138 char membuf[sizeof(int) * 2 + 1]; 1139 char *p; 1140 char *cmd; 1141 int i; 1142 1143 #if 0 1144 /* Can't actually use long longs (nice idea, though). In fact, the 1145 call to strtoul below will fail if it tries to convert a value 1146 that's too big to fit in a long. */ 1147 if ((memaddr & 0x7) == 0 && len >= 8 && current_monitor->getmem.cmdll) 1148 { 1149 len = 8; 1150 cmd = current_monitor->getmem.cmdll; 1151 } 1152 else 1153 #endif 1154 if ((memaddr & 0x3) == 0 && len >= 4 && current_monitor->getmem.cmdl) 1155 { 1156 len = 4; 1157 cmd = current_monitor->getmem.cmdl; 1158 } 1159 else if ((memaddr & 0x1) == 0 && len >= 2 && current_monitor->getmem.cmdw) 1160 { 1161 len = 2; 1162 cmd = current_monitor->getmem.cmdw; 1163 } 1164 else 1165 { 1166 len = 1; 1167 cmd = current_monitor->getmem.cmdb; 1168 } 1169 1170 /* Send the examine command. */ 1171 1172 monitor_printf (cmd, memaddr); 1173 1174 /* If RESP_DELIM is specified, we search for that as a leading 1175 delimiter for the memory value. Otherwise, we just start 1176 searching from the start of the buf. */ 1177 1178 if (current_monitor->getmem.resp_delim) 1179 monitor_expect_regexp (&getmem_resp_delim_pattern, NULL, 0); 1180 1181 /* Now, read the appropriate number of hex digits for this loc, 1182 skipping spaces. */ 1183 1184 /* Skip leading spaces and "0x" if MO_HEX_PREFIX flag is set. */ 1185 if (current_monitor->flags & MO_HEX_PREFIX) 1186 { 1187 int c; 1188 1189 c = readchar (timeout); 1190 while (c == ' ') 1191 c = readchar (timeout); 1192 if ((c == '0') && ((c = readchar (timeout)) == 'x')) 1193 ; 1194 else 1195 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.", 1196 memaddr, i, membuf, c); 1197 } 1198 for (i = 0; i < len * 2; i++) 1199 { 1200 int c; 1201 1202 while (1) 1203 { 1204 c = readchar (timeout); 1205 if (isxdigit (c)) 1206 break; 1207 if (c == ' ') 1208 continue; 1209 1210 error ("monitor_read_memory_single (0x%x): bad response from monitor: %.*s%c.", 1211 memaddr, i, membuf, c); 1212 } 1213 1214 membuf[i] = c; 1215 } 1216 1217 membuf[i] = '\000'; /* terminate the number */ 1218 1219 /* If TERM is present, we wait for that to show up. Also, (if TERM is 1220 present), we will send TERM_CMD if that is present. In any case, we collect 1221 all of the output into buf, and then wait for the normal prompt. */ 1222 1223 if (current_monitor->getmem.term) 1224 { 1225 monitor_expect (current_monitor->getmem.term, NULL, 0); /* get response */ 1226 1227 if (current_monitor->getmem.term_cmd) 1228 { 1229 monitor_printf (current_monitor->getmem.term_cmd); 1230 monitor_expect_prompt (NULL, 0); 1231 } 1232 } 1233 else 1234 monitor_expect_prompt (NULL, 0); /* get response */ 1235 1236 p = membuf; 1237 val = strtoul (membuf, &p, 16); 1238 1239 if (val == 0 && membuf == p) 1240 error ("monitor_read_memory_single (0x%x): bad value from monitor: %s.", 1241 memaddr, membuf); 1242 1243 /* supply register stores in target byte order, so swap here */ 1244 1245 store_unsigned_integer (myaddr, len, val); 1246 1247 return len; 1248 } 1249 1250 /* Copy LEN bytes of data from debugger memory at MYADDR to inferior's memory 1251 at MEMADDR. Returns length moved. Currently, we only do one byte at a 1252 time. */ 1253 1254 static int 1255 monitor_read_memory (memaddr, myaddr, len) 1256 CORE_ADDR memaddr; 1257 char *myaddr; 1258 int len; 1259 { 1260 unsigned int val; 1261 unsigned char regbuf[MAX_REGISTER_RAW_SIZE]; 1262 char buf[512]; 1263 char *p, *p1; 1264 char *name; 1265 int resp_len; 1266 int i; 1267 1268 if (current_monitor->flags & MO_GETMEM_READ_SINGLE) 1269 return monitor_read_memory_single (memaddr, myaddr, len); 1270 1271 len = min (len, 16); 1272 1273 /* See if xfer would cross a 16 byte boundary. If so, clip it. */ 1274 if (((memaddr ^ (memaddr + len - 1)) & ~0xf) != 0) 1275 len = ((memaddr + len) & ~0xf) - memaddr; 1276 1277 /* send the memory examine command */ 1278 1279 if (current_monitor->flags & MO_GETMEM_NEEDS_RANGE) 1280 monitor_printf (current_monitor->getmem.cmdb, memaddr, memaddr + len - 1); 1281 else 1282 monitor_printf (current_monitor->getmem.cmdb, memaddr, len); 1283 1284 /* If TERM is present, we wait for that to show up. Also, (if TERM 1285 is present), we will send TERM_CMD if that is present. In any 1286 case, we collect all of the output into buf, and then wait for 1287 the normal prompt. */ 1288 1289 if (current_monitor->getmem.term) 1290 { 1291 resp_len = monitor_expect (current_monitor->getmem.term, buf, sizeof buf); /* get response */ 1292 1293 if (resp_len <= 0) 1294 error ("monitor_read_memory (0x%x): excessive response from monitor: %.*s.", 1295 memaddr, resp_len, buf); 1296 1297 if (current_monitor->getmem.term_cmd) 1298 { 1299 SERIAL_WRITE (monitor_desc, current_monitor->getmem.term_cmd, 1300 strlen (current_monitor->getmem.term_cmd)); 1301 monitor_expect_prompt (NULL, 0); 1302 } 1303 } 1304 else 1305 resp_len = monitor_expect_prompt (buf, sizeof buf); /* get response */ 1306 1307 p = buf; 1308 1309 /* If RESP_DELIM is specified, we search for that as a leading 1310 delimiter for the values. Otherwise, we just start searching 1311 from the start of the buf. */ 1312 1313 if (current_monitor->getmem.resp_delim) 1314 { 1315 int retval, tmp; 1316 struct re_registers resp_strings; 1317 1318 tmp = strlen (p); 1319 retval = re_search (&getmem_resp_delim_pattern, p, tmp, 0, tmp, 1320 &resp_strings); 1321 1322 if (retval < 0) 1323 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.", 1324 memaddr, resp_len, buf); 1325 1326 p += resp_strings.end[0]; 1327 #if 0 1328 p = strstr (p, current_monitor->getmem.resp_delim); 1329 if (!p) 1330 error ("monitor_read_memory (0x%x): bad response from monitor: %.*s.", 1331 memaddr, resp_len, buf); 1332 p += strlen (current_monitor->getmem.resp_delim); 1333 #endif 1334 } 1335 1336 for (i = len; i > 0; i--) 1337 { 1338 /* Skip non-hex chars, but bomb on end of string and newlines */ 1339 1340 while (1) 1341 { 1342 if (isxdigit (*p)) 1343 break; 1344 if (*p == '\000' || *p == '\n' || *p == '\r') 1345 error ("monitor_read_memory (0x%x): badly terminated response from monitor: %.*s", memaddr, resp_len, buf); 1346 p++; 1347 } 1348 1349 val = strtoul (p, &p1, 16); 1350 1351 if (val == 0 && p == p1) 1352 error ("monitor_read_memory (0x%x): bad value from monitor: %.*s.", memaddr, 1353 resp_len, buf); 1354 1355 *myaddr++ = val; 1356 1357 if (i == 1) 1358 break; 1359 1360 p = p1; 1361 } 1362 1363 return len; 1364 } 1365 1366 static int 1367 monitor_xfer_memory (memaddr, myaddr, len, write, target) 1368 CORE_ADDR memaddr; 1369 char *myaddr; 1370 int len; 1371 int write; 1372 struct target_ops *target; /* ignored */ 1373 { 1374 return dcache_xfer_memory (remote_dcache, memaddr, myaddr, len, write); 1375 } 1376 1377 static void 1378 monitor_kill () 1379 { 1380 return; /* ignore attempts to kill target system */ 1381 } 1382 1383 /* All we actually do is set the PC to the start address of exec_bfd, and start 1384 the program at that point. */ 1385 1386 static void 1387 monitor_create_inferior (exec_file, args, env) 1388 char *exec_file; 1389 char *args; 1390 char **env; 1391 { 1392 if (args && (*args != '\000')) 1393 error ("Args are not supported by the monitor."); 1394 1395 first_time = 1; 1396 clear_proceed_status (); 1397 proceed (bfd_get_start_address (exec_bfd), TARGET_SIGNAL_0, 0); 1398 } 1399 1400 /* Clean up when a program exits. 1401 The program actually lives on in the remote processor's RAM, and may be 1402 run again without a download. Don't leave it full of breakpoint 1403 instructions. */ 1404 1405 static void 1406 monitor_mourn_inferior () 1407 { 1408 unpush_target (targ_ops); 1409 generic_mourn_inferior (); /* Do all the proper things now */ 1410 } 1411 1412 #define NUM_MONITOR_BREAKPOINTS 8 1413 1414 static CORE_ADDR breakaddr[NUM_MONITOR_BREAKPOINTS] = {0}; 1415 1416 /* Tell the monitor to add a breakpoint. */ 1417 1418 static int 1419 monitor_insert_breakpoint (addr, shadow) 1420 CORE_ADDR addr; 1421 char *shadow; 1422 { 1423 int i; 1424 static unsigned char break_insn[] = BREAKPOINT; 1425 1426 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++) 1427 { 1428 if (breakaddr[i] == 0) 1429 { 1430 breakaddr[i] = addr; 1431 monitor_read_memory (addr, shadow, sizeof (break_insn)); 1432 monitor_printf (current_monitor->set_break, addr); 1433 monitor_expect_prompt (NULL, 0); 1434 return 0; 1435 } 1436 } 1437 1438 error ("Too many breakpoints (> %d) for monitor.", NUM_MONITOR_BREAKPOINTS); 1439 } 1440 1441 /* Tell the monitor to remove a breakpoint. */ 1442 1443 static int 1444 monitor_remove_breakpoint (addr, shadow) 1445 CORE_ADDR addr; 1446 char *shadow; 1447 { 1448 int i; 1449 1450 for (i = 0; i < NUM_MONITOR_BREAKPOINTS; i++) 1451 { 1452 if (breakaddr[i] == addr) 1453 { 1454 breakaddr[i] = 0; 1455 /* some monitors remove breakpoints based on the address */ 1456 if (current_monitor->flags & MO_CLR_BREAK_USES_ADDR) 1457 monitor_printf (current_monitor->clr_break, addr); 1458 else 1459 monitor_printf (current_monitor->clr_break, i); 1460 monitor_expect_prompt (NULL, 0); 1461 return 0; 1462 } 1463 } 1464 fprintf_unfiltered (stderr, "Can't find breakpoint associated with 0x%x\n", addr); 1465 return 1; 1466 } 1467 1468 /* monitor_wait_srec_ack -- wait for the target to send an acknowledgement for 1469 an S-record. Return non-zero if the ACK is received properly. */ 1470 1471 static int 1472 monitor_wait_srec_ack () 1473 { 1474 /* FIXME: eventually we'll want to be able to handle acknowledgements 1475 of something other than a '+' character. Right now this is only 1476 going to work for EST visionICE. */ 1477 return readchar (timeout) == '+'; 1478 } 1479 1480 /* monitor_load -- download a file. */ 1481 1482 static void 1483 monitor_load (file, from_tty) 1484 char *file; 1485 int from_tty; 1486 { 1487 dcache_flush (remote_dcache); 1488 1489 if (current_monitor->load_routine) 1490 current_monitor->load_routine (monitor_desc, file, hashmark); 1491 else 1492 { /* The default is ascii S-records */ 1493 monitor_printf (current_monitor->load); 1494 if (current_monitor->loadresp) 1495 monitor_expect (current_monitor->loadresp, NULL, 0); 1496 1497 /* FIXME Should add arg here for load_offset (already done for generic_load) */ 1498 load_srec (monitor_desc, file, 32, SREC_ALL, hashmark, 1499 current_monitor->flags & MO_SREC_ACK ? 1500 monitor_wait_srec_ack : NULL); 1501 1502 monitor_expect_prompt (NULL, 0); 1503 } 1504 1505 /* Finally, make the PC point at the start address */ 1506 1507 if (exec_bfd) 1508 write_pc (bfd_get_start_address (exec_bfd)); 1509 1510 inferior_pid = 0; /* No process now */ 1511 1512 /* This is necessary because many things were based on the PC at the time that 1513 we attached to the monitor, which is no longer valid now that we have loaded 1514 new code (and just changed the PC). Another way to do this might be to call 1515 normal_stop, except that the stack may not be valid, and things would get 1516 horribly confused... */ 1517 1518 clear_symtab_users (); 1519 } 1520 1521 static void 1522 monitor_stop () 1523 { 1524 if ((current_monitor->flags & MO_SEND_BREAK_ON_STOP) != 0) 1525 SERIAL_SEND_BREAK (monitor_desc); 1526 if (current_monitor->stop) 1527 monitor_printf_noecho (current_monitor->stop); 1528 } 1529 1530 /* Put a command string, in args, out to MONITOR. Output from MONITOR 1531 is placed on the users terminal until the prompt is seen. FIXME: We 1532 read the characters ourseleves here cause of a nasty echo. */ 1533 1534 static void 1535 monitor_command (args, from_tty) 1536 char *args; 1537 int from_tty; 1538 { 1539 char *p; 1540 int resp_len; 1541 char buf[1000]; 1542 1543 if (monitor_desc == NULL) 1544 error ("monitor target not open."); 1545 1546 p = current_monitor->prompt; 1547 1548 /* Send the command. Note that if no args were supplied, then we're 1549 just sending the monitor a newline, which is sometimes useful. */ 1550 1551 monitor_printf ("%s\r", (args ? args : "")); 1552 1553 resp_len = monitor_expect_prompt (buf, sizeof buf); 1554 1555 fputs_unfiltered (buf, gdb_stdout); /* Output the response */ 1556 } 1557 1558 /* Convert hex digit A to a number. */ 1559 1560 static int 1561 from_hex (a) 1562 int a; 1563 { 1564 if (a >= '0' && a <= '9') 1565 return a - '0'; 1566 if (a >= 'a' && a <= 'f') 1567 return a - 'a' + 10; 1568 if (a >= 'A' && a <= 'F') 1569 return a - 'A' + 10; 1570 1571 error ("Reply contains invalid hex digit 0x%x", a); 1572 } 1573 1574 static struct target_ops monitor_ops = 1575 { 1576 NULL, /* to_shortname */ 1577 NULL, /* to_longname */ 1578 NULL, /* to_doc */ 1579 NULL, /* to_open */ 1580 monitor_close, /* to_close */ 1581 NULL, /* to_attach */ 1582 monitor_detach, /* to_detach */ 1583 monitor_resume, /* to_resume */ 1584 monitor_wait, /* to_wait */ 1585 monitor_fetch_registers, /* to_fetch_registers */ 1586 monitor_store_registers, /* to_store_registers */ 1587 monitor_prepare_to_store, /* to_prepare_to_store */ 1588 monitor_xfer_memory, /* to_xfer_memory */ 1589 monitor_files_info, /* to_files_info */ 1590 monitor_insert_breakpoint, /* to_insert_breakpoint */ 1591 monitor_remove_breakpoint, /* to_remove_breakpoint */ 1592 0, /* to_terminal_init */ 1593 0, /* to_terminal_inferior */ 1594 0, /* to_terminal_ours_for_output */ 1595 0, /* to_terminal_ours */ 1596 0, /* to_terminal_info */ 1597 monitor_kill, /* to_kill */ 1598 monitor_load, /* to_load */ 1599 0, /* to_lookup_symbol */ 1600 monitor_create_inferior, /* to_create_inferior */ 1601 monitor_mourn_inferior, /* to_mourn_inferior */ 1602 0, /* to_can_run */ 1603 0, /* to_notice_signals */ 1604 0, /* to_thread_alive */ 1605 monitor_stop, /* to_stop */ 1606 process_stratum, /* to_stratum */ 1607 0, /* to_next */ 1608 1, /* to_has_all_memory */ 1609 1, /* to_has_memory */ 1610 1, /* to_has_stack */ 1611 1, /* to_has_registers */ 1612 1, /* to_has_execution */ 1613 0, /* sections */ 1614 0, /* sections_end */ 1615 OPS_MAGIC /* to_magic */ 1616 }; 1617 1618 /* Init the target_ops structure pointed at by OPS */ 1619 1620 void 1621 init_monitor_ops (ops) 1622 struct target_ops *ops; 1623 { 1624 memcpy (ops, &monitor_ops, sizeof monitor_ops); 1625 } 1626 1627 /* Define additional commands that are usually only used by monitors. */ 1628 1629 void 1630 _initialize_remote_monitors () 1631 { 1632 add_show_from_set (add_set_cmd ("hash", no_class, var_boolean, 1633 (char *)&hashmark, 1634 "Set display of activity while downloading a file.\n\ 1635 When enabled, a hashmark \'#\' is displayed.", 1636 &setlist), 1637 &showlist); 1638 1639 add_com ("monitor", class_obscure, monitor_command, 1640 "Send a command to the debug monitor."); 1641 } 1642