1 /* MI Command Set. 2 3 Copyright (C) 2000-2023 Free Software Foundation, Inc. 4 5 Contributed by Cygnus Solutions (a Red Hat company). 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 3 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, see <http://www.gnu.org/licenses/>. */ 21 22 #include "defs.h" 23 #include "arch-utils.h" 24 #include "target.h" 25 #include "inferior.h" 26 #include "infrun.h" 27 #include "top.h" 28 #include "gdbthread.h" 29 #include "mi-cmds.h" 30 #include "mi-parse.h" 31 #include "mi-getopt.h" 32 #include "mi-console.h" 33 #include "ui-out.h" 34 #include "mi-out.h" 35 #include "interps.h" 36 #include "gdbsupport/event-loop.h" 37 #include "event-top.h" 38 #include "gdbcore.h" /* For write_memory(). */ 39 #include "value.h" 40 #include "regcache.h" 41 #include "frame.h" 42 #include "mi-main.h" 43 #include "mi-interp.h" 44 #include "language.h" 45 #include "valprint.h" 46 #include "osdata.h" 47 #include "gdbsupport/gdb_splay_tree.h" 48 #include "tracepoint.h" 49 #include "ada-lang.h" 50 #include "linespec.h" 51 #include "extension.h" 52 #include "gdbcmd.h" 53 #include "observable.h" 54 #include "gdbsupport/gdb_optional.h" 55 #include "gdbsupport/byte-vector.h" 56 57 #include <ctype.h> 58 #include "gdbsupport/run-time-clock.h" 59 #include <chrono> 60 #include "progspace-and-thread.h" 61 #include "gdbsupport/rsp-low.h" 62 #include <algorithm> 63 #include <set> 64 #include <map> 65 66 enum 67 { 68 FROM_TTY = 0 69 }; 70 71 /* Debug flag */ 72 static int mi_debug_p; 73 74 /* This is used to pass the current command timestamp down to 75 continuation routines. */ 76 static struct mi_timestamp *current_command_ts; 77 78 static int do_timings = 0; 79 80 char *current_token; 81 /* Few commands would like to know if options like --thread-group were 82 explicitly specified. This variable keeps the current parsed 83 command including all option, and make it possible. */ 84 static struct mi_parse *current_context; 85 86 int running_result_record_printed = 1; 87 88 /* Flag indicating that the target has proceeded since the last 89 command was issued. */ 90 int mi_proceeded; 91 92 static void mi_cmd_execute (struct mi_parse *parse); 93 94 static void mi_execute_async_cli_command (const char *cli_command, 95 char **argv, int argc); 96 static bool register_changed_p (int regnum, readonly_detached_regcache *, 97 readonly_detached_regcache *); 98 static void output_register (frame_info_ptr, int regnum, int format, 99 int skip_unavailable); 100 101 /* Controls whether the frontend wants MI in async mode. */ 102 static bool mi_async = false; 103 104 /* The set command writes to this variable. If the inferior is 105 executing, mi_async is *not* updated. */ 106 static bool mi_async_1 = false; 107 108 static void 109 set_mi_async_command (const char *args, int from_tty, 110 struct cmd_list_element *c) 111 { 112 if (have_live_inferiors ()) 113 { 114 mi_async_1 = mi_async; 115 error (_("Cannot change this setting while the inferior is running.")); 116 } 117 118 mi_async = mi_async_1; 119 } 120 121 static void 122 show_mi_async_command (struct ui_file *file, int from_tty, 123 struct cmd_list_element *c, 124 const char *value) 125 { 126 gdb_printf (file, 127 _("Whether MI is in asynchronous mode is %s.\n"), 128 value); 129 } 130 131 /* A wrapper for target_can_async_p that takes the MI setting into 132 account. */ 133 134 int 135 mi_async_p (void) 136 { 137 return mi_async && target_can_async_p (); 138 } 139 140 /* Command implementations. FIXME: Is this libgdb? No. This is the MI 141 layer that calls libgdb. Any operation used in the below should be 142 formalized. */ 143 144 static void timestamp (struct mi_timestamp *tv); 145 146 static void print_diff (struct ui_file *file, struct mi_timestamp *start, 147 struct mi_timestamp *end); 148 149 void 150 mi_cmd_gdb_exit (const char *command, char **argv, int argc) 151 { 152 struct mi_interp *mi = (struct mi_interp *) current_interpreter (); 153 154 /* We have to print everything right here because we never return. */ 155 if (current_token) 156 gdb_puts (current_token, mi->raw_stdout); 157 gdb_puts ("^exit\n", mi->raw_stdout); 158 mi_out_put (current_uiout, mi->raw_stdout); 159 gdb_flush (mi->raw_stdout); 160 /* FIXME: The function called is not yet a formal libgdb function. */ 161 quit_force (NULL, FROM_TTY); 162 } 163 164 void 165 mi_cmd_exec_next (const char *command, char **argv, int argc) 166 { 167 /* FIXME: Should call a libgdb function, not a cli wrapper. */ 168 if (argc > 0 && strcmp(argv[0], "--reverse") == 0) 169 mi_execute_async_cli_command ("reverse-next", argv + 1, argc - 1); 170 else 171 mi_execute_async_cli_command ("next", argv, argc); 172 } 173 174 void 175 mi_cmd_exec_next_instruction (const char *command, char **argv, int argc) 176 { 177 /* FIXME: Should call a libgdb function, not a cli wrapper. */ 178 if (argc > 0 && strcmp(argv[0], "--reverse") == 0) 179 mi_execute_async_cli_command ("reverse-nexti", argv + 1, argc - 1); 180 else 181 mi_execute_async_cli_command ("nexti", argv, argc); 182 } 183 184 void 185 mi_cmd_exec_step (const char *command, char **argv, int argc) 186 { 187 /* FIXME: Should call a libgdb function, not a cli wrapper. */ 188 if (argc > 0 && strcmp(argv[0], "--reverse") == 0) 189 mi_execute_async_cli_command ("reverse-step", argv + 1, argc - 1); 190 else 191 mi_execute_async_cli_command ("step", argv, argc); 192 } 193 194 void 195 mi_cmd_exec_step_instruction (const char *command, char **argv, int argc) 196 { 197 /* FIXME: Should call a libgdb function, not a cli wrapper. */ 198 if (argc > 0 && strcmp(argv[0], "--reverse") == 0) 199 mi_execute_async_cli_command ("reverse-stepi", argv + 1, argc - 1); 200 else 201 mi_execute_async_cli_command ("stepi", argv, argc); 202 } 203 204 void 205 mi_cmd_exec_finish (const char *command, char **argv, int argc) 206 { 207 /* FIXME: Should call a libgdb function, not a cli wrapper. */ 208 if (argc > 0 && strcmp(argv[0], "--reverse") == 0) 209 mi_execute_async_cli_command ("reverse-finish", argv + 1, argc - 1); 210 else 211 mi_execute_async_cli_command ("finish", argv, argc); 212 } 213 214 void 215 mi_cmd_exec_return (const char *command, char **argv, int argc) 216 { 217 /* This command doesn't really execute the target, it just pops the 218 specified number of frames. */ 219 if (argc) 220 /* Call return_command with from_tty argument equal to 0 so as to 221 avoid being queried. */ 222 return_command (*argv, 0); 223 else 224 /* Call return_command with from_tty argument equal to 0 so as to 225 avoid being queried. */ 226 return_command (NULL, 0); 227 228 /* Because we have called return_command with from_tty = 0, we need 229 to print the frame here. */ 230 print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS, 1); 231 } 232 233 void 234 mi_cmd_exec_jump (const char *args, char **argv, int argc) 235 { 236 /* FIXME: Should call a libgdb function, not a cli wrapper. */ 237 mi_execute_async_cli_command ("jump", argv, argc); 238 } 239 240 static void 241 proceed_thread (struct thread_info *thread, int pid) 242 { 243 if (thread->state != THREAD_STOPPED) 244 return; 245 246 if (pid != 0 && thread->ptid.pid () != pid) 247 return; 248 249 switch_to_thread (thread); 250 clear_proceed_status (0); 251 proceed ((CORE_ADDR) -1, GDB_SIGNAL_DEFAULT); 252 } 253 254 static int 255 proceed_thread_callback (struct thread_info *thread, void *arg) 256 { 257 int pid = *(int *)arg; 258 259 proceed_thread (thread, pid); 260 return 0; 261 } 262 263 static void 264 exec_continue (char **argv, int argc) 265 { 266 prepare_execution_command (current_inferior ()->top_target (), mi_async_p ()); 267 268 269 if (non_stop) 270 { 271 /* In non-stop mode, 'resume' always resumes a single thread. 272 Therefore, to resume all threads of the current inferior, or 273 all threads in all inferiors, we need to iterate over 274 threads. 275 276 See comment on infcmd.c:proceed_thread_callback for rationale. */ 277 if (current_context->all || current_context->thread_group != -1) 278 { 279 scoped_restore_current_thread restore_thread; 280 scoped_disable_commit_resumed disable_commit_resumed 281 ("MI continue all threads in non-stop"); 282 int pid = 0; 283 284 if (!current_context->all) 285 { 286 struct inferior *inf 287 = find_inferior_id (current_context->thread_group); 288 289 pid = inf->pid; 290 } 291 292 iterate_over_threads (proceed_thread_callback, &pid); 293 disable_commit_resumed.reset_and_commit (); 294 } 295 else 296 { 297 continue_1 (0); 298 } 299 } 300 else 301 { 302 scoped_restore save_multi = make_scoped_restore (&sched_multi); 303 304 if (current_context->all) 305 { 306 sched_multi = 1; 307 continue_1 (0); 308 } 309 else 310 { 311 /* In all-stop mode, -exec-continue traditionally resumed 312 either all threads, or one thread, depending on the 313 'scheduler-locking' variable. Let's continue to do the 314 same. */ 315 continue_1 (1); 316 } 317 } 318 } 319 320 static void 321 exec_reverse_continue (char **argv, int argc) 322 { 323 enum exec_direction_kind dir = execution_direction; 324 325 if (dir == EXEC_REVERSE) 326 error (_("Already in reverse mode.")); 327 328 if (!target_can_execute_reverse ()) 329 error (_("Target %s does not support this command."), target_shortname ()); 330 331 scoped_restore save_exec_dir = make_scoped_restore (&execution_direction, 332 EXEC_REVERSE); 333 exec_continue (argv, argc); 334 } 335 336 void 337 mi_cmd_exec_continue (const char *command, char **argv, int argc) 338 { 339 if (argc > 0 && strcmp (argv[0], "--reverse") == 0) 340 exec_reverse_continue (argv + 1, argc - 1); 341 else 342 exec_continue (argv, argc); 343 } 344 345 static int 346 interrupt_thread_callback (struct thread_info *thread, void *arg) 347 { 348 int pid = *(int *)arg; 349 350 if (thread->state != THREAD_RUNNING) 351 return 0; 352 353 if (thread->ptid.pid () != pid) 354 return 0; 355 356 target_stop (thread->ptid); 357 return 0; 358 } 359 360 /* Interrupt the execution of the target. Note how we must play 361 around with the token variables, in order to display the current 362 token in the result of the interrupt command, and the previous 363 execution token when the target finally stops. See comments in 364 mi_cmd_execute. */ 365 366 void 367 mi_cmd_exec_interrupt (const char *command, char **argv, int argc) 368 { 369 /* In all-stop mode, everything stops, so we don't need to try 370 anything specific. */ 371 if (!non_stop) 372 { 373 interrupt_target_1 (0); 374 return; 375 } 376 377 if (current_context->all) 378 { 379 /* This will interrupt all threads in all inferiors. */ 380 interrupt_target_1 (1); 381 } 382 else if (current_context->thread_group != -1) 383 { 384 struct inferior *inf = find_inferior_id (current_context->thread_group); 385 386 scoped_disable_commit_resumed disable_commit_resumed 387 ("interrupting all threads of thread group"); 388 389 iterate_over_threads (interrupt_thread_callback, &inf->pid); 390 } 391 else 392 { 393 /* Interrupt just the current thread -- either explicitly 394 specified via --thread or whatever was current before 395 MI command was sent. */ 396 interrupt_target_1 (0); 397 } 398 } 399 400 /* Start the execution of the given inferior. 401 402 START_P indicates whether the program should be stopped when reaching the 403 main subprogram (similar to what the CLI "start" command does). */ 404 405 static void 406 run_one_inferior (inferior *inf, bool start_p) 407 { 408 const char *run_cmd = start_p ? "start" : "run"; 409 struct target_ops *run_target = find_run_target (); 410 bool async_p = mi_async && target_can_async_p (run_target); 411 412 if (inf->pid != 0) 413 { 414 thread_info *tp = any_thread_of_inferior (inf); 415 if (tp == NULL) 416 error (_("Inferior has no threads.")); 417 418 switch_to_thread (tp); 419 } 420 else 421 switch_to_inferior_no_thread (inf); 422 mi_execute_cli_command (run_cmd, async_p, 423 async_p ? "&" : NULL); 424 } 425 426 void 427 mi_cmd_exec_run (const char *command, char **argv, int argc) 428 { 429 int start_p = 0; 430 431 /* Parse the command options. */ 432 enum opt 433 { 434 START_OPT, 435 }; 436 static const struct mi_opt opts[] = 437 { 438 {"-start", START_OPT, 0}, 439 {NULL, 0, 0}, 440 }; 441 442 int oind = 0; 443 char *oarg; 444 445 while (1) 446 { 447 int opt = mi_getopt ("-exec-run", argc, argv, opts, &oind, &oarg); 448 449 if (opt < 0) 450 break; 451 switch ((enum opt) opt) 452 { 453 case START_OPT: 454 start_p = 1; 455 break; 456 } 457 } 458 459 /* This command does not accept any argument. Make sure the user 460 did not provide any. */ 461 if (oind != argc) 462 error (_("Invalid argument: %s"), argv[oind]); 463 464 if (current_context->all) 465 { 466 scoped_restore_current_pspace_and_thread restore_pspace_thread; 467 468 for (inferior *inf : all_inferiors ()) 469 run_one_inferior (inf, start_p); 470 } 471 else 472 { 473 const char *run_cmd = start_p ? "start" : "run"; 474 struct target_ops *run_target = find_run_target (); 475 bool async_p = mi_async && target_can_async_p (run_target); 476 477 mi_execute_cli_command (run_cmd, async_p, 478 async_p ? "&" : NULL); 479 } 480 } 481 482 483 static int 484 find_thread_of_process (struct thread_info *ti, void *p) 485 { 486 int pid = *(int *)p; 487 488 if (ti->ptid.pid () == pid && ti->state != THREAD_EXITED) 489 return 1; 490 491 return 0; 492 } 493 494 void 495 mi_cmd_target_detach (const char *command, char **argv, int argc) 496 { 497 if (argc != 0 && argc != 1) 498 error (_("Usage: -target-detach [pid | thread-group]")); 499 500 if (argc == 1) 501 { 502 struct thread_info *tp; 503 char *end = argv[0]; 504 int pid; 505 506 /* First see if we are dealing with a thread-group id. */ 507 if (*argv[0] == 'i') 508 { 509 struct inferior *inf; 510 int id = strtoul (argv[0] + 1, &end, 0); 511 512 if (*end != '\0') 513 error (_("Invalid syntax of thread-group id '%s'"), argv[0]); 514 515 inf = find_inferior_id (id); 516 if (!inf) 517 error (_("Non-existent thread-group id '%d'"), id); 518 519 pid = inf->pid; 520 } 521 else 522 { 523 /* We must be dealing with a pid. */ 524 pid = strtol (argv[0], &end, 10); 525 526 if (*end != '\0') 527 error (_("Invalid identifier '%s'"), argv[0]); 528 } 529 530 /* Pick any thread in the desired process. Current 531 target_detach detaches from the parent of inferior_ptid. */ 532 tp = iterate_over_threads (find_thread_of_process, &pid); 533 if (!tp) 534 error (_("Thread group is empty")); 535 536 switch_to_thread (tp); 537 } 538 539 detach_command (NULL, 0); 540 } 541 542 void 543 mi_cmd_target_flash_erase (const char *command, char **argv, int argc) 544 { 545 flash_erase_command (NULL, 0); 546 } 547 548 void 549 mi_cmd_thread_select (const char *command, char **argv, int argc) 550 { 551 if (argc != 1) 552 error (_("-thread-select: USAGE: threadnum.")); 553 554 int num = value_as_long (parse_and_eval (argv[0])); 555 thread_info *thr = find_thread_global_id (num); 556 if (thr == NULL) 557 error (_("Thread ID %d not known."), num); 558 559 thread_select (argv[0], thr); 560 561 print_selected_thread_frame (current_uiout, 562 USER_SELECTED_THREAD | USER_SELECTED_FRAME); 563 } 564 565 void 566 mi_cmd_thread_list_ids (const char *command, char **argv, int argc) 567 { 568 if (argc != 0) 569 error (_("-thread-list-ids: No arguments required.")); 570 571 int num = 0; 572 int current_thread = -1; 573 574 update_thread_list (); 575 576 { 577 ui_out_emit_tuple tuple_emitter (current_uiout, "thread-ids"); 578 579 for (thread_info *tp : all_non_exited_threads ()) 580 { 581 if (tp->ptid == inferior_ptid) 582 current_thread = tp->global_num; 583 584 num++; 585 current_uiout->field_signed ("thread-id", tp->global_num); 586 } 587 } 588 589 if (current_thread != -1) 590 current_uiout->field_signed ("current-thread-id", current_thread); 591 current_uiout->field_signed ("number-of-threads", num); 592 } 593 594 void 595 mi_cmd_thread_info (const char *command, char **argv, int argc) 596 { 597 if (argc != 0 && argc != 1) 598 error (_("Invalid MI command")); 599 600 print_thread_info (current_uiout, argv[0], -1); 601 } 602 603 struct collect_cores_data 604 { 605 int pid; 606 std::set<int> cores; 607 }; 608 609 static int 610 collect_cores (struct thread_info *ti, void *xdata) 611 { 612 struct collect_cores_data *data = (struct collect_cores_data *) xdata; 613 614 if (ti->ptid.pid () == data->pid) 615 { 616 int core = target_core_of_thread (ti->ptid); 617 618 if (core != -1) 619 data->cores.insert (core); 620 } 621 622 return 0; 623 } 624 625 struct print_one_inferior_data 626 { 627 int recurse; 628 const std::set<int> *inferiors; 629 }; 630 631 static void 632 print_one_inferior (struct inferior *inferior, bool recurse, 633 const std::set<int> &ids) 634 { 635 struct ui_out *uiout = current_uiout; 636 637 if (ids.empty () || (ids.find (inferior->pid) != ids.end ())) 638 { 639 struct collect_cores_data data; 640 ui_out_emit_tuple tuple_emitter (uiout, NULL); 641 642 uiout->field_fmt ("id", "i%d", inferior->num); 643 uiout->field_string ("type", "process"); 644 if (inferior->has_exit_code) 645 uiout->field_string ("exit-code", 646 int_string (inferior->exit_code, 8, 0, 0, 1)); 647 if (inferior->pid != 0) 648 uiout->field_signed ("pid", inferior->pid); 649 650 if (inferior->pspace->exec_filename != nullptr) 651 { 652 uiout->field_string ("executable", 653 inferior->pspace->exec_filename.get ()); 654 } 655 656 if (inferior->pid != 0) 657 { 658 data.pid = inferior->pid; 659 iterate_over_threads (collect_cores, &data); 660 } 661 662 if (!data.cores.empty ()) 663 { 664 ui_out_emit_list list_emitter (uiout, "cores"); 665 666 for (int b : data.cores) 667 uiout->field_signed (NULL, b); 668 } 669 670 if (recurse) 671 print_thread_info (uiout, NULL, inferior->pid); 672 } 673 } 674 675 /* Output a field named 'cores' with a list as the value. The 676 elements of the list are obtained by splitting 'cores' on 677 comma. */ 678 679 static void 680 output_cores (struct ui_out *uiout, const char *field_name, const char *xcores) 681 { 682 ui_out_emit_list list_emitter (uiout, field_name); 683 auto cores = make_unique_xstrdup (xcores); 684 char *p = cores.get (); 685 char *saveptr; 686 687 for (p = strtok_r (p, ",", &saveptr); p; p = strtok_r (NULL, ",", &saveptr)) 688 uiout->field_string (NULL, p); 689 } 690 691 static void 692 list_available_thread_groups (const std::set<int> &ids, int recurse) 693 { 694 struct ui_out *uiout = current_uiout; 695 696 /* This keeps a map from integer (pid) to vector of struct osdata_item. 697 The vector contains information about all threads for the given pid. */ 698 std::map<int, std::vector<osdata_item>> tree; 699 700 /* get_osdata will throw if it cannot return data. */ 701 std::unique_ptr<osdata> data = get_osdata ("processes"); 702 703 if (recurse) 704 { 705 std::unique_ptr<osdata> threads = get_osdata ("threads"); 706 707 for (const osdata_item &item : threads->items) 708 { 709 const std::string *pid = get_osdata_column (item, "pid"); 710 int pid_i = strtoul (pid->c_str (), NULL, 0); 711 712 tree[pid_i].push_back (item); 713 } 714 } 715 716 ui_out_emit_list list_emitter (uiout, "groups"); 717 718 for (const osdata_item &item : data->items) 719 { 720 const std::string *pid = get_osdata_column (item, "pid"); 721 const std::string *cmd = get_osdata_column (item, "command"); 722 const std::string *user = get_osdata_column (item, "user"); 723 const std::string *cores = get_osdata_column (item, "cores"); 724 725 int pid_i = strtoul (pid->c_str (), NULL, 0); 726 727 /* At present, the target will return all available processes 728 and if information about specific ones was required, we filter 729 undesired processes here. */ 730 if (!ids.empty () && ids.find (pid_i) == ids.end ()) 731 continue; 732 733 ui_out_emit_tuple tuple_emitter (uiout, NULL); 734 735 uiout->field_string ("id", *pid); 736 uiout->field_string ("type", "process"); 737 if (cmd) 738 uiout->field_string ("description", *cmd); 739 if (user) 740 uiout->field_string ("user", *user); 741 if (cores) 742 output_cores (uiout, "cores", cores->c_str ()); 743 744 if (recurse) 745 { 746 auto n = tree.find (pid_i); 747 if (n != tree.end ()) 748 { 749 std::vector<osdata_item> &children = n->second; 750 751 ui_out_emit_list thread_list_emitter (uiout, "threads"); 752 753 for (const osdata_item &child : children) 754 { 755 ui_out_emit_tuple inner_tuple_emitter (uiout, NULL); 756 const std::string *tid = get_osdata_column (child, "tid"); 757 const std::string *tcore = get_osdata_column (child, "core"); 758 759 uiout->field_string ("id", *tid); 760 if (tcore) 761 uiout->field_string ("core", *tcore); 762 } 763 } 764 } 765 } 766 } 767 768 void 769 mi_cmd_list_thread_groups (const char *command, char **argv, int argc) 770 { 771 struct ui_out *uiout = current_uiout; 772 int available = 0; 773 int recurse = 0; 774 std::set<int> ids; 775 776 enum opt 777 { 778 AVAILABLE_OPT, RECURSE_OPT 779 }; 780 static const struct mi_opt opts[] = 781 { 782 {"-available", AVAILABLE_OPT, 0}, 783 {"-recurse", RECURSE_OPT, 1}, 784 { 0, 0, 0 } 785 }; 786 787 int oind = 0; 788 char *oarg; 789 790 while (1) 791 { 792 int opt = mi_getopt ("-list-thread-groups", argc, argv, opts, 793 &oind, &oarg); 794 795 if (opt < 0) 796 break; 797 switch ((enum opt) opt) 798 { 799 case AVAILABLE_OPT: 800 available = 1; 801 break; 802 case RECURSE_OPT: 803 if (strcmp (oarg, "0") == 0) 804 ; 805 else if (strcmp (oarg, "1") == 0) 806 recurse = 1; 807 else 808 error (_("only '0' and '1' are valid values " 809 "for the '--recurse' option")); 810 break; 811 } 812 } 813 814 for (; oind < argc; ++oind) 815 { 816 char *end; 817 int inf; 818 819 if (*(argv[oind]) != 'i') 820 error (_("invalid syntax of group id '%s'"), argv[oind]); 821 822 inf = strtoul (argv[oind] + 1, &end, 0); 823 824 if (*end != '\0') 825 error (_("invalid syntax of group id '%s'"), argv[oind]); 826 ids.insert (inf); 827 } 828 829 if (available) 830 { 831 list_available_thread_groups (ids, recurse); 832 } 833 else if (ids.size () == 1) 834 { 835 /* Local thread groups, single id. */ 836 int id = *(ids.begin ()); 837 struct inferior *inf = find_inferior_id (id); 838 839 if (!inf) 840 error (_("Non-existent thread group id '%d'"), id); 841 842 print_thread_info (uiout, NULL, inf->pid); 843 } 844 else 845 { 846 /* Local thread groups. Either no explicit ids -- and we 847 print everything, or several explicit ids. In both cases, 848 we print more than one group, and have to use 'groups' 849 as the top-level element. */ 850 ui_out_emit_list list_emitter (uiout, "groups"); 851 update_thread_list (); 852 for (inferior *inf : all_inferiors ()) 853 print_one_inferior (inf, recurse, ids); 854 } 855 } 856 857 void 858 mi_cmd_data_list_register_names (const char *command, char **argv, int argc) 859 { 860 struct gdbarch *gdbarch; 861 struct ui_out *uiout = current_uiout; 862 int regnum, numregs; 863 int i; 864 865 /* Note that the test for a valid register must include checking the 866 gdbarch_register_name because gdbarch_num_regs may be allocated 867 for the union of the register sets within a family of related 868 processors. In this case, some entries of gdbarch_register_name 869 will change depending upon the particular processor being 870 debugged. */ 871 872 gdbarch = get_current_arch (); 873 numregs = gdbarch_num_cooked_regs (gdbarch); 874 875 ui_out_emit_list list_emitter (uiout, "register-names"); 876 877 if (argc == 0) /* No args, just do all the regs. */ 878 { 879 for (regnum = 0; 880 regnum < numregs; 881 regnum++) 882 { 883 if (*(gdbarch_register_name (gdbarch, regnum)) == '\0') 884 uiout->field_string (NULL, ""); 885 else 886 uiout->field_string (NULL, gdbarch_register_name (gdbarch, regnum)); 887 } 888 } 889 890 /* Else, list of register #s, just do listed regs. */ 891 for (i = 0; i < argc; i++) 892 { 893 regnum = atoi (argv[i]); 894 if (regnum < 0 || regnum >= numregs) 895 error (_("bad register number")); 896 897 if (*(gdbarch_register_name (gdbarch, regnum)) == '\0') 898 uiout->field_string (NULL, ""); 899 else 900 uiout->field_string (NULL, gdbarch_register_name (gdbarch, regnum)); 901 } 902 } 903 904 void 905 mi_cmd_data_list_changed_registers (const char *command, char **argv, int argc) 906 { 907 static std::unique_ptr<readonly_detached_regcache> this_regs; 908 struct ui_out *uiout = current_uiout; 909 std::unique_ptr<readonly_detached_regcache> prev_regs; 910 struct gdbarch *gdbarch; 911 int regnum, numregs; 912 int i; 913 914 /* The last time we visited this function, the current frame's 915 register contents were saved in THIS_REGS. Move THIS_REGS over 916 to PREV_REGS, and refresh THIS_REGS with the now-current register 917 contents. */ 918 919 prev_regs = std::move (this_regs); 920 this_regs = frame_save_as_regcache (get_selected_frame (NULL)); 921 922 /* Note that the test for a valid register must include checking the 923 gdbarch_register_name because gdbarch_num_regs may be allocated 924 for the union of the register sets within a family of related 925 processors. In this case, some entries of gdbarch_register_name 926 will change depending upon the particular processor being 927 debugged. */ 928 929 gdbarch = this_regs->arch (); 930 numregs = gdbarch_num_cooked_regs (gdbarch); 931 932 ui_out_emit_list list_emitter (uiout, "changed-registers"); 933 934 if (argc == 0) 935 { 936 /* No args, just do all the regs. */ 937 for (regnum = 0; 938 regnum < numregs; 939 regnum++) 940 { 941 if (*(gdbarch_register_name (gdbarch, regnum)) == '\0') 942 continue; 943 944 if (register_changed_p (regnum, prev_regs.get (), 945 this_regs.get ())) 946 uiout->field_signed (NULL, regnum); 947 } 948 } 949 950 /* Else, list of register #s, just do listed regs. */ 951 for (i = 0; i < argc; i++) 952 { 953 regnum = atoi (argv[i]); 954 955 if (regnum >= 0 956 && regnum < numregs 957 && *gdbarch_register_name (gdbarch, regnum) != '\000') 958 { 959 if (register_changed_p (regnum, prev_regs.get (), 960 this_regs.get ())) 961 uiout->field_signed (NULL, regnum); 962 } 963 else 964 error (_("bad register number")); 965 } 966 } 967 968 static bool 969 register_changed_p (int regnum, readonly_detached_regcache *prev_regs, 970 readonly_detached_regcache *this_regs) 971 { 972 struct gdbarch *gdbarch = this_regs->arch (); 973 struct value *prev_value, *this_value; 974 975 /* First time through or after gdbarch change consider all registers 976 as changed. */ 977 if (!prev_regs || prev_regs->arch () != gdbarch) 978 return true; 979 980 /* Get register contents and compare. */ 981 prev_value = prev_regs->cooked_read_value (regnum); 982 this_value = this_regs->cooked_read_value (regnum); 983 gdb_assert (prev_value != NULL); 984 gdb_assert (this_value != NULL); 985 986 auto ret = !value_contents_eq (prev_value, 0, this_value, 0, 987 register_size (gdbarch, regnum)); 988 989 release_value (prev_value); 990 release_value (this_value); 991 return ret; 992 } 993 994 /* Return a list of register number and value pairs. The valid 995 arguments expected are: a letter indicating the format in which to 996 display the registers contents. This can be one of: x 997 (hexadecimal), d (decimal), N (natural), t (binary), o (octal), r 998 (raw). After the format argument there can be a sequence of 999 numbers, indicating which registers to fetch the content of. If 1000 the format is the only argument, a list of all the registers with 1001 their values is returned. */ 1002 1003 void 1004 mi_cmd_data_list_register_values (const char *command, char **argv, int argc) 1005 { 1006 struct ui_out *uiout = current_uiout; 1007 frame_info_ptr frame; 1008 struct gdbarch *gdbarch; 1009 int regnum, numregs, format; 1010 int i; 1011 int skip_unavailable = 0; 1012 int oind = 0; 1013 enum opt 1014 { 1015 SKIP_UNAVAILABLE, 1016 }; 1017 static const struct mi_opt opts[] = 1018 { 1019 {"-skip-unavailable", SKIP_UNAVAILABLE, 0}, 1020 { 0, 0, 0 } 1021 }; 1022 1023 /* Note that the test for a valid register must include checking the 1024 gdbarch_register_name because gdbarch_num_regs may be allocated 1025 for the union of the register sets within a family of related 1026 processors. In this case, some entries of gdbarch_register_name 1027 will change depending upon the particular processor being 1028 debugged. */ 1029 1030 while (1) 1031 { 1032 char *oarg; 1033 int opt = mi_getopt ("-data-list-register-values", argc, argv, 1034 opts, &oind, &oarg); 1035 1036 if (opt < 0) 1037 break; 1038 switch ((enum opt) opt) 1039 { 1040 case SKIP_UNAVAILABLE: 1041 skip_unavailable = 1; 1042 break; 1043 } 1044 } 1045 1046 if (argc - oind < 1) 1047 error (_("-data-list-register-values: Usage: " 1048 "-data-list-register-values [--skip-unavailable] <format>" 1049 " [<regnum1>...<regnumN>]")); 1050 1051 format = (int) argv[oind][0]; 1052 1053 frame = get_selected_frame (NULL); 1054 gdbarch = get_frame_arch (frame); 1055 numregs = gdbarch_num_cooked_regs (gdbarch); 1056 1057 ui_out_emit_list list_emitter (uiout, "register-values"); 1058 1059 if (argc - oind == 1) 1060 { 1061 /* No args, beside the format: do all the regs. */ 1062 for (regnum = 0; 1063 regnum < numregs; 1064 regnum++) 1065 { 1066 if (*(gdbarch_register_name (gdbarch, regnum)) == '\0') 1067 continue; 1068 1069 output_register (frame, regnum, format, skip_unavailable); 1070 } 1071 } 1072 1073 /* Else, list of register #s, just do listed regs. */ 1074 for (i = 1 + oind; i < argc; i++) 1075 { 1076 regnum = atoi (argv[i]); 1077 1078 if (regnum >= 0 1079 && regnum < numregs 1080 && *gdbarch_register_name (gdbarch, regnum) != '\000') 1081 output_register (frame, regnum, format, skip_unavailable); 1082 else 1083 error (_("bad register number")); 1084 } 1085 } 1086 1087 /* Output one register REGNUM's contents in the desired FORMAT. If 1088 SKIP_UNAVAILABLE is true, skip the register if it is 1089 unavailable. */ 1090 1091 static void 1092 output_register (frame_info_ptr frame, int regnum, int format, 1093 int skip_unavailable) 1094 { 1095 struct ui_out *uiout = current_uiout; 1096 struct value *val = value_of_register (regnum, frame); 1097 struct value_print_options opts; 1098 1099 if (skip_unavailable && !value_entirely_available (val)) 1100 return; 1101 1102 ui_out_emit_tuple tuple_emitter (uiout, NULL); 1103 uiout->field_signed ("number", regnum); 1104 1105 if (format == 'N') 1106 format = 0; 1107 1108 if (format == 'r') 1109 format = 'z'; 1110 1111 string_file stb; 1112 1113 get_formatted_print_options (&opts, format); 1114 opts.deref_ref = 1; 1115 common_val_print (val, &stb, 0, &opts, current_language); 1116 uiout->field_stream ("value", stb); 1117 } 1118 1119 /* Write given values into registers. The registers and values are 1120 given as pairs. The corresponding MI command is 1121 -data-write-register-values <format> 1122 [<regnum1> <value1>...<regnumN> <valueN>] */ 1123 void 1124 mi_cmd_data_write_register_values (const char *command, char **argv, int argc) 1125 { 1126 struct regcache *regcache; 1127 struct gdbarch *gdbarch; 1128 int numregs, i; 1129 1130 /* Note that the test for a valid register must include checking the 1131 gdbarch_register_name because gdbarch_num_regs may be allocated 1132 for the union of the register sets within a family of related 1133 processors. In this case, some entries of gdbarch_register_name 1134 will change depending upon the particular processor being 1135 debugged. */ 1136 1137 regcache = get_current_regcache (); 1138 gdbarch = regcache->arch (); 1139 numregs = gdbarch_num_cooked_regs (gdbarch); 1140 1141 if (argc == 0) 1142 error (_("-data-write-register-values: Usage: -data-write-register-" 1143 "values <format> [<regnum1> <value1>...<regnumN> <valueN>]")); 1144 1145 if (!target_has_registers ()) 1146 error (_("-data-write-register-values: No registers.")); 1147 1148 if (!(argc - 1)) 1149 error (_("-data-write-register-values: No regs and values specified.")); 1150 1151 if ((argc - 1) % 2) 1152 error (_("-data-write-register-values: " 1153 "Regs and vals are not in pairs.")); 1154 1155 for (i = 1; i < argc; i = i + 2) 1156 { 1157 int regnum = atoi (argv[i]); 1158 1159 if (regnum >= 0 && regnum < numregs 1160 && *gdbarch_register_name (gdbarch, regnum) != '\0') 1161 { 1162 LONGEST value; 1163 1164 /* Get the value as a number. */ 1165 value = parse_and_eval_address (argv[i + 1]); 1166 1167 /* Write it down. */ 1168 regcache_cooked_write_signed (regcache, regnum, value); 1169 } 1170 else 1171 error (_("bad register number")); 1172 } 1173 } 1174 1175 /* Evaluate the value of the argument. The argument is an 1176 expression. If the expression contains spaces it needs to be 1177 included in double quotes. */ 1178 1179 void 1180 mi_cmd_data_evaluate_expression (const char *command, char **argv, int argc) 1181 { 1182 struct value *val; 1183 struct value_print_options opts; 1184 struct ui_out *uiout = current_uiout; 1185 1186 if (argc != 1) 1187 error (_("-data-evaluate-expression: " 1188 "Usage: -data-evaluate-expression expression")); 1189 1190 expression_up expr = parse_expression (argv[0]); 1191 1192 val = evaluate_expression (expr.get ()); 1193 1194 string_file stb; 1195 1196 /* Print the result of the expression evaluation. */ 1197 get_user_print_options (&opts); 1198 opts.deref_ref = 0; 1199 common_val_print (val, &stb, 0, &opts, current_language); 1200 1201 uiout->field_stream ("value", stb); 1202 } 1203 1204 /* This is the -data-read-memory command. 1205 1206 ADDR: start address of data to be dumped. 1207 WORD-FORMAT: a char indicating format for the ``word''. See 1208 the ``x'' command. 1209 WORD-SIZE: size of each ``word''; 1,2,4, or 8 bytes. 1210 NR_ROW: Number of rows. 1211 NR_COL: The number of columns (words per row). 1212 ASCHAR: (OPTIONAL) Append an ascii character dump to each row. Use 1213 ASCHAR for unprintable characters. 1214 1215 Reads SIZE*NR_ROW*NR_COL bytes starting at ADDR from memory and 1216 displays them. Returns: 1217 1218 {addr="...",rowN={wordN="..." ,... [,ascii="..."]}, ...} 1219 1220 Returns: 1221 The number of bytes read is SIZE*ROW*COL. */ 1222 1223 void 1224 mi_cmd_data_read_memory (const char *command, char **argv, int argc) 1225 { 1226 struct gdbarch *gdbarch = get_current_arch (); 1227 struct ui_out *uiout = current_uiout; 1228 CORE_ADDR addr; 1229 long total_bytes, nr_cols, nr_rows; 1230 char word_format; 1231 struct type *word_type; 1232 long word_size; 1233 char word_asize; 1234 char aschar; 1235 int nr_bytes; 1236 long offset = 0; 1237 int oind = 0; 1238 char *oarg; 1239 enum opt 1240 { 1241 OFFSET_OPT 1242 }; 1243 static const struct mi_opt opts[] = 1244 { 1245 {"o", OFFSET_OPT, 1}, 1246 { 0, 0, 0 } 1247 }; 1248 1249 while (1) 1250 { 1251 int opt = mi_getopt ("-data-read-memory", argc, argv, opts, 1252 &oind, &oarg); 1253 1254 if (opt < 0) 1255 break; 1256 switch ((enum opt) opt) 1257 { 1258 case OFFSET_OPT: 1259 offset = atol (oarg); 1260 break; 1261 } 1262 } 1263 argv += oind; 1264 argc -= oind; 1265 1266 if (argc < 5 || argc > 6) 1267 error (_("-data-read-memory: Usage: " 1268 "ADDR WORD-FORMAT WORD-SIZE NR-ROWS NR-COLS [ASCHAR].")); 1269 1270 /* Extract all the arguments. */ 1271 1272 /* Start address of the memory dump. */ 1273 addr = parse_and_eval_address (argv[0]) + offset; 1274 /* The format character to use when displaying a memory word. See 1275 the ``x'' command. */ 1276 word_format = argv[1][0]; 1277 /* The size of the memory word. */ 1278 word_size = atol (argv[2]); 1279 switch (word_size) 1280 { 1281 case 1: 1282 word_type = builtin_type (gdbarch)->builtin_int8; 1283 word_asize = 'b'; 1284 break; 1285 case 2: 1286 word_type = builtin_type (gdbarch)->builtin_int16; 1287 word_asize = 'h'; 1288 break; 1289 case 4: 1290 word_type = builtin_type (gdbarch)->builtin_int32; 1291 word_asize = 'w'; 1292 break; 1293 case 8: 1294 word_type = builtin_type (gdbarch)->builtin_int64; 1295 word_asize = 'g'; 1296 break; 1297 default: 1298 word_type = builtin_type (gdbarch)->builtin_int8; 1299 word_asize = 'b'; 1300 } 1301 /* The number of rows. */ 1302 nr_rows = atol (argv[3]); 1303 if (nr_rows <= 0) 1304 error (_("-data-read-memory: invalid number of rows.")); 1305 1306 /* Number of bytes per row. */ 1307 nr_cols = atol (argv[4]); 1308 if (nr_cols <= 0) 1309 error (_("-data-read-memory: invalid number of columns.")); 1310 1311 /* The un-printable character when printing ascii. */ 1312 if (argc == 6) 1313 aschar = *argv[5]; 1314 else 1315 aschar = 0; 1316 1317 /* Create a buffer and read it in. */ 1318 total_bytes = word_size * nr_rows * nr_cols; 1319 1320 gdb::byte_vector mbuf (total_bytes); 1321 1322 nr_bytes = target_read (current_inferior ()->top_target (), 1323 TARGET_OBJECT_MEMORY, NULL, 1324 mbuf.data (), addr, total_bytes); 1325 if (nr_bytes <= 0) 1326 error (_("Unable to read memory.")); 1327 1328 /* Output the header information. */ 1329 uiout->field_core_addr ("addr", gdbarch, addr); 1330 uiout->field_signed ("nr-bytes", nr_bytes); 1331 uiout->field_signed ("total-bytes", total_bytes); 1332 uiout->field_core_addr ("next-row", gdbarch, addr + word_size * nr_cols); 1333 uiout->field_core_addr ("prev-row", gdbarch, addr - word_size * nr_cols); 1334 uiout->field_core_addr ("next-page", gdbarch, addr + total_bytes); 1335 uiout->field_core_addr ("prev-page", gdbarch, addr - total_bytes); 1336 1337 /* Build the result as a two dimensional table. */ 1338 { 1339 int row; 1340 int row_byte; 1341 1342 string_file stream; 1343 1344 ui_out_emit_list list_emitter (uiout, "memory"); 1345 for (row = 0, row_byte = 0; 1346 row < nr_rows; 1347 row++, row_byte += nr_cols * word_size) 1348 { 1349 int col; 1350 int col_byte; 1351 struct value_print_options print_opts; 1352 1353 ui_out_emit_tuple tuple_emitter (uiout, NULL); 1354 uiout->field_core_addr ("addr", gdbarch, addr + row_byte); 1355 /* ui_out_field_core_addr_symbolic (uiout, "saddr", addr + 1356 row_byte); */ 1357 { 1358 ui_out_emit_list list_data_emitter (uiout, "data"); 1359 get_formatted_print_options (&print_opts, word_format); 1360 for (col = 0, col_byte = row_byte; 1361 col < nr_cols; 1362 col++, col_byte += word_size) 1363 { 1364 if (col_byte + word_size > nr_bytes) 1365 { 1366 uiout->field_string (NULL, "N/A"); 1367 } 1368 else 1369 { 1370 stream.clear (); 1371 print_scalar_formatted (&mbuf[col_byte], word_type, 1372 &print_opts, word_asize, &stream); 1373 uiout->field_stream (NULL, stream); 1374 } 1375 } 1376 } 1377 1378 if (aschar) 1379 { 1380 int byte; 1381 1382 stream.clear (); 1383 for (byte = row_byte; 1384 byte < row_byte + word_size * nr_cols; byte++) 1385 { 1386 if (byte >= nr_bytes) 1387 stream.putc ('X'); 1388 else if (mbuf[byte] < 32 || mbuf[byte] > 126) 1389 stream.putc (aschar); 1390 else 1391 stream.putc (mbuf[byte]); 1392 } 1393 uiout->field_stream ("ascii", stream); 1394 } 1395 } 1396 } 1397 } 1398 1399 void 1400 mi_cmd_data_read_memory_bytes (const char *command, char **argv, int argc) 1401 { 1402 struct gdbarch *gdbarch = get_current_arch (); 1403 struct ui_out *uiout = current_uiout; 1404 CORE_ADDR addr; 1405 LONGEST length; 1406 long offset = 0; 1407 int unit_size = gdbarch_addressable_memory_unit_size (gdbarch); 1408 int oind = 0; 1409 char *oarg; 1410 enum opt 1411 { 1412 OFFSET_OPT 1413 }; 1414 static const struct mi_opt opts[] = 1415 { 1416 {"o", OFFSET_OPT, 1}, 1417 { 0, 0, 0 } 1418 }; 1419 1420 while (1) 1421 { 1422 int opt = mi_getopt ("-data-read-memory-bytes", argc, argv, opts, 1423 &oind, &oarg); 1424 if (opt < 0) 1425 break; 1426 switch ((enum opt) opt) 1427 { 1428 case OFFSET_OPT: 1429 offset = atol (oarg); 1430 break; 1431 } 1432 } 1433 argv += oind; 1434 argc -= oind; 1435 1436 if (argc != 2) 1437 error (_("Usage: [ -o OFFSET ] ADDR LENGTH.")); 1438 1439 addr = parse_and_eval_address (argv[0]) + offset; 1440 length = atol (argv[1]); 1441 1442 std::vector<memory_read_result> result 1443 = read_memory_robust (current_inferior ()->top_target (), addr, length); 1444 1445 if (result.size () == 0) 1446 error (_("Unable to read memory.")); 1447 1448 ui_out_emit_list list_emitter (uiout, "memory"); 1449 for (const memory_read_result &read_result : result) 1450 { 1451 ui_out_emit_tuple tuple_emitter (uiout, NULL); 1452 1453 uiout->field_core_addr ("begin", gdbarch, read_result.begin); 1454 uiout->field_core_addr ("offset", gdbarch, read_result.begin - addr); 1455 uiout->field_core_addr ("end", gdbarch, read_result.end); 1456 1457 std::string data = bin2hex (read_result.data.get (), 1458 (read_result.end - read_result.begin) 1459 * unit_size); 1460 uiout->field_string ("contents", data); 1461 } 1462 } 1463 1464 /* Implementation of the -data-write_memory command. 1465 1466 COLUMN_OFFSET: optional argument. Must be preceded by '-o'. The 1467 offset from the beginning of the memory grid row where the cell to 1468 be written is. 1469 ADDR: start address of the row in the memory grid where the memory 1470 cell is, if OFFSET_COLUMN is specified. Otherwise, the address of 1471 the location to write to. 1472 FORMAT: a char indicating format for the ``word''. See 1473 the ``x'' command. 1474 WORD_SIZE: size of each ``word''; 1,2,4, or 8 bytes 1475 VALUE: value to be written into the memory address. 1476 1477 Writes VALUE into ADDR + (COLUMN_OFFSET * WORD_SIZE). 1478 1479 Prints nothing. */ 1480 1481 void 1482 mi_cmd_data_write_memory (const char *command, char **argv, int argc) 1483 { 1484 struct gdbarch *gdbarch = get_current_arch (); 1485 enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); 1486 CORE_ADDR addr; 1487 long word_size; 1488 /* FIXME: ezannoni 2000-02-17 LONGEST could possibly not be big 1489 enough when using a compiler other than GCC. */ 1490 LONGEST value; 1491 long offset = 0; 1492 int oind = 0; 1493 char *oarg; 1494 enum opt 1495 { 1496 OFFSET_OPT 1497 }; 1498 static const struct mi_opt opts[] = 1499 { 1500 {"o", OFFSET_OPT, 1}, 1501 { 0, 0, 0 } 1502 }; 1503 1504 while (1) 1505 { 1506 int opt = mi_getopt ("-data-write-memory", argc, argv, opts, 1507 &oind, &oarg); 1508 1509 if (opt < 0) 1510 break; 1511 switch ((enum opt) opt) 1512 { 1513 case OFFSET_OPT: 1514 offset = atol (oarg); 1515 break; 1516 } 1517 } 1518 argv += oind; 1519 argc -= oind; 1520 1521 if (argc != 4) 1522 error (_("-data-write-memory: Usage: " 1523 "[-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE.")); 1524 1525 /* Extract all the arguments. */ 1526 /* Start address of the memory dump. */ 1527 addr = parse_and_eval_address (argv[0]); 1528 /* The size of the memory word. */ 1529 word_size = atol (argv[2]); 1530 1531 /* Calculate the real address of the write destination. */ 1532 addr += (offset * word_size); 1533 1534 /* Get the value as a number. */ 1535 value = parse_and_eval_address (argv[3]); 1536 /* Get the value into an array. */ 1537 gdb::byte_vector buffer (word_size); 1538 store_signed_integer (buffer.data (), word_size, byte_order, value); 1539 /* Write it down to memory. */ 1540 write_memory_with_notification (addr, buffer.data (), word_size); 1541 } 1542 1543 /* Implementation of the -data-write-memory-bytes command. 1544 1545 ADDR: start address 1546 DATA: string of bytes to write at that address 1547 COUNT: number of bytes to be filled (decimal integer). */ 1548 1549 void 1550 mi_cmd_data_write_memory_bytes (const char *command, char **argv, int argc) 1551 { 1552 CORE_ADDR addr; 1553 char *cdata; 1554 size_t len_hex, len_bytes, len_units, i, steps, remaining_units; 1555 long int count_units; 1556 int unit_size; 1557 1558 if (argc != 2 && argc != 3) 1559 error (_("Usage: ADDR DATA [COUNT].")); 1560 1561 addr = parse_and_eval_address (argv[0]); 1562 cdata = argv[1]; 1563 len_hex = strlen (cdata); 1564 unit_size = gdbarch_addressable_memory_unit_size (get_current_arch ()); 1565 1566 if (len_hex % (unit_size * 2) != 0) 1567 error (_("Hex-encoded '%s' must represent an integral number of " 1568 "addressable memory units."), 1569 cdata); 1570 1571 len_bytes = len_hex / 2; 1572 len_units = len_bytes / unit_size; 1573 1574 if (argc == 3) 1575 count_units = strtoul (argv[2], NULL, 10); 1576 else 1577 count_units = len_units; 1578 1579 gdb::byte_vector databuf (len_bytes); 1580 1581 for (i = 0; i < len_bytes; ++i) 1582 { 1583 int x; 1584 if (sscanf (cdata + i * 2, "%02x", &x) != 1) 1585 error (_("Invalid argument")); 1586 databuf[i] = (gdb_byte) x; 1587 } 1588 1589 gdb::byte_vector data; 1590 if (len_units < count_units) 1591 { 1592 /* Pattern is made of less units than count: 1593 repeat pattern to fill memory. */ 1594 data = gdb::byte_vector (count_units * unit_size); 1595 1596 /* Number of times the pattern is entirely repeated. */ 1597 steps = count_units / len_units; 1598 /* Number of remaining addressable memory units. */ 1599 remaining_units = count_units % len_units; 1600 for (i = 0; i < steps; i++) 1601 memcpy (&data[i * len_bytes], &databuf[0], len_bytes); 1602 1603 if (remaining_units > 0) 1604 memcpy (&data[steps * len_bytes], &databuf[0], 1605 remaining_units * unit_size); 1606 } 1607 else 1608 { 1609 /* Pattern is longer than or equal to count: 1610 just copy count addressable memory units. */ 1611 data = std::move (databuf); 1612 } 1613 1614 write_memory_with_notification (addr, data.data (), count_units); 1615 } 1616 1617 void 1618 mi_cmd_enable_timings (const char *command, char **argv, int argc) 1619 { 1620 if (argc == 0) 1621 do_timings = 1; 1622 else if (argc == 1) 1623 { 1624 if (strcmp (argv[0], "yes") == 0) 1625 do_timings = 1; 1626 else if (strcmp (argv[0], "no") == 0) 1627 do_timings = 0; 1628 else 1629 goto usage_error; 1630 } 1631 else 1632 goto usage_error; 1633 1634 return; 1635 1636 usage_error: 1637 error (_("-enable-timings: Usage: %s {yes|no}"), command); 1638 } 1639 1640 void 1641 mi_cmd_list_features (const char *command, char **argv, int argc) 1642 { 1643 if (argc == 0) 1644 { 1645 struct ui_out *uiout = current_uiout; 1646 1647 ui_out_emit_list list_emitter (uiout, "features"); 1648 uiout->field_string (NULL, "frozen-varobjs"); 1649 uiout->field_string (NULL, "pending-breakpoints"); 1650 uiout->field_string (NULL, "thread-info"); 1651 uiout->field_string (NULL, "data-read-memory-bytes"); 1652 uiout->field_string (NULL, "breakpoint-notifications"); 1653 uiout->field_string (NULL, "ada-task-info"); 1654 uiout->field_string (NULL, "language-option"); 1655 uiout->field_string (NULL, "info-gdb-mi-command"); 1656 uiout->field_string (NULL, "undefined-command-error-code"); 1657 uiout->field_string (NULL, "exec-run-start-option"); 1658 uiout->field_string (NULL, "data-disassemble-a-option"); 1659 1660 if (ext_lang_initialized_p (get_ext_lang_defn (EXT_LANG_PYTHON))) 1661 uiout->field_string (NULL, "python"); 1662 1663 return; 1664 } 1665 1666 error (_("-list-features should be passed no arguments")); 1667 } 1668 1669 void 1670 mi_cmd_list_target_features (const char *command, char **argv, int argc) 1671 { 1672 if (argc == 0) 1673 { 1674 struct ui_out *uiout = current_uiout; 1675 1676 ui_out_emit_list list_emitter (uiout, "features"); 1677 if (mi_async_p ()) 1678 uiout->field_string (NULL, "async"); 1679 if (target_can_execute_reverse ()) 1680 uiout->field_string (NULL, "reverse"); 1681 return; 1682 } 1683 1684 error (_("-list-target-features should be passed no arguments")); 1685 } 1686 1687 void 1688 mi_cmd_add_inferior (const char *command, char **argv, int argc) 1689 { 1690 bool no_connection = false; 1691 1692 /* Parse the command options. */ 1693 enum opt 1694 { 1695 NO_CONNECTION_OPT, 1696 }; 1697 static const struct mi_opt opts[] = 1698 { 1699 {"-no-connection", NO_CONNECTION_OPT, 0}, 1700 {NULL, 0, 0}, 1701 }; 1702 1703 int oind = 0; 1704 char *oarg; 1705 1706 while (1) 1707 { 1708 int opt = mi_getopt ("-add-inferior", argc, argv, opts, &oind, &oarg); 1709 1710 if (opt < 0) 1711 break; 1712 switch ((enum opt) opt) 1713 { 1714 case NO_CONNECTION_OPT: 1715 no_connection = true; 1716 break; 1717 } 1718 } 1719 1720 scoped_restore_current_pspace_and_thread restore_pspace_thread; 1721 1722 inferior *inf = add_inferior_with_spaces (); 1723 1724 switch_to_inferior_and_push_target (inf, no_connection, 1725 current_inferior ()); 1726 1727 current_uiout->field_fmt ("inferior", "i%d", inf->num); 1728 1729 process_stratum_target *proc_target = inf->process_target (); 1730 1731 if (proc_target != nullptr) 1732 { 1733 ui_out_emit_tuple tuple_emitter (current_uiout, "connection"); 1734 current_uiout->field_unsigned ("number", proc_target->connection_number); 1735 current_uiout->field_string ("name", proc_target->shortname ()); 1736 } 1737 } 1738 1739 void 1740 mi_cmd_remove_inferior (const char *command, char **argv, int argc) 1741 { 1742 int id; 1743 struct inferior *inf_to_remove; 1744 1745 if (argc != 1) 1746 error (_("-remove-inferior should be passed a single argument")); 1747 1748 if (sscanf (argv[0], "i%d", &id) != 1) 1749 error (_("the thread group id is syntactically invalid")); 1750 1751 inf_to_remove = find_inferior_id (id); 1752 if (inf_to_remove == NULL) 1753 error (_("the specified thread group does not exist")); 1754 1755 if (inf_to_remove->pid != 0) 1756 error (_("cannot remove an active inferior")); 1757 1758 if (inf_to_remove == current_inferior ()) 1759 { 1760 struct thread_info *tp = 0; 1761 struct inferior *new_inferior = NULL; 1762 1763 for (inferior *inf : all_inferiors ()) 1764 { 1765 if (inf != inf_to_remove) 1766 new_inferior = inf; 1767 } 1768 1769 if (new_inferior == NULL) 1770 error (_("Cannot remove last inferior")); 1771 1772 set_current_inferior (new_inferior); 1773 if (new_inferior->pid != 0) 1774 tp = any_thread_of_inferior (new_inferior); 1775 if (tp != NULL) 1776 switch_to_thread (tp); 1777 else 1778 switch_to_no_thread (); 1779 set_current_program_space (new_inferior->pspace); 1780 } 1781 1782 delete_inferior (inf_to_remove); 1783 } 1784 1785 1786 1787 /* Execute a command within a safe environment. 1788 Return <0 for error; >=0 for ok. 1789 1790 args->action will tell mi_execute_command what action 1791 to perform after the given command has executed (display/suppress 1792 prompt, display error). */ 1793 1794 static void 1795 captured_mi_execute_command (struct ui_out *uiout, struct mi_parse *context) 1796 { 1797 struct mi_interp *mi = (struct mi_interp *) command_interp (); 1798 1799 if (do_timings) 1800 current_command_ts = context->cmd_start; 1801 1802 scoped_restore save_token = make_scoped_restore (¤t_token, 1803 context->token); 1804 1805 running_result_record_printed = 0; 1806 mi_proceeded = 0; 1807 switch (context->op) 1808 { 1809 case MI_COMMAND: 1810 /* A MI command was read from the input stream. */ 1811 if (mi_debug_p) 1812 gdb_printf (gdb_stdlog, 1813 " token=`%s' command=`%s' args=`%s'\n", 1814 context->token, context->command, context->args); 1815 1816 mi_cmd_execute (context); 1817 1818 /* Print the result if there were no errors. 1819 1820 Remember that on the way out of executing a command, you have 1821 to directly use the mi_interp's uiout, since the command 1822 could have reset the interpreter, in which case the current 1823 uiout will most likely crash in the mi_out_* routines. */ 1824 if (!running_result_record_printed) 1825 { 1826 gdb_puts (context->token, mi->raw_stdout); 1827 /* There's no particularly good reason why target-connect results 1828 in not ^done. Should kill ^connected for MI3. */ 1829 gdb_puts (strcmp (context->command, "target-select") == 0 1830 ? "^connected" : "^done", mi->raw_stdout); 1831 mi_out_put (uiout, mi->raw_stdout); 1832 mi_out_rewind (uiout); 1833 mi_print_timing_maybe (mi->raw_stdout); 1834 gdb_puts ("\n", mi->raw_stdout); 1835 } 1836 else 1837 /* The command does not want anything to be printed. In that 1838 case, the command probably should not have written anything 1839 to uiout, but in case it has written something, discard it. */ 1840 mi_out_rewind (uiout); 1841 break; 1842 1843 case CLI_COMMAND: 1844 { 1845 char *argv[2]; 1846 1847 /* A CLI command was read from the input stream. */ 1848 /* This "feature" will be removed as soon as we have a 1849 complete set of mi commands. */ 1850 /* Echo the command on the console. */ 1851 gdb_printf (gdb_stdlog, "%s\n", context->command); 1852 /* Call the "console" interpreter. */ 1853 argv[0] = (char *) INTERP_CONSOLE; 1854 argv[1] = context->command; 1855 mi_cmd_interpreter_exec ("-interpreter-exec", argv, 2); 1856 1857 /* If we changed interpreters, DON'T print out anything. */ 1858 if (current_interp_named_p (INTERP_MI) 1859 || current_interp_named_p (INTERP_MI1) 1860 || current_interp_named_p (INTERP_MI2) 1861 || current_interp_named_p (INTERP_MI3) 1862 || current_interp_named_p (INTERP_MI4)) 1863 { 1864 if (!running_result_record_printed) 1865 { 1866 gdb_puts (context->token, mi->raw_stdout); 1867 gdb_puts ("^done", mi->raw_stdout); 1868 mi_out_put (uiout, mi->raw_stdout); 1869 mi_out_rewind (uiout); 1870 mi_print_timing_maybe (mi->raw_stdout); 1871 gdb_puts ("\n", mi->raw_stdout); 1872 } 1873 else 1874 mi_out_rewind (uiout); 1875 } 1876 break; 1877 } 1878 } 1879 } 1880 1881 /* Print a gdb exception to the MI output stream. */ 1882 1883 static void 1884 mi_print_exception (const char *token, const struct gdb_exception &exception) 1885 { 1886 struct mi_interp *mi = (struct mi_interp *) current_interpreter (); 1887 1888 gdb_puts (token, mi->raw_stdout); 1889 gdb_puts ("^error,msg=\"", mi->raw_stdout); 1890 if (exception.message == NULL) 1891 gdb_puts ("unknown error", mi->raw_stdout); 1892 else 1893 mi->raw_stdout->putstr (exception.what (), '"'); 1894 gdb_puts ("\"", mi->raw_stdout); 1895 1896 switch (exception.error) 1897 { 1898 case UNDEFINED_COMMAND_ERROR: 1899 gdb_puts (",code=\"undefined-command\"", mi->raw_stdout); 1900 break; 1901 } 1902 1903 gdb_puts ("\n", mi->raw_stdout); 1904 } 1905 1906 void 1907 mi_execute_command (const char *cmd, int from_tty) 1908 { 1909 char *token; 1910 std::unique_ptr<struct mi_parse> command; 1911 1912 /* This is to handle EOF (^D). We just quit gdb. */ 1913 /* FIXME: we should call some API function here. */ 1914 if (cmd == 0) 1915 quit_force (NULL, from_tty); 1916 1917 target_log_command (cmd); 1918 1919 try 1920 { 1921 command = mi_parse (cmd, &token); 1922 } 1923 catch (const gdb_exception &exception) 1924 { 1925 mi_print_exception (token, exception); 1926 xfree (token); 1927 } 1928 1929 if (command != NULL) 1930 { 1931 command->token = token; 1932 1933 if (do_timings) 1934 { 1935 command->cmd_start = new mi_timestamp (); 1936 timestamp (command->cmd_start); 1937 } 1938 1939 try 1940 { 1941 captured_mi_execute_command (current_uiout, command.get ()); 1942 } 1943 catch (const gdb_exception &result) 1944 { 1945 /* Like in start_event_loop, enable input and force display 1946 of the prompt. Otherwise, any command that calls 1947 async_disable_stdin, and then throws, will leave input 1948 disabled. */ 1949 async_enable_stdin (); 1950 current_ui->prompt_state = PROMPT_NEEDED; 1951 1952 /* The command execution failed and error() was called 1953 somewhere. */ 1954 mi_print_exception (command->token, result); 1955 mi_out_rewind (current_uiout); 1956 } 1957 1958 bpstat_do_actions (); 1959 1960 } 1961 } 1962 1963 /* Captures the current user selected context state, that is the current 1964 thread and frame. Later we can then check if the user selected context 1965 has changed at all. */ 1966 1967 struct user_selected_context 1968 { 1969 /* Constructor. */ 1970 user_selected_context () 1971 : m_previous_ptid (inferior_ptid) 1972 { 1973 save_selected_frame (&m_previous_frame_id, &m_previous_frame_level); 1974 } 1975 1976 /* Return true if the user selected context has changed since this object 1977 was created. */ 1978 bool has_changed () const 1979 { 1980 /* Did the selected thread change? */ 1981 if (m_previous_ptid != null_ptid && inferior_ptid != null_ptid 1982 && m_previous_ptid != inferior_ptid) 1983 return true; 1984 1985 /* Grab details of the currently selected frame, for comparison. */ 1986 frame_id current_frame_id; 1987 int current_frame_level; 1988 save_selected_frame (¤t_frame_id, ¤t_frame_level); 1989 1990 /* Did the selected frame level change? */ 1991 if (current_frame_level != m_previous_frame_level) 1992 return true; 1993 1994 /* Did the selected frame id change? If the innermost frame is 1995 selected then the level will be -1, and the frame-id will be 1996 null_frame_id. As comparing null_frame_id with itself always 1997 reports not-equal, we only do the equality test if we have something 1998 other than the innermost frame selected. */ 1999 if (current_frame_level != -1 2000 && current_frame_id != m_previous_frame_id) 2001 return true; 2002 2003 /* Nothing changed! */ 2004 return false; 2005 } 2006 private: 2007 /* The previously selected thread. This might be null_ptid if there was 2008 no previously selected thread. */ 2009 ptid_t m_previous_ptid; 2010 2011 /* The previously selected frame. If the innermost frame is selected, or 2012 no frame is selected, then the frame_id will be null_frame_id, and the 2013 level will be -1. */ 2014 frame_id m_previous_frame_id; 2015 int m_previous_frame_level; 2016 }; 2017 2018 static void 2019 mi_cmd_execute (struct mi_parse *parse) 2020 { 2021 scoped_value_mark cleanup = prepare_execute_command (); 2022 2023 if (parse->all && parse->thread_group != -1) 2024 error (_("Cannot specify --thread-group together with --all")); 2025 2026 if (parse->all && parse->thread != -1) 2027 error (_("Cannot specify --thread together with --all")); 2028 2029 if (parse->thread_group != -1 && parse->thread != -1) 2030 error (_("Cannot specify --thread together with --thread-group")); 2031 2032 if (parse->frame != -1 && parse->thread == -1) 2033 error (_("Cannot specify --frame without --thread")); 2034 2035 if (parse->thread_group != -1) 2036 { 2037 struct inferior *inf = find_inferior_id (parse->thread_group); 2038 struct thread_info *tp = 0; 2039 2040 if (!inf) 2041 error (_("Invalid thread group for the --thread-group option")); 2042 2043 set_current_inferior (inf); 2044 /* This behaviour means that if --thread-group option identifies 2045 an inferior with multiple threads, then a random one will be 2046 picked. This is not a problem -- frontend should always 2047 provide --thread if it wishes to operate on a specific 2048 thread. */ 2049 if (inf->pid != 0) 2050 tp = any_live_thread_of_inferior (inf); 2051 if (tp != NULL) 2052 switch_to_thread (tp); 2053 else 2054 switch_to_no_thread (); 2055 set_current_program_space (inf->pspace); 2056 } 2057 2058 user_selected_context current_user_selected_context; 2059 2060 gdb::optional<scoped_restore_current_thread> thread_saver; 2061 if (parse->thread != -1) 2062 { 2063 thread_info *tp = find_thread_global_id (parse->thread); 2064 2065 if (tp == NULL) 2066 error (_("Invalid thread id: %d"), parse->thread); 2067 2068 if (tp->state == THREAD_EXITED) 2069 error (_("Thread id: %d has terminated"), parse->thread); 2070 2071 if (parse->cmd->preserve_user_selected_context ()) 2072 thread_saver.emplace (); 2073 2074 switch_to_thread (tp); 2075 } 2076 2077 gdb::optional<scoped_restore_selected_frame> frame_saver; 2078 if (parse->frame != -1) 2079 { 2080 frame_info_ptr fid; 2081 int frame = parse->frame; 2082 2083 fid = find_relative_frame (get_current_frame (), &frame); 2084 if (frame == 0) 2085 { 2086 if (parse->cmd->preserve_user_selected_context ()) 2087 frame_saver.emplace (); 2088 2089 select_frame (fid); 2090 } 2091 else 2092 error (_("Invalid frame id: %d"), frame); 2093 } 2094 2095 gdb::optional<scoped_restore_current_language> lang_saver; 2096 if (parse->language != language_unknown) 2097 { 2098 lang_saver.emplace (); 2099 set_language (parse->language); 2100 } 2101 2102 current_context = parse; 2103 2104 gdb_assert (parse->cmd != nullptr); 2105 2106 gdb::optional<scoped_restore_tmpl<int>> restore_suppress_notification 2107 = parse->cmd->do_suppress_notification (); 2108 2109 parse->cmd->invoke (parse); 2110 2111 if (!parse->cmd->preserve_user_selected_context () 2112 && current_user_selected_context.has_changed ()) 2113 gdb::observers::user_selected_context_changed.notify 2114 (USER_SELECTED_THREAD | USER_SELECTED_FRAME); 2115 } 2116 2117 /* See mi-main.h. */ 2118 2119 void 2120 mi_execute_cli_command (const char *cmd, bool args_p, const char *args) 2121 { 2122 if (cmd != nullptr) 2123 { 2124 std::string run (cmd); 2125 2126 if (args_p) 2127 run = run + " " + args; 2128 else 2129 gdb_assert (args == nullptr); 2130 2131 if (mi_debug_p) 2132 gdb_printf (gdb_stdlog, "cli=%s run=%s\n", 2133 cmd, run.c_str ()); 2134 2135 execute_command (run.c_str (), 0 /* from_tty */ ); 2136 } 2137 } 2138 2139 void 2140 mi_execute_async_cli_command (const char *cli_command, char **argv, int argc) 2141 { 2142 std::string run = cli_command; 2143 2144 if (argc) 2145 run = run + " " + *argv; 2146 if (mi_async_p ()) 2147 run += "&"; 2148 2149 execute_command (run.c_str (), 0 /* from_tty */ ); 2150 } 2151 2152 void 2153 mi_load_progress (const char *section_name, 2154 unsigned long sent_so_far, 2155 unsigned long total_section, 2156 unsigned long total_sent, 2157 unsigned long grand_total) 2158 { 2159 using namespace std::chrono; 2160 static steady_clock::time_point last_update; 2161 static char *previous_sect_name = NULL; 2162 int new_section; 2163 struct mi_interp *mi = (struct mi_interp *) current_interpreter (); 2164 2165 /* This function is called through deprecated_show_load_progress 2166 which means uiout may not be correct. Fix it for the duration 2167 of this function. */ 2168 2169 std::unique_ptr<ui_out> uiout (mi_out_new (current_interpreter ()->name ())); 2170 if (uiout == nullptr) 2171 return; 2172 2173 scoped_restore save_uiout 2174 = make_scoped_restore (¤t_uiout, uiout.get ()); 2175 2176 new_section = (previous_sect_name ? 2177 strcmp (previous_sect_name, section_name) : 1); 2178 if (new_section) 2179 { 2180 xfree (previous_sect_name); 2181 previous_sect_name = xstrdup (section_name); 2182 2183 if (current_token) 2184 gdb_puts (current_token, mi->raw_stdout); 2185 gdb_puts ("+download", mi->raw_stdout); 2186 { 2187 ui_out_emit_tuple tuple_emitter (uiout.get (), NULL); 2188 uiout->field_string ("section", section_name); 2189 uiout->field_signed ("section-size", total_section); 2190 uiout->field_signed ("total-size", grand_total); 2191 } 2192 mi_out_put (uiout.get (), mi->raw_stdout); 2193 gdb_puts ("\n", mi->raw_stdout); 2194 gdb_flush (mi->raw_stdout); 2195 } 2196 2197 steady_clock::time_point time_now = steady_clock::now (); 2198 if (time_now - last_update > milliseconds (500)) 2199 { 2200 last_update = time_now; 2201 if (current_token) 2202 gdb_puts (current_token, mi->raw_stdout); 2203 gdb_puts ("+download", mi->raw_stdout); 2204 { 2205 ui_out_emit_tuple tuple_emitter (uiout.get (), NULL); 2206 uiout->field_string ("section", section_name); 2207 uiout->field_signed ("section-sent", sent_so_far); 2208 uiout->field_signed ("section-size", total_section); 2209 uiout->field_signed ("total-sent", total_sent); 2210 uiout->field_signed ("total-size", grand_total); 2211 } 2212 mi_out_put (uiout.get (), mi->raw_stdout); 2213 gdb_puts ("\n", mi->raw_stdout); 2214 gdb_flush (mi->raw_stdout); 2215 } 2216 } 2217 2218 static void 2219 timestamp (struct mi_timestamp *tv) 2220 { 2221 using namespace std::chrono; 2222 2223 tv->wallclock = steady_clock::now (); 2224 run_time_clock::now (tv->utime, tv->stime); 2225 } 2226 2227 static void 2228 print_diff_now (struct ui_file *file, struct mi_timestamp *start) 2229 { 2230 struct mi_timestamp now; 2231 2232 timestamp (&now); 2233 print_diff (file, start, &now); 2234 } 2235 2236 void 2237 mi_print_timing_maybe (struct ui_file *file) 2238 { 2239 /* If the command is -enable-timing then do_timings may be true 2240 whilst current_command_ts is not initialized. */ 2241 if (do_timings && current_command_ts) 2242 print_diff_now (file, current_command_ts); 2243 } 2244 2245 static void 2246 print_diff (struct ui_file *file, struct mi_timestamp *start, 2247 struct mi_timestamp *end) 2248 { 2249 using namespace std::chrono; 2250 2251 duration<double> wallclock = end->wallclock - start->wallclock; 2252 duration<double> utime = end->utime - start->utime; 2253 duration<double> stime = end->stime - start->stime; 2254 2255 gdb_printf 2256 (file, 2257 ",time={wallclock=\"%0.5f\",user=\"%0.5f\",system=\"%0.5f\"}", 2258 wallclock.count (), utime.count (), stime.count ()); 2259 } 2260 2261 void 2262 mi_cmd_trace_define_variable (const char *command, char **argv, int argc) 2263 { 2264 LONGEST initval = 0; 2265 struct trace_state_variable *tsv; 2266 char *name = 0; 2267 2268 if (argc != 1 && argc != 2) 2269 error (_("Usage: -trace-define-variable VARIABLE [VALUE]")); 2270 2271 name = argv[0]; 2272 if (*name++ != '$') 2273 error (_("Name of trace variable should start with '$'")); 2274 2275 validate_trace_state_variable_name (name); 2276 2277 tsv = find_trace_state_variable (name); 2278 if (!tsv) 2279 tsv = create_trace_state_variable (name); 2280 2281 if (argc == 2) 2282 initval = value_as_long (parse_and_eval (argv[1])); 2283 2284 tsv->initial_value = initval; 2285 } 2286 2287 void 2288 mi_cmd_trace_list_variables (const char *command, char **argv, int argc) 2289 { 2290 if (argc != 0) 2291 error (_("-trace-list-variables: no arguments allowed")); 2292 2293 tvariables_info_1 (); 2294 } 2295 2296 void 2297 mi_cmd_trace_find (const char *command, char **argv, int argc) 2298 { 2299 char *mode; 2300 2301 if (argc == 0) 2302 error (_("trace selection mode is required")); 2303 2304 mode = argv[0]; 2305 2306 if (strcmp (mode, "none") == 0) 2307 { 2308 tfind_1 (tfind_number, -1, 0, 0, 0); 2309 return; 2310 } 2311 2312 check_trace_running (current_trace_status ()); 2313 2314 if (strcmp (mode, "frame-number") == 0) 2315 { 2316 if (argc != 2) 2317 error (_("frame number is required")); 2318 tfind_1 (tfind_number, atoi (argv[1]), 0, 0, 0); 2319 } 2320 else if (strcmp (mode, "tracepoint-number") == 0) 2321 { 2322 if (argc != 2) 2323 error (_("tracepoint number is required")); 2324 tfind_1 (tfind_tp, atoi (argv[1]), 0, 0, 0); 2325 } 2326 else if (strcmp (mode, "pc") == 0) 2327 { 2328 if (argc != 2) 2329 error (_("PC is required")); 2330 tfind_1 (tfind_pc, 0, parse_and_eval_address (argv[1]), 0, 0); 2331 } 2332 else if (strcmp (mode, "pc-inside-range") == 0) 2333 { 2334 if (argc != 3) 2335 error (_("Start and end PC are required")); 2336 tfind_1 (tfind_range, 0, parse_and_eval_address (argv[1]), 2337 parse_and_eval_address (argv[2]), 0); 2338 } 2339 else if (strcmp (mode, "pc-outside-range") == 0) 2340 { 2341 if (argc != 3) 2342 error (_("Start and end PC are required")); 2343 tfind_1 (tfind_outside, 0, parse_and_eval_address (argv[1]), 2344 parse_and_eval_address (argv[2]), 0); 2345 } 2346 else if (strcmp (mode, "line") == 0) 2347 { 2348 if (argc != 2) 2349 error (_("Line is required")); 2350 2351 std::vector<symtab_and_line> sals 2352 = decode_line_with_current_source (argv[1], 2353 DECODE_LINE_FUNFIRSTLINE); 2354 const symtab_and_line &sal = sals[0]; 2355 2356 if (sal.symtab == 0) 2357 error (_("Could not find the specified line")); 2358 2359 CORE_ADDR start_pc, end_pc; 2360 if (sal.line > 0 && find_line_pc_range (sal, &start_pc, &end_pc)) 2361 tfind_1 (tfind_range, 0, start_pc, end_pc - 1, 0); 2362 else 2363 error (_("Could not find the specified line")); 2364 } 2365 else 2366 error (_("Invalid mode '%s'"), mode); 2367 2368 if (has_stack_frames () || get_traceframe_number () >= 0) 2369 print_stack_frame (get_selected_frame (NULL), 1, LOC_AND_ADDRESS, 1); 2370 } 2371 2372 void 2373 mi_cmd_trace_save (const char *command, char **argv, int argc) 2374 { 2375 int target_saves = 0; 2376 int generate_ctf = 0; 2377 char *filename; 2378 int oind = 0; 2379 char *oarg; 2380 2381 enum opt 2382 { 2383 TARGET_SAVE_OPT, CTF_OPT 2384 }; 2385 static const struct mi_opt opts[] = 2386 { 2387 {"r", TARGET_SAVE_OPT, 0}, 2388 {"ctf", CTF_OPT, 0}, 2389 { 0, 0, 0 } 2390 }; 2391 2392 while (1) 2393 { 2394 int opt = mi_getopt ("-trace-save", argc, argv, opts, 2395 &oind, &oarg); 2396 2397 if (opt < 0) 2398 break; 2399 switch ((enum opt) opt) 2400 { 2401 case TARGET_SAVE_OPT: 2402 target_saves = 1; 2403 break; 2404 case CTF_OPT: 2405 generate_ctf = 1; 2406 break; 2407 } 2408 } 2409 2410 if (argc - oind != 1) 2411 error (_("Exactly one argument required " 2412 "(file in which to save trace data)")); 2413 2414 filename = argv[oind]; 2415 2416 if (generate_ctf) 2417 trace_save_ctf (filename, target_saves); 2418 else 2419 trace_save_tfile (filename, target_saves); 2420 } 2421 2422 void 2423 mi_cmd_trace_start (const char *command, char **argv, int argc) 2424 { 2425 start_tracing (NULL); 2426 } 2427 2428 void 2429 mi_cmd_trace_status (const char *command, char **argv, int argc) 2430 { 2431 trace_status_mi (0); 2432 } 2433 2434 void 2435 mi_cmd_trace_stop (const char *command, char **argv, int argc) 2436 { 2437 stop_tracing (NULL); 2438 trace_status_mi (1); 2439 } 2440 2441 /* Implement the "-ada-task-info" command. */ 2442 2443 void 2444 mi_cmd_ada_task_info (const char *command, char **argv, int argc) 2445 { 2446 if (argc != 0 && argc != 1) 2447 error (_("Invalid MI command")); 2448 2449 print_ada_task_info (current_uiout, argv[0], current_inferior ()); 2450 } 2451 2452 /* Print EXPRESSION according to VALUES. */ 2453 2454 static void 2455 print_variable_or_computed (const char *expression, enum print_values values) 2456 { 2457 struct value *val; 2458 struct type *type; 2459 struct ui_out *uiout = current_uiout; 2460 2461 string_file stb; 2462 2463 expression_up expr = parse_expression (expression); 2464 2465 if (values == PRINT_SIMPLE_VALUES) 2466 val = evaluate_type (expr.get ()); 2467 else 2468 val = evaluate_expression (expr.get ()); 2469 2470 gdb::optional<ui_out_emit_tuple> tuple_emitter; 2471 if (values != PRINT_NO_VALUES) 2472 tuple_emitter.emplace (uiout, nullptr); 2473 uiout->field_string ("name", expression); 2474 2475 switch (values) 2476 { 2477 case PRINT_SIMPLE_VALUES: 2478 type = check_typedef (value_type (val)); 2479 type_print (value_type (val), "", &stb, -1); 2480 uiout->field_stream ("type", stb); 2481 if (type->code () != TYPE_CODE_ARRAY 2482 && type->code () != TYPE_CODE_STRUCT 2483 && type->code () != TYPE_CODE_UNION) 2484 { 2485 struct value_print_options opts; 2486 2487 get_no_prettyformat_print_options (&opts); 2488 opts.deref_ref = 1; 2489 common_val_print (val, &stb, 0, &opts, current_language); 2490 uiout->field_stream ("value", stb); 2491 } 2492 break; 2493 case PRINT_ALL_VALUES: 2494 { 2495 struct value_print_options opts; 2496 2497 get_no_prettyformat_print_options (&opts); 2498 opts.deref_ref = 1; 2499 common_val_print (val, &stb, 0, &opts, current_language); 2500 uiout->field_stream ("value", stb); 2501 } 2502 break; 2503 } 2504 } 2505 2506 /* Implement the "-trace-frame-collected" command. */ 2507 2508 void 2509 mi_cmd_trace_frame_collected (const char *command, char **argv, int argc) 2510 { 2511 struct bp_location *tloc; 2512 int stepping_frame; 2513 struct collection_list *clist; 2514 struct collection_list tracepoint_list, stepping_list; 2515 struct traceframe_info *tinfo; 2516 int oind = 0; 2517 enum print_values var_print_values = PRINT_ALL_VALUES; 2518 enum print_values comp_print_values = PRINT_ALL_VALUES; 2519 int registers_format = 'x'; 2520 int memory_contents = 0; 2521 struct ui_out *uiout = current_uiout; 2522 enum opt 2523 { 2524 VAR_PRINT_VALUES, 2525 COMP_PRINT_VALUES, 2526 REGISTERS_FORMAT, 2527 MEMORY_CONTENTS, 2528 }; 2529 static const struct mi_opt opts[] = 2530 { 2531 {"-var-print-values", VAR_PRINT_VALUES, 1}, 2532 {"-comp-print-values", COMP_PRINT_VALUES, 1}, 2533 {"-registers-format", REGISTERS_FORMAT, 1}, 2534 {"-memory-contents", MEMORY_CONTENTS, 0}, 2535 { 0, 0, 0 } 2536 }; 2537 2538 while (1) 2539 { 2540 char *oarg; 2541 int opt = mi_getopt ("-trace-frame-collected", argc, argv, opts, 2542 &oind, &oarg); 2543 if (opt < 0) 2544 break; 2545 switch ((enum opt) opt) 2546 { 2547 case VAR_PRINT_VALUES: 2548 var_print_values = mi_parse_print_values (oarg); 2549 break; 2550 case COMP_PRINT_VALUES: 2551 comp_print_values = mi_parse_print_values (oarg); 2552 break; 2553 case REGISTERS_FORMAT: 2554 registers_format = oarg[0]; 2555 break; 2556 case MEMORY_CONTENTS: 2557 memory_contents = 1; 2558 break; 2559 } 2560 } 2561 2562 if (oind != argc) 2563 error (_("Usage: -trace-frame-collected " 2564 "[--var-print-values PRINT_VALUES] " 2565 "[--comp-print-values PRINT_VALUES] " 2566 "[--registers-format FORMAT]" 2567 "[--memory-contents]")); 2568 2569 /* This throws an error is not inspecting a trace frame. */ 2570 tloc = get_traceframe_location (&stepping_frame); 2571 2572 /* This command only makes sense for the current frame, not the 2573 selected frame. */ 2574 scoped_restore_current_thread restore_thread; 2575 select_frame (get_current_frame ()); 2576 2577 encode_actions (tloc, &tracepoint_list, &stepping_list); 2578 2579 if (stepping_frame) 2580 clist = &stepping_list; 2581 else 2582 clist = &tracepoint_list; 2583 2584 tinfo = get_traceframe_info (); 2585 2586 /* Explicitly wholly collected variables. */ 2587 { 2588 ui_out_emit_list list_emitter (uiout, "explicit-variables"); 2589 const std::vector<std::string> &wholly_collected 2590 = clist->wholly_collected (); 2591 for (size_t i = 0; i < wholly_collected.size (); i++) 2592 { 2593 const std::string &str = wholly_collected[i]; 2594 print_variable_or_computed (str.c_str (), var_print_values); 2595 } 2596 } 2597 2598 /* Computed expressions. */ 2599 { 2600 ui_out_emit_list list_emitter (uiout, "computed-expressions"); 2601 2602 const std::vector<std::string> &computed = clist->computed (); 2603 for (size_t i = 0; i < computed.size (); i++) 2604 { 2605 const std::string &str = computed[i]; 2606 print_variable_or_computed (str.c_str (), comp_print_values); 2607 } 2608 } 2609 2610 /* Registers. Given pseudo-registers, and that some architectures 2611 (like MIPS) actually hide the raw registers, we don't go through 2612 the trace frame info, but instead consult the register cache for 2613 register availability. */ 2614 { 2615 frame_info_ptr frame; 2616 struct gdbarch *gdbarch; 2617 int regnum; 2618 int numregs; 2619 2620 ui_out_emit_list list_emitter (uiout, "registers"); 2621 2622 frame = get_selected_frame (NULL); 2623 gdbarch = get_frame_arch (frame); 2624 numregs = gdbarch_num_cooked_regs (gdbarch); 2625 2626 for (regnum = 0; regnum < numregs; regnum++) 2627 { 2628 if (*(gdbarch_register_name (gdbarch, regnum)) == '\0') 2629 continue; 2630 2631 output_register (frame, regnum, registers_format, 1); 2632 } 2633 } 2634 2635 /* Trace state variables. */ 2636 { 2637 ui_out_emit_list list_emitter (uiout, "tvars"); 2638 2639 for (int tvar : tinfo->tvars) 2640 { 2641 struct trace_state_variable *tsv; 2642 2643 tsv = find_trace_state_variable_by_number (tvar); 2644 2645 ui_out_emit_tuple tuple_emitter (uiout, NULL); 2646 2647 if (tsv != NULL) 2648 { 2649 uiout->field_fmt ("name", "$%s", tsv->name.c_str ()); 2650 2651 tsv->value_known = target_get_trace_state_variable_value (tsv->number, 2652 &tsv->value); 2653 uiout->field_signed ("current", tsv->value); 2654 } 2655 else 2656 { 2657 uiout->field_skip ("name"); 2658 uiout->field_skip ("current"); 2659 } 2660 } 2661 } 2662 2663 /* Memory. */ 2664 { 2665 std::vector<mem_range> available_memory; 2666 2667 traceframe_available_memory (&available_memory, 0, ULONGEST_MAX); 2668 2669 ui_out_emit_list list_emitter (uiout, "memory"); 2670 2671 for (const mem_range &r : available_memory) 2672 { 2673 struct gdbarch *gdbarch = target_gdbarch (); 2674 2675 ui_out_emit_tuple tuple_emitter (uiout, NULL); 2676 2677 uiout->field_core_addr ("address", gdbarch, r.start); 2678 uiout->field_signed ("length", r.length); 2679 2680 gdb::byte_vector data (r.length); 2681 2682 if (memory_contents) 2683 { 2684 if (target_read_memory (r.start, data.data (), r.length) == 0) 2685 { 2686 std::string data_str = bin2hex (data.data (), r.length); 2687 uiout->field_string ("contents", data_str); 2688 } 2689 else 2690 uiout->field_skip ("contents"); 2691 } 2692 } 2693 } 2694 } 2695 2696 /* See mi/mi-main.h. */ 2697 2698 void 2699 mi_cmd_fix_multi_location_breakpoint_output (const char *command, char **argv, 2700 int argc) 2701 { 2702 fix_multi_location_breakpoint_output_globally = true; 2703 } 2704 2705 /* See mi/mi-main.h. */ 2706 2707 void 2708 mi_cmd_fix_breakpoint_script_output (const char *command, char **argv, int argc) 2709 { 2710 fix_breakpoint_script_output_globally = true; 2711 } 2712 2713 /* Implement the "-complete" command. */ 2714 2715 void 2716 mi_cmd_complete (const char *command, char **argv, int argc) 2717 { 2718 if (argc != 1) 2719 error (_("Usage: -complete COMMAND")); 2720 2721 if (max_completions == 0) 2722 error (_("max-completions is zero, completion is disabled.")); 2723 2724 int quote_char = '\0'; 2725 const char *word; 2726 2727 completion_result result = complete (argv[0], &word, "e_char); 2728 2729 std::string arg_prefix (argv[0], word - argv[0]); 2730 2731 struct ui_out *uiout = current_uiout; 2732 2733 if (result.number_matches > 0) 2734 uiout->field_fmt ("completion", "%s%s", 2735 arg_prefix.c_str (),result.match_list[0]); 2736 2737 { 2738 ui_out_emit_list completions_emitter (uiout, "matches"); 2739 2740 if (result.number_matches == 1) 2741 uiout->field_fmt (NULL, "%s%s", 2742 arg_prefix.c_str (), result.match_list[0]); 2743 else 2744 { 2745 result.sort_match_list (); 2746 for (size_t i = 0; i < result.number_matches; i++) 2747 { 2748 uiout->field_fmt (NULL, "%s%s", 2749 arg_prefix.c_str (), result.match_list[i + 1]); 2750 } 2751 } 2752 } 2753 uiout->field_string ("max_completions_reached", 2754 result.number_matches == max_completions ? "1" : "0"); 2755 } 2756 2757 2758 void _initialize_mi_main (); 2759 void 2760 _initialize_mi_main () 2761 { 2762 set_show_commands mi_async_cmds 2763 = add_setshow_boolean_cmd ("mi-async", class_run, 2764 &mi_async_1, _("\ 2765 Set whether MI asynchronous mode is enabled."), _("\ 2766 Show whether MI asynchronous mode is enabled."), _("\ 2767 Tells GDB whether MI should be in asynchronous mode."), 2768 set_mi_async_command, 2769 show_mi_async_command, 2770 &setlist, &showlist); 2771 2772 /* Alias old "target-async" to "mi-async". */ 2773 cmd_list_element *set_target_async_cmd 2774 = add_alias_cmd ("target-async", mi_async_cmds.set, class_run, 0, &setlist); 2775 deprecate_cmd (set_target_async_cmd, "set mi-async"); 2776 2777 cmd_list_element *show_target_async_cmd 2778 = add_alias_cmd ("target-async", mi_async_cmds.show, class_run, 0, 2779 &showlist); 2780 deprecate_cmd (show_target_async_cmd, "show mi-async"); 2781 } 2782