1 /* General Compile and inject code
3 Copyright (C) 2014-2019 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
24 #include "cli/cli-script.h"
25 #include "cli/cli-utils.h"
26 #include "cli/cli-option.h"
27 #include "completer.h"
30 #include "compile-internal.h"
31 #include "compile-object-load.h"
32 #include "compile-object-run.h"
37 #include "arch-utils.h"
38 #include "common/filestuff.h"
41 #include "common/gdb_wait.h"
43 #include "common/gdb_optional.h"
44 #include "common/gdb_unlinker.h"
45 #include "common/pathstuff.h"
49 /* Initial filename for temporary files. */
51 #define TMP_PREFIX "/tmp/gdbobj-"
53 /* Hold "compile" commands. */
55 static struct cmd_list_element *compile_command_list;
57 /* Debug flag for "compile" commands. */
61 /* Object of this type are stored in the compiler's symbol_err_map. */
67 const struct symbol *sym;
69 /* The error message to emit. This is malloc'd and owned by the
75 /* Hash a type_map_instance. */
78 hash_type_map_instance (const void *p)
80 const struct type_map_instance *inst = (const struct type_map_instance *) p;
82 return htab_hash_pointer (inst->type);
85 /* Check two type_map_instance objects for equality. */
88 eq_type_map_instance (const void *a, const void *b)
90 const struct type_map_instance *insta = (const struct type_map_instance *) a;
91 const struct type_map_instance *instb = (const struct type_map_instance *) b;
93 return insta->type == instb->type;
96 /* Hash function for struct symbol_error. */
99 hash_symbol_error (const void *a)
101 const struct symbol_error *se = (const struct symbol_error *) a;
103 return htab_hash_pointer (se->sym);
106 /* Equality function for struct symbol_error. */
109 eq_symbol_error (const void *a, const void *b)
111 const struct symbol_error *sea = (const struct symbol_error *) a;
112 const struct symbol_error *seb = (const struct symbol_error *) b;
114 return sea->sym == seb->sym;
117 /* Deletion function for struct symbol_error. */
120 del_symbol_error (void *a)
122 struct symbol_error *se = (struct symbol_error *) a;
128 /* Constructor for compile_instance. */
130 compile_instance::compile_instance (struct gcc_base_context *gcc_fe,
132 : m_gcc_fe (gcc_fe), m_gcc_target_options (options),
133 m_type_map (htab_create_alloc (10, hash_type_map_instance,
134 eq_type_map_instance,
135 xfree, xcalloc, xfree)),
136 m_symbol_err_map (htab_create_alloc (10, hash_symbol_error,
137 eq_symbol_error, del_symbol_error,
142 /* See compile-internal.h. */
145 compile_instance::get_cached_type (struct type *type, gcc_type *ret) const
147 struct type_map_instance inst, *found;
150 found = (struct type_map_instance *) htab_find (m_type_map.get (), &inst);
153 *ret = found->gcc_type_handle;
160 /* See compile-internal.h. */
163 compile_instance::insert_type (struct type *type, gcc_type gcc_type)
165 struct type_map_instance inst, *add;
169 inst.gcc_type_handle = gcc_type;
170 slot = htab_find_slot (m_type_map.get (), &inst, INSERT);
172 add = (struct type_map_instance *) *slot;
173 /* The type might have already been inserted in order to handle
175 if (add != NULL && add->gcc_type_handle != gcc_type)
176 error (_("Unexpected type id from GCC, check you use recent enough GCC."));
180 add = XNEW (struct type_map_instance);
186 /* See compile-internal.h. */
189 compile_instance::insert_symbol_error (const struct symbol *sym,
192 struct symbol_error e;
196 slot = htab_find_slot (m_symbol_err_map.get (), &e, INSERT);
199 struct symbol_error *ep = XNEW (struct symbol_error);
202 ep->message = xstrdup (text);
207 /* See compile-internal.h. */
210 compile_instance::error_symbol_once (const struct symbol *sym)
212 struct symbol_error search;
213 struct symbol_error *err;
215 if (m_symbol_err_map == NULL)
219 err = (struct symbol_error *) htab_find (m_symbol_err_map.get (), &search);
220 if (err == NULL || err->message == NULL)
223 gdb::unique_xmalloc_ptr<char> message (err->message);
225 error (_("%s"), message.get ());
228 /* Implement "show debug compile". */
231 show_compile_debug (struct ui_file *file, int from_tty,
232 struct cmd_list_element *c, const char *value)
234 fprintf_filtered (file, _("Compile debugging is %s.\n"), value);
239 /* Check *ARG for a "-raw" or "-r" argument. Return 0 if not seen.
240 Return 1 if seen and update *ARG. */
243 check_raw_argument (const char **arg)
245 *arg = skip_spaces (*arg);
248 && (check_for_argument (arg, "-raw", sizeof ("-raw") - 1)
249 || check_for_argument (arg, "-r", sizeof ("-r") - 1)))
254 /* Handle the input from the 'compile file' command. The "compile
255 file" command is used to evaluate an expression contained in a file
256 that may contain calls to the GCC compiler. */
259 compile_file_command (const char *arg, int from_tty)
261 enum compile_i_scope_types scope = COMPILE_I_SIMPLE_SCOPE;
263 scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0);
265 /* Check the user did not just <enter> after command. */
267 error (_("You must provide a filename for this command."));
269 /* Check if a raw (-r|-raw) argument is provided. */
270 if (arg != NULL && check_raw_argument (&arg))
272 scope = COMPILE_I_RAW_SCOPE;
273 arg = skip_spaces (arg);
276 /* After processing arguments, check there is a filename at the end
279 error (_("You must provide a filename with the raw option set."));
282 error (_("Unknown argument specified."));
284 arg = skip_spaces (arg);
285 gdb::unique_xmalloc_ptr<char> abspath = gdb_abspath (arg);
286 std::string buffer = string_printf ("#include \"%s\"\n", abspath.get ());
287 eval_compile_command (NULL, buffer.c_str (), scope, NULL);
290 /* Handle the input from the 'compile code' command. The
291 "compile code" command is used to evaluate an expression that may
292 contain calls to the GCC compiler. The language expected in this
293 compile command is the language currently set in GDB. */
296 compile_code_command (const char *arg, int from_tty)
298 enum compile_i_scope_types scope = COMPILE_I_SIMPLE_SCOPE;
300 scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0);
302 if (arg != NULL && check_raw_argument (&arg))
304 scope = COMPILE_I_RAW_SCOPE;
305 arg = skip_spaces (arg);
308 arg = skip_spaces (arg);
310 if (arg != NULL && !check_for_argument (&arg, "--", sizeof ("--") - 1))
313 error (_("Unknown argument specified."));
317 eval_compile_command (NULL, arg, scope, NULL);
320 counted_command_line l = get_command_line (compile_control, "");
322 l->control_u.compile.scope = scope;
323 execute_control_command_untraced (l.get ());
327 /* Callback for compile_print_command. */
330 compile_print_value (struct value *val, void *data_voidp)
332 const value_print_options *print_opts = (value_print_options *) data_voidp;
334 print_value (val, *print_opts);
337 /* Handle the input from the 'compile print' command. The "compile
338 print" command is used to evaluate and print an expression that may
339 contain calls to the GCC compiler. The language expected in this
340 compile command is the language currently set in GDB. */
343 compile_print_command (const char *arg, int from_tty)
345 enum compile_i_scope_types scope = COMPILE_I_PRINT_ADDRESS_SCOPE;
346 value_print_options print_opts;
348 scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0);
350 get_user_print_options (&print_opts);
351 /* Override global settings with explicit options, if any. */
352 auto group = make_value_print_options_def_group (&print_opts);
353 gdb::option::process_options
354 (&arg, gdb::option::PROCESS_OPTIONS_REQUIRE_DELIMITER, group);
356 print_command_parse_format (&arg, "compile print", &print_opts);
358 /* Passing &PRINT_OPTS as SCOPE_DATA is safe as do_module_cleanup
359 will not touch the stale pointer if compile_object_run has
363 eval_compile_command (NULL, arg, scope, &print_opts);
366 counted_command_line l = get_command_line (compile_control, "");
368 l->control_u.compile.scope = scope;
369 l->control_u.compile.scope_data = &print_opts;
370 execute_control_command_untraced (l.get ());
374 /* A cleanup function to remove a directory and all its contents. */
379 const char *dir = (const char *) arg;
383 gdb_assert (startswith (dir, TMP_PREFIX));
384 zap = concat ("rm -rf ", dir, (char *) NULL);
385 wstat = system (zap);
386 if (wstat == -1 || !WIFEXITED (wstat) || WEXITSTATUS (wstat) != 0)
387 warning (_("Could not remove temporary directory %s"), dir);
391 /* Return the name of the temporary directory to use for .o files, and
392 arrange for the directory to be removed at shutdown. */
395 get_compile_file_tempdir (void)
397 static char *tempdir_name;
399 #define TEMPLATE TMP_PREFIX "XXXXXX"
400 char tname[sizeof (TEMPLATE)];
402 if (tempdir_name != NULL)
405 strcpy (tname, TEMPLATE);
407 tempdir_name = mkdtemp (tname);
408 if (tempdir_name == NULL)
409 perror_with_name (_("Could not make temporary directory"));
411 tempdir_name = xstrdup (tempdir_name);
412 make_final_cleanup (do_rmdir, tempdir_name);
416 /* Compute the names of source and object files to use. */
418 static compile_file_names
419 get_new_file_names ()
422 const char *dir = get_compile_file_tempdir ();
426 return compile_file_names (string_printf ("%s%sout%d.c",
427 dir, SLASH_STRING, seq),
428 string_printf ("%s%sout%d.o",
429 dir, SLASH_STRING, seq));
432 /* Get the block and PC at which to evaluate an expression. */
434 static const struct block *
435 get_expr_block_and_pc (CORE_ADDR *pc)
437 const struct block *block = get_selected_block (pc);
441 struct symtab_and_line cursal = get_current_source_symtab_and_line ();
444 block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (cursal.symtab),
447 *pc = BLOCK_ENTRY_PC (block);
450 *pc = BLOCK_ENTRY_PC (block);
455 /* Call buildargv (via gdb_argv), set its result for S into *ARGVP but
456 calculate also the number of parsed arguments into *ARGCP. If
457 buildargv has returned NULL then *ARGCP is set to zero. */
460 build_argc_argv (const char *s, int *argcp, char ***argvp)
464 *argcp = args.count ();
465 *argvp = args.release ();
468 /* String for 'set compile-args' and 'show compile-args'. */
469 static char *compile_args;
471 /* Parsed form of COMPILE_ARGS. COMPILE_ARGS_ARGV is NULL terminated. */
472 static int compile_args_argc;
473 static char **compile_args_argv;
475 /* Implement 'set compile-args'. */
478 set_compile_args (const char *args, int from_tty, struct cmd_list_element *c)
480 freeargv (compile_args_argv);
481 build_argc_argv (compile_args, &compile_args_argc, &compile_args_argv);
484 /* Implement 'show compile-args'. */
487 show_compile_args (struct ui_file *file, int from_tty,
488 struct cmd_list_element *c, const char *value)
490 fprintf_filtered (file, _("Compile command command-line arguments "
495 /* Append ARGC and ARGV (as parsed by build_argc_argv) to *ARGCP and *ARGVP.
496 ARGCP+ARGVP can be zero+NULL and also ARGC+ARGV can be zero+NULL. */
499 append_args (int *argcp, char ***argvp, int argc, char **argv)
503 *argvp = XRESIZEVEC (char *, *argvp, (*argcp + argc + 1));
505 for (argi = 0; argi < argc; argi++)
506 (*argvp)[(*argcp)++] = xstrdup (argv[argi]);
507 (*argvp)[(*argcp)] = NULL;
510 /* String for 'set compile-gcc' and 'show compile-gcc'. */
511 static char *compile_gcc;
513 /* Implement 'show compile-gcc'. */
516 show_compile_gcc (struct ui_file *file, int from_tty,
517 struct cmd_list_element *c, const char *value)
519 fprintf_filtered (file, _("Compile command GCC driver filename is \"%s\".\n"),
523 /* Return DW_AT_producer parsed for get_selected_frame () (if any).
524 Return NULL otherwise.
526 GCC already filters its command-line arguments only for the suitable ones to
527 put into DW_AT_producer - see GCC function gen_producer_string. */
530 get_selected_pc_producer_options (void)
532 CORE_ADDR pc = get_frame_pc (get_selected_frame (NULL));
533 struct compunit_symtab *symtab = find_pc_compunit_symtab (pc);
536 if (symtab == NULL || symtab->producer == NULL
537 || !startswith (symtab->producer, "GNU "))
540 cs = symtab->producer;
541 while (*cs != 0 && *cs != '-')
542 cs = skip_spaces (skip_to_space (cs));
548 /* Filter out unwanted options from *ARGCP and ARGV. */
551 filter_args (int *argcp, char **argv)
555 for (destv = argv; *argv != NULL; argv++)
557 /* -fpreprocessed may get in commonly from ccache. */
558 if (strcmp (*argv, "-fpreprocessed") == 0)
569 /* Produce final vector of GCC compilation options.
571 The first element of the combined argument vector are arguments
572 relating to the target size ("-m64", "-m32" etc.). These are
573 sourced from the inferior's architecture.
575 The second element of the combined argument vector are arguments
576 stored in the inferior DW_AT_producer section. If these are stored
577 in the inferior (there is no guarantee that they are), they are
580 The third element of the combined argument vector are argument
581 supplied by the language implementation provided by
582 compile-{lang}-support. These contain language specific arguments.
584 The final element of the combined argument vector are arguments
585 supplied by the "set compile-args" command. These are always
586 appended last so as to override any of the arguments automatically
590 get_args (const compile_instance *compiler, struct gdbarch *gdbarch,
591 int *argcp, char ***argvp)
593 const char *cs_producer_options;
595 char **argv_compiler;
597 build_argc_argv (gdbarch_gcc_target_options (gdbarch),
600 cs_producer_options = get_selected_pc_producer_options ();
601 if (cs_producer_options != NULL)
604 char **argv_producer;
606 build_argc_argv (cs_producer_options, &argc_producer, &argv_producer);
607 filter_args (&argc_producer, argv_producer);
608 append_args (argcp, argvp, argc_producer, argv_producer);
609 freeargv (argv_producer);
612 build_argc_argv (compiler->gcc_target_options ().c_str (),
613 &argc_compiler, &argv_compiler);
614 append_args (argcp, argvp, argc_compiler, argv_compiler);
615 freeargv (argv_compiler);
617 append_args (argcp, argvp, compile_args_argc, compile_args_argv);
620 /* A helper function suitable for use as the "print_callback" in the
624 print_callback (void *ignore, const char *message)
626 fputs_filtered (message, gdb_stderr);
629 /* Process the compilation request. On success it returns the object
630 and source file names. On an error condition, error () is
633 static compile_file_names
634 compile_to_object (struct command_line *cmd, const char *cmd_string,
635 enum compile_i_scope_types scope)
637 const struct block *expr_block;
638 CORE_ADDR trash_pc, expr_pc;
642 struct gdbarch *gdbarch = get_current_arch ();
643 std::string triplet_rx;
645 if (!target_has_execution)
646 error (_("The program must be running for the compile command to "\
649 expr_block = get_expr_block_and_pc (&trash_pc);
650 expr_pc = get_frame_address_in_block (get_selected_frame (NULL));
652 /* Set up instance and context for the compiler. */
653 if (current_language->la_get_compile_instance == NULL)
654 error (_("No compiler support for language %s."),
655 current_language->la_name);
657 compile_instance *compiler_instance
658 = current_language->la_get_compile_instance ();
659 std::unique_ptr<compile_instance> compiler (compiler_instance);
660 compiler->set_print_callback (print_callback, NULL);
661 compiler->set_scope (scope);
662 compiler->set_block (expr_block);
664 /* From the provided expression, build a scope to pass to the
667 string_file input_buf;
672 struct command_line *iter;
674 for (iter = cmd->body_list_0.get (); iter; iter = iter->next)
676 input_buf.puts (iter->line);
677 input_buf.puts ("\n");
680 input = input_buf.c_str ();
682 else if (cmd_string != NULL)
685 error (_("Neither a simple expression, or a multi-line specified."));
688 = current_language->la_compute_program (compiler.get (), input, gdbarch,
689 expr_block, expr_pc);
691 fprintf_unfiltered (gdb_stdlog, "debug output:\n\n%s", code.c_str ());
693 compiler->set_verbose (compile_debug);
695 if (compile_gcc[0] != 0)
697 if (compiler->version () < GCC_FE_VERSION_1)
698 error (_("Command 'set compile-gcc' requires GCC version 6 or higher "
699 "(libcc1 interface version 1 or higher)"));
701 compiler->set_driver_filename (compile_gcc);
705 const char *os_rx = osabi_triplet_regexp (gdbarch_osabi (gdbarch));
706 const char *arch_rx = gdbarch_gnu_triplet_regexp (gdbarch);
708 /* Allow triplets with or without vendor set. */
709 triplet_rx = std::string (arch_rx) + "(-[^-]*)?-" + os_rx;
710 compiler->set_triplet_regexp (triplet_rx.c_str ());
713 /* Set compiler command-line arguments. */
714 get_args (compiler.get (), gdbarch, &argc, &argv);
715 gdb_argv argv_holder (argv);
717 gdb::unique_xmalloc_ptr<char> error_message;
718 error_message.reset (compiler->set_arguments (argc, argv,
719 triplet_rx.c_str ()));
721 if (error_message != NULL)
722 error ("%s", error_message.get ());
728 fprintf_unfiltered (gdb_stdlog, "Passing %d compiler options:\n", argc);
729 for (argi = 0; argi < argc; argi++)
730 fprintf_unfiltered (gdb_stdlog, "Compiler option %d: <%s>\n",
734 compile_file_names fnames = get_new_file_names ();
736 gdb::optional<gdb::unlinker> source_remover;
739 gdb_file_up src = gdb_fopen_cloexec (fnames.source_file (), "w");
741 perror_with_name (_("Could not open source file for writing"));
743 source_remover.emplace (fnames.source_file ());
745 if (fputs (code.c_str (), src.get ()) == EOF)
746 perror_with_name (_("Could not write to source file"));
750 fprintf_unfiltered (gdb_stdlog, "source file produced: %s\n\n",
751 fnames.source_file ());
753 /* Call the compiler and start the compilation process. */
754 compiler->set_source_file (fnames.source_file ());
755 ok = compiler->compile (fnames.object_file (), compile_debug);
757 error (_("Compilation failed."));
760 fprintf_unfiltered (gdb_stdlog, "object file produced: %s\n\n",
761 fnames.object_file ());
763 /* Keep the source file. */
764 source_remover->keep ();
768 /* The "compile" prefix command. */
771 compile_command (const char *args, int from_tty)
773 /* If a sub-command is not specified to the compile prefix command,
774 assume it is a direct code compilation. */
775 compile_code_command (args, from_tty);
781 eval_compile_command (struct command_line *cmd, const char *cmd_string,
782 enum compile_i_scope_types scope, void *scope_data)
784 struct compile_module *compile_module;
786 compile_file_names fnames = compile_to_object (cmd, cmd_string, scope);
788 gdb::unlinker object_remover (fnames.object_file ());
789 gdb::unlinker source_remover (fnames.source_file ());
791 compile_module = compile_object_load (fnames, scope, scope_data);
792 if (compile_module == NULL)
794 gdb_assert (scope == COMPILE_I_PRINT_ADDRESS_SCOPE);
795 eval_compile_command (cmd, cmd_string,
796 COMPILE_I_PRINT_VALUE_SCOPE, scope_data);
800 /* Keep the files. */
801 source_remover.keep ();
802 object_remover.keep ();
804 compile_object_run (compile_module);
807 /* See compile/compile-internal.h. */
810 compile_register_name_mangled (struct gdbarch *gdbarch, int regnum)
812 const char *regname = gdbarch_register_name (gdbarch, regnum);
814 return string_printf ("__%s", regname);
817 /* See compile/compile-internal.h. */
820 compile_register_name_demangle (struct gdbarch *gdbarch,
825 if (regname[0] != '_' || regname[1] != '_')
826 error (_("Invalid register name \"%s\"."), regname);
829 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
830 if (strcmp (regname, gdbarch_register_name (gdbarch, regnum)) == 0)
833 error (_("Cannot find gdbarch register \"%s\"."), regname);
836 /* Forwards to the plug-in. */
838 #define FORWARD(OP,...) (m_gcc_fe->ops->OP (m_gcc_fe, ##__VA_ARGS__))
840 /* See compile-internal.h. */
843 compile_instance::set_print_callback
844 (void (*print_function) (void *, const char *), void *datum)
846 FORWARD (set_print_callback, print_function, datum);
849 /* See compile-internal.h. */
852 compile_instance::version () const
854 return m_gcc_fe->ops->version;
857 /* See compile-internal.h. */
860 compile_instance::set_verbose (int level)
862 if (version () >= GCC_FE_VERSION_1)
863 FORWARD (set_verbose, level);
866 /* See compile-internal.h. */
869 compile_instance::set_driver_filename (const char *filename)
871 if (version () >= GCC_FE_VERSION_1)
872 FORWARD (set_driver_filename, filename);
875 /* See compile-internal.h. */
878 compile_instance::set_triplet_regexp (const char *regexp)
880 if (version () >= GCC_FE_VERSION_1)
881 FORWARD (set_triplet_regexp, regexp);
884 /* See compile-internal.h. */
887 compile_instance::set_arguments (int argc, char **argv, const char *regexp)
889 if (version () >= GCC_FE_VERSION_1)
890 return FORWARD (set_arguments, argc, argv);
892 return FORWARD (set_arguments_v0, regexp, argc, argv);
895 /* See compile-internal.h. */
898 compile_instance::set_source_file (const char *filename)
900 FORWARD (set_source_file, filename);
903 /* See compile-internal.h. */
906 compile_instance::compile (const char *filename, int verbose_level)
908 if (version () >= GCC_FE_VERSION_1)
909 return FORWARD (compile, filename);
911 return FORWARD (compile_v0, filename, verbose_level);
917 cmd_list_element *compile_cmd_element = nullptr;
920 _initialize_compile (void)
922 struct cmd_list_element *c = NULL;
924 compile_cmd_element = add_prefix_cmd ("compile", class_obscure,
925 compile_command, _("\
926 Command to compile source code and inject it into the inferior."),
927 &compile_command_list, "compile ", 1, &cmdlist);
928 add_com_alias ("expression", "compile", class_obscure, 0);
930 add_cmd ("code", class_obscure, compile_code_command,
932 Compile, inject, and execute code.\n\
934 Usage: compile code [-r|-raw] [--] [CODE]\n\
935 -r|-raw: Suppress automatic 'void _gdb_expr () { CODE }' wrapping.\n\
936 --: Do not parse any options beyond this delimiter. All text to the\n\
937 right will be treated as source code.\n\
939 The source code may be specified as a simple one line expression, e.g.:\n\
941 compile code printf(\"Hello world\\n\");\n\
943 Alternatively, you can type a multiline expression by invoking\n\
944 this command with no argument. GDB will then prompt for the\n\
945 expression interactively; type a line containing \"end\" to\n\
946 indicate the end of the expression."),
947 &compile_command_list);
949 c = add_cmd ("file", class_obscure, compile_file_command,
951 Evaluate a file containing source code.\n\
953 Usage: compile file [-r|-raw] [FILENAME]\n\
954 -r|-raw: Suppress automatic 'void _gdb_expr () { CODE }' wrapping."),
955 &compile_command_list);
956 set_cmd_completer (c, filename_completer);
958 const auto compile_print_opts = make_value_print_options_def_group (nullptr);
960 static const std::string compile_print_help
961 = gdb::option::build_help (N_("\
962 Evaluate EXPR by using the compiler and print result.\n\
964 Usage: compile print [[OPTION]... --] [/FMT] [EXPR]\n\
968 Note: because this command accepts arbitrary expressions, if you\n\
969 specify any command option, you must use a double dash (\"--\")\n\
970 to mark the end of option processing. E.g.: \"compile print -o -- myobj\".\n\
972 The expression may be specified on the same line as the command, e.g.:\n\
976 Alternatively, you can type a multiline expression by invoking\n\
977 this command with no argument. GDB will then prompt for the\n\
978 expression interactively; type a line containing \"end\" to\n\
979 indicate the end of the expression.\n\
981 EXPR may be preceded with /FMT, where FMT is a format letter\n\
982 but no count or size letter (see \"x\" command)."),
985 c = add_cmd ("print", class_obscure, compile_print_command,
986 compile_print_help.c_str (),
987 &compile_command_list);
988 set_cmd_completer_handle_brkchars (c, print_command_completer);
990 add_setshow_boolean_cmd ("compile", class_maintenance, &compile_debug, _("\
991 Set compile command debugging."), _("\
992 Show compile command debugging."), _("\
993 When on, compile command debugging is enabled."),
994 NULL, show_compile_debug,
995 &setdebuglist, &showdebuglist);
997 add_setshow_string_cmd ("compile-args", class_support,
999 _("Set compile command GCC command-line arguments"),
1000 _("Show compile command GCC command-line arguments"),
1002 Use options like -I (include file directory) or ABI settings.\n\
1003 String quoting is parsed like in shell, for example:\n\
1004 -mno-align-double \"-I/dir with a space/include\""),
1005 set_compile_args, show_compile_args, &setlist, &showlist);
1007 /* Override flags possibly coming from DW_AT_producer. */
1008 compile_args = xstrdup ("-O0 -gdwarf-4"
1009 /* We use -fPIE Otherwise GDB would need to reserve space large enough for
1010 any object file in the inferior in advance to get the final address when
1011 to link the object file to and additionally the default system linker
1012 script would need to be modified so that one can specify there the
1013 absolute target address.
1014 -fPIC is not used at is would require from GDB to generate .got. */
1016 /* We want warnings, except for some commonly happening for GDB commands. */
1018 " -Wno-unused-but-set-variable"
1019 " -Wno-unused-variable"
1020 /* Override CU's possible -fstack-protector-strong. */
1021 " -fno-stack-protector"
1023 set_compile_args (compile_args, 0, NULL);
1025 add_setshow_optional_filename_cmd ("compile-gcc", class_support,
1027 _("Set compile command "
1028 "GCC driver filename"),
1029 _("Show compile command "
1030 "GCC driver filename"),
1032 It should be absolute filename of the gcc executable.\n\
1033 If empty the default target triplet will be searched in $PATH."),
1034 NULL, show_compile_gcc, &setlist,
1036 compile_gcc = xstrdup ("");