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