Remove make_cleanup_free_objfile
[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{
bb2ec1b3 284 va_list ap;
bb2ec1b3
TT
285
286 va_start (ap, fmt);
20dcd8ca 287 std::string str = string_vprintf (fmt, ap);
bb2ec1b3 288 va_end (ap);
bb2ec1b3 289
20dcd8ca 290 warning (_("Compile module: warning: %s"), str.c_str ());
bb2ec1b3
TT
291}
292
293/* Helper for bfd_get_relocated_section_contents.
294 Only these symbols are set by bfd_simple_get_relocated_section_contents
295 but bfd/ seems to use even the NULL ones without checking them first. */
296
297static const struct bfd_link_callbacks link_callbacks =
298{
299 NULL, /* add_archive_element */
300 link_callbacks_multiple_definition, /* multiple_definition */
301 NULL, /* multiple_common */
302 NULL, /* add_to_set */
303 NULL, /* constructor */
304 link_callbacks_warning, /* warning */
305 link_callbacks_undefined_symbol, /* undefined_symbol */
306 link_callbacks_reloc_overflow, /* reloc_overflow */
307 link_callbacks_reloc_dangerous, /* reloc_dangerous */
308 link_callbacks_unattached_reloc, /* unattached_reloc */
309 NULL, /* notice */
310 link_callbacks_einfo, /* einfo */
311 NULL, /* info */
312 NULL, /* minfo */
313 NULL, /* override_segment_assignment */
314};
315
316struct link_hash_table_cleanup_data
317{
318 bfd *abfd;
319 bfd *link_next;
320};
321
322/* Cleanup callback for struct bfd_link_info. */
323
324static void
325link_hash_table_free (void *d)
326{
9a3c8263
SM
327 struct link_hash_table_cleanup_data *data
328 = (struct link_hash_table_cleanup_data *) d;
bb2ec1b3
TT
329
330 if (data->abfd->is_linker_output)
331 (*data->abfd->link.hash->hash_table_free) (data->abfd);
332 data->abfd->link.next = data->link_next;
333}
334
335/* Relocate and store into inferior memory each section SECT of ABFD. */
336
337static void
338copy_sections (bfd *abfd, asection *sect, void *data)
339{
9a3c8263 340 asymbol **symbol_table = (asymbol **) data;
bb2ec1b3
TT
341 bfd_byte *sect_data, *sect_data_got;
342 struct cleanup *cleanups;
343 struct bfd_link_info link_info;
344 struct bfd_link_order link_order;
345 CORE_ADDR inferior_addr;
346 struct link_hash_table_cleanup_data cleanup_data;
347
348 if ((bfd_get_section_flags (abfd, sect) & (SEC_ALLOC | SEC_LOAD))
349 != (SEC_ALLOC | SEC_LOAD))
350 return;
351
352 if (bfd_get_section_size (sect) == 0)
353 return;
354
355 /* Mostly a copy of bfd_simple_get_relocated_section_contents which GDB
356 cannot use as it does not report relocations to undefined symbols. */
357 memset (&link_info, 0, sizeof (link_info));
358 link_info.output_bfd = abfd;
359 link_info.input_bfds = abfd;
360 link_info.input_bfds_tail = &abfd->link.next;
361
362 cleanup_data.abfd = abfd;
363 cleanup_data.link_next = abfd->link.next;
364
365 abfd->link.next = NULL;
366 link_info.hash = bfd_link_hash_table_create (abfd);
367
368 cleanups = make_cleanup (link_hash_table_free, &cleanup_data);
369 link_info.callbacks = &link_callbacks;
370
371 memset (&link_order, 0, sizeof (link_order));
372 link_order.next = NULL;
373 link_order.type = bfd_indirect_link_order;
374 link_order.offset = 0;
375 link_order.size = bfd_get_section_size (sect);
376 link_order.u.indirect.section = sect;
377
224c3ddb 378 sect_data = (bfd_byte *) xmalloc (bfd_get_section_size (sect));
bb2ec1b3
TT
379 make_cleanup (xfree, sect_data);
380
381 sect_data_got = bfd_get_relocated_section_contents (abfd, &link_info,
382 &link_order, sect_data,
383 FALSE, symbol_table);
384
385 if (sect_data_got == NULL)
386 error (_("Cannot map compiled module \"%s\" section \"%s\": %s"),
387 bfd_get_filename (abfd), bfd_get_section_name (abfd, sect),
388 bfd_errmsg (bfd_get_error ()));
389 gdb_assert (sect_data_got == sect_data);
390
391 inferior_addr = bfd_get_section_vma (abfd, sect);
392 if (0 != target_write_memory (inferior_addr, sect_data,
393 bfd_get_section_size (sect)))
394 error (_("Cannot write compiled module \"%s\" section \"%s\" "
395 "to inferior memory range %s-%s."),
396 bfd_get_filename (abfd), bfd_get_section_name (abfd, sect),
397 paddress (target_gdbarch (), inferior_addr),
398 paddress (target_gdbarch (),
399 inferior_addr + bfd_get_section_size (sect)));
400
401 do_cleanups (cleanups);
402}
403
36de76f9
JK
404/* Fetch the type of COMPILE_I_EXPR_PTR_TYPE and COMPILE_I_EXPR_VAL
405 symbols in OBJFILE so we can calculate how much memory to allocate
406 for the out parameter. This avoids needing a malloc in the generated
407 code. Throw an error if anything fails.
408 GDB first tries to compile the code with COMPILE_I_PRINT_ADDRESS_SCOPE.
409 If it finds user tries to print an array type this function returns
410 NULL. Caller will then regenerate the code with
411 COMPILE_I_PRINT_VALUE_SCOPE, recompiles it again and finally runs it.
412 This is because __auto_type array-to-pointer type conversion of
413 COMPILE_I_EXPR_VAL which gets detected by COMPILE_I_EXPR_PTR_TYPE
414 preserving the array type. */
415
416static struct type *
417get_out_value_type (struct symbol *func_sym, struct objfile *objfile,
418 enum compile_i_scope_types scope)
419{
d976bace
JK
420 struct symbol *gdb_ptr_type_sym;
421 /* Initialize it just to avoid a GCC false warning. */
422 struct symbol *gdb_val_sym = NULL;
4d18dfad 423 struct type *gdb_ptr_type, *gdb_type_from_ptr, *gdb_type, *retval;
d976bace
JK
424 /* Initialize it just to avoid a GCC false warning. */
425 const struct block *block = NULL;
36de76f9
JK
426 const struct blockvector *bv;
427 int nblocks = 0;
428 int block_loop = 0;
429
430 bv = SYMTAB_BLOCKVECTOR (func_sym->owner.symtab);
431 nblocks = BLOCKVECTOR_NBLOCKS (bv);
432
433 gdb_ptr_type_sym = NULL;
434 for (block_loop = 0; block_loop < nblocks; block_loop++)
435 {
d976bace 436 struct symbol *function = NULL;
36de76f9
JK
437 const struct block *function_block;
438
439 block = BLOCKVECTOR_BLOCK (bv, block_loop);
440 if (BLOCK_FUNCTION (block) != NULL)
441 continue;
442 gdb_val_sym = block_lookup_symbol (block, COMPILE_I_EXPR_VAL, VAR_DOMAIN);
443 if (gdb_val_sym == NULL)
444 continue;
445
446 function_block = block;
447 while (function_block != BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK)
448 && function_block != BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK))
449 {
450 function_block = BLOCK_SUPERBLOCK (function_block);
451 function = BLOCK_FUNCTION (function_block);
452 if (function != NULL)
453 break;
454 }
455 if (function != NULL
456 && (BLOCK_SUPERBLOCK (function_block)
457 == BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK))
458 && (strcmp (SYMBOL_LINKAGE_NAME (function), GCC_FE_WRAPPER_FUNCTION)
459 == 0))
460 break;
461 }
462 if (block_loop == nblocks)
463 error (_("No \"%s\" symbol found"), COMPILE_I_EXPR_PTR_TYPE);
464
465 gdb_type = SYMBOL_TYPE (gdb_val_sym);
f168693b 466 gdb_type = check_typedef (gdb_type);
36de76f9
JK
467
468 gdb_ptr_type_sym = block_lookup_symbol (block, COMPILE_I_EXPR_PTR_TYPE,
469 VAR_DOMAIN);
470 if (gdb_ptr_type_sym == NULL)
471 error (_("No \"%s\" symbol found"), COMPILE_I_EXPR_PTR_TYPE);
472 gdb_ptr_type = SYMBOL_TYPE (gdb_ptr_type_sym);
f168693b 473 gdb_ptr_type = check_typedef (gdb_ptr_type);
36de76f9
JK
474 if (TYPE_CODE (gdb_ptr_type) != TYPE_CODE_PTR)
475 error (_("Type of \"%s\" is not a pointer"), COMPILE_I_EXPR_PTR_TYPE);
476 gdb_type_from_ptr = TYPE_TARGET_TYPE (gdb_ptr_type);
477
478 if (types_deeply_equal (gdb_type, gdb_type_from_ptr))
479 {
480 if (scope != COMPILE_I_PRINT_ADDRESS_SCOPE)
481 error (_("Expected address scope in compiled module \"%s\"."),
482 objfile_name (objfile));
483 return gdb_type;
484 }
485
486 if (TYPE_CODE (gdb_type) != TYPE_CODE_PTR)
487 error (_("Invalid type code %d of symbol \"%s\" "
488 "in compiled module \"%s\"."),
489 TYPE_CODE (gdb_type_from_ptr), COMPILE_I_EXPR_VAL,
490 objfile_name (objfile));
491
4d18dfad 492 retval = gdb_type_from_ptr;
36de76f9
JK
493 switch (TYPE_CODE (gdb_type_from_ptr))
494 {
495 case TYPE_CODE_ARRAY:
496 gdb_type_from_ptr = TYPE_TARGET_TYPE (gdb_type_from_ptr);
497 break;
498 case TYPE_CODE_FUNC:
499 break;
500 default:
501 error (_("Invalid type code %d of symbol \"%s\" "
502 "in compiled module \"%s\"."),
503 TYPE_CODE (gdb_type_from_ptr), COMPILE_I_EXPR_PTR_TYPE,
504 objfile_name (objfile));
505 }
506 if (!types_deeply_equal (gdb_type_from_ptr,
507 TYPE_TARGET_TYPE (gdb_type)))
508 error (_("Referenced types do not match for symbols \"%s\" and \"%s\" "
509 "in compiled module \"%s\"."),
510 COMPILE_I_EXPR_PTR_TYPE, COMPILE_I_EXPR_VAL,
511 objfile_name (objfile));
512 if (scope == COMPILE_I_PRINT_ADDRESS_SCOPE)
513 return NULL;
4d18dfad 514 return retval;
36de76f9
JK
515}
516
83d3415e
JK
517/* Fetch the type of first parameter of FUNC_SYM.
518 Return NULL if FUNC_SYM has no parameters. Throw an error otherwise. */
bb2ec1b3
TT
519
520static struct type *
83d3415e 521get_regs_type (struct symbol *func_sym, struct objfile *objfile)
bb2ec1b3 522{
83d3415e
JK
523 struct type *func_type = SYMBOL_TYPE (func_sym);
524 struct type *regsp_type, *regs_type;
bb2ec1b3
TT
525
526 /* No register parameter present. */
527 if (TYPE_NFIELDS (func_type) == 0)
528 return NULL;
529
bb2ec1b3
TT
530 regsp_type = check_typedef (TYPE_FIELD_TYPE (func_type, 0));
531 if (TYPE_CODE (regsp_type) != TYPE_CODE_PTR)
532 error (_("Invalid type code %d of first parameter of function \"%s\" "
533 "in compiled module \"%s\"."),
534 TYPE_CODE (regsp_type), GCC_FE_WRAPPER_FUNCTION,
535 objfile_name (objfile));
536
537 regs_type = check_typedef (TYPE_TARGET_TYPE (regsp_type));
538 if (TYPE_CODE (regs_type) != TYPE_CODE_STRUCT)
539 error (_("Invalid type code %d of dereferenced first parameter "
540 "of function \"%s\" in compiled module \"%s\"."),
541 TYPE_CODE (regs_type), GCC_FE_WRAPPER_FUNCTION,
542 objfile_name (objfile));
543
544 return regs_type;
545}
546
547/* Store all inferior registers required by REGS_TYPE to inferior memory
548 starting at inferior address REGS_BASE. */
549
550static void
551store_regs (struct type *regs_type, CORE_ADDR regs_base)
552{
553 struct gdbarch *gdbarch = target_gdbarch ();
554 struct regcache *regcache = get_thread_regcache (inferior_ptid);
555 int fieldno;
556
557 for (fieldno = 0; fieldno < TYPE_NFIELDS (regs_type); fieldno++)
558 {
559 const char *reg_name = TYPE_FIELD_NAME (regs_type, fieldno);
560 ULONGEST reg_bitpos = TYPE_FIELD_BITPOS (regs_type, fieldno);
561 ULONGEST reg_bitsize = TYPE_FIELD_BITSIZE (regs_type, fieldno);
562 ULONGEST reg_offset;
563 struct type *reg_type = check_typedef (TYPE_FIELD_TYPE (regs_type,
564 fieldno));
565 ULONGEST reg_size = TYPE_LENGTH (reg_type);
566 int regnum;
567 struct value *regval;
568 CORE_ADDR inferior_addr;
569
570 if (strcmp (reg_name, COMPILE_I_SIMPLE_REGISTER_DUMMY) == 0)
571 continue;
572
573 if ((reg_bitpos % 8) != 0 || reg_bitsize != 0)
574 error (_("Invalid register \"%s\" position %s bits or size %s bits"),
575 reg_name, pulongest (reg_bitpos), pulongest (reg_bitsize));
576 reg_offset = reg_bitpos / 8;
577
578 if (TYPE_CODE (reg_type) != TYPE_CODE_INT
579 && TYPE_CODE (reg_type) != TYPE_CODE_PTR)
580 error (_("Invalid register \"%s\" type code %d"), reg_name,
581 TYPE_CODE (reg_type));
582
583 regnum = compile_register_name_demangle (gdbarch, reg_name);
584
585 regval = value_from_register (reg_type, regnum, get_current_frame ());
586 if (value_optimized_out (regval))
587 error (_("Register \"%s\" is optimized out."), reg_name);
588 if (!value_entirely_available (regval))
589 error (_("Register \"%s\" is not available."), reg_name);
590
591 inferior_addr = regs_base + reg_offset;
592 if (0 != target_write_memory (inferior_addr, value_contents (regval),
593 reg_size))
594 error (_("Cannot write register \"%s\" to inferior memory at %s."),
595 reg_name, paddress (gdbarch, inferior_addr));
596 }
597}
598
aaee65ae
PA
599/* Load the object file specified in FILE_NAMES into inferior memory.
600 Throw an error otherwise. Caller must fully dispose the return
601 value by calling compile_object_run. Returns NULL only for
602 COMPILE_I_PRINT_ADDRESS_SCOPE when COMPILE_I_PRINT_VALUE_SCOPE
603 should have been used instead. */
bb2ec1b3
TT
604
605struct compile_module *
aaee65ae 606compile_object_load (const compile_file_names &file_names,
5c65b58a 607 enum compile_i_scope_types scope, void *scope_data)
bb2ec1b3 608{
ed2b3126 609 struct cleanup *cleanups;
bb2ec1b3 610 struct setup_sections_data setup_sections_data;
36de76f9 611 CORE_ADDR addr, regs_addr, out_value_addr = 0;
83d3415e
JK
612 struct symbol *func_sym;
613 struct type *func_type;
bb2ec1b3
TT
614 struct bound_minimal_symbol bmsym;
615 long storage_needed;
616 asymbol **symbol_table, **symp;
617 long number_of_symbols, missing_symbols;
618 struct type *dptr_type = builtin_type (target_gdbarch ())->builtin_data_ptr;
619 unsigned dptr_type_len = TYPE_LENGTH (dptr_type);
620 struct compile_module *retval;
36de76f9 621 struct type *regs_type, *out_value_type = NULL;
ee0c3293 622 char **matching;
bb2ec1b3 623 struct objfile *objfile;
83d3415e
JK
624 int expect_parameters;
625 struct type *expect_return_type;
7f361056 626 struct munmap_list *munmap_list_head = NULL;
bb2ec1b3 627
ee0c3293
TT
628 gdb::unique_xmalloc_ptr<char> filename
629 (tilde_expand (file_names.object_file ()));
bb2ec1b3 630
ee0c3293 631 gdb_bfd_ref_ptr abfd (gdb_bfd_open (filename.get (), gnutarget, -1));
bb2ec1b3
TT
632 if (abfd == NULL)
633 error (_("\"%s\": could not open as compiled module: %s"),
ee0c3293 634 filename.get (), bfd_errmsg (bfd_get_error ()));
bb2ec1b3 635
192b62ce 636 if (!bfd_check_format_matches (abfd.get (), bfd_object, &matching))
bb2ec1b3 637 error (_("\"%s\": not in loadable format: %s"),
ee0c3293 638 filename.get (), gdb_bfd_errmsg (bfd_get_error (), matching));
bb2ec1b3 639
192b62ce 640 if ((bfd_get_file_flags (abfd.get ()) & (EXEC_P | DYNAMIC)) != 0)
ee0c3293 641 error (_("\"%s\": not in object format."), filename.get ());
bb2ec1b3
TT
642
643 setup_sections_data.last_size = 0;
644 setup_sections_data.last_section_first = abfd->sections;
645 setup_sections_data.last_prot = -1;
646 setup_sections_data.last_max_alignment = 1;
7f361056 647 setup_sections_data.munmap_list_headp = &munmap_list_head;
ee0c3293 648 cleanups = make_cleanup (munmap_listp_free_cleanup, &munmap_list_head);
192b62ce
TT
649 bfd_map_over_sections (abfd.get (), setup_sections, &setup_sections_data);
650 setup_sections (abfd.get (), NULL, &setup_sections_data);
bb2ec1b3 651
192b62ce 652 storage_needed = bfd_get_symtab_upper_bound (abfd.get ());
bb2ec1b3
TT
653 if (storage_needed < 0)
654 error (_("Cannot read symbols of compiled module \"%s\": %s"),
ee0c3293 655 filename.get (), bfd_errmsg (bfd_get_error ()));
bb2ec1b3
TT
656
657 /* SYMFILE_VERBOSE is not passed even if FROM_TTY, user is not interested in
658 "Reading symbols from ..." message for automatically generated file. */
ed2b3126
TT
659 std::unique_ptr<struct objfile> objfile_holder
660 (symbol_file_add_from_bfd (abfd.get (), filename.get (),
661 0, NULL, 0, NULL));
662 objfile = objfile_holder.get ();
bb2ec1b3 663
83d3415e
JK
664 func_sym = lookup_global_symbol_from_objfile (objfile,
665 GCC_FE_WRAPPER_FUNCTION,
d12307c1 666 VAR_DOMAIN).symbol;
83d3415e
JK
667 if (func_sym == NULL)
668 error (_("Cannot find function \"%s\" in compiled module \"%s\"."),
669 GCC_FE_WRAPPER_FUNCTION, objfile_name (objfile));
670 func_type = SYMBOL_TYPE (func_sym);
671 if (TYPE_CODE (func_type) != TYPE_CODE_FUNC)
672 error (_("Invalid type code %d of function \"%s\" in compiled "
673 "module \"%s\"."),
674 TYPE_CODE (func_type), GCC_FE_WRAPPER_FUNCTION,
675 objfile_name (objfile));
676
677 switch (scope)
678 {
679 case COMPILE_I_SIMPLE_SCOPE:
680 expect_parameters = 1;
681 expect_return_type = builtin_type (target_gdbarch ())->builtin_void;
682 break;
683 case COMPILE_I_RAW_SCOPE:
684 expect_parameters = 0;
685 expect_return_type = builtin_type (target_gdbarch ())->builtin_void;
686 break;
36de76f9
JK
687 case COMPILE_I_PRINT_ADDRESS_SCOPE:
688 case COMPILE_I_PRINT_VALUE_SCOPE:
689 expect_parameters = 2;
690 expect_return_type = builtin_type (target_gdbarch ())->builtin_void;
691 break;
83d3415e
JK
692 default:
693 internal_error (__FILE__, __LINE__, _("invalid scope %d"), scope);
694 }
695 if (TYPE_NFIELDS (func_type) != expect_parameters)
696 error (_("Invalid %d parameters of function \"%s\" in compiled "
697 "module \"%s\"."),
698 TYPE_NFIELDS (func_type), GCC_FE_WRAPPER_FUNCTION,
699 objfile_name (objfile));
700 if (!types_deeply_equal (expect_return_type, TYPE_TARGET_TYPE (func_type)))
701 error (_("Invalid return type of function \"%s\" in compiled "
702 "module \"%s\"."),
703 GCC_FE_WRAPPER_FUNCTION, objfile_name (objfile));
bb2ec1b3
TT
704
705 /* The memory may be later needed
706 by bfd_generic_get_relocated_section_contents
707 called from default_symfile_relocate. */
224c3ddb
SM
708 symbol_table = (asymbol **) obstack_alloc (&objfile->objfile_obstack,
709 storage_needed);
192b62ce 710 number_of_symbols = bfd_canonicalize_symtab (abfd.get (), symbol_table);
bb2ec1b3
TT
711 if (number_of_symbols < 0)
712 error (_("Cannot parse symbols of compiled module \"%s\": %s"),
ee0c3293 713 filename.get (), bfd_errmsg (bfd_get_error ()));
bb2ec1b3
TT
714
715 missing_symbols = 0;
716 for (symp = symbol_table; symp < symbol_table + number_of_symbols; symp++)
717 {
718 asymbol *sym = *symp;
719
720 if (sym->flags != 0)
721 continue;
bb2ec1b3
TT
722 sym->flags = BSF_GLOBAL;
723 sym->section = bfd_abs_section_ptr;
724 if (strcmp (sym->name, "_GLOBAL_OFFSET_TABLE_") == 0)
725 {
b0fd6b30
JK
726 if (compile_debug)
727 fprintf_unfiltered (gdb_stdlog,
728 "ELF symbol \"%s\" relocated to zero\n",
729 sym->name);
730
731 /* It seems to be a GCC bug, with -mcmodel=large there should be no
732 need for _GLOBAL_OFFSET_TABLE_. Together with -fPIE the data
733 remain PC-relative even with _GLOBAL_OFFSET_TABLE_ as zero. */
bb2ec1b3
TT
734 sym->value = 0;
735 continue;
736 }
737 bmsym = lookup_minimal_symbol (sym->name, NULL, NULL);
738 switch (bmsym.minsym == NULL
739 ? mst_unknown : MSYMBOL_TYPE (bmsym.minsym))
740 {
741 case mst_text:
742 sym->value = BMSYMBOL_VALUE_ADDRESS (bmsym);
b0fd6b30
JK
743 if (compile_debug)
744 fprintf_unfiltered (gdb_stdlog,
745 "ELF mst_text symbol \"%s\" relocated to %s\n",
746 sym->name,
747 paddress (target_gdbarch (), sym->value));
bb2ec1b3 748 break;
e26efa40
JK
749 case mst_text_gnu_ifunc:
750 sym->value = gnu_ifunc_resolve_addr (target_gdbarch (),
751 BMSYMBOL_VALUE_ADDRESS (bmsym));
b0fd6b30
JK
752 if (compile_debug)
753 fprintf_unfiltered (gdb_stdlog,
754 "ELF mst_text_gnu_ifunc symbol \"%s\" "
755 "relocated to %s\n",
756 sym->name,
757 paddress (target_gdbarch (), sym->value));
e26efa40 758 break;
bb2ec1b3
TT
759 default:
760 warning (_("Could not find symbol \"%s\" "
761 "for compiled module \"%s\"."),
ee0c3293 762 sym->name, filename.get ());
bb2ec1b3
TT
763 missing_symbols++;
764 }
765 }
766 if (missing_symbols)
767 error (_("%ld symbols were missing, cannot continue."), missing_symbols);
768
192b62ce 769 bfd_map_over_sections (abfd.get (), copy_sections, symbol_table);
bb2ec1b3 770
83d3415e 771 regs_type = get_regs_type (func_sym, objfile);
bb2ec1b3
TT
772 if (regs_type == NULL)
773 regs_addr = 0;
774 else
775 {
776 /* Use read-only non-executable memory protection. */
777 regs_addr = gdbarch_infcall_mmap (target_gdbarch (),
778 TYPE_LENGTH (regs_type),
779 GDB_MMAP_PROT_READ);
780 gdb_assert (regs_addr != 0);
7f361056 781 munmap_list_add (&munmap_list_head, regs_addr, TYPE_LENGTH (regs_type));
b6de3f96 782 if (compile_debug)
a4063588 783 fprintf_unfiltered (gdb_stdlog,
b6de3f96
JK
784 "allocated %s bytes at %s for registers\n",
785 paddress (target_gdbarch (),
786 TYPE_LENGTH (regs_type)),
787 paddress (target_gdbarch (), regs_addr));
bb2ec1b3
TT
788 store_regs (regs_type, regs_addr);
789 }
790
36de76f9
JK
791 if (scope == COMPILE_I_PRINT_ADDRESS_SCOPE
792 || scope == COMPILE_I_PRINT_VALUE_SCOPE)
793 {
794 out_value_type = get_out_value_type (func_sym, objfile, scope);
795 if (out_value_type == NULL)
796 {
797 do_cleanups (cleanups);
798 return NULL;
799 }
800 check_typedef (out_value_type);
801 out_value_addr = gdbarch_infcall_mmap (target_gdbarch (),
802 TYPE_LENGTH (out_value_type),
803 (GDB_MMAP_PROT_READ
804 | GDB_MMAP_PROT_WRITE));
805 gdb_assert (out_value_addr != 0);
7f361056
JK
806 munmap_list_add (&munmap_list_head, out_value_addr,
807 TYPE_LENGTH (out_value_type));
36de76f9 808 if (compile_debug)
a4063588 809 fprintf_unfiltered (gdb_stdlog,
36de76f9
JK
810 "allocated %s bytes at %s for printed value\n",
811 paddress (target_gdbarch (),
812 TYPE_LENGTH (out_value_type)),
813 paddress (target_gdbarch (), out_value_addr));
814 }
815
8d749320 816 retval = XNEW (struct compile_module);
ed2b3126 817 retval->objfile = objfile_holder.release ();
aaee65ae 818 retval->source_file = xstrdup (file_names.source_file ());
83d3415e 819 retval->func_sym = func_sym;
bb2ec1b3 820 retval->regs_addr = regs_addr;
5c65b58a
JK
821 retval->scope = scope;
822 retval->scope_data = scope_data;
36de76f9
JK
823 retval->out_value_type = out_value_type;
824 retval->out_value_addr = out_value_addr;
7f361056
JK
825
826 /* CLEANUPS will free MUNMAP_LIST_HEAD. */
827 retval->munmap_list_head = munmap_list_head;
828 munmap_list_head = NULL;
829
830 do_cleanups (cleanups);
831
bb2ec1b3
TT
832 return retval;
833}
This page took 0.252405 seconds and 4 git commands to generate.