Use gdb::unique_xmalloc_ptr when calling tilde_expand
[deliverable/binutils-gdb.git] / gdb / compile / compile-object-load.c
CommitLineData
bb2ec1b3
TT
1/* Load module for 'compile' command.
2
61baf725 3 Copyright (C) 2014-2017 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"
21#include "compile-object-load.h"
22#include "compile-internal.h"
23#include "command.h"
24#include "objfiles.h"
25#include "gdbcore.h"
26#include "readline/tilde.h"
27#include "bfdlink.h"
28#include "gdbcmd.h"
29#include "regcache.h"
30#include "inferior.h"
31#include "compile.h"
36de76f9 32#include "block.h"
bb2ec1b3 33#include "arch-utils.h"
325fac50 34#include <algorithm>
bb2ec1b3 35
7f361056
JK
36/* Track inferior memory reserved by inferior mmap. */
37
38struct munmap_list
39{
40 struct munmap_list *next;
41 CORE_ADDR addr, size;
42};
43
44/* Add inferior mmap memory range ADDR..ADDR+SIZE (exclusive) to list
45 HEADP. *HEADP needs to be initialized to NULL. */
46
47static void
48munmap_list_add (struct munmap_list **headp, CORE_ADDR addr, CORE_ADDR size)
49{
8d749320 50 struct munmap_list *head_new = XNEW (struct munmap_list);
7f361056
JK
51
52 head_new->next = *headp;
53 *headp = head_new;
54 head_new->addr = addr;
55 head_new->size = size;
56}
57
58/* Free list of inferior mmap memory ranges HEAD. HEAD is the first
59 element of the list, it can be NULL. After calling this function
60 HEAD pointer is invalid and the possible list needs to be
61 reinitialized by caller to NULL. */
62
63void
64munmap_list_free (struct munmap_list *head)
65{
66 while (head)
67 {
68 struct munmap_list *todo = head;
69
70 head = todo->next;
71 gdbarch_infcall_munmap (target_gdbarch (), todo->addr, todo->size);
72 xfree (todo);
73 }
74}
75
76/* Stub for munmap_list_free suitable for make_cleanup. Contrary to
77 munmap_list_free this function's parameter is a pointer to the first
78 list element pointer. */
79
80static void
81munmap_listp_free_cleanup (void *headp_voidp)
82{
9a3c8263 83 struct munmap_list **headp = (struct munmap_list **) headp_voidp;
7f361056
JK
84
85 munmap_list_free (*headp);
86}
87
bb2ec1b3
TT
88/* Helper data for setup_sections. */
89
90struct setup_sections_data
91{
92 /* Size of all recent sections with matching LAST_PROT. */
93 CORE_ADDR last_size;
94
95 /* First section matching LAST_PROT. */
96 asection *last_section_first;
97
98 /* Memory protection like the prot parameter of gdbarch_infcall_mmap. */
99 unsigned last_prot;
100
101 /* Maximum of alignments of all sections matching LAST_PROT.
102 This value is always at least 1. This value is always a power of 2. */
103 CORE_ADDR last_max_alignment;
7f361056
JK
104
105 /* List of inferior mmap ranges where setup_sections should add its
106 next range. */
107 struct munmap_list **munmap_list_headp;
bb2ec1b3
TT
108};
109
110/* Place all ABFD sections next to each other obeying all constraints. */
111
112static void
113setup_sections (bfd *abfd, asection *sect, void *data_voidp)
114{
9a3c8263 115 struct setup_sections_data *data = (struct setup_sections_data *) data_voidp;
bb2ec1b3
TT
116 CORE_ADDR alignment;
117 unsigned prot;
118
119 if (sect != NULL)
120 {
121 /* It is required by later bfd_get_relocated_section_contents. */
122 if (sect->output_section == NULL)
123 sect->output_section = sect;
124
125 if ((bfd_get_section_flags (abfd, sect) & SEC_ALLOC) == 0)
126 return;
127
bb2b33b9 128 /* Make the memory always readable. */
bb2ec1b3
TT
129 prot = GDB_MMAP_PROT_READ;
130 if ((bfd_get_section_flags (abfd, sect) & SEC_READONLY) == 0)
131 prot |= GDB_MMAP_PROT_WRITE;
132 if ((bfd_get_section_flags (abfd, sect) & SEC_CODE) != 0)
133 prot |= GDB_MMAP_PROT_EXEC;
134
135 if (compile_debug)
a4063588 136 fprintf_unfiltered (gdb_stdlog,
bb2ec1b3
TT
137 "module \"%s\" section \"%s\" size %s prot %u\n",
138 bfd_get_filename (abfd),
139 bfd_get_section_name (abfd, sect),
140 paddress (target_gdbarch (),
141 bfd_get_section_size (sect)),
142 prot);
143 }
144 else
145 prot = -1;
146
147 if (sect == NULL
148 || (data->last_prot != prot && bfd_get_section_size (sect) != 0))
149 {
150 CORE_ADDR addr;
151 asection *sect_iter;
152
153 if (data->last_size != 0)
154 {
155 addr = gdbarch_infcall_mmap (target_gdbarch (), data->last_size,
156 data->last_prot);
7f361056 157 munmap_list_add (data->munmap_list_headp, addr, data->last_size);
bb2ec1b3 158 if (compile_debug)
a4063588 159 fprintf_unfiltered (gdb_stdlog,
bb2ec1b3
TT
160 "allocated %s bytes at %s prot %u\n",
161 paddress (target_gdbarch (), data->last_size),
162 paddress (target_gdbarch (), addr),
163 data->last_prot);
164 }
165 else
166 addr = 0;
167
168 if ((addr & (data->last_max_alignment - 1)) != 0)
169 error (_("Inferior compiled module address %s "
170 "is not aligned to BFD required %s."),
171 paddress (target_gdbarch (), addr),
172 paddress (target_gdbarch (), data->last_max_alignment));
173
174 for (sect_iter = data->last_section_first; sect_iter != sect;
175 sect_iter = sect_iter->next)
176 if ((bfd_get_section_flags (abfd, sect_iter) & SEC_ALLOC) != 0)
177 bfd_set_section_vma (abfd, sect_iter,
178 addr + bfd_get_section_vma (abfd, sect_iter));
179
180 data->last_size = 0;
181 data->last_section_first = sect;
182 data->last_prot = prot;
183 data->last_max_alignment = 1;
184 }
185
186 if (sect == NULL)
187 return;
188
189 alignment = ((CORE_ADDR) 1) << bfd_get_section_alignment (abfd, sect);
325fac50 190 data->last_max_alignment = std::max (data->last_max_alignment, alignment);
bb2ec1b3
TT
191
192 data->last_size = (data->last_size + alignment - 1) & -alignment;
193
194 bfd_set_section_vma (abfd, sect, data->last_size);
195
196 data->last_size += bfd_get_section_size (sect);
197 data->last_size = (data->last_size + alignment - 1) & -alignment;
198}
199
200/* Helper for link_callbacks callbacks vector. */
201
1a72702b 202static void
bb2ec1b3
TT
203link_callbacks_multiple_definition (struct bfd_link_info *link_info,
204 struct bfd_link_hash_entry *h, bfd *nbfd,
205 asection *nsec, bfd_vma nval)
206{
207 bfd *abfd = link_info->input_bfds;
208
209 if (link_info->allow_multiple_definition)
1a72702b 210 return;
8e8347b8 211 warning (_("Compiled module \"%s\": multiple symbol definitions: %s"),
bb2ec1b3 212 bfd_get_filename (abfd), h->root.string);
bb2ec1b3
TT
213}
214
215/* Helper for link_callbacks callbacks vector. */
216
1a72702b 217static void
bb2ec1b3
TT
218link_callbacks_warning (struct bfd_link_info *link_info, const char *xwarning,
219 const char *symbol, bfd *abfd, asection *section,
220 bfd_vma address)
221{
8e8347b8 222 warning (_("Compiled module \"%s\" section \"%s\": warning: %s"),
bb2ec1b3
TT
223 bfd_get_filename (abfd), bfd_get_section_name (abfd, section),
224 xwarning);
bb2ec1b3
TT
225}
226
227/* Helper for link_callbacks callbacks vector. */
228
1a72702b 229static void
bb2ec1b3
TT
230link_callbacks_undefined_symbol (struct bfd_link_info *link_info,
231 const char *name, bfd *abfd, asection *section,
232 bfd_vma address, bfd_boolean is_fatal)
233{
234 warning (_("Cannot resolve relocation to \"%s\" "
235 "from compiled module \"%s\" section \"%s\"."),
236 name, bfd_get_filename (abfd), bfd_get_section_name (abfd, section));
bb2ec1b3
TT
237}
238
239/* Helper for link_callbacks callbacks vector. */
240
1a72702b 241static void
bb2ec1b3
TT
242link_callbacks_reloc_overflow (struct bfd_link_info *link_info,
243 struct bfd_link_hash_entry *entry,
244 const char *name, const char *reloc_name,
245 bfd_vma addend, bfd *abfd, asection *section,
246 bfd_vma address)
247{
bb2ec1b3
TT
248}
249
250/* Helper for link_callbacks callbacks vector. */
251
1a72702b 252static void
bb2ec1b3
TT
253link_callbacks_reloc_dangerous (struct bfd_link_info *link_info,
254 const char *message, bfd *abfd,
255 asection *section, bfd_vma address)
256{
257 warning (_("Compiled module \"%s\" section \"%s\": dangerous "
258 "relocation: %s\n"),
259 bfd_get_filename (abfd), bfd_get_section_name (abfd, section),
260 message);
bb2ec1b3
TT
261}
262
263/* Helper for link_callbacks callbacks vector. */
264
1a72702b 265static void
bb2ec1b3
TT
266link_callbacks_unattached_reloc (struct bfd_link_info *link_info,
267 const char *name, bfd *abfd, asection *section,
268 bfd_vma address)
269{
270 warning (_("Compiled module \"%s\" section \"%s\": unattached "
271 "relocation: %s\n"),
272 bfd_get_filename (abfd), bfd_get_section_name (abfd, section),
273 name);
bb2ec1b3
TT
274}
275
276/* Helper for link_callbacks callbacks vector. */
277
77b64a49
PA
278static void link_callbacks_einfo (const char *fmt, ...)
279 ATTRIBUTE_PRINTF (1, 2);
280
bb2ec1b3
TT
281static void
282link_callbacks_einfo (const char *fmt, ...)
283{
284 struct cleanup *cleanups;
285 va_list ap;
286 char *str;
287
288 va_start (ap, fmt);
289 str = xstrvprintf (fmt, ap);
290 va_end (ap);
291 cleanups = make_cleanup (xfree, str);
292
8e8347b8 293 warning (_("Compile module: warning: %s"), str);
bb2ec1b3
TT
294
295 do_cleanups (cleanups);
296}
297
298/* Helper for bfd_get_relocated_section_contents.
299 Only these symbols are set by bfd_simple_get_relocated_section_contents
300 but bfd/ seems to use even the NULL ones without checking them first. */
301
302static const struct bfd_link_callbacks link_callbacks =
303{
304 NULL, /* add_archive_element */
305 link_callbacks_multiple_definition, /* multiple_definition */
306 NULL, /* multiple_common */
307 NULL, /* add_to_set */
308 NULL, /* constructor */
309 link_callbacks_warning, /* warning */
310 link_callbacks_undefined_symbol, /* undefined_symbol */
311 link_callbacks_reloc_overflow, /* reloc_overflow */
312 link_callbacks_reloc_dangerous, /* reloc_dangerous */
313 link_callbacks_unattached_reloc, /* unattached_reloc */
314 NULL, /* notice */
315 link_callbacks_einfo, /* einfo */
316 NULL, /* info */
317 NULL, /* minfo */
318 NULL, /* override_segment_assignment */
319};
320
321struct link_hash_table_cleanup_data
322{
323 bfd *abfd;
324 bfd *link_next;
325};
326
327/* Cleanup callback for struct bfd_link_info. */
328
329static void
330link_hash_table_free (void *d)
331{
9a3c8263
SM
332 struct link_hash_table_cleanup_data *data
333 = (struct link_hash_table_cleanup_data *) d;
bb2ec1b3
TT
334
335 if (data->abfd->is_linker_output)
336 (*data->abfd->link.hash->hash_table_free) (data->abfd);
337 data->abfd->link.next = data->link_next;
338}
339
340/* Relocate and store into inferior memory each section SECT of ABFD. */
341
342static void
343copy_sections (bfd *abfd, asection *sect, void *data)
344{
9a3c8263 345 asymbol **symbol_table = (asymbol **) data;
bb2ec1b3
TT
346 bfd_byte *sect_data, *sect_data_got;
347 struct cleanup *cleanups;
348 struct bfd_link_info link_info;
349 struct bfd_link_order link_order;
350 CORE_ADDR inferior_addr;
351 struct link_hash_table_cleanup_data cleanup_data;
352
353 if ((bfd_get_section_flags (abfd, sect) & (SEC_ALLOC | SEC_LOAD))
354 != (SEC_ALLOC | SEC_LOAD))
355 return;
356
357 if (bfd_get_section_size (sect) == 0)
358 return;
359
360 /* Mostly a copy of bfd_simple_get_relocated_section_contents which GDB
361 cannot use as it does not report relocations to undefined symbols. */
362 memset (&link_info, 0, sizeof (link_info));
363 link_info.output_bfd = abfd;
364 link_info.input_bfds = abfd;
365 link_info.input_bfds_tail = &abfd->link.next;
366
367 cleanup_data.abfd = abfd;
368 cleanup_data.link_next = abfd->link.next;
369
370 abfd->link.next = NULL;
371 link_info.hash = bfd_link_hash_table_create (abfd);
372
373 cleanups = make_cleanup (link_hash_table_free, &cleanup_data);
374 link_info.callbacks = &link_callbacks;
375
376 memset (&link_order, 0, sizeof (link_order));
377 link_order.next = NULL;
378 link_order.type = bfd_indirect_link_order;
379 link_order.offset = 0;
380 link_order.size = bfd_get_section_size (sect);
381 link_order.u.indirect.section = sect;
382
224c3ddb 383 sect_data = (bfd_byte *) xmalloc (bfd_get_section_size (sect));
bb2ec1b3
TT
384 make_cleanup (xfree, sect_data);
385
386 sect_data_got = bfd_get_relocated_section_contents (abfd, &link_info,
387 &link_order, sect_data,
388 FALSE, symbol_table);
389
390 if (sect_data_got == NULL)
391 error (_("Cannot map compiled module \"%s\" section \"%s\": %s"),
392 bfd_get_filename (abfd), bfd_get_section_name (abfd, sect),
393 bfd_errmsg (bfd_get_error ()));
394 gdb_assert (sect_data_got == sect_data);
395
396 inferior_addr = bfd_get_section_vma (abfd, sect);
397 if (0 != target_write_memory (inferior_addr, sect_data,
398 bfd_get_section_size (sect)))
399 error (_("Cannot write compiled module \"%s\" section \"%s\" "
400 "to inferior memory range %s-%s."),
401 bfd_get_filename (abfd), bfd_get_section_name (abfd, sect),
402 paddress (target_gdbarch (), inferior_addr),
403 paddress (target_gdbarch (),
404 inferior_addr + bfd_get_section_size (sect)));
405
406 do_cleanups (cleanups);
407}
408
36de76f9
JK
409/* Fetch the type of COMPILE_I_EXPR_PTR_TYPE and COMPILE_I_EXPR_VAL
410 symbols in OBJFILE so we can calculate how much memory to allocate
411 for the out parameter. This avoids needing a malloc in the generated
412 code. Throw an error if anything fails.
413 GDB first tries to compile the code with COMPILE_I_PRINT_ADDRESS_SCOPE.
414 If it finds user tries to print an array type this function returns
415 NULL. Caller will then regenerate the code with
416 COMPILE_I_PRINT_VALUE_SCOPE, recompiles it again and finally runs it.
417 This is because __auto_type array-to-pointer type conversion of
418 COMPILE_I_EXPR_VAL which gets detected by COMPILE_I_EXPR_PTR_TYPE
419 preserving the array type. */
420
421static struct type *
422get_out_value_type (struct symbol *func_sym, struct objfile *objfile,
423 enum compile_i_scope_types scope)
424{
d976bace
JK
425 struct symbol *gdb_ptr_type_sym;
426 /* Initialize it just to avoid a GCC false warning. */
427 struct symbol *gdb_val_sym = NULL;
4d18dfad 428 struct type *gdb_ptr_type, *gdb_type_from_ptr, *gdb_type, *retval;
d976bace
JK
429 /* Initialize it just to avoid a GCC false warning. */
430 const struct block *block = NULL;
36de76f9
JK
431 const struct blockvector *bv;
432 int nblocks = 0;
433 int block_loop = 0;
434
435 bv = SYMTAB_BLOCKVECTOR (func_sym->owner.symtab);
436 nblocks = BLOCKVECTOR_NBLOCKS (bv);
437
438 gdb_ptr_type_sym = NULL;
439 for (block_loop = 0; block_loop < nblocks; block_loop++)
440 {
d976bace 441 struct symbol *function = NULL;
36de76f9
JK
442 const struct block *function_block;
443
444 block = BLOCKVECTOR_BLOCK (bv, block_loop);
445 if (BLOCK_FUNCTION (block) != NULL)
446 continue;
447 gdb_val_sym = block_lookup_symbol (block, COMPILE_I_EXPR_VAL, VAR_DOMAIN);
448 if (gdb_val_sym == NULL)
449 continue;
450
451 function_block = block;
452 while (function_block != BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)
453 && function_block != BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK))
454 {
455 function_block = BLOCK_SUPERBLOCK (function_block);
456 function = BLOCK_FUNCTION (function_block);
457 if (function != NULL)
458 break;
459 }
460 if (function != NULL
461 && (BLOCK_SUPERBLOCK (function_block)
462 == BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK))
463 && (strcmp (SYMBOL_LINKAGE_NAME (function), GCC_FE_WRAPPER_FUNCTION)
464 == 0))
465 break;
466 }
467 if (block_loop == nblocks)
468 error (_("No \"%s\" symbol found"), COMPILE_I_EXPR_PTR_TYPE);
469
470 gdb_type = SYMBOL_TYPE (gdb_val_sym);
f168693b 471 gdb_type = check_typedef (gdb_type);
36de76f9
JK
472
473 gdb_ptr_type_sym = block_lookup_symbol (block, COMPILE_I_EXPR_PTR_TYPE,
474 VAR_DOMAIN);
475 if (gdb_ptr_type_sym == NULL)
476 error (_("No \"%s\" symbol found"), COMPILE_I_EXPR_PTR_TYPE);
477 gdb_ptr_type = SYMBOL_TYPE (gdb_ptr_type_sym);
f168693b 478 gdb_ptr_type = check_typedef (gdb_ptr_type);
36de76f9
JK
479 if (TYPE_CODE (gdb_ptr_type) != TYPE_CODE_PTR)
480 error (_("Type of \"%s\" is not a pointer"), COMPILE_I_EXPR_PTR_TYPE);
481 gdb_type_from_ptr = TYPE_TARGET_TYPE (gdb_ptr_type);
482
483 if (types_deeply_equal (gdb_type, gdb_type_from_ptr))
484 {
485 if (scope != COMPILE_I_PRINT_ADDRESS_SCOPE)
486 error (_("Expected address scope in compiled module \"%s\"."),
487 objfile_name (objfile));
488 return gdb_type;
489 }
490
491 if (TYPE_CODE (gdb_type) != TYPE_CODE_PTR)
492 error (_("Invalid type code %d of symbol \"%s\" "
493 "in compiled module \"%s\"."),
494 TYPE_CODE (gdb_type_from_ptr), COMPILE_I_EXPR_VAL,
495 objfile_name (objfile));
496
4d18dfad 497 retval = gdb_type_from_ptr;
36de76f9
JK
498 switch (TYPE_CODE (gdb_type_from_ptr))
499 {
500 case TYPE_CODE_ARRAY:
501 gdb_type_from_ptr = TYPE_TARGET_TYPE (gdb_type_from_ptr);
502 break;
503 case TYPE_CODE_FUNC:
504 break;
505 default:
506 error (_("Invalid type code %d of symbol \"%s\" "
507 "in compiled module \"%s\"."),
508 TYPE_CODE (gdb_type_from_ptr), COMPILE_I_EXPR_PTR_TYPE,
509 objfile_name (objfile));
510 }
511 if (!types_deeply_equal (gdb_type_from_ptr,
512 TYPE_TARGET_TYPE (gdb_type)))
513 error (_("Referenced types do not match for symbols \"%s\" and \"%s\" "
514 "in compiled module \"%s\"."),
515 COMPILE_I_EXPR_PTR_TYPE, COMPILE_I_EXPR_VAL,
516 objfile_name (objfile));
517 if (scope == COMPILE_I_PRINT_ADDRESS_SCOPE)
518 return NULL;
4d18dfad 519 return retval;
36de76f9
JK
520}
521
83d3415e
JK
522/* Fetch the type of first parameter of FUNC_SYM.
523 Return NULL if FUNC_SYM has no parameters. Throw an error otherwise. */
bb2ec1b3
TT
524
525static struct type *
83d3415e 526get_regs_type (struct symbol *func_sym, struct objfile *objfile)
bb2ec1b3 527{
83d3415e
JK
528 struct type *func_type = SYMBOL_TYPE (func_sym);
529 struct type *regsp_type, *regs_type;
bb2ec1b3
TT
530
531 /* No register parameter present. */
532 if (TYPE_NFIELDS (func_type) == 0)
533 return NULL;
534
bb2ec1b3
TT
535 regsp_type = check_typedef (TYPE_FIELD_TYPE (func_type, 0));
536 if (TYPE_CODE (regsp_type) != TYPE_CODE_PTR)
537 error (_("Invalid type code %d of first parameter of function \"%s\" "
538 "in compiled module \"%s\"."),
539 TYPE_CODE (regsp_type), GCC_FE_WRAPPER_FUNCTION,
540 objfile_name (objfile));
541
542 regs_type = check_typedef (TYPE_TARGET_TYPE (regsp_type));
543 if (TYPE_CODE (regs_type) != TYPE_CODE_STRUCT)
544 error (_("Invalid type code %d of dereferenced first parameter "
545 "of function \"%s\" in compiled module \"%s\"."),
546 TYPE_CODE (regs_type), GCC_FE_WRAPPER_FUNCTION,
547 objfile_name (objfile));
548
549 return regs_type;
550}
551
552/* Store all inferior registers required by REGS_TYPE to inferior memory
553 starting at inferior address REGS_BASE. */
554
555static void
556store_regs (struct type *regs_type, CORE_ADDR regs_base)
557{
558 struct gdbarch *gdbarch = target_gdbarch ();
559 struct regcache *regcache = get_thread_regcache (inferior_ptid);
560 int fieldno;
561
562 for (fieldno = 0; fieldno < TYPE_NFIELDS (regs_type); fieldno++)
563 {
564 const char *reg_name = TYPE_FIELD_NAME (regs_type, fieldno);
565 ULONGEST reg_bitpos = TYPE_FIELD_BITPOS (regs_type, fieldno);
566 ULONGEST reg_bitsize = TYPE_FIELD_BITSIZE (regs_type, fieldno);
567 ULONGEST reg_offset;
568 struct type *reg_type = check_typedef (TYPE_FIELD_TYPE (regs_type,
569 fieldno));
570 ULONGEST reg_size = TYPE_LENGTH (reg_type);
571 int regnum;
572 struct value *regval;
573 CORE_ADDR inferior_addr;
574
575 if (strcmp (reg_name, COMPILE_I_SIMPLE_REGISTER_DUMMY) == 0)
576 continue;
577
578 if ((reg_bitpos % 8) != 0 || reg_bitsize != 0)
579 error (_("Invalid register \"%s\" position %s bits or size %s bits"),
580 reg_name, pulongest (reg_bitpos), pulongest (reg_bitsize));
581 reg_offset = reg_bitpos / 8;
582
583 if (TYPE_CODE (reg_type) != TYPE_CODE_INT
584 && TYPE_CODE (reg_type) != TYPE_CODE_PTR)
585 error (_("Invalid register \"%s\" type code %d"), reg_name,
586 TYPE_CODE (reg_type));
587
588 regnum = compile_register_name_demangle (gdbarch, reg_name);
589
590 regval = value_from_register (reg_type, regnum, get_current_frame ());
591 if (value_optimized_out (regval))
592 error (_("Register \"%s\" is optimized out."), reg_name);
593 if (!value_entirely_available (regval))
594 error (_("Register \"%s\" is not available."), reg_name);
595
596 inferior_addr = regs_base + reg_offset;
597 if (0 != target_write_memory (inferior_addr, value_contents (regval),
598 reg_size))
599 error (_("Cannot write register \"%s\" to inferior memory at %s."),
600 reg_name, paddress (gdbarch, inferior_addr));
601 }
602}
603
aaee65ae
PA
604/* Load the object file specified in FILE_NAMES into inferior memory.
605 Throw an error otherwise. Caller must fully dispose the return
606 value by calling compile_object_run. Returns NULL only for
607 COMPILE_I_PRINT_ADDRESS_SCOPE when COMPILE_I_PRINT_VALUE_SCOPE
608 should have been used instead. */
bb2ec1b3
TT
609
610struct compile_module *
aaee65ae 611compile_object_load (const compile_file_names &file_names,
5c65b58a 612 enum compile_i_scope_types scope, void *scope_data)
bb2ec1b3
TT
613{
614 struct cleanup *cleanups, *cleanups_free_objfile;
bb2ec1b3 615 struct setup_sections_data setup_sections_data;
36de76f9 616 CORE_ADDR addr, regs_addr, out_value_addr = 0;
83d3415e
JK
617 struct symbol *func_sym;
618 struct type *func_type;
bb2ec1b3
TT
619 struct bound_minimal_symbol bmsym;
620 long storage_needed;
621 asymbol **symbol_table, **symp;
622 long number_of_symbols, missing_symbols;
623 struct type *dptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
624 unsigned dptr_type_len = TYPE_LENGTH (dptr_type);
625 struct compile_module *retval;
36de76f9 626 struct type *regs_type, *out_value_type = NULL;
ee0c3293 627 char **matching;
bb2ec1b3 628 struct objfile *objfile;
83d3415e
JK
629 int expect_parameters;
630 struct type *expect_return_type;
7f361056 631 struct munmap_list *munmap_list_head = NULL;
bb2ec1b3 632
ee0c3293
TT
633 gdb::unique_xmalloc_ptr<char> filename
634 (tilde_expand (file_names.object_file ()));
bb2ec1b3 635
ee0c3293 636 gdb_bfd_ref_ptr abfd (gdb_bfd_open (filename.get (), gnutarget, -1));
bb2ec1b3
TT
637 if (abfd == NULL)
638 error (_("\"%s\": could not open as compiled module: %s"),
ee0c3293 639 filename.get (), bfd_errmsg (bfd_get_error ()));
bb2ec1b3 640
192b62ce 641 if (!bfd_check_format_matches (abfd.get (), bfd_object, &matching))
bb2ec1b3 642 error (_("\"%s\": not in loadable format: %s"),
ee0c3293 643 filename.get (), gdb_bfd_errmsg (bfd_get_error (), matching));
bb2ec1b3 644
192b62ce 645 if ((bfd_get_file_flags (abfd.get ()) & (EXEC_P | DYNAMIC)) != 0)
ee0c3293 646 error (_("\"%s\": not in object format."), filename.get ());
bb2ec1b3
TT
647
648 setup_sections_data.last_size = 0;
649 setup_sections_data.last_section_first = abfd->sections;
650 setup_sections_data.last_prot = -1;
651 setup_sections_data.last_max_alignment = 1;
7f361056 652 setup_sections_data.munmap_list_headp = &munmap_list_head;
ee0c3293 653 cleanups = make_cleanup (munmap_listp_free_cleanup, &munmap_list_head);
192b62ce
TT
654 bfd_map_over_sections (abfd.get (), setup_sections, &setup_sections_data);
655 setup_sections (abfd.get (), NULL, &setup_sections_data);
bb2ec1b3 656
192b62ce 657 storage_needed = bfd_get_symtab_upper_bound (abfd.get ());
bb2ec1b3
TT
658 if (storage_needed < 0)
659 error (_("Cannot read symbols of compiled module \"%s\": %s"),
ee0c3293 660 filename.get (), bfd_errmsg (bfd_get_error ()));
bb2ec1b3
TT
661
662 /* SYMFILE_VERBOSE is not passed even if FROM_TTY, user is not interested in
663 "Reading symbols from ..." message for automatically generated file. */
ee0c3293
TT
664 objfile = symbol_file_add_from_bfd (abfd.get (), filename.get (),
665 0, NULL, 0, NULL);
bb2ec1b3
TT
666 cleanups_free_objfile = make_cleanup_free_objfile (objfile);
667
83d3415e
JK
668 func_sym = lookup_global_symbol_from_objfile (objfile,
669 GCC_FE_WRAPPER_FUNCTION,
d12307c1 670 VAR_DOMAIN).symbol;
83d3415e
JK
671 if (func_sym == NULL)
672 error (_("Cannot find function \"%s\" in compiled module \"%s\"."),
673 GCC_FE_WRAPPER_FUNCTION, objfile_name (objfile));
674 func_type = SYMBOL_TYPE (func_sym);
675 if (TYPE_CODE (func_type) != TYPE_CODE_FUNC)
676 error (_("Invalid type code %d of function \"%s\" in compiled "
677 "module \"%s\"."),
678 TYPE_CODE (func_type), GCC_FE_WRAPPER_FUNCTION,
679 objfile_name (objfile));
680
681 switch (scope)
682 {
683 case COMPILE_I_SIMPLE_SCOPE:
684 expect_parameters = 1;
685 expect_return_type = builtin_type (target_gdbarch ())->builtin_void;
686 break;
687 case COMPILE_I_RAW_SCOPE:
688 expect_parameters = 0;
689 expect_return_type = builtin_type (target_gdbarch ())->builtin_void;
690 break;
36de76f9
JK
691 case COMPILE_I_PRINT_ADDRESS_SCOPE:
692 case COMPILE_I_PRINT_VALUE_SCOPE:
693 expect_parameters = 2;
694 expect_return_type = builtin_type (target_gdbarch ())->builtin_void;
695 break;
83d3415e
JK
696 default:
697 internal_error (__FILE__, __LINE__, _("invalid scope %d"), scope);
698 }
699 if (TYPE_NFIELDS (func_type) != expect_parameters)
700 error (_("Invalid %d parameters of function \"%s\" in compiled "
701 "module \"%s\"."),
702 TYPE_NFIELDS (func_type), GCC_FE_WRAPPER_FUNCTION,
703 objfile_name (objfile));
704 if (!types_deeply_equal (expect_return_type, TYPE_TARGET_TYPE (func_type)))
705 error (_("Invalid return type of function \"%s\" in compiled "
706 "module \"%s\"."),
707 GCC_FE_WRAPPER_FUNCTION, objfile_name (objfile));
bb2ec1b3
TT
708
709 /* The memory may be later needed
710 by bfd_generic_get_relocated_section_contents
711 called from default_symfile_relocate. */
224c3ddb
SM
712 symbol_table = (asymbol **) obstack_alloc (&objfile->objfile_obstack,
713 storage_needed);
192b62ce 714 number_of_symbols = bfd_canonicalize_symtab (abfd.get (), symbol_table);
bb2ec1b3
TT
715 if (number_of_symbols < 0)
716 error (_("Cannot parse symbols of compiled module \"%s\": %s"),
ee0c3293 717 filename.get (), bfd_errmsg (bfd_get_error ()));
bb2ec1b3
TT
718
719 missing_symbols = 0;
720 for (symp = symbol_table; symp < symbol_table + number_of_symbols; symp++)
721 {
722 asymbol *sym = *symp;
723
724 if (sym->flags != 0)
725 continue;
bb2ec1b3
TT
726 sym->flags = BSF_GLOBAL;
727 sym->section = bfd_abs_section_ptr;
728 if (strcmp (sym->name, "_GLOBAL_OFFSET_TABLE_") == 0)
729 {
b0fd6b30
JK
730 if (compile_debug)
731 fprintf_unfiltered (gdb_stdlog,
732 "ELF symbol \"%s\" relocated to zero\n",
733 sym->name);
734
735 /* It seems to be a GCC bug, with -mcmodel=large there should be no
736 need for _GLOBAL_OFFSET_TABLE_. Together with -fPIE the data
737 remain PC-relative even with _GLOBAL_OFFSET_TABLE_ as zero. */
bb2ec1b3
TT
738 sym->value = 0;
739 continue;
740 }
741 bmsym = lookup_minimal_symbol (sym->name, NULL, NULL);
742 switch (bmsym.minsym == NULL
743 ? mst_unknown : MSYMBOL_TYPE (bmsym.minsym))
744 {
745 case mst_text:
746 sym->value = BMSYMBOL_VALUE_ADDRESS (bmsym);
b0fd6b30
JK
747 if (compile_debug)
748 fprintf_unfiltered (gdb_stdlog,
749 "ELF mst_text symbol \"%s\" relocated to %s\n",
750 sym->name,
751 paddress (target_gdbarch (), sym->value));
bb2ec1b3 752 break;
e26efa40
JK
753 case mst_text_gnu_ifunc:
754 sym->value = gnu_ifunc_resolve_addr (target_gdbarch (),
755 BMSYMBOL_VALUE_ADDRESS (bmsym));
b0fd6b30
JK
756 if (compile_debug)
757 fprintf_unfiltered (gdb_stdlog,
758 "ELF mst_text_gnu_ifunc symbol \"%s\" "
759 "relocated to %s\n",
760 sym->name,
761 paddress (target_gdbarch (), sym->value));
e26efa40 762 break;
bb2ec1b3
TT
763 default:
764 warning (_("Could not find symbol \"%s\" "
765 "for compiled module \"%s\"."),
ee0c3293 766 sym->name, filename.get ());
bb2ec1b3
TT
767 missing_symbols++;
768 }
769 }
770 if (missing_symbols)
771 error (_("%ld symbols were missing, cannot continue."), missing_symbols);
772
192b62ce 773 bfd_map_over_sections (abfd.get (), copy_sections, symbol_table);
bb2ec1b3 774
83d3415e 775 regs_type = get_regs_type (func_sym, objfile);
bb2ec1b3
TT
776 if (regs_type == NULL)
777 regs_addr = 0;
778 else
779 {
780 /* Use read-only non-executable memory protection. */
781 regs_addr = gdbarch_infcall_mmap (target_gdbarch (),
782 TYPE_LENGTH (regs_type),
783 GDB_MMAP_PROT_READ);
784 gdb_assert (regs_addr != 0);
7f361056 785 munmap_list_add (&munmap_list_head, regs_addr, TYPE_LENGTH (regs_type));
b6de3f96 786 if (compile_debug)
a4063588 787 fprintf_unfiltered (gdb_stdlog,
b6de3f96
JK
788 "allocated %s bytes at %s for registers\n",
789 paddress (target_gdbarch (),
790 TYPE_LENGTH (regs_type)),
791 paddress (target_gdbarch (), regs_addr));
bb2ec1b3
TT
792 store_regs (regs_type, regs_addr);
793 }
794
36de76f9
JK
795 if (scope == COMPILE_I_PRINT_ADDRESS_SCOPE
796 || scope == COMPILE_I_PRINT_VALUE_SCOPE)
797 {
798 out_value_type = get_out_value_type (func_sym, objfile, scope);
799 if (out_value_type == NULL)
800 {
801 do_cleanups (cleanups);
802 return NULL;
803 }
804 check_typedef (out_value_type);
805 out_value_addr = gdbarch_infcall_mmap (target_gdbarch (),
806 TYPE_LENGTH (out_value_type),
807 (GDB_MMAP_PROT_READ
808 | GDB_MMAP_PROT_WRITE));
809 gdb_assert (out_value_addr != 0);
7f361056
JK
810 munmap_list_add (&munmap_list_head, out_value_addr,
811 TYPE_LENGTH (out_value_type));
36de76f9 812 if (compile_debug)
a4063588 813 fprintf_unfiltered (gdb_stdlog,
36de76f9
JK
814 "allocated %s bytes at %s for printed value\n",
815 paddress (target_gdbarch (),
816 TYPE_LENGTH (out_value_type)),
817 paddress (target_gdbarch (), out_value_addr));
818 }
819
bb2ec1b3 820 discard_cleanups (cleanups_free_objfile);
bb2ec1b3 821
8d749320 822 retval = XNEW (struct compile_module);
bb2ec1b3 823 retval->objfile = objfile;
aaee65ae 824 retval->source_file = xstrdup (file_names.source_file ());
83d3415e 825 retval->func_sym = func_sym;
bb2ec1b3 826 retval->regs_addr = regs_addr;
5c65b58a
JK
827 retval->scope = scope;
828 retval->scope_data = scope_data;
36de76f9
JK
829 retval->out_value_type = out_value_type;
830 retval->out_value_addr = out_value_addr;
7f361056
JK
831
832 /* CLEANUPS will free MUNMAP_LIST_HEAD. */
833 retval->munmap_list_head = munmap_list_head;
834 munmap_list_head = NULL;
835
836 do_cleanups (cleanups);
837
bb2ec1b3
TT
838 return retval;
839}
This page took 0.260778 seconds and 4 git commands to generate.