1 /* DWARF 2 support. 2 Copyright (C) 1994-2020 Free Software Foundation, Inc. 3 4 Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions 5 (gavin@cygnus.com). 6 7 From the dwarf2read.c header: 8 Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, 9 Inc. with support from Florida State University (under contract 10 with the Ada Joint Program Office), and Silicon Graphics, Inc. 11 Initial contribution by Brent Benson, Harris Computer Systems, Inc., 12 based on Fred Fish's (Cygnus Support) implementation of DWARF 1 13 support in dwarfread.c 14 15 This file is part of BFD. 16 17 This program is free software; you can redistribute it and/or modify 18 it under the terms of the GNU General Public License as published by 19 the Free Software Foundation; either version 3 of the License, or (at 20 your option) any later version. 21 22 This program is distributed in the hope that it will be useful, but 23 WITHOUT ANY WARRANTY; without even the implied warranty of 24 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 25 General Public License for more details. 26 27 You should have received a copy of the GNU General Public License 28 along with this program; if not, write to the Free Software 29 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 30 MA 02110-1301, USA. */ 31 32 #include "sysdep.h" 33 #include "bfd.h" 34 #include "libiberty.h" 35 #include "libbfd.h" 36 #include "elf-bfd.h" 37 #include "dwarf2.h" 38 #include "hashtab.h" 39 40 /* The data in the .debug_line statement prologue looks like this. */ 41 42 struct line_head 43 { 44 bfd_vma total_length; 45 unsigned short version; 46 bfd_vma prologue_length; 47 unsigned char minimum_instruction_length; 48 unsigned char maximum_ops_per_insn; 49 unsigned char default_is_stmt; 50 int line_base; 51 unsigned char line_range; 52 unsigned char opcode_base; 53 unsigned char *standard_opcode_lengths; 54 }; 55 56 /* Attributes have a name and a value. */ 57 58 struct attribute 59 { 60 enum dwarf_attribute name; 61 enum dwarf_form form; 62 union 63 { 64 char *str; 65 struct dwarf_block *blk; 66 bfd_uint64_t val; 67 bfd_int64_t sval; 68 } 69 u; 70 }; 71 72 /* Blocks are a bunch of untyped bytes. */ 73 struct dwarf_block 74 { 75 unsigned int size; 76 bfd_byte *data; 77 }; 78 79 struct adjusted_section 80 { 81 asection *section; 82 bfd_vma adj_vma; 83 }; 84 85 struct dwarf2_debug_file 86 { 87 /* The actual bfd from which debug info was loaded. Might be 88 different to orig_bfd because of gnu_debuglink sections. */ 89 bfd *bfd_ptr; 90 91 /* Pointer to the symbol table. */ 92 asymbol **syms; 93 94 /* The current info pointer for the .debug_info section being parsed. */ 95 bfd_byte *info_ptr; 96 97 /* A pointer to the memory block allocated for .debug_info sections. */ 98 bfd_byte *dwarf_info_buffer; 99 100 /* Length of the loaded .debug_info sections. */ 101 bfd_size_type dwarf_info_size; 102 103 /* Pointer to the .debug_abbrev section loaded into memory. */ 104 bfd_byte *dwarf_abbrev_buffer; 105 106 /* Length of the loaded .debug_abbrev section. */ 107 bfd_size_type dwarf_abbrev_size; 108 109 /* Buffer for decode_line_info. */ 110 bfd_byte *dwarf_line_buffer; 111 112 /* Length of the loaded .debug_line section. */ 113 bfd_size_type dwarf_line_size; 114 115 /* Pointer to the .debug_str section loaded into memory. */ 116 bfd_byte *dwarf_str_buffer; 117 118 /* Length of the loaded .debug_str section. */ 119 bfd_size_type dwarf_str_size; 120 121 /* Pointer to the .debug_line_str section loaded into memory. */ 122 bfd_byte *dwarf_line_str_buffer; 123 124 /* Length of the loaded .debug_line_str section. */ 125 bfd_size_type dwarf_line_str_size; 126 127 /* Pointer to the .debug_ranges section loaded into memory. */ 128 bfd_byte *dwarf_ranges_buffer; 129 130 /* Length of the loaded .debug_ranges section. */ 131 bfd_size_type dwarf_ranges_size; 132 133 /* Pointer to the .debug_rnglists section loaded into memory. */ 134 bfd_byte *dwarf_rnglists_buffer; 135 136 /* Length of the loaded .debug_rnglists section. */ 137 bfd_size_type dwarf_rnglists_size; 138 139 /* A list of all previously read comp_units. */ 140 struct comp_unit *all_comp_units; 141 142 /* Last comp unit in list above. */ 143 struct comp_unit *last_comp_unit; 144 145 /* Line table at line_offset zero. */ 146 struct line_info_table *line_table; 147 148 /* Hash table to map offsets to decoded abbrevs. */ 149 htab_t abbrev_offsets; 150 }; 151 152 struct dwarf2_debug 153 { 154 /* Names of the debug sections. */ 155 const struct dwarf_debug_section *debug_sections; 156 157 /* Per-file stuff. */ 158 struct dwarf2_debug_file f, alt; 159 160 /* Pointer to the original bfd for which debug was loaded. This is what 161 we use to compare and so check that the cached debug data is still 162 valid - it saves having to possibly dereference the gnu_debuglink each 163 time. */ 164 bfd *orig_bfd; 165 166 /* If the most recent call to bfd_find_nearest_line was given an 167 address in an inlined function, preserve a pointer into the 168 calling chain for subsequent calls to bfd_find_inliner_info to 169 use. */ 170 struct funcinfo *inliner_chain; 171 172 /* Section VMAs at the time the stash was built. */ 173 bfd_vma *sec_vma; 174 /* Number of sections in the SEC_VMA table. */ 175 unsigned int sec_vma_count; 176 177 /* Number of sections whose VMA we must adjust. */ 178 int adjusted_section_count; 179 180 /* Array of sections with adjusted VMA. */ 181 struct adjusted_section *adjusted_sections; 182 183 /* Number of times find_line is called. This is used in 184 the heuristic for enabling the info hash tables. */ 185 int info_hash_count; 186 187 #define STASH_INFO_HASH_TRIGGER 100 188 189 /* Hash table mapping symbol names to function infos. */ 190 struct info_hash_table *funcinfo_hash_table; 191 192 /* Hash table mapping symbol names to variable infos. */ 193 struct info_hash_table *varinfo_hash_table; 194 195 /* Head of comp_unit list in the last hash table update. */ 196 struct comp_unit *hash_units_head; 197 198 /* Status of info hash. */ 199 int info_hash_status; 200 #define STASH_INFO_HASH_OFF 0 201 #define STASH_INFO_HASH_ON 1 202 #define STASH_INFO_HASH_DISABLED 2 203 204 /* True if we opened bfd_ptr. */ 205 bfd_boolean close_on_cleanup; 206 }; 207 208 struct arange 209 { 210 struct arange *next; 211 bfd_vma low; 212 bfd_vma high; 213 }; 214 215 /* A minimal decoding of DWARF2 compilation units. We only decode 216 what's needed to get to the line number information. */ 217 218 struct comp_unit 219 { 220 /* Chain the previously read compilation units. */ 221 struct comp_unit *next_unit; 222 223 /* Likewise, chain the compilation unit read after this one. 224 The comp units are stored in reversed reading order. */ 225 struct comp_unit *prev_unit; 226 227 /* Keep the bfd convenient (for memory allocation). */ 228 bfd *abfd; 229 230 /* The lowest and highest addresses contained in this compilation 231 unit as specified in the compilation unit header. */ 232 struct arange arange; 233 234 /* The DW_AT_name attribute (for error messages). */ 235 char *name; 236 237 /* The abbrev hash table. */ 238 struct abbrev_info **abbrevs; 239 240 /* DW_AT_language. */ 241 int lang; 242 243 /* Note that an error was found by comp_unit_find_nearest_line. */ 244 int error; 245 246 /* The DW_AT_comp_dir attribute. */ 247 char *comp_dir; 248 249 /* TRUE if there is a line number table associated with this comp. unit. */ 250 int stmtlist; 251 252 /* Pointer to the current comp_unit so that we can find a given entry 253 by its reference. */ 254 bfd_byte *info_ptr_unit; 255 256 /* The offset into .debug_line of the line number table. */ 257 unsigned long line_offset; 258 259 /* Pointer to the first child die for the comp unit. */ 260 bfd_byte *first_child_die_ptr; 261 262 /* The end of the comp unit. */ 263 bfd_byte *end_ptr; 264 265 /* The decoded line number, NULL if not yet decoded. */ 266 struct line_info_table *line_table; 267 268 /* A list of the functions found in this comp. unit. */ 269 struct funcinfo *function_table; 270 271 /* A table of function information references searchable by address. */ 272 struct lookup_funcinfo *lookup_funcinfo_table; 273 274 /* Number of functions in the function_table and sorted_function_table. */ 275 bfd_size_type number_of_functions; 276 277 /* A list of the variables found in this comp. unit. */ 278 struct varinfo *variable_table; 279 280 /* Pointers to dwarf2_debug structures. */ 281 struct dwarf2_debug *stash; 282 struct dwarf2_debug_file *file; 283 284 /* DWARF format version for this unit - from unit header. */ 285 int version; 286 287 /* Address size for this unit - from unit header. */ 288 unsigned char addr_size; 289 290 /* Offset size for this unit - from unit header. */ 291 unsigned char offset_size; 292 293 /* Base address for this unit - from DW_AT_low_pc attribute of 294 DW_TAG_compile_unit DIE */ 295 bfd_vma base_address; 296 297 /* TRUE if symbols are cached in hash table for faster lookup by name. */ 298 bfd_boolean cached; 299 }; 300 301 /* This data structure holds the information of an abbrev. */ 302 struct abbrev_info 303 { 304 unsigned int number; /* Number identifying abbrev. */ 305 enum dwarf_tag tag; /* DWARF tag. */ 306 bfd_boolean has_children; /* TRUE if the abbrev has children. */ 307 unsigned int num_attrs; /* Number of attributes. */ 308 struct attr_abbrev * attrs; /* An array of attribute descriptions. */ 309 struct abbrev_info * next; /* Next in chain. */ 310 }; 311 312 struct attr_abbrev 313 { 314 enum dwarf_attribute name; 315 enum dwarf_form form; 316 bfd_vma implicit_const; 317 }; 318 319 /* Map of uncompressed DWARF debug section name to compressed one. It 320 is terminated by NULL uncompressed_name. */ 321 322 const struct dwarf_debug_section dwarf_debug_sections[] = 323 { 324 { ".debug_abbrev", ".zdebug_abbrev" }, 325 { ".debug_aranges", ".zdebug_aranges" }, 326 { ".debug_frame", ".zdebug_frame" }, 327 { ".debug_info", ".zdebug_info" }, 328 { ".debug_info", ".zdebug_info" }, 329 { ".debug_line", ".zdebug_line" }, 330 { ".debug_loc", ".zdebug_loc" }, 331 { ".debug_macinfo", ".zdebug_macinfo" }, 332 { ".debug_macro", ".zdebug_macro" }, 333 { ".debug_pubnames", ".zdebug_pubnames" }, 334 { ".debug_pubtypes", ".zdebug_pubtypes" }, 335 { ".debug_ranges", ".zdebug_ranges" }, 336 { ".debug_rnglists", ".zdebug_rnglist" }, 337 { ".debug_static_func", ".zdebug_static_func" }, 338 { ".debug_static_vars", ".zdebug_static_vars" }, 339 { ".debug_str", ".zdebug_str", }, 340 { ".debug_str", ".zdebug_str", }, 341 { ".debug_line_str", ".zdebug_line_str", }, 342 { ".debug_types", ".zdebug_types" }, 343 /* GNU DWARF 1 extensions */ 344 { ".debug_sfnames", ".zdebug_sfnames" }, 345 { ".debug_srcinfo", ".zebug_srcinfo" }, 346 /* SGI/MIPS DWARF 2 extensions */ 347 { ".debug_funcnames", ".zdebug_funcnames" }, 348 { ".debug_typenames", ".zdebug_typenames" }, 349 { ".debug_varnames", ".zdebug_varnames" }, 350 { ".debug_weaknames", ".zdebug_weaknames" }, 351 { NULL, NULL }, 352 }; 353 354 /* NB/ Numbers in this enum must match up with indices 355 into the dwarf_debug_sections[] array above. */ 356 enum dwarf_debug_section_enum 357 { 358 debug_abbrev = 0, 359 debug_aranges, 360 debug_frame, 361 debug_info, 362 debug_info_alt, 363 debug_line, 364 debug_loc, 365 debug_macinfo, 366 debug_macro, 367 debug_pubnames, 368 debug_pubtypes, 369 debug_ranges, 370 debug_rnglists, 371 debug_static_func, 372 debug_static_vars, 373 debug_str, 374 debug_str_alt, 375 debug_line_str, 376 debug_types, 377 debug_sfnames, 378 debug_srcinfo, 379 debug_funcnames, 380 debug_typenames, 381 debug_varnames, 382 debug_weaknames, 383 debug_max 384 }; 385 386 /* A static assertion. */ 387 extern int dwarf_debug_section_assert[ARRAY_SIZE (dwarf_debug_sections) 388 == debug_max + 1 ? 1 : -1]; 389 390 #ifndef ABBREV_HASH_SIZE 391 #define ABBREV_HASH_SIZE 121 392 #endif 393 #ifndef ATTR_ALLOC_CHUNK 394 #define ATTR_ALLOC_CHUNK 4 395 #endif 396 397 /* Variable and function hash tables. This is used to speed up look-up 398 in lookup_symbol_in_var_table() and lookup_symbol_in_function_table(). 399 In order to share code between variable and function infos, we use 400 a list of untyped pointer for all variable/function info associated with 401 a symbol. We waste a bit of memory for list with one node but that 402 simplifies the code. */ 403 404 struct info_list_node 405 { 406 struct info_list_node *next; 407 void *info; 408 }; 409 410 /* Info hash entry. */ 411 struct info_hash_entry 412 { 413 struct bfd_hash_entry root; 414 struct info_list_node *head; 415 }; 416 417 struct info_hash_table 418 { 419 struct bfd_hash_table base; 420 }; 421 422 /* Function to create a new entry in info hash table. */ 423 424 static struct bfd_hash_entry * 425 info_hash_table_newfunc (struct bfd_hash_entry *entry, 426 struct bfd_hash_table *table, 427 const char *string) 428 { 429 struct info_hash_entry *ret = (struct info_hash_entry *) entry; 430 431 /* Allocate the structure if it has not already been allocated by a 432 derived class. */ 433 if (ret == NULL) 434 { 435 ret = (struct info_hash_entry *) bfd_hash_allocate (table, 436 sizeof (* ret)); 437 if (ret == NULL) 438 return NULL; 439 } 440 441 /* Call the allocation method of the base class. */ 442 ret = ((struct info_hash_entry *) 443 bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string)); 444 445 /* Initialize the local fields here. */ 446 if (ret) 447 ret->head = NULL; 448 449 return (struct bfd_hash_entry *) ret; 450 } 451 452 /* Function to create a new info hash table. It returns a pointer to the 453 newly created table or NULL if there is any error. We need abfd 454 solely for memory allocation. */ 455 456 static struct info_hash_table * 457 create_info_hash_table (bfd *abfd) 458 { 459 struct info_hash_table *hash_table; 460 461 hash_table = ((struct info_hash_table *) 462 bfd_alloc (abfd, sizeof (struct info_hash_table))); 463 if (!hash_table) 464 return hash_table; 465 466 if (!bfd_hash_table_init (&hash_table->base, info_hash_table_newfunc, 467 sizeof (struct info_hash_entry))) 468 { 469 bfd_release (abfd, hash_table); 470 return NULL; 471 } 472 473 return hash_table; 474 } 475 476 /* Insert an info entry into an info hash table. We do not check of 477 duplicate entries. Also, the caller need to guarantee that the 478 right type of info in inserted as info is passed as a void* pointer. 479 This function returns true if there is no error. */ 480 481 static bfd_boolean 482 insert_info_hash_table (struct info_hash_table *hash_table, 483 const char *key, 484 void *info, 485 bfd_boolean copy_p) 486 { 487 struct info_hash_entry *entry; 488 struct info_list_node *node; 489 490 entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base, 491 key, TRUE, copy_p); 492 if (!entry) 493 return FALSE; 494 495 node = (struct info_list_node *) bfd_hash_allocate (&hash_table->base, 496 sizeof (*node)); 497 if (!node) 498 return FALSE; 499 500 node->info = info; 501 node->next = entry->head; 502 entry->head = node; 503 504 return TRUE; 505 } 506 507 /* Look up an info entry list from an info hash table. Return NULL 508 if there is none. */ 509 510 static struct info_list_node * 511 lookup_info_hash_table (struct info_hash_table *hash_table, const char *key) 512 { 513 struct info_hash_entry *entry; 514 515 entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base, key, 516 FALSE, FALSE); 517 return entry ? entry->head : NULL; 518 } 519 520 /* Read a section into its appropriate place in the dwarf2_debug 521 struct (indicated by SECTION_BUFFER and SECTION_SIZE). If SYMS is 522 not NULL, use bfd_simple_get_relocated_section_contents to read the 523 section contents, otherwise use bfd_get_section_contents. Fail if 524 the located section does not contain at least OFFSET bytes. */ 525 526 static bfd_boolean 527 read_section (bfd * abfd, 528 const struct dwarf_debug_section *sec, 529 asymbol ** syms, 530 bfd_uint64_t offset, 531 bfd_byte ** section_buffer, 532 bfd_size_type * section_size) 533 { 534 asection *msec; 535 const char *section_name = sec->uncompressed_name; 536 bfd_byte *contents = *section_buffer; 537 bfd_size_type amt; 538 539 /* The section may have already been read. */ 540 if (contents == NULL) 541 { 542 msec = bfd_get_section_by_name (abfd, section_name); 543 if (! msec) 544 { 545 section_name = sec->compressed_name; 546 if (section_name != NULL) 547 msec = bfd_get_section_by_name (abfd, section_name); 548 } 549 if (! msec) 550 { 551 _bfd_error_handler (_("DWARF error: can't find %s section."), 552 sec->uncompressed_name); 553 bfd_set_error (bfd_error_bad_value); 554 return FALSE; 555 } 556 557 *section_size = msec->rawsize ? msec->rawsize : msec->size; 558 /* Paranoia - alloc one extra so that we can make sure a string 559 section is NUL terminated. */ 560 amt = *section_size + 1; 561 if (amt == 0) 562 { 563 bfd_set_error (bfd_error_no_memory); 564 return FALSE; 565 } 566 contents = (bfd_byte *) bfd_malloc (amt); 567 if (contents == NULL) 568 return FALSE; 569 if (syms 570 ? !bfd_simple_get_relocated_section_contents (abfd, msec, contents, 571 syms) 572 : !bfd_get_section_contents (abfd, msec, contents, 0, *section_size)) 573 { 574 free (contents); 575 return FALSE; 576 } 577 contents[*section_size] = 0; 578 *section_buffer = contents; 579 } 580 581 /* It is possible to get a bad value for the offset into the section 582 that the client wants. Validate it here to avoid trouble later. */ 583 if (offset != 0 && offset >= *section_size) 584 { 585 /* xgettext: c-format */ 586 _bfd_error_handler (_("DWARF error: offset (%" PRIu64 ")" 587 " greater than or equal to %s size (%" PRIu64 ")"), 588 (uint64_t) offset, section_name, 589 (uint64_t) *section_size); 590 bfd_set_error (bfd_error_bad_value); 591 return FALSE; 592 } 593 594 return TRUE; 595 } 596 597 /* Read dwarf information from a buffer. */ 598 599 static unsigned int 600 read_1_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf, bfd_byte *end) 601 { 602 if (buf + 1 > end) 603 return 0; 604 return bfd_get_8 (abfd, buf); 605 } 606 607 static int 608 read_1_signed_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf, bfd_byte *end) 609 { 610 if (buf + 1 > end) 611 return 0; 612 return bfd_get_signed_8 (abfd, buf); 613 } 614 615 static unsigned int 616 read_2_bytes (bfd *abfd, bfd_byte *buf, bfd_byte *end) 617 { 618 if (buf + 2 > end) 619 return 0; 620 return bfd_get_16 (abfd, buf); 621 } 622 623 static unsigned int 624 read_4_bytes (bfd *abfd, bfd_byte *buf, bfd_byte *end) 625 { 626 if (buf + 4 > end) 627 return 0; 628 return bfd_get_32 (abfd, buf); 629 } 630 631 static bfd_uint64_t 632 read_8_bytes (bfd *abfd, bfd_byte *buf, bfd_byte *end) 633 { 634 if (buf + 8 > end) 635 return 0; 636 return bfd_get_64 (abfd, buf); 637 } 638 639 static bfd_byte * 640 read_n_bytes (bfd_byte * buf, 641 bfd_byte * end, 642 struct dwarf_block * block) 643 { 644 unsigned int size = block->size; 645 bfd_byte * block_end = buf + size; 646 647 if (block_end > end || block_end < buf) 648 { 649 block->data = NULL; 650 block->size = 0; 651 return end; 652 } 653 else 654 { 655 block->data = buf; 656 return block_end; 657 } 658 } 659 660 /* Scans a NUL terminated string starting at BUF, returning a pointer to it. 661 Returns the number of characters in the string, *including* the NUL byte, 662 in BYTES_READ_PTR. This value is set even if the function fails. Bytes 663 at or beyond BUF_END will not be read. Returns NULL if there was a 664 problem, or if the string is empty. */ 665 666 static char * 667 read_string (bfd * abfd ATTRIBUTE_UNUSED, 668 bfd_byte * buf, 669 bfd_byte * buf_end, 670 unsigned int * bytes_read_ptr) 671 { 672 bfd_byte *str = buf; 673 674 if (buf >= buf_end) 675 { 676 * bytes_read_ptr = 0; 677 return NULL; 678 } 679 680 if (*str == '\0') 681 { 682 * bytes_read_ptr = 1; 683 return NULL; 684 } 685 686 while (buf < buf_end) 687 if (* buf ++ == 0) 688 { 689 * bytes_read_ptr = buf - str; 690 return (char *) str; 691 } 692 693 * bytes_read_ptr = buf - str; 694 return NULL; 695 } 696 697 /* Reads an offset from BUF and then locates the string at this offset 698 inside the debug string section. Returns a pointer to the string. 699 Returns the number of bytes read from BUF, *not* the length of the string, 700 in BYTES_READ_PTR. This value is set even if the function fails. Bytes 701 at or beyond BUF_END will not be read from BUF. Returns NULL if there was 702 a problem, or if the string is empty. Does not check for NUL termination 703 of the string. */ 704 705 static char * 706 read_indirect_string (struct comp_unit * unit, 707 bfd_byte * buf, 708 bfd_byte * buf_end, 709 unsigned int * bytes_read_ptr) 710 { 711 bfd_uint64_t offset; 712 struct dwarf2_debug *stash = unit->stash; 713 struct dwarf2_debug_file *file = unit->file; 714 char *str; 715 716 if (buf + unit->offset_size > buf_end) 717 { 718 * bytes_read_ptr = 0; 719 return NULL; 720 } 721 722 if (unit->offset_size == 4) 723 offset = read_4_bytes (unit->abfd, buf, buf_end); 724 else 725 offset = read_8_bytes (unit->abfd, buf, buf_end); 726 727 *bytes_read_ptr = unit->offset_size; 728 729 if (! read_section (unit->abfd, &stash->debug_sections[debug_str], 730 file->syms, offset, 731 &file->dwarf_str_buffer, &file->dwarf_str_size)) 732 return NULL; 733 734 str = (char *) file->dwarf_str_buffer + offset; 735 if (*str == '\0') 736 return NULL; 737 return str; 738 } 739 740 /* Like read_indirect_string but from .debug_line_str section. */ 741 742 static char * 743 read_indirect_line_string (struct comp_unit * unit, 744 bfd_byte * buf, 745 bfd_byte * buf_end, 746 unsigned int * bytes_read_ptr) 747 { 748 bfd_uint64_t offset; 749 struct dwarf2_debug *stash = unit->stash; 750 struct dwarf2_debug_file *file = unit->file; 751 char *str; 752 753 if (buf + unit->offset_size > buf_end) 754 { 755 * bytes_read_ptr = 0; 756 return NULL; 757 } 758 759 if (unit->offset_size == 4) 760 offset = read_4_bytes (unit->abfd, buf, buf_end); 761 else 762 offset = read_8_bytes (unit->abfd, buf, buf_end); 763 764 *bytes_read_ptr = unit->offset_size; 765 766 if (! read_section (unit->abfd, &stash->debug_sections[debug_line_str], 767 file->syms, offset, 768 &file->dwarf_line_str_buffer, 769 &file->dwarf_line_str_size)) 770 return NULL; 771 772 str = (char *) file->dwarf_line_str_buffer + offset; 773 if (*str == '\0') 774 return NULL; 775 return str; 776 } 777 778 /* Like read_indirect_string but uses a .debug_str located in 779 an alternate file pointed to by the .gnu_debugaltlink section. 780 Used to impement DW_FORM_GNU_strp_alt. */ 781 782 static char * 783 read_alt_indirect_string (struct comp_unit * unit, 784 bfd_byte * buf, 785 bfd_byte * buf_end, 786 unsigned int * bytes_read_ptr) 787 { 788 bfd_uint64_t offset; 789 struct dwarf2_debug *stash = unit->stash; 790 char *str; 791 792 if (buf + unit->offset_size > buf_end) 793 { 794 * bytes_read_ptr = 0; 795 return NULL; 796 } 797 798 if (unit->offset_size == 4) 799 offset = read_4_bytes (unit->abfd, buf, buf_end); 800 else 801 offset = read_8_bytes (unit->abfd, buf, buf_end); 802 803 *bytes_read_ptr = unit->offset_size; 804 805 if (stash->alt.bfd_ptr == NULL) 806 { 807 bfd *debug_bfd; 808 char *debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR); 809 810 if (debug_filename == NULL) 811 return NULL; 812 813 debug_bfd = bfd_openr (debug_filename, NULL); 814 free (debug_filename); 815 if (debug_bfd == NULL) 816 /* FIXME: Should we report our failure to follow the debuglink ? */ 817 return NULL; 818 819 if (!bfd_check_format (debug_bfd, bfd_object)) 820 { 821 bfd_close (debug_bfd); 822 return NULL; 823 } 824 stash->alt.bfd_ptr = debug_bfd; 825 } 826 827 if (! read_section (unit->stash->alt.bfd_ptr, 828 stash->debug_sections + debug_str_alt, 829 stash->alt.syms, offset, 830 &stash->alt.dwarf_str_buffer, 831 &stash->alt.dwarf_str_size)) 832 return NULL; 833 834 str = (char *) stash->alt.dwarf_str_buffer + offset; 835 if (*str == '\0') 836 return NULL; 837 838 return str; 839 } 840 841 /* Resolve an alternate reference from UNIT at OFFSET. 842 Returns a pointer into the loaded alternate CU upon success 843 or NULL upon failure. */ 844 845 static bfd_byte * 846 read_alt_indirect_ref (struct comp_unit * unit, 847 bfd_uint64_t offset) 848 { 849 struct dwarf2_debug *stash = unit->stash; 850 851 if (stash->alt.bfd_ptr == NULL) 852 { 853 bfd *debug_bfd; 854 char *debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR); 855 856 if (debug_filename == NULL) 857 return NULL; 858 859 debug_bfd = bfd_openr (debug_filename, NULL); 860 free (debug_filename); 861 if (debug_bfd == NULL) 862 /* FIXME: Should we report our failure to follow the debuglink ? */ 863 return NULL; 864 865 if (!bfd_check_format (debug_bfd, bfd_object)) 866 { 867 bfd_close (debug_bfd); 868 return NULL; 869 } 870 stash->alt.bfd_ptr = debug_bfd; 871 } 872 873 if (! read_section (unit->stash->alt.bfd_ptr, 874 stash->debug_sections + debug_info_alt, 875 stash->alt.syms, offset, 876 &stash->alt.dwarf_info_buffer, 877 &stash->alt.dwarf_info_size)) 878 return NULL; 879 880 return stash->alt.dwarf_info_buffer + offset; 881 } 882 883 static bfd_uint64_t 884 read_address (struct comp_unit *unit, bfd_byte *buf, bfd_byte * buf_end) 885 { 886 int signed_vma = 0; 887 888 if (bfd_get_flavour (unit->abfd) == bfd_target_elf_flavour) 889 signed_vma = get_elf_backend_data (unit->abfd)->sign_extend_vma; 890 891 if (buf + unit->addr_size > buf_end) 892 return 0; 893 894 if (signed_vma) 895 { 896 switch (unit->addr_size) 897 { 898 case 8: 899 return bfd_get_signed_64 (unit->abfd, buf); 900 case 4: 901 return bfd_get_signed_32 (unit->abfd, buf); 902 case 2: 903 return bfd_get_signed_16 (unit->abfd, buf); 904 default: 905 abort (); 906 } 907 } 908 else 909 { 910 switch (unit->addr_size) 911 { 912 case 8: 913 return bfd_get_64 (unit->abfd, buf); 914 case 4: 915 return bfd_get_32 (unit->abfd, buf); 916 case 2: 917 return bfd_get_16 (unit->abfd, buf); 918 default: 919 abort (); 920 } 921 } 922 } 923 924 /* Lookup an abbrev_info structure in the abbrev hash table. */ 925 926 static struct abbrev_info * 927 lookup_abbrev (unsigned int number, struct abbrev_info **abbrevs) 928 { 929 unsigned int hash_number; 930 struct abbrev_info *abbrev; 931 932 hash_number = number % ABBREV_HASH_SIZE; 933 abbrev = abbrevs[hash_number]; 934 935 while (abbrev) 936 { 937 if (abbrev->number == number) 938 return abbrev; 939 else 940 abbrev = abbrev->next; 941 } 942 943 return NULL; 944 } 945 946 /* We keep a hash table to map .debug_abbrev section offsets to the 947 array of abbrevs, so that compilation units using the same set of 948 abbrevs do not waste memory. */ 949 950 struct abbrev_offset_entry 951 { 952 size_t offset; 953 struct abbrev_info **abbrevs; 954 }; 955 956 static hashval_t 957 hash_abbrev (const void *p) 958 { 959 const struct abbrev_offset_entry *ent = p; 960 return htab_hash_pointer ((void *) ent->offset); 961 } 962 963 static int 964 eq_abbrev (const void *pa, const void *pb) 965 { 966 const struct abbrev_offset_entry *a = pa; 967 const struct abbrev_offset_entry *b = pb; 968 return a->offset == b->offset; 969 } 970 971 static void 972 del_abbrev (void *p) 973 { 974 struct abbrev_offset_entry *ent = p; 975 struct abbrev_info **abbrevs = ent->abbrevs; 976 size_t i; 977 978 for (i = 0; i < ABBREV_HASH_SIZE; i++) 979 { 980 struct abbrev_info *abbrev = abbrevs[i]; 981 982 while (abbrev) 983 { 984 free (abbrev->attrs); 985 abbrev = abbrev->next; 986 } 987 } 988 free (ent); 989 } 990 991 /* In DWARF version 2, the description of the debugging information is 992 stored in a separate .debug_abbrev section. Before we read any 993 dies from a section we read in all abbreviations and install them 994 in a hash table. */ 995 996 static struct abbrev_info** 997 read_abbrevs (bfd *abfd, bfd_uint64_t offset, struct dwarf2_debug *stash, 998 struct dwarf2_debug_file *file) 999 { 1000 struct abbrev_info **abbrevs; 1001 bfd_byte *abbrev_ptr; 1002 bfd_byte *abbrev_end; 1003 struct abbrev_info *cur_abbrev; 1004 unsigned int abbrev_number, bytes_read, abbrev_name; 1005 unsigned int abbrev_form, hash_number; 1006 size_t amt; 1007 void **slot; 1008 struct abbrev_offset_entry ent = { offset, NULL }; 1009 1010 if (ent.offset != offset) 1011 return NULL; 1012 1013 slot = htab_find_slot (file->abbrev_offsets, &ent, INSERT); 1014 if (slot == NULL) 1015 return NULL; 1016 if (*slot != NULL) 1017 return ((struct abbrev_offset_entry *) (*slot))->abbrevs; 1018 1019 if (! read_section (abfd, &stash->debug_sections[debug_abbrev], 1020 file->syms, offset, 1021 &file->dwarf_abbrev_buffer, 1022 &file->dwarf_abbrev_size)) 1023 return NULL; 1024 1025 amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE; 1026 abbrevs = (struct abbrev_info **) bfd_zalloc (abfd, amt); 1027 if (abbrevs == NULL) 1028 return NULL; 1029 1030 abbrev_ptr = file->dwarf_abbrev_buffer + offset; 1031 abbrev_end = file->dwarf_abbrev_buffer + file->dwarf_abbrev_size; 1032 abbrev_number = _bfd_safe_read_leb128 (abfd, abbrev_ptr, &bytes_read, 1033 FALSE, abbrev_end); 1034 abbrev_ptr += bytes_read; 1035 1036 /* Loop until we reach an abbrev number of 0. */ 1037 while (abbrev_number) 1038 { 1039 amt = sizeof (struct abbrev_info); 1040 cur_abbrev = (struct abbrev_info *) bfd_zalloc (abfd, amt); 1041 if (cur_abbrev == NULL) 1042 goto fail; 1043 1044 /* Read in abbrev header. */ 1045 cur_abbrev->number = abbrev_number; 1046 cur_abbrev->tag = (enum dwarf_tag) 1047 _bfd_safe_read_leb128 (abfd, abbrev_ptr, &bytes_read, 1048 FALSE, abbrev_end); 1049 abbrev_ptr += bytes_read; 1050 cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr, abbrev_end); 1051 abbrev_ptr += 1; 1052 1053 /* Now read in declarations. */ 1054 for (;;) 1055 { 1056 /* Initialize it just to avoid a GCC false warning. */ 1057 bfd_vma implicit_const = -1; 1058 1059 abbrev_name = _bfd_safe_read_leb128 (abfd, abbrev_ptr, &bytes_read, 1060 FALSE, abbrev_end); 1061 abbrev_ptr += bytes_read; 1062 abbrev_form = _bfd_safe_read_leb128 (abfd, abbrev_ptr, &bytes_read, 1063 FALSE, abbrev_end); 1064 abbrev_ptr += bytes_read; 1065 if (abbrev_form == DW_FORM_implicit_const) 1066 { 1067 implicit_const = _bfd_safe_read_leb128 (abfd, abbrev_ptr, 1068 &bytes_read, TRUE, 1069 abbrev_end); 1070 abbrev_ptr += bytes_read; 1071 } 1072 1073 if (abbrev_name == 0) 1074 break; 1075 1076 if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0) 1077 { 1078 struct attr_abbrev *tmp; 1079 1080 amt = cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK; 1081 amt *= sizeof (struct attr_abbrev); 1082 tmp = (struct attr_abbrev *) bfd_realloc (cur_abbrev->attrs, amt); 1083 if (tmp == NULL) 1084 goto fail; 1085 cur_abbrev->attrs = tmp; 1086 } 1087 1088 cur_abbrev->attrs[cur_abbrev->num_attrs].name 1089 = (enum dwarf_attribute) abbrev_name; 1090 cur_abbrev->attrs[cur_abbrev->num_attrs].form 1091 = (enum dwarf_form) abbrev_form; 1092 cur_abbrev->attrs[cur_abbrev->num_attrs].implicit_const 1093 = implicit_const; 1094 ++cur_abbrev->num_attrs; 1095 } 1096 1097 hash_number = abbrev_number % ABBREV_HASH_SIZE; 1098 cur_abbrev->next = abbrevs[hash_number]; 1099 abbrevs[hash_number] = cur_abbrev; 1100 1101 /* Get next abbreviation. 1102 Under Irix6 the abbreviations for a compilation unit are not 1103 always properly terminated with an abbrev number of 0. 1104 Exit loop if we encounter an abbreviation which we have 1105 already read (which means we are about to read the abbreviations 1106 for the next compile unit) or if the end of the abbreviation 1107 table is reached. */ 1108 if ((size_t) (abbrev_ptr - file->dwarf_abbrev_buffer) 1109 >= file->dwarf_abbrev_size) 1110 break; 1111 abbrev_number = _bfd_safe_read_leb128 (abfd, abbrev_ptr, 1112 &bytes_read, FALSE, abbrev_end); 1113 abbrev_ptr += bytes_read; 1114 if (lookup_abbrev (abbrev_number, abbrevs) != NULL) 1115 break; 1116 } 1117 1118 *slot = bfd_malloc (sizeof ent); 1119 if (!*slot) 1120 goto fail; 1121 ent.abbrevs = abbrevs; 1122 memcpy (*slot, &ent, sizeof ent); 1123 return abbrevs; 1124 1125 fail: 1126 if (abbrevs != NULL) 1127 { 1128 size_t i; 1129 1130 for (i = 0; i < ABBREV_HASH_SIZE; i++) 1131 { 1132 struct abbrev_info *abbrev = abbrevs[i]; 1133 1134 while (abbrev) 1135 { 1136 free (abbrev->attrs); 1137 abbrev = abbrev->next; 1138 } 1139 } 1140 free (abbrevs); 1141 } 1142 return NULL; 1143 } 1144 1145 /* Returns true if the form is one which has a string value. */ 1146 1147 static inline bfd_boolean 1148 is_str_attr (enum dwarf_form form) 1149 { 1150 return (form == DW_FORM_string || form == DW_FORM_strp 1151 || form == DW_FORM_line_strp || form == DW_FORM_GNU_strp_alt); 1152 } 1153 1154 /* Read and fill in the value of attribute ATTR as described by FORM. 1155 Read data starting from INFO_PTR, but never at or beyond INFO_PTR_END. 1156 Returns an updated INFO_PTR taking into account the amount of data read. */ 1157 1158 static bfd_byte * 1159 read_attribute_value (struct attribute * attr, 1160 unsigned form, 1161 bfd_vma implicit_const, 1162 struct comp_unit * unit, 1163 bfd_byte * info_ptr, 1164 bfd_byte * info_ptr_end) 1165 { 1166 bfd *abfd = unit->abfd; 1167 unsigned int bytes_read; 1168 struct dwarf_block *blk; 1169 size_t amt; 1170 1171 if (info_ptr >= info_ptr_end && form != DW_FORM_flag_present) 1172 { 1173 _bfd_error_handler (_("DWARF error: info pointer extends beyond end of attributes")); 1174 bfd_set_error (bfd_error_bad_value); 1175 return info_ptr; 1176 } 1177 1178 attr->form = (enum dwarf_form) form; 1179 1180 switch (form) 1181 { 1182 case DW_FORM_ref_addr: 1183 /* DW_FORM_ref_addr is an address in DWARF2, and an offset in 1184 DWARF3. */ 1185 if (unit->version == 3 || unit->version == 4) 1186 { 1187 if (unit->offset_size == 4) 1188 attr->u.val = read_4_bytes (unit->abfd, info_ptr, info_ptr_end); 1189 else 1190 attr->u.val = read_8_bytes (unit->abfd, info_ptr, info_ptr_end); 1191 info_ptr += unit->offset_size; 1192 break; 1193 } 1194 /* FALLTHROUGH */ 1195 case DW_FORM_addr: 1196 attr->u.val = read_address (unit, info_ptr, info_ptr_end); 1197 info_ptr += unit->addr_size; 1198 break; 1199 case DW_FORM_GNU_ref_alt: 1200 case DW_FORM_sec_offset: 1201 if (unit->offset_size == 4) 1202 attr->u.val = read_4_bytes (unit->abfd, info_ptr, info_ptr_end); 1203 else 1204 attr->u.val = read_8_bytes (unit->abfd, info_ptr, info_ptr_end); 1205 info_ptr += unit->offset_size; 1206 break; 1207 case DW_FORM_block2: 1208 amt = sizeof (struct dwarf_block); 1209 blk = (struct dwarf_block *) bfd_alloc (abfd, amt); 1210 if (blk == NULL) 1211 return NULL; 1212 blk->size = read_2_bytes (abfd, info_ptr, info_ptr_end); 1213 info_ptr += 2; 1214 info_ptr = read_n_bytes (info_ptr, info_ptr_end, blk); 1215 attr->u.blk = blk; 1216 break; 1217 case DW_FORM_block4: 1218 amt = sizeof (struct dwarf_block); 1219 blk = (struct dwarf_block *) bfd_alloc (abfd, amt); 1220 if (blk == NULL) 1221 return NULL; 1222 blk->size = read_4_bytes (abfd, info_ptr, info_ptr_end); 1223 info_ptr += 4; 1224 info_ptr = read_n_bytes (info_ptr, info_ptr_end, blk); 1225 attr->u.blk = blk; 1226 break; 1227 case DW_FORM_data2: 1228 attr->u.val = read_2_bytes (abfd, info_ptr, info_ptr_end); 1229 info_ptr += 2; 1230 break; 1231 case DW_FORM_data4: 1232 attr->u.val = read_4_bytes (abfd, info_ptr, info_ptr_end); 1233 info_ptr += 4; 1234 break; 1235 case DW_FORM_data8: 1236 attr->u.val = read_8_bytes (abfd, info_ptr, info_ptr_end); 1237 info_ptr += 8; 1238 break; 1239 case DW_FORM_string: 1240 attr->u.str = read_string (abfd, info_ptr, info_ptr_end, &bytes_read); 1241 info_ptr += bytes_read; 1242 break; 1243 case DW_FORM_strp: 1244 attr->u.str = read_indirect_string (unit, info_ptr, info_ptr_end, &bytes_read); 1245 info_ptr += bytes_read; 1246 break; 1247 case DW_FORM_line_strp: 1248 attr->u.str = read_indirect_line_string (unit, info_ptr, info_ptr_end, &bytes_read); 1249 info_ptr += bytes_read; 1250 break; 1251 case DW_FORM_GNU_strp_alt: 1252 attr->u.str = read_alt_indirect_string (unit, info_ptr, info_ptr_end, &bytes_read); 1253 info_ptr += bytes_read; 1254 break; 1255 case DW_FORM_exprloc: 1256 case DW_FORM_block: 1257 amt = sizeof (struct dwarf_block); 1258 blk = (struct dwarf_block *) bfd_alloc (abfd, amt); 1259 if (blk == NULL) 1260 return NULL; 1261 blk->size = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read, 1262 FALSE, info_ptr_end); 1263 info_ptr += bytes_read; 1264 info_ptr = read_n_bytes (info_ptr, info_ptr_end, blk); 1265 attr->u.blk = blk; 1266 break; 1267 case DW_FORM_block1: 1268 amt = sizeof (struct dwarf_block); 1269 blk = (struct dwarf_block *) bfd_alloc (abfd, amt); 1270 if (blk == NULL) 1271 return NULL; 1272 blk->size = read_1_byte (abfd, info_ptr, info_ptr_end); 1273 info_ptr += 1; 1274 info_ptr = read_n_bytes (info_ptr, info_ptr_end, blk); 1275 attr->u.blk = blk; 1276 break; 1277 case DW_FORM_data1: 1278 attr->u.val = read_1_byte (abfd, info_ptr, info_ptr_end); 1279 info_ptr += 1; 1280 break; 1281 case DW_FORM_flag: 1282 attr->u.val = read_1_byte (abfd, info_ptr, info_ptr_end); 1283 info_ptr += 1; 1284 break; 1285 case DW_FORM_flag_present: 1286 attr->u.val = 1; 1287 break; 1288 case DW_FORM_sdata: 1289 attr->u.sval = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read, 1290 TRUE, info_ptr_end); 1291 info_ptr += bytes_read; 1292 break; 1293 case DW_FORM_udata: 1294 attr->u.val = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read, 1295 FALSE, info_ptr_end); 1296 info_ptr += bytes_read; 1297 break; 1298 case DW_FORM_ref1: 1299 attr->u.val = read_1_byte (abfd, info_ptr, info_ptr_end); 1300 info_ptr += 1; 1301 break; 1302 case DW_FORM_ref2: 1303 attr->u.val = read_2_bytes (abfd, info_ptr, info_ptr_end); 1304 info_ptr += 2; 1305 break; 1306 case DW_FORM_ref4: 1307 attr->u.val = read_4_bytes (abfd, info_ptr, info_ptr_end); 1308 info_ptr += 4; 1309 break; 1310 case DW_FORM_ref8: 1311 attr->u.val = read_8_bytes (abfd, info_ptr, info_ptr_end); 1312 info_ptr += 8; 1313 break; 1314 case DW_FORM_ref_sig8: 1315 attr->u.val = read_8_bytes (abfd, info_ptr, info_ptr_end); 1316 info_ptr += 8; 1317 break; 1318 case DW_FORM_ref_udata: 1319 attr->u.val = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read, 1320 FALSE, info_ptr_end); 1321 info_ptr += bytes_read; 1322 break; 1323 case DW_FORM_indirect: 1324 form = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read, 1325 FALSE, info_ptr_end); 1326 info_ptr += bytes_read; 1327 if (form == DW_FORM_implicit_const) 1328 { 1329 implicit_const = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read, 1330 TRUE, info_ptr_end); 1331 info_ptr += bytes_read; 1332 } 1333 info_ptr = read_attribute_value (attr, form, implicit_const, unit, 1334 info_ptr, info_ptr_end); 1335 break; 1336 case DW_FORM_implicit_const: 1337 attr->form = DW_FORM_sdata; 1338 attr->u.sval = implicit_const; 1339 break; 1340 case DW_FORM_data16: 1341 /* This is really a "constant", but there is no way to store that 1342 so pretend it is a 16 byte block instead. */ 1343 amt = sizeof (struct dwarf_block); 1344 blk = (struct dwarf_block *) bfd_alloc (abfd, amt); 1345 if (blk == NULL) 1346 return NULL; 1347 blk->size = 16; 1348 info_ptr = read_n_bytes (info_ptr, info_ptr_end, blk); 1349 attr->u.blk = blk; 1350 break; 1351 default: 1352 _bfd_error_handler (_("DWARF error: invalid or unhandled FORM value: %#x"), 1353 form); 1354 bfd_set_error (bfd_error_bad_value); 1355 return NULL; 1356 } 1357 return info_ptr; 1358 } 1359 1360 /* Read an attribute described by an abbreviated attribute. */ 1361 1362 static bfd_byte * 1363 read_attribute (struct attribute * attr, 1364 struct attr_abbrev * abbrev, 1365 struct comp_unit * unit, 1366 bfd_byte * info_ptr, 1367 bfd_byte * info_ptr_end) 1368 { 1369 attr->name = abbrev->name; 1370 info_ptr = read_attribute_value (attr, abbrev->form, abbrev->implicit_const, 1371 unit, info_ptr, info_ptr_end); 1372 return info_ptr; 1373 } 1374 1375 /* Return whether DW_AT_name will return the same as DW_AT_linkage_name 1376 for a function. */ 1377 1378 static bfd_boolean 1379 non_mangled (int lang) 1380 { 1381 switch (lang) 1382 { 1383 default: 1384 return FALSE; 1385 1386 case DW_LANG_C89: 1387 case DW_LANG_C: 1388 case DW_LANG_Ada83: 1389 case DW_LANG_Cobol74: 1390 case DW_LANG_Cobol85: 1391 case DW_LANG_Fortran77: 1392 case DW_LANG_Pascal83: 1393 case DW_LANG_C99: 1394 case DW_LANG_Ada95: 1395 case DW_LANG_PLI: 1396 case DW_LANG_UPC: 1397 case DW_LANG_C11: 1398 return TRUE; 1399 } 1400 } 1401 1402 /* Source line information table routines. */ 1403 1404 #define FILE_ALLOC_CHUNK 5 1405 #define DIR_ALLOC_CHUNK 5 1406 1407 struct line_info 1408 { 1409 struct line_info * prev_line; 1410 bfd_vma address; 1411 char * filename; 1412 unsigned int line; 1413 unsigned int column; 1414 unsigned int discriminator; 1415 unsigned char op_index; 1416 unsigned char end_sequence; /* End of (sequential) code sequence. */ 1417 }; 1418 1419 struct fileinfo 1420 { 1421 char * name; 1422 unsigned int dir; 1423 unsigned int time; 1424 unsigned int size; 1425 }; 1426 1427 struct line_sequence 1428 { 1429 bfd_vma low_pc; 1430 struct line_sequence* prev_sequence; 1431 struct line_info* last_line; /* Largest VMA. */ 1432 struct line_info** line_info_lookup; 1433 bfd_size_type num_lines; 1434 }; 1435 1436 struct line_info_table 1437 { 1438 bfd * abfd; 1439 unsigned int num_files; 1440 unsigned int num_dirs; 1441 unsigned int num_sequences; 1442 char * comp_dir; 1443 char ** dirs; 1444 struct fileinfo* files; 1445 struct line_sequence* sequences; 1446 struct line_info* lcl_head; /* Local head; used in 'add_line_info'. */ 1447 }; 1448 1449 /* Remember some information about each function. If the function is 1450 inlined (DW_TAG_inlined_subroutine) it may have two additional 1451 attributes, DW_AT_call_file and DW_AT_call_line, which specify the 1452 source code location where this function was inlined. */ 1453 1454 struct funcinfo 1455 { 1456 /* Pointer to previous function in list of all functions. */ 1457 struct funcinfo * prev_func; 1458 /* Pointer to function one scope higher. */ 1459 struct funcinfo * caller_func; 1460 /* Source location file name where caller_func inlines this func. */ 1461 char * caller_file; 1462 /* Source location file name. */ 1463 char * file; 1464 /* Source location line number where caller_func inlines this func. */ 1465 int caller_line; 1466 /* Source location line number. */ 1467 int line; 1468 int tag; 1469 bfd_boolean is_linkage; 1470 const char * name; 1471 struct arange arange; 1472 /* Where the symbol is defined. */ 1473 asection * sec; 1474 }; 1475 1476 struct lookup_funcinfo 1477 { 1478 /* Function information corresponding to this lookup table entry. */ 1479 struct funcinfo * funcinfo; 1480 1481 /* The lowest address for this specific function. */ 1482 bfd_vma low_addr; 1483 1484 /* The highest address of this function before the lookup table is sorted. 1485 The highest address of all prior functions after the lookup table is 1486 sorted, which is used for binary search. */ 1487 bfd_vma high_addr; 1488 /* Index of this function, used to ensure qsort is stable. */ 1489 unsigned int idx; 1490 }; 1491 1492 struct varinfo 1493 { 1494 /* Pointer to previous variable in list of all variables. */ 1495 struct varinfo *prev_var; 1496 /* The offset of the varinfo from the start of the unit. */ 1497 bfd_uint64_t unit_offset; 1498 /* Source location file name. */ 1499 char *file; 1500 /* Source location line number. */ 1501 int line; 1502 /* The type of this variable. */ 1503 int tag; 1504 /* The name of the variable, if it has one. */ 1505 char *name; 1506 /* The address of the variable. */ 1507 bfd_vma addr; 1508 /* Where the symbol is defined. */ 1509 asection *sec; 1510 /* Is this a stack variable? */ 1511 bfd_boolean stack; 1512 }; 1513 1514 /* Return TRUE if NEW_LINE should sort after LINE. */ 1515 1516 static inline bfd_boolean 1517 new_line_sorts_after (struct line_info *new_line, struct line_info *line) 1518 { 1519 return (new_line->address > line->address 1520 || (new_line->address == line->address 1521 && new_line->op_index > line->op_index)); 1522 } 1523 1524 1525 /* Adds a new entry to the line_info list in the line_info_table, ensuring 1526 that the list is sorted. Note that the line_info list is sorted from 1527 highest to lowest VMA (with possible duplicates); that is, 1528 line_info->prev_line always accesses an equal or smaller VMA. */ 1529 1530 static bfd_boolean 1531 add_line_info (struct line_info_table *table, 1532 bfd_vma address, 1533 unsigned char op_index, 1534 char *filename, 1535 unsigned int line, 1536 unsigned int column, 1537 unsigned int discriminator, 1538 int end_sequence) 1539 { 1540 size_t amt = sizeof (struct line_info); 1541 struct line_sequence* seq = table->sequences; 1542 struct line_info* info = (struct line_info *) bfd_alloc (table->abfd, amt); 1543 1544 if (info == NULL) 1545 return FALSE; 1546 1547 /* Set member data of 'info'. */ 1548 info->prev_line = NULL; 1549 info->address = address; 1550 info->op_index = op_index; 1551 info->line = line; 1552 info->column = column; 1553 info->discriminator = discriminator; 1554 info->end_sequence = end_sequence; 1555 1556 if (filename && filename[0]) 1557 { 1558 info->filename = (char *) bfd_alloc (table->abfd, strlen (filename) + 1); 1559 if (info->filename == NULL) 1560 return FALSE; 1561 strcpy (info->filename, filename); 1562 } 1563 else 1564 info->filename = NULL; 1565 1566 /* Find the correct location for 'info'. Normally we will receive 1567 new line_info data 1) in order and 2) with increasing VMAs. 1568 However some compilers break the rules (cf. decode_line_info) and 1569 so we include some heuristics for quickly finding the correct 1570 location for 'info'. In particular, these heuristics optimize for 1571 the common case in which the VMA sequence that we receive is a 1572 list of locally sorted VMAs such as 1573 p...z a...j (where a < j < p < z) 1574 1575 Note: table->lcl_head is used to head an *actual* or *possible* 1576 sub-sequence within the list (such as a...j) that is not directly 1577 headed by table->last_line 1578 1579 Note: we may receive duplicate entries from 'decode_line_info'. */ 1580 1581 if (seq 1582 && seq->last_line->address == address 1583 && seq->last_line->op_index == op_index 1584 && seq->last_line->end_sequence == end_sequence) 1585 { 1586 /* We only keep the last entry with the same address and end 1587 sequence. See PR ld/4986. */ 1588 if (table->lcl_head == seq->last_line) 1589 table->lcl_head = info; 1590 info->prev_line = seq->last_line->prev_line; 1591 seq->last_line = info; 1592 } 1593 else if (!seq || seq->last_line->end_sequence) 1594 { 1595 /* Start a new line sequence. */ 1596 amt = sizeof (struct line_sequence); 1597 seq = (struct line_sequence *) bfd_malloc (amt); 1598 if (seq == NULL) 1599 return FALSE; 1600 seq->low_pc = address; 1601 seq->prev_sequence = table->sequences; 1602 seq->last_line = info; 1603 table->lcl_head = info; 1604 table->sequences = seq; 1605 table->num_sequences++; 1606 } 1607 else if (info->end_sequence 1608 || new_line_sorts_after (info, seq->last_line)) 1609 { 1610 /* Normal case: add 'info' to the beginning of the current sequence. */ 1611 info->prev_line = seq->last_line; 1612 seq->last_line = info; 1613 1614 /* lcl_head: initialize to head a *possible* sequence at the end. */ 1615 if (!table->lcl_head) 1616 table->lcl_head = info; 1617 } 1618 else if (!new_line_sorts_after (info, table->lcl_head) 1619 && (!table->lcl_head->prev_line 1620 || new_line_sorts_after (info, table->lcl_head->prev_line))) 1621 { 1622 /* Abnormal but easy: lcl_head is the head of 'info'. */ 1623 info->prev_line = table->lcl_head->prev_line; 1624 table->lcl_head->prev_line = info; 1625 } 1626 else 1627 { 1628 /* Abnormal and hard: Neither 'last_line' nor 'lcl_head' 1629 are valid heads for 'info'. Reset 'lcl_head'. */ 1630 struct line_info* li2 = seq->last_line; /* Always non-NULL. */ 1631 struct line_info* li1 = li2->prev_line; 1632 1633 while (li1) 1634 { 1635 if (!new_line_sorts_after (info, li2) 1636 && new_line_sorts_after (info, li1)) 1637 break; 1638 1639 li2 = li1; /* always non-NULL */ 1640 li1 = li1->prev_line; 1641 } 1642 table->lcl_head = li2; 1643 info->prev_line = table->lcl_head->prev_line; 1644 table->lcl_head->prev_line = info; 1645 if (address < seq->low_pc) 1646 seq->low_pc = address; 1647 } 1648 return TRUE; 1649 } 1650 1651 /* Extract a fully qualified filename from a line info table. 1652 The returned string has been malloc'ed and it is the caller's 1653 responsibility to free it. */ 1654 1655 static char * 1656 concat_filename (struct line_info_table *table, unsigned int file) 1657 { 1658 char *filename; 1659 1660 if (table == NULL || file - 1 >= table->num_files) 1661 { 1662 /* FILE == 0 means unknown. */ 1663 if (file) 1664 _bfd_error_handler 1665 (_("DWARF error: mangled line number section (bad file number)")); 1666 return strdup ("<unknown>"); 1667 } 1668 1669 filename = table->files[file - 1].name; 1670 if (filename == NULL) 1671 return strdup ("<unknown>"); 1672 1673 if (!IS_ABSOLUTE_PATH (filename)) 1674 { 1675 char *dir_name = NULL; 1676 char *subdir_name = NULL; 1677 char *name; 1678 size_t len; 1679 1680 if (table->files[file - 1].dir 1681 /* PR 17512: file: 0317e960. */ 1682 && table->files[file - 1].dir <= table->num_dirs 1683 /* PR 17512: file: 7f3d2e4b. */ 1684 && table->dirs != NULL) 1685 subdir_name = table->dirs[table->files[file - 1].dir - 1]; 1686 1687 if (!subdir_name || !IS_ABSOLUTE_PATH (subdir_name)) 1688 dir_name = table->comp_dir; 1689 1690 if (!dir_name) 1691 { 1692 dir_name = subdir_name; 1693 subdir_name = NULL; 1694 } 1695 1696 if (!dir_name) 1697 return strdup (filename); 1698 1699 len = strlen (dir_name) + strlen (filename) + 2; 1700 1701 if (subdir_name) 1702 { 1703 len += strlen (subdir_name) + 1; 1704 name = (char *) bfd_malloc (len); 1705 if (name) 1706 sprintf (name, "%s/%s/%s", dir_name, subdir_name, filename); 1707 } 1708 else 1709 { 1710 name = (char *) bfd_malloc (len); 1711 if (name) 1712 sprintf (name, "%s/%s", dir_name, filename); 1713 } 1714 1715 return name; 1716 } 1717 1718 return strdup (filename); 1719 } 1720 1721 static bfd_boolean 1722 arange_add (const struct comp_unit *unit, struct arange *first_arange, 1723 bfd_vma low_pc, bfd_vma high_pc) 1724 { 1725 struct arange *arange; 1726 1727 /* Ignore empty ranges. */ 1728 if (low_pc == high_pc) 1729 return TRUE; 1730 1731 /* If the first arange is empty, use it. */ 1732 if (first_arange->high == 0) 1733 { 1734 first_arange->low = low_pc; 1735 first_arange->high = high_pc; 1736 return TRUE; 1737 } 1738 1739 /* Next see if we can cheaply extend an existing range. */ 1740 arange = first_arange; 1741 do 1742 { 1743 if (low_pc == arange->high) 1744 { 1745 arange->high = high_pc; 1746 return TRUE; 1747 } 1748 if (high_pc == arange->low) 1749 { 1750 arange->low = low_pc; 1751 return TRUE; 1752 } 1753 arange = arange->next; 1754 } 1755 while (arange); 1756 1757 /* Need to allocate a new arange and insert it into the arange list. 1758 Order isn't significant, so just insert after the first arange. */ 1759 arange = (struct arange *) bfd_alloc (unit->abfd, sizeof (*arange)); 1760 if (arange == NULL) 1761 return FALSE; 1762 arange->low = low_pc; 1763 arange->high = high_pc; 1764 arange->next = first_arange->next; 1765 first_arange->next = arange; 1766 return TRUE; 1767 } 1768 1769 /* Compare function for line sequences. */ 1770 1771 static int 1772 compare_sequences (const void* a, const void* b) 1773 { 1774 const struct line_sequence* seq1 = a; 1775 const struct line_sequence* seq2 = b; 1776 1777 /* Sort by low_pc as the primary key. */ 1778 if (seq1->low_pc < seq2->low_pc) 1779 return -1; 1780 if (seq1->low_pc > seq2->low_pc) 1781 return 1; 1782 1783 /* If low_pc values are equal, sort in reverse order of 1784 high_pc, so that the largest region comes first. */ 1785 if (seq1->last_line->address < seq2->last_line->address) 1786 return 1; 1787 if (seq1->last_line->address > seq2->last_line->address) 1788 return -1; 1789 1790 if (seq1->last_line->op_index < seq2->last_line->op_index) 1791 return 1; 1792 if (seq1->last_line->op_index > seq2->last_line->op_index) 1793 return -1; 1794 1795 /* num_lines is initially an index, to make the sort stable. */ 1796 if (seq1->num_lines < seq2->num_lines) 1797 return -1; 1798 if (seq1->num_lines > seq2->num_lines) 1799 return 1; 1800 return 0; 1801 } 1802 1803 /* Construct the line information table for quick lookup. */ 1804 1805 static bfd_boolean 1806 build_line_info_table (struct line_info_table * table, 1807 struct line_sequence * seq) 1808 { 1809 size_t amt; 1810 struct line_info **line_info_lookup; 1811 struct line_info *each_line; 1812 unsigned int num_lines; 1813 unsigned int line_index; 1814 1815 if (seq->line_info_lookup != NULL) 1816 return TRUE; 1817 1818 /* Count the number of line information entries. We could do this while 1819 scanning the debug information, but some entries may be added via 1820 lcl_head without having a sequence handy to increment the number of 1821 lines. */ 1822 num_lines = 0; 1823 for (each_line = seq->last_line; each_line; each_line = each_line->prev_line) 1824 num_lines++; 1825 1826 seq->num_lines = num_lines; 1827 if (num_lines == 0) 1828 return TRUE; 1829 1830 /* Allocate space for the line information lookup table. */ 1831 amt = sizeof (struct line_info*) * num_lines; 1832 line_info_lookup = (struct line_info**) bfd_alloc (table->abfd, amt); 1833 seq->line_info_lookup = line_info_lookup; 1834 if (line_info_lookup == NULL) 1835 return FALSE; 1836 1837 /* Create the line information lookup table. */ 1838 line_index = num_lines; 1839 for (each_line = seq->last_line; each_line; each_line = each_line->prev_line) 1840 line_info_lookup[--line_index] = each_line; 1841 1842 BFD_ASSERT (line_index == 0); 1843 return TRUE; 1844 } 1845 1846 /* Sort the line sequences for quick lookup. */ 1847 1848 static bfd_boolean 1849 sort_line_sequences (struct line_info_table* table) 1850 { 1851 size_t amt; 1852 struct line_sequence *sequences; 1853 struct line_sequence *seq; 1854 unsigned int n = 0; 1855 unsigned int num_sequences = table->num_sequences; 1856 bfd_vma last_high_pc; 1857 1858 if (num_sequences == 0) 1859 return TRUE; 1860 1861 /* Allocate space for an array of sequences. */ 1862 amt = sizeof (struct line_sequence) * num_sequences; 1863 sequences = (struct line_sequence *) bfd_alloc (table->abfd, amt); 1864 if (sequences == NULL) 1865 return FALSE; 1866 1867 /* Copy the linked list into the array, freeing the original nodes. */ 1868 seq = table->sequences; 1869 for (n = 0; n < num_sequences; n++) 1870 { 1871 struct line_sequence* last_seq = seq; 1872 1873 BFD_ASSERT (seq); 1874 sequences[n].low_pc = seq->low_pc; 1875 sequences[n].prev_sequence = NULL; 1876 sequences[n].last_line = seq->last_line; 1877 sequences[n].line_info_lookup = NULL; 1878 sequences[n].num_lines = n; 1879 seq = seq->prev_sequence; 1880 free (last_seq); 1881 } 1882 BFD_ASSERT (seq == NULL); 1883 1884 qsort (sequences, n, sizeof (struct line_sequence), compare_sequences); 1885 1886 /* Make the list binary-searchable by trimming overlapping entries 1887 and removing nested entries. */ 1888 num_sequences = 1; 1889 last_high_pc = sequences[0].last_line->address; 1890 for (n = 1; n < table->num_sequences; n++) 1891 { 1892 if (sequences[n].low_pc < last_high_pc) 1893 { 1894 if (sequences[n].last_line->address <= last_high_pc) 1895 /* Skip nested entries. */ 1896 continue; 1897 1898 /* Trim overlapping entries. */ 1899 sequences[n].low_pc = last_high_pc; 1900 } 1901 last_high_pc = sequences[n].last_line->address; 1902 if (n > num_sequences) 1903 { 1904 /* Close up the gap. */ 1905 sequences[num_sequences].low_pc = sequences[n].low_pc; 1906 sequences[num_sequences].last_line = sequences[n].last_line; 1907 } 1908 num_sequences++; 1909 } 1910 1911 table->sequences = sequences; 1912 table->num_sequences = num_sequences; 1913 return TRUE; 1914 } 1915 1916 /* Add directory to TABLE. CUR_DIR memory ownership is taken by TABLE. */ 1917 1918 static bfd_boolean 1919 line_info_add_include_dir (struct line_info_table *table, char *cur_dir) 1920 { 1921 if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0) 1922 { 1923 char **tmp; 1924 size_t amt; 1925 1926 amt = table->num_dirs + DIR_ALLOC_CHUNK; 1927 amt *= sizeof (char *); 1928 1929 tmp = (char **) bfd_realloc (table->dirs, amt); 1930 if (tmp == NULL) 1931 return FALSE; 1932 table->dirs = tmp; 1933 } 1934 1935 table->dirs[table->num_dirs++] = cur_dir; 1936 return TRUE; 1937 } 1938 1939 static bfd_boolean 1940 line_info_add_include_dir_stub (struct line_info_table *table, char *cur_dir, 1941 unsigned int dir ATTRIBUTE_UNUSED, 1942 unsigned int xtime ATTRIBUTE_UNUSED, 1943 unsigned int size ATTRIBUTE_UNUSED) 1944 { 1945 return line_info_add_include_dir (table, cur_dir); 1946 } 1947 1948 /* Add file to TABLE. CUR_FILE memory ownership is taken by TABLE. */ 1949 1950 static bfd_boolean 1951 line_info_add_file_name (struct line_info_table *table, char *cur_file, 1952 unsigned int dir, unsigned int xtime, 1953 unsigned int size) 1954 { 1955 if ((table->num_files % FILE_ALLOC_CHUNK) == 0) 1956 { 1957 struct fileinfo *tmp; 1958 size_t amt; 1959 1960 amt = table->num_files + FILE_ALLOC_CHUNK; 1961 amt *= sizeof (struct fileinfo); 1962 1963 tmp = (struct fileinfo *) bfd_realloc (table->files, amt); 1964 if (tmp == NULL) 1965 return FALSE; 1966 table->files = tmp; 1967 } 1968 1969 table->files[table->num_files].name = cur_file; 1970 table->files[table->num_files].dir = dir; 1971 table->files[table->num_files].time = xtime; 1972 table->files[table->num_files].size = size; 1973 table->num_files++; 1974 return TRUE; 1975 } 1976 1977 /* Read directory or file name entry format, starting with byte of 1978 format count entries, ULEB128 pairs of entry formats, ULEB128 of 1979 entries count and the entries themselves in the described entry 1980 format. */ 1981 1982 static bfd_boolean 1983 read_formatted_entries (struct comp_unit *unit, bfd_byte **bufp, 1984 bfd_byte *buf_end, struct line_info_table *table, 1985 bfd_boolean (*callback) (struct line_info_table *table, 1986 char *cur_file, 1987 unsigned int dir, 1988 unsigned int time, 1989 unsigned int size)) 1990 { 1991 bfd *abfd = unit->abfd; 1992 bfd_byte format_count, formati; 1993 bfd_vma data_count, datai; 1994 bfd_byte *buf = *bufp; 1995 bfd_byte *format_header_data; 1996 unsigned int bytes_read; 1997 1998 format_count = read_1_byte (abfd, buf, buf_end); 1999 buf += 1; 2000 format_header_data = buf; 2001 for (formati = 0; formati < format_count; formati++) 2002 { 2003 _bfd_safe_read_leb128 (abfd, buf, &bytes_read, FALSE, buf_end); 2004 buf += bytes_read; 2005 _bfd_safe_read_leb128 (abfd, buf, &bytes_read, FALSE, buf_end); 2006 buf += bytes_read; 2007 } 2008 2009 data_count = _bfd_safe_read_leb128 (abfd, buf, &bytes_read, FALSE, buf_end); 2010 buf += bytes_read; 2011 if (format_count == 0 && data_count != 0) 2012 { 2013 _bfd_error_handler (_("DWARF error: zero format count")); 2014 bfd_set_error (bfd_error_bad_value); 2015 return FALSE; 2016 } 2017 2018 /* PR 22210. Paranoia check. Don't bother running the loop 2019 if we know that we are going to run out of buffer. */ 2020 if (data_count > (bfd_vma) (buf_end - buf)) 2021 { 2022 _bfd_error_handler 2023 (_("DWARF error: data count (%" PRIx64 ") larger than buffer size"), 2024 (uint64_t) data_count); 2025 bfd_set_error (bfd_error_bad_value); 2026 return FALSE; 2027 } 2028 2029 for (datai = 0; datai < data_count; datai++) 2030 { 2031 bfd_byte *format = format_header_data; 2032 struct fileinfo fe; 2033 2034 memset (&fe, 0, sizeof fe); 2035 for (formati = 0; formati < format_count; formati++) 2036 { 2037 bfd_vma content_type, form; 2038 char *string_trash; 2039 char **stringp = &string_trash; 2040 unsigned int uint_trash, *uintp = &uint_trash; 2041 struct attribute attr; 2042 2043 content_type = _bfd_safe_read_leb128 (abfd, format, &bytes_read, 2044 FALSE, buf_end); 2045 format += bytes_read; 2046 switch (content_type) 2047 { 2048 case DW_LNCT_path: 2049 stringp = &fe.name; 2050 break; 2051 case DW_LNCT_directory_index: 2052 uintp = &fe.dir; 2053 break; 2054 case DW_LNCT_timestamp: 2055 uintp = &fe.time; 2056 break; 2057 case DW_LNCT_size: 2058 uintp = &fe.size; 2059 break; 2060 case DW_LNCT_MD5: 2061 break; 2062 default: 2063 _bfd_error_handler 2064 (_("DWARF error: unknown format content type %" PRIu64), 2065 (uint64_t) content_type); 2066 bfd_set_error (bfd_error_bad_value); 2067 return FALSE; 2068 } 2069 2070 form = _bfd_safe_read_leb128 (abfd, format, &bytes_read, FALSE, 2071 buf_end); 2072 format += bytes_read; 2073 2074 buf = read_attribute_value (&attr, form, 0, unit, buf, buf_end); 2075 if (buf == NULL) 2076 return FALSE; 2077 switch (form) 2078 { 2079 case DW_FORM_string: 2080 case DW_FORM_line_strp: 2081 *stringp = attr.u.str; 2082 break; 2083 2084 case DW_FORM_data1: 2085 case DW_FORM_data2: 2086 case DW_FORM_data4: 2087 case DW_FORM_data8: 2088 case DW_FORM_udata: 2089 *uintp = attr.u.val; 2090 break; 2091 2092 case DW_FORM_data16: 2093 /* MD5 data is in the attr.blk, but we are ignoring those. */ 2094 break; 2095 } 2096 } 2097 2098 /* Skip the first "zero entry", which is the compilation dir/file. */ 2099 if (datai != 0) 2100 if (!callback (table, fe.name, fe.dir, fe.time, fe.size)) 2101 return FALSE; 2102 } 2103 2104 *bufp = buf; 2105 return TRUE; 2106 } 2107 2108 /* Decode the line number information for UNIT. */ 2109 2110 static struct line_info_table* 2111 decode_line_info (struct comp_unit *unit) 2112 { 2113 bfd *abfd = unit->abfd; 2114 struct dwarf2_debug *stash = unit->stash; 2115 struct dwarf2_debug_file *file = unit->file; 2116 struct line_info_table* table; 2117 bfd_byte *line_ptr; 2118 bfd_byte *line_end; 2119 struct line_head lh; 2120 unsigned int i, bytes_read, offset_size; 2121 char *cur_file, *cur_dir; 2122 unsigned char op_code, extended_op, adj_opcode; 2123 unsigned int exop_len; 2124 size_t amt; 2125 2126 if (unit->line_offset == 0 && file->line_table) 2127 return file->line_table; 2128 2129 if (! read_section (abfd, &stash->debug_sections[debug_line], 2130 file->syms, unit->line_offset, 2131 &file->dwarf_line_buffer, &file->dwarf_line_size)) 2132 return NULL; 2133 2134 if (file->dwarf_line_size < 16) 2135 { 2136 _bfd_error_handler 2137 (_("DWARF error: line info section is too small (%" PRId64 ")"), 2138 (int64_t) file->dwarf_line_size); 2139 bfd_set_error (bfd_error_bad_value); 2140 return NULL; 2141 } 2142 line_ptr = file->dwarf_line_buffer + unit->line_offset; 2143 line_end = file->dwarf_line_buffer + file->dwarf_line_size; 2144 2145 /* Read in the prologue. */ 2146 lh.total_length = read_4_bytes (abfd, line_ptr, line_end); 2147 line_ptr += 4; 2148 offset_size = 4; 2149 if (lh.total_length == 0xffffffff) 2150 { 2151 lh.total_length = read_8_bytes (abfd, line_ptr, line_end); 2152 line_ptr += 8; 2153 offset_size = 8; 2154 } 2155 else if (lh.total_length == 0 && unit->addr_size == 8) 2156 { 2157 /* Handle (non-standard) 64-bit DWARF2 formats. */ 2158 lh.total_length = read_4_bytes (abfd, line_ptr, line_end); 2159 line_ptr += 4; 2160 offset_size = 8; 2161 } 2162 2163 if (lh.total_length > (size_t) (line_end - line_ptr)) 2164 { 2165 _bfd_error_handler 2166 /* xgettext: c-format */ 2167 (_("DWARF error: line info data is bigger (%#" PRIx64 ")" 2168 " than the space remaining in the section (%#lx)"), 2169 (uint64_t) lh.total_length, (unsigned long) (line_end - line_ptr)); 2170 bfd_set_error (bfd_error_bad_value); 2171 return NULL; 2172 } 2173 2174 line_end = line_ptr + lh.total_length; 2175 2176 lh.version = read_2_bytes (abfd, line_ptr, line_end); 2177 if (lh.version < 2 || lh.version > 5) 2178 { 2179 _bfd_error_handler 2180 (_("DWARF error: unhandled .debug_line version %d"), lh.version); 2181 bfd_set_error (bfd_error_bad_value); 2182 return NULL; 2183 } 2184 line_ptr += 2; 2185 2186 if (line_ptr + offset_size + (lh.version >= 5 ? 8 : (lh.version >= 4 ? 6 : 5)) 2187 >= line_end) 2188 { 2189 _bfd_error_handler 2190 (_("DWARF error: ran out of room reading prologue")); 2191 bfd_set_error (bfd_error_bad_value); 2192 return NULL; 2193 } 2194 2195 if (lh.version >= 5) 2196 { 2197 unsigned int segment_selector_size; 2198 2199 /* Skip address size. */ 2200 read_1_byte (abfd, line_ptr, line_end); 2201 line_ptr += 1; 2202 2203 segment_selector_size = read_1_byte (abfd, line_ptr, line_end); 2204 line_ptr += 1; 2205 if (segment_selector_size != 0) 2206 { 2207 _bfd_error_handler 2208 (_("DWARF error: line info unsupported segment selector size %u"), 2209 segment_selector_size); 2210 bfd_set_error (bfd_error_bad_value); 2211 return NULL; 2212 } 2213 } 2214 2215 if (offset_size == 4) 2216 lh.prologue_length = read_4_bytes (abfd, line_ptr, line_end); 2217 else 2218 lh.prologue_length = read_8_bytes (abfd, line_ptr, line_end); 2219 line_ptr += offset_size; 2220 2221 lh.minimum_instruction_length = read_1_byte (abfd, line_ptr, line_end); 2222 line_ptr += 1; 2223 2224 if (lh.version >= 4) 2225 { 2226 lh.maximum_ops_per_insn = read_1_byte (abfd, line_ptr, line_end); 2227 line_ptr += 1; 2228 } 2229 else 2230 lh.maximum_ops_per_insn = 1; 2231 2232 if (lh.maximum_ops_per_insn == 0) 2233 { 2234 _bfd_error_handler 2235 (_("DWARF error: invalid maximum operations per instruction")); 2236 bfd_set_error (bfd_error_bad_value); 2237 return NULL; 2238 } 2239 2240 lh.default_is_stmt = read_1_byte (abfd, line_ptr, line_end); 2241 line_ptr += 1; 2242 2243 lh.line_base = read_1_signed_byte (abfd, line_ptr, line_end); 2244 line_ptr += 1; 2245 2246 lh.line_range = read_1_byte (abfd, line_ptr, line_end); 2247 line_ptr += 1; 2248 2249 lh.opcode_base = read_1_byte (abfd, line_ptr, line_end); 2250 line_ptr += 1; 2251 2252 if (line_ptr + (lh.opcode_base - 1) >= line_end) 2253 { 2254 _bfd_error_handler (_("DWARF error: ran out of room reading opcodes")); 2255 bfd_set_error (bfd_error_bad_value); 2256 return NULL; 2257 } 2258 2259 amt = lh.opcode_base * sizeof (unsigned char); 2260 lh.standard_opcode_lengths = (unsigned char *) bfd_alloc (abfd, amt); 2261 2262 lh.standard_opcode_lengths[0] = 1; 2263 2264 for (i = 1; i < lh.opcode_base; ++i) 2265 { 2266 lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr, line_end); 2267 line_ptr += 1; 2268 } 2269 2270 amt = sizeof (struct line_info_table); 2271 table = (struct line_info_table *) bfd_alloc (abfd, amt); 2272 if (table == NULL) 2273 return NULL; 2274 table->abfd = abfd; 2275 table->comp_dir = unit->comp_dir; 2276 2277 table->num_files = 0; 2278 table->files = NULL; 2279 2280 table->num_dirs = 0; 2281 table->dirs = NULL; 2282 2283 table->num_sequences = 0; 2284 table->sequences = NULL; 2285 2286 table->lcl_head = NULL; 2287 2288 if (lh.version >= 5) 2289 { 2290 /* Read directory table. */ 2291 if (!read_formatted_entries (unit, &line_ptr, line_end, table, 2292 line_info_add_include_dir_stub)) 2293 goto fail; 2294 2295 /* Read file name table. */ 2296 if (!read_formatted_entries (unit, &line_ptr, line_end, table, 2297 line_info_add_file_name)) 2298 goto fail; 2299 } 2300 else 2301 { 2302 /* Read directory table. */ 2303 while ((cur_dir = read_string (abfd, line_ptr, line_end, &bytes_read)) != NULL) 2304 { 2305 line_ptr += bytes_read; 2306 2307 if (!line_info_add_include_dir (table, cur_dir)) 2308 goto fail; 2309 } 2310 2311 line_ptr += bytes_read; 2312 2313 /* Read file name table. */ 2314 while ((cur_file = read_string (abfd, line_ptr, line_end, &bytes_read)) != NULL) 2315 { 2316 unsigned int dir, xtime, size; 2317 2318 line_ptr += bytes_read; 2319 2320 dir = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, FALSE, line_end); 2321 line_ptr += bytes_read; 2322 xtime = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, FALSE, line_end); 2323 line_ptr += bytes_read; 2324 size = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, FALSE, line_end); 2325 line_ptr += bytes_read; 2326 2327 if (!line_info_add_file_name (table, cur_file, dir, xtime, size)) 2328 goto fail; 2329 } 2330 2331 line_ptr += bytes_read; 2332 } 2333 2334 /* Read the statement sequences until there's nothing left. */ 2335 while (line_ptr < line_end) 2336 { 2337 /* State machine registers. */ 2338 bfd_vma address = 0; 2339 unsigned char op_index = 0; 2340 char * filename = table->num_files ? concat_filename (table, 1) : NULL; 2341 unsigned int line = 1; 2342 unsigned int column = 0; 2343 unsigned int discriminator = 0; 2344 int is_stmt = lh.default_is_stmt; 2345 int end_sequence = 0; 2346 unsigned int dir, xtime, size; 2347 /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some 2348 compilers generate address sequences that are wildly out of 2349 order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler 2350 for ia64-Linux). Thus, to determine the low and high 2351 address, we must compare on every DW_LNS_copy, etc. */ 2352 bfd_vma low_pc = (bfd_vma) -1; 2353 bfd_vma high_pc = 0; 2354 2355 /* Decode the table. */ 2356 while (!end_sequence && line_ptr < line_end) 2357 { 2358 op_code = read_1_byte (abfd, line_ptr, line_end); 2359 line_ptr += 1; 2360 2361 if (op_code >= lh.opcode_base) 2362 { 2363 /* Special operand. */ 2364 adj_opcode = op_code - lh.opcode_base; 2365 if (lh.line_range == 0) 2366 goto line_fail; 2367 if (lh.maximum_ops_per_insn == 1) 2368 address += (adj_opcode / lh.line_range 2369 * lh.minimum_instruction_length); 2370 else 2371 { 2372 address += ((op_index + adj_opcode / lh.line_range) 2373 / lh.maximum_ops_per_insn 2374 * lh.minimum_instruction_length); 2375 op_index = ((op_index + adj_opcode / lh.line_range) 2376 % lh.maximum_ops_per_insn); 2377 } 2378 line += lh.line_base + (adj_opcode % lh.line_range); 2379 /* Append row to matrix using current values. */ 2380 if (!add_line_info (table, address, op_index, filename, 2381 line, column, discriminator, 0)) 2382 goto line_fail; 2383 discriminator = 0; 2384 if (address < low_pc) 2385 low_pc = address; 2386 if (address > high_pc) 2387 high_pc = address; 2388 } 2389 else switch (op_code) 2390 { 2391 case DW_LNS_extended_op: 2392 exop_len = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, 2393 FALSE, line_end); 2394 line_ptr += bytes_read; 2395 extended_op = read_1_byte (abfd, line_ptr, line_end); 2396 line_ptr += 1; 2397 2398 switch (extended_op) 2399 { 2400 case DW_LNE_end_sequence: 2401 end_sequence = 1; 2402 if (!add_line_info (table, address, op_index, filename, line, 2403 column, discriminator, end_sequence)) 2404 goto line_fail; 2405 discriminator = 0; 2406 if (address < low_pc) 2407 low_pc = address; 2408 if (address > high_pc) 2409 high_pc = address; 2410 if (!arange_add (unit, &unit->arange, low_pc, high_pc)) 2411 goto line_fail; 2412 break; 2413 case DW_LNE_set_address: 2414 address = read_address (unit, line_ptr, line_end); 2415 op_index = 0; 2416 line_ptr += unit->addr_size; 2417 break; 2418 case DW_LNE_define_file: 2419 cur_file = read_string (abfd, line_ptr, line_end, &bytes_read); 2420 line_ptr += bytes_read; 2421 dir = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, 2422 FALSE, line_end); 2423 line_ptr += bytes_read; 2424 xtime = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, 2425 FALSE, line_end); 2426 line_ptr += bytes_read; 2427 size = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, 2428 FALSE, line_end); 2429 line_ptr += bytes_read; 2430 if (!line_info_add_file_name (table, cur_file, dir, 2431 xtime, size)) 2432 goto line_fail; 2433 break; 2434 case DW_LNE_set_discriminator: 2435 discriminator = 2436 _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, 2437 FALSE, line_end); 2438 line_ptr += bytes_read; 2439 break; 2440 case DW_LNE_HP_source_file_correlation: 2441 line_ptr += exop_len - 1; 2442 break; 2443 default: 2444 _bfd_error_handler 2445 (_("DWARF error: mangled line number section")); 2446 bfd_set_error (bfd_error_bad_value); 2447 line_fail: 2448 free (filename); 2449 goto fail; 2450 } 2451 break; 2452 case DW_LNS_copy: 2453 if (!add_line_info (table, address, op_index, 2454 filename, line, column, discriminator, 0)) 2455 goto line_fail; 2456 discriminator = 0; 2457 if (address < low_pc) 2458 low_pc = address; 2459 if (address > high_pc) 2460 high_pc = address; 2461 break; 2462 case DW_LNS_advance_pc: 2463 if (lh.maximum_ops_per_insn == 1) 2464 address += (lh.minimum_instruction_length 2465 * _bfd_safe_read_leb128 (abfd, line_ptr, 2466 &bytes_read, 2467 FALSE, line_end)); 2468 else 2469 { 2470 bfd_vma adjust = _bfd_safe_read_leb128 (abfd, line_ptr, 2471 &bytes_read, 2472 FALSE, line_end); 2473 address = ((op_index + adjust) / lh.maximum_ops_per_insn 2474 * lh.minimum_instruction_length); 2475 op_index = (op_index + adjust) % lh.maximum_ops_per_insn; 2476 } 2477 line_ptr += bytes_read; 2478 break; 2479 case DW_LNS_advance_line: 2480 line += _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, 2481 TRUE, line_end); 2482 line_ptr += bytes_read; 2483 break; 2484 case DW_LNS_set_file: 2485 { 2486 unsigned int filenum; 2487 2488 /* The file and directory tables are 0 2489 based, the references are 1 based. */ 2490 filenum = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, 2491 FALSE, line_end); 2492 line_ptr += bytes_read; 2493 free (filename); 2494 filename = concat_filename (table, filenum); 2495 break; 2496 } 2497 case DW_LNS_set_column: 2498 column = _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, 2499 FALSE, line_end); 2500 line_ptr += bytes_read; 2501 break; 2502 case DW_LNS_negate_stmt: 2503 is_stmt = (!is_stmt); 2504 break; 2505 case DW_LNS_set_basic_block: 2506 break; 2507 case DW_LNS_const_add_pc: 2508 if (lh.line_range == 0) 2509 goto line_fail; 2510 if (lh.maximum_ops_per_insn == 1) 2511 address += (lh.minimum_instruction_length 2512 * ((255 - lh.opcode_base) / lh.line_range)); 2513 else 2514 { 2515 bfd_vma adjust = ((255 - lh.opcode_base) / lh.line_range); 2516 address += (lh.minimum_instruction_length 2517 * ((op_index + adjust) 2518 / lh.maximum_ops_per_insn)); 2519 op_index = (op_index + adjust) % lh.maximum_ops_per_insn; 2520 } 2521 break; 2522 case DW_LNS_fixed_advance_pc: 2523 address += read_2_bytes (abfd, line_ptr, line_end); 2524 op_index = 0; 2525 line_ptr += 2; 2526 break; 2527 default: 2528 /* Unknown standard opcode, ignore it. */ 2529 for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++) 2530 { 2531 (void) _bfd_safe_read_leb128 (abfd, line_ptr, &bytes_read, 2532 FALSE, line_end); 2533 line_ptr += bytes_read; 2534 } 2535 break; 2536 } 2537 } 2538 2539 free (filename); 2540 } 2541 2542 if (unit->line_offset == 0) 2543 file->line_table = table; 2544 if (sort_line_sequences (table)) 2545 return table; 2546 2547 fail: 2548 while (table->sequences != NULL) 2549 { 2550 struct line_sequence* seq = table->sequences; 2551 table->sequences = table->sequences->prev_sequence; 2552 free (seq); 2553 } 2554 free (table->files); 2555 free (table->dirs); 2556 return NULL; 2557 } 2558 2559 /* If ADDR is within TABLE set the output parameters and return the 2560 range of addresses covered by the entry used to fill them out. 2561 Otherwise set * FILENAME_PTR to NULL and return 0. 2562 The parameters FILENAME_PTR, LINENUMBER_PTR and DISCRIMINATOR_PTR 2563 are pointers to the objects to be filled in. */ 2564 2565 static bfd_vma 2566 lookup_address_in_line_info_table (struct line_info_table *table, 2567 bfd_vma addr, 2568 const char **filename_ptr, 2569 unsigned int *linenumber_ptr, 2570 unsigned int *discriminator_ptr) 2571 { 2572 struct line_sequence *seq = NULL; 2573 struct line_info *info; 2574 int low, high, mid; 2575 2576 /* Binary search the array of sequences. */ 2577 low = 0; 2578 high = table->num_sequences; 2579 while (low < high) 2580 { 2581 mid = (low + high) / 2; 2582 seq = &table->sequences[mid]; 2583 if (addr < seq->low_pc) 2584 high = mid; 2585 else if (addr >= seq->last_line->address) 2586 low = mid + 1; 2587 else 2588 break; 2589 } 2590 2591 /* Check for a valid sequence. */ 2592 if (!seq || addr < seq->low_pc || addr >= seq->last_line->address) 2593 goto fail; 2594 2595 if (!build_line_info_table (table, seq)) 2596 goto fail; 2597 2598 /* Binary search the array of line information. */ 2599 low = 0; 2600 high = seq->num_lines; 2601 info = NULL; 2602 while (low < high) 2603 { 2604 mid = (low + high) / 2; 2605 info = seq->line_info_lookup[mid]; 2606 if (addr < info->address) 2607 high = mid; 2608 else if (addr >= seq->line_info_lookup[mid + 1]->address) 2609 low = mid + 1; 2610 else 2611 break; 2612 } 2613 2614 /* Check for a valid line information entry. */ 2615 if (info 2616 && addr >= info->address 2617 && addr < seq->line_info_lookup[mid + 1]->address 2618 && !(info->end_sequence || info == seq->last_line)) 2619 { 2620 *filename_ptr = info->filename; 2621 *linenumber_ptr = info->line; 2622 if (discriminator_ptr) 2623 *discriminator_ptr = info->discriminator; 2624 return seq->last_line->address - seq->low_pc; 2625 } 2626 2627 fail: 2628 *filename_ptr = NULL; 2629 return 0; 2630 } 2631 2632 /* Read in the .debug_ranges section for future reference. */ 2633 2634 static bfd_boolean 2635 read_debug_ranges (struct comp_unit * unit) 2636 { 2637 struct dwarf2_debug *stash = unit->stash; 2638 struct dwarf2_debug_file *file = unit->file; 2639 2640 return read_section (unit->abfd, &stash->debug_sections[debug_ranges], 2641 file->syms, 0, 2642 &file->dwarf_ranges_buffer, &file->dwarf_ranges_size); 2643 } 2644 2645 /* Read in the .debug_rnglists section for future reference. */ 2646 2647 static bfd_boolean 2648 read_debug_rnglists (struct comp_unit * unit) 2649 { 2650 struct dwarf2_debug *stash = unit->stash; 2651 struct dwarf2_debug_file *file = unit->file; 2652 2653 return read_section (unit->abfd, &stash->debug_sections[debug_rnglists], 2654 file->syms, 0, 2655 &file->dwarf_rnglists_buffer, &file->dwarf_rnglists_size); 2656 } 2657 2658 /* Function table functions. */ 2659 2660 static int 2661 compare_lookup_funcinfos (const void * a, const void * b) 2662 { 2663 const struct lookup_funcinfo * lookup1 = a; 2664 const struct lookup_funcinfo * lookup2 = b; 2665 2666 if (lookup1->low_addr < lookup2->low_addr) 2667 return -1; 2668 if (lookup1->low_addr > lookup2->low_addr) 2669 return 1; 2670 if (lookup1->high_addr < lookup2->high_addr) 2671 return -1; 2672 if (lookup1->high_addr > lookup2->high_addr) 2673 return 1; 2674 2675 if (lookup1->idx < lookup2->idx) 2676 return -1; 2677 if (lookup1->idx > lookup2->idx) 2678 return 1; 2679 return 0; 2680 } 2681 2682 static bfd_boolean 2683 build_lookup_funcinfo_table (struct comp_unit * unit) 2684 { 2685 struct lookup_funcinfo *lookup_funcinfo_table = unit->lookup_funcinfo_table; 2686 unsigned int number_of_functions = unit->number_of_functions; 2687 struct funcinfo *each; 2688 struct lookup_funcinfo *entry; 2689 size_t func_index; 2690 struct arange *range; 2691 bfd_vma low_addr, high_addr; 2692 2693 if (lookup_funcinfo_table || number_of_functions == 0) 2694 return TRUE; 2695 2696 /* Create the function info lookup table. */ 2697 lookup_funcinfo_table = (struct lookup_funcinfo *) 2698 bfd_malloc (number_of_functions * sizeof (struct lookup_funcinfo)); 2699 if (lookup_funcinfo_table == NULL) 2700 return FALSE; 2701 2702 /* Populate the function info lookup table. */ 2703 func_index = number_of_functions; 2704 for (each = unit->function_table; each; each = each->prev_func) 2705 { 2706 entry = &lookup_funcinfo_table[--func_index]; 2707 entry->funcinfo = each; 2708 entry->idx = func_index; 2709 2710 /* Calculate the lowest and highest address for this function entry. */ 2711 low_addr = entry->funcinfo->arange.low; 2712 high_addr = entry->funcinfo->arange.high; 2713 2714 for (range = entry->funcinfo->arange.next; range; range = range->next) 2715 { 2716 if (range->low < low_addr) 2717 low_addr = range->low; 2718 if (range->high > high_addr) 2719 high_addr = range->high; 2720 } 2721 2722 entry->low_addr = low_addr; 2723 entry->high_addr = high_addr; 2724 } 2725 2726 BFD_ASSERT (func_index == 0); 2727 2728 /* Sort the function by address. */ 2729 qsort (lookup_funcinfo_table, 2730 number_of_functions, 2731 sizeof (struct lookup_funcinfo), 2732 compare_lookup_funcinfos); 2733 2734 /* Calculate the high watermark for each function in the lookup table. */ 2735 high_addr = lookup_funcinfo_table[0].high_addr; 2736 for (func_index = 1; func_index < number_of_functions; func_index++) 2737 { 2738 entry = &lookup_funcinfo_table[func_index]; 2739 if (entry->high_addr > high_addr) 2740 high_addr = entry->high_addr; 2741 else 2742 entry->high_addr = high_addr; 2743 } 2744 2745 unit->lookup_funcinfo_table = lookup_funcinfo_table; 2746 return TRUE; 2747 } 2748 2749 /* If ADDR is within UNIT's function tables, set FUNCTION_PTR, and return 2750 TRUE. Note that we need to find the function that has the smallest range 2751 that contains ADDR, to handle inlined functions without depending upon 2752 them being ordered in TABLE by increasing range. */ 2753 2754 static bfd_boolean 2755 lookup_address_in_function_table (struct comp_unit *unit, 2756 bfd_vma addr, 2757 struct funcinfo **function_ptr) 2758 { 2759 unsigned int number_of_functions = unit->number_of_functions; 2760 struct lookup_funcinfo* lookup_funcinfo = NULL; 2761 struct funcinfo* funcinfo = NULL; 2762 struct funcinfo* best_fit = NULL; 2763 bfd_vma best_fit_len = 0; 2764 bfd_size_type low, high, mid, first; 2765 struct arange *arange; 2766 2767 if (number_of_functions == 0) 2768 return FALSE; 2769 2770 if (!build_lookup_funcinfo_table (unit)) 2771 return FALSE; 2772 2773 if (unit->lookup_funcinfo_table[number_of_functions - 1].high_addr < addr) 2774 return FALSE; 2775 2776 /* Find the first function in the lookup table which may contain the 2777 specified address. */ 2778 low = 0; 2779 high = number_of_functions; 2780 first = high; 2781 while (low < high) 2782 { 2783 mid = (low + high) / 2; 2784 lookup_funcinfo = &unit->lookup_funcinfo_table[mid]; 2785 if (addr < lookup_funcinfo->low_addr) 2786 high = mid; 2787 else if (addr >= lookup_funcinfo->high_addr) 2788 low = mid + 1; 2789 else 2790 high = first = mid; 2791 } 2792 2793 /* Find the 'best' match for the address. The prior algorithm defined the 2794 best match as the function with the smallest address range containing 2795 the specified address. This definition should probably be changed to the 2796 innermost inline routine containing the address, but right now we want 2797 to get the same results we did before. */ 2798 while (first < number_of_functions) 2799 { 2800 if (addr < unit->lookup_funcinfo_table[first].low_addr) 2801 break; 2802 funcinfo = unit->lookup_funcinfo_table[first].funcinfo; 2803 2804 for (arange = &funcinfo->arange; arange; arange = arange->next) 2805 { 2806 if (addr < arange->low || addr >= arange->high) 2807 continue; 2808 2809 if (!best_fit 2810 || arange->high - arange->low < best_fit_len 2811 /* The following comparison is designed to return the same 2812 match as the previous algorithm for routines which have the 2813 same best fit length. */ 2814 || (arange->high - arange->low == best_fit_len 2815 && funcinfo > best_fit)) 2816 { 2817 best_fit = funcinfo; 2818 best_fit_len = arange->high - arange->low; 2819 } 2820 } 2821 2822 first++; 2823 } 2824 2825 if (!best_fit) 2826 return FALSE; 2827 2828 *function_ptr = best_fit; 2829 return TRUE; 2830 } 2831 2832 /* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR 2833 and LINENUMBER_PTR, and return TRUE. */ 2834 2835 static bfd_boolean 2836 lookup_symbol_in_function_table (struct comp_unit *unit, 2837 asymbol *sym, 2838 bfd_vma addr, 2839 const char **filename_ptr, 2840 unsigned int *linenumber_ptr) 2841 { 2842 struct funcinfo* each_func; 2843 struct funcinfo* best_fit = NULL; 2844 bfd_vma best_fit_len = 0; 2845 struct arange *arange; 2846 const char *name = bfd_asymbol_name (sym); 2847 asection *sec = bfd_asymbol_section (sym); 2848 2849 for (each_func = unit->function_table; 2850 each_func; 2851 each_func = each_func->prev_func) 2852 { 2853 for (arange = &each_func->arange; 2854 arange; 2855 arange = arange->next) 2856 { 2857 if ((!each_func->sec || each_func->sec == sec) 2858 && addr >= arange->low 2859 && addr < arange->high 2860 && each_func->name 2861 && strcmp (name, each_func->name) == 0 2862 && (!best_fit 2863 || arange->high - arange->low < best_fit_len)) 2864 { 2865 best_fit = each_func; 2866 best_fit_len = arange->high - arange->low; 2867 } 2868 } 2869 } 2870 2871 if (best_fit) 2872 { 2873 best_fit->sec = sec; 2874 *filename_ptr = best_fit->file; 2875 *linenumber_ptr = best_fit->line; 2876 return TRUE; 2877 } 2878 else 2879 return FALSE; 2880 } 2881 2882 /* Variable table functions. */ 2883 2884 /* If SYM is within variable table of UNIT, set FILENAME_PTR and 2885 LINENUMBER_PTR, and return TRUE. */ 2886 2887 static bfd_boolean 2888 lookup_symbol_in_variable_table (struct comp_unit *unit, 2889 asymbol *sym, 2890 bfd_vma addr, 2891 const char **filename_ptr, 2892 unsigned int *linenumber_ptr) 2893 { 2894 const char *name = bfd_asymbol_name (sym); 2895 asection *sec = bfd_asymbol_section (sym); 2896 struct varinfo* each; 2897 2898 for (each = unit->variable_table; each; each = each->prev_var) 2899 if (! each->stack 2900 && each->file != NULL 2901 && each->name != NULL 2902 && each->addr == addr 2903 && (!each->sec || each->sec == sec) 2904 && strcmp (name, each->name) == 0) 2905 break; 2906 2907 if (each) 2908 { 2909 each->sec = sec; 2910 *filename_ptr = each->file; 2911 *linenumber_ptr = each->line; 2912 return TRUE; 2913 } 2914 2915 return FALSE; 2916 } 2917 2918 static struct comp_unit *stash_comp_unit (struct dwarf2_debug *, 2919 struct dwarf2_debug_file *); 2920 static bfd_boolean comp_unit_maybe_decode_line_info (struct comp_unit *); 2921 2922 static bfd_boolean 2923 find_abstract_instance (struct comp_unit *unit, 2924 struct attribute *attr_ptr, 2925 unsigned int recur_count, 2926 const char **pname, 2927 bfd_boolean *is_linkage, 2928 char **filename_ptr, 2929 int *linenumber_ptr) 2930 { 2931 bfd *abfd = unit->abfd; 2932 bfd_byte *info_ptr = NULL; 2933 bfd_byte *info_ptr_end; 2934 unsigned int abbrev_number, bytes_read, i; 2935 struct abbrev_info *abbrev; 2936 bfd_uint64_t die_ref = attr_ptr->u.val; 2937 struct attribute attr; 2938 const char *name = NULL; 2939 2940 if (recur_count == 100) 2941 { 2942 _bfd_error_handler 2943 (_("DWARF error: abstract instance recursion detected")); 2944 bfd_set_error (bfd_error_bad_value); 2945 return FALSE; 2946 } 2947 2948 /* DW_FORM_ref_addr can reference an entry in a different CU. It 2949 is an offset from the .debug_info section, not the current CU. */ 2950 if (attr_ptr->form == DW_FORM_ref_addr) 2951 { 2952 /* We only support DW_FORM_ref_addr within the same file, so 2953 any relocations should be resolved already. Check this by 2954 testing for a zero die_ref; There can't be a valid reference 2955 to the header of a .debug_info section. 2956 DW_FORM_ref_addr is an offset relative to .debug_info. 2957 Normally when using the GNU linker this is accomplished by 2958 emitting a symbolic reference to a label, because .debug_info 2959 sections are linked at zero. When there are multiple section 2960 groups containing .debug_info, as there might be in a 2961 relocatable object file, it would be reasonable to assume that 2962 a symbolic reference to a label in any .debug_info section 2963 might be used. Since we lay out multiple .debug_info 2964 sections at non-zero VMAs (see place_sections), and read 2965 them contiguously into dwarf_info_buffer, that means the 2966 reference is relative to dwarf_info_buffer. */ 2967 size_t total; 2968 2969 info_ptr = unit->file->dwarf_info_buffer; 2970 info_ptr_end = info_ptr + unit->file->dwarf_info_size; 2971 total = info_ptr_end - info_ptr; 2972 if (!die_ref) 2973 return TRUE; 2974 else if (die_ref >= total) 2975 { 2976 _bfd_error_handler 2977 (_("DWARF error: invalid abstract instance DIE ref")); 2978 bfd_set_error (bfd_error_bad_value); 2979 return FALSE; 2980 } 2981 info_ptr += die_ref; 2982 } 2983 else if (attr_ptr->form == DW_FORM_GNU_ref_alt) 2984 { 2985 bfd_boolean first_time = unit->stash->alt.dwarf_info_buffer == NULL; 2986 2987 info_ptr = read_alt_indirect_ref (unit, die_ref); 2988 if (first_time) 2989 unit->stash->alt.info_ptr = unit->stash->alt.dwarf_info_buffer; 2990 if (info_ptr == NULL) 2991 { 2992 _bfd_error_handler 2993 (_("DWARF error: unable to read alt ref %" PRIu64), 2994 (uint64_t) die_ref); 2995 bfd_set_error (bfd_error_bad_value); 2996 return FALSE; 2997 } 2998 info_ptr_end = (unit->stash->alt.dwarf_info_buffer 2999 + unit->stash->alt.dwarf_info_size); 3000 if (unit->stash->alt.all_comp_units) 3001 unit = unit->stash->alt.all_comp_units; 3002 } 3003 3004 if (attr_ptr->form == DW_FORM_ref_addr 3005 || attr_ptr->form == DW_FORM_GNU_ref_alt) 3006 { 3007 /* Now find the CU containing this pointer. */ 3008 if (info_ptr >= unit->info_ptr_unit && info_ptr < unit->end_ptr) 3009 info_ptr_end = unit->end_ptr; 3010 else 3011 { 3012 /* Check other CUs to see if they contain the abbrev. */ 3013 struct comp_unit *u; 3014 3015 for (u = unit->prev_unit; u != NULL; u = u->prev_unit) 3016 if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr) 3017 break; 3018 3019 if (u == NULL) 3020 for (u = unit->next_unit; u != NULL; u = u->next_unit) 3021 if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr) 3022 break; 3023 3024 if (attr_ptr->form == DW_FORM_ref_addr) 3025 while (u == NULL) 3026 { 3027 u = stash_comp_unit (unit->stash, &unit->stash->f); 3028 if (u == NULL) 3029 break; 3030 if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr) 3031 break; 3032 u = NULL; 3033 } 3034 3035 if (attr_ptr->form == DW_FORM_GNU_ref_alt) 3036 while (u == NULL) 3037 { 3038 u = stash_comp_unit (unit->stash, &unit->stash->alt); 3039 if (u == NULL) 3040 break; 3041 if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr) 3042 break; 3043 u = NULL; 3044 } 3045 3046 if (u == NULL) 3047 { 3048 _bfd_error_handler 3049 (_("DWARF error: unable to locate abstract instance DIE ref %" 3050 PRIu64), (uint64_t) die_ref); 3051 bfd_set_error (bfd_error_bad_value); 3052 return FALSE; 3053 } 3054 unit = u; 3055 info_ptr_end = unit->end_ptr; 3056 } 3057 } 3058 else 3059 { 3060 /* DW_FORM_ref1, DW_FORM_ref2, DW_FORM_ref4, DW_FORM_ref8 or 3061 DW_FORM_ref_udata. These are all references relative to the 3062 start of the current CU. */ 3063 size_t total; 3064 3065 info_ptr = unit->info_ptr_unit; 3066 info_ptr_end = unit->end_ptr; 3067 total = info_ptr_end - info_ptr; 3068 if (!die_ref || die_ref >= total) 3069 { 3070 _bfd_error_handler 3071 (_("DWARF error: invalid abstract instance DIE ref")); 3072 bfd_set_error (bfd_error_bad_value); 3073 return FALSE; 3074 } 3075 info_ptr += die_ref; 3076 } 3077 3078 abbrev_number = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read, 3079 FALSE, info_ptr_end); 3080 info_ptr += bytes_read; 3081 3082 if (abbrev_number) 3083 { 3084 abbrev = lookup_abbrev (abbrev_number, unit->abbrevs); 3085 if (! abbrev) 3086 { 3087 _bfd_error_handler 3088 (_("DWARF error: could not find abbrev number %u"), abbrev_number); 3089 bfd_set_error (bfd_error_bad_value); 3090 return FALSE; 3091 } 3092 else 3093 { 3094 for (i = 0; i < abbrev->num_attrs; ++i) 3095 { 3096 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, 3097 info_ptr, info_ptr_end); 3098 if (info_ptr == NULL) 3099 break; 3100 switch (attr.name) 3101 { 3102 case DW_AT_name: 3103 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name 3104 over DW_AT_name. */ 3105 if (name == NULL && is_str_attr (attr.form)) 3106 { 3107 name = attr.u.str; 3108 if (non_mangled (unit->lang)) 3109 *is_linkage = TRUE; 3110 } 3111 break; 3112 case DW_AT_specification: 3113 if (!find_abstract_instance (unit, &attr, recur_count + 1, 3114 &name, is_linkage, 3115 filename_ptr, linenumber_ptr)) 3116 return FALSE; 3117 break; 3118 case DW_AT_linkage_name: 3119 case DW_AT_MIPS_linkage_name: 3120 /* PR 16949: Corrupt debug info can place 3121 non-string forms into these attributes. */ 3122 if (is_str_attr (attr.form)) 3123 { 3124 name = attr.u.str; 3125 *is_linkage = TRUE; 3126 } 3127 break; 3128 case DW_AT_decl_file: 3129 if (!comp_unit_maybe_decode_line_info (unit)) 3130 return FALSE; 3131 *filename_ptr = concat_filename (unit->line_table, 3132 attr.u.val); 3133 break; 3134 case DW_AT_decl_line: 3135 *linenumber_ptr = attr.u.val; 3136 break; 3137 default: 3138 break; 3139 } 3140 } 3141 } 3142 } 3143 *pname = name; 3144 return TRUE; 3145 } 3146 3147 static bfd_boolean 3148 read_ranges (struct comp_unit *unit, struct arange *arange, 3149 bfd_uint64_t offset) 3150 { 3151 bfd_byte *ranges_ptr; 3152 bfd_byte *ranges_end; 3153 bfd_vma base_address = unit->base_address; 3154 3155 if (! unit->file->dwarf_ranges_buffer) 3156 { 3157 if (! read_debug_ranges (unit)) 3158 return FALSE; 3159 } 3160 3161 ranges_ptr = unit->file->dwarf_ranges_buffer + offset; 3162 if (ranges_ptr < unit->file->dwarf_ranges_buffer) 3163 return FALSE; 3164 ranges_end = unit->file->dwarf_ranges_buffer + unit->file->dwarf_ranges_size; 3165 3166 for (;;) 3167 { 3168 bfd_vma low_pc; 3169 bfd_vma high_pc; 3170 3171 /* PR 17512: file: 62cada7d. */ 3172 if (ranges_ptr + 2 * unit->addr_size > ranges_end) 3173 return FALSE; 3174 3175 low_pc = read_address (unit, ranges_ptr, ranges_end); 3176 ranges_ptr += unit->addr_size; 3177 high_pc = read_address (unit, ranges_ptr, ranges_end); 3178 ranges_ptr += unit->addr_size; 3179 3180 if (low_pc == 0 && high_pc == 0) 3181 break; 3182 if (low_pc == -1UL && high_pc != -1UL) 3183 base_address = high_pc; 3184 else 3185 { 3186 if (!arange_add (unit, arange, 3187 base_address + low_pc, base_address + high_pc)) 3188 return FALSE; 3189 } 3190 } 3191 return TRUE; 3192 } 3193 3194 static bfd_boolean 3195 read_rnglists (struct comp_unit *unit, struct arange *arange, 3196 bfd_uint64_t offset) 3197 { 3198 bfd_byte *rngs_ptr; 3199 bfd_byte *rngs_end; 3200 bfd_vma base_address = unit->base_address; 3201 bfd_vma low_pc; 3202 bfd_vma high_pc; 3203 bfd *abfd = unit->abfd; 3204 3205 if (! unit->file->dwarf_rnglists_buffer) 3206 { 3207 if (! read_debug_rnglists (unit)) 3208 return FALSE; 3209 } 3210 3211 rngs_ptr = unit->file->dwarf_rnglists_buffer + offset; 3212 if (rngs_ptr < unit->file->dwarf_rnglists_buffer) 3213 return FALSE; 3214 rngs_end = unit->file->dwarf_rnglists_buffer; 3215 rngs_end += unit->file->dwarf_rnglists_size; 3216 3217 for (;;) 3218 { 3219 enum dwarf_range_list_entry rlet; 3220 unsigned int bytes_read; 3221 3222 if (rngs_ptr + 1 > rngs_end) 3223 return FALSE; 3224 3225 rlet = read_1_byte (abfd, rngs_ptr, rngs_end); 3226 rngs_ptr++; 3227 3228 switch (rlet) 3229 { 3230 case DW_RLE_end_of_list: 3231 return TRUE; 3232 3233 case DW_RLE_base_address: 3234 if (rngs_ptr + unit->addr_size > rngs_end) 3235 return FALSE; 3236 base_address = read_address (unit, rngs_ptr, rngs_end); 3237 rngs_ptr += unit->addr_size; 3238 continue; 3239 3240 case DW_RLE_start_length: 3241 if (rngs_ptr + unit->addr_size > rngs_end) 3242 return FALSE; 3243 low_pc = read_address (unit, rngs_ptr, rngs_end); 3244 rngs_ptr += unit->addr_size; 3245 high_pc = low_pc; 3246 high_pc += _bfd_safe_read_leb128 (abfd, rngs_ptr, &bytes_read, 3247 FALSE, rngs_end); 3248 rngs_ptr += bytes_read; 3249 break; 3250 3251 case DW_RLE_offset_pair: 3252 low_pc = base_address; 3253 low_pc += _bfd_safe_read_leb128 (abfd, rngs_ptr, &bytes_read, 3254 FALSE, rngs_end); 3255 high_pc = base_address; 3256 high_pc += _bfd_safe_read_leb128 (abfd, rngs_ptr, &bytes_read, 3257 FALSE, rngs_end); 3258 break; 3259 3260 case DW_RLE_start_end: 3261 if (rngs_ptr + 2 * unit->addr_size > rngs_end) 3262 return FALSE; 3263 low_pc = read_address (unit, rngs_ptr, rngs_end); 3264 rngs_ptr += unit->addr_size; 3265 high_pc = read_address (unit, rngs_ptr, rngs_end); 3266 rngs_ptr += unit->addr_size; 3267 break; 3268 3269 /* TODO x-variants need .debug_addr support used for split-dwarf. */ 3270 case DW_RLE_base_addressx: 3271 case DW_RLE_startx_endx: 3272 case DW_RLE_startx_length: 3273 default: 3274 return FALSE; 3275 } 3276 3277 if ((low_pc == 0 && high_pc == 0) || low_pc == high_pc) 3278 return FALSE; 3279 3280 if (!arange_add (unit, arange, low_pc, high_pc)) 3281 return FALSE; 3282 } 3283 } 3284 3285 static bfd_boolean 3286 read_rangelist (struct comp_unit *unit, struct arange *arange, 3287 bfd_uint64_t offset) 3288 { 3289 if (unit->version <= 4) 3290 return read_ranges (unit, arange, offset); 3291 else 3292 return read_rnglists (unit, arange, offset); 3293 } 3294 3295 static struct varinfo * 3296 lookup_var_by_offset (bfd_uint64_t offset, struct varinfo * table) 3297 { 3298 while (table) 3299 { 3300 if (table->unit_offset == offset) 3301 return table; 3302 table = table->prev_var; 3303 } 3304 3305 return NULL; 3306 } 3307 3308 3309 /* DWARF2 Compilation unit functions. */ 3310 3311 /* Scan over each die in a comp. unit looking for functions to add 3312 to the function table and variables to the variable table. */ 3313 3314 static bfd_boolean 3315 scan_unit_for_symbols (struct comp_unit *unit) 3316 { 3317 bfd *abfd = unit->abfd; 3318 bfd_byte *info_ptr = unit->first_child_die_ptr; 3319 bfd_byte *info_ptr_end = unit->end_ptr; 3320 int nesting_level = 0; 3321 struct nest_funcinfo { 3322 struct funcinfo *func; 3323 } *nested_funcs; 3324 int nested_funcs_size; 3325 3326 /* Maintain a stack of in-scope functions and inlined functions, which we 3327 can use to set the caller_func field. */ 3328 nested_funcs_size = 32; 3329 nested_funcs = (struct nest_funcinfo *) 3330 bfd_malloc (nested_funcs_size * sizeof (*nested_funcs)); 3331 if (nested_funcs == NULL) 3332 return FALSE; 3333 nested_funcs[nesting_level].func = 0; 3334 3335 while (nesting_level >= 0) 3336 { 3337 unsigned int abbrev_number, bytes_read, i; 3338 struct abbrev_info *abbrev; 3339 struct attribute attr; 3340 struct funcinfo *func; 3341 struct varinfo *var; 3342 bfd_vma low_pc = 0; 3343 bfd_vma high_pc = 0; 3344 bfd_boolean high_pc_relative = FALSE; 3345 bfd_uint64_t current_offset; 3346 3347 /* PR 17512: file: 9f405d9d. */ 3348 if (info_ptr >= info_ptr_end) 3349 goto fail; 3350 3351 current_offset = info_ptr - unit->info_ptr_unit; 3352 abbrev_number = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read, 3353 FALSE, info_ptr_end); 3354 info_ptr += bytes_read; 3355 3356 if (! abbrev_number) 3357 { 3358 nesting_level--; 3359 continue; 3360 } 3361 3362 abbrev = lookup_abbrev (abbrev_number, unit->abbrevs); 3363 if (! abbrev) 3364 { 3365 static unsigned int previous_failed_abbrev = -1U; 3366 3367 /* Avoid multiple reports of the same missing abbrev. */ 3368 if (abbrev_number != previous_failed_abbrev) 3369 { 3370 _bfd_error_handler 3371 (_("DWARF error: could not find abbrev number %u"), 3372 abbrev_number); 3373 previous_failed_abbrev = abbrev_number; 3374 } 3375 bfd_set_error (bfd_error_bad_value); 3376 goto fail; 3377 } 3378 3379 if (abbrev->tag == DW_TAG_subprogram 3380 || abbrev->tag == DW_TAG_entry_point 3381 || abbrev->tag == DW_TAG_inlined_subroutine) 3382 { 3383 size_t amt = sizeof (struct funcinfo); 3384 3385 var = NULL; 3386 func = (struct funcinfo *) bfd_zalloc (abfd, amt); 3387 if (func == NULL) 3388 goto fail; 3389 func->tag = abbrev->tag; 3390 func->prev_func = unit->function_table; 3391 unit->function_table = func; 3392 unit->number_of_functions++; 3393 BFD_ASSERT (!unit->cached); 3394 3395 if (func->tag == DW_TAG_inlined_subroutine) 3396 for (i = nesting_level; i-- != 0; ) 3397 if (nested_funcs[i].func) 3398 { 3399 func->caller_func = nested_funcs[i].func; 3400 break; 3401 } 3402 nested_funcs[nesting_level].func = func; 3403 } 3404 else 3405 { 3406 func = NULL; 3407 if (abbrev->tag == DW_TAG_variable 3408 || abbrev->tag == DW_TAG_member) 3409 { 3410 size_t amt = sizeof (struct varinfo); 3411 var = (struct varinfo *) bfd_zalloc (abfd, amt); 3412 if (var == NULL) 3413 goto fail; 3414 var->tag = abbrev->tag; 3415 var->stack = TRUE; 3416 var->prev_var = unit->variable_table; 3417 unit->variable_table = var; 3418 var->unit_offset = current_offset; 3419 /* PR 18205: Missing debug information can cause this 3420 var to be attached to an already cached unit. */ 3421 } 3422 else 3423 var = NULL; 3424 3425 /* No inline function in scope at this nesting level. */ 3426 nested_funcs[nesting_level].func = 0; 3427 } 3428 3429 for (i = 0; i < abbrev->num_attrs; ++i) 3430 { 3431 info_ptr = read_attribute (&attr, &abbrev->attrs[i], 3432 unit, info_ptr, info_ptr_end); 3433 if (info_ptr == NULL) 3434 goto fail; 3435 3436 if (func) 3437 { 3438 switch (attr.name) 3439 { 3440 case DW_AT_call_file: 3441 func->caller_file = concat_filename (unit->line_table, 3442 attr.u.val); 3443 break; 3444 3445 case DW_AT_call_line: 3446 func->caller_line = attr.u.val; 3447 break; 3448 3449 case DW_AT_abstract_origin: 3450 case DW_AT_specification: 3451 if (!find_abstract_instance (unit, &attr, 0, 3452 &func->name, 3453 &func->is_linkage, 3454 &func->file, 3455 &func->line)) 3456 goto fail; 3457 break; 3458 3459 case DW_AT_name: 3460 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name 3461 over DW_AT_name. */ 3462 if (func->name == NULL && is_str_attr (attr.form)) 3463 { 3464 func->name = attr.u.str; 3465 if (non_mangled (unit->lang)) 3466 func->is_linkage = TRUE; 3467 } 3468 break; 3469 3470 case DW_AT_linkage_name: 3471 case DW_AT_MIPS_linkage_name: 3472 /* PR 16949: Corrupt debug info can place 3473 non-string forms into these attributes. */ 3474 if (is_str_attr (attr.form)) 3475 { 3476 func->name = attr.u.str; 3477 func->is_linkage = TRUE; 3478 } 3479 break; 3480 3481 case DW_AT_low_pc: 3482 low_pc = attr.u.val; 3483 break; 3484 3485 case DW_AT_high_pc: 3486 high_pc = attr.u.val; 3487 high_pc_relative = attr.form != DW_FORM_addr; 3488 break; 3489 3490 case DW_AT_ranges: 3491 if (!read_rangelist (unit, &func->arange, attr.u.val)) 3492 goto fail; 3493 break; 3494 3495 case DW_AT_decl_file: 3496 func->file = concat_filename (unit->line_table, 3497 attr.u.val); 3498 break; 3499 3500 case DW_AT_decl_line: 3501 func->line = attr.u.val; 3502 break; 3503 3504 default: 3505 break; 3506 } 3507 } 3508 else if (var) 3509 { 3510 switch (attr.name) 3511 { 3512 case DW_AT_specification: 3513 if (attr.u.val) 3514 { 3515 struct varinfo * spec_var; 3516 3517 spec_var = lookup_var_by_offset (attr.u.val, 3518 unit->variable_table); 3519 if (spec_var == NULL) 3520 { 3521 _bfd_error_handler (_("DWARF error: could not find " 3522 "variable specification " 3523 "at offset %lx"), 3524 (unsigned long) attr.u.val); 3525 break; 3526 } 3527 3528 if (var->name == NULL) 3529 var->name = spec_var->name; 3530 if (var->file == NULL && spec_var->file != NULL) 3531 var->file = strdup (spec_var->file); 3532 if (var->line == 0) 3533 var->line = spec_var->line; 3534 if (var->sec == NULL) 3535 var->sec = spec_var->sec; 3536 } 3537 break; 3538 3539 case DW_AT_name: 3540 if (is_str_attr (attr.form)) 3541 var->name = attr.u.str; 3542 break; 3543 3544 case DW_AT_decl_file: 3545 var->file = concat_filename (unit->line_table, 3546 attr.u.val); 3547 break; 3548 3549 case DW_AT_decl_line: 3550 var->line = attr.u.val; 3551 break; 3552 3553 case DW_AT_external: 3554 if (attr.u.val != 0) 3555 var->stack = FALSE; 3556 break; 3557 3558 case DW_AT_location: 3559 switch (attr.form) 3560 { 3561 case DW_FORM_block: 3562 case DW_FORM_block1: 3563 case DW_FORM_block2: 3564 case DW_FORM_block4: 3565 case DW_FORM_exprloc: 3566 if (attr.u.blk->data != NULL 3567 && *attr.u.blk->data == DW_OP_addr) 3568 { 3569 var->stack = FALSE; 3570 3571 /* Verify that DW_OP_addr is the only opcode in the 3572 location, in which case the block size will be 1 3573 plus the address size. */ 3574 /* ??? For TLS variables, gcc can emit 3575 DW_OP_addr <addr> DW_OP_GNU_push_tls_address 3576 which we don't handle here yet. */ 3577 if (attr.u.blk->size == unit->addr_size + 1U) 3578 var->addr = bfd_get (unit->addr_size * 8, 3579 unit->abfd, 3580 attr.u.blk->data + 1); 3581 } 3582 break; 3583 3584 default: 3585 break; 3586 } 3587 break; 3588 3589 default: 3590 break; 3591 } 3592 } 3593 } 3594 3595 if (high_pc_relative) 3596 high_pc += low_pc; 3597 3598 if (func && high_pc != 0) 3599 { 3600 if (!arange_add (unit, &func->arange, low_pc, high_pc)) 3601 goto fail; 3602 } 3603 3604 if (abbrev->has_children) 3605 { 3606 nesting_level++; 3607 3608 if (nesting_level >= nested_funcs_size) 3609 { 3610 struct nest_funcinfo *tmp; 3611 3612 nested_funcs_size *= 2; 3613 tmp = (struct nest_funcinfo *) 3614 bfd_realloc (nested_funcs, 3615 nested_funcs_size * sizeof (*nested_funcs)); 3616 if (tmp == NULL) 3617 goto fail; 3618 nested_funcs = tmp; 3619 } 3620 nested_funcs[nesting_level].func = 0; 3621 } 3622 } 3623 3624 free (nested_funcs); 3625 return TRUE; 3626 3627 fail: 3628 free (nested_funcs); 3629 return FALSE; 3630 } 3631 3632 /* Parse a DWARF2 compilation unit starting at INFO_PTR. UNIT_LENGTH 3633 includes the compilation unit header that proceeds the DIE's, but 3634 does not include the length field that precedes each compilation 3635 unit header. END_PTR points one past the end of this comp unit. 3636 OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes). 3637 3638 This routine does not read the whole compilation unit; only enough 3639 to get to the line number information for the compilation unit. */ 3640 3641 static struct comp_unit * 3642 parse_comp_unit (struct dwarf2_debug *stash, 3643 struct dwarf2_debug_file *file, 3644 bfd_byte *info_ptr, 3645 bfd_vma unit_length, 3646 bfd_byte *info_ptr_unit, 3647 unsigned int offset_size) 3648 { 3649 struct comp_unit* unit; 3650 unsigned int version; 3651 bfd_uint64_t abbrev_offset = 0; 3652 /* Initialize it just to avoid a GCC false warning. */ 3653 unsigned int addr_size = -1; 3654 struct abbrev_info** abbrevs; 3655 unsigned int abbrev_number, bytes_read, i; 3656 struct abbrev_info *abbrev; 3657 struct attribute attr; 3658 bfd_byte *end_ptr = info_ptr + unit_length; 3659 size_t amt; 3660 bfd_vma low_pc = 0; 3661 bfd_vma high_pc = 0; 3662 bfd *abfd = file->bfd_ptr; 3663 bfd_boolean high_pc_relative = FALSE; 3664 enum dwarf_unit_type unit_type; 3665 3666 version = read_2_bytes (abfd, info_ptr, end_ptr); 3667 info_ptr += 2; 3668 if (version < 2 || version > 5) 3669 { 3670 /* PR 19872: A version number of 0 probably means that there is padding 3671 at the end of the .debug_info section. Gold puts it there when 3672 performing an incremental link, for example. So do not generate 3673 an error, just return a NULL. */ 3674 if (version) 3675 { 3676 _bfd_error_handler 3677 (_("DWARF error: found dwarf version '%u', this reader" 3678 " only handles version 2, 3, 4 and 5 information"), version); 3679 bfd_set_error (bfd_error_bad_value); 3680 } 3681 return NULL; 3682 } 3683 3684 if (version < 5) 3685 unit_type = DW_UT_compile; 3686 else 3687 { 3688 unit_type = read_1_byte (abfd, info_ptr, end_ptr); 3689 info_ptr += 1; 3690 3691 addr_size = read_1_byte (abfd, info_ptr, end_ptr); 3692 info_ptr += 1; 3693 } 3694 3695 BFD_ASSERT (offset_size == 4 || offset_size == 8); 3696 if (offset_size == 4) 3697 abbrev_offset = read_4_bytes (abfd, info_ptr, end_ptr); 3698 else 3699 abbrev_offset = read_8_bytes (abfd, info_ptr, end_ptr); 3700 info_ptr += offset_size; 3701 3702 if (version < 5) 3703 { 3704 addr_size = read_1_byte (abfd, info_ptr, end_ptr); 3705 info_ptr += 1; 3706 } 3707 3708 if (unit_type == DW_UT_type) 3709 { 3710 /* Skip type signature. */ 3711 info_ptr += 8; 3712 3713 /* Skip type offset. */ 3714 info_ptr += offset_size; 3715 } 3716 3717 if (addr_size > sizeof (bfd_vma)) 3718 { 3719 _bfd_error_handler 3720 /* xgettext: c-format */ 3721 (_("DWARF error: found address size '%u', this reader" 3722 " can not handle sizes greater than '%u'"), 3723 addr_size, 3724 (unsigned int) sizeof (bfd_vma)); 3725 bfd_set_error (bfd_error_bad_value); 3726 return NULL; 3727 } 3728 3729 if (addr_size != 2 && addr_size != 4 && addr_size != 8) 3730 { 3731 _bfd_error_handler 3732 ("DWARF error: found address size '%u', this reader" 3733 " can only handle address sizes '2', '4' and '8'", addr_size); 3734 bfd_set_error (bfd_error_bad_value); 3735 return NULL; 3736 } 3737 3738 /* Read the abbrevs for this compilation unit into a table. */ 3739 abbrevs = read_abbrevs (abfd, abbrev_offset, stash, file); 3740 if (! abbrevs) 3741 return NULL; 3742 3743 abbrev_number = _bfd_safe_read_leb128 (abfd, info_ptr, &bytes_read, 3744 FALSE, end_ptr); 3745 info_ptr += bytes_read; 3746 if (! abbrev_number) 3747 { 3748 /* PR 19872: An abbrev number of 0 probably means that there is padding 3749 at the end of the .debug_abbrev section. Gold puts it there when 3750 performing an incremental link, for example. So do not generate 3751 an error, just return a NULL. */ 3752 return NULL; 3753 } 3754 3755 abbrev = lookup_abbrev (abbrev_number, abbrevs); 3756 if (! abbrev) 3757 { 3758 _bfd_error_handler (_("DWARF error: could not find abbrev number %u"), 3759 abbrev_number); 3760 bfd_set_error (bfd_error_bad_value); 3761 return NULL; 3762 } 3763 3764 amt = sizeof (struct comp_unit); 3765 unit = (struct comp_unit *) bfd_zalloc (abfd, amt); 3766 if (unit == NULL) 3767 return NULL; 3768 unit->abfd = abfd; 3769 unit->version = version; 3770 unit->addr_size = addr_size; 3771 unit->offset_size = offset_size; 3772 unit->abbrevs = abbrevs; 3773 unit->end_ptr = end_ptr; 3774 unit->stash = stash; 3775 unit->file = file; 3776 unit->info_ptr_unit = info_ptr_unit; 3777 3778 for (i = 0; i < abbrev->num_attrs; ++i) 3779 { 3780 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr, end_ptr); 3781 if (info_ptr == NULL) 3782 return NULL; 3783 3784 /* Store the data if it is of an attribute we want to keep in a 3785 partial symbol table. */ 3786 switch (attr.name) 3787 { 3788 case DW_AT_stmt_list: 3789 unit->stmtlist = 1; 3790 unit->line_offset = attr.u.val; 3791 break; 3792 3793 case DW_AT_name: 3794 if (is_str_attr (attr.form)) 3795 unit->name = attr.u.str; 3796 break; 3797 3798 case DW_AT_low_pc: 3799 low_pc = attr.u.val; 3800 /* If the compilation unit DIE has a DW_AT_low_pc attribute, 3801 this is the base address to use when reading location 3802 lists or range lists. */ 3803 if (abbrev->tag == DW_TAG_compile_unit) 3804 unit->base_address = low_pc; 3805 break; 3806 3807 case DW_AT_high_pc: 3808 high_pc = attr.u.val; 3809 high_pc_relative = attr.form != DW_FORM_addr; 3810 break; 3811 3812 case DW_AT_ranges: 3813 if (!read_rangelist (unit, &unit->arange, attr.u.val)) 3814 return NULL; 3815 break; 3816 3817 case DW_AT_comp_dir: 3818 { 3819 char *comp_dir = attr.u.str; 3820 3821 /* PR 17512: file: 1fe726be. */ 3822 if (! is_str_attr (attr.form)) 3823 { 3824 _bfd_error_handler 3825 (_("DWARF error: DW_AT_comp_dir attribute encountered with a non-string form")); 3826 comp_dir = NULL; 3827 } 3828 3829 if (comp_dir) 3830 { 3831 /* Irix 6.2 native cc prepends <machine>.: to the compilation 3832 directory, get rid of it. */ 3833 char *cp = strchr (comp_dir, ':'); 3834 3835 if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/') 3836 comp_dir = cp + 1; 3837 } 3838 unit->comp_dir = comp_dir; 3839 break; 3840 } 3841 3842 case DW_AT_language: 3843 unit->lang = attr.u.val; 3844 break; 3845 3846 default: 3847 break; 3848 } 3849 } 3850 if (high_pc_relative) 3851 high_pc += low_pc; 3852 if (high_pc != 0) 3853 { 3854 if (!arange_add (unit, &unit->arange, low_pc, high_pc)) 3855 return NULL; 3856 } 3857 3858 unit->first_child_die_ptr = info_ptr; 3859 return unit; 3860 } 3861 3862 /* Return TRUE if UNIT may contain the address given by ADDR. When 3863 there are functions written entirely with inline asm statements, the 3864 range info in the compilation unit header may not be correct. We 3865 need to consult the line info table to see if a compilation unit 3866 really contains the given address. */ 3867 3868 static bfd_boolean 3869 comp_unit_contains_address (struct comp_unit *unit, bfd_vma addr) 3870 { 3871 struct arange *arange; 3872 3873 if (unit->error) 3874 return FALSE; 3875 3876 arange = &unit->arange; 3877 do 3878 { 3879 if (addr >= arange->low && addr < arange->high) 3880 return TRUE; 3881 arange = arange->next; 3882 } 3883 while (arange); 3884 3885 return FALSE; 3886 } 3887 3888 /* If UNIT contains ADDR, set the output parameters to the values for 3889 the line containing ADDR. The output parameters, FILENAME_PTR, 3890 FUNCTION_PTR, and LINENUMBER_PTR, are pointers to the objects 3891 to be filled in. 3892 3893 Returns the range of addresses covered by the entry that was used 3894 to fill in *LINENUMBER_PTR or 0 if it was not filled in. */ 3895 3896 static bfd_vma 3897 comp_unit_find_nearest_line (struct comp_unit *unit, 3898 bfd_vma addr, 3899 const char **filename_ptr, 3900 struct funcinfo **function_ptr, 3901 unsigned int *linenumber_ptr, 3902 unsigned int *discriminator_ptr) 3903 { 3904 bfd_boolean func_p; 3905 3906 if (!comp_unit_maybe_decode_line_info (unit)) 3907 return FALSE; 3908 3909 *function_ptr = NULL; 3910 func_p = lookup_address_in_function_table (unit, addr, function_ptr); 3911 if (func_p && (*function_ptr)->tag == DW_TAG_inlined_subroutine) 3912 unit->stash->inliner_chain = *function_ptr; 3913 3914 return lookup_address_in_line_info_table (unit->line_table, addr, 3915 filename_ptr, 3916 linenumber_ptr, 3917 discriminator_ptr); 3918 } 3919 3920 /* Check to see if line info is already decoded in a comp_unit. 3921 If not, decode it. Returns TRUE if no errors were encountered; 3922 FALSE otherwise. */ 3923 3924 static bfd_boolean 3925 comp_unit_maybe_decode_line_info (struct comp_unit *unit) 3926 { 3927 if (unit->error) 3928 return FALSE; 3929 3930 if (! unit->line_table) 3931 { 3932 if (! unit->stmtlist) 3933 { 3934 unit->error = 1; 3935 return FALSE; 3936 } 3937 3938 unit->line_table = decode_line_info (unit); 3939 3940 if (! unit->line_table) 3941 { 3942 unit->error = 1; 3943 return FALSE; 3944 } 3945 3946 if (unit->first_child_die_ptr < unit->end_ptr 3947 && ! scan_unit_for_symbols (unit)) 3948 { 3949 unit->error = 1; 3950 return FALSE; 3951 } 3952 } 3953 3954 return TRUE; 3955 } 3956 3957 /* If UNIT contains SYM at ADDR, set the output parameters to the 3958 values for the line containing SYM. The output parameters, 3959 FILENAME_PTR, and LINENUMBER_PTR, are pointers to the objects to be 3960 filled in. 3961 3962 Return TRUE if UNIT contains SYM, and no errors were encountered; 3963 FALSE otherwise. */ 3964 3965 static bfd_boolean 3966 comp_unit_find_line (struct comp_unit *unit, 3967 asymbol *sym, 3968 bfd_vma addr, 3969 const char **filename_ptr, 3970 unsigned int *linenumber_ptr) 3971 { 3972 if (!comp_unit_maybe_decode_line_info (unit)) 3973 return FALSE; 3974 3975 if (sym->flags & BSF_FUNCTION) 3976 return lookup_symbol_in_function_table (unit, sym, addr, 3977 filename_ptr, 3978 linenumber_ptr); 3979 3980 return lookup_symbol_in_variable_table (unit, sym, addr, 3981 filename_ptr, 3982 linenumber_ptr); 3983 } 3984 3985 static struct funcinfo * 3986 reverse_funcinfo_list (struct funcinfo *head) 3987 { 3988 struct funcinfo *rhead; 3989 struct funcinfo *temp; 3990 3991 for (rhead = NULL; head; head = temp) 3992 { 3993 temp = head->prev_func; 3994 head->prev_func = rhead; 3995 rhead = head; 3996 } 3997 return rhead; 3998 } 3999 4000 static struct varinfo * 4001 reverse_varinfo_list (struct varinfo *head) 4002 { 4003 struct varinfo *rhead; 4004 struct varinfo *temp; 4005 4006 for (rhead = NULL; head; head = temp) 4007 { 4008 temp = head->prev_var; 4009 head->prev_var = rhead; 4010 rhead = head; 4011 } 4012 return rhead; 4013 } 4014 4015 /* Extract all interesting funcinfos and varinfos of a compilation 4016 unit into hash tables for faster lookup. Returns TRUE if no 4017 errors were enountered; FALSE otherwise. */ 4018 4019 static bfd_boolean 4020 comp_unit_hash_info (struct dwarf2_debug *stash, 4021 struct comp_unit *unit, 4022 struct info_hash_table *funcinfo_hash_table, 4023 struct info_hash_table *varinfo_hash_table) 4024 { 4025 struct funcinfo* each_func; 4026 struct varinfo* each_var; 4027 bfd_boolean okay = TRUE; 4028 4029 BFD_ASSERT (stash->info_hash_status != STASH_INFO_HASH_DISABLED); 4030 4031 if (!comp_unit_maybe_decode_line_info (unit)) 4032 return FALSE; 4033 4034 BFD_ASSERT (!unit->cached); 4035 4036 /* To preserve the original search order, we went to visit the function 4037 infos in the reversed order of the list. However, making the list 4038 bi-directional use quite a bit of extra memory. So we reverse 4039 the list first, traverse the list in the now reversed order and 4040 finally reverse the list again to get back the original order. */ 4041 unit->function_table = reverse_funcinfo_list (unit->function_table); 4042 for (each_func = unit->function_table; 4043 each_func && okay; 4044 each_func = each_func->prev_func) 4045 { 4046 /* Skip nameless functions. */ 4047 if (each_func->name) 4048 /* There is no need to copy name string into hash table as 4049 name string is either in the dwarf string buffer or 4050 info in the stash. */ 4051 okay = insert_info_hash_table (funcinfo_hash_table, each_func->name, 4052 (void*) each_func, FALSE); 4053 } 4054 unit->function_table = reverse_funcinfo_list (unit->function_table); 4055 if (!okay) 4056 return FALSE; 4057 4058 /* We do the same for variable infos. */ 4059 unit->variable_table = reverse_varinfo_list (unit->variable_table); 4060 for (each_var = unit->variable_table; 4061 each_var && okay; 4062 each_var = each_var->prev_var) 4063 { 4064 /* Skip stack vars and vars with no files or names. */ 4065 if (! each_var->stack 4066 && each_var->file != NULL 4067 && each_var->name != NULL) 4068 /* There is no need to copy name string into hash table as 4069 name string is either in the dwarf string buffer or 4070 info in the stash. */ 4071 okay = insert_info_hash_table (varinfo_hash_table, each_var->name, 4072 (void*) each_var, FALSE); 4073 } 4074 4075 unit->variable_table = reverse_varinfo_list (unit->variable_table); 4076 unit->cached = TRUE; 4077 return okay; 4078 } 4079 4080 /* Locate a section in a BFD containing debugging info. The search starts 4081 from the section after AFTER_SEC, or from the first section in the BFD if 4082 AFTER_SEC is NULL. The search works by examining the names of the 4083 sections. There are three permissiable names. The first two are given 4084 by DEBUG_SECTIONS[debug_info] (whose standard DWARF2 names are .debug_info 4085 and .zdebug_info). The third is a prefix .gnu.linkonce.wi. 4086 This is a variation on the .debug_info section which has a checksum 4087 describing the contents appended onto the name. This allows the linker to 4088 identify and discard duplicate debugging sections for different 4089 compilation units. */ 4090 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi." 4091 4092 static asection * 4093 find_debug_info (bfd *abfd, const struct dwarf_debug_section *debug_sections, 4094 asection *after_sec) 4095 { 4096 asection *msec; 4097 const char *look; 4098 4099 if (after_sec == NULL) 4100 { 4101 look = debug_sections[debug_info].uncompressed_name; 4102 msec = bfd_get_section_by_name (abfd, look); 4103 if (msec != NULL) 4104 return msec; 4105 4106 look = debug_sections[debug_info].compressed_name; 4107 if (look != NULL) 4108 { 4109 msec = bfd_get_section_by_name (abfd, look); 4110 if (msec != NULL) 4111 return msec; 4112 } 4113 4114 for (msec = abfd->sections; msec != NULL; msec = msec->next) 4115 if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO)) 4116 return msec; 4117 4118 return NULL; 4119 } 4120 4121 for (msec = after_sec->next; msec != NULL; msec = msec->next) 4122 { 4123 look = debug_sections[debug_info].uncompressed_name; 4124 if (strcmp (msec->name, look) == 0) 4125 return msec; 4126 4127 look = debug_sections[debug_info].compressed_name; 4128 if (look != NULL && strcmp (msec->name, look) == 0) 4129 return msec; 4130 4131 if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO)) 4132 return msec; 4133 } 4134 4135 return NULL; 4136 } 4137 4138 /* Transfer VMAs from object file to separate debug file. */ 4139 4140 static void 4141 set_debug_vma (bfd *orig_bfd, bfd *debug_bfd) 4142 { 4143 asection *s, *d; 4144 4145 for (s = orig_bfd->sections, d = debug_bfd->sections; 4146 s != NULL && d != NULL; 4147 s = s->next, d = d->next) 4148 { 4149 if ((d->flags & SEC_DEBUGGING) != 0) 4150 break; 4151 /* ??? Assumes 1-1 correspondence between sections in the 4152 two files. */ 4153 if (strcmp (s->name, d->name) == 0) 4154 { 4155 d->output_section = s->output_section; 4156 d->output_offset = s->output_offset; 4157 d->vma = s->vma; 4158 } 4159 } 4160 } 4161 4162 /* If the dwarf2 info was found in a separate debug file, return the 4163 debug file section corresponding to the section in the original file 4164 and the debug file symbols. */ 4165 4166 static void 4167 _bfd_dwarf2_stash_syms (struct dwarf2_debug *stash, bfd *abfd, 4168 asection **sec, asymbol ***syms) 4169 { 4170 if (stash->f.bfd_ptr != abfd) 4171 { 4172 asection *s, *d; 4173 4174 if (*sec == NULL) 4175 { 4176 *syms = stash->f.syms; 4177 return; 4178 } 4179 4180 for (s = abfd->sections, d = stash->f.bfd_ptr->sections; 4181 s != NULL && d != NULL; 4182 s = s->next, d = d->next) 4183 { 4184 if ((d->flags & SEC_DEBUGGING) != 0) 4185 break; 4186 if (s == *sec 4187 && strcmp (s->name, d->name) == 0) 4188 { 4189 *sec = d; 4190 *syms = stash->f.syms; 4191 break; 4192 } 4193 } 4194 } 4195 } 4196 4197 /* Unset vmas for adjusted sections in STASH. */ 4198 4199 static void 4200 unset_sections (struct dwarf2_debug *stash) 4201 { 4202 int i; 4203 struct adjusted_section *p; 4204 4205 i = stash->adjusted_section_count; 4206 p = stash->adjusted_sections; 4207 for (; i > 0; i--, p++) 4208 p->section->vma = 0; 4209 } 4210 4211 /* Set VMAs for allocated and .debug_info sections in ORIG_BFD, a 4212 relocatable object file. VMAs are normally all zero in relocatable 4213 object files, so if we want to distinguish locations in sections by 4214 address we need to set VMAs so the sections do not overlap. We 4215 also set VMA on .debug_info so that when we have multiple 4216 .debug_info sections (or the linkonce variant) they also do not 4217 overlap. The multiple .debug_info sections make up a single 4218 logical section. ??? We should probably do the same for other 4219 debug sections. */ 4220 4221 static bfd_boolean 4222 place_sections (bfd *orig_bfd, struct dwarf2_debug *stash) 4223 { 4224 bfd *abfd; 4225 struct adjusted_section *p; 4226 int i; 4227 const char *debug_info_name; 4228 4229 if (stash->adjusted_section_count != 0) 4230 { 4231 i = stash->adjusted_section_count; 4232 p = stash->adjusted_sections; 4233 for (; i > 0; i--, p++) 4234 p->section->vma = p->adj_vma; 4235 return TRUE; 4236 } 4237 4238 debug_info_name = stash->debug_sections[debug_info].uncompressed_name; 4239 i = 0; 4240 abfd = orig_bfd; 4241 while (1) 4242 { 4243 asection *sect; 4244 4245 for (sect = abfd->sections; sect != NULL; sect = sect->next) 4246 { 4247 int is_debug_info; 4248 4249 if ((sect->output_section != NULL 4250 && sect->output_section != sect 4251 && (sect->flags & SEC_DEBUGGING) == 0) 4252 || sect->vma != 0) 4253 continue; 4254 4255 is_debug_info = (strcmp (sect->name, debug_info_name) == 0 4256 || CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO)); 4257 4258 if (!((sect->flags & SEC_ALLOC) != 0 && abfd == orig_bfd) 4259 && !is_debug_info) 4260 continue; 4261 4262 i++; 4263 } 4264 if (abfd == stash->f.bfd_ptr) 4265 break; 4266 abfd = stash->f.bfd_ptr; 4267 } 4268 4269 if (i <= 1) 4270 stash->adjusted_section_count = -1; 4271 else 4272 { 4273 bfd_vma last_vma = 0, last_dwarf = 0; 4274 size_t amt = i * sizeof (struct adjusted_section); 4275 4276 p = (struct adjusted_section *) bfd_malloc (amt); 4277 if (p == NULL) 4278 return FALSE; 4279 4280 stash->adjusted_sections = p; 4281 stash->adjusted_section_count = i; 4282 4283 abfd = orig_bfd; 4284 while (1) 4285 { 4286 asection *sect; 4287 4288 for (sect = abfd->sections; sect != NULL; sect = sect->next) 4289 { 4290 bfd_size_type sz; 4291 int is_debug_info; 4292 4293 if ((sect->output_section != NULL 4294 && sect->output_section != sect 4295 && (sect->flags & SEC_DEBUGGING) == 0) 4296 || sect->vma != 0) 4297 continue; 4298 4299 is_debug_info = (strcmp (sect->name, debug_info_name) == 0 4300 || CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO)); 4301 4302 if (!((sect->flags & SEC_ALLOC) != 0 && abfd == orig_bfd) 4303 && !is_debug_info) 4304 continue; 4305 4306 sz = sect->rawsize ? sect->rawsize : sect->size; 4307 4308 if (is_debug_info) 4309 { 4310 BFD_ASSERT (sect->alignment_power == 0); 4311 sect->vma = last_dwarf; 4312 last_dwarf += sz; 4313 } 4314 else 4315 { 4316 /* Align the new address to the current section 4317 alignment. */ 4318 last_vma = ((last_vma 4319 + ~(-((bfd_vma) 1 << sect->alignment_power))) 4320 & (-((bfd_vma) 1 << sect->alignment_power))); 4321 sect->vma = last_vma; 4322 last_vma += sz; 4323 } 4324 4325 p->section = sect; 4326 p->adj_vma = sect->vma; 4327 p++; 4328 } 4329 if (abfd == stash->f.bfd_ptr) 4330 break; 4331 abfd = stash->f.bfd_ptr; 4332 } 4333 } 4334 4335 if (orig_bfd != stash->f.bfd_ptr) 4336 set_debug_vma (orig_bfd, stash->f.bfd_ptr); 4337 4338 return TRUE; 4339 } 4340 4341 /* Look up a funcinfo by name using the given info hash table. If found, 4342 also update the locations pointed to by filename_ptr and linenumber_ptr. 4343 4344 This function returns TRUE if a funcinfo that matches the given symbol 4345 and address is found with any error; otherwise it returns FALSE. */ 4346 4347 static bfd_boolean 4348 info_hash_lookup_funcinfo (struct info_hash_table *hash_table, 4349 asymbol *sym, 4350 bfd_vma addr, 4351 const char **filename_ptr, 4352 unsigned int *linenumber_ptr) 4353 { 4354 struct funcinfo* each_func; 4355 struct funcinfo* best_fit = NULL; 4356 bfd_vma best_fit_len = 0; 4357 struct info_list_node *node; 4358 struct arange *arange; 4359 const char *name = bfd_asymbol_name (sym); 4360 asection *sec = bfd_asymbol_section (sym); 4361 4362 for (node = lookup_info_hash_table (hash_table, name); 4363 node; 4364 node = node->next) 4365 { 4366 each_func = (struct funcinfo *) node->info; 4367 for (arange = &each_func->arange; 4368 arange; 4369 arange = arange->next) 4370 { 4371 if ((!each_func->sec || each_func->sec == sec) 4372 && addr >= arange->low 4373 && addr < arange->high 4374 && (!best_fit 4375 || arange->high - arange->low < best_fit_len)) 4376 { 4377 best_fit = each_func; 4378 best_fit_len = arange->high - arange->low; 4379 } 4380 } 4381 } 4382 4383 if (best_fit) 4384 { 4385 best_fit->sec = sec; 4386 *filename_ptr = best_fit->file; 4387 *linenumber_ptr = best_fit->line; 4388 return TRUE; 4389 } 4390 4391 return FALSE; 4392 } 4393 4394 /* Look up a varinfo by name using the given info hash table. If found, 4395 also update the locations pointed to by filename_ptr and linenumber_ptr. 4396 4397 This function returns TRUE if a varinfo that matches the given symbol 4398 and address is found with any error; otherwise it returns FALSE. */ 4399 4400 static bfd_boolean 4401 info_hash_lookup_varinfo (struct info_hash_table *hash_table, 4402 asymbol *sym, 4403 bfd_vma addr, 4404 const char **filename_ptr, 4405 unsigned int *linenumber_ptr) 4406 { 4407 const char *name = bfd_asymbol_name (sym); 4408 asection *sec = bfd_asymbol_section (sym); 4409 struct varinfo* each; 4410 struct info_list_node *node; 4411 4412 for (node = lookup_info_hash_table (hash_table, name); 4413 node; 4414 node = node->next) 4415 { 4416 each = (struct varinfo *) node->info; 4417 if (each->addr == addr 4418 && (!each->sec || each->sec == sec)) 4419 { 4420 each->sec = sec; 4421 *filename_ptr = each->file; 4422 *linenumber_ptr = each->line; 4423 return TRUE; 4424 } 4425 } 4426 4427 return FALSE; 4428 } 4429 4430 /* Update the funcinfo and varinfo info hash tables if they are 4431 not up to date. Returns TRUE if there is no error; otherwise 4432 returns FALSE and disable the info hash tables. */ 4433 4434 static bfd_boolean 4435 stash_maybe_update_info_hash_tables (struct dwarf2_debug *stash) 4436 { 4437 struct comp_unit *each; 4438 4439 /* Exit if hash tables are up-to-date. */ 4440 if (stash->f.all_comp_units == stash->hash_units_head) 4441 return TRUE; 4442 4443 if (stash->hash_units_head) 4444 each = stash->hash_units_head->prev_unit; 4445 else 4446 each = stash->f.last_comp_unit; 4447 4448 while (each) 4449 { 4450 if (!comp_unit_hash_info (stash, each, stash->funcinfo_hash_table, 4451 stash->varinfo_hash_table)) 4452 { 4453 stash->info_hash_status = STASH_INFO_HASH_DISABLED; 4454 return FALSE; 4455 } 4456 each = each->prev_unit; 4457 } 4458 4459 stash->hash_units_head = stash->f.all_comp_units; 4460 return TRUE; 4461 } 4462 4463 /* Check consistency of info hash tables. This is for debugging only. */ 4464 4465 static void ATTRIBUTE_UNUSED 4466 stash_verify_info_hash_table (struct dwarf2_debug *stash) 4467 { 4468 struct comp_unit *each_unit; 4469 struct funcinfo *each_func; 4470 struct varinfo *each_var; 4471 struct info_list_node *node; 4472 bfd_boolean found; 4473 4474 for (each_unit = stash->f.all_comp_units; 4475 each_unit; 4476 each_unit = each_unit->next_unit) 4477 { 4478 for (each_func = each_unit->function_table; 4479 each_func; 4480 each_func = each_func->prev_func) 4481 { 4482 if (!each_func->name) 4483 continue; 4484 node = lookup_info_hash_table (stash->funcinfo_hash_table, 4485 each_func->name); 4486 BFD_ASSERT (node); 4487 found = FALSE; 4488 while (node && !found) 4489 { 4490 found = node->info == each_func; 4491 node = node->next; 4492 } 4493 BFD_ASSERT (found); 4494 } 4495 4496 for (each_var = each_unit->variable_table; 4497 each_var; 4498 each_var = each_var->prev_var) 4499 { 4500 if (!each_var->name || !each_var->file || each_var->stack) 4501 continue; 4502 node = lookup_info_hash_table (stash->varinfo_hash_table, 4503 each_var->name); 4504 BFD_ASSERT (node); 4505 found = FALSE; 4506 while (node && !found) 4507 { 4508 found = node->info == each_var; 4509 node = node->next; 4510 } 4511 BFD_ASSERT (found); 4512 } 4513 } 4514 } 4515 4516 /* Check to see if we want to enable the info hash tables, which consume 4517 quite a bit of memory. Currently we only check the number times 4518 bfd_dwarf2_find_line is called. In the future, we may also want to 4519 take the number of symbols into account. */ 4520 4521 static void 4522 stash_maybe_enable_info_hash_tables (bfd *abfd, struct dwarf2_debug *stash) 4523 { 4524 BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_OFF); 4525 4526 if (stash->info_hash_count++ < STASH_INFO_HASH_TRIGGER) 4527 return; 4528 4529 /* FIXME: Maybe we should check the reduce_memory_overheads 4530 and optimize fields in the bfd_link_info structure ? */ 4531 4532 /* Create hash tables. */ 4533 stash->funcinfo_hash_table = create_info_hash_table (abfd); 4534 stash->varinfo_hash_table = create_info_hash_table (abfd); 4535 if (!stash->funcinfo_hash_table || !stash->varinfo_hash_table) 4536 { 4537 /* Turn off info hashes if any allocation above fails. */ 4538 stash->info_hash_status = STASH_INFO_HASH_DISABLED; 4539 return; 4540 } 4541 /* We need a forced update so that the info hash tables will 4542 be created even though there is no compilation unit. That 4543 happens if STASH_INFO_HASH_TRIGGER is 0. */ 4544 if (stash_maybe_update_info_hash_tables (stash)) 4545 stash->info_hash_status = STASH_INFO_HASH_ON; 4546 } 4547 4548 /* Find the file and line associated with a symbol and address using the 4549 info hash tables of a stash. If there is a match, the function returns 4550 TRUE and update the locations pointed to by filename_ptr and linenumber_ptr; 4551 otherwise it returns FALSE. */ 4552 4553 static bfd_boolean 4554 stash_find_line_fast (struct dwarf2_debug *stash, 4555 asymbol *sym, 4556 bfd_vma addr, 4557 const char **filename_ptr, 4558 unsigned int *linenumber_ptr) 4559 { 4560 BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_ON); 4561 4562 if (sym->flags & BSF_FUNCTION) 4563 return info_hash_lookup_funcinfo (stash->funcinfo_hash_table, sym, addr, 4564 filename_ptr, linenumber_ptr); 4565 return info_hash_lookup_varinfo (stash->varinfo_hash_table, sym, addr, 4566 filename_ptr, linenumber_ptr); 4567 } 4568 4569 /* Save current section VMAs. */ 4570 4571 static bfd_boolean 4572 save_section_vma (const bfd *abfd, struct dwarf2_debug *stash) 4573 { 4574 asection *s; 4575 unsigned int i; 4576 4577 if (abfd->section_count == 0) 4578 return TRUE; 4579 stash->sec_vma = bfd_malloc (sizeof (*stash->sec_vma) * abfd->section_count); 4580 if (stash->sec_vma == NULL) 4581 return FALSE; 4582 stash->sec_vma_count = abfd->section_count; 4583 for (i = 0, s = abfd->sections; 4584 s != NULL && i < abfd->section_count; 4585 i++, s = s->next) 4586 { 4587 if (s->output_section != NULL) 4588 stash->sec_vma[i] = s->output_section->vma + s->output_offset; 4589 else 4590 stash->sec_vma[i] = s->vma; 4591 } 4592 return TRUE; 4593 } 4594 4595 /* Compare current section VMAs against those at the time the stash 4596 was created. If find_nearest_line is used in linker warnings or 4597 errors early in the link process, the debug info stash will be 4598 invalid for later calls. This is because we relocate debug info 4599 sections, so the stashed section contents depend on symbol values, 4600 which in turn depend on section VMAs. */ 4601 4602 static bfd_boolean 4603 section_vma_same (const bfd *abfd, const struct dwarf2_debug *stash) 4604 { 4605 asection *s; 4606 unsigned int i; 4607 4608 /* PR 24334: If the number of sections in ABFD has changed between 4609 when the stash was created and now, then we cannot trust the 4610 stashed vma information. */ 4611 if (abfd->section_count != stash->sec_vma_count) 4612 return FALSE; 4613 4614 for (i = 0, s = abfd->sections; 4615 s != NULL && i < abfd->section_count; 4616 i++, s = s->next) 4617 { 4618 bfd_vma vma; 4619 4620 if (s->output_section != NULL) 4621 vma = s->output_section->vma + s->output_offset; 4622 else 4623 vma = s->vma; 4624 if (vma != stash->sec_vma[i]) 4625 return FALSE; 4626 } 4627 return TRUE; 4628 } 4629 4630 /* Read debug information from DEBUG_BFD when DEBUG_BFD is specified. 4631 If DEBUG_BFD is not specified, we read debug information from ABFD 4632 or its gnu_debuglink. The results will be stored in PINFO. 4633 The function returns TRUE iff debug information is ready. */ 4634 4635 bfd_boolean 4636 _bfd_dwarf2_slurp_debug_info (bfd *abfd, bfd *debug_bfd, 4637 const struct dwarf_debug_section *debug_sections, 4638 asymbol **symbols, 4639 void **pinfo, 4640 bfd_boolean do_place) 4641 { 4642 size_t amt = sizeof (struct dwarf2_debug); 4643 bfd_size_type total_size; 4644 asection *msec; 4645 struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo; 4646 4647 if (stash != NULL) 4648 { 4649 if (stash->orig_bfd == abfd 4650 && section_vma_same (abfd, stash)) 4651 { 4652 /* Check that we did previously find some debug information 4653 before attempting to make use of it. */ 4654 if (stash->f.bfd_ptr != NULL) 4655 { 4656 if (do_place && !place_sections (abfd, stash)) 4657 return FALSE; 4658 return TRUE; 4659 } 4660 4661 return FALSE; 4662 } 4663 _bfd_dwarf2_cleanup_debug_info (abfd, pinfo); 4664 memset (stash, 0, amt); 4665 } 4666 else 4667 { 4668 stash = (struct dwarf2_debug *) bfd_zalloc (abfd, amt); 4669 if (! stash) 4670 return FALSE; 4671 } 4672 stash->orig_bfd = abfd; 4673 stash->debug_sections = debug_sections; 4674 stash->f.syms = symbols; 4675 if (!save_section_vma (abfd, stash)) 4676 return FALSE; 4677 4678 stash->f.abbrev_offsets = htab_create_alloc (10, hash_abbrev, eq_abbrev, 4679 del_abbrev, calloc, free); 4680 if (!stash->f.abbrev_offsets) 4681 return FALSE; 4682 4683 stash->alt.abbrev_offsets = htab_create_alloc (10, hash_abbrev, eq_abbrev, 4684 del_abbrev, calloc, free); 4685 if (!stash->alt.abbrev_offsets) 4686 return FALSE; 4687 4688 *pinfo = stash; 4689 4690 if (debug_bfd == NULL) 4691 debug_bfd = abfd; 4692 4693 msec = find_debug_info (debug_bfd, debug_sections, NULL); 4694 if (msec == NULL && abfd == debug_bfd) 4695 { 4696 char * debug_filename; 4697 4698 debug_filename = bfd_follow_build_id_debuglink (abfd, DEBUGDIR); 4699 if (debug_filename == NULL) 4700 debug_filename = bfd_follow_gnu_debuglink (abfd, DEBUGDIR); 4701 4702 if (debug_filename == NULL) 4703 /* No dwarf2 info, and no gnu_debuglink to follow. 4704 Note that at this point the stash has been allocated, but 4705 contains zeros. This lets future calls to this function 4706 fail more quickly. */ 4707 return FALSE; 4708 4709 debug_bfd = bfd_openr (debug_filename, NULL); 4710 free (debug_filename); 4711 if (debug_bfd == NULL) 4712 /* FIXME: Should we report our failure to follow the debuglink ? */ 4713 return FALSE; 4714 4715 /* Set BFD_DECOMPRESS to decompress debug sections. */ 4716 debug_bfd->flags |= BFD_DECOMPRESS; 4717 if (!bfd_check_format (debug_bfd, bfd_object) 4718 || (msec = find_debug_info (debug_bfd, 4719 debug_sections, NULL)) == NULL 4720 || !bfd_generic_link_read_symbols (debug_bfd)) 4721 { 4722 bfd_close (debug_bfd); 4723 return FALSE; 4724 } 4725 4726 symbols = bfd_get_outsymbols (debug_bfd); 4727 stash->f.syms = symbols; 4728 stash->close_on_cleanup = TRUE; 4729 } 4730 stash->f.bfd_ptr = debug_bfd; 4731 4732 if (do_place 4733 && !place_sections (abfd, stash)) 4734 return FALSE; 4735 4736 /* There can be more than one DWARF2 info section in a BFD these 4737 days. First handle the easy case when there's only one. If 4738 there's more than one, try case two: none of the sections is 4739 compressed. In that case, read them all in and produce one 4740 large stash. We do this in two passes - in the first pass we 4741 just accumulate the section sizes, and in the second pass we 4742 read in the section's contents. (The allows us to avoid 4743 reallocing the data as we add sections to the stash.) If 4744 some or all sections are compressed, then do things the slow 4745 way, with a bunch of reallocs. */ 4746 4747 if (! find_debug_info (debug_bfd, debug_sections, msec)) 4748 { 4749 /* Case 1: only one info section. */ 4750 total_size = msec->size; 4751 if (! read_section (debug_bfd, &stash->debug_sections[debug_info], 4752 symbols, 0, 4753 &stash->f.dwarf_info_buffer, &total_size)) 4754 return FALSE; 4755 } 4756 else 4757 { 4758 /* Case 2: multiple sections. */ 4759 for (total_size = 0; 4760 msec; 4761 msec = find_debug_info (debug_bfd, debug_sections, msec)) 4762 { 4763 /* Catch PR25070 testcase overflowing size calculation here. */ 4764 if (total_size + msec->size < total_size 4765 || total_size + msec->size < msec->size) 4766 { 4767 bfd_set_error (bfd_error_no_memory); 4768 return FALSE; 4769 } 4770 total_size += msec->size; 4771 } 4772 4773 stash->f.dwarf_info_buffer = (bfd_byte *) bfd_malloc (total_size); 4774 if (stash->f.dwarf_info_buffer == NULL) 4775 return FALSE; 4776 4777 total_size = 0; 4778 for (msec = find_debug_info (debug_bfd, debug_sections, NULL); 4779 msec; 4780 msec = find_debug_info (debug_bfd, debug_sections, msec)) 4781 { 4782 bfd_size_type size; 4783 4784 size = msec->size; 4785 if (size == 0) 4786 continue; 4787 4788 if (!(bfd_simple_get_relocated_section_contents 4789 (debug_bfd, msec, stash->f.dwarf_info_buffer + total_size, 4790 symbols))) 4791 return FALSE; 4792 4793 total_size += size; 4794 } 4795 } 4796 4797 stash->f.info_ptr = stash->f.dwarf_info_buffer; 4798 stash->f.dwarf_info_size = total_size; 4799 return TRUE; 4800 } 4801 4802 /* Parse the next DWARF2 compilation unit at FILE->INFO_PTR. */ 4803 4804 static struct comp_unit * 4805 stash_comp_unit (struct dwarf2_debug *stash, struct dwarf2_debug_file *file) 4806 { 4807 bfd_size_type length; 4808 unsigned int offset_size; 4809 bfd_byte *info_ptr_unit = file->info_ptr; 4810 bfd_byte *info_ptr_end = file->dwarf_info_buffer + file->dwarf_info_size; 4811 4812 if (file->info_ptr >= info_ptr_end) 4813 return NULL; 4814 4815 length = read_4_bytes (file->bfd_ptr, file->info_ptr, info_ptr_end); 4816 /* A 0xffffff length is the DWARF3 way of indicating 4817 we use 64-bit offsets, instead of 32-bit offsets. */ 4818 if (length == 0xffffffff) 4819 { 4820 offset_size = 8; 4821 length = read_8_bytes (file->bfd_ptr, file->info_ptr + 4, 4822 info_ptr_end); 4823 file->info_ptr += 12; 4824 } 4825 /* A zero length is the IRIX way of indicating 64-bit offsets, 4826 mostly because the 64-bit length will generally fit in 32 4827 bits, and the endianness helps. */ 4828 else if (length == 0) 4829 { 4830 offset_size = 8; 4831 length = read_4_bytes (file->bfd_ptr, file->info_ptr + 4, 4832 info_ptr_end); 4833 file->info_ptr += 8; 4834 } 4835 /* In the absence of the hints above, we assume 32-bit DWARF2 4836 offsets even for targets with 64-bit addresses, because: 4837 a) most of the time these targets will not have generated 4838 more than 2Gb of debug info and so will not need 64-bit 4839 offsets, 4840 and 4841 b) if they do use 64-bit offsets but they are not using 4842 the size hints that are tested for above then they are 4843 not conforming to the DWARF3 standard anyway. */ 4844 else 4845 { 4846 offset_size = 4; 4847 file->info_ptr += 4; 4848 } 4849 4850 if (length != 0 4851 && file->info_ptr + length <= info_ptr_end 4852 && file->info_ptr + length > file->info_ptr) 4853 { 4854 struct comp_unit *each = parse_comp_unit (stash, file, 4855 file->info_ptr, length, 4856 info_ptr_unit, offset_size); 4857 if (each) 4858 { 4859 if (file->all_comp_units) 4860 file->all_comp_units->prev_unit = each; 4861 else 4862 file->last_comp_unit = each; 4863 4864 each->next_unit = file->all_comp_units; 4865 file->all_comp_units = each; 4866 4867 file->info_ptr += length; 4868 return each; 4869 } 4870 } 4871 4872 /* Don't trust any of the DWARF info after a corrupted length or 4873 parse error. */ 4874 file->info_ptr = info_ptr_end; 4875 return NULL; 4876 } 4877 4878 /* Hash function for an asymbol. */ 4879 4880 static hashval_t 4881 hash_asymbol (const void *sym) 4882 { 4883 const asymbol *asym = sym; 4884 return htab_hash_string (asym->name); 4885 } 4886 4887 /* Equality function for asymbols. */ 4888 4889 static int 4890 eq_asymbol (const void *a, const void *b) 4891 { 4892 const asymbol *sa = a; 4893 const asymbol *sb = b; 4894 return strcmp (sa->name, sb->name) == 0; 4895 } 4896 4897 /* Scan the debug information in PINFO looking for a DW_TAG_subprogram 4898 abbrev with a DW_AT_low_pc attached to it. Then lookup that same 4899 symbol in SYMBOLS and return the difference between the low_pc and 4900 the symbol's address. Returns 0 if no suitable symbol could be found. */ 4901 4902 bfd_signed_vma 4903 _bfd_dwarf2_find_symbol_bias (asymbol ** symbols, void ** pinfo) 4904 { 4905 struct dwarf2_debug *stash; 4906 struct comp_unit * unit; 4907 htab_t sym_hash; 4908 bfd_signed_vma result = 0; 4909 asymbol ** psym; 4910 4911 stash = (struct dwarf2_debug *) *pinfo; 4912 4913 if (stash == NULL || symbols == NULL) 4914 return 0; 4915 4916 sym_hash = htab_create_alloc (10, hash_asymbol, eq_asymbol, 4917 NULL, xcalloc, free); 4918 for (psym = symbols; * psym != NULL; psym++) 4919 { 4920 asymbol * sym = * psym; 4921 4922 if (sym->flags & BSF_FUNCTION && sym->section != NULL) 4923 { 4924 void **slot = htab_find_slot (sym_hash, sym, INSERT); 4925 *slot = sym; 4926 } 4927 } 4928 4929 for (unit = stash->f.all_comp_units; unit; unit = unit->next_unit) 4930 { 4931 struct funcinfo * func; 4932 4933 comp_unit_maybe_decode_line_info (unit); 4934 4935 for (func = unit->function_table; func != NULL; func = func->prev_func) 4936 if (func->name && func->arange.low) 4937 { 4938 asymbol search, *sym; 4939 4940 /* FIXME: Do we need to scan the aranges looking for the lowest pc value ? */ 4941 4942 search.name = func->name; 4943 sym = htab_find (sym_hash, &search); 4944 if (sym != NULL) 4945 { 4946 result = ((bfd_signed_vma) func->arange.low) - 4947 ((bfd_signed_vma) (sym->value + sym->section->vma)); 4948 goto done; 4949 } 4950 } 4951 } 4952 4953 done: 4954 htab_delete (sym_hash); 4955 return result; 4956 } 4957 4958 /* Find the source code location of SYMBOL. If SYMBOL is NULL 4959 then find the nearest source code location corresponding to 4960 the address SECTION + OFFSET. 4961 Returns 1 if the line is found without error and fills in 4962 FILENAME_PTR and LINENUMBER_PTR. In the case where SYMBOL was 4963 NULL the FUNCTIONNAME_PTR is also filled in. 4964 Returns 2 if partial information from _bfd_elf_find_function is 4965 returned (function and maybe file) by looking at symbols. DWARF2 4966 info is present but not regarding the requested code location. 4967 Returns 0 otherwise. 4968 SYMBOLS contains the symbol table for ABFD. 4969 DEBUG_SECTIONS contains the name of the dwarf debug sections. */ 4970 4971 int 4972 _bfd_dwarf2_find_nearest_line (bfd *abfd, 4973 asymbol **symbols, 4974 asymbol *symbol, 4975 asection *section, 4976 bfd_vma offset, 4977 const char **filename_ptr, 4978 const char **functionname_ptr, 4979 unsigned int *linenumber_ptr, 4980 unsigned int *discriminator_ptr, 4981 const struct dwarf_debug_section *debug_sections, 4982 void **pinfo) 4983 { 4984 /* Read each compilation unit from the section .debug_info, and check 4985 to see if it contains the address we are searching for. If yes, 4986 lookup the address, and return the line number info. If no, go 4987 on to the next compilation unit. 4988 4989 We keep a list of all the previously read compilation units, and 4990 a pointer to the next un-read compilation unit. Check the 4991 previously read units before reading more. */ 4992 struct dwarf2_debug *stash; 4993 /* What address are we looking for? */ 4994 bfd_vma addr; 4995 struct comp_unit* each; 4996 struct funcinfo *function = NULL; 4997 int found = FALSE; 4998 bfd_boolean do_line; 4999 5000 *filename_ptr = NULL; 5001 if (functionname_ptr != NULL) 5002 *functionname_ptr = NULL; 5003 *linenumber_ptr = 0; 5004 if (discriminator_ptr) 5005 *discriminator_ptr = 0; 5006 5007 if (! _bfd_dwarf2_slurp_debug_info (abfd, NULL, debug_sections, 5008 symbols, pinfo, 5009 (abfd->flags & (EXEC_P | DYNAMIC)) == 0)) 5010 return FALSE; 5011 5012 stash = (struct dwarf2_debug *) *pinfo; 5013 5014 do_line = symbol != NULL; 5015 if (do_line) 5016 { 5017 BFD_ASSERT (section == NULL && offset == 0 && functionname_ptr == NULL); 5018 section = bfd_asymbol_section (symbol); 5019 addr = symbol->value; 5020 } 5021 else 5022 { 5023 BFD_ASSERT (section != NULL && functionname_ptr != NULL); 5024 addr = offset; 5025 5026 /* If we have no SYMBOL but the section we're looking at is not a 5027 code section, then take a look through the list of symbols to see 5028 if we have a symbol at the address we're looking for. If we do 5029 then use this to look up line information. This will allow us to 5030 give file and line results for data symbols. We exclude code 5031 symbols here, if we look up a function symbol and then look up the 5032 line information we'll actually return the line number for the 5033 opening '{' rather than the function definition line. This is 5034 because looking up by symbol uses the line table, in which the 5035 first line for a function is usually the opening '{', while 5036 looking up the function by section + offset uses the 5037 DW_AT_decl_line from the function DW_TAG_subprogram for the line, 5038 which will be the line of the function name. */ 5039 if (symbols != NULL && (section->flags & SEC_CODE) == 0) 5040 { 5041 asymbol **tmp; 5042 5043 for (tmp = symbols; (*tmp) != NULL; ++tmp) 5044 if ((*tmp)->the_bfd == abfd 5045 && (*tmp)->section == section 5046 && (*tmp)->value == offset 5047 && ((*tmp)->flags & BSF_SECTION_SYM) == 0) 5048 { 5049 symbol = *tmp; 5050 do_line = TRUE; 5051 /* For local symbols, keep going in the hope we find a 5052 global. */ 5053 if ((symbol->flags & BSF_GLOBAL) != 0) 5054 break; 5055 } 5056 } 5057 } 5058 5059 if (section->output_section) 5060 addr += section->output_section->vma + section->output_offset; 5061 else 5062 addr += section->vma; 5063 5064 /* A null info_ptr indicates that there is no dwarf2 info 5065 (or that an error occured while setting up the stash). */ 5066 if (! stash->f.info_ptr) 5067 return FALSE; 5068 5069 stash->inliner_chain = NULL; 5070 5071 /* Check the previously read comp. units first. */ 5072 if (do_line) 5073 { 5074 /* The info hash tables use quite a bit of memory. We may not want to 5075 always use them. We use some heuristics to decide if and when to 5076 turn it on. */ 5077 if (stash->info_hash_status == STASH_INFO_HASH_OFF) 5078 stash_maybe_enable_info_hash_tables (abfd, stash); 5079 5080 /* Keep info hash table up to date if they are available. Note that we 5081 may disable the hash tables if there is any error duing update. */ 5082 if (stash->info_hash_status == STASH_INFO_HASH_ON) 5083 stash_maybe_update_info_hash_tables (stash); 5084 5085 if (stash->info_hash_status == STASH_INFO_HASH_ON) 5086 { 5087 found = stash_find_line_fast (stash, symbol, addr, filename_ptr, 5088 linenumber_ptr); 5089 if (found) 5090 goto done; 5091 } 5092 else 5093 { 5094 /* Check the previously read comp. units first. */ 5095 for (each = stash->f.all_comp_units; each; each = each->next_unit) 5096 if ((symbol->flags & BSF_FUNCTION) == 0 5097 || each->arange.high == 0 5098 || comp_unit_contains_address (each, addr)) 5099 { 5100 found = comp_unit_find_line (each, symbol, addr, filename_ptr, 5101 linenumber_ptr); 5102 if (found) 5103 goto done; 5104 } 5105 } 5106 } 5107 else 5108 { 5109 bfd_vma min_range = (bfd_vma) -1; 5110 const char * local_filename = NULL; 5111 struct funcinfo *local_function = NULL; 5112 unsigned int local_linenumber = 0; 5113 unsigned int local_discriminator = 0; 5114 5115 for (each = stash->f.all_comp_units; each; each = each->next_unit) 5116 { 5117 bfd_vma range = (bfd_vma) -1; 5118 5119 found = ((each->arange.high == 0 5120 || comp_unit_contains_address (each, addr)) 5121 && (range = (comp_unit_find_nearest_line 5122 (each, addr, &local_filename, 5123 &local_function, &local_linenumber, 5124 &local_discriminator))) != 0); 5125 if (found) 5126 { 5127 /* PRs 15935 15994: Bogus debug information may have provided us 5128 with an erroneous match. We attempt to counter this by 5129 selecting the match that has the smallest address range 5130 associated with it. (We are assuming that corrupt debug info 5131 will tend to result in extra large address ranges rather than 5132 extra small ranges). 5133 5134 This does mean that we scan through all of the CUs associated 5135 with the bfd each time this function is called. But this does 5136 have the benefit of producing consistent results every time the 5137 function is called. */ 5138 if (range <= min_range) 5139 { 5140 if (filename_ptr && local_filename) 5141 * filename_ptr = local_filename; 5142 if (local_function) 5143 function = local_function; 5144 if (discriminator_ptr && local_discriminator) 5145 * discriminator_ptr = local_discriminator; 5146 if (local_linenumber) 5147 * linenumber_ptr = local_linenumber; 5148 min_range = range; 5149 } 5150 } 5151 } 5152 5153 if (* linenumber_ptr) 5154 { 5155 found = TRUE; 5156 goto done; 5157 } 5158 } 5159 5160 /* Read each remaining comp. units checking each as they are read. */ 5161 while ((each = stash_comp_unit (stash, &stash->f)) != NULL) 5162 { 5163 /* DW_AT_low_pc and DW_AT_high_pc are optional for 5164 compilation units. If we don't have them (i.e., 5165 unit->high == 0), we need to consult the line info table 5166 to see if a compilation unit contains the given 5167 address. */ 5168 if (do_line) 5169 found = (((symbol->flags & BSF_FUNCTION) == 0 5170 || each->arange.high == 0 5171 || comp_unit_contains_address (each, addr)) 5172 && comp_unit_find_line (each, symbol, addr, 5173 filename_ptr, linenumber_ptr)); 5174 else 5175 found = ((each->arange.high == 0 5176 || comp_unit_contains_address (each, addr)) 5177 && comp_unit_find_nearest_line (each, addr, 5178 filename_ptr, 5179 &function, 5180 linenumber_ptr, 5181 discriminator_ptr) != 0); 5182 5183 if (found) 5184 break; 5185 } 5186 5187 done: 5188 if (functionname_ptr && function && function->is_linkage) 5189 *functionname_ptr = function->name; 5190 else if (functionname_ptr 5191 && (!*functionname_ptr 5192 || (function && !function->is_linkage))) 5193 { 5194 asymbol *fun; 5195 asymbol **syms = symbols; 5196 asection *sec = section; 5197 5198 _bfd_dwarf2_stash_syms (stash, abfd, &sec, &syms); 5199 fun = _bfd_elf_find_function (abfd, syms, sec, offset, 5200 *filename_ptr ? NULL : filename_ptr, 5201 functionname_ptr); 5202 5203 if (!found && fun != NULL) 5204 found = 2; 5205 5206 if (function && !function->is_linkage) 5207 { 5208 bfd_vma sec_vma; 5209 5210 sec_vma = section->vma; 5211 if (section->output_section != NULL) 5212 sec_vma = section->output_section->vma + section->output_offset; 5213 if (fun != NULL 5214 && fun->value + sec_vma == function->arange.low) 5215 function->name = *functionname_ptr; 5216 /* Even if we didn't find a linkage name, say that we have 5217 to stop a repeated search of symbols. */ 5218 function->is_linkage = TRUE; 5219 } 5220 } 5221 5222 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0) 5223 unset_sections (stash); 5224 5225 return found; 5226 } 5227 5228 bfd_boolean 5229 _bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED, 5230 const char **filename_ptr, 5231 const char **functionname_ptr, 5232 unsigned int *linenumber_ptr, 5233 void **pinfo) 5234 { 5235 struct dwarf2_debug *stash; 5236 5237 stash = (struct dwarf2_debug *) *pinfo; 5238 if (stash) 5239 { 5240 struct funcinfo *func = stash->inliner_chain; 5241 5242 if (func && func->caller_func) 5243 { 5244 *filename_ptr = func->caller_file; 5245 *functionname_ptr = func->caller_func->name; 5246 *linenumber_ptr = func->caller_line; 5247 stash->inliner_chain = func->caller_func; 5248 return TRUE; 5249 } 5250 } 5251 5252 return FALSE; 5253 } 5254 5255 void 5256 _bfd_dwarf2_cleanup_debug_info (bfd *abfd, void **pinfo) 5257 { 5258 struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo; 5259 struct comp_unit *each; 5260 struct dwarf2_debug_file *file; 5261 5262 if (abfd == NULL || stash == NULL) 5263 return; 5264 5265 if (stash->varinfo_hash_table) 5266 bfd_hash_table_free (&stash->varinfo_hash_table->base); 5267 if (stash->funcinfo_hash_table) 5268 bfd_hash_table_free (&stash->funcinfo_hash_table->base); 5269 5270 file = &stash->f; 5271 while (1) 5272 { 5273 for (each = file->all_comp_units; each; each = each->next_unit) 5274 { 5275 struct funcinfo *function_table = each->function_table; 5276 struct varinfo *variable_table = each->variable_table; 5277 5278 if (each->line_table && each->line_table != file->line_table) 5279 { 5280 free (each->line_table->files); 5281 free (each->line_table->dirs); 5282 } 5283 5284 free (each->lookup_funcinfo_table); 5285 each->lookup_funcinfo_table = NULL; 5286 5287 while (function_table) 5288 { 5289 free (function_table->file); 5290 function_table->file = NULL; 5291 free (function_table->caller_file); 5292 function_table->caller_file = NULL; 5293 function_table = function_table->prev_func; 5294 } 5295 5296 while (variable_table) 5297 { 5298 free (variable_table->file); 5299 variable_table->file = NULL; 5300 variable_table = variable_table->prev_var; 5301 } 5302 } 5303 5304 if (file->line_table) 5305 { 5306 free (file->line_table->files); 5307 free (file->line_table->dirs); 5308 } 5309 htab_delete (file->abbrev_offsets); 5310 5311 free (file->dwarf_line_str_buffer); 5312 free (file->dwarf_str_buffer); 5313 free (file->dwarf_ranges_buffer); 5314 free (file->dwarf_line_buffer); 5315 free (file->dwarf_abbrev_buffer); 5316 free (file->dwarf_info_buffer); 5317 if (file == &stash->alt) 5318 break; 5319 file = &stash->alt; 5320 } 5321 free (stash->sec_vma); 5322 free (stash->adjusted_sections); 5323 if (stash->close_on_cleanup) 5324 bfd_close (stash->f.bfd_ptr); 5325 if (stash->alt.bfd_ptr) 5326 bfd_close (stash->alt.bfd_ptr); 5327 } 5328 5329 /* Find the function to a particular section and offset, 5330 for error reporting. */ 5331 5332 asymbol * 5333 _bfd_elf_find_function (bfd *abfd, 5334 asymbol **symbols, 5335 asection *section, 5336 bfd_vma offset, 5337 const char **filename_ptr, 5338 const char **functionname_ptr) 5339 { 5340 struct elf_find_function_cache 5341 { 5342 asection *last_section; 5343 asymbol *func; 5344 const char *filename; 5345 bfd_size_type func_size; 5346 } *cache; 5347 5348 if (symbols == NULL) 5349 return NULL; 5350 5351 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour) 5352 return NULL; 5353 5354 cache = elf_tdata (abfd)->elf_find_function_cache; 5355 if (cache == NULL) 5356 { 5357 cache = bfd_zalloc (abfd, sizeof (*cache)); 5358 elf_tdata (abfd)->elf_find_function_cache = cache; 5359 if (cache == NULL) 5360 return NULL; 5361 } 5362 if (cache->last_section != section 5363 || cache->func == NULL 5364 || offset < cache->func->value 5365 || offset >= cache->func->value + cache->func_size) 5366 { 5367 asymbol *file; 5368 bfd_vma low_func; 5369 asymbol **p; 5370 /* ??? Given multiple file symbols, it is impossible to reliably 5371 choose the right file name for global symbols. File symbols are 5372 local symbols, and thus all file symbols must sort before any 5373 global symbols. The ELF spec may be interpreted to say that a 5374 file symbol must sort before other local symbols, but currently 5375 ld -r doesn't do this. So, for ld -r output, it is possible to 5376 make a better choice of file name for local symbols by ignoring 5377 file symbols appearing after a given local symbol. */ 5378 enum { nothing_seen, symbol_seen, file_after_symbol_seen } state; 5379 const struct elf_backend_data *bed = get_elf_backend_data (abfd); 5380 5381 file = NULL; 5382 low_func = 0; 5383 state = nothing_seen; 5384 cache->filename = NULL; 5385 cache->func = NULL; 5386 cache->func_size = 0; 5387 cache->last_section = section; 5388 5389 for (p = symbols; *p != NULL; p++) 5390 { 5391 asymbol *sym = *p; 5392 bfd_vma code_off; 5393 bfd_size_type size; 5394 5395 if ((sym->flags & BSF_FILE) != 0) 5396 { 5397 file = sym; 5398 if (state == symbol_seen) 5399 state = file_after_symbol_seen; 5400 continue; 5401 } 5402 5403 size = bed->maybe_function_sym (sym, section, &code_off); 5404 if (size != 0 5405 && code_off <= offset 5406 && (code_off > low_func 5407 || (code_off == low_func 5408 && size > cache->func_size))) 5409 { 5410 cache->func = sym; 5411 cache->func_size = size; 5412 cache->filename = NULL; 5413 low_func = code_off; 5414 if (file != NULL 5415 && ((sym->flags & BSF_LOCAL) != 0 5416 || state != file_after_symbol_seen)) 5417 cache->filename = bfd_asymbol_name (file); 5418 } 5419 if (state == nothing_seen) 5420 state = symbol_seen; 5421 } 5422 } 5423 5424 if (cache->func == NULL) 5425 return NULL; 5426 5427 if (filename_ptr) 5428 *filename_ptr = cache->filename; 5429 if (functionname_ptr) 5430 *functionname_ptr = bfd_asymbol_name (cache->func); 5431 5432 return cache->func; 5433 } 5434