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