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