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