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