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