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