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