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