RISC-V: test for expected / no unexpected symbols
[binutils-gdb.git] / bfd / dwarf2.c
blobb135ef091209552bd595b0e606a213fc25162231
1 /* DWARF 2 support.
2 Copyright (C) 1994-2023 Free Software Foundation, Inc.
4 Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
5 (gavin@cygnus.com).
7 From the dwarf2read.c header:
8 Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
9 Inc. with support from Florida State University (under contract
10 with the Ada Joint Program Office), and Silicon Graphics, Inc.
11 Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
12 based on Fred Fish's (Cygnus Support) implementation of DWARF 1
13 support in dwarfread.c
15 This file is part of BFD.
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.
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.
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. */
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"
42 /* The data in the .debug_line statement prologue looks like this. */
44 struct line_head
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;
58 /* Attributes have a name and a value. */
60 struct attribute
62 enum dwarf_attribute name;
63 enum dwarf_form form;
64 union
66 char *str;
67 struct dwarf_block *blk;
68 uint64_t val;
69 int64_t sval;
74 /* Blocks are a bunch of untyped bytes. */
75 struct dwarf_block
77 unsigned int size;
78 bfd_byte *data;
81 struct adjusted_section
83 asection *section;
84 bfd_vma adj_vma;
85 bfd_vma orig_vma;
88 /* A trie to map quickly from address range to compilation unit.
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.
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.
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.
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.
122 #define TRIE_LEAF_SIZE 16
124 /* All trie_node pointers will really be trie_leaf or trie_interior,
125 but they have this common head. */
126 struct trie_node
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;
133 struct trie_leaf
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[];
143 struct trie_interior
145 struct trie_node head;
146 struct trie_node *children[256];
149 static struct trie_node *alloc_trie_leaf (bfd *abfd)
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;
160 struct addr_range
162 bfd_byte *start;
163 bfd_byte *end;
166 /* Return true if address range do intersect. */
168 static bool
169 addr_range_intersects (struct addr_range *r1, struct addr_range *r2)
171 return (r1->start <= r2->start && r2->start < r1->end)
172 || (r1->start <= (r2->end - 1) && (r2->end - 1) < r1->end);
175 /* Compare function for splay tree of addr_ranges. */
177 static int
178 splay_tree_compare_addr_range (splay_tree_key xa, splay_tree_key xb)
180 struct addr_range *r1 = (struct addr_range *) xa;
181 struct addr_range *r2 = (struct addr_range *) xb;
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;
191 /* Splay tree release function for keys (addr_range). */
193 static void
194 splay_tree_free_addr_range (splay_tree_key key)
196 free ((struct addr_range *)key);
199 struct dwarf2_debug_file
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;
205 /* Pointer to the symbol table. */
206 asymbol **syms;
208 /* The current info pointer for the .debug_info section being parsed. */
209 bfd_byte *info_ptr;
211 /* A pointer to the memory block allocated for .debug_info sections. */
212 bfd_byte *dwarf_info_buffer;
214 /* Length of the loaded .debug_info sections. */
215 bfd_size_type dwarf_info_size;
217 /* Pointer to the .debug_abbrev section loaded into memory. */
218 bfd_byte *dwarf_abbrev_buffer;
220 /* Length of the loaded .debug_abbrev section. */
221 bfd_size_type dwarf_abbrev_size;
223 /* Buffer for decode_line_info. */
224 bfd_byte *dwarf_line_buffer;
226 /* Length of the loaded .debug_line section. */
227 bfd_size_type dwarf_line_size;
229 /* Pointer to the .debug_str section loaded into memory. */
230 bfd_byte *dwarf_str_buffer;
232 /* Length of the loaded .debug_str section. */
233 bfd_size_type dwarf_str_size;
235 /* Pointer to the .debug_str_offsets section loaded into memory. */
236 bfd_byte *dwarf_str_offsets_buffer;
238 /* Length of the loaded .debug_str_offsets section. */
239 bfd_size_type dwarf_str_offsets_size;
241 /* Pointer to the .debug_addr section loaded into memory. */
242 bfd_byte *dwarf_addr_buffer;
244 /* Length of the loaded .debug_addr section. */
245 bfd_size_type dwarf_addr_size;
247 /* Pointer to the .debug_line_str section loaded into memory. */
248 bfd_byte *dwarf_line_str_buffer;
250 /* Length of the loaded .debug_line_str section. */
251 bfd_size_type dwarf_line_str_size;
253 /* Pointer to the .debug_ranges section loaded into memory. */
254 bfd_byte *dwarf_ranges_buffer;
256 /* Length of the loaded .debug_ranges section. */
257 bfd_size_type dwarf_ranges_size;
259 /* Pointer to the .debug_rnglists section loaded into memory. */
260 bfd_byte *dwarf_rnglists_buffer;
262 /* Length of the loaded .debug_rnglists section. */
263 bfd_size_type dwarf_rnglists_size;
265 /* A list of all previously read comp_units. */
266 struct comp_unit *all_comp_units;
268 /* A list of all previously read comp_units with no ranges (yet). */
269 struct comp_unit *all_comp_units_without_ranges;
271 /* Last comp unit in list above. */
272 struct comp_unit *last_comp_unit;
274 /* Line table at line_offset zero. */
275 struct line_info_table *line_table;
277 /* Hash table to map offsets to decoded abbrevs. */
278 htab_t abbrev_offsets;
280 /* Root of a trie to map addresses to compilation units. */
281 struct trie_node *trie_root;
283 /* Splay tree to map info_ptr address to compilation units. */
284 splay_tree comp_unit_tree;
287 struct dwarf2_debug
289 /* Names of the debug sections. */
290 const struct dwarf_debug_section *debug_sections;
292 /* Per-file stuff. */
293 struct dwarf2_debug_file f, alt;
295 /* Pointer to the original bfd for which debug was loaded. This is what
296 we use to compare and so check that the cached debug data is still
297 valid - it saves having to possibly dereference the gnu_debuglink each
298 time. */
299 bfd *orig_bfd;
301 /* If the most recent call to bfd_find_nearest_line was given an
302 address in an inlined function, preserve a pointer into the
303 calling chain for subsequent calls to bfd_find_inliner_info to
304 use. */
305 struct funcinfo *inliner_chain;
307 /* Section VMAs at the time the stash was built. */
308 bfd_vma *sec_vma;
309 /* Number of sections in the SEC_VMA table. */
310 unsigned int sec_vma_count;
312 /* Number of sections whose VMA we must adjust. */
313 int adjusted_section_count;
315 /* Array of sections with adjusted VMA. */
316 struct adjusted_section *adjusted_sections;
318 /* Number of times find_line is called. This is used in
319 the heuristic for enabling the info hash tables. */
320 int info_hash_count;
322 #define STASH_INFO_HASH_TRIGGER 100
324 /* Hash table mapping symbol names to function infos. */
325 struct info_hash_table *funcinfo_hash_table;
327 /* Hash table mapping symbol names to variable infos. */
328 struct info_hash_table *varinfo_hash_table;
330 /* Head of comp_unit list in the last hash table update. */
331 struct comp_unit *hash_units_head;
333 /* Status of info hash. */
334 int info_hash_status;
335 #define STASH_INFO_HASH_OFF 0
336 #define STASH_INFO_HASH_ON 1
337 #define STASH_INFO_HASH_DISABLED 2
339 /* True if we opened bfd_ptr. */
340 bool close_on_cleanup;
343 struct arange
345 struct arange *next;
346 bfd_vma low;
347 bfd_vma high;
350 /* A minimal decoding of DWARF2 compilation units. We only decode
351 what's needed to get to the line number information. */
353 struct comp_unit
355 /* Chain the previously read compilation units. */
356 struct comp_unit *next_unit;
358 /* Chain the previously read compilation units that have no ranges yet.
359 We scan these separately when we have a trie over the ranges.
360 Unused if arange.high != 0. */
361 struct comp_unit *next_unit_without_ranges;
363 /* Likewise, chain the compilation unit read after this one.
364 The comp units are stored in reversed reading order. */
365 struct comp_unit *prev_unit;
367 /* Keep the bfd convenient (for memory allocation). */
368 bfd *abfd;
370 /* The lowest and highest addresses contained in this compilation
371 unit as specified in the compilation unit header. */
372 struct arange arange;
374 /* The DW_AT_name attribute (for error messages). */
375 char *name;
377 /* The abbrev hash table. */
378 struct abbrev_info **abbrevs;
380 /* DW_AT_language. */
381 int lang;
383 /* Note that an error was found by comp_unit_find_nearest_line. */
384 int error;
386 /* The DW_AT_comp_dir attribute. */
387 char *comp_dir;
389 /* TRUE if there is a line number table associated with this comp. unit. */
390 int stmtlist;
392 /* Pointer to the current comp_unit so that we can find a given entry
393 by its reference. */
394 bfd_byte *info_ptr_unit;
396 /* The offset into .debug_line of the line number table. */
397 unsigned long line_offset;
399 /* Pointer to the first child die for the comp unit. */
400 bfd_byte *first_child_die_ptr;
402 /* The end of the comp unit. */
403 bfd_byte *end_ptr;
405 /* The decoded line number, NULL if not yet decoded. */
406 struct line_info_table *line_table;
408 /* A list of the functions found in this comp. unit. */
409 struct funcinfo *function_table;
411 /* A table of function information references searchable by address. */
412 struct lookup_funcinfo *lookup_funcinfo_table;
414 /* Number of functions in the function_table and sorted_function_table. */
415 bfd_size_type number_of_functions;
417 /* A list of the variables found in this comp. unit. */
418 struct varinfo *variable_table;
420 /* Pointers to dwarf2_debug structures. */
421 struct dwarf2_debug *stash;
422 struct dwarf2_debug_file *file;
424 /* DWARF format version for this unit - from unit header. */
425 int version;
427 /* Address size for this unit - from unit header. */
428 unsigned char addr_size;
430 /* Offset size for this unit - from unit header. */
431 unsigned char offset_size;
433 /* Base address for this unit - from DW_AT_low_pc attribute of
434 DW_TAG_compile_unit DIE */
435 bfd_vma base_address;
437 /* TRUE if symbols are cached in hash table for faster lookup by name. */
438 bool cached;
440 /* Used when iterating over trie leaves to know which units we have
441 already seen in this iteration. */
442 bool mark;
444 /* Base address of debug_addr section. */
445 size_t dwarf_addr_offset;
447 /* Base address of string offset table. */
448 size_t dwarf_str_offset;
451 /* This data structure holds the information of an abbrev. */
452 struct abbrev_info
454 unsigned int number; /* Number identifying abbrev. */
455 enum dwarf_tag tag; /* DWARF tag. */
456 bool has_children; /* TRUE if the abbrev has children. */
457 unsigned int num_attrs; /* Number of attributes. */
458 struct attr_abbrev * attrs; /* An array of attribute descriptions. */
459 struct abbrev_info * next; /* Next in chain. */
462 struct attr_abbrev
464 enum dwarf_attribute name;
465 enum dwarf_form form;
466 bfd_vma implicit_const;
469 /* Map of uncompressed DWARF debug section name to compressed one. It
470 is terminated by NULL uncompressed_name. */
472 const struct dwarf_debug_section dwarf_debug_sections[] =
474 { ".debug_abbrev", ".zdebug_abbrev" },
475 { ".debug_aranges", ".zdebug_aranges" },
476 { ".debug_frame", ".zdebug_frame" },
477 { ".debug_info", ".zdebug_info" },
478 { ".debug_info", ".zdebug_info" },
479 { ".debug_line", ".zdebug_line" },
480 { ".debug_loc", ".zdebug_loc" },
481 { ".debug_macinfo", ".zdebug_macinfo" },
482 { ".debug_macro", ".zdebug_macro" },
483 { ".debug_pubnames", ".zdebug_pubnames" },
484 { ".debug_pubtypes", ".zdebug_pubtypes" },
485 { ".debug_ranges", ".zdebug_ranges" },
486 { ".debug_rnglists", ".zdebug_rnglist" },
487 { ".debug_static_func", ".zdebug_static_func" },
488 { ".debug_static_vars", ".zdebug_static_vars" },
489 { ".debug_str", ".zdebug_str", },
490 { ".debug_str", ".zdebug_str", },
491 { ".debug_str_offsets", ".zdebug_str_offsets", },
492 { ".debug_addr", ".zdebug_addr", },
493 { ".debug_line_str", ".zdebug_line_str", },
494 { ".debug_types", ".zdebug_types" },
495 /* GNU DWARF 1 extensions */
496 { ".debug_sfnames", ".zdebug_sfnames" },
497 { ".debug_srcinfo", ".zebug_srcinfo" },
498 /* SGI/MIPS DWARF 2 extensions */
499 { ".debug_funcnames", ".zdebug_funcnames" },
500 { ".debug_typenames", ".zdebug_typenames" },
501 { ".debug_varnames", ".zdebug_varnames" },
502 { ".debug_weaknames", ".zdebug_weaknames" },
503 { NULL, NULL },
506 /* NB/ Numbers in this enum must match up with indices
507 into the dwarf_debug_sections[] array above. */
508 enum dwarf_debug_section_enum
510 debug_abbrev = 0,
511 debug_aranges,
512 debug_frame,
513 debug_info,
514 debug_info_alt,
515 debug_line,
516 debug_loc,
517 debug_macinfo,
518 debug_macro,
519 debug_pubnames,
520 debug_pubtypes,
521 debug_ranges,
522 debug_rnglists,
523 debug_static_func,
524 debug_static_vars,
525 debug_str,
526 debug_str_alt,
527 debug_str_offsets,
528 debug_addr,
529 debug_line_str,
530 debug_types,
531 debug_sfnames,
532 debug_srcinfo,
533 debug_funcnames,
534 debug_typenames,
535 debug_varnames,
536 debug_weaknames,
537 debug_max
540 /* A static assertion. */
541 extern int dwarf_debug_section_assert[ARRAY_SIZE (dwarf_debug_sections)
542 == debug_max + 1 ? 1 : -1];
544 #ifndef ABBREV_HASH_SIZE
545 #define ABBREV_HASH_SIZE 121
546 #endif
547 #ifndef ATTR_ALLOC_CHUNK
548 #define ATTR_ALLOC_CHUNK 4
549 #endif
551 /* Variable and function hash tables. This is used to speed up look-up
552 in lookup_symbol_in_var_table() and lookup_symbol_in_function_table().
553 In order to share code between variable and function infos, we use
554 a list of untyped pointer for all variable/function info associated with
555 a symbol. We waste a bit of memory for list with one node but that
556 simplifies the code. */
558 struct info_list_node
560 struct info_list_node *next;
561 void *info;
564 /* Info hash entry. */
565 struct info_hash_entry
567 struct bfd_hash_entry root;
568 struct info_list_node *head;
571 struct info_hash_table
573 struct bfd_hash_table base;
576 /* Function to create a new entry in info hash table. */
578 static struct bfd_hash_entry *
579 info_hash_table_newfunc (struct bfd_hash_entry *entry,
580 struct bfd_hash_table *table,
581 const char *string)
583 struct info_hash_entry *ret = (struct info_hash_entry *) entry;
585 /* Allocate the structure if it has not already been allocated by a
586 derived class. */
587 if (ret == NULL)
589 ret = (struct info_hash_entry *) bfd_hash_allocate (table,
590 sizeof (* ret));
591 if (ret == NULL)
592 return NULL;
595 /* Call the allocation method of the base class. */
596 ret = ((struct info_hash_entry *)
597 bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string));
599 /* Initialize the local fields here. */
600 if (ret)
601 ret->head = NULL;
603 return (struct bfd_hash_entry *) ret;
606 /* Function to create a new info hash table. It returns a pointer to the
607 newly created table or NULL if there is any error. We need abfd
608 solely for memory allocation. */
610 static struct info_hash_table *
611 create_info_hash_table (bfd *abfd)
613 struct info_hash_table *hash_table;
615 hash_table = ((struct info_hash_table *)
616 bfd_alloc (abfd, sizeof (struct info_hash_table)));
617 if (!hash_table)
618 return hash_table;
620 if (!bfd_hash_table_init (&hash_table->base, info_hash_table_newfunc,
621 sizeof (struct info_hash_entry)))
623 bfd_release (abfd, hash_table);
624 return NULL;
627 return hash_table;
630 /* Insert an info entry into an info hash table. We do not check of
631 duplicate entries. Also, the caller need to guarantee that the
632 right type of info in inserted as info is passed as a void* pointer.
633 This function returns true if there is no error. */
635 static bool
636 insert_info_hash_table (struct info_hash_table *hash_table,
637 const char *key,
638 void *info,
639 bool copy_p)
641 struct info_hash_entry *entry;
642 struct info_list_node *node;
644 entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base,
645 key, true, copy_p);
646 if (!entry)
647 return false;
649 node = (struct info_list_node *) bfd_hash_allocate (&hash_table->base,
650 sizeof (*node));
651 if (!node)
652 return false;
654 node->info = info;
655 node->next = entry->head;
656 entry->head = node;
658 return true;
661 /* Look up an info entry list from an info hash table. Return NULL
662 if there is none. */
664 static struct info_list_node *
665 lookup_info_hash_table (struct info_hash_table *hash_table, const char *key)
667 struct info_hash_entry *entry;
669 entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base, key,
670 false, false);
671 return entry ? entry->head : NULL;
674 /* Read a section into its appropriate place in the dwarf2_debug
675 struct (indicated by SECTION_BUFFER and SECTION_SIZE). If SYMS is
676 not NULL, use bfd_simple_get_relocated_section_contents to read the
677 section contents, otherwise use bfd_get_section_contents. Fail if
678 the located section does not contain at least OFFSET bytes. */
680 static bool
681 read_section (bfd *abfd,
682 const struct dwarf_debug_section *sec,
683 asymbol **syms,
684 uint64_t offset,
685 bfd_byte **section_buffer,
686 bfd_size_type *section_size)
688 const char *section_name = sec->uncompressed_name;
689 bfd_byte *contents = *section_buffer;
691 /* The section may have already been read. */
692 if (contents == NULL)
694 bfd_size_type amt;
695 asection *msec;
697 msec = bfd_get_section_by_name (abfd, section_name);
698 if (msec == NULL)
700 section_name = sec->compressed_name;
701 msec = bfd_get_section_by_name (abfd, section_name);
703 if (msec == NULL)
705 _bfd_error_handler (_("DWARF error: can't find %s section."),
706 sec->uncompressed_name);
707 bfd_set_error (bfd_error_bad_value);
708 return false;
711 if ((msec->flags & SEC_HAS_CONTENTS) == 0)
713 _bfd_error_handler (_("DWARF error: section %s has no contents"),
714 section_name);
715 bfd_set_error (bfd_error_no_contents);
716 return false;
719 if (_bfd_section_size_insane (abfd, msec))
721 /* PR 26946 */
722 _bfd_error_handler (_("DWARF error: section %s is too big"),
723 section_name);
724 return false;
726 amt = bfd_get_section_limit_octets (abfd, msec);
727 *section_size = amt;
728 /* Paranoia - alloc one extra so that we can make sure a string
729 section is NUL terminated. */
730 amt += 1;
731 if (amt == 0)
733 /* Paranoia - this should never happen. */
734 bfd_set_error (bfd_error_no_memory);
735 return false;
737 contents = (bfd_byte *) bfd_malloc (amt);
738 if (contents == NULL)
739 return false;
740 if (syms
741 ? !bfd_simple_get_relocated_section_contents (abfd, msec, contents,
742 syms)
743 : !bfd_get_section_contents (abfd, msec, contents, 0, *section_size))
745 free (contents);
746 return false;
748 contents[*section_size] = 0;
749 *section_buffer = contents;
752 /* It is possible to get a bad value for the offset into the section
753 that the client wants. Validate it here to avoid trouble later. */
754 if (offset != 0 && offset >= *section_size)
756 /* xgettext: c-format */
757 _bfd_error_handler (_("DWARF error: offset (%" PRIu64 ")"
758 " greater than or equal to %s size (%" PRIu64 ")"),
759 (uint64_t) offset, section_name,
760 (uint64_t) *section_size);
761 bfd_set_error (bfd_error_bad_value);
762 return false;
765 return true;
768 /* Read dwarf information from a buffer. */
770 static inline uint64_t
771 read_n_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end, int n)
773 bfd_byte *buf = *ptr;
774 if (end - buf < n)
776 *ptr = end;
777 return 0;
779 *ptr = buf + n;
780 return bfd_get (n * 8, abfd, buf);
783 static unsigned int
784 read_1_byte (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
786 return read_n_bytes (abfd, ptr, end, 1);
789 static int
790 read_1_signed_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte **ptr, bfd_byte *end)
792 bfd_byte *buf = *ptr;
793 if (end - buf < 1)
795 *ptr = end;
796 return 0;
798 *ptr = buf + 1;
799 return bfd_get_signed_8 (abfd, buf);
802 static unsigned int
803 read_2_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
805 return read_n_bytes (abfd, ptr, end, 2);
808 static unsigned int
809 read_3_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
811 unsigned int val = read_1_byte (abfd, ptr, end);
812 val <<= 8;
813 val |= read_1_byte (abfd, ptr, end);
814 val <<= 8;
815 val |= read_1_byte (abfd, ptr, end);
816 if (bfd_little_endian (abfd))
817 val = (((val >> 16) & 0xff)
818 | (val & 0xff00)
819 | ((val & 0xff) << 16));
820 return val;
823 static unsigned int
824 read_4_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
826 return read_n_bytes (abfd, ptr, end, 4);
829 static uint64_t
830 read_8_bytes (bfd *abfd, bfd_byte **ptr, bfd_byte *end)
832 return read_n_bytes (abfd, ptr, end, 8);
835 static struct dwarf_block *
836 read_blk (bfd *abfd, bfd_byte **ptr, bfd_byte *end, size_t size)
838 bfd_byte *buf = *ptr;
839 struct dwarf_block *block;
841 block = (struct dwarf_block *) bfd_alloc (abfd, sizeof (*block));
842 if (block == NULL)
843 return NULL;
845 if (size > (size_t) (end - buf))
847 *ptr = end;
848 block->data = NULL;
849 block->size = 0;
851 else
853 *ptr = buf + size;
854 block->data = buf;
855 block->size = size;
857 return block;
860 /* Scans a NUL terminated string starting at *PTR, returning a pointer to it.
861 Bytes at or beyond BUF_END will not be read. Returns NULL if the
862 terminator is not found or if the string is empty. *PTR is
863 incremented over the bytes scanned, including the terminator. */
865 static char *
866 read_string (bfd_byte **ptr,
867 bfd_byte *buf_end)
869 bfd_byte *buf = *ptr;
870 bfd_byte *str = buf;
872 while (buf < buf_end)
873 if (*buf++ == 0)
875 if (str == buf - 1)
876 break;
877 *ptr = buf;
878 return (char *) str;
881 *ptr = buf;
882 return NULL;
885 /* Reads an offset from *PTR and then locates the string at this offset
886 inside the debug string section. Returns a pointer to the string.
887 Increments *PTR by the number of bytes read for the offset. This
888 value is set even if the function fails. Bytes at or beyond
889 BUF_END will not be read. Returns NULL if there was a problem, or
890 if the string is empty. Does not check for NUL termination of the
891 string. */
893 static char *
894 read_indirect_string (struct comp_unit *unit,
895 bfd_byte **ptr,
896 bfd_byte *buf_end)
898 uint64_t offset;
899 struct dwarf2_debug *stash = unit->stash;
900 struct dwarf2_debug_file *file = unit->file;
901 char *str;
903 if (unit->offset_size > (size_t) (buf_end - *ptr))
905 *ptr = buf_end;
906 return NULL;
909 if (unit->offset_size == 4)
910 offset = read_4_bytes (unit->abfd, ptr, buf_end);
911 else
912 offset = read_8_bytes (unit->abfd, ptr, buf_end);
914 if (! read_section (unit->abfd, &stash->debug_sections[debug_str],
915 file->syms, offset,
916 &file->dwarf_str_buffer, &file->dwarf_str_size))
917 return NULL;
919 str = (char *) file->dwarf_str_buffer + offset;
920 if (*str == '\0')
921 return NULL;
922 return str;
925 /* Like read_indirect_string but from .debug_line_str section. */
927 static char *
928 read_indirect_line_string (struct comp_unit *unit,
929 bfd_byte **ptr,
930 bfd_byte *buf_end)
932 uint64_t offset;
933 struct dwarf2_debug *stash = unit->stash;
934 struct dwarf2_debug_file *file = unit->file;
935 char *str;
937 if (unit->offset_size > (size_t) (buf_end - *ptr))
939 *ptr = buf_end;
940 return NULL;
943 if (unit->offset_size == 4)
944 offset = read_4_bytes (unit->abfd, ptr, buf_end);
945 else
946 offset = read_8_bytes (unit->abfd, ptr, buf_end);
948 if (! read_section (unit->abfd, &stash->debug_sections[debug_line_str],
949 file->syms, offset,
950 &file->dwarf_line_str_buffer,
951 &file->dwarf_line_str_size))
952 return NULL;
954 str = (char *) file->dwarf_line_str_buffer + offset;
955 if (*str == '\0')
956 return NULL;
957 return str;
960 /* Like read_indirect_string but uses a .debug_str located in
961 an alternate file pointed to by the .gnu_debugaltlink section.
962 Used to impement DW_FORM_GNU_strp_alt. */
964 static char *
965 read_alt_indirect_string (struct comp_unit *unit,
966 bfd_byte **ptr,
967 bfd_byte *buf_end)
969 uint64_t offset;
970 struct dwarf2_debug *stash = unit->stash;
971 char *str;
973 if (unit->offset_size > (size_t) (buf_end - *ptr))
975 *ptr = buf_end;
976 return NULL;
979 if (unit->offset_size == 4)
980 offset = read_4_bytes (unit->abfd, ptr, buf_end);
981 else
982 offset = read_8_bytes (unit->abfd, ptr, buf_end);
984 if (stash->alt.bfd_ptr == NULL)
986 bfd *debug_bfd;
987 char *debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR);
989 if (debug_filename == NULL)
990 return NULL;
992 debug_bfd = bfd_openr (debug_filename, NULL);
993 free (debug_filename);
994 if (debug_bfd == NULL)
995 /* FIXME: Should we report our failure to follow the debuglink ? */
996 return NULL;
998 if (!bfd_check_format (debug_bfd, bfd_object))
1000 bfd_close (debug_bfd);
1001 return NULL;
1003 stash->alt.bfd_ptr = debug_bfd;
1006 if (! read_section (unit->stash->alt.bfd_ptr,
1007 stash->debug_sections + debug_str_alt,
1008 stash->alt.syms, offset,
1009 &stash->alt.dwarf_str_buffer,
1010 &stash->alt.dwarf_str_size))
1011 return NULL;
1013 str = (char *) stash->alt.dwarf_str_buffer + offset;
1014 if (*str == '\0')
1015 return NULL;
1017 return str;
1020 /* Resolve an alternate reference from UNIT at OFFSET.
1021 Returns a pointer into the loaded alternate CU upon success
1022 or NULL upon failure. */
1024 static bfd_byte *
1025 read_alt_indirect_ref (struct comp_unit *unit, uint64_t offset)
1027 struct dwarf2_debug *stash = unit->stash;
1029 if (stash->alt.bfd_ptr == NULL)
1031 bfd *debug_bfd;
1032 char *debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR);
1034 if (debug_filename == NULL)
1035 return NULL;
1037 debug_bfd = bfd_openr (debug_filename, NULL);
1038 free (debug_filename);
1039 if (debug_bfd == NULL)
1040 /* FIXME: Should we report our failure to follow the debuglink ? */
1041 return NULL;
1043 if (!bfd_check_format (debug_bfd, bfd_object))
1045 bfd_close (debug_bfd);
1046 return NULL;
1048 stash->alt.bfd_ptr = debug_bfd;
1051 if (! read_section (unit->stash->alt.bfd_ptr,
1052 stash->debug_sections + debug_info_alt,
1053 stash->alt.syms, offset,
1054 &stash->alt.dwarf_info_buffer,
1055 &stash->alt.dwarf_info_size))
1056 return NULL;
1058 return stash->alt.dwarf_info_buffer + offset;
1061 static uint64_t
1062 read_address (struct comp_unit *unit, bfd_byte **ptr, bfd_byte *buf_end)
1064 bfd_byte *buf = *ptr;
1065 int signed_vma = 0;
1067 if (bfd_get_flavour (unit->abfd) == bfd_target_elf_flavour)
1068 signed_vma = get_elf_backend_data (unit->abfd)->sign_extend_vma;
1070 if (unit->addr_size > (size_t) (buf_end - buf))
1072 *ptr = buf_end;
1073 return 0;
1076 *ptr = buf + unit->addr_size;
1077 if (signed_vma)
1079 switch (unit->addr_size)
1081 case 8:
1082 return bfd_get_signed_64 (unit->abfd, buf);
1083 case 4:
1084 return bfd_get_signed_32 (unit->abfd, buf);
1085 case 2:
1086 return bfd_get_signed_16 (unit->abfd, buf);
1087 default:
1088 abort ();
1091 else
1093 switch (unit->addr_size)
1095 case 8:
1096 return bfd_get_64 (unit->abfd, buf);
1097 case 4:
1098 return bfd_get_32 (unit->abfd, buf);
1099 case 2:
1100 return bfd_get_16 (unit->abfd, buf);
1101 default:
1102 abort ();
1107 /* Lookup an abbrev_info structure in the abbrev hash table. */
1109 static struct abbrev_info *
1110 lookup_abbrev (unsigned int number, struct abbrev_info **abbrevs)
1112 unsigned int hash_number;
1113 struct abbrev_info *abbrev;
1115 hash_number = number % ABBREV_HASH_SIZE;
1116 abbrev = abbrevs[hash_number];
1118 while (abbrev)
1120 if (abbrev->number == number)
1121 return abbrev;
1122 else
1123 abbrev = abbrev->next;
1126 return NULL;
1129 /* We keep a hash table to map .debug_abbrev section offsets to the
1130 array of abbrevs, so that compilation units using the same set of
1131 abbrevs do not waste memory. */
1133 struct abbrev_offset_entry
1135 size_t offset;
1136 struct abbrev_info **abbrevs;
1139 static hashval_t
1140 hash_abbrev (const void *p)
1142 const struct abbrev_offset_entry *ent = p;
1143 return htab_hash_pointer ((void *) ent->offset);
1146 static int
1147 eq_abbrev (const void *pa, const void *pb)
1149 const struct abbrev_offset_entry *a = pa;
1150 const struct abbrev_offset_entry *b = pb;
1151 return a->offset == b->offset;
1154 static void
1155 del_abbrev (void *p)
1157 struct abbrev_offset_entry *ent = p;
1158 struct abbrev_info **abbrevs = ent->abbrevs;
1159 size_t i;
1161 for (i = 0; i < ABBREV_HASH_SIZE; i++)
1163 struct abbrev_info *abbrev = abbrevs[i];
1165 while (abbrev)
1167 free (abbrev->attrs);
1168 abbrev = abbrev->next;
1171 free (ent);
1174 /* In DWARF version 2, the description of the debugging information is
1175 stored in a separate .debug_abbrev section. Before we read any
1176 dies from a section we read in all abbreviations and install them
1177 in a hash table. */
1179 static struct abbrev_info**
1180 read_abbrevs (bfd *abfd, uint64_t offset, struct dwarf2_debug *stash,
1181 struct dwarf2_debug_file *file)
1183 struct abbrev_info **abbrevs;
1184 bfd_byte *abbrev_ptr;
1185 bfd_byte *abbrev_end;
1186 struct abbrev_info *cur_abbrev;
1187 unsigned int abbrev_number, abbrev_name;
1188 unsigned int abbrev_form, hash_number;
1189 size_t amt;
1190 void **slot;
1191 struct abbrev_offset_entry ent = { offset, NULL };
1193 if (ent.offset != offset)
1194 return NULL;
1196 slot = htab_find_slot (file->abbrev_offsets, &ent, INSERT);
1197 if (slot == NULL)
1198 return NULL;
1199 if (*slot != NULL)
1200 return ((struct abbrev_offset_entry *) (*slot))->abbrevs;
1202 if (! read_section (abfd, &stash->debug_sections[debug_abbrev],
1203 file->syms, offset,
1204 &file->dwarf_abbrev_buffer,
1205 &file->dwarf_abbrev_size))
1206 return NULL;
1208 amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE;
1209 abbrevs = (struct abbrev_info **) bfd_zalloc (abfd, amt);
1210 if (abbrevs == NULL)
1211 return NULL;
1213 abbrev_ptr = file->dwarf_abbrev_buffer + offset;
1214 abbrev_end = file->dwarf_abbrev_buffer + file->dwarf_abbrev_size;
1215 abbrev_number = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1216 false, abbrev_end);
1218 /* Loop until we reach an abbrev number of 0. */
1219 while (abbrev_number)
1221 amt = sizeof (struct abbrev_info);
1222 cur_abbrev = (struct abbrev_info *) bfd_zalloc (abfd, amt);
1223 if (cur_abbrev == NULL)
1224 goto fail;
1226 /* Read in abbrev header. */
1227 cur_abbrev->number = abbrev_number;
1228 cur_abbrev->tag = (enum dwarf_tag)
1229 _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1230 false, abbrev_end);
1231 cur_abbrev->has_children = read_1_byte (abfd, &abbrev_ptr, abbrev_end);
1233 /* Now read in declarations. */
1234 for (;;)
1236 /* Initialize it just to avoid a GCC false warning. */
1237 bfd_vma implicit_const = -1;
1239 abbrev_name = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1240 false, abbrev_end);
1241 abbrev_form = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1242 false, abbrev_end);
1243 if (abbrev_form == DW_FORM_implicit_const)
1244 implicit_const = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1245 true, abbrev_end);
1246 if (abbrev_name == 0)
1247 break;
1249 if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
1251 struct attr_abbrev *tmp;
1253 amt = cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK;
1254 amt *= sizeof (struct attr_abbrev);
1255 tmp = (struct attr_abbrev *) bfd_realloc (cur_abbrev->attrs, amt);
1256 if (tmp == NULL)
1257 goto fail;
1258 cur_abbrev->attrs = tmp;
1261 cur_abbrev->attrs[cur_abbrev->num_attrs].name
1262 = (enum dwarf_attribute) abbrev_name;
1263 cur_abbrev->attrs[cur_abbrev->num_attrs].form
1264 = (enum dwarf_form) abbrev_form;
1265 cur_abbrev->attrs[cur_abbrev->num_attrs].implicit_const
1266 = implicit_const;
1267 ++cur_abbrev->num_attrs;
1270 hash_number = abbrev_number % ABBREV_HASH_SIZE;
1271 cur_abbrev->next = abbrevs[hash_number];
1272 abbrevs[hash_number] = cur_abbrev;
1274 /* Get next abbreviation.
1275 Under Irix6 the abbreviations for a compilation unit are not
1276 always properly terminated with an abbrev number of 0.
1277 Exit loop if we encounter an abbreviation which we have
1278 already read (which means we are about to read the abbreviations
1279 for the next compile unit) or if the end of the abbreviation
1280 table is reached. */
1281 if ((size_t) (abbrev_ptr - file->dwarf_abbrev_buffer)
1282 >= file->dwarf_abbrev_size)
1283 break;
1284 abbrev_number = _bfd_safe_read_leb128 (abfd, &abbrev_ptr,
1285 false, abbrev_end);
1286 if (lookup_abbrev (abbrev_number, abbrevs) != NULL)
1287 break;
1290 *slot = bfd_malloc (sizeof ent);
1291 if (!*slot)
1292 goto fail;
1293 ent.abbrevs = abbrevs;
1294 memcpy (*slot, &ent, sizeof ent);
1295 return abbrevs;
1297 fail:
1298 if (abbrevs != NULL)
1300 size_t i;
1302 for (i = 0; i < ABBREV_HASH_SIZE; i++)
1304 struct abbrev_info *abbrev = abbrevs[i];
1306 while (abbrev)
1308 free (abbrev->attrs);
1309 abbrev = abbrev->next;
1312 free (abbrevs);
1314 return NULL;
1317 /* Returns true if the form is one which has a string value. */
1319 static bool
1320 is_str_form (const struct attribute *attr)
1322 switch (attr->form)
1324 case DW_FORM_string:
1325 case DW_FORM_strp:
1326 case DW_FORM_strx:
1327 case DW_FORM_strx1:
1328 case DW_FORM_strx2:
1329 case DW_FORM_strx3:
1330 case DW_FORM_strx4:
1331 case DW_FORM_line_strp:
1332 case DW_FORM_GNU_strp_alt:
1333 return true;
1335 default:
1336 return false;
1340 /* Returns true if the form is one which has an integer value. */
1342 static bool
1343 is_int_form (const struct attribute *attr)
1345 switch (attr->form)
1347 case DW_FORM_addr:
1348 case DW_FORM_data2:
1349 case DW_FORM_data4:
1350 case DW_FORM_data8:
1351 case DW_FORM_data1:
1352 case DW_FORM_flag:
1353 case DW_FORM_sdata:
1354 case DW_FORM_udata:
1355 case DW_FORM_ref_addr:
1356 case DW_FORM_ref1:
1357 case DW_FORM_ref2:
1358 case DW_FORM_ref4:
1359 case DW_FORM_ref8:
1360 case DW_FORM_ref_udata:
1361 case DW_FORM_sec_offset:
1362 case DW_FORM_flag_present:
1363 case DW_FORM_ref_sig8:
1364 case DW_FORM_addrx:
1365 case DW_FORM_implicit_const:
1366 case DW_FORM_addrx1:
1367 case DW_FORM_addrx2:
1368 case DW_FORM_addrx3:
1369 case DW_FORM_addrx4:
1370 case DW_FORM_GNU_ref_alt:
1371 return true;
1373 default:
1374 return false;
1378 /* Returns true if the form is strx[1-4]. */
1380 static inline bool
1381 is_strx_form (enum dwarf_form form)
1383 return (form == DW_FORM_strx
1384 || form == DW_FORM_strx1
1385 || form == DW_FORM_strx2
1386 || form == DW_FORM_strx3
1387 || form == DW_FORM_strx4);
1390 /* Return true if the form is addrx[1-4]. */
1392 static inline bool
1393 is_addrx_form (enum dwarf_form form)
1395 return (form == DW_FORM_addrx
1396 || form == DW_FORM_addrx1
1397 || form == DW_FORM_addrx2
1398 || form == DW_FORM_addrx3
1399 || form == DW_FORM_addrx4);
1402 /* Returns the address in .debug_addr section using DW_AT_addr_base.
1403 Used to implement DW_FORM_addrx*. */
1404 static uint64_t
1405 read_indexed_address (uint64_t idx, struct comp_unit *unit)
1407 struct dwarf2_debug *stash = unit->stash;
1408 struct dwarf2_debug_file *file = unit->file;
1409 bfd_byte *info_ptr;
1410 size_t offset;
1412 if (stash == NULL)
1413 return 0;
1415 if (!read_section (unit->abfd, &stash->debug_sections[debug_addr],
1416 file->syms, 0,
1417 &file->dwarf_addr_buffer, &file->dwarf_addr_size))
1418 return 0;
1420 if (_bfd_mul_overflow (idx, unit->addr_size, &offset))
1421 return 0;
1423 offset += unit->dwarf_addr_offset;
1424 if (offset < unit->dwarf_addr_offset
1425 || offset > file->dwarf_addr_size
1426 || file->dwarf_addr_size - offset < unit->addr_size)
1427 return 0;
1429 info_ptr = file->dwarf_addr_buffer + offset;
1431 if (unit->addr_size == 4)
1432 return bfd_get_32 (unit->abfd, info_ptr);
1433 else if (unit->addr_size == 8)
1434 return bfd_get_64 (unit->abfd, info_ptr);
1435 else
1436 return 0;
1439 /* Returns the string using DW_AT_str_offsets_base.
1440 Used to implement DW_FORM_strx*. */
1441 static const char *
1442 read_indexed_string (uint64_t idx, struct comp_unit *unit)
1444 struct dwarf2_debug *stash = unit->stash;
1445 struct dwarf2_debug_file *file = unit->file;
1446 bfd_byte *info_ptr;
1447 uint64_t str_offset;
1448 size_t offset;
1450 if (stash == NULL)
1451 return NULL;
1453 if (!read_section (unit->abfd, &stash->debug_sections[debug_str],
1454 file->syms, 0,
1455 &file->dwarf_str_buffer, &file->dwarf_str_size))
1456 return NULL;
1458 if (!read_section (unit->abfd, &stash->debug_sections[debug_str_offsets],
1459 file->syms, 0,
1460 &file->dwarf_str_offsets_buffer,
1461 &file->dwarf_str_offsets_size))
1462 return NULL;
1464 if (_bfd_mul_overflow (idx, unit->offset_size, &offset))
1465 return NULL;
1467 offset += unit->dwarf_str_offset;
1468 if (offset < unit->dwarf_str_offset
1469 || offset > file->dwarf_str_offsets_size
1470 || file->dwarf_str_offsets_size - offset < unit->offset_size)
1471 return NULL;
1473 info_ptr = file->dwarf_str_offsets_buffer + offset;
1475 if (unit->offset_size == 4)
1476 str_offset = bfd_get_32 (unit->abfd, info_ptr);
1477 else if (unit->offset_size == 8)
1478 str_offset = bfd_get_64 (unit->abfd, info_ptr);
1479 else
1480 return NULL;
1482 if (str_offset >= file->dwarf_str_size)
1483 return NULL;
1484 return (const char *) file->dwarf_str_buffer + str_offset;
1487 /* Read and fill in the value of attribute ATTR as described by FORM.
1488 Read data starting from INFO_PTR, but never at or beyond INFO_PTR_END.
1489 Returns an updated INFO_PTR taking into account the amount of data read. */
1491 static bfd_byte *
1492 read_attribute_value (struct attribute * attr,
1493 unsigned form,
1494 bfd_vma implicit_const,
1495 struct comp_unit * unit,
1496 bfd_byte * info_ptr,
1497 bfd_byte * info_ptr_end)
1499 bfd *abfd = unit->abfd;
1500 size_t amt;
1502 if (info_ptr >= info_ptr_end && form != DW_FORM_flag_present)
1504 _bfd_error_handler (_("DWARF error: info pointer extends beyond end of attributes"));
1505 bfd_set_error (bfd_error_bad_value);
1506 return NULL;
1509 attr->form = (enum dwarf_form) form;
1511 switch (form)
1513 case DW_FORM_flag_present:
1514 attr->u.val = 1;
1515 break;
1516 case DW_FORM_ref_addr:
1517 /* DW_FORM_ref_addr is an address in DWARF2, and an offset in
1518 DWARF3. */
1519 if (unit->version >= 3)
1521 if (unit->offset_size == 4)
1522 attr->u.val = read_4_bytes (unit->abfd, &info_ptr, info_ptr_end);
1523 else
1524 attr->u.val = read_8_bytes (unit->abfd, &info_ptr, info_ptr_end);
1525 break;
1527 /* FALLTHROUGH */
1528 case DW_FORM_addr:
1529 attr->u.val = read_address (unit, &info_ptr, info_ptr_end);
1530 break;
1531 case DW_FORM_GNU_ref_alt:
1532 case DW_FORM_sec_offset:
1533 if (unit->offset_size == 4)
1534 attr->u.val = read_4_bytes (unit->abfd, &info_ptr, info_ptr_end);
1535 else
1536 attr->u.val = read_8_bytes (unit->abfd, &info_ptr, info_ptr_end);
1537 break;
1538 case DW_FORM_block2:
1539 amt = read_2_bytes (abfd, &info_ptr, info_ptr_end);
1540 attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
1541 if (attr->u.blk == NULL)
1542 return NULL;
1543 break;
1544 case DW_FORM_block4:
1545 amt = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1546 attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
1547 if (attr->u.blk == NULL)
1548 return NULL;
1549 break;
1550 case DW_FORM_ref1:
1551 case DW_FORM_flag:
1552 case DW_FORM_data1:
1553 attr->u.val = read_1_byte (abfd, &info_ptr, info_ptr_end);
1554 break;
1555 case DW_FORM_addrx1:
1556 attr->u.val = read_1_byte (abfd, &info_ptr, info_ptr_end);
1557 /* dwarf_addr_offset value 0 indicates the attribute DW_AT_addr_base
1558 is not yet read. */
1559 if (unit->dwarf_addr_offset != 0)
1560 attr->u.val = read_indexed_address (attr->u.val, unit);
1561 break;
1562 case DW_FORM_data2:
1563 case DW_FORM_ref2:
1564 attr->u.val = read_2_bytes (abfd, &info_ptr, info_ptr_end);
1565 break;
1566 case DW_FORM_addrx2:
1567 attr->u.val = read_2_bytes (abfd, &info_ptr, info_ptr_end);
1568 if (unit->dwarf_addr_offset != 0)
1569 attr->u.val = read_indexed_address (attr->u.val, unit);
1570 break;
1571 case DW_FORM_addrx3:
1572 attr->u.val = read_3_bytes (abfd, &info_ptr, info_ptr_end);
1573 if (unit->dwarf_addr_offset != 0)
1574 attr->u.val = read_indexed_address(attr->u.val, unit);
1575 break;
1576 case DW_FORM_ref4:
1577 case DW_FORM_data4:
1578 attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1579 break;
1580 case DW_FORM_addrx4:
1581 attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1582 if (unit->dwarf_addr_offset != 0)
1583 attr->u.val = read_indexed_address (attr->u.val, unit);
1584 break;
1585 case DW_FORM_data8:
1586 case DW_FORM_ref8:
1587 case DW_FORM_ref_sig8:
1588 attr->u.val = read_8_bytes (abfd, &info_ptr, info_ptr_end);
1589 break;
1590 case DW_FORM_string:
1591 attr->u.str = read_string (&info_ptr, info_ptr_end);
1592 break;
1593 case DW_FORM_strp:
1594 attr->u.str = read_indirect_string (unit, &info_ptr, info_ptr_end);
1595 break;
1596 case DW_FORM_line_strp:
1597 attr->u.str = read_indirect_line_string (unit, &info_ptr, info_ptr_end);
1598 break;
1599 case DW_FORM_GNU_strp_alt:
1600 attr->u.str = read_alt_indirect_string (unit, &info_ptr, info_ptr_end);
1601 break;
1602 case DW_FORM_strx1:
1603 attr->u.val = read_1_byte (abfd, &info_ptr, info_ptr_end);
1604 /* dwarf_str_offset value 0 indicates the attribute DW_AT_str_offsets_base
1605 is not yet read. */
1606 if (unit->dwarf_str_offset != 0)
1607 attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1608 else
1609 attr->u.str = NULL;
1610 break;
1611 case DW_FORM_strx2:
1612 attr->u.val = read_2_bytes (abfd, &info_ptr, info_ptr_end);
1613 if (unit->dwarf_str_offset != 0)
1614 attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1615 else
1616 attr->u.str = NULL;
1617 break;
1618 case DW_FORM_strx3:
1619 attr->u.val = read_3_bytes (abfd, &info_ptr, info_ptr_end);
1620 if (unit->dwarf_str_offset != 0)
1621 attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1622 else
1623 attr->u.str = NULL;
1624 break;
1625 case DW_FORM_strx4:
1626 attr->u.val = read_4_bytes (abfd, &info_ptr, info_ptr_end);
1627 if (unit->dwarf_str_offset != 0)
1628 attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1629 else
1630 attr->u.str = NULL;
1631 break;
1632 case DW_FORM_strx:
1633 attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
1634 false, info_ptr_end);
1635 if (unit->dwarf_str_offset != 0)
1636 attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
1637 else
1638 attr->u.str = NULL;
1639 break;
1640 case DW_FORM_exprloc:
1641 case DW_FORM_block:
1642 amt = _bfd_safe_read_leb128 (abfd, &info_ptr,
1643 false, info_ptr_end);
1644 attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
1645 if (attr->u.blk == NULL)
1646 return NULL;
1647 break;
1648 case DW_FORM_block1:
1649 amt = read_1_byte (abfd, &info_ptr, info_ptr_end);
1650 attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, amt);
1651 if (attr->u.blk == NULL)
1652 return NULL;
1653 break;
1654 case DW_FORM_sdata:
1655 attr->u.sval = _bfd_safe_read_leb128 (abfd, &info_ptr,
1656 true, info_ptr_end);
1657 break;
1659 case DW_FORM_rnglistx:
1660 case DW_FORM_loclistx:
1661 /* FIXME: Add support for these forms! */
1662 /* Fall through. */
1663 case DW_FORM_ref_udata:
1664 case DW_FORM_udata:
1665 attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
1666 false, info_ptr_end);
1667 break;
1668 case DW_FORM_addrx:
1669 attr->u.val = _bfd_safe_read_leb128 (abfd, &info_ptr,
1670 false, info_ptr_end);
1671 if (unit->dwarf_addr_offset != 0)
1672 attr->u.val = read_indexed_address (attr->u.val, unit);
1673 break;
1674 case DW_FORM_indirect:
1675 form = _bfd_safe_read_leb128 (abfd, &info_ptr,
1676 false, info_ptr_end);
1677 if (form == DW_FORM_implicit_const)
1678 implicit_const = _bfd_safe_read_leb128 (abfd, &info_ptr,
1679 true, info_ptr_end);
1680 info_ptr = read_attribute_value (attr, form, implicit_const, unit,
1681 info_ptr, info_ptr_end);
1682 break;
1683 case DW_FORM_implicit_const:
1684 attr->form = DW_FORM_sdata;
1685 attr->u.sval = implicit_const;
1686 break;
1687 case DW_FORM_data16:
1688 /* This is really a "constant", but there is no way to store that
1689 so pretend it is a 16 byte block instead. */
1690 attr->u.blk = read_blk (abfd, &info_ptr, info_ptr_end, 16);
1691 if (attr->u.blk == NULL)
1692 return NULL;
1693 break;
1695 default:
1696 _bfd_error_handler (_("DWARF error: invalid or unhandled FORM value: %#x"),
1697 form);
1698 bfd_set_error (bfd_error_bad_value);
1699 return NULL;
1701 return info_ptr;
1704 /* Read an attribute described by an abbreviated attribute. */
1706 static bfd_byte *
1707 read_attribute (struct attribute * attr,
1708 struct attr_abbrev * abbrev,
1709 struct comp_unit * unit,
1710 bfd_byte * info_ptr,
1711 bfd_byte * info_ptr_end)
1713 attr->name = abbrev->name;
1714 info_ptr = read_attribute_value (attr, abbrev->form, abbrev->implicit_const,
1715 unit, info_ptr, info_ptr_end);
1716 return info_ptr;
1719 /* Return mangling style given LANG. */
1721 static int
1722 mangle_style (int lang)
1724 switch (lang)
1726 case DW_LANG_Ada83:
1727 case DW_LANG_Ada95:
1728 return DMGL_GNAT;
1730 case DW_LANG_C_plus_plus:
1731 case DW_LANG_C_plus_plus_03:
1732 case DW_LANG_C_plus_plus_11:
1733 case DW_LANG_C_plus_plus_14:
1734 return DMGL_GNU_V3;
1736 case DW_LANG_Java:
1737 return DMGL_JAVA;
1739 case DW_LANG_D:
1740 return DMGL_DLANG;
1742 case DW_LANG_Rust:
1743 case DW_LANG_Rust_old:
1744 return DMGL_RUST;
1746 default:
1747 return DMGL_AUTO;
1749 case DW_LANG_C89:
1750 case DW_LANG_C:
1751 case DW_LANG_Cobol74:
1752 case DW_LANG_Cobol85:
1753 case DW_LANG_Fortran77:
1754 case DW_LANG_Pascal83:
1755 case DW_LANG_PLI:
1756 case DW_LANG_C99:
1757 case DW_LANG_UPC:
1758 case DW_LANG_C11:
1759 case DW_LANG_Mips_Assembler:
1760 case DW_LANG_Upc:
1761 case DW_LANG_HP_Basic91:
1762 case DW_LANG_HP_IMacro:
1763 case DW_LANG_HP_Assembler:
1764 return 0;
1768 /* Source line information table routines. */
1770 #define FILE_ALLOC_CHUNK 5
1771 #define DIR_ALLOC_CHUNK 5
1773 struct line_info
1775 struct line_info * prev_line;
1776 bfd_vma address;
1777 char * filename;
1778 unsigned int line;
1779 unsigned int column;
1780 unsigned int discriminator;
1781 unsigned char op_index;
1782 unsigned char end_sequence; /* End of (sequential) code sequence. */
1785 struct fileinfo
1787 char * name;
1788 unsigned int dir;
1789 unsigned int time;
1790 unsigned int size;
1793 struct line_sequence
1795 bfd_vma low_pc;
1796 struct line_sequence* prev_sequence;
1797 struct line_info* last_line; /* Largest VMA. */
1798 struct line_info** line_info_lookup;
1799 bfd_size_type num_lines;
1802 struct line_info_table
1804 bfd * abfd;
1805 unsigned int num_files;
1806 unsigned int num_dirs;
1807 unsigned int num_sequences;
1808 bool use_dir_and_file_0;
1809 char * comp_dir;
1810 char ** dirs;
1811 struct fileinfo* files;
1812 struct line_sequence* sequences;
1813 struct line_info* lcl_head; /* Local head; used in 'add_line_info'. */
1816 /* Remember some information about each function. If the function is
1817 inlined (DW_TAG_inlined_subroutine) it may have two additional
1818 attributes, DW_AT_call_file and DW_AT_call_line, which specify the
1819 source code location where this function was inlined. */
1821 struct funcinfo
1823 /* Pointer to previous function in list of all functions. */
1824 struct funcinfo *prev_func;
1825 /* Pointer to function one scope higher. */
1826 struct funcinfo *caller_func;
1827 /* Source location file name where caller_func inlines this func. */
1828 char *caller_file;
1829 /* Source location file name. */
1830 char *file;
1831 /* Source location line number where caller_func inlines this func. */
1832 int caller_line;
1833 /* Source location line number. */
1834 int line;
1835 int tag;
1836 bool is_linkage;
1837 const char *name;
1838 struct arange arange;
1839 /* The offset of the funcinfo from the start of the unit. */
1840 uint64_t unit_offset;
1843 struct lookup_funcinfo
1845 /* Function information corresponding to this lookup table entry. */
1846 struct funcinfo *funcinfo;
1848 /* The lowest address for this specific function. */
1849 bfd_vma low_addr;
1851 /* The highest address of this function before the lookup table is sorted.
1852 The highest address of all prior functions after the lookup table is
1853 sorted, which is used for binary search. */
1854 bfd_vma high_addr;
1855 /* Index of this function, used to ensure qsort is stable. */
1856 unsigned int idx;
1859 struct varinfo
1861 /* Pointer to previous variable in list of all variables. */
1862 struct varinfo *prev_var;
1863 /* The offset of the varinfo from the start of the unit. */
1864 uint64_t unit_offset;
1865 /* Source location file name. */
1866 char *file;
1867 /* Source location line number. */
1868 int line;
1869 /* The type of this variable. */
1870 int tag;
1871 /* The name of the variable, if it has one. */
1872 const char *name;
1873 /* The address of the variable. */
1874 bfd_vma addr;
1875 /* Is this a stack variable? */
1876 bool stack;
1879 /* Return TRUE if NEW_LINE should sort after LINE. */
1881 static inline bool
1882 new_line_sorts_after (struct line_info *new_line, struct line_info *line)
1884 return (new_line->address > line->address
1885 || (new_line->address == line->address
1886 && new_line->op_index > line->op_index));
1890 /* Adds a new entry to the line_info list in the line_info_table, ensuring
1891 that the list is sorted. Note that the line_info list is sorted from
1892 highest to lowest VMA (with possible duplicates); that is,
1893 line_info->prev_line always accesses an equal or smaller VMA. */
1895 static bool
1896 add_line_info (struct line_info_table *table,
1897 bfd_vma address,
1898 unsigned char op_index,
1899 char *filename,
1900 unsigned int line,
1901 unsigned int column,
1902 unsigned int discriminator,
1903 int end_sequence)
1905 size_t amt = sizeof (struct line_info);
1906 struct line_sequence* seq = table->sequences;
1907 struct line_info* info = (struct line_info *) bfd_alloc (table->abfd, amt);
1909 if (info == NULL)
1910 return false;
1912 /* Set member data of 'info'. */
1913 info->prev_line = NULL;
1914 info->address = address;
1915 info->op_index = op_index;
1916 info->line = line;
1917 info->column = column;
1918 info->discriminator = discriminator;
1919 info->end_sequence = end_sequence;
1921 if (filename && filename[0])
1923 info->filename = (char *) bfd_alloc (table->abfd, strlen (filename) + 1);
1924 if (info->filename == NULL)
1925 return false;
1926 strcpy (info->filename, filename);
1928 else
1929 info->filename = NULL;
1931 /* Find the correct location for 'info'. Normally we will receive
1932 new line_info data 1) in order and 2) with increasing VMAs.
1933 However some compilers break the rules (cf. decode_line_info) and
1934 so we include some heuristics for quickly finding the correct
1935 location for 'info'. In particular, these heuristics optimize for
1936 the common case in which the VMA sequence that we receive is a
1937 list of locally sorted VMAs such as
1938 p...z a...j (where a < j < p < z)
1940 Note: table->lcl_head is used to head an *actual* or *possible*
1941 sub-sequence within the list (such as a...j) that is not directly
1942 headed by table->last_line
1944 Note: we may receive duplicate entries from 'decode_line_info'. */
1946 if (seq
1947 && seq->last_line->address == address
1948 && seq->last_line->op_index == op_index
1949 && seq->last_line->end_sequence == end_sequence)
1951 /* We only keep the last entry with the same address and end
1952 sequence. See PR ld/4986. */
1953 if (table->lcl_head == seq->last_line)
1954 table->lcl_head = info;
1955 info->prev_line = seq->last_line->prev_line;
1956 seq->last_line = info;
1958 else if (!seq || seq->last_line->end_sequence)
1960 /* Start a new line sequence. */
1961 amt = sizeof (struct line_sequence);
1962 seq = (struct line_sequence *) bfd_malloc (amt);
1963 if (seq == NULL)
1964 return false;
1965 seq->low_pc = address;
1966 seq->prev_sequence = table->sequences;
1967 seq->last_line = info;
1968 table->lcl_head = info;
1969 table->sequences = seq;
1970 table->num_sequences++;
1972 else if (info->end_sequence
1973 || new_line_sorts_after (info, seq->last_line))
1975 /* Normal case: add 'info' to the beginning of the current sequence. */
1976 info->prev_line = seq->last_line;
1977 seq->last_line = info;
1979 /* lcl_head: initialize to head a *possible* sequence at the end. */
1980 if (!table->lcl_head)
1981 table->lcl_head = info;
1983 else if (!new_line_sorts_after (info, table->lcl_head)
1984 && (!table->lcl_head->prev_line
1985 || new_line_sorts_after (info, table->lcl_head->prev_line)))
1987 /* Abnormal but easy: lcl_head is the head of 'info'. */
1988 info->prev_line = table->lcl_head->prev_line;
1989 table->lcl_head->prev_line = info;
1991 else
1993 /* Abnormal and hard: Neither 'last_line' nor 'lcl_head'
1994 are valid heads for 'info'. Reset 'lcl_head'. */
1995 struct line_info* li2 = seq->last_line; /* Always non-NULL. */
1996 struct line_info* li1 = li2->prev_line;
1998 while (li1)
2000 if (!new_line_sorts_after (info, li2)
2001 && new_line_sorts_after (info, li1))
2002 break;
2004 li2 = li1; /* always non-NULL */
2005 li1 = li1->prev_line;
2007 table->lcl_head = li2;
2008 info->prev_line = table->lcl_head->prev_line;
2009 table->lcl_head->prev_line = info;
2010 if (address < seq->low_pc)
2011 seq->low_pc = address;
2013 return true;
2016 /* Extract a fully qualified filename from a line info table.
2017 The returned string has been malloc'ed and it is the caller's
2018 responsibility to free it. */
2020 static char *
2021 concat_filename (struct line_info_table *table, unsigned int file)
2023 char *filename;
2025 /* Pre DWARF-5 entry 0 in the directory and filename tables was not used.
2026 So in order to save space in the tables used here the info for, eg
2027 directory 1 is stored in slot 0 of the directory table, directory 2
2028 in slot 1 and so on.
2030 Starting with DWARF-5 the 0'th entry is used so there is a one to one
2031 mapping between DWARF slots and internal table entries. */
2032 if (! table->use_dir_and_file_0)
2034 /* Pre DWARF-5, FILE == 0 means unknown. */
2035 if (file == 0)
2036 return strdup ("<unknown>");
2037 -- file;
2040 if (table == NULL || file >= table->num_files)
2042 _bfd_error_handler
2043 (_("DWARF error: mangled line number section (bad file number)"));
2044 return strdup ("<unknown>");
2047 filename = table->files[file].name;
2049 if (filename == NULL)
2050 return strdup ("<unknown>");
2052 if (!IS_ABSOLUTE_PATH (filename))
2054 char *dir_name = NULL;
2055 char *subdir_name = NULL;
2056 char *name;
2057 size_t len;
2058 unsigned int dir = table->files[file].dir;
2060 if (!table->use_dir_and_file_0)
2061 --dir;
2062 /* Wrapping from 0 to -1u above gives the intended result with
2063 the test below of leaving subdir_name NULL for pre-DWARF5 dir
2064 of 0. */
2065 /* PR 17512: file: 0317e960, file: 7f3d2e4b. */
2066 if (dir < table->num_dirs)
2067 subdir_name = table->dirs[dir];
2069 if (!subdir_name || !IS_ABSOLUTE_PATH (subdir_name))
2070 dir_name = table->comp_dir;
2072 if (!dir_name)
2074 dir_name = subdir_name;
2075 subdir_name = NULL;
2078 if (!dir_name)
2079 return strdup (filename);
2081 len = strlen (dir_name) + strlen (filename) + 2;
2083 if (subdir_name)
2085 len += strlen (subdir_name) + 1;
2086 name = (char *) bfd_malloc (len);
2087 if (name)
2088 sprintf (name, "%s/%s/%s", dir_name, subdir_name, filename);
2090 else
2092 name = (char *) bfd_malloc (len);
2093 if (name)
2094 sprintf (name, "%s/%s", dir_name, filename);
2097 return name;
2100 return strdup (filename);
2103 /* Number of bits in a bfd_vma. */
2104 #define VMA_BITS (8 * sizeof (bfd_vma))
2106 /* Check whether [low1, high1) can be combined with [low2, high2),
2107 i.e., they touch or overlap. */
2109 static bool
2110 ranges_overlap (bfd_vma low1,
2111 bfd_vma high1,
2112 bfd_vma low2,
2113 bfd_vma high2)
2115 if (low1 == low2 || high1 == high2)
2116 return true;
2118 /* Sort so that low1 is below low2. */
2119 if (low1 > low2)
2121 bfd_vma tmp;
2123 tmp = low1;
2124 low1 = low2;
2125 low2 = tmp;
2127 tmp = high1;
2128 high1 = high2;
2129 high2 = tmp;
2132 /* We touch iff low2 == high1.
2133 We overlap iff low2 is within [low1, high1). */
2134 return low2 <= high1;
2137 /* Insert an address range in the trie mapping addresses to compilation units.
2138 Will return the new trie node (usually the same as is being sent in, but
2139 in case of a leaf-to-interior conversion, or expansion of a leaf, it may be
2140 different), or NULL on failure. */
2142 static struct trie_node *
2143 insert_arange_in_trie (bfd *abfd,
2144 struct trie_node *trie,
2145 bfd_vma trie_pc,
2146 unsigned int trie_pc_bits,
2147 struct comp_unit *unit,
2148 bfd_vma low_pc,
2149 bfd_vma high_pc)
2151 bfd_vma clamped_low_pc, clamped_high_pc;
2152 int ch, from_ch, to_ch;
2153 bool is_full_leaf = false;
2155 /* See if we can extend any of the existing ranges. This merging
2156 isn't perfect (if merging opens up the possibility of merging two existing
2157 ranges, we won't find them), but it takes the majority of the cases. */
2158 if (trie->num_room_in_leaf > 0)
2160 struct trie_leaf *leaf = (struct trie_leaf *) trie;
2161 unsigned int i;
2163 for (i = 0; i < leaf->num_stored_in_leaf; ++i)
2165 if (leaf->ranges[i].unit == unit
2166 && ranges_overlap (low_pc, high_pc,
2167 leaf->ranges[i].low_pc,
2168 leaf->ranges[i].high_pc))
2170 if (low_pc < leaf->ranges[i].low_pc)
2171 leaf->ranges[i].low_pc = low_pc;
2172 if (high_pc > leaf->ranges[i].high_pc)
2173 leaf->ranges[i].high_pc = high_pc;
2174 return trie;
2178 is_full_leaf = leaf->num_stored_in_leaf == trie->num_room_in_leaf;
2181 /* If we're a leaf with no more room and we're _not_ at the bottom,
2182 convert to an interior node. */
2183 if (is_full_leaf && trie_pc_bits < VMA_BITS)
2185 const struct trie_leaf *leaf = (struct trie_leaf *) trie;
2186 unsigned int i;
2188 trie = bfd_zalloc (abfd, sizeof (struct trie_interior));
2189 if (!trie)
2190 return NULL;
2191 is_full_leaf = false;
2193 /* TODO: If we wanted to save a little more memory at the cost of
2194 complexity, we could have reused the old leaf node as one of the
2195 children of the new interior node, instead of throwing it away. */
2196 for (i = 0; i < leaf->num_stored_in_leaf; ++i)
2198 if (!insert_arange_in_trie (abfd, trie, trie_pc, trie_pc_bits,
2199 leaf->ranges[i].unit, leaf->ranges[i].low_pc,
2200 leaf->ranges[i].high_pc))
2201 return NULL;
2205 /* If we're a leaf with no more room and we _are_ at the bottom,
2206 we have no choice but to just make it larger. */
2207 if (is_full_leaf)
2209 const struct trie_leaf *leaf = (struct trie_leaf *) trie;
2210 unsigned int new_room_in_leaf = trie->num_room_in_leaf * 2;
2211 struct trie_leaf *new_leaf;
2212 size_t amt = sizeof (*leaf) + new_room_in_leaf * sizeof (leaf->ranges[0]);
2213 new_leaf = bfd_zalloc (abfd, amt);
2214 new_leaf->head.num_room_in_leaf = new_room_in_leaf;
2215 new_leaf->num_stored_in_leaf = leaf->num_stored_in_leaf;
2217 memcpy (new_leaf->ranges,
2218 leaf->ranges,
2219 leaf->num_stored_in_leaf * sizeof (leaf->ranges[0]));
2220 trie = &new_leaf->head;
2221 is_full_leaf = false;
2223 /* Now the insert below will go through. */
2226 /* If we're a leaf (now with room), we can just insert at the end. */
2227 if (trie->num_room_in_leaf > 0)
2229 struct trie_leaf *leaf = (struct trie_leaf *) trie;
2231 unsigned int i = leaf->num_stored_in_leaf++;
2232 leaf->ranges[i].unit = unit;
2233 leaf->ranges[i].low_pc = low_pc;
2234 leaf->ranges[i].high_pc = high_pc;
2235 return trie;
2238 /* Now we are definitely an interior node, so recurse into all
2239 the relevant buckets. */
2241 /* Clamp the range to the current trie bucket. */
2242 clamped_low_pc = low_pc;
2243 clamped_high_pc = high_pc;
2244 if (trie_pc_bits > 0)
2246 bfd_vma bucket_high_pc =
2247 trie_pc + ((bfd_vma) -1 >> trie_pc_bits); /* Inclusive. */
2248 if (clamped_low_pc < trie_pc)
2249 clamped_low_pc = trie_pc;
2250 if (clamped_high_pc > bucket_high_pc)
2251 clamped_high_pc = bucket_high_pc;
2254 /* Insert the ranges in all buckets that it spans. */
2255 from_ch = (clamped_low_pc >> (VMA_BITS - trie_pc_bits - 8)) & 0xff;
2256 to_ch = ((clamped_high_pc - 1) >> (VMA_BITS - trie_pc_bits - 8)) & 0xff;
2257 for (ch = from_ch; ch <= to_ch; ++ch)
2259 struct trie_interior *interior = (struct trie_interior *) trie;
2260 struct trie_node *child = interior->children[ch];
2262 if (child == NULL)
2264 child = alloc_trie_leaf (abfd);
2265 if (!child)
2266 return NULL;
2268 bfd_vma bucket = (bfd_vma) ch << (VMA_BITS - trie_pc_bits - 8);
2269 child = insert_arange_in_trie (abfd,
2270 child,
2271 trie_pc + bucket,
2272 trie_pc_bits + 8,
2273 unit,
2274 low_pc,
2275 high_pc);
2276 if (!child)
2277 return NULL;
2279 interior->children[ch] = child;
2282 return trie;
2285 static bool
2286 arange_add (struct comp_unit *unit, struct arange *first_arange,
2287 struct trie_node **trie_root, bfd_vma low_pc, bfd_vma high_pc)
2289 struct arange *arange;
2291 /* Ignore empty ranges. */
2292 if (low_pc == high_pc)
2293 return true;
2295 if (trie_root != NULL)
2297 *trie_root = insert_arange_in_trie (unit->file->bfd_ptr,
2298 *trie_root,
2301 unit,
2302 low_pc,
2303 high_pc);
2304 if (*trie_root == NULL)
2305 return false;
2308 /* If the first arange is empty, use it. */
2309 if (first_arange->high == 0)
2311 first_arange->low = low_pc;
2312 first_arange->high = high_pc;
2313 return true;
2316 /* Next see if we can cheaply extend an existing range. */
2317 arange = first_arange;
2320 if (low_pc == arange->high)
2322 arange->high = high_pc;
2323 return true;
2325 if (high_pc == arange->low)
2327 arange->low = low_pc;
2328 return true;
2330 arange = arange->next;
2332 while (arange);
2334 /* Need to allocate a new arange and insert it into the arange list.
2335 Order isn't significant, so just insert after the first arange. */
2336 arange = (struct arange *) bfd_alloc (unit->abfd, sizeof (*arange));
2337 if (arange == NULL)
2338 return false;
2339 arange->low = low_pc;
2340 arange->high = high_pc;
2341 arange->next = first_arange->next;
2342 first_arange->next = arange;
2343 return true;
2346 /* Compare function for line sequences. */
2348 static int
2349 compare_sequences (const void* a, const void* b)
2351 const struct line_sequence* seq1 = a;
2352 const struct line_sequence* seq2 = b;
2354 /* Sort by low_pc as the primary key. */
2355 if (seq1->low_pc < seq2->low_pc)
2356 return -1;
2357 if (seq1->low_pc > seq2->low_pc)
2358 return 1;
2360 /* If low_pc values are equal, sort in reverse order of
2361 high_pc, so that the largest region comes first. */
2362 if (seq1->last_line->address < seq2->last_line->address)
2363 return 1;
2364 if (seq1->last_line->address > seq2->last_line->address)
2365 return -1;
2367 if (seq1->last_line->op_index < seq2->last_line->op_index)
2368 return 1;
2369 if (seq1->last_line->op_index > seq2->last_line->op_index)
2370 return -1;
2372 /* num_lines is initially an index, to make the sort stable. */
2373 if (seq1->num_lines < seq2->num_lines)
2374 return -1;
2375 if (seq1->num_lines > seq2->num_lines)
2376 return 1;
2377 return 0;
2380 /* Construct the line information table for quick lookup. */
2382 static bool
2383 build_line_info_table (struct line_info_table * table,
2384 struct line_sequence * seq)
2386 size_t amt;
2387 struct line_info **line_info_lookup;
2388 struct line_info *each_line;
2389 unsigned int num_lines;
2390 unsigned int line_index;
2392 if (seq->line_info_lookup != NULL)
2393 return true;
2395 /* Count the number of line information entries. We could do this while
2396 scanning the debug information, but some entries may be added via
2397 lcl_head without having a sequence handy to increment the number of
2398 lines. */
2399 num_lines = 0;
2400 for (each_line = seq->last_line; each_line; each_line = each_line->prev_line)
2401 num_lines++;
2403 seq->num_lines = num_lines;
2404 if (num_lines == 0)
2405 return true;
2407 /* Allocate space for the line information lookup table. */
2408 amt = sizeof (struct line_info*) * num_lines;
2409 line_info_lookup = (struct line_info**) bfd_alloc (table->abfd, amt);
2410 seq->line_info_lookup = line_info_lookup;
2411 if (line_info_lookup == NULL)
2412 return false;
2414 /* Create the line information lookup table. */
2415 line_index = num_lines;
2416 for (each_line = seq->last_line; each_line; each_line = each_line->prev_line)
2417 line_info_lookup[--line_index] = each_line;
2419 BFD_ASSERT (line_index == 0);
2420 return true;
2423 /* Sort the line sequences for quick lookup. */
2425 static bool
2426 sort_line_sequences (struct line_info_table* table)
2428 size_t amt;
2429 struct line_sequence *sequences;
2430 struct line_sequence *seq;
2431 unsigned int n = 0;
2432 unsigned int num_sequences = table->num_sequences;
2433 bfd_vma last_high_pc;
2435 if (num_sequences == 0)
2436 return true;
2438 /* Allocate space for an array of sequences. */
2439 amt = sizeof (struct line_sequence) * num_sequences;
2440 sequences = (struct line_sequence *) bfd_alloc (table->abfd, amt);
2441 if (sequences == NULL)
2442 return false;
2444 /* Copy the linked list into the array, freeing the original nodes. */
2445 seq = table->sequences;
2446 for (n = 0; n < num_sequences; n++)
2448 struct line_sequence* last_seq = seq;
2450 BFD_ASSERT (seq);
2451 sequences[n].low_pc = seq->low_pc;
2452 sequences[n].prev_sequence = NULL;
2453 sequences[n].last_line = seq->last_line;
2454 sequences[n].line_info_lookup = NULL;
2455 sequences[n].num_lines = n;
2456 seq = seq->prev_sequence;
2457 free (last_seq);
2459 BFD_ASSERT (seq == NULL);
2461 qsort (sequences, n, sizeof (struct line_sequence), compare_sequences);
2463 /* Make the list binary-searchable by trimming overlapping entries
2464 and removing nested entries. */
2465 num_sequences = 1;
2466 last_high_pc = sequences[0].last_line->address;
2467 for (n = 1; n < table->num_sequences; n++)
2469 if (sequences[n].low_pc < last_high_pc)
2471 if (sequences[n].last_line->address <= last_high_pc)
2472 /* Skip nested entries. */
2473 continue;
2475 /* Trim overlapping entries. */
2476 sequences[n].low_pc = last_high_pc;
2478 last_high_pc = sequences[n].last_line->address;
2479 if (n > num_sequences)
2481 /* Close up the gap. */
2482 sequences[num_sequences].low_pc = sequences[n].low_pc;
2483 sequences[num_sequences].last_line = sequences[n].last_line;
2485 num_sequences++;
2488 table->sequences = sequences;
2489 table->num_sequences = num_sequences;
2490 return true;
2493 /* Add directory to TABLE. CUR_DIR memory ownership is taken by TABLE. */
2495 static bool
2496 line_info_add_include_dir (struct line_info_table *table, char *cur_dir)
2498 if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
2500 char **tmp;
2501 size_t amt;
2503 amt = table->num_dirs + DIR_ALLOC_CHUNK;
2504 amt *= sizeof (char *);
2506 tmp = (char **) bfd_realloc (table->dirs, amt);
2507 if (tmp == NULL)
2508 return false;
2509 table->dirs = tmp;
2512 table->dirs[table->num_dirs++] = cur_dir;
2513 return true;
2516 static bool
2517 line_info_add_include_dir_stub (struct line_info_table *table, char *cur_dir,
2518 unsigned int dir ATTRIBUTE_UNUSED,
2519 unsigned int xtime ATTRIBUTE_UNUSED,
2520 unsigned int size ATTRIBUTE_UNUSED)
2522 return line_info_add_include_dir (table, cur_dir);
2525 /* Add file to TABLE. CUR_FILE memory ownership is taken by TABLE. */
2527 static bool
2528 line_info_add_file_name (struct line_info_table *table, char *cur_file,
2529 unsigned int dir, unsigned int xtime,
2530 unsigned int size)
2532 if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
2534 struct fileinfo *tmp;
2535 size_t amt;
2537 amt = table->num_files + FILE_ALLOC_CHUNK;
2538 amt *= sizeof (struct fileinfo);
2540 tmp = (struct fileinfo *) bfd_realloc (table->files, amt);
2541 if (tmp == NULL)
2542 return false;
2543 table->files = tmp;
2546 table->files[table->num_files].name = cur_file;
2547 table->files[table->num_files].dir = dir;
2548 table->files[table->num_files].time = xtime;
2549 table->files[table->num_files].size = size;
2550 table->num_files++;
2551 return true;
2554 /* Read directory or file name entry format, starting with byte of
2555 format count entries, ULEB128 pairs of entry formats, ULEB128 of
2556 entries count and the entries themselves in the described entry
2557 format. */
2559 static bool
2560 read_formatted_entries (struct comp_unit *unit, bfd_byte **bufp,
2561 bfd_byte *buf_end, struct line_info_table *table,
2562 bool (*callback) (struct line_info_table *table,
2563 char *cur_file,
2564 unsigned int dir,
2565 unsigned int time,
2566 unsigned int size))
2568 bfd *abfd = unit->abfd;
2569 bfd_byte format_count, formati;
2570 bfd_vma data_count, datai;
2571 bfd_byte *buf = *bufp;
2572 bfd_byte *format_header_data;
2574 format_count = read_1_byte (abfd, &buf, buf_end);
2575 format_header_data = buf;
2576 for (formati = 0; formati < format_count; formati++)
2578 _bfd_safe_read_leb128 (abfd, &buf, false, buf_end);
2579 _bfd_safe_read_leb128 (abfd, &buf, false, buf_end);
2582 data_count = _bfd_safe_read_leb128 (abfd, &buf, false, buf_end);
2583 if (format_count == 0 && data_count != 0)
2585 _bfd_error_handler (_("DWARF error: zero format count"));
2586 bfd_set_error (bfd_error_bad_value);
2587 return false;
2590 /* PR 22210. Paranoia check. Don't bother running the loop
2591 if we know that we are going to run out of buffer. */
2592 if (data_count > (bfd_vma) (buf_end - buf))
2594 _bfd_error_handler
2595 (_("DWARF error: data count (%" PRIx64 ") larger than buffer size"),
2596 (uint64_t) data_count);
2597 bfd_set_error (bfd_error_bad_value);
2598 return false;
2601 for (datai = 0; datai < data_count; datai++)
2603 bfd_byte *format = format_header_data;
2604 struct fileinfo fe;
2606 memset (&fe, 0, sizeof fe);
2607 for (formati = 0; formati < format_count; formati++)
2609 bfd_vma content_type, form;
2610 char *string_trash;
2611 char **stringp = &string_trash;
2612 unsigned int uint_trash, *uintp = &uint_trash;
2613 struct attribute attr;
2615 content_type = _bfd_safe_read_leb128 (abfd, &format, false, buf_end);
2616 switch (content_type)
2618 case DW_LNCT_path:
2619 stringp = &fe.name;
2620 break;
2621 case DW_LNCT_directory_index:
2622 uintp = &fe.dir;
2623 break;
2624 case DW_LNCT_timestamp:
2625 uintp = &fe.time;
2626 break;
2627 case DW_LNCT_size:
2628 uintp = &fe.size;
2629 break;
2630 case DW_LNCT_MD5:
2631 break;
2632 default:
2633 _bfd_error_handler
2634 (_("DWARF error: unknown format content type %" PRIu64),
2635 (uint64_t) content_type);
2636 bfd_set_error (bfd_error_bad_value);
2637 return false;
2640 form = _bfd_safe_read_leb128 (abfd, &format, false, buf_end);
2641 buf = read_attribute_value (&attr, form, 0, unit, buf, buf_end);
2642 if (buf == NULL)
2643 return false;
2644 switch (form)
2646 case DW_FORM_string:
2647 case DW_FORM_line_strp:
2648 case DW_FORM_strx:
2649 case DW_FORM_strx1:
2650 case DW_FORM_strx2:
2651 case DW_FORM_strx3:
2652 case DW_FORM_strx4:
2653 *stringp = attr.u.str;
2654 break;
2656 case DW_FORM_data1:
2657 case DW_FORM_data2:
2658 case DW_FORM_data4:
2659 case DW_FORM_data8:
2660 case DW_FORM_udata:
2661 *uintp = attr.u.val;
2662 break;
2664 case DW_FORM_data16:
2665 /* MD5 data is in the attr.blk, but we are ignoring those. */
2666 break;
2670 if (!callback (table, fe.name, fe.dir, fe.time, fe.size))
2671 return false;
2674 *bufp = buf;
2675 return true;
2678 /* Decode the line number information for UNIT. */
2680 static struct line_info_table*
2681 decode_line_info (struct comp_unit *unit)
2683 bfd *abfd = unit->abfd;
2684 struct dwarf2_debug *stash = unit->stash;
2685 struct dwarf2_debug_file *file = unit->file;
2686 struct line_info_table* table;
2687 bfd_byte *line_ptr;
2688 bfd_byte *line_end;
2689 struct line_head lh;
2690 unsigned int i, offset_size;
2691 char *cur_file, *cur_dir;
2692 unsigned char op_code, extended_op, adj_opcode;
2693 unsigned int exop_len;
2694 size_t amt;
2696 if (unit->line_offset == 0 && file->line_table)
2697 return file->line_table;
2699 if (! read_section (abfd, &stash->debug_sections[debug_line],
2700 file->syms, unit->line_offset,
2701 &file->dwarf_line_buffer, &file->dwarf_line_size))
2702 return NULL;
2704 if (file->dwarf_line_size < 16)
2706 _bfd_error_handler
2707 (_("DWARF error: line info section is too small (%" PRId64 ")"),
2708 (int64_t) file->dwarf_line_size);
2709 bfd_set_error (bfd_error_bad_value);
2710 return NULL;
2712 line_ptr = file->dwarf_line_buffer + unit->line_offset;
2713 line_end = file->dwarf_line_buffer + file->dwarf_line_size;
2715 /* Read in the prologue. */
2716 lh.total_length = read_4_bytes (abfd, &line_ptr, line_end);
2717 offset_size = 4;
2718 if (lh.total_length == 0xffffffff)
2720 lh.total_length = read_8_bytes (abfd, &line_ptr, line_end);
2721 offset_size = 8;
2723 else if (lh.total_length == 0 && unit->addr_size == 8)
2725 /* Handle (non-standard) 64-bit DWARF2 formats. */
2726 lh.total_length = read_4_bytes (abfd, &line_ptr, line_end);
2727 offset_size = 8;
2730 if (lh.total_length > (size_t) (line_end - line_ptr))
2732 _bfd_error_handler
2733 /* xgettext: c-format */
2734 (_("DWARF error: line info data is bigger (%#" PRIx64 ")"
2735 " than the space remaining in the section (%#lx)"),
2736 (uint64_t) lh.total_length, (unsigned long) (line_end - line_ptr));
2737 bfd_set_error (bfd_error_bad_value);
2738 return NULL;
2741 line_end = line_ptr + lh.total_length;
2743 lh.version = read_2_bytes (abfd, &line_ptr, line_end);
2744 if (lh.version < 2 || lh.version > 5)
2746 _bfd_error_handler
2747 (_("DWARF error: unhandled .debug_line version %d"), lh.version);
2748 bfd_set_error (bfd_error_bad_value);
2749 return NULL;
2752 if (line_ptr + offset_size + (lh.version >= 5 ? 8 : (lh.version >= 4 ? 6 : 5))
2753 >= line_end)
2755 _bfd_error_handler
2756 (_("DWARF error: ran out of room reading prologue"));
2757 bfd_set_error (bfd_error_bad_value);
2758 return NULL;
2761 if (lh.version >= 5)
2763 unsigned int segment_selector_size;
2765 /* Skip address size. */
2766 read_1_byte (abfd, &line_ptr, line_end);
2768 segment_selector_size = read_1_byte (abfd, &line_ptr, line_end);
2769 if (segment_selector_size != 0)
2771 _bfd_error_handler
2772 (_("DWARF error: line info unsupported segment selector size %u"),
2773 segment_selector_size);
2774 bfd_set_error (bfd_error_bad_value);
2775 return NULL;
2779 if (offset_size == 4)
2780 lh.prologue_length = read_4_bytes (abfd, &line_ptr, line_end);
2781 else
2782 lh.prologue_length = read_8_bytes (abfd, &line_ptr, line_end);
2784 lh.minimum_instruction_length = read_1_byte (abfd, &line_ptr, line_end);
2786 if (lh.version >= 4)
2787 lh.maximum_ops_per_insn = read_1_byte (abfd, &line_ptr, line_end);
2788 else
2789 lh.maximum_ops_per_insn = 1;
2791 if (lh.maximum_ops_per_insn == 0)
2793 _bfd_error_handler
2794 (_("DWARF error: invalid maximum operations per instruction"));
2795 bfd_set_error (bfd_error_bad_value);
2796 return NULL;
2799 lh.default_is_stmt = read_1_byte (abfd, &line_ptr, line_end);
2800 lh.line_base = read_1_signed_byte (abfd, &line_ptr, line_end);
2801 lh.line_range = read_1_byte (abfd, &line_ptr, line_end);
2802 lh.opcode_base = read_1_byte (abfd, &line_ptr, line_end);
2804 if (line_ptr + (lh.opcode_base - 1) >= line_end)
2806 _bfd_error_handler (_("DWARF error: ran out of room reading opcodes"));
2807 bfd_set_error (bfd_error_bad_value);
2808 return NULL;
2811 amt = lh.opcode_base * sizeof (unsigned char);
2812 lh.standard_opcode_lengths = (unsigned char *) bfd_alloc (abfd, amt);
2814 lh.standard_opcode_lengths[0] = 1;
2816 for (i = 1; i < lh.opcode_base; ++i)
2817 lh.standard_opcode_lengths[i] = read_1_byte (abfd, &line_ptr, line_end);
2819 amt = sizeof (struct line_info_table);
2820 table = (struct line_info_table *) bfd_alloc (abfd, amt);
2821 if (table == NULL)
2822 return NULL;
2823 table->abfd = abfd;
2824 table->comp_dir = unit->comp_dir;
2826 table->num_files = 0;
2827 table->files = NULL;
2829 table->num_dirs = 0;
2830 table->dirs = NULL;
2832 table->num_sequences = 0;
2833 table->sequences = NULL;
2835 table->lcl_head = NULL;
2837 if (lh.version >= 5)
2839 /* Read directory table. */
2840 if (!read_formatted_entries (unit, &line_ptr, line_end, table,
2841 line_info_add_include_dir_stub))
2842 goto fail;
2844 /* Read file name table. */
2845 if (!read_formatted_entries (unit, &line_ptr, line_end, table,
2846 line_info_add_file_name))
2847 goto fail;
2848 table->use_dir_and_file_0 = true;
2850 else
2852 /* Read directory table. */
2853 while ((cur_dir = read_string (&line_ptr, line_end)) != NULL)
2855 if (!line_info_add_include_dir (table, cur_dir))
2856 goto fail;
2859 /* Read file name table. */
2860 while ((cur_file = read_string (&line_ptr, line_end)) != NULL)
2862 unsigned int dir, xtime, size;
2864 dir = _bfd_safe_read_leb128 (abfd, &line_ptr, false, line_end);
2865 xtime = _bfd_safe_read_leb128 (abfd, &line_ptr, false, line_end);
2866 size = _bfd_safe_read_leb128 (abfd, &line_ptr, false, line_end);
2868 if (!line_info_add_file_name (table, cur_file, dir, xtime, size))
2869 goto fail;
2871 table->use_dir_and_file_0 = false;
2874 /* Read the statement sequences until there's nothing left. */
2875 while (line_ptr < line_end)
2877 /* State machine registers. */
2878 bfd_vma address = 0;
2879 unsigned char op_index = 0;
2880 char * filename = NULL;
2881 unsigned int line = 1;
2882 unsigned int column = 0;
2883 unsigned int discriminator = 0;
2884 int is_stmt = lh.default_is_stmt;
2885 int end_sequence = 0;
2886 unsigned int dir, xtime, size;
2887 /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
2888 compilers generate address sequences that are wildly out of
2889 order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
2890 for ia64-Linux). Thus, to determine the low and high
2891 address, we must compare on every DW_LNS_copy, etc. */
2892 bfd_vma low_pc = (bfd_vma) -1;
2893 bfd_vma high_pc = 0;
2895 if (table->num_files)
2897 if (table->use_dir_and_file_0)
2898 filename = concat_filename (table, 0);
2899 else
2900 filename = concat_filename (table, 1);
2903 /* Decode the table. */
2904 while (!end_sequence && line_ptr < line_end)
2906 op_code = read_1_byte (abfd, &line_ptr, line_end);
2908 if (op_code >= lh.opcode_base)
2910 /* Special operand. */
2911 adj_opcode = op_code - lh.opcode_base;
2912 if (lh.line_range == 0)
2913 goto line_fail;
2914 if (lh.maximum_ops_per_insn == 1)
2915 address += (adj_opcode / lh.line_range
2916 * lh.minimum_instruction_length);
2917 else
2919 address += ((op_index + adj_opcode / lh.line_range)
2920 / lh.maximum_ops_per_insn
2921 * lh.minimum_instruction_length);
2922 op_index = ((op_index + adj_opcode / lh.line_range)
2923 % lh.maximum_ops_per_insn);
2925 line += lh.line_base + (adj_opcode % lh.line_range);
2926 /* Append row to matrix using current values. */
2927 if (!add_line_info (table, address, op_index, filename,
2928 line, column, discriminator, 0))
2929 goto line_fail;
2930 discriminator = 0;
2931 if (address < low_pc)
2932 low_pc = address;
2933 if (address > high_pc)
2934 high_pc = address;
2936 else switch (op_code)
2938 case DW_LNS_extended_op:
2939 exop_len = _bfd_safe_read_leb128 (abfd, &line_ptr,
2940 false, line_end);
2941 extended_op = read_1_byte (abfd, &line_ptr, line_end);
2943 switch (extended_op)
2945 case DW_LNE_end_sequence:
2946 end_sequence = 1;
2947 if (!add_line_info (table, address, op_index, filename, line,
2948 column, discriminator, end_sequence))
2949 goto line_fail;
2950 discriminator = 0;
2951 if (address < low_pc)
2952 low_pc = address;
2953 if (address > high_pc)
2954 high_pc = address;
2955 if (!arange_add (unit, &unit->arange, &unit->file->trie_root,
2956 low_pc, high_pc))
2957 goto line_fail;
2958 break;
2959 case DW_LNE_set_address:
2960 address = read_address (unit, &line_ptr, line_end);
2961 op_index = 0;
2962 break;
2963 case DW_LNE_define_file:
2964 cur_file = read_string (&line_ptr, line_end);
2965 dir = _bfd_safe_read_leb128 (abfd, &line_ptr,
2966 false, line_end);
2967 xtime = _bfd_safe_read_leb128 (abfd, &line_ptr,
2968 false, line_end);
2969 size = _bfd_safe_read_leb128 (abfd, &line_ptr,
2970 false, line_end);
2971 if (!line_info_add_file_name (table, cur_file, dir,
2972 xtime, size))
2973 goto line_fail;
2974 break;
2975 case DW_LNE_set_discriminator:
2976 discriminator = _bfd_safe_read_leb128 (abfd, &line_ptr,
2977 false, line_end);
2978 break;
2979 case DW_LNE_HP_source_file_correlation:
2980 line_ptr += exop_len - 1;
2981 break;
2982 default:
2983 _bfd_error_handler
2984 (_("DWARF error: mangled line number section"));
2985 bfd_set_error (bfd_error_bad_value);
2986 line_fail:
2987 free (filename);
2988 goto fail;
2990 break;
2991 case DW_LNS_copy:
2992 if (!add_line_info (table, address, op_index,
2993 filename, line, column, discriminator, 0))
2994 goto line_fail;
2995 discriminator = 0;
2996 if (address < low_pc)
2997 low_pc = address;
2998 if (address > high_pc)
2999 high_pc = address;
3000 break;
3001 case DW_LNS_advance_pc:
3002 if (lh.maximum_ops_per_insn == 1)
3003 address += (lh.minimum_instruction_length
3004 * _bfd_safe_read_leb128 (abfd, &line_ptr,
3005 false, line_end));
3006 else
3008 bfd_vma adjust = _bfd_safe_read_leb128 (abfd, &line_ptr,
3009 false, line_end);
3010 address = ((op_index + adjust) / lh.maximum_ops_per_insn
3011 * lh.minimum_instruction_length);
3012 op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
3014 break;
3015 case DW_LNS_advance_line:
3016 line += _bfd_safe_read_leb128 (abfd, &line_ptr,
3017 true, line_end);
3018 break;
3019 case DW_LNS_set_file:
3021 unsigned int filenum;
3023 /* The file and directory tables are 0
3024 based, the references are 1 based. */
3025 filenum = _bfd_safe_read_leb128 (abfd, &line_ptr,
3026 false, line_end);
3027 free (filename);
3028 filename = concat_filename (table, filenum);
3029 break;
3031 case DW_LNS_set_column:
3032 column = _bfd_safe_read_leb128 (abfd, &line_ptr,
3033 false, line_end);
3034 break;
3035 case DW_LNS_negate_stmt:
3036 is_stmt = (!is_stmt);
3037 break;
3038 case DW_LNS_set_basic_block:
3039 break;
3040 case DW_LNS_const_add_pc:
3041 if (lh.line_range == 0)
3042 goto line_fail;
3043 if (lh.maximum_ops_per_insn == 1)
3044 address += (lh.minimum_instruction_length
3045 * ((255 - lh.opcode_base) / lh.line_range));
3046 else
3048 bfd_vma adjust = ((255 - lh.opcode_base) / lh.line_range);
3049 address += (lh.minimum_instruction_length
3050 * ((op_index + adjust)
3051 / lh.maximum_ops_per_insn));
3052 op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
3054 break;
3055 case DW_LNS_fixed_advance_pc:
3056 address += read_2_bytes (abfd, &line_ptr, line_end);
3057 op_index = 0;
3058 break;
3059 default:
3060 /* Unknown standard opcode, ignore it. */
3061 for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
3062 (void) _bfd_safe_read_leb128 (abfd, &line_ptr,
3063 false, line_end);
3064 break;
3068 free (filename);
3071 if (unit->line_offset == 0)
3072 file->line_table = table;
3073 if (sort_line_sequences (table))
3074 return table;
3076 fail:
3077 while (table->sequences != NULL)
3079 struct line_sequence* seq = table->sequences;
3080 table->sequences = table->sequences->prev_sequence;
3081 free (seq);
3083 free (table->files);
3084 free (table->dirs);
3085 return NULL;
3088 /* If ADDR is within TABLE set the output parameters and return TRUE,
3089 otherwise set *FILENAME_PTR to NULL and return FALSE.
3090 The parameters FILENAME_PTR, LINENUMBER_PTR and DISCRIMINATOR_PTR
3091 are pointers to the objects to be filled in. */
3093 static bool
3094 lookup_address_in_line_info_table (struct line_info_table *table,
3095 bfd_vma addr,
3096 const char **filename_ptr,
3097 unsigned int *linenumber_ptr,
3098 unsigned int *discriminator_ptr)
3100 struct line_sequence *seq = NULL;
3101 struct line_info *info;
3102 int low, high, mid;
3104 /* Binary search the array of sequences. */
3105 low = 0;
3106 high = table->num_sequences;
3107 while (low < high)
3109 mid = (low + high) / 2;
3110 seq = &table->sequences[mid];
3111 if (addr < seq->low_pc)
3112 high = mid;
3113 else if (addr >= seq->last_line->address)
3114 low = mid + 1;
3115 else
3116 break;
3119 /* Check for a valid sequence. */
3120 if (!seq || addr < seq->low_pc || addr >= seq->last_line->address)
3121 goto fail;
3123 if (!build_line_info_table (table, seq))
3124 goto fail;
3126 /* Binary search the array of line information. */
3127 low = 0;
3128 high = seq->num_lines;
3129 info = NULL;
3130 while (low < high)
3132 mid = (low + high) / 2;
3133 info = seq->line_info_lookup[mid];
3134 if (addr < info->address)
3135 high = mid;
3136 else if (addr >= seq->line_info_lookup[mid + 1]->address)
3137 low = mid + 1;
3138 else
3139 break;
3142 /* Check for a valid line information entry. */
3143 if (info
3144 && addr >= info->address
3145 && addr < seq->line_info_lookup[mid + 1]->address
3146 && !(info->end_sequence || info == seq->last_line))
3148 *filename_ptr = info->filename;
3149 *linenumber_ptr = info->line;
3150 if (discriminator_ptr)
3151 *discriminator_ptr = info->discriminator;
3152 return true;
3155 fail:
3156 *filename_ptr = NULL;
3157 return false;
3160 /* Read in the .debug_ranges section for future reference. */
3162 static bool
3163 read_debug_ranges (struct comp_unit * unit)
3165 struct dwarf2_debug *stash = unit->stash;
3166 struct dwarf2_debug_file *file = unit->file;
3168 return read_section (unit->abfd, &stash->debug_sections[debug_ranges],
3169 file->syms, 0,
3170 &file->dwarf_ranges_buffer, &file->dwarf_ranges_size);
3173 /* Read in the .debug_rnglists section for future reference. */
3175 static bool
3176 read_debug_rnglists (struct comp_unit * unit)
3178 struct dwarf2_debug *stash = unit->stash;
3179 struct dwarf2_debug_file *file = unit->file;
3181 return read_section (unit->abfd, &stash->debug_sections[debug_rnglists],
3182 file->syms, 0,
3183 &file->dwarf_rnglists_buffer, &file->dwarf_rnglists_size);
3186 /* Function table functions. */
3188 static int
3189 compare_lookup_funcinfos (const void * a, const void * b)
3191 const struct lookup_funcinfo * lookup1 = a;
3192 const struct lookup_funcinfo * lookup2 = b;
3194 if (lookup1->low_addr < lookup2->low_addr)
3195 return -1;
3196 if (lookup1->low_addr > lookup2->low_addr)
3197 return 1;
3198 if (lookup1->high_addr < lookup2->high_addr)
3199 return -1;
3200 if (lookup1->high_addr > lookup2->high_addr)
3201 return 1;
3203 if (lookup1->idx < lookup2->idx)
3204 return -1;
3205 if (lookup1->idx > lookup2->idx)
3206 return 1;
3207 return 0;
3210 static bool
3211 build_lookup_funcinfo_table (struct comp_unit * unit)
3213 struct lookup_funcinfo *lookup_funcinfo_table = unit->lookup_funcinfo_table;
3214 unsigned int number_of_functions = unit->number_of_functions;
3215 struct funcinfo *each;
3216 struct lookup_funcinfo *entry;
3217 size_t func_index;
3218 struct arange *range;
3219 bfd_vma low_addr, high_addr;
3221 if (lookup_funcinfo_table || number_of_functions == 0)
3222 return true;
3224 /* Create the function info lookup table. */
3225 lookup_funcinfo_table = (struct lookup_funcinfo *)
3226 bfd_malloc (number_of_functions * sizeof (struct lookup_funcinfo));
3227 if (lookup_funcinfo_table == NULL)
3228 return false;
3230 /* Populate the function info lookup table. */
3231 func_index = number_of_functions;
3232 for (each = unit->function_table; each; each = each->prev_func)
3234 entry = &lookup_funcinfo_table[--func_index];
3235 entry->funcinfo = each;
3236 entry->idx = func_index;
3238 /* Calculate the lowest and highest address for this function entry. */
3239 low_addr = entry->funcinfo->arange.low;
3240 high_addr = entry->funcinfo->arange.high;
3242 for (range = entry->funcinfo->arange.next; range; range = range->next)
3244 if (range->low < low_addr)
3245 low_addr = range->low;
3246 if (range->high > high_addr)
3247 high_addr = range->high;
3250 entry->low_addr = low_addr;
3251 entry->high_addr = high_addr;
3254 BFD_ASSERT (func_index == 0);
3256 /* Sort the function by address. */
3257 qsort (lookup_funcinfo_table,
3258 number_of_functions,
3259 sizeof (struct lookup_funcinfo),
3260 compare_lookup_funcinfos);
3262 /* Calculate the high watermark for each function in the lookup table. */
3263 high_addr = lookup_funcinfo_table[0].high_addr;
3264 for (func_index = 1; func_index < number_of_functions; func_index++)
3266 entry = &lookup_funcinfo_table[func_index];
3267 if (entry->high_addr > high_addr)
3268 high_addr = entry->high_addr;
3269 else
3270 entry->high_addr = high_addr;
3273 unit->lookup_funcinfo_table = lookup_funcinfo_table;
3274 return true;
3277 /* If ADDR is within UNIT's function tables, set FUNCTION_PTR, and return
3278 TRUE. Note that we need to find the function that has the smallest range
3279 that contains ADDR, to handle inlined functions without depending upon
3280 them being ordered in TABLE by increasing range. */
3282 static bool
3283 lookup_address_in_function_table (struct comp_unit *unit,
3284 bfd_vma addr,
3285 struct funcinfo **function_ptr)
3287 unsigned int number_of_functions = unit->number_of_functions;
3288 struct lookup_funcinfo* lookup_funcinfo = NULL;
3289 struct funcinfo* funcinfo = NULL;
3290 struct funcinfo* best_fit = NULL;
3291 bfd_vma best_fit_len = (bfd_vma) -1;
3292 bfd_size_type low, high, mid, first;
3293 struct arange *arange;
3295 if (number_of_functions == 0)
3296 return false;
3298 if (!build_lookup_funcinfo_table (unit))
3299 return false;
3301 if (unit->lookup_funcinfo_table[number_of_functions - 1].high_addr < addr)
3302 return false;
3304 /* Find the first function in the lookup table which may contain the
3305 specified address. */
3306 low = 0;
3307 high = number_of_functions;
3308 first = high;
3309 while (low < high)
3311 mid = (low + high) / 2;
3312 lookup_funcinfo = &unit->lookup_funcinfo_table[mid];
3313 if (addr < lookup_funcinfo->low_addr)
3314 high = mid;
3315 else if (addr >= lookup_funcinfo->high_addr)
3316 low = mid + 1;
3317 else
3318 high = first = mid;
3321 /* Find the 'best' match for the address. The prior algorithm defined the
3322 best match as the function with the smallest address range containing
3323 the specified address. This definition should probably be changed to the
3324 innermost inline routine containing the address, but right now we want
3325 to get the same results we did before. */
3326 while (first < number_of_functions)
3328 if (addr < unit->lookup_funcinfo_table[first].low_addr)
3329 break;
3330 funcinfo = unit->lookup_funcinfo_table[first].funcinfo;
3332 for (arange = &funcinfo->arange; arange; arange = arange->next)
3334 if (addr < arange->low || addr >= arange->high)
3335 continue;
3337 if (arange->high - arange->low < best_fit_len
3338 /* The following comparison is designed to return the same
3339 match as the previous algorithm for routines which have the
3340 same best fit length. */
3341 || (arange->high - arange->low == best_fit_len
3342 && funcinfo > best_fit))
3344 best_fit = funcinfo;
3345 best_fit_len = arange->high - arange->low;
3349 first++;
3352 if (!best_fit)
3353 return false;
3355 *function_ptr = best_fit;
3356 return true;
3359 /* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR
3360 and LINENUMBER_PTR, and return TRUE. */
3362 static bool
3363 lookup_symbol_in_function_table (struct comp_unit *unit,
3364 asymbol *sym,
3365 bfd_vma addr,
3366 const char **filename_ptr,
3367 unsigned int *linenumber_ptr)
3369 struct funcinfo* each;
3370 struct funcinfo* best_fit = NULL;
3371 bfd_vma best_fit_len = (bfd_vma) -1;
3372 struct arange *arange;
3373 const char *name = bfd_asymbol_name (sym);
3375 for (each = unit->function_table; each; each = each->prev_func)
3376 for (arange = &each->arange; arange; arange = arange->next)
3377 if (addr >= arange->low
3378 && addr < arange->high
3379 && arange->high - arange->low < best_fit_len
3380 && each->file
3381 && each->name
3382 && strstr (name, each->name) != NULL)
3384 best_fit = each;
3385 best_fit_len = arange->high - arange->low;
3388 if (best_fit)
3390 *filename_ptr = best_fit->file;
3391 *linenumber_ptr = best_fit->line;
3392 return true;
3395 return false;
3398 /* Variable table functions. */
3400 /* If SYM is within variable table of UNIT, set FILENAME_PTR and
3401 LINENUMBER_PTR, and return TRUE. */
3403 static bool
3404 lookup_symbol_in_variable_table (struct comp_unit *unit,
3405 asymbol *sym,
3406 bfd_vma addr,
3407 const char **filename_ptr,
3408 unsigned int *linenumber_ptr)
3410 struct varinfo* each;
3411 const char *name = bfd_asymbol_name (sym);
3413 for (each = unit->variable_table; each; each = each->prev_var)
3414 if (each->addr == addr
3415 && !each->stack
3416 && each->file != NULL
3417 && each->name != NULL
3418 && strstr (name, each->name) != NULL)
3419 break;
3421 if (each)
3423 *filename_ptr = each->file;
3424 *linenumber_ptr = each->line;
3425 return true;
3428 return false;
3431 static struct comp_unit *stash_comp_unit (struct dwarf2_debug *,
3432 struct dwarf2_debug_file *);
3433 static bool comp_unit_maybe_decode_line_info (struct comp_unit *);
3435 static bool
3436 find_abstract_instance (struct comp_unit *unit,
3437 struct attribute *attr_ptr,
3438 unsigned int recur_count,
3439 const char **pname,
3440 bool *is_linkage,
3441 char **filename_ptr,
3442 int *linenumber_ptr)
3444 bfd *abfd = unit->abfd;
3445 bfd_byte *info_ptr = NULL;
3446 bfd_byte *info_ptr_end;
3447 unsigned int abbrev_number, i;
3448 struct abbrev_info *abbrev;
3449 uint64_t die_ref = attr_ptr->u.val;
3450 struct attribute attr;
3452 if (recur_count == 100)
3454 _bfd_error_handler
3455 (_("DWARF error: abstract instance recursion detected"));
3456 bfd_set_error (bfd_error_bad_value);
3457 return false;
3460 /* DW_FORM_ref_addr can reference an entry in a different CU. It
3461 is an offset from the .debug_info section, not the current CU. */
3462 if (attr_ptr->form == DW_FORM_ref_addr)
3464 /* We only support DW_FORM_ref_addr within the same file, so
3465 any relocations should be resolved already. Check this by
3466 testing for a zero die_ref; There can't be a valid reference
3467 to the header of a .debug_info section.
3468 DW_FORM_ref_addr is an offset relative to .debug_info.
3469 Normally when using the GNU linker this is accomplished by
3470 emitting a symbolic reference to a label, because .debug_info
3471 sections are linked at zero. When there are multiple section
3472 groups containing .debug_info, as there might be in a
3473 relocatable object file, it would be reasonable to assume that
3474 a symbolic reference to a label in any .debug_info section
3475 might be used. Since we lay out multiple .debug_info
3476 sections at non-zero VMAs (see place_sections), and read
3477 them contiguously into dwarf_info_buffer, that means the
3478 reference is relative to dwarf_info_buffer. */
3479 size_t total;
3481 info_ptr = unit->file->dwarf_info_buffer;
3482 info_ptr_end = info_ptr + unit->file->dwarf_info_size;
3483 total = info_ptr_end - info_ptr;
3484 if (!die_ref)
3485 return true;
3486 else if (die_ref >= total)
3488 _bfd_error_handler
3489 (_("DWARF error: invalid abstract instance DIE ref"));
3490 bfd_set_error (bfd_error_bad_value);
3491 return false;
3493 info_ptr += die_ref;
3495 else if (attr_ptr->form == DW_FORM_GNU_ref_alt)
3497 bool first_time = unit->stash->alt.dwarf_info_buffer == NULL;
3499 info_ptr = read_alt_indirect_ref (unit, die_ref);
3500 if (first_time)
3501 unit->stash->alt.info_ptr = unit->stash->alt.dwarf_info_buffer;
3502 if (info_ptr == NULL)
3504 _bfd_error_handler
3505 (_("DWARF error: unable to read alt ref %" PRIu64),
3506 (uint64_t) die_ref);
3507 bfd_set_error (bfd_error_bad_value);
3508 return false;
3510 info_ptr_end = (unit->stash->alt.dwarf_info_buffer
3511 + unit->stash->alt.dwarf_info_size);
3512 if (unit->stash->alt.all_comp_units)
3513 unit = unit->stash->alt.all_comp_units;
3516 if (attr_ptr->form == DW_FORM_ref_addr
3517 || attr_ptr->form == DW_FORM_GNU_ref_alt)
3519 /* Now find the CU containing this pointer. */
3520 if (info_ptr >= unit->info_ptr_unit && info_ptr < unit->end_ptr)
3521 info_ptr_end = unit->end_ptr;
3522 else
3524 /* Check other CUs to see if they contain the abbrev. */
3525 struct comp_unit *u = NULL;
3526 struct addr_range range = { info_ptr, info_ptr };
3527 splay_tree_node v = splay_tree_lookup (unit->file->comp_unit_tree,
3528 (splay_tree_key)&range);
3529 if (v != NULL)
3530 u = (struct comp_unit *)v->value;
3532 if (attr_ptr->form == DW_FORM_ref_addr)
3533 while (u == NULL)
3535 u = stash_comp_unit (unit->stash, &unit->stash->f);
3536 if (u == NULL)
3537 break;
3538 if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr)
3539 break;
3540 u = NULL;
3543 if (attr_ptr->form == DW_FORM_GNU_ref_alt)
3544 while (u == NULL)
3546 u = stash_comp_unit (unit->stash, &unit->stash->alt);
3547 if (u == NULL)
3548 break;
3549 if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr)
3550 break;
3551 u = NULL;
3554 if (u == NULL)
3556 _bfd_error_handler
3557 (_("DWARF error: unable to locate abstract instance DIE ref %"
3558 PRIu64), (uint64_t) die_ref);
3559 bfd_set_error (bfd_error_bad_value);
3560 return false;
3562 unit = u;
3563 info_ptr_end = unit->end_ptr;
3566 else
3568 /* DW_FORM_ref1, DW_FORM_ref2, DW_FORM_ref4, DW_FORM_ref8 or
3569 DW_FORM_ref_udata. These are all references relative to the
3570 start of the current CU. */
3571 size_t total;
3573 info_ptr = unit->info_ptr_unit;
3574 info_ptr_end = unit->end_ptr;
3575 total = info_ptr_end - info_ptr;
3576 if (!die_ref || die_ref >= total)
3578 _bfd_error_handler
3579 (_("DWARF error: invalid abstract instance DIE ref"));
3580 bfd_set_error (bfd_error_bad_value);
3581 return false;
3583 info_ptr += die_ref;
3586 abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
3587 false, info_ptr_end);
3588 if (abbrev_number)
3590 abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
3591 if (! abbrev)
3593 _bfd_error_handler
3594 (_("DWARF error: could not find abbrev number %u"), abbrev_number);
3595 bfd_set_error (bfd_error_bad_value);
3596 return false;
3598 else
3600 for (i = 0; i < abbrev->num_attrs; ++i)
3602 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit,
3603 info_ptr, info_ptr_end);
3604 if (info_ptr == NULL)
3605 break;
3606 switch (attr.name)
3608 case DW_AT_name:
3609 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
3610 over DW_AT_name. */
3611 if (*pname == NULL && is_str_form (&attr))
3613 *pname = attr.u.str;
3614 if (mangle_style (unit->lang) == 0)
3615 *is_linkage = true;
3617 break;
3618 case DW_AT_specification:
3619 if (is_int_form (&attr)
3620 && !find_abstract_instance (unit, &attr, recur_count + 1,
3621 pname, is_linkage,
3622 filename_ptr, linenumber_ptr))
3623 return false;
3624 break;
3625 case DW_AT_linkage_name:
3626 case DW_AT_MIPS_linkage_name:
3627 /* PR 16949: Corrupt debug info can place
3628 non-string forms into these attributes. */
3629 if (is_str_form (&attr))
3631 *pname = attr.u.str;
3632 *is_linkage = true;
3634 break;
3635 case DW_AT_decl_file:
3636 if (!comp_unit_maybe_decode_line_info (unit))
3637 return false;
3638 if (is_int_form (&attr))
3640 free (*filename_ptr);
3641 *filename_ptr = concat_filename (unit->line_table,
3642 attr.u.val);
3644 break;
3645 case DW_AT_decl_line:
3646 if (is_int_form (&attr))
3647 *linenumber_ptr = attr.u.val;
3648 break;
3649 default:
3650 break;
3655 return true;
3658 static bool
3659 read_ranges (struct comp_unit *unit, struct arange *arange,
3660 struct trie_node **trie_root, uint64_t offset)
3662 bfd_byte *ranges_ptr;
3663 bfd_byte *ranges_end;
3664 bfd_vma base_address = unit->base_address;
3666 if (! unit->file->dwarf_ranges_buffer)
3668 if (! read_debug_ranges (unit))
3669 return false;
3672 if (offset > unit->file->dwarf_ranges_size)
3673 return false;
3674 ranges_ptr = unit->file->dwarf_ranges_buffer + offset;
3675 ranges_end = unit->file->dwarf_ranges_buffer + unit->file->dwarf_ranges_size;
3677 for (;;)
3679 bfd_vma low_pc;
3680 bfd_vma high_pc;
3682 /* PR 17512: file: 62cada7d. */
3683 if (2u * unit->addr_size > (size_t) (ranges_end - ranges_ptr))
3684 return false;
3686 low_pc = read_address (unit, &ranges_ptr, ranges_end);
3687 high_pc = read_address (unit, &ranges_ptr, ranges_end);
3689 if (low_pc == 0 && high_pc == 0)
3690 break;
3691 if (low_pc == -1UL && high_pc != -1UL)
3692 base_address = high_pc;
3693 else
3695 if (!arange_add (unit, arange, trie_root,
3696 base_address + low_pc, base_address + high_pc))
3697 return false;
3700 return true;
3703 static bool
3704 read_rnglists (struct comp_unit *unit, struct arange *arange,
3705 struct trie_node **trie_root, uint64_t offset)
3707 bfd_byte *rngs_ptr;
3708 bfd_byte *rngs_end;
3709 bfd_vma base_address = unit->base_address;
3710 bfd_vma low_pc;
3711 bfd_vma high_pc;
3712 bfd *abfd = unit->abfd;
3714 if (! unit->file->dwarf_rnglists_buffer)
3716 if (! read_debug_rnglists (unit))
3717 return false;
3720 rngs_ptr = unit->file->dwarf_rnglists_buffer + offset;
3721 if (rngs_ptr < unit->file->dwarf_rnglists_buffer)
3722 return false;
3723 rngs_end = unit->file->dwarf_rnglists_buffer;
3724 rngs_end += unit->file->dwarf_rnglists_size;
3726 for (;;)
3728 enum dwarf_range_list_entry rlet;
3730 if (rngs_ptr >= rngs_end)
3731 return false;
3733 rlet = read_1_byte (abfd, &rngs_ptr, rngs_end);
3735 switch (rlet)
3737 case DW_RLE_end_of_list:
3738 return true;
3740 case DW_RLE_base_address:
3741 if (unit->addr_size > (size_t) (rngs_end - rngs_ptr))
3742 return false;
3743 base_address = read_address (unit, &rngs_ptr, rngs_end);
3744 continue;
3746 case DW_RLE_start_length:
3747 if (unit->addr_size > (size_t) (rngs_end - rngs_ptr))
3748 return false;
3749 low_pc = read_address (unit, &rngs_ptr, rngs_end);
3750 high_pc = low_pc;
3751 high_pc += _bfd_safe_read_leb128 (abfd, &rngs_ptr,
3752 false, rngs_end);
3753 break;
3755 case DW_RLE_offset_pair:
3756 low_pc = base_address;
3757 low_pc += _bfd_safe_read_leb128 (abfd, &rngs_ptr,
3758 false, rngs_end);
3759 high_pc = base_address;
3760 high_pc += _bfd_safe_read_leb128 (abfd, &rngs_ptr,
3761 false, rngs_end);
3762 break;
3764 case DW_RLE_start_end:
3765 if (2u * unit->addr_size > (size_t) (rngs_end - rngs_ptr))
3766 return false;
3767 low_pc = read_address (unit, &rngs_ptr, rngs_end);
3768 high_pc = read_address (unit, &rngs_ptr, rngs_end);
3769 break;
3771 /* TODO x-variants need .debug_addr support used for split-dwarf. */
3772 case DW_RLE_base_addressx:
3773 case DW_RLE_startx_endx:
3774 case DW_RLE_startx_length:
3775 default:
3776 return false;
3779 if (!arange_add (unit, arange, trie_root, low_pc, high_pc))
3780 return false;
3784 static bool
3785 read_rangelist (struct comp_unit *unit, struct arange *arange,
3786 struct trie_node **trie_root, uint64_t offset)
3788 if (unit->version <= 4)
3789 return read_ranges (unit, arange, trie_root, offset);
3790 else
3791 return read_rnglists (unit, arange, trie_root, offset);
3794 static struct funcinfo *
3795 lookup_func_by_offset (uint64_t offset, struct funcinfo * table)
3797 for (; table != NULL; table = table->prev_func)
3798 if (table->unit_offset == offset)
3799 return table;
3800 return NULL;
3803 static struct varinfo *
3804 lookup_var_by_offset (uint64_t offset, struct varinfo * table)
3806 while (table)
3808 if (table->unit_offset == offset)
3809 return table;
3810 table = table->prev_var;
3813 return NULL;
3817 /* DWARF2 Compilation unit functions. */
3819 static struct funcinfo *
3820 reverse_funcinfo_list (struct funcinfo *head)
3822 struct funcinfo *rhead;
3823 struct funcinfo *temp;
3825 for (rhead = NULL; head; head = temp)
3827 temp = head->prev_func;
3828 head->prev_func = rhead;
3829 rhead = head;
3831 return rhead;
3834 static struct varinfo *
3835 reverse_varinfo_list (struct varinfo *head)
3837 struct varinfo *rhead;
3838 struct varinfo *temp;
3840 for (rhead = NULL; head; head = temp)
3842 temp = head->prev_var;
3843 head->prev_var = rhead;
3844 rhead = head;
3846 return rhead;
3849 /* Scan over each die in a comp. unit looking for functions to add
3850 to the function table and variables to the variable table. */
3852 static bool
3853 scan_unit_for_symbols (struct comp_unit *unit)
3855 bfd *abfd = unit->abfd;
3856 bfd_byte *info_ptr = unit->first_child_die_ptr;
3857 bfd_byte *info_ptr_end = unit->end_ptr;
3858 int nesting_level = 0;
3859 struct nest_funcinfo
3861 struct funcinfo *func;
3862 } *nested_funcs;
3863 int nested_funcs_size;
3864 struct funcinfo *last_func;
3865 struct varinfo *last_var;
3867 /* Maintain a stack of in-scope functions and inlined functions, which we
3868 can use to set the caller_func field. */
3869 nested_funcs_size = 32;
3870 nested_funcs = (struct nest_funcinfo *)
3871 bfd_malloc (nested_funcs_size * sizeof (*nested_funcs));
3872 if (nested_funcs == NULL)
3873 return false;
3874 nested_funcs[nesting_level].func = 0;
3876 /* PR 27484: We must scan the DIEs twice. The first time we look for
3877 function and variable tags and accumulate them into their respective
3878 tables. The second time through we process the attributes of the
3879 functions/variables and augment the table entries. */
3880 while (nesting_level >= 0)
3882 unsigned int abbrev_number, i;
3883 struct abbrev_info *abbrev;
3884 struct funcinfo *func;
3885 struct varinfo *var;
3886 uint64_t current_offset;
3888 /* PR 17512: file: 9f405d9d. */
3889 if (info_ptr >= info_ptr_end)
3890 goto fail;
3892 current_offset = info_ptr - unit->info_ptr_unit;
3893 abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
3894 false, info_ptr_end);
3895 if (abbrev_number == 0)
3897 nesting_level--;
3898 continue;
3901 abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
3902 if (! abbrev)
3904 static unsigned int previous_failed_abbrev = -1U;
3906 /* Avoid multiple reports of the same missing abbrev. */
3907 if (abbrev_number != previous_failed_abbrev)
3909 _bfd_error_handler
3910 (_("DWARF error: could not find abbrev number %u"),
3911 abbrev_number);
3912 previous_failed_abbrev = abbrev_number;
3914 bfd_set_error (bfd_error_bad_value);
3915 goto fail;
3918 if (abbrev->tag == DW_TAG_subprogram
3919 || abbrev->tag == DW_TAG_entry_point
3920 || abbrev->tag == DW_TAG_inlined_subroutine)
3922 size_t amt = sizeof (struct funcinfo);
3924 var = NULL;
3925 func = (struct funcinfo *) bfd_zalloc (abfd, amt);
3926 if (func == NULL)
3927 goto fail;
3928 func->tag = abbrev->tag;
3929 func->prev_func = unit->function_table;
3930 func->unit_offset = current_offset;
3931 unit->function_table = func;
3932 unit->number_of_functions++;
3933 BFD_ASSERT (!unit->cached);
3935 if (func->tag == DW_TAG_inlined_subroutine)
3936 for (i = nesting_level; i-- != 0; )
3937 if (nested_funcs[i].func)
3939 func->caller_func = nested_funcs[i].func;
3940 break;
3942 nested_funcs[nesting_level].func = func;
3944 else
3946 func = NULL;
3947 if (abbrev->tag == DW_TAG_variable
3948 || abbrev->tag == DW_TAG_member)
3950 size_t amt = sizeof (struct varinfo);
3952 var = (struct varinfo *) bfd_zalloc (abfd, amt);
3953 if (var == NULL)
3954 goto fail;
3955 var->tag = abbrev->tag;
3956 var->stack = true;
3957 var->prev_var = unit->variable_table;
3958 unit->variable_table = var;
3959 var->unit_offset = current_offset;
3960 /* PR 18205: Missing debug information can cause this
3961 var to be attached to an already cached unit. */
3963 else
3964 var = NULL;
3966 /* No inline function in scope at this nesting level. */
3967 nested_funcs[nesting_level].func = 0;
3970 for (i = 0; i < abbrev->num_attrs; ++i)
3972 struct attribute attr;
3974 info_ptr = read_attribute (&attr, &abbrev->attrs[i],
3975 unit, info_ptr, info_ptr_end);
3976 if (info_ptr == NULL)
3977 goto fail;
3980 if (abbrev->has_children)
3982 nesting_level++;
3984 if (nesting_level >= nested_funcs_size)
3986 struct nest_funcinfo *tmp;
3988 nested_funcs_size *= 2;
3989 tmp = (struct nest_funcinfo *)
3990 bfd_realloc (nested_funcs,
3991 nested_funcs_size * sizeof (*nested_funcs));
3992 if (tmp == NULL)
3993 goto fail;
3994 nested_funcs = tmp;
3996 nested_funcs[nesting_level].func = 0;
4000 unit->function_table = reverse_funcinfo_list (unit->function_table);
4001 unit->variable_table = reverse_varinfo_list (unit->variable_table);
4003 /* This is the second pass over the abbrevs. */
4004 info_ptr = unit->first_child_die_ptr;
4005 nesting_level = 0;
4007 last_func = NULL;
4008 last_var = NULL;
4010 while (nesting_level >= 0)
4012 unsigned int abbrev_number, i;
4013 struct abbrev_info *abbrev;
4014 struct attribute attr;
4015 struct funcinfo *func;
4016 struct varinfo *var;
4017 bfd_vma low_pc = 0;
4018 bfd_vma high_pc = 0;
4019 bool high_pc_relative = false;
4020 uint64_t current_offset;
4022 /* PR 17512: file: 9f405d9d. */
4023 if (info_ptr >= info_ptr_end)
4024 goto fail;
4026 current_offset = info_ptr - unit->info_ptr_unit;
4027 abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
4028 false, info_ptr_end);
4029 if (! abbrev_number)
4031 nesting_level--;
4032 continue;
4035 abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
4036 /* This should have been handled above. */
4037 BFD_ASSERT (abbrev != NULL);
4039 func = NULL;
4040 var = NULL;
4041 if (abbrev->tag == DW_TAG_subprogram
4042 || abbrev->tag == DW_TAG_entry_point
4043 || abbrev->tag == DW_TAG_inlined_subroutine)
4045 if (last_func
4046 && last_func->prev_func
4047 && last_func->prev_func->unit_offset == current_offset)
4048 func = last_func->prev_func;
4049 else
4050 func = lookup_func_by_offset (current_offset, unit->function_table);
4052 if (func == NULL)
4053 goto fail;
4055 last_func = func;
4057 else if (abbrev->tag == DW_TAG_variable
4058 || abbrev->tag == DW_TAG_member)
4060 if (last_var
4061 && last_var->prev_var
4062 && last_var->prev_var->unit_offset == current_offset)
4063 var = last_var->prev_var;
4064 else
4065 var = lookup_var_by_offset (current_offset, unit->variable_table);
4067 if (var == NULL)
4068 goto fail;
4070 last_var = var;
4073 for (i = 0; i < abbrev->num_attrs; ++i)
4075 info_ptr = read_attribute (&attr, &abbrev->attrs[i],
4076 unit, info_ptr, info_ptr_end);
4077 if (info_ptr == NULL)
4078 goto fail;
4080 if (func)
4082 switch (attr.name)
4084 case DW_AT_call_file:
4085 if (is_int_form (&attr))
4087 free (func->caller_file);
4088 func->caller_file = concat_filename (unit->line_table,
4089 attr.u.val);
4091 break;
4093 case DW_AT_call_line:
4094 if (is_int_form (&attr))
4095 func->caller_line = attr.u.val;
4096 break;
4098 case DW_AT_abstract_origin:
4099 case DW_AT_specification:
4100 if (is_int_form (&attr)
4101 && !find_abstract_instance (unit, &attr, 0,
4102 &func->name,
4103 &func->is_linkage,
4104 &func->file,
4105 &func->line))
4106 goto fail;
4107 break;
4109 case DW_AT_name:
4110 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
4111 over DW_AT_name. */
4112 if (func->name == NULL && is_str_form (&attr))
4114 func->name = attr.u.str;
4115 if (mangle_style (unit->lang) == 0)
4116 func->is_linkage = true;
4118 break;
4120 case DW_AT_linkage_name:
4121 case DW_AT_MIPS_linkage_name:
4122 /* PR 16949: Corrupt debug info can place
4123 non-string forms into these attributes. */
4124 if (is_str_form (&attr))
4126 func->name = attr.u.str;
4127 func->is_linkage = true;
4129 break;
4131 case DW_AT_low_pc:
4132 if (is_int_form (&attr))
4133 low_pc = attr.u.val;
4134 break;
4136 case DW_AT_high_pc:
4137 if (is_int_form (&attr))
4139 high_pc = attr.u.val;
4140 high_pc_relative = attr.form != DW_FORM_addr;
4142 break;
4144 case DW_AT_ranges:
4145 if (is_int_form (&attr)
4146 && !read_rangelist (unit, &func->arange,
4147 &unit->file->trie_root, attr.u.val))
4148 goto fail;
4149 break;
4151 case DW_AT_decl_file:
4152 if (is_int_form (&attr))
4154 free (func->file);
4155 func->file = concat_filename (unit->line_table,
4156 attr.u.val);
4158 break;
4160 case DW_AT_decl_line:
4161 if (is_int_form (&attr))
4162 func->line = attr.u.val;
4163 break;
4165 default:
4166 break;
4169 else if (var)
4171 switch (attr.name)
4173 case DW_AT_specification:
4174 if (is_int_form (&attr) && attr.u.val)
4176 bool is_linkage;
4177 if (!find_abstract_instance (unit, &attr, 0,
4178 &var->name,
4179 &is_linkage,
4180 &var->file,
4181 &var->line))
4183 _bfd_error_handler (_("DWARF error: could not find "
4184 "variable specification "
4185 "at offset 0x%lx"),
4186 (unsigned long) attr.u.val);
4187 break;
4190 break;
4192 case DW_AT_name:
4193 if (is_str_form (&attr))
4194 var->name = attr.u.str;
4195 break;
4197 case DW_AT_decl_file:
4198 if (is_int_form (&attr))
4200 free (var->file);
4201 var->file = concat_filename (unit->line_table,
4202 attr.u.val);
4204 break;
4206 case DW_AT_decl_line:
4207 if (is_int_form (&attr))
4208 var->line = attr.u.val;
4209 break;
4211 case DW_AT_external:
4212 if (is_int_form (&attr) && attr.u.val != 0)
4213 var->stack = false;
4214 break;
4216 case DW_AT_location:
4217 switch (attr.form)
4219 case DW_FORM_block:
4220 case DW_FORM_block1:
4221 case DW_FORM_block2:
4222 case DW_FORM_block4:
4223 case DW_FORM_exprloc:
4224 if (attr.u.blk->data != NULL
4225 && *attr.u.blk->data == DW_OP_addr)
4227 var->stack = false;
4229 /* Verify that DW_OP_addr is the only opcode in the
4230 location, in which case the block size will be 1
4231 plus the address size. */
4232 /* ??? For TLS variables, gcc can emit
4233 DW_OP_addr <addr> DW_OP_GNU_push_tls_address
4234 which we don't handle here yet. */
4235 if (attr.u.blk->size == unit->addr_size + 1U)
4236 var->addr = bfd_get (unit->addr_size * 8,
4237 unit->abfd,
4238 attr.u.blk->data + 1);
4240 break;
4242 default:
4243 break;
4245 break;
4247 default:
4248 break;
4253 if (abbrev->has_children)
4254 nesting_level++;
4256 if (high_pc_relative)
4257 high_pc += low_pc;
4259 if (func && high_pc != 0)
4261 if (!arange_add (unit, &func->arange, &unit->file->trie_root,
4262 low_pc, high_pc))
4263 goto fail;
4267 unit->function_table = reverse_funcinfo_list (unit->function_table);
4268 unit->variable_table = reverse_varinfo_list (unit->variable_table);
4270 free (nested_funcs);
4271 return true;
4273 fail:
4274 free (nested_funcs);
4275 return false;
4278 /* Read the attributes of the form strx and addrx. */
4280 static void
4281 reread_attribute (struct comp_unit *unit,
4282 struct attribute *attr,
4283 bfd_vma *low_pc,
4284 bfd_vma *high_pc,
4285 bool *high_pc_relative,
4286 bool compunit)
4288 if (is_strx_form (attr->form))
4289 attr->u.str = (char *) read_indexed_string (attr->u.val, unit);
4290 if (is_addrx_form (attr->form))
4291 attr->u.val = read_indexed_address (attr->u.val, unit);
4293 switch (attr->name)
4295 case DW_AT_stmt_list:
4296 unit->stmtlist = 1;
4297 unit->line_offset = attr->u.val;
4298 break;
4300 case DW_AT_name:
4301 if (is_str_form (attr))
4302 unit->name = attr->u.str;
4303 break;
4305 case DW_AT_low_pc:
4306 *low_pc = attr->u.val;
4307 if (compunit)
4308 unit->base_address = *low_pc;
4309 break;
4311 case DW_AT_high_pc:
4312 *high_pc = attr->u.val;
4313 *high_pc_relative = attr->form != DW_FORM_addr;
4314 break;
4316 case DW_AT_ranges:
4317 if (!read_rangelist (unit, &unit->arange,
4318 &unit->file->trie_root, attr->u.val))
4319 return;
4320 break;
4322 case DW_AT_comp_dir:
4324 char *comp_dir = attr->u.str;
4326 if (!is_str_form (attr))
4328 _bfd_error_handler
4329 (_("DWARF error: DW_AT_comp_dir attribute encountered "
4330 "with a non-string form"));
4331 comp_dir = NULL;
4334 if (comp_dir)
4336 char *cp = strchr (comp_dir, ':');
4338 if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
4339 comp_dir = cp + 1;
4341 unit->comp_dir = comp_dir;
4342 break;
4345 case DW_AT_language:
4346 unit->lang = attr->u.val;
4347 default:
4348 break;
4352 /* Parse a DWARF2 compilation unit starting at INFO_PTR. UNIT_LENGTH
4353 includes the compilation unit header that proceeds the DIE's, but
4354 does not include the length field that precedes each compilation
4355 unit header. END_PTR points one past the end of this comp unit.
4356 OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
4358 This routine does not read the whole compilation unit; only enough
4359 to get to the line number information for the compilation unit. */
4361 static struct comp_unit *
4362 parse_comp_unit (struct dwarf2_debug *stash,
4363 struct dwarf2_debug_file *file,
4364 bfd_byte *info_ptr,
4365 bfd_vma unit_length,
4366 bfd_byte *info_ptr_unit,
4367 unsigned int offset_size)
4369 struct comp_unit* unit;
4370 unsigned int version;
4371 uint64_t abbrev_offset = 0;
4372 /* Initialize it just to avoid a GCC false warning. */
4373 unsigned int addr_size = -1;
4374 struct abbrev_info** abbrevs;
4375 unsigned int abbrev_number, i;
4376 struct abbrev_info *abbrev;
4377 struct attribute attr;
4378 bfd_byte *end_ptr = info_ptr + unit_length;
4379 size_t amt;
4380 bfd_vma low_pc = 0;
4381 bfd_vma high_pc = 0;
4382 bfd *abfd = file->bfd_ptr;
4383 bool high_pc_relative = false;
4384 enum dwarf_unit_type unit_type;
4385 struct attribute *str_addrp = NULL;
4386 size_t str_count = 0;
4387 size_t str_alloc = 0;
4388 bool compunit_flag = false;
4390 version = read_2_bytes (abfd, &info_ptr, end_ptr);
4391 if (version < 2 || version > 5)
4393 /* PR 19872: A version number of 0 probably means that there is padding
4394 at the end of the .debug_info section. Gold puts it there when
4395 performing an incremental link, for example. So do not generate
4396 an error, just return a NULL. */
4397 if (version)
4399 _bfd_error_handler
4400 (_("DWARF error: found dwarf version '%u', this reader"
4401 " only handles version 2, 3, 4 and 5 information"), version);
4402 bfd_set_error (bfd_error_bad_value);
4404 return NULL;
4407 if (version < 5)
4408 unit_type = DW_UT_compile;
4409 else
4411 unit_type = read_1_byte (abfd, &info_ptr, end_ptr);
4412 addr_size = read_1_byte (abfd, &info_ptr, end_ptr);
4415 BFD_ASSERT (offset_size == 4 || offset_size == 8);
4416 if (offset_size == 4)
4417 abbrev_offset = read_4_bytes (abfd, &info_ptr, end_ptr);
4418 else
4419 abbrev_offset = read_8_bytes (abfd, &info_ptr, end_ptr);
4421 if (version < 5)
4422 addr_size = read_1_byte (abfd, &info_ptr, end_ptr);
4424 switch (unit_type)
4426 case DW_UT_type:
4427 /* Skip type signature. */
4428 info_ptr += 8;
4430 /* Skip type offset. */
4431 info_ptr += offset_size;
4432 break;
4434 case DW_UT_skeleton:
4435 /* Skip DWO_id field. */
4436 info_ptr += 8;
4437 break;
4439 default:
4440 break;
4443 if (addr_size > sizeof (bfd_vma))
4445 _bfd_error_handler
4446 /* xgettext: c-format */
4447 (_("DWARF error: found address size '%u', this reader"
4448 " can not handle sizes greater than '%u'"),
4449 addr_size,
4450 (unsigned int) sizeof (bfd_vma));
4451 bfd_set_error (bfd_error_bad_value);
4452 return NULL;
4455 if (addr_size != 2 && addr_size != 4 && addr_size != 8)
4457 _bfd_error_handler
4458 ("DWARF error: found address size '%u', this reader"
4459 " can only handle address sizes '2', '4' and '8'", addr_size);
4460 bfd_set_error (bfd_error_bad_value);
4461 return NULL;
4464 /* Read the abbrevs for this compilation unit into a table. */
4465 abbrevs = read_abbrevs (abfd, abbrev_offset, stash, file);
4466 if (! abbrevs)
4467 return NULL;
4469 abbrev_number = _bfd_safe_read_leb128 (abfd, &info_ptr,
4470 false, end_ptr);
4471 if (! abbrev_number)
4473 /* PR 19872: An abbrev number of 0 probably means that there is padding
4474 at the end of the .debug_abbrev section. Gold puts it there when
4475 performing an incremental link, for example. So do not generate
4476 an error, just return a NULL. */
4477 return NULL;
4480 abbrev = lookup_abbrev (abbrev_number, abbrevs);
4481 if (! abbrev)
4483 _bfd_error_handler (_("DWARF error: could not find abbrev number %u"),
4484 abbrev_number);
4485 bfd_set_error (bfd_error_bad_value);
4486 return NULL;
4489 amt = sizeof (struct comp_unit);
4490 unit = (struct comp_unit *) bfd_zalloc (abfd, amt);
4491 if (unit == NULL)
4492 return NULL;
4493 unit->abfd = abfd;
4494 unit->version = version;
4495 unit->addr_size = addr_size;
4496 unit->offset_size = offset_size;
4497 unit->abbrevs = abbrevs;
4498 unit->end_ptr = end_ptr;
4499 unit->stash = stash;
4500 unit->file = file;
4501 unit->info_ptr_unit = info_ptr_unit;
4503 if (abbrev->tag == DW_TAG_compile_unit)
4504 compunit_flag = true;
4506 for (i = 0; i < abbrev->num_attrs; ++i)
4508 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr, end_ptr);
4509 if (info_ptr == NULL)
4510 goto err_exit;
4512 /* Identify attributes of the form strx* and addrx* which come before
4513 DW_AT_str_offsets_base and DW_AT_addr_base respectively in the CU.
4514 Store the attributes in an array and process them later. */
4515 if ((unit->dwarf_str_offset == 0 && is_strx_form (attr.form))
4516 || (unit->dwarf_addr_offset == 0 && is_addrx_form (attr.form)))
4518 if (str_count <= str_alloc)
4520 str_alloc = 2 * str_alloc + 200;
4521 str_addrp = bfd_realloc (str_addrp,
4522 str_alloc * sizeof (*str_addrp));
4523 if (str_addrp == NULL)
4524 goto err_exit;
4526 str_addrp[str_count] = attr;
4527 str_count++;
4528 continue;
4531 /* Store the data if it is of an attribute we want to keep in a
4532 partial symbol table. */
4533 switch (attr.name)
4535 case DW_AT_stmt_list:
4536 if (is_int_form (&attr))
4538 unit->stmtlist = 1;
4539 unit->line_offset = attr.u.val;
4541 break;
4543 case DW_AT_name:
4544 if (is_str_form (&attr))
4545 unit->name = attr.u.str;
4546 break;
4548 case DW_AT_low_pc:
4549 if (is_int_form (&attr))
4551 low_pc = attr.u.val;
4552 /* If the compilation unit DIE has a DW_AT_low_pc attribute,
4553 this is the base address to use when reading location
4554 lists or range lists. */
4555 if (compunit_flag)
4556 unit->base_address = low_pc;
4558 break;
4560 case DW_AT_high_pc:
4561 if (is_int_form (&attr))
4563 high_pc = attr.u.val;
4564 high_pc_relative = attr.form != DW_FORM_addr;
4566 break;
4568 case DW_AT_ranges:
4569 if (is_int_form (&attr)
4570 && !read_rangelist (unit, &unit->arange,
4571 &unit->file->trie_root, attr.u.val))
4572 goto err_exit;
4573 break;
4575 case DW_AT_comp_dir:
4577 char *comp_dir = attr.u.str;
4579 /* PR 17512: file: 1fe726be. */
4580 if (!is_str_form (&attr))
4582 _bfd_error_handler
4583 (_("DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"));
4584 comp_dir = NULL;
4587 if (comp_dir)
4589 /* Irix 6.2 native cc prepends <machine>.: to the compilation
4590 directory, get rid of it. */
4591 char *cp = strchr (comp_dir, ':');
4593 if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
4594 comp_dir = cp + 1;
4596 unit->comp_dir = comp_dir;
4597 break;
4600 case DW_AT_language:
4601 if (is_int_form (&attr))
4602 unit->lang = attr.u.val;
4603 break;
4605 case DW_AT_addr_base:
4606 unit->dwarf_addr_offset = attr.u.val;
4607 break;
4609 case DW_AT_str_offsets_base:
4610 unit->dwarf_str_offset = attr.u.val;
4611 break;
4613 default:
4614 break;
4618 for (i = 0; i < str_count; ++i)
4619 reread_attribute (unit, &str_addrp[i], &low_pc, &high_pc,
4620 &high_pc_relative, compunit_flag);
4622 if (high_pc_relative)
4623 high_pc += low_pc;
4624 if (high_pc != 0)
4626 if (!arange_add (unit, &unit->arange, &unit->file->trie_root,
4627 low_pc, high_pc))
4628 goto err_exit;
4631 unit->first_child_die_ptr = info_ptr;
4633 free (str_addrp);
4634 return unit;
4636 err_exit:
4637 unit->error = 1;
4638 free (str_addrp);
4639 return NULL;
4642 /* Return TRUE if UNIT may contain the address given by ADDR. When
4643 there are functions written entirely with inline asm statements, the
4644 range info in the compilation unit header may not be correct. We
4645 need to consult the line info table to see if a compilation unit
4646 really contains the given address. */
4648 static bool
4649 comp_unit_may_contain_address (struct comp_unit *unit, bfd_vma addr)
4651 struct arange *arange;
4653 if (unit->error)
4654 return false;
4656 if (unit->arange.high == 0 /* No ranges have been computed yet. */
4657 || unit->line_table == NULL) /* The line info table has not been loaded. */
4658 return true;
4660 for (arange = &unit->arange; arange != NULL; arange = arange->next)
4661 if (addr >= arange->low && addr < arange->high)
4662 return true;
4664 return false;
4667 /* If UNIT contains ADDR, set the output parameters to the values for
4668 the line containing ADDR and return TRUE. Otherwise return FALSE.
4669 The output parameters, FILENAME_PTR, FUNCTION_PTR, and
4670 LINENUMBER_PTR, are pointers to the objects to be filled in. */
4672 static bool
4673 comp_unit_find_nearest_line (struct comp_unit *unit,
4674 bfd_vma addr,
4675 const char **filename_ptr,
4676 struct funcinfo **function_ptr,
4677 unsigned int *linenumber_ptr,
4678 unsigned int *discriminator_ptr)
4680 bool line_p, func_p;
4682 if (!comp_unit_maybe_decode_line_info (unit))
4683 return false;
4685 *function_ptr = NULL;
4686 func_p = lookup_address_in_function_table (unit, addr, function_ptr);
4688 if (func_p && (*function_ptr)->tag == DW_TAG_inlined_subroutine)
4689 unit->stash->inliner_chain = *function_ptr;
4691 line_p = lookup_address_in_line_info_table (unit->line_table, addr,
4692 filename_ptr,
4693 linenumber_ptr,
4694 discriminator_ptr);
4695 return line_p || func_p;
4698 /* Check to see if line info is already decoded in a comp_unit.
4699 If not, decode it. Returns TRUE if no errors were encountered;
4700 FALSE otherwise. */
4702 static bool
4703 comp_unit_maybe_decode_line_info (struct comp_unit *unit)
4705 if (unit->error)
4706 return false;
4708 if (! unit->line_table)
4710 if (! unit->stmtlist)
4712 unit->error = 1;
4713 return false;
4716 unit->line_table = decode_line_info (unit);
4718 if (! unit->line_table)
4720 unit->error = 1;
4721 return false;
4724 if (unit->first_child_die_ptr < unit->end_ptr
4725 && ! scan_unit_for_symbols (unit))
4727 unit->error = 1;
4728 return false;
4732 return true;
4735 /* If UNIT contains SYM at ADDR, set the output parameters to the
4736 values for the line containing SYM. The output parameters,
4737 FILENAME_PTR, and LINENUMBER_PTR, are pointers to the objects to be
4738 filled in.
4740 Return TRUE if UNIT contains SYM, and no errors were encountered;
4741 FALSE otherwise. */
4743 static bool
4744 comp_unit_find_line (struct comp_unit *unit,
4745 asymbol *sym,
4746 bfd_vma addr,
4747 const char **filename_ptr,
4748 unsigned int *linenumber_ptr)
4750 if (!comp_unit_maybe_decode_line_info (unit))
4751 return false;
4753 if (sym->flags & BSF_FUNCTION)
4754 return lookup_symbol_in_function_table (unit, sym, addr,
4755 filename_ptr,
4756 linenumber_ptr);
4758 return lookup_symbol_in_variable_table (unit, sym, addr,
4759 filename_ptr,
4760 linenumber_ptr);
4763 /* Extract all interesting funcinfos and varinfos of a compilation
4764 unit into hash tables for faster lookup. Returns TRUE if no
4765 errors were enountered; FALSE otherwise. */
4767 static bool
4768 comp_unit_hash_info (struct dwarf2_debug *stash,
4769 struct comp_unit *unit,
4770 struct info_hash_table *funcinfo_hash_table,
4771 struct info_hash_table *varinfo_hash_table)
4773 struct funcinfo* each_func;
4774 struct varinfo* each_var;
4775 bool okay = true;
4777 BFD_ASSERT (stash->info_hash_status != STASH_INFO_HASH_DISABLED);
4779 if (!comp_unit_maybe_decode_line_info (unit))
4780 return false;
4782 BFD_ASSERT (!unit->cached);
4784 /* To preserve the original search order, we went to visit the function
4785 infos in the reversed order of the list. However, making the list
4786 bi-directional use quite a bit of extra memory. So we reverse
4787 the list first, traverse the list in the now reversed order and
4788 finally reverse the list again to get back the original order. */
4789 unit->function_table = reverse_funcinfo_list (unit->function_table);
4790 for (each_func = unit->function_table;
4791 each_func && okay;
4792 each_func = each_func->prev_func)
4794 /* Skip nameless functions. */
4795 if (each_func->name)
4796 /* There is no need to copy name string into hash table as
4797 name string is either in the dwarf string buffer or
4798 info in the stash. */
4799 okay = insert_info_hash_table (funcinfo_hash_table, each_func->name,
4800 (void*) each_func, false);
4802 unit->function_table = reverse_funcinfo_list (unit->function_table);
4803 if (!okay)
4804 return false;
4806 /* We do the same for variable infos. */
4807 unit->variable_table = reverse_varinfo_list (unit->variable_table);
4808 for (each_var = unit->variable_table;
4809 each_var && okay;
4810 each_var = each_var->prev_var)
4812 /* Skip stack vars and vars with no files or names. */
4813 if (! each_var->stack
4814 && each_var->file != NULL
4815 && each_var->name != NULL)
4816 /* There is no need to copy name string into hash table as
4817 name string is either in the dwarf string buffer or
4818 info in the stash. */
4819 okay = insert_info_hash_table (varinfo_hash_table, each_var->name,
4820 (void*) each_var, false);
4823 unit->variable_table = reverse_varinfo_list (unit->variable_table);
4824 unit->cached = true;
4825 return okay;
4828 /* Locate a section in a BFD containing debugging info. The search starts
4829 from the section after AFTER_SEC, or from the first section in the BFD if
4830 AFTER_SEC is NULL. The search works by examining the names of the
4831 sections. There are three permissiable names. The first two are given
4832 by DEBUG_SECTIONS[debug_info] (whose standard DWARF2 names are .debug_info
4833 and .zdebug_info). The third is a prefix .gnu.linkonce.wi.
4834 This is a variation on the .debug_info section which has a checksum
4835 describing the contents appended onto the name. This allows the linker to
4836 identify and discard duplicate debugging sections for different
4837 compilation units. */
4838 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
4840 static asection *
4841 find_debug_info (bfd *abfd, const struct dwarf_debug_section *debug_sections,
4842 asection *after_sec)
4844 asection *msec;
4845 const char *look;
4847 if (after_sec == NULL)
4849 look = debug_sections[debug_info].uncompressed_name;
4850 msec = bfd_get_section_by_name (abfd, look);
4851 /* Testing SEC_HAS_CONTENTS is an anti-fuzzer measure. Of
4852 course debug sections always have contents. */
4853 if (msec != NULL && (msec->flags & SEC_HAS_CONTENTS) != 0)
4854 return msec;
4856 look = debug_sections[debug_info].compressed_name;
4857 msec = bfd_get_section_by_name (abfd, look);
4858 if (msec != NULL && (msec->flags & SEC_HAS_CONTENTS) != 0)
4859 return msec;
4861 for (msec = abfd->sections; msec != NULL; msec = msec->next)
4862 if ((msec->flags & SEC_HAS_CONTENTS) != 0
4863 && startswith (msec->name, GNU_LINKONCE_INFO))
4864 return msec;
4866 return NULL;
4869 for (msec = after_sec->next; msec != NULL; msec = msec->next)
4871 if ((msec->flags & SEC_HAS_CONTENTS) == 0)
4872 continue;
4874 look = debug_sections[debug_info].uncompressed_name;
4875 if (strcmp (msec->name, look) == 0)
4876 return msec;
4878 look = debug_sections[debug_info].compressed_name;
4879 if (look != NULL && strcmp (msec->name, look) == 0)
4880 return msec;
4882 if (startswith (msec->name, GNU_LINKONCE_INFO))
4883 return msec;
4886 return NULL;
4889 /* Transfer VMAs from object file to separate debug file. */
4891 static void
4892 set_debug_vma (bfd *orig_bfd, bfd *debug_bfd)
4894 asection *s, *d;
4896 for (s = orig_bfd->sections, d = debug_bfd->sections;
4897 s != NULL && d != NULL;
4898 s = s->next, d = d->next)
4900 if ((d->flags & SEC_DEBUGGING) != 0)
4901 break;
4902 /* ??? Assumes 1-1 correspondence between sections in the
4903 two files. */
4904 if (strcmp (s->name, d->name) == 0)
4906 d->output_section = s->output_section;
4907 d->output_offset = s->output_offset;
4908 d->vma = s->vma;
4913 /* If the dwarf2 info was found in a separate debug file, return the
4914 debug file section corresponding to the section in the original file
4915 and the debug file symbols. */
4917 static void
4918 _bfd_dwarf2_stash_syms (struct dwarf2_debug *stash, bfd *abfd,
4919 asection **sec, asymbol ***syms)
4921 if (stash->f.bfd_ptr != abfd)
4923 asection *s, *d;
4925 if (*sec == NULL)
4927 *syms = stash->f.syms;
4928 return;
4931 for (s = abfd->sections, d = stash->f.bfd_ptr->sections;
4932 s != NULL && d != NULL;
4933 s = s->next, d = d->next)
4935 if ((d->flags & SEC_DEBUGGING) != 0)
4936 break;
4937 if (s == *sec
4938 && strcmp (s->name, d->name) == 0)
4940 *sec = d;
4941 *syms = stash->f.syms;
4942 break;
4948 /* Unset vmas for adjusted sections in STASH. */
4950 static void
4951 unset_sections (struct dwarf2_debug *stash)
4953 int i;
4954 struct adjusted_section *p;
4956 i = stash->adjusted_section_count;
4957 p = stash->adjusted_sections;
4958 for (; i > 0; i--, p++)
4959 p->section->vma = p->orig_vma;
4962 /* Set VMAs for allocated and .debug_info sections in ORIG_BFD, a
4963 relocatable object file. VMAs are normally all zero in relocatable
4964 object files, so if we want to distinguish locations in sections by
4965 address we need to set VMAs so the sections do not overlap. We
4966 also set VMA on .debug_info so that when we have multiple
4967 .debug_info sections (or the linkonce variant) they also do not
4968 overlap. The multiple .debug_info sections make up a single
4969 logical section. ??? We should probably do the same for other
4970 debug sections. */
4972 static bool
4973 place_sections (bfd *orig_bfd, struct dwarf2_debug *stash)
4975 bfd *abfd;
4976 struct adjusted_section *p;
4977 int i;
4978 const char *debug_info_name;
4980 if (stash->adjusted_section_count != 0)
4982 i = stash->adjusted_section_count;
4983 p = stash->adjusted_sections;
4984 for (; i > 0; i--, p++)
4985 p->section->vma = p->adj_vma;
4986 return true;
4989 debug_info_name = stash->debug_sections[debug_info].uncompressed_name;
4990 i = 0;
4991 abfd = orig_bfd;
4992 while (1)
4994 asection *sect;
4996 for (sect = abfd->sections; sect != NULL; sect = sect->next)
4998 int is_debug_info;
5000 if (sect->output_section != NULL
5001 && sect->output_section != sect
5002 && (sect->flags & SEC_DEBUGGING) == 0)
5003 continue;
5005 is_debug_info = (strcmp (sect->name, debug_info_name) == 0
5006 || startswith (sect->name, GNU_LINKONCE_INFO));
5008 if (!((sect->flags & SEC_ALLOC) != 0 && abfd == orig_bfd)
5009 && !is_debug_info)
5010 continue;
5012 i++;
5014 if (abfd == stash->f.bfd_ptr)
5015 break;
5016 abfd = stash->f.bfd_ptr;
5019 if (i <= 1)
5020 stash->adjusted_section_count = -1;
5021 else
5023 bfd_vma last_vma = 0, last_dwarf = 0;
5024 size_t amt = i * sizeof (struct adjusted_section);
5026 p = (struct adjusted_section *) bfd_malloc (amt);
5027 if (p == NULL)
5028 return false;
5030 stash->adjusted_sections = p;
5031 stash->adjusted_section_count = i;
5033 abfd = orig_bfd;
5034 while (1)
5036 asection *sect;
5038 for (sect = abfd->sections; sect != NULL; sect = sect->next)
5040 bfd_size_type sz;
5041 int is_debug_info;
5043 if (sect->output_section != NULL
5044 && sect->output_section != sect
5045 && (sect->flags & SEC_DEBUGGING) == 0)
5046 continue;
5048 is_debug_info = (strcmp (sect->name, debug_info_name) == 0
5049 || startswith (sect->name, GNU_LINKONCE_INFO));
5051 if (!((sect->flags & SEC_ALLOC) != 0 && abfd == orig_bfd)
5052 && !is_debug_info)
5053 continue;
5055 sz = sect->rawsize ? sect->rawsize : sect->size;
5057 p->section = sect;
5058 p->orig_vma = sect->vma;
5060 bfd_vma *v = is_debug_info ? &last_dwarf : &last_vma;
5061 /* Align the new address to the current section
5062 alignment. */
5063 bfd_vma mask = -(bfd_vma) 1 << sect->alignment_power;
5064 *v = (*v + ~mask) & mask;
5065 sect->vma = *v;
5066 *v += sz;
5068 p->adj_vma = sect->vma;
5069 p++;
5071 if (abfd == stash->f.bfd_ptr)
5072 break;
5073 abfd = stash->f.bfd_ptr;
5077 if (orig_bfd != stash->f.bfd_ptr)
5078 set_debug_vma (orig_bfd, stash->f.bfd_ptr);
5080 return true;
5083 /* Look up a funcinfo by name using the given info hash table. If found,
5084 also update the locations pointed to by filename_ptr and linenumber_ptr.
5086 This function returns TRUE if a funcinfo that matches the given symbol
5087 and address is found with any error; otherwise it returns FALSE. */
5089 static bool
5090 info_hash_lookup_funcinfo (struct info_hash_table *hash_table,
5091 asymbol *sym,
5092 bfd_vma addr,
5093 const char **filename_ptr,
5094 unsigned int *linenumber_ptr)
5096 struct funcinfo* each_func;
5097 struct funcinfo* best_fit = NULL;
5098 bfd_vma best_fit_len = (bfd_vma) -1;
5099 struct info_list_node *node;
5100 struct arange *arange;
5101 const char *name = bfd_asymbol_name (sym);
5103 for (node = lookup_info_hash_table (hash_table, name);
5104 node;
5105 node = node->next)
5107 each_func = (struct funcinfo *) node->info;
5108 for (arange = &each_func->arange;
5109 arange;
5110 arange = arange->next)
5112 if (addr >= arange->low
5113 && addr < arange->high
5114 && arange->high - arange->low < best_fit_len)
5116 best_fit = each_func;
5117 best_fit_len = arange->high - arange->low;
5122 if (best_fit)
5124 *filename_ptr = best_fit->file;
5125 *linenumber_ptr = best_fit->line;
5126 return true;
5129 return false;
5132 /* Look up a varinfo by name using the given info hash table. If found,
5133 also update the locations pointed to by filename_ptr and linenumber_ptr.
5135 This function returns TRUE if a varinfo that matches the given symbol
5136 and address is found with any error; otherwise it returns FALSE. */
5138 static bool
5139 info_hash_lookup_varinfo (struct info_hash_table *hash_table,
5140 asymbol *sym,
5141 bfd_vma addr,
5142 const char **filename_ptr,
5143 unsigned int *linenumber_ptr)
5145 struct varinfo* each;
5146 struct info_list_node *node;
5147 const char *name = bfd_asymbol_name (sym);
5149 for (node = lookup_info_hash_table (hash_table, name);
5150 node;
5151 node = node->next)
5153 each = (struct varinfo *) node->info;
5154 if (each->addr == addr)
5156 *filename_ptr = each->file;
5157 *linenumber_ptr = each->line;
5158 return true;
5162 return false;
5165 /* Update the funcinfo and varinfo info hash tables if they are
5166 not up to date. Returns TRUE if there is no error; otherwise
5167 returns FALSE and disable the info hash tables. */
5169 static bool
5170 stash_maybe_update_info_hash_tables (struct dwarf2_debug *stash)
5172 struct comp_unit *each;
5174 /* Exit if hash tables are up-to-date. */
5175 if (stash->f.all_comp_units == stash->hash_units_head)
5176 return true;
5178 if (stash->hash_units_head)
5179 each = stash->hash_units_head->prev_unit;
5180 else
5181 each = stash->f.last_comp_unit;
5183 while (each)
5185 if (!comp_unit_hash_info (stash, each, stash->funcinfo_hash_table,
5186 stash->varinfo_hash_table))
5188 stash->info_hash_status = STASH_INFO_HASH_DISABLED;
5189 return false;
5191 each = each->prev_unit;
5194 stash->hash_units_head = stash->f.all_comp_units;
5195 return true;
5198 /* Check consistency of info hash tables. This is for debugging only. */
5200 static void ATTRIBUTE_UNUSED
5201 stash_verify_info_hash_table (struct dwarf2_debug *stash)
5203 struct comp_unit *each_unit;
5204 struct funcinfo *each_func;
5205 struct varinfo *each_var;
5206 struct info_list_node *node;
5207 bool found;
5209 for (each_unit = stash->f.all_comp_units;
5210 each_unit;
5211 each_unit = each_unit->next_unit)
5213 for (each_func = each_unit->function_table;
5214 each_func;
5215 each_func = each_func->prev_func)
5217 if (!each_func->name)
5218 continue;
5219 node = lookup_info_hash_table (stash->funcinfo_hash_table,
5220 each_func->name);
5221 BFD_ASSERT (node);
5222 found = false;
5223 while (node && !found)
5225 found = node->info == each_func;
5226 node = node->next;
5228 BFD_ASSERT (found);
5231 for (each_var = each_unit->variable_table;
5232 each_var;
5233 each_var = each_var->prev_var)
5235 if (!each_var->name || !each_var->file || each_var->stack)
5236 continue;
5237 node = lookup_info_hash_table (stash->varinfo_hash_table,
5238 each_var->name);
5239 BFD_ASSERT (node);
5240 found = false;
5241 while (node && !found)
5243 found = node->info == each_var;
5244 node = node->next;
5246 BFD_ASSERT (found);
5251 /* Check to see if we want to enable the info hash tables, which consume
5252 quite a bit of memory. Currently we only check the number times
5253 bfd_dwarf2_find_line is called. In the future, we may also want to
5254 take the number of symbols into account. */
5256 static void
5257 stash_maybe_enable_info_hash_tables (bfd *abfd, struct dwarf2_debug *stash)
5259 BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_OFF);
5261 if (stash->info_hash_count++ < STASH_INFO_HASH_TRIGGER)
5262 return;
5264 /* FIXME: Maybe we should check the reduce_memory_overheads
5265 and optimize fields in the bfd_link_info structure ? */
5267 /* Create hash tables. */
5268 stash->funcinfo_hash_table = create_info_hash_table (abfd);
5269 stash->varinfo_hash_table = create_info_hash_table (abfd);
5270 if (!stash->funcinfo_hash_table || !stash->varinfo_hash_table)
5272 /* Turn off info hashes if any allocation above fails. */
5273 stash->info_hash_status = STASH_INFO_HASH_DISABLED;
5274 return;
5276 /* We need a forced update so that the info hash tables will
5277 be created even though there is no compilation unit. That
5278 happens if STASH_INFO_HASH_TRIGGER is 0. */
5279 if (stash_maybe_update_info_hash_tables (stash))
5280 stash->info_hash_status = STASH_INFO_HASH_ON;
5283 /* Find the file and line associated with a symbol and address using the
5284 info hash tables of a stash. If there is a match, the function returns
5285 TRUE and update the locations pointed to by filename_ptr and linenumber_ptr;
5286 otherwise it returns FALSE. */
5288 static bool
5289 stash_find_line_fast (struct dwarf2_debug *stash,
5290 asymbol *sym,
5291 bfd_vma addr,
5292 const char **filename_ptr,
5293 unsigned int *linenumber_ptr)
5295 BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_ON);
5297 if (sym->flags & BSF_FUNCTION)
5298 return info_hash_lookup_funcinfo (stash->funcinfo_hash_table, sym, addr,
5299 filename_ptr, linenumber_ptr);
5300 return info_hash_lookup_varinfo (stash->varinfo_hash_table, sym, addr,
5301 filename_ptr, linenumber_ptr);
5304 /* Save current section VMAs. */
5306 static bool
5307 save_section_vma (const bfd *abfd, struct dwarf2_debug *stash)
5309 asection *s;
5310 unsigned int i;
5312 if (abfd->section_count == 0)
5313 return true;
5314 stash->sec_vma = bfd_malloc (sizeof (*stash->sec_vma) * abfd->section_count);
5315 if (stash->sec_vma == NULL)
5316 return false;
5317 stash->sec_vma_count = abfd->section_count;
5318 for (i = 0, s = abfd->sections;
5319 s != NULL && i < abfd->section_count;
5320 i++, s = s->next)
5322 if (s->output_section != NULL)
5323 stash->sec_vma[i] = s->output_section->vma + s->output_offset;
5324 else
5325 stash->sec_vma[i] = s->vma;
5327 return true;
5330 /* Compare current section VMAs against those at the time the stash
5331 was created. If find_nearest_line is used in linker warnings or
5332 errors early in the link process, the debug info stash will be
5333 invalid for later calls. This is because we relocate debug info
5334 sections, so the stashed section contents depend on symbol values,
5335 which in turn depend on section VMAs. */
5337 static bool
5338 section_vma_same (const bfd *abfd, const struct dwarf2_debug *stash)
5340 asection *s;
5341 unsigned int i;
5343 /* PR 24334: If the number of sections in ABFD has changed between
5344 when the stash was created and now, then we cannot trust the
5345 stashed vma information. */
5346 if (abfd->section_count != stash->sec_vma_count)
5347 return false;
5349 for (i = 0, s = abfd->sections;
5350 s != NULL && i < abfd->section_count;
5351 i++, s = s->next)
5353 bfd_vma vma;
5355 if (s->output_section != NULL)
5356 vma = s->output_section->vma + s->output_offset;
5357 else
5358 vma = s->vma;
5359 if (vma != stash->sec_vma[i])
5360 return false;
5362 return true;
5365 /* Read debug information from DEBUG_BFD when DEBUG_BFD is specified.
5366 If DEBUG_BFD is not specified, we read debug information from ABFD
5367 or its gnu_debuglink. The results will be stored in PINFO.
5368 The function returns TRUE iff debug information is ready. */
5370 bool
5371 _bfd_dwarf2_slurp_debug_info (bfd *abfd, bfd *debug_bfd,
5372 const struct dwarf_debug_section *debug_sections,
5373 asymbol **symbols,
5374 void **pinfo,
5375 bool do_place)
5377 bfd_size_type total_size;
5378 asection *msec;
5379 struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
5381 if (stash != NULL)
5383 if (stash->orig_bfd == abfd
5384 && section_vma_same (abfd, stash))
5386 /* Check that we did previously find some debug information
5387 before attempting to make use of it. */
5388 if (stash->f.dwarf_info_size != 0)
5390 if (do_place && !place_sections (abfd, stash))
5391 return false;
5392 return true;
5395 return false;
5397 _bfd_dwarf2_cleanup_debug_info (abfd, pinfo);
5398 memset (stash, 0, sizeof (*stash));
5400 else
5402 stash = (struct dwarf2_debug *) bfd_zalloc (abfd, sizeof (*stash));
5403 if (! stash)
5404 return false;
5405 *pinfo = stash;
5407 stash->orig_bfd = abfd;
5408 stash->debug_sections = debug_sections;
5409 stash->f.syms = symbols;
5410 if (!save_section_vma (abfd, stash))
5411 return false;
5413 stash->f.abbrev_offsets = htab_create_alloc (10, hash_abbrev, eq_abbrev,
5414 del_abbrev, calloc, free);
5415 if (!stash->f.abbrev_offsets)
5416 return false;
5418 stash->alt.abbrev_offsets = htab_create_alloc (10, hash_abbrev, eq_abbrev,
5419 del_abbrev, calloc, free);
5420 if (!stash->alt.abbrev_offsets)
5421 return false;
5423 stash->f.trie_root = alloc_trie_leaf (abfd);
5424 if (!stash->f.trie_root)
5425 return false;
5427 stash->alt.trie_root = alloc_trie_leaf (abfd);
5428 if (!stash->alt.trie_root)
5429 return false;
5431 if (debug_bfd == NULL)
5432 debug_bfd = abfd;
5434 msec = find_debug_info (debug_bfd, debug_sections, NULL);
5435 if (msec == NULL && abfd == debug_bfd)
5437 char * debug_filename;
5439 debug_filename = bfd_follow_build_id_debuglink (abfd, DEBUGDIR);
5440 if (debug_filename == NULL)
5441 debug_filename = bfd_follow_gnu_debuglink (abfd, DEBUGDIR);
5443 if (debug_filename == NULL)
5444 /* No dwarf2 info, and no gnu_debuglink to follow.
5445 Note that at this point the stash has been allocated, but
5446 contains zeros. This lets future calls to this function
5447 fail more quickly. */
5448 return false;
5450 debug_bfd = bfd_openr (debug_filename, NULL);
5451 free (debug_filename);
5452 if (debug_bfd == NULL)
5453 /* FIXME: Should we report our failure to follow the debuglink ? */
5454 return false;
5456 /* Set BFD_DECOMPRESS to decompress debug sections. */
5457 debug_bfd->flags |= BFD_DECOMPRESS;
5458 if (!bfd_check_format (debug_bfd, bfd_object)
5459 || (msec = find_debug_info (debug_bfd,
5460 debug_sections, NULL)) == NULL
5461 || !bfd_generic_link_read_symbols (debug_bfd))
5463 bfd_close (debug_bfd);
5464 return false;
5467 symbols = bfd_get_outsymbols (debug_bfd);
5468 stash->f.syms = symbols;
5469 stash->close_on_cleanup = true;
5471 stash->f.bfd_ptr = debug_bfd;
5473 if (do_place
5474 && !place_sections (abfd, stash))
5475 return false;
5477 /* There can be more than one DWARF2 info section in a BFD these
5478 days. First handle the easy case when there's only one. If
5479 there's more than one, try case two: read them all in and produce
5480 one large stash. We do this in two passes - in the first pass we
5481 just accumulate the section sizes, and in the second pass we
5482 read in the section's contents. (The allows us to avoid
5483 reallocing the data as we add sections to the stash.) */
5485 if (! find_debug_info (debug_bfd, debug_sections, msec))
5487 /* Case 1: only one info section. */
5488 total_size = msec->size;
5489 if (! read_section (debug_bfd, &stash->debug_sections[debug_info],
5490 symbols, 0,
5491 &stash->f.dwarf_info_buffer, &total_size))
5492 goto restore_vma;
5494 else
5496 /* Case 2: multiple sections. */
5497 for (total_size = 0;
5498 msec;
5499 msec = find_debug_info (debug_bfd, debug_sections, msec))
5501 if (_bfd_section_size_insane (debug_bfd, msec))
5502 goto restore_vma;
5503 /* Catch PR25070 testcase overflowing size calculation here. */
5504 if (total_size + msec->size < total_size)
5506 bfd_set_error (bfd_error_no_memory);
5507 goto restore_vma;
5509 total_size += msec->size;
5512 stash->f.dwarf_info_buffer = (bfd_byte *) bfd_malloc (total_size);
5513 if (stash->f.dwarf_info_buffer == NULL)
5514 goto restore_vma;
5516 total_size = 0;
5517 for (msec = find_debug_info (debug_bfd, debug_sections, NULL);
5518 msec;
5519 msec = find_debug_info (debug_bfd, debug_sections, msec))
5521 bfd_size_type size;
5523 size = msec->size;
5524 if (size == 0)
5525 continue;
5527 if (!(bfd_simple_get_relocated_section_contents
5528 (debug_bfd, msec, stash->f.dwarf_info_buffer + total_size,
5529 symbols)))
5530 goto restore_vma;
5532 total_size += size;
5536 stash->f.info_ptr = stash->f.dwarf_info_buffer;
5537 stash->f.dwarf_info_size = total_size;
5538 return true;
5540 restore_vma:
5541 unset_sections (stash);
5542 return false;
5545 /* Parse the next DWARF2 compilation unit at FILE->INFO_PTR. */
5547 static struct comp_unit *
5548 stash_comp_unit (struct dwarf2_debug *stash, struct dwarf2_debug_file *file)
5550 bfd_size_type length;
5551 unsigned int offset_size;
5552 bfd_byte *info_ptr_unit = file->info_ptr;
5553 bfd_byte *info_ptr_end = file->dwarf_info_buffer + file->dwarf_info_size;
5555 if (file->info_ptr >= info_ptr_end)
5556 return NULL;
5558 length = read_4_bytes (file->bfd_ptr, &file->info_ptr, info_ptr_end);
5559 /* A 0xffffff length is the DWARF3 way of indicating
5560 we use 64-bit offsets, instead of 32-bit offsets. */
5561 if (length == 0xffffffff)
5563 offset_size = 8;
5564 length = read_8_bytes (file->bfd_ptr, &file->info_ptr, info_ptr_end);
5566 /* A zero length is the IRIX way of indicating 64-bit offsets,
5567 mostly because the 64-bit length will generally fit in 32
5568 bits, and the endianness helps. */
5569 else if (length == 0)
5571 offset_size = 8;
5572 length = read_4_bytes (file->bfd_ptr, &file->info_ptr, info_ptr_end);
5574 /* In the absence of the hints above, we assume 32-bit DWARF2
5575 offsets even for targets with 64-bit addresses, because:
5576 a) most of the time these targets will not have generated
5577 more than 2Gb of debug info and so will not need 64-bit
5578 offsets,
5580 b) if they do use 64-bit offsets but they are not using
5581 the size hints that are tested for above then they are
5582 not conforming to the DWARF3 standard anyway. */
5583 else
5584 offset_size = 4;
5586 if (length != 0
5587 && length <= (size_t) (info_ptr_end - file->info_ptr))
5589 struct comp_unit *each = parse_comp_unit (stash, file,
5590 file->info_ptr, length,
5591 info_ptr_unit, offset_size);
5592 if (each)
5594 if (file->comp_unit_tree == NULL)
5595 file->comp_unit_tree
5596 = splay_tree_new (splay_tree_compare_addr_range,
5597 splay_tree_free_addr_range, NULL);
5599 struct addr_range *r
5600 = (struct addr_range *)bfd_malloc (sizeof (struct addr_range));
5601 r->start = each->info_ptr_unit;
5602 r->end = each->end_ptr;
5603 splay_tree_node v = splay_tree_lookup (file->comp_unit_tree,
5604 (splay_tree_key)r);
5605 if (v != NULL || r->end <= r->start)
5606 abort ();
5607 splay_tree_insert (file->comp_unit_tree, (splay_tree_key)r,
5608 (splay_tree_value)each);
5610 if (file->all_comp_units)
5611 file->all_comp_units->prev_unit = each;
5612 else
5613 file->last_comp_unit = each;
5615 each->next_unit = file->all_comp_units;
5616 file->all_comp_units = each;
5618 if (each->arange.high == 0)
5620 each->next_unit_without_ranges = file->all_comp_units_without_ranges;
5621 file->all_comp_units_without_ranges = each->next_unit_without_ranges;
5624 file->info_ptr += length;
5625 return each;
5629 /* Don't trust any of the DWARF info after a corrupted length or
5630 parse error. */
5631 file->info_ptr = info_ptr_end;
5632 return NULL;
5635 /* Hash function for an asymbol. */
5637 static hashval_t
5638 hash_asymbol (const void *sym)
5640 const asymbol *asym = sym;
5641 return htab_hash_string (asym->name);
5644 /* Equality function for asymbols. */
5646 static int
5647 eq_asymbol (const void *a, const void *b)
5649 const asymbol *sa = a;
5650 const asymbol *sb = b;
5651 return strcmp (sa->name, sb->name) == 0;
5654 /* Scan the debug information in PINFO looking for a DW_TAG_subprogram
5655 abbrev with a DW_AT_low_pc attached to it. Then lookup that same
5656 symbol in SYMBOLS and return the difference between the low_pc and
5657 the symbol's address. Returns 0 if no suitable symbol could be found. */
5659 bfd_signed_vma
5660 _bfd_dwarf2_find_symbol_bias (asymbol ** symbols, void ** pinfo)
5662 struct dwarf2_debug *stash;
5663 struct comp_unit * unit;
5664 htab_t sym_hash;
5665 bfd_signed_vma result = 0;
5666 asymbol ** psym;
5668 stash = (struct dwarf2_debug *) *pinfo;
5670 if (stash == NULL || symbols == NULL)
5671 return 0;
5673 sym_hash = htab_create_alloc (10, hash_asymbol, eq_asymbol,
5674 NULL, xcalloc, free);
5675 for (psym = symbols; * psym != NULL; psym++)
5677 asymbol * sym = * psym;
5679 if (sym->flags & BSF_FUNCTION && sym->section != NULL)
5681 void **slot = htab_find_slot (sym_hash, sym, INSERT);
5682 *slot = sym;
5686 for (unit = stash->f.all_comp_units; unit; unit = unit->next_unit)
5688 struct funcinfo * func;
5690 comp_unit_maybe_decode_line_info (unit);
5692 for (func = unit->function_table; func != NULL; func = func->prev_func)
5693 if (func->name && func->arange.low)
5695 asymbol search, *sym;
5697 /* FIXME: Do we need to scan the aranges looking for the
5698 lowest pc value? */
5700 search.name = func->name;
5701 sym = htab_find (sym_hash, &search);
5702 if (sym != NULL)
5704 result = func->arange.low - (sym->value + sym->section->vma);
5705 goto done;
5710 done:
5711 htab_delete (sym_hash);
5712 return result;
5715 /* See _bfd_dwarf2_find_nearest_line_with_alt. */
5718 _bfd_dwarf2_find_nearest_line (bfd *abfd,
5719 asymbol **symbols,
5720 asymbol *symbol,
5721 asection *section,
5722 bfd_vma offset,
5723 const char **filename_ptr,
5724 const char **functionname_ptr,
5725 unsigned int *linenumber_ptr,
5726 unsigned int *discriminator_ptr,
5727 const struct dwarf_debug_section *debug_sections,
5728 void **pinfo)
5730 return _bfd_dwarf2_find_nearest_line_with_alt
5731 (abfd, NULL, symbols, symbol, section, offset, filename_ptr,
5732 functionname_ptr, linenumber_ptr, discriminator_ptr, debug_sections,
5733 pinfo);
5736 /* Find the source code location of SYMBOL. If SYMBOL is NULL
5737 then find the nearest source code location corresponding to
5738 the address SECTION + OFFSET.
5739 Returns 1 if the line is found without error and fills in
5740 FILENAME_PTR and LINENUMBER_PTR. In the case where SYMBOL was
5741 NULL the FUNCTIONNAME_PTR is also filled in.
5742 Returns 2 if partial information from _bfd_elf_find_function is
5743 returned (function and maybe file) by looking at symbols. DWARF2
5744 info is present but not regarding the requested code location.
5745 Returns 0 otherwise.
5746 SYMBOLS contains the symbol table for ABFD.
5747 DEBUG_SECTIONS contains the name of the dwarf debug sections.
5748 If ALT_FILENAME is given, attempt to open the file and use it
5749 as the .gnu_debugaltlink file. Otherwise this file will be
5750 searched for when needed. */
5753 _bfd_dwarf2_find_nearest_line_with_alt
5754 (bfd *abfd,
5755 const char *alt_filename,
5756 asymbol **symbols,
5757 asymbol *symbol,
5758 asection *section,
5759 bfd_vma offset,
5760 const char **filename_ptr,
5761 const char **functionname_ptr,
5762 unsigned int *linenumber_ptr,
5763 unsigned int *discriminator_ptr,
5764 const struct dwarf_debug_section *debug_sections,
5765 void **pinfo)
5767 /* Read each compilation unit from the section .debug_info, and check
5768 to see if it contains the address we are searching for. If yes,
5769 lookup the address, and return the line number info. If no, go
5770 on to the next compilation unit.
5772 We keep a list of all the previously read compilation units, and
5773 a pointer to the next un-read compilation unit. Check the
5774 previously read units before reading more. */
5775 struct dwarf2_debug *stash;
5776 /* What address are we looking for? */
5777 bfd_vma addr;
5778 struct comp_unit* each;
5779 struct funcinfo *function = NULL;
5780 int found = false;
5781 bool do_line;
5783 *filename_ptr = NULL;
5784 if (functionname_ptr != NULL)
5785 *functionname_ptr = NULL;
5786 *linenumber_ptr = 0;
5787 if (discriminator_ptr)
5788 *discriminator_ptr = 0;
5790 if (! _bfd_dwarf2_slurp_debug_info (abfd, NULL, debug_sections,
5791 symbols, pinfo,
5792 (abfd->flags & (EXEC_P | DYNAMIC)) == 0))
5793 return false;
5795 stash = (struct dwarf2_debug *) *pinfo;
5797 if (stash->alt.bfd_ptr == NULL && alt_filename != NULL)
5799 bfd *alt_bfd = bfd_openr (alt_filename, NULL);
5801 if (alt_bfd == NULL)
5802 /* bfd_openr will have set the bfd_error. */
5803 return false;
5804 if (!bfd_check_format (alt_bfd, bfd_object))
5806 bfd_set_error (bfd_error_wrong_format);
5807 bfd_close (alt_bfd);
5808 return false;
5811 stash->alt.bfd_ptr = alt_bfd;
5814 do_line = symbol != NULL;
5815 if (do_line)
5817 BFD_ASSERT (section == NULL && offset == 0 && functionname_ptr == NULL);
5818 section = bfd_asymbol_section (symbol);
5819 addr = symbol->value;
5821 else
5823 BFD_ASSERT (section != NULL && functionname_ptr != NULL);
5824 addr = offset;
5826 /* If we have no SYMBOL but the section we're looking at is not a
5827 code section, then take a look through the list of symbols to see
5828 if we have a symbol at the address we're looking for. If we do
5829 then use this to look up line information. This will allow us to
5830 give file and line results for data symbols. We exclude code
5831 symbols here, if we look up a function symbol and then look up the
5832 line information we'll actually return the line number for the
5833 opening '{' rather than the function definition line. This is
5834 because looking up by symbol uses the line table, in which the
5835 first line for a function is usually the opening '{', while
5836 looking up the function by section + offset uses the
5837 DW_AT_decl_line from the function DW_TAG_subprogram for the line,
5838 which will be the line of the function name. */
5839 if (symbols != NULL && (section->flags & SEC_CODE) == 0)
5841 asymbol **tmp;
5843 for (tmp = symbols; (*tmp) != NULL; ++tmp)
5844 if ((*tmp)->the_bfd == abfd
5845 && (*tmp)->section == section
5846 && (*tmp)->value == offset
5847 && ((*tmp)->flags & BSF_SECTION_SYM) == 0)
5849 symbol = *tmp;
5850 do_line = true;
5851 /* For local symbols, keep going in the hope we find a
5852 global. */
5853 if ((symbol->flags & BSF_GLOBAL) != 0)
5854 break;
5859 if (section->output_section)
5860 addr += section->output_section->vma + section->output_offset;
5861 else
5862 addr += section->vma;
5864 /* A null info_ptr indicates that there is no dwarf2 info
5865 (or that an error occured while setting up the stash). */
5866 if (! stash->f.info_ptr)
5867 return false;
5869 stash->inliner_chain = NULL;
5871 /* Check the previously read comp. units first. */
5872 if (do_line)
5874 /* The info hash tables use quite a bit of memory. We may not want to
5875 always use them. We use some heuristics to decide if and when to
5876 turn it on. */
5877 if (stash->info_hash_status == STASH_INFO_HASH_OFF)
5878 stash_maybe_enable_info_hash_tables (abfd, stash);
5880 /* Keep info hash table up to date if they are available. Note that we
5881 may disable the hash tables if there is any error duing update. */
5882 if (stash->info_hash_status == STASH_INFO_HASH_ON)
5883 stash_maybe_update_info_hash_tables (stash);
5885 if (stash->info_hash_status == STASH_INFO_HASH_ON)
5887 found = stash_find_line_fast (stash, symbol, addr,
5888 filename_ptr, linenumber_ptr);
5889 if (found)
5890 goto done;
5893 /* Check the previously read comp. units first. */
5894 for (each = stash->f.all_comp_units; each; each = each->next_unit)
5895 if ((symbol->flags & BSF_FUNCTION) == 0
5896 || comp_unit_may_contain_address (each, addr))
5898 found = comp_unit_find_line (each, symbol, addr, filename_ptr,
5899 linenumber_ptr);
5900 if (found)
5901 goto done;
5904 else
5906 struct trie_node *trie = stash->f.trie_root;
5907 unsigned int bits = VMA_BITS - 8;
5908 struct comp_unit **prev_each;
5910 /* Traverse interior nodes until we get to a leaf. */
5911 while (trie && trie->num_room_in_leaf == 0)
5913 int ch = (addr >> bits) & 0xff;
5914 trie = ((struct trie_interior *) trie)->children[ch];
5915 bits -= 8;
5918 if (trie)
5920 const struct trie_leaf *leaf = (struct trie_leaf *) trie;
5921 unsigned int i;
5923 for (i = 0; i < leaf->num_stored_in_leaf; ++i)
5924 leaf->ranges[i].unit->mark = false;
5926 for (i = 0; i < leaf->num_stored_in_leaf; ++i)
5928 struct comp_unit *unit = leaf->ranges[i].unit;
5929 if (unit->mark
5930 || addr < leaf->ranges[i].low_pc
5931 || addr >= leaf->ranges[i].high_pc)
5932 continue;
5933 unit->mark = true;
5935 found = comp_unit_find_nearest_line (unit, addr,
5936 filename_ptr,
5937 &function,
5938 linenumber_ptr,
5939 discriminator_ptr);
5940 if (found)
5941 goto done;
5945 /* Also scan through all compilation units without any ranges,
5946 taking them out of the list if they have acquired any since
5947 last time. */
5948 prev_each = &stash->f.all_comp_units_without_ranges;
5949 for (each = *prev_each; each; each = each->next_unit_without_ranges)
5951 if (each->arange.high != 0)
5953 *prev_each = each->next_unit_without_ranges;
5954 continue;
5957 found = comp_unit_find_nearest_line (each, addr,
5958 filename_ptr,
5959 &function,
5960 linenumber_ptr,
5961 discriminator_ptr);
5962 if (found)
5963 goto done;
5964 prev_each = &each->next_unit_without_ranges;
5968 /* Read each remaining comp. units checking each as they are read. */
5969 while ((each = stash_comp_unit (stash, &stash->f)) != NULL)
5971 /* DW_AT_low_pc and DW_AT_high_pc are optional for
5972 compilation units. If we don't have them (i.e.,
5973 unit->high == 0), we need to consult the line info table
5974 to see if a compilation unit contains the given
5975 address. */
5976 if (do_line)
5977 found = (((symbol->flags & BSF_FUNCTION) == 0
5978 || comp_unit_may_contain_address (each, addr))
5979 && comp_unit_find_line (each, symbol, addr,
5980 filename_ptr, linenumber_ptr));
5981 else
5982 found = (comp_unit_may_contain_address (each, addr)
5983 && comp_unit_find_nearest_line (each, addr,
5984 filename_ptr,
5985 &function,
5986 linenumber_ptr,
5987 discriminator_ptr));
5989 if (found)
5990 break;
5993 done:
5994 if (functionname_ptr && function && function->is_linkage)
5996 *functionname_ptr = function->name;
5997 if (!found)
5998 found = 2;
6000 else if (functionname_ptr
6001 && (!*functionname_ptr
6002 || (function && !function->is_linkage)))
6004 asymbol *fun;
6005 asymbol **syms = symbols;
6006 asection *sec = section;
6008 _bfd_dwarf2_stash_syms (stash, abfd, &sec, &syms);
6009 fun = _bfd_elf_find_function (abfd, syms, sec, offset,
6010 *filename_ptr ? NULL : filename_ptr,
6011 functionname_ptr);
6013 if (!found && fun != NULL)
6014 found = 2;
6016 if (function && !function->is_linkage)
6018 bfd_vma sec_vma;
6020 sec_vma = section->vma;
6021 if (section->output_section != NULL)
6022 sec_vma = section->output_section->vma + section->output_offset;
6023 if (fun == NULL)
6024 *functionname_ptr = function->name;
6025 else if (fun->value + sec_vma == function->arange.low)
6026 function->name = *functionname_ptr;
6027 /* Even if we didn't find a linkage name, say that we have
6028 to stop a repeated search of symbols. */
6029 function->is_linkage = true;
6033 unset_sections (stash);
6035 return found;
6038 bool
6039 _bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
6040 const char **filename_ptr,
6041 const char **functionname_ptr,
6042 unsigned int *linenumber_ptr,
6043 void **pinfo)
6045 struct dwarf2_debug *stash;
6047 stash = (struct dwarf2_debug *) *pinfo;
6048 if (stash)
6050 struct funcinfo *func = stash->inliner_chain;
6052 if (func && func->caller_func)
6054 *filename_ptr = func->caller_file;
6055 *functionname_ptr = func->caller_func->name;
6056 *linenumber_ptr = func->caller_line;
6057 stash->inliner_chain = func->caller_func;
6058 return true;
6062 return false;
6065 void
6066 _bfd_dwarf2_cleanup_debug_info (bfd *abfd, void **pinfo)
6068 struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
6069 struct comp_unit *each;
6070 struct dwarf2_debug_file *file;
6072 if (abfd == NULL || stash == NULL)
6073 return;
6075 if (stash->varinfo_hash_table)
6076 bfd_hash_table_free (&stash->varinfo_hash_table->base);
6077 if (stash->funcinfo_hash_table)
6078 bfd_hash_table_free (&stash->funcinfo_hash_table->base);
6080 file = &stash->f;
6081 while (1)
6083 for (each = file->all_comp_units; each; each = each->next_unit)
6085 struct funcinfo *function_table = each->function_table;
6086 struct varinfo *variable_table = each->variable_table;
6088 if (each->line_table && each->line_table != file->line_table)
6090 free (each->line_table->files);
6091 free (each->line_table->dirs);
6094 free (each->lookup_funcinfo_table);
6095 each->lookup_funcinfo_table = NULL;
6097 while (function_table)
6099 free (function_table->file);
6100 function_table->file = NULL;
6101 free (function_table->caller_file);
6102 function_table->caller_file = NULL;
6103 function_table = function_table->prev_func;
6106 while (variable_table)
6108 free (variable_table->file);
6109 variable_table->file = NULL;
6110 variable_table = variable_table->prev_var;
6114 if (file->line_table)
6116 free (file->line_table->files);
6117 free (file->line_table->dirs);
6119 htab_delete (file->abbrev_offsets);
6120 if (file->comp_unit_tree != NULL)
6121 splay_tree_delete (file->comp_unit_tree);
6123 free (file->dwarf_line_str_buffer);
6124 free (file->dwarf_str_buffer);
6125 free (file->dwarf_ranges_buffer);
6126 free (file->dwarf_line_buffer);
6127 free (file->dwarf_abbrev_buffer);
6128 free (file->dwarf_info_buffer);
6129 if (file == &stash->alt)
6130 break;
6131 file = &stash->alt;
6133 free (stash->sec_vma);
6134 free (stash->adjusted_sections);
6135 if (stash->close_on_cleanup)
6136 bfd_close (stash->f.bfd_ptr);
6137 if (stash->alt.bfd_ptr)
6138 bfd_close (stash->alt.bfd_ptr);
6141 typedef struct elf_find_function_cache
6143 asection * last_section;
6144 asymbol * func;
6145 const char * filename;
6146 bfd_size_type code_size;
6147 bfd_vma code_off;
6149 } elf_find_function_cache;
6152 /* Returns TRUE if symbol SYM with address CODE_OFF and size CODE_SIZE
6153 is a better fit to match OFFSET than whatever is currenly stored in
6154 CACHE. */
6156 static inline bool
6157 better_fit (elf_find_function_cache * cache,
6158 asymbol * sym,
6159 bfd_vma code_off,
6160 bfd_size_type code_size,
6161 bfd_vma offset)
6163 /* If the symbol is beyond the desired offset, ignore it. */
6164 if (code_off > offset)
6165 return false;
6167 /* If the symbol is further away from the desired
6168 offset than our current best, then ignore it. */
6169 if (code_off < cache->code_off)
6170 return false;
6172 /* On the other hand, if it is closer, then use it. */
6173 if (code_off > cache->code_off)
6174 return true;
6176 /* assert (code_off == cache->code_off); */
6178 /* If our current best fit does not actually reach the desired
6179 offset... */
6180 if (cache->code_off + cache->code_size <= offset)
6181 /* ... then return whichever candidate covers
6182 more area and hence gets closer to OFFSET. */
6183 return code_size > cache->code_size;
6185 /* The current cache'd symbol covers OFFSET. */
6187 /* If the new symbol does not cover the desired offset then skip it. */
6188 if (code_off + code_size <= offset)
6189 return false;
6191 /* Both symbols cover OFFSET. */
6193 /* Prefer functions over non-functions. */
6194 flagword cache_flags = cache->func->flags;
6195 flagword sym_flags = sym->flags;
6197 if ((cache_flags & BSF_FUNCTION) && ((sym_flags & BSF_FUNCTION) == 0))
6198 return false;
6199 if ((sym_flags & BSF_FUNCTION) && ((cache_flags & BSF_FUNCTION) == 0))
6200 return true;
6202 /* FIXME: Should we choose LOCAL over GLOBAL ? */
6204 /* Prefer typed symbols over notyped. */
6205 int cache_type = ELF_ST_TYPE (((elf_symbol_type *) cache->func)->internal_elf_sym.st_info);
6206 int sym_type = ELF_ST_TYPE (((elf_symbol_type *) sym)->internal_elf_sym.st_info);
6208 if (cache_type == STT_NOTYPE && sym_type != STT_NOTYPE)
6209 return true;
6210 if (cache_type != STT_NOTYPE && sym_type == STT_NOTYPE)
6211 return false;
6213 /* Otherwise choose whichever symbol covers a smaller area. */
6214 return code_size < cache->code_size;
6217 /* Find the function to a particular section and offset,
6218 for error reporting. */
6220 asymbol *
6221 _bfd_elf_find_function (bfd *abfd,
6222 asymbol **symbols,
6223 asection *section,
6224 bfd_vma offset,
6225 const char **filename_ptr,
6226 const char **functionname_ptr)
6228 if (symbols == NULL)
6229 return NULL;
6231 if (bfd_get_flavour (abfd) != bfd_target_elf_flavour)
6232 return NULL;
6234 elf_find_function_cache * cache = elf_tdata (abfd)->elf_find_function_cache;
6236 if (cache == NULL)
6238 cache = bfd_zalloc (abfd, sizeof (*cache));
6239 elf_tdata (abfd)->elf_find_function_cache = cache;
6240 if (cache == NULL)
6241 return NULL;
6244 if (cache->last_section != section
6245 || cache->func == NULL
6246 || offset < cache->func->value
6247 || offset >= cache->func->value + cache->code_size)
6249 asymbol *file;
6250 asymbol **p;
6251 /* ??? Given multiple file symbols, it is impossible to reliably
6252 choose the right file name for global symbols. File symbols are
6253 local symbols, and thus all file symbols must sort before any
6254 global symbols. The ELF spec may be interpreted to say that a
6255 file symbol must sort before other local symbols, but currently
6256 ld -r doesn't do this. So, for ld -r output, it is possible to
6257 make a better choice of file name for local symbols by ignoring
6258 file symbols appearing after a given local symbol. */
6259 enum { nothing_seen, symbol_seen, file_after_symbol_seen } state;
6260 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
6262 file = NULL;
6263 state = nothing_seen;
6264 cache->filename = NULL;
6265 cache->func = NULL;
6266 cache->code_size = 0;
6267 cache->code_off = 0;
6268 cache->last_section = section;
6270 for (p = symbols; *p != NULL; p++)
6272 asymbol *sym = *p;
6273 bfd_vma code_off;
6274 bfd_size_type size;
6276 if ((sym->flags & BSF_FILE) != 0)
6278 file = sym;
6279 if (state == symbol_seen)
6280 state = file_after_symbol_seen;
6281 continue;
6284 if (state == nothing_seen)
6285 state = symbol_seen;
6287 size = bed->maybe_function_sym (sym, section, &code_off);
6289 if (size == 0)
6290 continue;
6292 if (better_fit (cache, sym, code_off, size, offset))
6294 cache->func = sym;
6295 cache->code_size = size;
6296 cache->code_off = code_off;
6297 cache->filename = NULL;
6299 if (file != NULL
6300 && ((sym->flags & BSF_LOCAL) != 0
6301 || state != file_after_symbol_seen))
6302 cache->filename = bfd_asymbol_name (file);
6304 /* Otherwise, if the symbol is beyond the desired offset but it
6305 lies within the bounds of the current best match then reduce
6306 the size of the current best match so that future searches
6307 will not not used the cached symbol by mistake. */
6308 else if (code_off > offset
6309 && code_off > cache->code_off
6310 && code_off < cache->code_off + cache->code_size)
6312 cache->code_size = code_off - cache->code_off;
6317 if (cache->func == NULL)
6318 return NULL;
6320 if (filename_ptr)
6321 *filename_ptr = cache->filename;
6322 if (functionname_ptr)
6323 *functionname_ptr = bfd_asymbol_name (cache->func);
6325 return cache->func;