gdb: remove MSYMBOL_TYPE macro
[binutils-gdb.git] / gdb / compile / compile.c
1 /* General Compile and inject code
2
3 Copyright (C) 2014-2022 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 \f
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 \f
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 (&current_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 gdb::unique_xmalloc_ptr<char> abspath = gdb_abspath (args);
301 std::string buffer = string_printf ("#include \"%s\"\n", abspath.get ());
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 (&current_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 (&current_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 = BLOCKVECTOR_BLOCK (cursal.symtab->compunit ()->blockvector (),
488 STATIC_BLOCK);
489 if (block != NULL)
490 *pc = BLOCK_ENTRY_PC (block);
491 }
492 else
493 *pc = BLOCK_ENTRY_PC (block);
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 }