1 /* General Compile and inject code
3 Copyright (C) 2014-2025 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/>. */
20 #include "progspace.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 "cli/cli-cmds.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 "gdbsupport/filestuff.h"
41 #include "gdbsupport/gdb_wait.h"
44 #include "gdbsupport/gdb_unlinker.h"
45 #include "gdbsupport/pathstuff.h"
46 #include "gdbsupport/scoped_ignore_signal.h"
47 #include "gdbsupport/buildargv.h"
49 /* Hold "compile" commands. */
51 static struct cmd_list_element
*compile_command_list
;
56 /* Initial filename for temporary files. */
58 #define TMP_PREFIX "/tmp/gdbobj-"
60 /* Debug flag for "compile" commands. */
64 /* See compile-internal.h. */
67 compile_instance::get_cached_type (struct type
*type
, gcc_type
*ret
) const
69 if (auto iter
= m_type_map
.find (type
);
70 iter
!= m_type_map
.end ())
79 /* See compile-internal.h. */
82 compile_instance::insert_type (struct type
*type
, gcc_type gcc_type
)
84 auto [it
, inserted
] = m_type_map
.emplace (type
, gcc_type
);
86 /* The type might have already been inserted in order to handle
88 if (!inserted
&& it
->second
!= gcc_type
)
89 error (_("Unexpected type id from GCC, check you use recent enough GCC."));
92 /* See compile-internal.h. */
95 compile_instance::insert_symbol_error (const struct symbol
*sym
,
98 m_symbol_err_map
.emplace (sym
, text
);
101 /* See compile-internal.h. */
104 compile_instance::error_symbol_once (const struct symbol
*sym
)
106 if (auto iter
= m_symbol_err_map
.find (sym
);
107 iter
!= m_symbol_err_map
.end () && !iter
->second
.empty ())
109 std::string message
= std::move (iter
->second
);
110 error (_("%s"), message
.c_str ());
114 /* Implement "show debug compile". */
117 show_compile_debug (struct ui_file
*file
, int from_tty
,
118 struct cmd_list_element
*c
, const char *value
)
120 gdb_printf (file
, _("Compile debugging is %s.\n"), value
);
125 /* Options for the compile command. */
127 struct compile_options
133 using compile_flag_option_def
134 = gdb::option::flag_option_def
<compile_options
>;
136 static const gdb::option::option_def compile_command_option_defs
[] = {
138 compile_flag_option_def
{
140 [] (compile_options
*opts
) { return &opts
->raw
; },
141 N_("Suppress automatic 'void _gdb_expr () { CODE }' wrapping."),
146 /* Create an option_def_group for the "compile" command's options,
147 with OPTS as context. */
149 static gdb::option::option_def_group
150 make_compile_options_def_group (compile_options
*opts
)
152 return {{compile_command_option_defs
}, opts
};
155 /* Handle the input from the 'compile file' command. The "compile
156 file" command is used to evaluate an expression contained in a file
157 that may contain calls to the GCC compiler. */
160 compile_file_command (const char *args
, int from_tty
)
162 scoped_restore save_async
= make_scoped_restore (¤t_ui
->async
, 0);
164 /* Check if a -raw option is provided. */
166 compile_options options
;
168 const gdb::option::option_def_group group
169 = make_compile_options_def_group (&options
);
170 gdb::option::process_options
171 (&args
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR
,
174 enum compile_i_scope_types scope
175 = options
.raw
? COMPILE_I_RAW_SCOPE
: COMPILE_I_SIMPLE_SCOPE
;
177 std::string filename
= extract_single_filename_arg (args
);
179 /* After processing options, check whether we have a filename. */
180 if (filename
.empty ())
181 error (_("You must provide a filename for this command."));
183 std::string abspath
= gdb_abspath (filename
.c_str ());
184 std::string buffer
= string_printf ("#include \"%s\"\n", abspath
.c_str ());
185 eval_compile_command (NULL
, buffer
.c_str (), scope
, NULL
);
188 /* Completer for the "compile file" command. */
191 compile_file_command_completer (struct cmd_list_element
*ignore
,
192 completion_tracker
&tracker
,
193 const char *text
, const char *word
)
195 const gdb::option::option_def_group group
196 = make_compile_options_def_group (nullptr);
197 if (gdb::option::complete_options
198 (tracker
, &text
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR
, group
))
201 word
= advance_to_filename_maybe_quoted_complete_word_point (tracker
, text
);
202 filename_maybe_quoted_completer (ignore
, tracker
, text
, word
);
205 /* Handle the input from the 'compile code' command. The
206 "compile code" command is used to evaluate an expression that may
207 contain calls to the GCC compiler. The language expected in this
208 compile command is the language currently set in GDB. */
211 compile_code_command (const char *args
, int from_tty
)
213 scoped_restore save_async
= make_scoped_restore (¤t_ui
->async
, 0);
215 compile_options options
;
217 const gdb::option::option_def_group group
218 = make_compile_options_def_group (&options
);
219 gdb::option::process_options
220 (&args
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR
, group
);
222 enum compile_i_scope_types scope
223 = options
.raw
? COMPILE_I_RAW_SCOPE
: COMPILE_I_SIMPLE_SCOPE
;
226 eval_compile_command (NULL
, args
, scope
, NULL
);
229 counted_command_line l
= get_command_line (compile_control
, "");
231 l
->control_u
.compile
.scope
= scope
;
232 execute_control_command_untraced (l
.get ());
236 /* Completer for the "compile code" command. */
239 compile_code_command_completer (struct cmd_list_element
*ignore
,
240 completion_tracker
&tracker
,
241 const char *text
, const char *word
)
243 const gdb::option::option_def_group group
244 = make_compile_options_def_group (nullptr);
245 if (gdb::option::complete_options
246 (tracker
, &text
, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_ERROR
, group
))
249 word
= advance_to_expression_complete_word_point (tracker
, text
);
250 symbol_completer (ignore
, tracker
, text
, word
);
253 /* Callback for compile_print_command. */
256 compile_print_value (struct value
*val
, void *data_voidp
)
258 const value_print_options
*print_opts
= (value_print_options
*) data_voidp
;
260 print_value (val
, *print_opts
);
263 /* Handle the input from the 'compile print' command. The "compile
264 print" command is used to evaluate and print an expression that may
265 contain calls to the GCC compiler. The language expected in this
266 compile command is the language currently set in GDB. */
269 compile_print_command (const char *arg
, int from_tty
)
271 enum compile_i_scope_types scope
= COMPILE_I_PRINT_ADDRESS_SCOPE
;
272 value_print_options print_opts
;
274 scoped_restore save_async
= make_scoped_restore (¤t_ui
->async
, 0);
276 get_user_print_options (&print_opts
);
277 /* Override global settings with explicit options, if any. */
278 auto group
= make_value_print_options_def_group (&print_opts
);
279 gdb::option::process_options
280 (&arg
, gdb::option::PROCESS_OPTIONS_REQUIRE_DELIMITER
, group
);
282 print_command_parse_format (&arg
, "compile print", &print_opts
);
284 /* Passing &PRINT_OPTS as SCOPE_DATA is safe as do_module_cleanup
285 will not touch the stale pointer if compile_object_run has
289 eval_compile_command (NULL
, arg
, scope
, &print_opts
);
292 counted_command_line l
= get_command_line (compile_control
, "");
294 l
->control_u
.compile
.scope
= scope
;
295 l
->control_u
.compile
.scope_data
= &print_opts
;
296 execute_control_command_untraced (l
.get ());
300 /* Return the name of the temporary directory to use for .o files, and
301 arrange for the directory to be removed at shutdown. */
304 get_compile_file_tempdir (void)
306 static char *tempdir_name
;
308 #define TEMPLATE TMP_PREFIX "XXXXXX"
309 char tname
[sizeof (TEMPLATE
)];
311 if (tempdir_name
!= NULL
)
314 strcpy (tname
, TEMPLATE
);
316 tempdir_name
= mkdtemp (tname
);
317 if (tempdir_name
== NULL
)
318 perror_with_name (_("Could not make temporary directory"));
320 tempdir_name
= xstrdup (tempdir_name
);
321 add_final_cleanup ([] ()
326 gdb_assert (startswith (tempdir_name
, TMP_PREFIX
));
327 zap
= concat ("rm -rf ", tempdir_name
, (char *) NULL
);
328 wstat
= system (zap
);
329 if (wstat
== -1 || !WIFEXITED (wstat
) || WEXITSTATUS (wstat
) != 0)
330 warning (_("Could not remove temporary directory %s"), tempdir_name
);
336 /* Compute the names of source and object files to use. */
338 static compile_file_names
339 get_new_file_names ()
342 const char *dir
= get_compile_file_tempdir ();
346 return compile_file_names (string_printf ("%s%sout%d.c",
347 dir
, SLASH_STRING
, seq
),
348 string_printf ("%s%sout%d.o",
349 dir
, SLASH_STRING
, seq
));
352 /* Get the block and PC at which to evaluate an expression. */
354 static const struct block
*
355 get_expr_block_and_pc (CORE_ADDR
*pc
)
357 const struct block
*block
= get_selected_block (pc
);
361 symtab_and_line cursal
362 = get_current_source_symtab_and_line (current_program_space
);
365 block
= cursal
.symtab
->compunit ()->blockvector ()->static_block ();
368 *pc
= block
->entry_pc ();
371 *pc
= block
->entry_pc ();
376 /* String for 'set compile-args' and 'show compile-args'. */
377 static std::string compile_args
=
378 /* Override flags possibly coming from DW_AT_producer. */
380 /* We use -fPIE Otherwise GDB would need to reserve space large enough for
381 any object file in the inferior in advance to get the final address when
382 to link the object file to and additionally the default system linker
383 script would need to be modified so that one can specify there the
384 absolute target address.
385 -fPIC is not used at is would require from GDB to generate .got. */
387 /* We want warnings, except for some commonly happening for GDB commands. */
389 " -Wno-unused-but-set-variable"
390 " -Wno-unused-variable"
391 /* Override CU's possible -fstack-protector-strong. */
392 " -fno-stack-protector";
394 /* Parsed form of COMPILE_ARGS. */
395 static gdb_argv compile_args_argv
;
397 /* Implement 'set compile-args'. */
400 set_compile_args (const char *args
, int from_tty
, struct cmd_list_element
*c
)
402 compile_args_argv
= gdb_argv (compile_args
.c_str ());
405 /* Implement 'show compile-args'. */
408 show_compile_args (struct ui_file
*file
, int from_tty
,
409 struct cmd_list_element
*c
, const char *value
)
411 gdb_printf (file
, _("Compile command command-line arguments "
416 /* String for 'set compile-gcc' and 'show compile-gcc'. */
417 static std::string compile_gcc
;
419 /* Implement 'show compile-gcc'. */
422 show_compile_gcc (struct ui_file
*file
, int from_tty
,
423 struct cmd_list_element
*c
, const char *value
)
425 gdb_printf (file
, _("Compile command GCC driver filename is \"%s\".\n"),
429 /* Return DW_AT_producer parsed for get_selected_frame () (if any).
430 Return NULL otherwise.
432 GCC already filters its command-line arguments only for the suitable ones to
433 put into DW_AT_producer - see GCC function gen_producer_string. */
436 get_selected_pc_producer_options (void)
438 CORE_ADDR pc
= get_frame_pc (get_selected_frame (NULL
));
439 struct compunit_symtab
*symtab
= find_pc_compunit_symtab (pc
);
442 if (symtab
== NULL
|| symtab
->producer () == NULL
443 || !startswith (symtab
->producer (), "GNU "))
446 cs
= symtab
->producer ();
447 while (*cs
!= 0 && *cs
!= '-')
448 cs
= skip_spaces (skip_to_space (cs
));
454 /* Filter out unwanted options from ARGV. */
457 filter_args (char **argv
)
461 for (destv
= argv
; *argv
!= NULL
; argv
++)
463 /* -fpreprocessed may get in commonly from ccache. */
464 if (strcmp (*argv
, "-fpreprocessed") == 0)
474 /* Produce final vector of GCC compilation options.
476 The first element of the combined argument vector are arguments
477 relating to the target size ("-m64", "-m32" etc.). These are
478 sourced from the inferior's architecture.
480 The second element of the combined argument vector are arguments
481 stored in the inferior DW_AT_producer section. If these are stored
482 in the inferior (there is no guarantee that they are), they are
485 The third element of the combined argument vector are argument
486 supplied by the language implementation provided by
487 compile-{lang}-support. These contain language specific arguments.
489 The final element of the combined argument vector are arguments
490 supplied by the "set compile-args" command. These are always
491 appended last so as to override any of the arguments automatically
495 get_args (const compile_instance
*compiler
, struct gdbarch
*gdbarch
)
497 const char *cs_producer_options
;
500 std::string gcc_options
= gdbarch_gcc_target_options (gdbarch
);
502 /* Make sure we have a non-empty set of options, otherwise GCC will
503 error out trying to look for a filename that is an empty string. */
504 if (!gcc_options
.empty ())
505 result
= gdb_argv (gcc_options
.c_str ());
507 cs_producer_options
= get_selected_pc_producer_options ();
508 if (cs_producer_options
!= NULL
)
510 gdb_argv
argv_producer (cs_producer_options
);
511 filter_args (argv_producer
.get ());
513 result
.append (std::move (argv_producer
));
516 result
.append (gdb_argv (compiler
->gcc_target_options ().c_str ()));
517 result
.append (compile_args_argv
);
522 /* A helper function suitable for use as the "print_callback" in the
526 print_callback (void *ignore
, const char *message
)
528 gdb_puts (message
, gdb_stderr
);
531 /* Helper for compile_to_object, to find the compile context
532 based on the current language. */
533 static std::unique_ptr
<compile_instance
>
534 get_language_compile_context ()
536 switch (current_language
->la_language
)
539 return c_get_compile_context ();
541 return cplus_get_compile_context ();
547 /* Helper for compile_to_object, to call the correct
548 compute_program based on the current language. */
550 compute_program_language (compile_instance
*inst
, const char *input
,
551 struct gdbarch
*gdbarch
,
552 const struct block
*block
,
555 switch (current_language
->la_language
)
558 return c_compute_program (inst
, input
, gdbarch
, block
, pc
);
560 return cplus_compute_program (inst
, input
, gdbarch
, block
, pc
);
562 gdb_assert_not_reached ("Unsupported language");
566 /* Process the compilation request. On success it returns the object
567 and source file names. On an error condition, error () is
570 static compile_file_names
571 compile_to_object (struct command_line
*cmd
, const char *cmd_string
,
572 enum compile_i_scope_types scope
)
574 const struct block
*expr_block
;
575 CORE_ADDR trash_pc
, expr_pc
;
577 struct gdbarch
*gdbarch
= get_current_arch ();
578 std::string triplet_rx
;
580 if (!target_has_execution ())
581 error (_("The program must be running for the compile command to "\
584 expr_block
= get_expr_block_and_pc (&trash_pc
);
585 expr_pc
= get_frame_address_in_block (get_selected_frame (NULL
));
587 /* Set up instance and context for the compiler. */
588 std::unique_ptr
<compile_instance
> compiler
589 = get_language_compile_context ();
591 if (compiler
== nullptr)
592 error (_("No compiler support for language %s."),
593 current_language
->name ());
594 compiler
->set_print_callback (print_callback
, NULL
);
595 compiler
->set_scope (scope
);
596 compiler
->set_block (expr_block
);
598 /* From the provided expression, build a scope to pass to the
601 string_file input_buf
;
606 struct command_line
*iter
;
608 for (iter
= cmd
->body_list_0
.get (); iter
; iter
= iter
->next
)
610 input_buf
.puts (iter
->line
);
611 input_buf
.puts ("\n");
614 input
= input_buf
.c_str ();
616 else if (cmd_string
!= NULL
)
619 error (_("Neither a simple expression, or a multi-line specified."));
622 = compute_program_language (compiler
.get (), input
, gdbarch
,
623 expr_block
, expr_pc
);
625 gdb_printf (gdb_stdlog
, "debug output:\n\n%s", code
.c_str ());
627 compiler
->set_verbose (compile_debug
);
629 if (!compile_gcc
.empty ())
631 if (compiler
->version () < GCC_FE_VERSION_1
)
632 error (_("Command 'set compile-gcc' requires GCC version 6 or higher "
633 "(libcc1 interface version 1 or higher)"));
635 compiler
->set_driver_filename (compile_gcc
.c_str ());
639 const char *os_rx
= osabi_triplet_regexp (gdbarch_osabi (gdbarch
));
640 const char *arch_rx
= gdbarch_gnu_triplet_regexp (gdbarch
);
642 /* Allow triplets with or without vendor set. */
643 triplet_rx
= std::string (arch_rx
) + "(-[^-]*)?-";
644 if (os_rx
!= nullptr)
646 compiler
->set_triplet_regexp (triplet_rx
.c_str ());
649 /* Set compiler command-line arguments. */
650 gdb_argv argv_holder
= get_args (compiler
.get (), gdbarch
);
651 int argc
= argv_holder
.count ();
652 char **argv
= argv_holder
.get ();
654 gdb::unique_xmalloc_ptr
<char> error_message
655 = compiler
->set_arguments (argc
, argv
, triplet_rx
.c_str ());
657 if (error_message
!= NULL
)
658 error ("%s", error_message
.get ());
664 gdb_printf (gdb_stdlog
, "Passing %d compiler options:\n", argc
);
665 for (argi
= 0; argi
< argc
; argi
++)
666 gdb_printf (gdb_stdlog
, "Compiler option %d: <%s>\n",
670 compile_file_names fnames
= get_new_file_names ();
672 std::optional
<gdb::unlinker
> source_remover
;
675 gdb_file_up src
= gdb_fopen_cloexec (fnames
.source_file (), "w");
677 perror_with_name (_("Could not open source file for writing"));
679 source_remover
.emplace (fnames
.source_file ());
681 if (fputs (code
.c_str (), src
.get ()) == EOF
)
682 perror_with_name (_("Could not write to source file"));
686 gdb_printf (gdb_stdlog
, "source file produced: %s\n\n",
687 fnames
.source_file ());
689 /* If we don't do this, then GDB simply exits
690 when the compiler dies. */
691 scoped_ignore_sigpipe ignore_sigpipe
;
693 /* Call the compiler and start the compilation process. */
694 compiler
->set_source_file (fnames
.source_file ());
695 ok
= compiler
->compile (fnames
.object_file (), compile_debug
);
697 error (_("Compilation failed."));
700 gdb_printf (gdb_stdlog
, "object file produced: %s\n\n",
701 fnames
.object_file ());
703 /* Keep the source file. */
704 source_remover
->keep ();
708 /* The "compile" prefix command. */
711 compile_command (const char *args
, int from_tty
)
713 /* If a sub-command is not specified to the compile prefix command,
714 assume it is a direct code compilation. */
715 compile_code_command (args
, from_tty
);
721 eval_compile_command (struct command_line
*cmd
, const char *cmd_string
,
722 enum compile_i_scope_types scope
, void *scope_data
)
724 compile_file_names fnames
= compile_to_object (cmd
, cmd_string
, scope
);
726 gdb::unlinker
object_remover (fnames
.object_file ());
727 gdb::unlinker
source_remover (fnames
.source_file ());
729 compile_module_up compile_module
= compile_object_load (fnames
, scope
,
731 if (compile_module
== NULL
)
733 gdb_assert (scope
== COMPILE_I_PRINT_ADDRESS_SCOPE
);
734 eval_compile_command (cmd
, cmd_string
,
735 COMPILE_I_PRINT_VALUE_SCOPE
, scope_data
);
739 /* Keep the files. */
740 source_remover
.keep ();
741 object_remover
.keep ();
743 compile_object_run (std::move (compile_module
));
746 /* See compile/compile-internal.h. */
749 compile_register_name_mangled (struct gdbarch
*gdbarch
, int regnum
)
751 const char *regname
= gdbarch_register_name (gdbarch
, regnum
);
753 return string_printf ("__%s", regname
);
756 /* See compile/compile-internal.h. */
759 compile_register_name_demangle (struct gdbarch
*gdbarch
,
764 if (regname
[0] != '_' || regname
[1] != '_')
765 error (_("Invalid register name \"%s\"."), regname
);
768 for (regnum
= 0; regnum
< gdbarch_num_regs (gdbarch
); regnum
++)
769 if (strcmp (regname
, gdbarch_register_name (gdbarch
, regnum
)) == 0)
772 error (_("Cannot find gdbarch register \"%s\"."), regname
);
775 /* Forwards to the plug-in. */
777 #define FORWARD(OP,...) (m_gcc_fe->ops->OP (m_gcc_fe, ##__VA_ARGS__))
779 /* See compile-internal.h. */
782 compile_instance::set_print_callback
783 (void (*print_function
) (void *, const char *), void *datum
)
785 FORWARD (set_print_callback
, print_function
, datum
);
788 /* See compile-internal.h. */
791 compile_instance::version () const
793 return m_gcc_fe
->ops
->version
;
796 /* See compile-internal.h. */
799 compile_instance::set_verbose (int level
)
801 if (version () >= GCC_FE_VERSION_1
)
802 FORWARD (set_verbose
, level
);
805 /* See compile-internal.h. */
808 compile_instance::set_driver_filename (const char *filename
)
810 if (version () >= GCC_FE_VERSION_1
)
811 FORWARD (set_driver_filename
, filename
);
814 /* See compile-internal.h. */
817 compile_instance::set_triplet_regexp (const char *regexp
)
819 if (version () >= GCC_FE_VERSION_1
)
820 FORWARD (set_triplet_regexp
, regexp
);
823 /* See compile-internal.h. */
825 gdb::unique_xmalloc_ptr
<char>
826 compile_instance::set_arguments (int argc
, char **argv
, const char *regexp
)
828 if (version () >= GCC_FE_VERSION_1
)
829 return gdb::unique_xmalloc_ptr
<char> (FORWARD (set_arguments
, argc
, argv
));
831 return gdb::unique_xmalloc_ptr
<char> (FORWARD (set_arguments_v0
, regexp
,
835 /* See compile-internal.h. */
838 compile_instance::set_source_file (const char *filename
)
840 FORWARD (set_source_file
, filename
);
843 /* See compile-internal.h. */
846 compile_instance::compile (const char *filename
, int verbose_level
)
848 if (version () >= GCC_FE_VERSION_1
)
849 return FORWARD (compile
, filename
);
851 return FORWARD (compile_v0
, filename
, verbose_level
);
856 #else /* HAVE_COMPILE */
858 /* The "compile" prefix command, when support was disabled. */
861 compile_command (const char *args
, int from_tty
)
863 error (_("This command is not supported."));
866 #endif /* HAVE_COMPILE */
869 cmd_list_element
*compile_cmd_element
= nullptr;
871 INIT_GDB_FILE (compile
)
873 compile_cmd_element
= add_prefix_cmd ("compile", class_obscure
,
877 Command to compile source code and inject it into the inferior."),
878 #else /* HAVE_COMPILE */
880 Command to compile source code and inject it into the inferior.\n\
882 Code compilation and injection is not supported in this copy of GDB.\n\
883 This command is only a placeholder."),
884 #endif /* HAVE_COMPILE */
885 &compile_command_list
, 1, &cmdlist
);
886 add_com_alias ("expression", compile_cmd_element
, class_obscure
, 0);
890 struct cmd_list_element
*c
= NULL
;
892 const auto compile_opts
= make_compile_options_def_group (nullptr);
894 static const std::string compile_code_help
895 = gdb::option::build_help (_("\
896 Compile, inject, and execute code.\n\
898 Usage: compile code [OPTION]... [CODE]\n\
903 The source code may be specified as a simple one line expression, e.g.:\n\
905 compile code printf(\"Hello world\\n\");\n\
907 Alternatively, you can type a multiline expression by invoking\n\
908 this command with no argument. GDB will then prompt for the\n\
909 expression interactively; type a line containing \"end\" to\n\
910 indicate the end of the expression."),
913 c
= add_cmd ("code", class_obscure
, compile_code_command
,
914 compile_code_help
.c_str (),
915 &compile_command_list
);
916 set_cmd_completer_handle_brkchars (c
, compile_code_command_completer
);
918 static const std::string compile_file_help
919 = gdb::option::build_help (_("\
920 Evaluate a file containing source code.\n\
922 Usage: compile file [OPTION].. [FILENAME]\n\
928 c
= add_cmd ("file", class_obscure
, compile_file_command
,
929 compile_file_help
.c_str (),
930 &compile_command_list
);
931 set_cmd_completer_handle_brkchars (c
, compile_file_command_completer
);
933 const auto compile_print_opts
= make_value_print_options_def_group (nullptr);
935 static const std::string compile_print_help
936 = gdb::option::build_help (_("\
937 Evaluate EXPR by using the compiler and print result.\n\
939 Usage: compile print [[OPTION]... --] [/FMT] [EXPR]\n\
944 Note: because this command accepts arbitrary expressions, if you\n\
945 specify any command option, you must use a double dash (\"--\")\n\
946 to mark the end of option processing. E.g.: \"compile print -o -- myobj\".\n\
948 The expression may be specified on the same line as the command, e.g.:\n\
952 Alternatively, you can type a multiline expression by invoking\n\
953 this command with no argument. GDB will then prompt for the\n\
954 expression interactively; type a line containing \"end\" to\n\
955 indicate the end of the expression.\n\
957 EXPR may be preceded with /FMT, where FMT is a format letter\n\
958 but no count or size letter (see \"x\" command)."),
961 c
= add_cmd ("print", class_obscure
, compile_print_command
,
962 compile_print_help
.c_str (),
963 &compile_command_list
);
964 set_cmd_completer_handle_brkchars (c
, print_command_completer
);
966 add_setshow_boolean_cmd ("compile", class_maintenance
, &compile_debug
, _("\
967 Set compile command debugging."), _("\
968 Show compile command debugging."), _("\
969 When on, compile command debugging is enabled."),
970 NULL
, show_compile_debug
,
971 &setdebuglist
, &showdebuglist
);
973 add_setshow_string_cmd ("compile-args", class_support
,
975 _("Set compile command GCC command-line arguments."),
976 _("Show compile command GCC command-line arguments."),
978 Use options like -I (include file directory) or ABI settings.\n\
979 String quoting is parsed like in shell, for example:\n\
980 -mno-align-double \"-I/dir with a space/include\""),
981 set_compile_args
, show_compile_args
, &setlist
, &showlist
);
984 /* Initialize compile_args_argv. */
985 set_compile_args (compile_args
.c_str (), 0, NULL
);
987 add_setshow_optional_filename_cmd ("compile-gcc", class_support
,
989 _("Set compile command "
990 "GCC driver filename."),
991 _("Show compile command "
992 "GCC driver filename."),
994 It should be absolute filename of the gcc executable.\n\
995 If empty the default target triplet will be searched in $PATH."),
996 NULL
, show_compile_gcc
, &setlist
,
998 #endif /* HAVE_COMPILE */