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