1 /* General Compile and inject code 2 3 Copyright (C) 2014-2023 Free Software Foundation, Inc. 4 5 This file is part of GDB. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 #include "defs.h" 21 #include "top.h" 22 #include "ui-out.h" 23 #include "command.h" 24 #include "cli/cli-script.h" 25 #include "cli/cli-utils.h" 26 #include "cli/cli-option.h" 27 #include "completer.h" 28 #include "gdbcmd.h" 29 #include "compile.h" 30 #include "compile-internal.h" 31 #include "compile-object-load.h" 32 #include "compile-object-run.h" 33 #include "language.h" 34 #include "frame.h" 35 #include "source.h" 36 #include "block.h" 37 #include "arch-utils.h" 38 #include "gdbsupport/filestuff.h" 39 #include "target.h" 40 #include "osabi.h" 41 #include "gdbsupport/gdb_wait.h" 42 #include "valprint.h" 43 #include "gdbsupport/gdb_optional.h" 44 #include "gdbsupport/gdb_unlinker.h" 45 #include "gdbsupport/pathstuff.h" 46 #include "gdbsupport/scoped_ignore_signal.h" 47 #include "gdbsupport/buildargv.h" 48 49 50 51 /* Initial filename for temporary files. */ 52 53 #define TMP_PREFIX "/tmp/gdbobj-" 54 55 /* Hold "compile" commands. */ 56 57 static struct cmd_list_element *compile_command_list; 58 59 /* Debug flag for "compile" commands. */ 60 61 bool compile_debug; 62 63 /* Object of this type are stored in the compiler's symbol_err_map. */ 64 65 struct symbol_error 66 { 67 /* The symbol. */ 68 69 const struct symbol *sym; 70 71 /* The error message to emit. This is malloc'd and owned by the 72 hash table. */ 73 74 char *message; 75 }; 76 77 /* Hash a type_map_instance. */ 78 79 static hashval_t 80 hash_type_map_instance (const void *p) 81 { 82 const struct type_map_instance *inst = (const struct type_map_instance *) p; 83 84 return htab_hash_pointer (inst->type); 85 } 86 87 /* Check two type_map_instance objects for equality. */ 88 89 static int 90 eq_type_map_instance (const void *a, const void *b) 91 { 92 const struct type_map_instance *insta = (const struct type_map_instance *) a; 93 const struct type_map_instance *instb = (const struct type_map_instance *) b; 94 95 return insta->type == instb->type; 96 } 97 98 /* Hash function for struct symbol_error. */ 99 100 static hashval_t 101 hash_symbol_error (const void *a) 102 { 103 const struct symbol_error *se = (const struct symbol_error *) a; 104 105 return htab_hash_pointer (se->sym); 106 } 107 108 /* Equality function for struct symbol_error. */ 109 110 static int 111 eq_symbol_error (const void *a, const void *b) 112 { 113 const struct symbol_error *sea = (const struct symbol_error *) a; 114 const struct symbol_error *seb = (const struct symbol_error *) b; 115 116 return sea->sym == seb->sym; 117 } 118 119 /* Deletion function for struct symbol_error. */ 120 121 static void 122 del_symbol_error (void *a) 123 { 124 struct symbol_error *se = (struct symbol_error *) a; 125 126 xfree (se->message); 127 xfree (se); 128 } 129 130 /* Constructor for compile_instance. */ 131 132 compile_instance::compile_instance (struct gcc_base_context *gcc_fe, 133 const char *options) 134 : m_gcc_fe (gcc_fe), m_gcc_target_options (options), 135 m_type_map (htab_create_alloc (10, hash_type_map_instance, 136 eq_type_map_instance, 137 xfree, xcalloc, xfree)), 138 m_symbol_err_map (htab_create_alloc (10, hash_symbol_error, 139 eq_symbol_error, del_symbol_error, 140 xcalloc, xfree)) 141 { 142 } 143 144 /* See compile-internal.h. */ 145 146 bool 147 compile_instance::get_cached_type (struct type *type, gcc_type *ret) const 148 { 149 struct type_map_instance inst, *found; 150 151 inst.type = type; 152 found = (struct type_map_instance *) htab_find (m_type_map.get (), &inst); 153 if (found != NULL) 154 { 155 *ret = found->gcc_type_handle; 156 return true; 157 } 158 159 return false; 160 } 161 162 /* See compile-internal.h. */ 163 164 void 165 compile_instance::insert_type (struct type *type, gcc_type gcc_type) 166 { 167 struct type_map_instance inst, *add; 168 void **slot; 169 170 inst.type = type; 171 inst.gcc_type_handle = gcc_type; 172 slot = htab_find_slot (m_type_map.get (), &inst, INSERT); 173 174 add = (struct type_map_instance *) *slot; 175 /* The type might have already been inserted in order to handle 176 recursive types. */ 177 if (add != NULL && add->gcc_type_handle != gcc_type) 178 error (_("Unexpected type id from GCC, check you use recent enough GCC.")); 179 180 if (add == NULL) 181 { 182 add = XNEW (struct type_map_instance); 183 *add = inst; 184 *slot = add; 185 } 186 } 187 188 /* See compile-internal.h. */ 189 190 void 191 compile_instance::insert_symbol_error (const struct symbol *sym, 192 const char *text) 193 { 194 struct symbol_error e; 195 void **slot; 196 197 e.sym = sym; 198 slot = htab_find_slot (m_symbol_err_map.get (), &e, INSERT); 199 if (*slot == NULL) 200 { 201 struct symbol_error *ep = XNEW (struct symbol_error); 202 203 ep->sym = sym; 204 ep->message = xstrdup (text); 205 *slot = ep; 206 } 207 } 208 209 /* See compile-internal.h. */ 210 211 void 212 compile_instance::error_symbol_once (const struct symbol *sym) 213 { 214 struct symbol_error search; 215 struct symbol_error *err; 216 217 if (m_symbol_err_map == NULL) 218 return; 219 220 search.sym = sym; 221 err = (struct symbol_error *) htab_find (m_symbol_err_map.get (), &search); 222 if (err == NULL || err->message == NULL) 223 return; 224 225 gdb::unique_xmalloc_ptr<char> message (err->message); 226 err->message = NULL; 227 error (_("%s"), message.get ()); 228 } 229 230 /* Implement "show debug compile". */ 231 232 static void 233 show_compile_debug (struct ui_file *file, int from_tty, 234 struct cmd_list_element *c, const char *value) 235 { 236 gdb_printf (file, _("Compile debugging is %s.\n"), value); 237 } 238 239 240 241 /* Options for the compile command. */ 242 243 struct compile_options 244 { 245 /* For -raw. */ 246 bool raw = false; 247 }; 248 249 using compile_flag_option_def 250 = gdb::option::flag_option_def<compile_options>; 251 252 static const gdb::option::option_def compile_command_option_defs[] = { 253 254 compile_flag_option_def { 255 "raw", 256 [] (compile_options *opts) { return &opts->raw; }, 257 N_("Suppress automatic 'void _gdb_expr () { CODE }' wrapping."), 258 }, 259 260 }; 261 262 /* Create an option_def_group for the "compile" command's options, 263 with OPTS as context. */ 264 265 static gdb::option::option_def_group 266 make_compile_options_def_group (compile_options *opts) 267 { 268 return {{compile_command_option_defs}, opts}; 269 } 270 271 /* Handle the input from the 'compile file' command. The "compile 272 file" command is used to evaluate an expression contained in a file 273 that may contain calls to the GCC compiler. */ 274 275 static void 276 compile_file_command (const char *args, int from_tty) 277 { 278 scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0); 279 280 /* Check if a -raw option is provided. */ 281 282 compile_options options; 283 284 const gdb::option::option_def_group group 285 = make_compile_options_def_group (&options); 286 gdb::option::process_options 287 (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, 288 group); 289 290 enum compile_i_scope_types scope 291 = options.raw ? COMPILE_I_RAW_SCOPE : COMPILE_I_SIMPLE_SCOPE; 292 293 args = skip_spaces (args); 294 295 /* After processing options, check whether we have a filename. */ 296 if (args == nullptr || args[0] == '\0') 297 error (_("You must provide a filename for this command.")); 298 299 args = skip_spaces (args); 300 std::string abspath = gdb_abspath (args); 301 std::string buffer = string_printf ("#include \"%s\"\n", abspath.c_str ()); 302 eval_compile_command (NULL, buffer.c_str (), scope, NULL); 303 } 304 305 /* Completer for the "compile file" command. */ 306 307 static void 308 compile_file_command_completer (struct cmd_list_element *ignore, 309 completion_tracker &tracker, 310 const char *text, const char *word) 311 { 312 const gdb::option::option_def_group group 313 = make_compile_options_def_group (nullptr); 314 if (gdb::option::complete_options 315 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, group)) 316 return; 317 318 word = advance_to_filename_complete_word_point (tracker, text); 319 filename_completer (ignore, tracker, text, word); 320 } 321 322 /* Handle the input from the 'compile code' command. The 323 "compile code" command is used to evaluate an expression that may 324 contain calls to the GCC compiler. The language expected in this 325 compile command is the language currently set in GDB. */ 326 327 static void 328 compile_code_command (const char *args, int from_tty) 329 { 330 scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0); 331 332 compile_options options; 333 334 const gdb::option::option_def_group group 335 = make_compile_options_def_group (&options); 336 gdb::option::process_options 337 (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, group); 338 339 enum compile_i_scope_types scope 340 = options.raw ? COMPILE_I_RAW_SCOPE : COMPILE_I_SIMPLE_SCOPE; 341 342 if (args && *args) 343 eval_compile_command (NULL, args, scope, NULL); 344 else 345 { 346 counted_command_line l = get_command_line (compile_control, ""); 347 348 l->control_u.compile.scope = scope; 349 execute_control_command_untraced (l.get ()); 350 } 351 } 352 353 /* Completer for the "compile code" command. */ 354 355 static void 356 compile_code_command_completer (struct cmd_list_element *ignore, 357 completion_tracker &tracker, 358 const char *text, const char *word) 359 { 360 const gdb::option::option_def_group group 361 = make_compile_options_def_group (nullptr); 362 if (gdb::option::complete_options 363 (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR, group)) 364 return; 365 366 word = advance_to_expression_complete_word_point (tracker, text); 367 symbol_completer (ignore, tracker, text, word); 368 } 369 370 /* Callback for compile_print_command. */ 371 372 void 373 compile_print_value (struct value *val, void *data_voidp) 374 { 375 const value_print_options *print_opts = (value_print_options *) data_voidp; 376 377 print_value (val, *print_opts); 378 } 379 380 /* Handle the input from the 'compile print' command. The "compile 381 print" command is used to evaluate and print an expression that may 382 contain calls to the GCC compiler. The language expected in this 383 compile command is the language currently set in GDB. */ 384 385 static void 386 compile_print_command (const char *arg, int from_tty) 387 { 388 enum compile_i_scope_types scope = COMPILE_I_PRINT_ADDRESS_SCOPE; 389 value_print_options print_opts; 390 391 scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0); 392 393 get_user_print_options (&print_opts); 394 /* Override global settings with explicit options, if any. */ 395 auto group = make_value_print_options_def_group (&print_opts); 396 gdb::option::process_options 397 (&arg, gdb::option::PROCESS_OPTIONS_REQUIRE_DELIMITER, group); 398 399 print_command_parse_format (&arg, "compile print", &print_opts); 400 401 /* Passing &PRINT_OPTS as SCOPE_DATA is safe as do_module_cleanup 402 will not touch the stale pointer if compile_object_run has 403 already quit. */ 404 405 if (arg && *arg) 406 eval_compile_command (NULL, arg, scope, &print_opts); 407 else 408 { 409 counted_command_line l = get_command_line (compile_control, ""); 410 411 l->control_u.compile.scope = scope; 412 l->control_u.compile.scope_data = &print_opts; 413 execute_control_command_untraced (l.get ()); 414 } 415 } 416 417 /* A cleanup function to remove a directory and all its contents. */ 418 419 static void 420 do_rmdir (void *arg) 421 { 422 const char *dir = (const char *) arg; 423 char *zap; 424 int wstat; 425 426 gdb_assert (startswith (dir, TMP_PREFIX)); 427 zap = concat ("rm -rf ", dir, (char *) NULL); 428 wstat = system (zap); 429 if (wstat == -1 || !WIFEXITED (wstat) || WEXITSTATUS (wstat) != 0) 430 warning (_("Could not remove temporary directory %s"), dir); 431 XDELETEVEC (zap); 432 } 433 434 /* Return the name of the temporary directory to use for .o files, and 435 arrange for the directory to be removed at shutdown. */ 436 437 static const char * 438 get_compile_file_tempdir (void) 439 { 440 static char *tempdir_name; 441 442 #define TEMPLATE TMP_PREFIX "XXXXXX" 443 char tname[sizeof (TEMPLATE)]; 444 445 if (tempdir_name != NULL) 446 return tempdir_name; 447 448 strcpy (tname, TEMPLATE); 449 #undef TEMPLATE 450 tempdir_name = mkdtemp (tname); 451 if (tempdir_name == NULL) 452 perror_with_name (_("Could not make temporary directory")); 453 454 tempdir_name = xstrdup (tempdir_name); 455 make_final_cleanup (do_rmdir, tempdir_name); 456 return tempdir_name; 457 } 458 459 /* Compute the names of source and object files to use. */ 460 461 static compile_file_names 462 get_new_file_names () 463 { 464 static int seq; 465 const char *dir = get_compile_file_tempdir (); 466 467 ++seq; 468 469 return compile_file_names (string_printf ("%s%sout%d.c", 470 dir, SLASH_STRING, seq), 471 string_printf ("%s%sout%d.o", 472 dir, SLASH_STRING, seq)); 473 } 474 475 /* Get the block and PC at which to evaluate an expression. */ 476 477 static const struct block * 478 get_expr_block_and_pc (CORE_ADDR *pc) 479 { 480 const struct block *block = get_selected_block (pc); 481 482 if (block == NULL) 483 { 484 struct symtab_and_line cursal = get_current_source_symtab_and_line (); 485 486 if (cursal.symtab) 487 block = cursal.symtab->compunit ()->blockvector ()->static_block (); 488 489 if (block != NULL) 490 *pc = block->entry_pc (); 491 } 492 else 493 *pc = block->entry_pc (); 494 495 return block; 496 } 497 498 /* String for 'set compile-args' and 'show compile-args'. */ 499 static std::string compile_args = 500 /* Override flags possibly coming from DW_AT_producer. */ 501 "-O0 -gdwarf-4" 502 /* We use -fPIE Otherwise GDB would need to reserve space large enough for 503 any object file in the inferior in advance to get the final address when 504 to link the object file to and additionally the default system linker 505 script would need to be modified so that one can specify there the 506 absolute target address. 507 -fPIC is not used at is would require from GDB to generate .got. */ 508 " -fPIE" 509 /* We want warnings, except for some commonly happening for GDB commands. */ 510 " -Wall " 511 " -Wno-unused-but-set-variable" 512 " -Wno-unused-variable" 513 /* Override CU's possible -fstack-protector-strong. */ 514 " -fno-stack-protector"; 515 516 /* Parsed form of COMPILE_ARGS. */ 517 static gdb_argv compile_args_argv; 518 519 /* Implement 'set compile-args'. */ 520 521 static void 522 set_compile_args (const char *args, int from_tty, struct cmd_list_element *c) 523 { 524 compile_args_argv = gdb_argv (compile_args.c_str ()); 525 } 526 527 /* Implement 'show compile-args'. */ 528 529 static void 530 show_compile_args (struct ui_file *file, int from_tty, 531 struct cmd_list_element *c, const char *value) 532 { 533 gdb_printf (file, _("Compile command command-line arguments " 534 "are \"%s\".\n"), 535 value); 536 } 537 538 /* String for 'set compile-gcc' and 'show compile-gcc'. */ 539 static std::string compile_gcc; 540 541 /* Implement 'show compile-gcc'. */ 542 543 static void 544 show_compile_gcc (struct ui_file *file, int from_tty, 545 struct cmd_list_element *c, const char *value) 546 { 547 gdb_printf (file, _("Compile command GCC driver filename is \"%s\".\n"), 548 value); 549 } 550 551 /* Return DW_AT_producer parsed for get_selected_frame () (if any). 552 Return NULL otherwise. 553 554 GCC already filters its command-line arguments only for the suitable ones to 555 put into DW_AT_producer - see GCC function gen_producer_string. */ 556 557 static const char * 558 get_selected_pc_producer_options (void) 559 { 560 CORE_ADDR pc = get_frame_pc (get_selected_frame (NULL)); 561 struct compunit_symtab *symtab = find_pc_compunit_symtab (pc); 562 const char *cs; 563 564 if (symtab == NULL || symtab->producer () == NULL 565 || !startswith (symtab->producer (), "GNU ")) 566 return NULL; 567 568 cs = symtab->producer (); 569 while (*cs != 0 && *cs != '-') 570 cs = skip_spaces (skip_to_space (cs)); 571 if (*cs != '-') 572 return NULL; 573 return cs; 574 } 575 576 /* Filter out unwanted options from ARGV. */ 577 578 static void 579 filter_args (char **argv) 580 { 581 char **destv; 582 583 for (destv = argv; *argv != NULL; argv++) 584 { 585 /* -fpreprocessed may get in commonly from ccache. */ 586 if (strcmp (*argv, "-fpreprocessed") == 0) 587 { 588 xfree (*argv); 589 continue; 590 } 591 *destv++ = *argv; 592 } 593 *destv = NULL; 594 } 595 596 /* Produce final vector of GCC compilation options. 597 598 The first element of the combined argument vector are arguments 599 relating to the target size ("-m64", "-m32" etc.). These are 600 sourced from the inferior's architecture. 601 602 The second element of the combined argument vector are arguments 603 stored in the inferior DW_AT_producer section. If these are stored 604 in the inferior (there is no guarantee that they are), they are 605 added to the vector. 606 607 The third element of the combined argument vector are argument 608 supplied by the language implementation provided by 609 compile-{lang}-support. These contain language specific arguments. 610 611 The final element of the combined argument vector are arguments 612 supplied by the "set compile-args" command. These are always 613 appended last so as to override any of the arguments automatically 614 generated above. */ 615 616 static gdb_argv 617 get_args (const compile_instance *compiler, struct gdbarch *gdbarch) 618 { 619 const char *cs_producer_options; 620 gdb_argv result; 621 622 std::string gcc_options = gdbarch_gcc_target_options (gdbarch); 623 624 /* Make sure we have a non-empty set of options, otherwise GCC will 625 error out trying to look for a filename that is an empty string. */ 626 if (!gcc_options.empty ()) 627 result = gdb_argv (gcc_options.c_str ()); 628 629 cs_producer_options = get_selected_pc_producer_options (); 630 if (cs_producer_options != NULL) 631 { 632 gdb_argv argv_producer (cs_producer_options); 633 filter_args (argv_producer.get ()); 634 635 result.append (std::move (argv_producer)); 636 } 637 638 result.append (gdb_argv (compiler->gcc_target_options ().c_str ())); 639 result.append (compile_args_argv); 640 641 return result; 642 } 643 644 /* A helper function suitable for use as the "print_callback" in the 645 compiler object. */ 646 647 static void 648 print_callback (void *ignore, const char *message) 649 { 650 gdb_puts (message, gdb_stderr); 651 } 652 653 /* Process the compilation request. On success it returns the object 654 and source file names. On an error condition, error () is 655 called. */ 656 657 static compile_file_names 658 compile_to_object (struct command_line *cmd, const char *cmd_string, 659 enum compile_i_scope_types scope) 660 { 661 const struct block *expr_block; 662 CORE_ADDR trash_pc, expr_pc; 663 int ok; 664 struct gdbarch *gdbarch = get_current_arch (); 665 std::string triplet_rx; 666 667 if (!target_has_execution ()) 668 error (_("The program must be running for the compile command to "\ 669 "work.")); 670 671 expr_block = get_expr_block_and_pc (&trash_pc); 672 expr_pc = get_frame_address_in_block (get_selected_frame (NULL)); 673 674 /* Set up instance and context for the compiler. */ 675 std::unique_ptr<compile_instance> compiler 676 = current_language->get_compile_instance (); 677 if (compiler == nullptr) 678 error (_("No compiler support for language %s."), 679 current_language->name ()); 680 compiler->set_print_callback (print_callback, NULL); 681 compiler->set_scope (scope); 682 compiler->set_block (expr_block); 683 684 /* From the provided expression, build a scope to pass to the 685 compiler. */ 686 687 string_file input_buf; 688 const char *input; 689 690 if (cmd != NULL) 691 { 692 struct command_line *iter; 693 694 for (iter = cmd->body_list_0.get (); iter; iter = iter->next) 695 { 696 input_buf.puts (iter->line); 697 input_buf.puts ("\n"); 698 } 699 700 input = input_buf.c_str (); 701 } 702 else if (cmd_string != NULL) 703 input = cmd_string; 704 else 705 error (_("Neither a simple expression, or a multi-line specified.")); 706 707 std::string code 708 = current_language->compute_program (compiler.get (), input, gdbarch, 709 expr_block, expr_pc); 710 if (compile_debug) 711 gdb_printf (gdb_stdlog, "debug output:\n\n%s", code.c_str ()); 712 713 compiler->set_verbose (compile_debug); 714 715 if (!compile_gcc.empty ()) 716 { 717 if (compiler->version () < GCC_FE_VERSION_1) 718 error (_("Command 'set compile-gcc' requires GCC version 6 or higher " 719 "(libcc1 interface version 1 or higher)")); 720 721 compiler->set_driver_filename (compile_gcc.c_str ()); 722 } 723 else 724 { 725 const char *os_rx = osabi_triplet_regexp (gdbarch_osabi (gdbarch)); 726 const char *arch_rx = gdbarch_gnu_triplet_regexp (gdbarch); 727 728 /* Allow triplets with or without vendor set. */ 729 triplet_rx = std::string (arch_rx) + "(-[^-]*)?-"; 730 if (os_rx != nullptr) 731 triplet_rx += os_rx; 732 compiler->set_triplet_regexp (triplet_rx.c_str ()); 733 } 734 735 /* Set compiler command-line arguments. */ 736 gdb_argv argv_holder = get_args (compiler.get (), gdbarch); 737 int argc = argv_holder.count (); 738 char **argv = argv_holder.get (); 739 740 gdb::unique_xmalloc_ptr<char> error_message 741 = compiler->set_arguments (argc, argv, triplet_rx.c_str ()); 742 743 if (error_message != NULL) 744 error ("%s", error_message.get ()); 745 746 if (compile_debug) 747 { 748 int argi; 749 750 gdb_printf (gdb_stdlog, "Passing %d compiler options:\n", argc); 751 for (argi = 0; argi < argc; argi++) 752 gdb_printf (gdb_stdlog, "Compiler option %d: <%s>\n", 753 argi, argv[argi]); 754 } 755 756 compile_file_names fnames = get_new_file_names (); 757 758 gdb::optional<gdb::unlinker> source_remover; 759 760 { 761 gdb_file_up src = gdb_fopen_cloexec (fnames.source_file (), "w"); 762 if (src == NULL) 763 perror_with_name (_("Could not open source file for writing")); 764 765 source_remover.emplace (fnames.source_file ()); 766 767 if (fputs (code.c_str (), src.get ()) == EOF) 768 perror_with_name (_("Could not write to source file")); 769 } 770 771 if (compile_debug) 772 gdb_printf (gdb_stdlog, "source file produced: %s\n\n", 773 fnames.source_file ()); 774 775 /* If we don't do this, then GDB simply exits 776 when the compiler dies. */ 777 scoped_ignore_sigpipe ignore_sigpipe; 778 779 /* Call the compiler and start the compilation process. */ 780 compiler->set_source_file (fnames.source_file ()); 781 ok = compiler->compile (fnames.object_file (), compile_debug); 782 if (!ok) 783 error (_("Compilation failed.")); 784 785 if (compile_debug) 786 gdb_printf (gdb_stdlog, "object file produced: %s\n\n", 787 fnames.object_file ()); 788 789 /* Keep the source file. */ 790 source_remover->keep (); 791 return fnames; 792 } 793 794 /* The "compile" prefix command. */ 795 796 static void 797 compile_command (const char *args, int from_tty) 798 { 799 /* If a sub-command is not specified to the compile prefix command, 800 assume it is a direct code compilation. */ 801 compile_code_command (args, from_tty); 802 } 803 804 /* See compile.h. */ 805 806 void 807 eval_compile_command (struct command_line *cmd, const char *cmd_string, 808 enum compile_i_scope_types scope, void *scope_data) 809 { 810 compile_file_names fnames = compile_to_object (cmd, cmd_string, scope); 811 812 gdb::unlinker object_remover (fnames.object_file ()); 813 gdb::unlinker source_remover (fnames.source_file ()); 814 815 compile_module_up compile_module = compile_object_load (fnames, scope, 816 scope_data); 817 if (compile_module == NULL) 818 { 819 gdb_assert (scope == COMPILE_I_PRINT_ADDRESS_SCOPE); 820 eval_compile_command (cmd, cmd_string, 821 COMPILE_I_PRINT_VALUE_SCOPE, scope_data); 822 return; 823 } 824 825 /* Keep the files. */ 826 source_remover.keep (); 827 object_remover.keep (); 828 829 compile_object_run (std::move (compile_module)); 830 } 831 832 /* See compile/compile-internal.h. */ 833 834 std::string 835 compile_register_name_mangled (struct gdbarch *gdbarch, int regnum) 836 { 837 const char *regname = gdbarch_register_name (gdbarch, regnum); 838 839 return string_printf ("__%s", regname); 840 } 841 842 /* See compile/compile-internal.h. */ 843 844 int 845 compile_register_name_demangle (struct gdbarch *gdbarch, 846 const char *regname) 847 { 848 int regnum; 849 850 if (regname[0] != '_' || regname[1] != '_') 851 error (_("Invalid register name \"%s\"."), regname); 852 regname += 2; 853 854 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++) 855 if (strcmp (regname, gdbarch_register_name (gdbarch, regnum)) == 0) 856 return regnum; 857 858 error (_("Cannot find gdbarch register \"%s\"."), regname); 859 } 860 861 /* Forwards to the plug-in. */ 862 863 #define FORWARD(OP,...) (m_gcc_fe->ops->OP (m_gcc_fe, ##__VA_ARGS__)) 864 865 /* See compile-internal.h. */ 866 867 void 868 compile_instance::set_print_callback 869 (void (*print_function) (void *, const char *), void *datum) 870 { 871 FORWARD (set_print_callback, print_function, datum); 872 } 873 874 /* See compile-internal.h. */ 875 876 unsigned int 877 compile_instance::version () const 878 { 879 return m_gcc_fe->ops->version; 880 } 881 882 /* See compile-internal.h. */ 883 884 void 885 compile_instance::set_verbose (int level) 886 { 887 if (version () >= GCC_FE_VERSION_1) 888 FORWARD (set_verbose, level); 889 } 890 891 /* See compile-internal.h. */ 892 893 void 894 compile_instance::set_driver_filename (const char *filename) 895 { 896 if (version () >= GCC_FE_VERSION_1) 897 FORWARD (set_driver_filename, filename); 898 } 899 900 /* See compile-internal.h. */ 901 902 void 903 compile_instance::set_triplet_regexp (const char *regexp) 904 { 905 if (version () >= GCC_FE_VERSION_1) 906 FORWARD (set_triplet_regexp, regexp); 907 } 908 909 /* See compile-internal.h. */ 910 911 gdb::unique_xmalloc_ptr<char> 912 compile_instance::set_arguments (int argc, char **argv, const char *regexp) 913 { 914 if (version () >= GCC_FE_VERSION_1) 915 return gdb::unique_xmalloc_ptr<char> (FORWARD (set_arguments, argc, argv)); 916 else 917 return gdb::unique_xmalloc_ptr<char> (FORWARD (set_arguments_v0, regexp, 918 argc, argv)); 919 } 920 921 /* See compile-internal.h. */ 922 923 void 924 compile_instance::set_source_file (const char *filename) 925 { 926 FORWARD (set_source_file, filename); 927 } 928 929 /* See compile-internal.h. */ 930 931 bool 932 compile_instance::compile (const char *filename, int verbose_level) 933 { 934 if (version () >= GCC_FE_VERSION_1) 935 return FORWARD (compile, filename); 936 else 937 return FORWARD (compile_v0, filename, verbose_level); 938 } 939 940 #undef FORWARD 941 942 /* See compile.h. */ 943 cmd_list_element *compile_cmd_element = nullptr; 944 945 void _initialize_compile (); 946 void 947 _initialize_compile () 948 { 949 struct cmd_list_element *c = NULL; 950 951 compile_cmd_element = add_prefix_cmd ("compile", class_obscure, 952 compile_command, _("\ 953 Command to compile source code and inject it into the inferior."), 954 &compile_command_list, 1, &cmdlist); 955 add_com_alias ("expression", compile_cmd_element, class_obscure, 0); 956 957 const auto compile_opts = make_compile_options_def_group (nullptr); 958 959 static const std::string compile_code_help 960 = gdb::option::build_help (_("\ 961 Compile, inject, and execute code.\n\ 962 \n\ 963 Usage: compile code [OPTION]... [CODE]\n\ 964 \n\ 965 Options:\n\ 966 %OPTIONS%\n\ 967 \n\ 968 The source code may be specified as a simple one line expression, e.g.:\n\ 969 \n\ 970 compile code printf(\"Hello world\\n\");\n\ 971 \n\ 972 Alternatively, you can type a multiline expression by invoking\n\ 973 this command with no argument. GDB will then prompt for the\n\ 974 expression interactively; type a line containing \"end\" to\n\ 975 indicate the end of the expression."), 976 compile_opts); 977 978 c = add_cmd ("code", class_obscure, compile_code_command, 979 compile_code_help.c_str (), 980 &compile_command_list); 981 set_cmd_completer_handle_brkchars (c, compile_code_command_completer); 982 983 static const std::string compile_file_help 984 = gdb::option::build_help (_("\ 985 Evaluate a file containing source code.\n\ 986 \n\ 987 Usage: compile file [OPTION].. [FILENAME]\n\ 988 \n\ 989 Options:\n\ 990 %OPTIONS%"), 991 compile_opts); 992 993 c = add_cmd ("file", class_obscure, compile_file_command, 994 compile_file_help.c_str (), 995 &compile_command_list); 996 set_cmd_completer_handle_brkchars (c, compile_file_command_completer); 997 998 const auto compile_print_opts = make_value_print_options_def_group (nullptr); 999 1000 static const std::string compile_print_help 1001 = gdb::option::build_help (_("\ 1002 Evaluate EXPR by using the compiler and print result.\n\ 1003 \n\ 1004 Usage: compile print [[OPTION]... --] [/FMT] [EXPR]\n\ 1005 \n\ 1006 Options:\n\ 1007 %OPTIONS%\n\ 1008 \n\ 1009 Note: because this command accepts arbitrary expressions, if you\n\ 1010 specify any command option, you must use a double dash (\"--\")\n\ 1011 to mark the end of option processing. E.g.: \"compile print -o -- myobj\".\n\ 1012 \n\ 1013 The expression may be specified on the same line as the command, e.g.:\n\ 1014 \n\ 1015 compile print i\n\ 1016 \n\ 1017 Alternatively, you can type a multiline expression by invoking\n\ 1018 this command with no argument. GDB will then prompt for the\n\ 1019 expression interactively; type a line containing \"end\" to\n\ 1020 indicate the end of the expression.\n\ 1021 \n\ 1022 EXPR may be preceded with /FMT, where FMT is a format letter\n\ 1023 but no count or size letter (see \"x\" command)."), 1024 compile_print_opts); 1025 1026 c = add_cmd ("print", class_obscure, compile_print_command, 1027 compile_print_help.c_str (), 1028 &compile_command_list); 1029 set_cmd_completer_handle_brkchars (c, print_command_completer); 1030 1031 add_setshow_boolean_cmd ("compile", class_maintenance, &compile_debug, _("\ 1032 Set compile command debugging."), _("\ 1033 Show compile command debugging."), _("\ 1034 When on, compile command debugging is enabled."), 1035 NULL, show_compile_debug, 1036 &setdebuglist, &showdebuglist); 1037 1038 add_setshow_string_cmd ("compile-args", class_support, 1039 &compile_args, 1040 _("Set compile command GCC command-line arguments."), 1041 _("Show compile command GCC command-line arguments."), 1042 _("\ 1043 Use options like -I (include file directory) or ABI settings.\n\ 1044 String quoting is parsed like in shell, for example:\n\ 1045 -mno-align-double \"-I/dir with a space/include\""), 1046 set_compile_args, show_compile_args, &setlist, &showlist); 1047 1048 1049 /* Initialize compile_args_argv. */ 1050 set_compile_args (compile_args.c_str (), 0, NULL); 1051 1052 add_setshow_optional_filename_cmd ("compile-gcc", class_support, 1053 &compile_gcc, 1054 _("Set compile command " 1055 "GCC driver filename."), 1056 _("Show compile command " 1057 "GCC driver filename."), 1058 _("\ 1059 It should be absolute filename of the gcc executable.\n\ 1060 If empty the default target triplet will be searched in $PATH."), 1061 NULL, show_compile_gcc, &setlist, 1062 &showlist); 1063 } 1064