Really fix data-directory/Makefile rebuilding
[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;
9b8ffbf4 603 gdb_argv result;
bb2ec1b3 604
9b8ffbf4
LM
605 std::string gcc_options = gdbarch_gcc_target_options (gdbarch);
606
607 /* Make sure we have a non-empty set of options, otherwise GCC will
608 error out trying to look for a filename that is an empty string. */
609 if (!gcc_options.empty ())
610 result = gdb_argv (gcc_options.c_str ());
bb2ec1b3
TT
611
612 cs_producer_options = get_selected_pc_producer_options ();
613 if (cs_producer_options != NULL)
614 {
bac51ab7
TT
615 gdb_argv argv_producer (cs_producer_options);
616 filter_args (argv_producer.get ());
bb2ec1b3 617
bac51ab7 618 result.append (std::move (argv_producer));
bb2ec1b3
TT
619 }
620
bac51ab7
TT
621 result.append (gdb_argv (compiler->gcc_target_options ().c_str ()));
622 result.append (compile_args_argv);
bb2ec1b3 623
bac51ab7 624 return result;
bb2ec1b3
TT
625}
626
bb2ec1b3
TT
627/* A helper function suitable for use as the "print_callback" in the
628 compiler object. */
629
630static void
631print_callback (void *ignore, const char *message)
632{
633 fputs_filtered (message, gdb_stderr);
634}
635
636/* Process the compilation request. On success it returns the object
aaee65ae
PA
637 and source file names. On an error condition, error () is
638 called. */
bb2ec1b3 639
aaee65ae 640static compile_file_names
851c9091 641compile_to_object (struct command_line *cmd, const char *cmd_string,
aaee65ae 642 enum compile_i_scope_types scope)
bb2ec1b3 643{
bb2ec1b3
TT
644 const struct block *expr_block;
645 CORE_ADDR trash_pc, expr_pc;
bb2ec1b3 646 int ok;
bb2ec1b3 647 struct gdbarch *gdbarch = get_current_arch ();
7d937cad 648 std::string triplet_rx;
bb2ec1b3 649
55f6301a 650 if (!target_has_execution ())
bb2ec1b3
TT
651 error (_("The program must be running for the compile command to "\
652 "work."));
653
654 expr_block = get_expr_block_and_pc (&trash_pc);
655 expr_pc = get_frame_address_in_block (get_selected_frame (NULL));
656
657 /* Set up instance and context for the compiler. */
bdfea17e
TT
658 std::unique_ptr<compile_instance> compiler
659 = current_language->get_compile_instance ();
8e25bafe 660 if (compiler == nullptr)
cdaec3f3 661 error (_("No compiler support for language %s."),
6f7664a9 662 current_language->name ());
9cdfd9a2
KS
663 compiler->set_print_callback (print_callback, NULL);
664 compiler->set_scope (scope);
665 compiler->set_block (expr_block);
bb2ec1b3
TT
666
667 /* From the provided expression, build a scope to pass to the
668 compiler. */
aaee65ae 669
d7e74731 670 string_file input_buf;
aaee65ae
PA
671 const char *input;
672
bb2ec1b3
TT
673 if (cmd != NULL)
674 {
bb2ec1b3
TT
675 struct command_line *iter;
676
12973681 677 for (iter = cmd->body_list_0.get (); iter; iter = iter->next)
bb2ec1b3 678 {
d7e74731
PA
679 input_buf.puts (iter->line);
680 input_buf.puts ("\n");
bb2ec1b3
TT
681 }
682
aaee65ae 683 input = input_buf.c_str ();
bb2ec1b3
TT
684 }
685 else if (cmd_string != NULL)
851c9091 686 input = cmd_string;
bb2ec1b3
TT
687 else
688 error (_("Neither a simple expression, or a multi-line specified."));
689
aaee65ae 690 std::string code
9a49ad8c
AB
691 = current_language->compute_program (compiler.get (), input, gdbarch,
692 expr_block, expr_pc);
bb2ec1b3 693 if (compile_debug)
aaee65ae 694 fprintf_unfiltered (gdb_stdlog, "debug output:\n\n%s", code.c_str ());
bb2ec1b3 695
9cdfd9a2 696 compiler->set_verbose (compile_debug);
71b30f27 697
6e41ddec
JK
698 if (compile_gcc[0] != 0)
699 {
9cdfd9a2 700 if (compiler->version () < GCC_FE_VERSION_1)
6e41ddec
JK
701 error (_("Command 'set compile-gcc' requires GCC version 6 or higher "
702 "(libcc1 interface version 1 or higher)"));
703
9cdfd9a2 704 compiler->set_driver_filename (compile_gcc);
6e41ddec
JK
705 }
706 else
707 {
708 const char *os_rx = osabi_triplet_regexp (gdbarch_osabi (gdbarch));
709 const char *arch_rx = gdbarch_gnu_triplet_regexp (gdbarch);
710
711 /* Allow triplets with or without vendor set. */
54585eee
TT
712 triplet_rx = std::string (arch_rx) + "(-[^-]*)?-";
713 if (os_rx != nullptr)
714 triplet_rx += os_rx;
9cdfd9a2 715 compiler->set_triplet_regexp (triplet_rx.c_str ());
6e41ddec 716 }
bb2ec1b3
TT
717
718 /* Set compiler command-line arguments. */
bac51ab7
TT
719 gdb_argv argv_holder = get_args (compiler.get (), gdbarch);
720 int argc = argv_holder.count ();
721 char **argv = argv_holder.get ();
bb2ec1b3 722
9f7f6cb8
TT
723 gdb::unique_xmalloc_ptr<char> error_message
724 = compiler->set_arguments (argc, argv, triplet_rx.c_str ());
9cdfd9a2 725
bb2ec1b3 726 if (error_message != NULL)
9cdfd9a2 727 error ("%s", error_message.get ());
bb2ec1b3
TT
728
729 if (compile_debug)
730 {
731 int argi;
732
a4063588 733 fprintf_unfiltered (gdb_stdlog, "Passing %d compiler options:\n", argc);
bb2ec1b3 734 for (argi = 0; argi < argc; argi++)
a4063588 735 fprintf_unfiltered (gdb_stdlog, "Compiler option %d: <%s>\n",
bb2ec1b3
TT
736 argi, argv[argi]);
737 }
738
aaee65ae 739 compile_file_names fnames = get_new_file_names ();
bb2ec1b3 740
b80cf838
TT
741 gdb::optional<gdb::unlinker> source_remover;
742
d419f42d
TT
743 {
744 gdb_file_up src = gdb_fopen_cloexec (fnames.source_file (), "w");
745 if (src == NULL)
746 perror_with_name (_("Could not open source file for writing"));
b80cf838
TT
747
748 source_remover.emplace (fnames.source_file ());
749
d419f42d
TT
750 if (fputs (code.c_str (), src.get ()) == EOF)
751 perror_with_name (_("Could not write to source file"));
752 }
bb2ec1b3
TT
753
754 if (compile_debug)
a4063588 755 fprintf_unfiltered (gdb_stdlog, "source file produced: %s\n\n",
aaee65ae 756 fnames.source_file ());
bb2ec1b3
TT
757
758 /* Call the compiler and start the compilation process. */
9cdfd9a2
KS
759 compiler->set_source_file (fnames.source_file ());
760 ok = compiler->compile (fnames.object_file (), compile_debug);
e68c32d5 761 if (!ok)
bb2ec1b3
TT
762 error (_("Compilation failed."));
763
764 if (compile_debug)
a4063588 765 fprintf_unfiltered (gdb_stdlog, "object file produced: %s\n\n",
aaee65ae 766 fnames.object_file ());
bb2ec1b3 767
b80cf838
TT
768 /* Keep the source file. */
769 source_remover->keep ();
aaee65ae 770 return fnames;
bb2ec1b3
TT
771}
772
773/* The "compile" prefix command. */
774
775static void
981a3fb3 776compile_command (const char *args, int from_tty)
bb2ec1b3
TT
777{
778 /* If a sub-command is not specified to the compile prefix command,
779 assume it is a direct code compilation. */
780 compile_code_command (args, from_tty);
781}
782
783/* See compile.h. */
784
785void
851c9091 786eval_compile_command (struct command_line *cmd, const char *cmd_string,
5c65b58a 787 enum compile_i_scope_types scope, void *scope_data)
bb2ec1b3 788{
aaee65ae 789 compile_file_names fnames = compile_to_object (cmd, cmd_string, scope);
bb2ec1b3 790
b80cf838
TT
791 gdb::unlinker object_remover (fnames.object_file ());
792 gdb::unlinker source_remover (fnames.source_file ());
793
e947a848
TT
794 compile_module_up compile_module = compile_object_load (fnames, scope,
795 scope_data);
aaee65ae 796 if (compile_module == NULL)
bb2ec1b3 797 {
aaee65ae
PA
798 gdb_assert (scope == COMPILE_I_PRINT_ADDRESS_SCOPE);
799 eval_compile_command (cmd, cmd_string,
800 COMPILE_I_PRINT_VALUE_SCOPE, scope_data);
801 return;
bb2ec1b3 802 }
b80cf838
TT
803
804 /* Keep the files. */
805 source_remover.keep ();
806 object_remover.keep ();
807
e947a848 808 compile_object_run (std::move (compile_module));
bb2ec1b3
TT
809}
810
811/* See compile/compile-internal.h. */
812
8f84fb0e 813std::string
bb2ec1b3
TT
814compile_register_name_mangled (struct gdbarch *gdbarch, int regnum)
815{
816 const char *regname = gdbarch_register_name (gdbarch, regnum);
817
8f84fb0e 818 return string_printf ("__%s", regname);
bb2ec1b3
TT
819}
820
821/* See compile/compile-internal.h. */
822
823int
824compile_register_name_demangle (struct gdbarch *gdbarch,
825 const char *regname)
826{
827 int regnum;
828
829 if (regname[0] != '_' || regname[1] != '_')
830 error (_("Invalid register name \"%s\"."), regname);
831 regname += 2;
832
833 for (regnum = 0; regnum < gdbarch_num_regs (gdbarch); regnum++)
834 if (strcmp (regname, gdbarch_register_name (gdbarch, regnum)) == 0)
835 return regnum;
836
837 error (_("Cannot find gdbarch register \"%s\"."), regname);
838}
839
9cdfd9a2
KS
840/* Forwards to the plug-in. */
841
842#define FORWARD(OP,...) (m_gcc_fe->ops->OP (m_gcc_fe, ##__VA_ARGS__))
843
844/* See compile-internal.h. */
845
846void
847compile_instance::set_print_callback
848 (void (*print_function) (void *, const char *), void *datum)
849{
850 FORWARD (set_print_callback, print_function, datum);
851}
852
853/* See compile-internal.h. */
854
855unsigned int
856compile_instance::version () const
857{
858 return m_gcc_fe->ops->version;
859}
860
861/* See compile-internal.h. */
862
863void
864compile_instance::set_verbose (int level)
865{
866 if (version () >= GCC_FE_VERSION_1)
867 FORWARD (set_verbose, level);
868}
869
870/* See compile-internal.h. */
871
872void
873compile_instance::set_driver_filename (const char *filename)
874{
875 if (version () >= GCC_FE_VERSION_1)
876 FORWARD (set_driver_filename, filename);
877}
878
879/* See compile-internal.h. */
880
881void
882compile_instance::set_triplet_regexp (const char *regexp)
883{
884 if (version () >= GCC_FE_VERSION_1)
885 FORWARD (set_triplet_regexp, regexp);
886}
887
888/* See compile-internal.h. */
889
9f7f6cb8 890gdb::unique_xmalloc_ptr<char>
9cdfd9a2
KS
891compile_instance::set_arguments (int argc, char **argv, const char *regexp)
892{
893 if (version () >= GCC_FE_VERSION_1)
9f7f6cb8 894 return gdb::unique_xmalloc_ptr<char> (FORWARD (set_arguments, argc, argv));
9cdfd9a2 895 else
9f7f6cb8
TT
896 return gdb::unique_xmalloc_ptr<char> (FORWARD (set_arguments_v0, regexp,
897 argc, argv));
9cdfd9a2
KS
898}
899
900/* See compile-internal.h. */
901
902void
903compile_instance::set_source_file (const char *filename)
904{
905 FORWARD (set_source_file, filename);
906}
907
908/* See compile-internal.h. */
909
910bool
911compile_instance::compile (const char *filename, int verbose_level)
912{
913 if (version () >= GCC_FE_VERSION_1)
914 return FORWARD (compile, filename);
915 else
916 return FORWARD (compile_v0, filename, verbose_level);
917}
918
919#undef FORWARD
920
8588b356
SM
921/* See compile.h. */
922cmd_list_element *compile_cmd_element = nullptr;
9cdfd9a2 923
6c265988 924void _initialize_compile ();
bb2ec1b3 925void
6c265988 926_initialize_compile ()
bb2ec1b3
TT
927{
928 struct cmd_list_element *c = NULL;
929
8588b356
SM
930 compile_cmd_element = add_prefix_cmd ("compile", class_obscure,
931 compile_command, _("\
bb2ec1b3 932Command to compile source code and inject it into the inferior."),
2f822da5 933 &compile_command_list, 1, &cmdlist);
3947f654 934 add_com_alias ("expression", compile_cmd_element, class_obscure, 0);
bb2ec1b3 935
e6ed716c
PA
936 const auto compile_opts = make_compile_options_def_group (nullptr);
937
938 static const std::string compile_code_help
8abfcabc 939 = gdb::option::build_help (_("\
bb2ec1b3
TT
940Compile, inject, and execute code.\n\
941\n\
e6ed716c 942Usage: compile code [OPTION]... [CODE]\n\
bb2ec1b3 943\n\
e6ed716c
PA
944Options:\n\
945%OPTIONS%\n\
590042fc 946\n\
bb2ec1b3
TT
947The source code may be specified as a simple one line expression, e.g.:\n\
948\n\
949 compile code printf(\"Hello world\\n\");\n\
950\n\
36de76f9
JK
951Alternatively, you can type a multiline expression by invoking\n\
952this command with no argument. GDB will then prompt for the\n\
953expression interactively; type a line containing \"end\" to\n\
954indicate the end of the expression."),
e6ed716c 955 compile_opts);
bb2ec1b3 956
e6ed716c
PA
957 c = add_cmd ("code", class_obscure, compile_code_command,
958 compile_code_help.c_str (),
959 &compile_command_list);
960 set_cmd_completer_handle_brkchars (c, compile_code_command_completer);
961
962static const std::string compile_file_help
8abfcabc 963 = gdb::option::build_help (_("\
bb2ec1b3
TT
964Evaluate a file containing source code.\n\
965\n\
e6ed716c
PA
966Usage: compile file [OPTION].. [FILENAME]\n\
967\n\
968Options:\n\
969%OPTIONS%"),
970 compile_opts);
971
972 c = add_cmd ("file", class_obscure, compile_file_command,
973 compile_file_help.c_str (),
bb2ec1b3 974 &compile_command_list);
e6ed716c 975 set_cmd_completer_handle_brkchars (c, compile_file_command_completer);
bb2ec1b3 976
7d8062de
PA
977 const auto compile_print_opts = make_value_print_options_def_group (nullptr);
978
979 static const std::string compile_print_help
8abfcabc 980 = gdb::option::build_help (_("\
36de76f9
JK
981Evaluate EXPR by using the compiler and print result.\n\
982\n\
7d8062de
PA
983Usage: compile print [[OPTION]... --] [/FMT] [EXPR]\n\
984\n\
985Options:\n\
590042fc
PW
986%OPTIONS%\n\
987\n\
7d8062de
PA
988Note: because this command accepts arbitrary expressions, if you\n\
989specify any command option, you must use a double dash (\"--\")\n\
990to mark the end of option processing. E.g.: \"compile print -o -- myobj\".\n\
36de76f9
JK
991\n\
992The expression may be specified on the same line as the command, e.g.:\n\
993\n\
994 compile print i\n\
995\n\
996Alternatively, you can type a multiline expression by invoking\n\
997this command with no argument. GDB will then prompt for the\n\
998expression interactively; type a line containing \"end\" to\n\
999indicate the end of the expression.\n\
1000\n\
1001EXPR may be preceded with /FMT, where FMT is a format letter\n\
1002but no count or size letter (see \"x\" command)."),
7d8062de
PA
1003 compile_print_opts);
1004
1005 c = add_cmd ("print", class_obscure, compile_print_command,
1006 compile_print_help.c_str (),
1007 &compile_command_list);
1008 set_cmd_completer_handle_brkchars (c, print_command_completer);
36de76f9 1009
bb2ec1b3
TT
1010 add_setshow_boolean_cmd ("compile", class_maintenance, &compile_debug, _("\
1011Set compile command debugging."), _("\
1012Show compile command debugging."), _("\
1013When on, compile command debugging is enabled."),
1014 NULL, show_compile_debug,
1015 &setdebuglist, &showdebuglist);
1016
1017 add_setshow_string_cmd ("compile-args", class_support,
1018 &compile_args,
590042fc
PW
1019 _("Set compile command GCC command-line arguments."),
1020 _("Show compile command GCC command-line arguments."),
bb2ec1b3
TT
1021 _("\
1022Use options like -I (include file directory) or ABI settings.\n\
1023String quoting is parsed like in shell, for example:\n\
1024 -mno-align-double \"-I/dir with a space/include\""),
1025 set_compile_args, show_compile_args, &setlist, &showlist);
1026
1027 /* Override flags possibly coming from DW_AT_producer. */
1028 compile_args = xstrdup ("-O0 -gdwarf-4"
4b62a76e 1029 /* We use -fPIE Otherwise GDB would need to reserve space large enough for
bb2ec1b3
TT
1030 any object file in the inferior in advance to get the final address when
1031 to link the object file to and additionally the default system linker
1032 script would need to be modified so that one can specify there the
4b62a76e
JK
1033 absolute target address.
1034 -fPIC is not used at is would require from GDB to generate .got. */
1035 " -fPIE"
3a9558c4
JK
1036 /* We want warnings, except for some commonly happening for GDB commands. */
1037 " -Wall "
3a9558c4
JK
1038 " -Wno-unused-but-set-variable"
1039 " -Wno-unused-variable"
bb2ec1b3
TT
1040 /* Override CU's possible -fstack-protector-strong. */
1041 " -fno-stack-protector"
1042 );
1043 set_compile_args (compile_args, 0, NULL);
6e41ddec
JK
1044
1045 add_setshow_optional_filename_cmd ("compile-gcc", class_support,
1046 &compile_gcc,
1047 _("Set compile command "
590042fc 1048 "GCC driver filename."),
6e41ddec 1049 _("Show compile command "
590042fc 1050 "GCC driver filename."),
6e41ddec
JK
1051 _("\
1052It should be absolute filename of the gcc executable.\n\
1053If empty the default target triplet will be searched in $PATH."),
1054 NULL, show_compile_gcc, &setlist,
1055 &showlist);
1056 compile_gcc = xstrdup ("");
bb2ec1b3 1057}
This page took 0.755153 seconds and 4 git commands to generate.