PR ld/16787, stale dwarf2 stash
[external/binutils.git] / bfd / dwarf2.c
1 /* DWARF 2 support.
2    Copyright (C) 1994-2014 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 bfd, section and address of the beginning of the
104      section.  The bfd might be different than expected because of
105      gnu_debuglink sections.  */
106   bfd *bfd_ptr;
107   asection *sec;
108   bfd_byte *sec_info_ptr;
109
110   /* Support for alternate debug info sections created by the DWZ utility:
111      This includes a pointer to an alternate bfd which contains *extra*,
112      possibly duplicate debug sections, and pointers to the loaded
113      .debug_str and .debug_info sections from this bfd.  */
114   bfd *          alt_bfd_ptr;
115   bfd_byte *     alt_dwarf_str_buffer;
116   bfd_size_type  alt_dwarf_str_size;
117   bfd_byte *     alt_dwarf_info_buffer;
118   bfd_size_type  alt_dwarf_info_size;
119
120   /* A pointer to the memory block allocated for info_ptr.  Neither
121      info_ptr nor sec_info_ptr are guaranteed to stay pointing to the
122      beginning of the malloc block.  This is used only to free the
123      memory later.  */
124   bfd_byte *info_ptr_memory;
125
126   /* Pointer to the symbol table.  */
127   asymbol **syms;
128
129   /* Pointer to the .debug_abbrev section loaded into memory.  */
130   bfd_byte *dwarf_abbrev_buffer;
131
132   /* Length of the loaded .debug_abbrev section.  */
133   bfd_size_type dwarf_abbrev_size;
134
135   /* Buffer for decode_line_info.  */
136   bfd_byte *dwarf_line_buffer;
137
138   /* Length of the loaded .debug_line section.  */
139   bfd_size_type dwarf_line_size;
140
141   /* Pointer to the .debug_str section loaded into memory.  */
142   bfd_byte *dwarf_str_buffer;
143
144   /* Length of the loaded .debug_str section.  */
145   bfd_size_type dwarf_str_size;
146
147   /* Pointer to the .debug_ranges section loaded into memory. */
148   bfd_byte *dwarf_ranges_buffer;
149
150   /* Length of the loaded .debug_ranges section. */
151   bfd_size_type dwarf_ranges_size;
152
153   /* If the most recent call to bfd_find_nearest_line was given an
154      address in an inlined function, preserve a pointer into the
155      calling chain for subsequent calls to bfd_find_inliner_info to
156      use. */
157   struct funcinfo *inliner_chain;
158
159   /* Section VMAs at the time the stash was built.  */
160   bfd_vma *sec_vma;
161
162   /* Number of sections whose VMA we must adjust.  */
163   unsigned int adjusted_section_count;
164
165   /* Array of sections with adjusted VMA.  */
166   struct adjusted_section *adjusted_sections;
167
168   /* Number of times find_line is called.  This is used in
169      the heuristic for enabling the info hash tables.  */
170   int info_hash_count;
171
172 #define STASH_INFO_HASH_TRIGGER    100
173
174   /* Hash table mapping symbol names to function infos.  */
175   struct info_hash_table *funcinfo_hash_table;
176
177   /* Hash table mapping symbol names to variable infos.  */
178   struct info_hash_table *varinfo_hash_table;
179
180   /* Head of comp_unit list in the last hash table update.  */
181   struct comp_unit *hash_units_head;
182
183   /* Status of info hash.  */
184   int info_hash_status;
185 #define STASH_INFO_HASH_OFF        0
186 #define STASH_INFO_HASH_ON         1
187 #define STASH_INFO_HASH_DISABLED   2
188
189   /* True if we opened bfd_ptr.  */
190   bfd_boolean close_on_cleanup;
191 };
192
193 struct arange
194 {
195   struct arange *next;
196   bfd_vma low;
197   bfd_vma high;
198 };
199
200 /* A minimal decoding of DWARF2 compilation units.  We only decode
201    what's needed to get to the line number information.  */
202
203 struct comp_unit
204 {
205   /* Chain the previously read compilation units.  */
206   struct comp_unit *next_unit;
207
208   /* Likewise, chain the compilation unit read after this one.
209      The comp units are stored in reversed reading order.  */
210   struct comp_unit *prev_unit;
211
212   /* Keep the bfd convenient (for memory allocation).  */
213   bfd *abfd;
214
215   /* The lowest and highest addresses contained in this compilation
216      unit as specified in the compilation unit header.  */
217   struct arange arange;
218
219   /* The DW_AT_name attribute (for error messages).  */
220   char *name;
221
222   /* The abbrev hash table.  */
223   struct abbrev_info **abbrevs;
224
225   /* Note that an error was found by comp_unit_find_nearest_line.  */
226   int error;
227
228   /* The DW_AT_comp_dir attribute.  */
229   char *comp_dir;
230
231   /* TRUE if there is a line number table associated with this comp. unit.  */
232   int stmtlist;
233
234   /* Pointer to the current comp_unit so that we can find a given entry
235      by its reference.  */
236   bfd_byte *info_ptr_unit;
237
238   /* Pointer to the start of the debug section, for DW_FORM_ref_addr.  */
239   bfd_byte *sec_info_ptr;
240
241   /* The offset into .debug_line of the line number table.  */
242   unsigned long line_offset;
243
244   /* Pointer to the first child die for the comp unit.  */
245   bfd_byte *first_child_die_ptr;
246
247   /* The end of the comp unit.  */
248   bfd_byte *end_ptr;
249
250   /* The decoded line number, NULL if not yet decoded.  */
251   struct line_info_table *line_table;
252
253   /* A list of the functions found in this comp. unit.  */
254   struct funcinfo *function_table;
255
256   /* A list of the variables found in this comp. unit.  */
257   struct varinfo *variable_table;
258
259   /* Pointer to dwarf2_debug structure.  */
260   struct dwarf2_debug *stash;
261
262   /* DWARF format version for this unit - from unit header.  */
263   int version;
264
265   /* Address size for this unit - from unit header.  */
266   unsigned char addr_size;
267
268   /* Offset size for this unit - from unit header.  */
269   unsigned char offset_size;
270
271   /* Base address for this unit - from DW_AT_low_pc attribute of
272      DW_TAG_compile_unit DIE */
273   bfd_vma base_address;
274
275   /* TRUE if symbols are cached in hash table for faster lookup by name.  */
276   bfd_boolean cached;
277 };
278
279 /* This data structure holds the information of an abbrev.  */
280 struct abbrev_info
281 {
282   unsigned int number;          /* Number identifying abbrev.  */
283   enum dwarf_tag tag;           /* DWARF tag.  */
284   int has_children;             /* Boolean.  */
285   unsigned int num_attrs;       /* Number of attributes.  */
286   struct attr_abbrev *attrs;    /* An array of attribute descriptions.  */
287   struct abbrev_info *next;     /* Next in chain.  */
288 };
289
290 struct attr_abbrev
291 {
292   enum dwarf_attribute name;
293   enum dwarf_form form;
294 };
295
296 /* Map of uncompressed DWARF debug section name to compressed one.  It
297    is terminated by NULL uncompressed_name.  */
298
299 const struct dwarf_debug_section dwarf_debug_sections[] =
300 {
301   { ".debug_abbrev",            ".zdebug_abbrev" },
302   { ".debug_aranges",           ".zdebug_aranges" },
303   { ".debug_frame",             ".zdebug_frame" },
304   { ".debug_info",              ".zdebug_info" },
305   { ".debug_info",              ".zdebug_info" },
306   { ".debug_line",              ".zdebug_line" },
307   { ".debug_loc",               ".zdebug_loc" },
308   { ".debug_macinfo",           ".zdebug_macinfo" },
309   { ".debug_macro",             ".zdebug_macro" },
310   { ".debug_pubnames",          ".zdebug_pubnames" },
311   { ".debug_pubtypes",          ".zdebug_pubtypes" },
312   { ".debug_ranges",            ".zdebug_ranges" },
313   { ".debug_static_func",       ".zdebug_static_func" },
314   { ".debug_static_vars",       ".zdebug_static_vars" },
315   { ".debug_str",               ".zdebug_str", },
316   { ".debug_str",               ".zdebug_str", },
317   { ".debug_types",             ".zdebug_types" },
318   /* GNU DWARF 1 extensions */
319   { ".debug_sfnames",           ".zdebug_sfnames" },
320   { ".debug_srcinfo",           ".zebug_srcinfo" },
321   /* SGI/MIPS DWARF 2 extensions */
322   { ".debug_funcnames",         ".zdebug_funcnames" },
323   { ".debug_typenames",         ".zdebug_typenames" },
324   { ".debug_varnames",          ".zdebug_varnames" },
325   { ".debug_weaknames",         ".zdebug_weaknames" },
326   { NULL,                       NULL },
327 };
328
329 /* NB/ Numbers in this enum must match up with indicies
330    into the dwarf_debug_sections[] array above.  */
331 enum dwarf_debug_section_enum
332 {
333   debug_abbrev = 0,
334   debug_aranges,
335   debug_frame,
336   debug_info,
337   debug_info_alt,
338   debug_line,
339   debug_loc,
340   debug_macinfo,
341   debug_macro,
342   debug_pubnames,
343   debug_pubtypes,
344   debug_ranges,
345   debug_static_func,
346   debug_static_vars,
347   debug_str,
348   debug_str_alt,
349   debug_types,
350   debug_sfnames,
351   debug_srcinfo,
352   debug_funcnames,
353   debug_typenames,
354   debug_varnames,
355   debug_weaknames
356 };
357
358 #ifndef ABBREV_HASH_SIZE
359 #define ABBREV_HASH_SIZE 121
360 #endif
361 #ifndef ATTR_ALLOC_CHUNK
362 #define ATTR_ALLOC_CHUNK 4
363 #endif
364
365 /* Variable and function hash tables.  This is used to speed up look-up
366    in lookup_symbol_in_var_table() and lookup_symbol_in_function_table().
367    In order to share code between variable and function infos, we use
368    a list of untyped pointer for all variable/function info associated with
369    a symbol.  We waste a bit of memory for list with one node but that
370    simplifies the code.  */
371
372 struct info_list_node
373 {
374   struct info_list_node *next;
375   void *info;
376 };
377
378 /* Info hash entry.  */
379 struct info_hash_entry
380 {
381   struct bfd_hash_entry root;
382   struct info_list_node *head;
383 };
384
385 struct info_hash_table
386 {
387   struct bfd_hash_table base;
388 };
389
390 /* Function to create a new entry in info hash table. */
391
392 static struct bfd_hash_entry *
393 info_hash_table_newfunc (struct bfd_hash_entry *entry,
394                          struct bfd_hash_table *table,
395                          const char *string)
396 {
397   struct info_hash_entry *ret = (struct info_hash_entry *) entry;
398
399   /* Allocate the structure if it has not already been allocated by a
400      derived class.  */
401   if (ret == NULL)
402     {
403       ret = (struct info_hash_entry *) bfd_hash_allocate (table,
404                                                           sizeof (* ret));
405       if (ret == NULL)
406         return NULL;
407     }
408
409   /* Call the allocation method of the base class.  */
410   ret = ((struct info_hash_entry *)
411          bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string));
412
413   /* Initialize the local fields here.  */
414   if (ret)
415     ret->head = NULL;
416
417   return (struct bfd_hash_entry *) ret;
418 }
419
420 /* Function to create a new info hash table.  It returns a pointer to the
421    newly created table or NULL if there is any error.  We need abfd
422    solely for memory allocation.  */
423
424 static struct info_hash_table *
425 create_info_hash_table (bfd *abfd)
426 {
427   struct info_hash_table *hash_table;
428
429   hash_table = ((struct info_hash_table *)
430                 bfd_alloc (abfd, sizeof (struct info_hash_table)));
431   if (!hash_table)
432     return hash_table;
433
434   if (!bfd_hash_table_init (&hash_table->base, info_hash_table_newfunc,
435                             sizeof (struct info_hash_entry)))
436     {
437       bfd_release (abfd, hash_table);
438       return NULL;
439     }
440
441   return hash_table;
442 }
443
444 /* Insert an info entry into an info hash table.  We do not check of
445    duplicate entries.  Also, the caller need to guarantee that the
446    right type of info in inserted as info is passed as a void* pointer.
447    This function returns true if there is no error.  */
448
449 static bfd_boolean
450 insert_info_hash_table (struct info_hash_table *hash_table,
451                         const char *key,
452                         void *info,
453                         bfd_boolean copy_p)
454 {
455   struct info_hash_entry *entry;
456   struct info_list_node *node;
457
458   entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base,
459                                                      key, TRUE, copy_p);
460   if (!entry)
461     return FALSE;
462
463   node = (struct info_list_node *) bfd_hash_allocate (&hash_table->base,
464                                                       sizeof (*node));
465   if (!node)
466     return FALSE;
467
468   node->info = info;
469   node->next = entry->head;
470   entry->head = node;
471
472   return TRUE;
473 }
474
475 /* Look up an info entry list from an info hash table.  Return NULL
476    if there is none. */
477
478 static struct info_list_node *
479 lookup_info_hash_table (struct info_hash_table *hash_table, const char *key)
480 {
481   struct info_hash_entry *entry;
482
483   entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base, key,
484                                                      FALSE, FALSE);
485   return entry ? entry->head : NULL;
486 }
487
488 /* Read a section into its appropriate place in the dwarf2_debug
489    struct (indicated by SECTION_BUFFER and SECTION_SIZE).  If SYMS is
490    not NULL, use bfd_simple_get_relocated_section_contents to read the
491    section contents, otherwise use bfd_get_section_contents.  Fail if
492    the located section does not contain at least OFFSET bytes.  */
493
494 static bfd_boolean
495 read_section (bfd *           abfd,
496               const struct dwarf_debug_section *sec,
497               asymbol **      syms,
498               bfd_uint64_t    offset,
499               bfd_byte **     section_buffer,
500               bfd_size_type * section_size)
501 {
502   asection *msec;
503   const char *section_name = sec->uncompressed_name;
504
505   /* The section may have already been read.  */
506   if (*section_buffer == NULL)
507     {
508       msec = bfd_get_section_by_name (abfd, section_name);
509       if (! msec)
510         {
511           section_name = sec->compressed_name;
512           if (section_name != NULL)
513             msec = bfd_get_section_by_name (abfd, section_name);
514         }
515       if (! msec)
516         {
517           (*_bfd_error_handler) (_("Dwarf Error: Can't find %s section."),
518                                  sec->uncompressed_name);
519           bfd_set_error (bfd_error_bad_value);
520           return FALSE;
521         }
522
523       *section_size = msec->rawsize ? msec->rawsize : msec->size;
524       if (syms)
525         {
526           *section_buffer
527             = bfd_simple_get_relocated_section_contents (abfd, msec, NULL, syms);
528           if (! *section_buffer)
529             return FALSE;
530         }
531       else
532         {
533           *section_buffer = (bfd_byte *) bfd_malloc (*section_size);
534           if (! *section_buffer)
535             return FALSE;
536           if (! bfd_get_section_contents (abfd, msec, *section_buffer,
537                                           0, *section_size))
538             return FALSE;
539         }
540     }
541
542   /* It is possible to get a bad value for the offset into the section
543      that the client wants.  Validate it here to avoid trouble later.  */
544   if (offset != 0 && offset >= *section_size)
545     {
546       (*_bfd_error_handler) (_("Dwarf Error: Offset (%lu)"
547                                " greater than or equal to %s size (%lu)."),
548                              (long) offset, section_name, *section_size);
549       bfd_set_error (bfd_error_bad_value);
550       return FALSE;
551     }
552
553   return TRUE;
554 }
555
556 /* VERBATIM
557    The following function up to the END VERBATIM mark are
558    copied directly from dwarf2read.c.  */
559
560 /* Read dwarf information from a buffer.  */
561
562 static unsigned int
563 read_1_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf)
564 {
565   return bfd_get_8 (abfd, buf);
566 }
567
568 static int
569 read_1_signed_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf)
570 {
571   return bfd_get_signed_8 (abfd, buf);
572 }
573
574 static unsigned int
575 read_2_bytes (bfd *abfd, bfd_byte *buf)
576 {
577   return bfd_get_16 (abfd, buf);
578 }
579
580 static unsigned int
581 read_4_bytes (bfd *abfd, bfd_byte *buf)
582 {
583   return bfd_get_32 (abfd, buf);
584 }
585
586 static bfd_uint64_t
587 read_8_bytes (bfd *abfd, bfd_byte *buf)
588 {
589   return bfd_get_64 (abfd, buf);
590 }
591
592 static bfd_byte *
593 read_n_bytes (bfd *abfd ATTRIBUTE_UNUSED,
594               bfd_byte *buf,
595               unsigned int size ATTRIBUTE_UNUSED)
596 {
597   return buf;
598 }
599
600 static char *
601 read_string (bfd *abfd ATTRIBUTE_UNUSED,
602              bfd_byte *buf,
603              unsigned int *bytes_read_ptr)
604 {
605   /* Return a pointer to the embedded string.  */
606   char *str = (char *) buf;
607
608   if (*str == '\0')
609     {
610       *bytes_read_ptr = 1;
611       return NULL;
612     }
613
614   *bytes_read_ptr = strlen (str) + 1;
615   return str;
616 }
617
618 /* END VERBATIM */
619
620 static char *
621 read_indirect_string (struct comp_unit * unit,
622                       bfd_byte *         buf,
623                       unsigned int *     bytes_read_ptr)
624 {
625   bfd_uint64_t offset;
626   struct dwarf2_debug *stash = unit->stash;
627   char *str;
628
629   if (unit->offset_size == 4)
630     offset = read_4_bytes (unit->abfd, buf);
631   else
632     offset = read_8_bytes (unit->abfd, buf);
633
634   *bytes_read_ptr = unit->offset_size;
635
636   if (! read_section (unit->abfd, &stash->debug_sections[debug_str],
637                       stash->syms, offset,
638                       &stash->dwarf_str_buffer, &stash->dwarf_str_size))
639     return NULL;
640
641   str = (char *) stash->dwarf_str_buffer + offset;
642   if (*str == '\0')
643     return NULL;
644   return str;
645 }
646
647 /* Like read_indirect_string but uses a .debug_str located in
648    an alternate filepointed to by the .gnu_debuglink section.
649    Used to impement DW_FORM_GNU_strp_alt.  */
650
651 static char *
652 read_alt_indirect_string (struct comp_unit * unit,
653                           bfd_byte *         buf,
654                           unsigned int *     bytes_read_ptr)
655 {
656   bfd_uint64_t offset;
657   struct dwarf2_debug *stash = unit->stash;
658   char *str;
659
660   if (unit->offset_size == 4)
661     offset = read_4_bytes (unit->abfd, buf);
662   else
663     offset = read_8_bytes (unit->abfd, buf);
664
665   *bytes_read_ptr = unit->offset_size;
666
667   if (stash->alt_bfd_ptr == NULL)
668     {
669       bfd *  debug_bfd;
670       char * debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR);
671
672       if (debug_filename == NULL)
673         return NULL;
674
675       if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL
676           || ! bfd_check_format (debug_bfd, bfd_object))
677         {
678           if (debug_bfd)
679             bfd_close (debug_bfd);
680
681           /* FIXME: Should we report our failure to follow the debuglink ?  */
682           free (debug_filename);
683           return NULL;
684         }
685       stash->alt_bfd_ptr = debug_bfd;
686     }
687   
688   if (! read_section (unit->stash->alt_bfd_ptr,
689                       stash->debug_sections + debug_str_alt,
690                       NULL, /* FIXME: Do we need to load alternate symbols ?  */
691                       offset,
692                       &stash->alt_dwarf_str_buffer,
693                       &stash->alt_dwarf_str_size))
694     return NULL;
695
696   str = (char *) stash->alt_dwarf_str_buffer + offset;
697   if (*str == '\0')
698     return NULL;
699
700   return str;
701 }
702
703 /* Resolve an alternate reference from UNIT at OFFSET.
704    Returns a pointer into the loaded alternate CU upon success
705    or NULL upon failure.  */
706
707 static bfd_byte *
708 read_alt_indirect_ref (struct comp_unit * unit,
709                        bfd_uint64_t       offset)
710 {
711   struct dwarf2_debug *stash = unit->stash;
712
713   if (stash->alt_bfd_ptr == NULL)
714     {
715       bfd *  debug_bfd;
716       char * debug_filename = bfd_follow_gnu_debugaltlink (unit->abfd, DEBUGDIR);
717
718       if (debug_filename == NULL)
719         return FALSE;
720
721       if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL
722           || ! bfd_check_format (debug_bfd, bfd_object))
723         {
724           if (debug_bfd)
725             bfd_close (debug_bfd);
726
727           /* FIXME: Should we report our failure to follow the debuglink ?  */
728           free (debug_filename);
729           return NULL;
730         }
731       stash->alt_bfd_ptr = debug_bfd;
732     }
733   
734   if (! read_section (unit->stash->alt_bfd_ptr,
735                       stash->debug_sections + debug_info_alt,
736                       NULL, /* FIXME: Do we need to load alternate symbols ?  */
737                       offset,
738                       &stash->alt_dwarf_info_buffer,
739                       &stash->alt_dwarf_info_size))
740     return NULL;
741
742   return stash->alt_dwarf_info_buffer + offset;
743 }
744
745 static bfd_uint64_t
746 read_address (struct comp_unit *unit, bfd_byte *buf)
747 {
748   int signed_vma = get_elf_backend_data (unit->abfd)->sign_extend_vma;
749
750   if (signed_vma)
751     {
752       switch (unit->addr_size)
753         {
754         case 8:
755           return bfd_get_signed_64 (unit->abfd, buf);
756         case 4:
757           return bfd_get_signed_32 (unit->abfd, buf);
758         case 2:
759           return bfd_get_signed_16 (unit->abfd, buf);
760         default:
761           abort ();
762         }
763     }
764   else
765     {
766       switch (unit->addr_size)
767         {
768         case 8:
769           return bfd_get_64 (unit->abfd, buf);
770         case 4:
771           return bfd_get_32 (unit->abfd, buf);
772         case 2:
773           return bfd_get_16 (unit->abfd, buf);
774         default:
775           abort ();
776         }
777     }
778 }
779
780 /* Lookup an abbrev_info structure in the abbrev hash table.  */
781
782 static struct abbrev_info *
783 lookup_abbrev (unsigned int number, struct abbrev_info **abbrevs)
784 {
785   unsigned int hash_number;
786   struct abbrev_info *abbrev;
787
788   hash_number = number % ABBREV_HASH_SIZE;
789   abbrev = abbrevs[hash_number];
790
791   while (abbrev)
792     {
793       if (abbrev->number == number)
794         return abbrev;
795       else
796         abbrev = abbrev->next;
797     }
798
799   return NULL;
800 }
801
802 /* In DWARF version 2, the description of the debugging information is
803    stored in a separate .debug_abbrev section.  Before we read any
804    dies from a section we read in all abbreviations and install them
805    in a hash table.  */
806
807 static struct abbrev_info**
808 read_abbrevs (bfd *abfd, bfd_uint64_t offset, struct dwarf2_debug *stash)
809 {
810   struct abbrev_info **abbrevs;
811   bfd_byte *abbrev_ptr;
812   struct abbrev_info *cur_abbrev;
813   unsigned int abbrev_number, bytes_read, abbrev_name;
814   unsigned int abbrev_form, hash_number;
815   bfd_size_type amt;
816
817   if (! read_section (abfd, &stash->debug_sections[debug_abbrev],
818                       stash->syms, offset,
819                       &stash->dwarf_abbrev_buffer, &stash->dwarf_abbrev_size))
820     return NULL;
821
822   amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE;
823   abbrevs = (struct abbrev_info **) bfd_zalloc (abfd, amt);
824   if (abbrevs == NULL)
825     return NULL;
826
827   abbrev_ptr = stash->dwarf_abbrev_buffer + offset;
828   abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
829   abbrev_ptr += bytes_read;
830
831   /* Loop until we reach an abbrev number of 0.  */
832   while (abbrev_number)
833     {
834       amt = sizeof (struct abbrev_info);
835       cur_abbrev = (struct abbrev_info *) bfd_zalloc (abfd, amt);
836       if (cur_abbrev == NULL)
837         return NULL;
838
839       /* Read in abbrev header.  */
840       cur_abbrev->number = abbrev_number;
841       cur_abbrev->tag = (enum dwarf_tag)
842         read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
843       abbrev_ptr += bytes_read;
844       cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
845       abbrev_ptr += 1;
846
847       /* Now read in declarations.  */
848       abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
849       abbrev_ptr += bytes_read;
850       abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
851       abbrev_ptr += bytes_read;
852
853       while (abbrev_name)
854         {
855           if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
856             {
857               struct attr_abbrev *tmp;
858
859               amt = cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK;
860               amt *= sizeof (struct attr_abbrev);
861               tmp = (struct attr_abbrev *) bfd_realloc (cur_abbrev->attrs, amt);
862               if (tmp == NULL)
863                 {
864                   size_t i;
865
866                   for (i = 0; i < ABBREV_HASH_SIZE; i++)
867                     {
868                       struct abbrev_info *abbrev = abbrevs[i];
869
870                       while (abbrev)
871                         {
872                           free (abbrev->attrs);
873                           abbrev = abbrev->next;
874                         }
875                     }
876                   return NULL;
877                 }
878               cur_abbrev->attrs = tmp;
879             }
880
881           cur_abbrev->attrs[cur_abbrev->num_attrs].name
882             = (enum dwarf_attribute) abbrev_name;
883           cur_abbrev->attrs[cur_abbrev->num_attrs++].form
884             = (enum dwarf_form) abbrev_form;
885           abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
886           abbrev_ptr += bytes_read;
887           abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
888           abbrev_ptr += bytes_read;
889         }
890
891       hash_number = abbrev_number % ABBREV_HASH_SIZE;
892       cur_abbrev->next = abbrevs[hash_number];
893       abbrevs[hash_number] = cur_abbrev;
894
895       /* Get next abbreviation.
896          Under Irix6 the abbreviations for a compilation unit are not
897          always properly terminated with an abbrev number of 0.
898          Exit loop if we encounter an abbreviation which we have
899          already read (which means we are about to read the abbreviations
900          for the next compile unit) or if the end of the abbreviation
901          table is reached.  */
902       if ((unsigned int) (abbrev_ptr - stash->dwarf_abbrev_buffer)
903           >= stash->dwarf_abbrev_size)
904         break;
905       abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
906       abbrev_ptr += bytes_read;
907       if (lookup_abbrev (abbrev_number,abbrevs) != NULL)
908         break;
909     }
910
911   return abbrevs;
912 }
913
914 /* Read an attribute value described by an attribute form.  */
915
916 static bfd_byte *
917 read_attribute_value (struct attribute *attr,
918                       unsigned form,
919                       struct comp_unit *unit,
920                       bfd_byte *info_ptr)
921 {
922   bfd *abfd = unit->abfd;
923   unsigned int bytes_read;
924   struct dwarf_block *blk;
925   bfd_size_type amt;
926
927   attr->form = (enum dwarf_form) form;
928
929   switch (form)
930     {
931     case DW_FORM_ref_addr:
932       /* DW_FORM_ref_addr is an address in DWARF2, and an offset in
933          DWARF3.  */
934       if (unit->version == 3 || unit->version == 4)
935         {
936           if (unit->offset_size == 4)
937             attr->u.val = read_4_bytes (unit->abfd, info_ptr);
938           else
939             attr->u.val = read_8_bytes (unit->abfd, info_ptr);
940           info_ptr += unit->offset_size;
941           break;
942         }
943       /* FALLTHROUGH */
944     case DW_FORM_addr:
945       attr->u.val = read_address (unit, info_ptr);
946       info_ptr += unit->addr_size;
947       break;
948     case DW_FORM_GNU_ref_alt:
949     case DW_FORM_sec_offset:
950       if (unit->offset_size == 4)
951         attr->u.val = read_4_bytes (unit->abfd, info_ptr);
952       else
953         attr->u.val = read_8_bytes (unit->abfd, info_ptr);
954       info_ptr += unit->offset_size;
955       break;
956     case DW_FORM_block2:
957       amt = sizeof (struct dwarf_block);
958       blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
959       if (blk == NULL)
960         return NULL;
961       blk->size = read_2_bytes (abfd, info_ptr);
962       info_ptr += 2;
963       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
964       info_ptr += blk->size;
965       attr->u.blk = blk;
966       break;
967     case DW_FORM_block4:
968       amt = sizeof (struct dwarf_block);
969       blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
970       if (blk == NULL)
971         return NULL;
972       blk->size = read_4_bytes (abfd, info_ptr);
973       info_ptr += 4;
974       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
975       info_ptr += blk->size;
976       attr->u.blk = blk;
977       break;
978     case DW_FORM_data2:
979       attr->u.val = read_2_bytes (abfd, info_ptr);
980       info_ptr += 2;
981       break;
982     case DW_FORM_data4:
983       attr->u.val = read_4_bytes (abfd, info_ptr);
984       info_ptr += 4;
985       break;
986     case DW_FORM_data8:
987       attr->u.val = read_8_bytes (abfd, info_ptr);
988       info_ptr += 8;
989       break;
990     case DW_FORM_string:
991       attr->u.str = read_string (abfd, info_ptr, &bytes_read);
992       info_ptr += bytes_read;
993       break;
994     case DW_FORM_strp:
995       attr->u.str = read_indirect_string (unit, info_ptr, &bytes_read);
996       info_ptr += bytes_read;
997       break;
998     case DW_FORM_GNU_strp_alt:
999       attr->u.str = read_alt_indirect_string (unit, info_ptr, &bytes_read);
1000       info_ptr += bytes_read;
1001       break;
1002     case DW_FORM_exprloc:
1003     case DW_FORM_block:
1004       amt = sizeof (struct dwarf_block);
1005       blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
1006       if (blk == NULL)
1007         return NULL;
1008       blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1009       info_ptr += bytes_read;
1010       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
1011       info_ptr += blk->size;
1012       attr->u.blk = blk;
1013       break;
1014     case DW_FORM_block1:
1015       amt = sizeof (struct dwarf_block);
1016       blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
1017       if (blk == NULL)
1018         return NULL;
1019       blk->size = read_1_byte (abfd, info_ptr);
1020       info_ptr += 1;
1021       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
1022       info_ptr += blk->size;
1023       attr->u.blk = blk;
1024       break;
1025     case DW_FORM_data1:
1026       attr->u.val = read_1_byte (abfd, info_ptr);
1027       info_ptr += 1;
1028       break;
1029     case DW_FORM_flag:
1030       attr->u.val = read_1_byte (abfd, info_ptr);
1031       info_ptr += 1;
1032       break;
1033     case DW_FORM_flag_present:
1034       attr->u.val = 1;
1035       break;
1036     case DW_FORM_sdata:
1037       attr->u.sval = read_signed_leb128 (abfd, info_ptr, &bytes_read);
1038       info_ptr += bytes_read;
1039       break;
1040     case DW_FORM_udata:
1041       attr->u.val = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1042       info_ptr += bytes_read;
1043       break;
1044     case DW_FORM_ref1:
1045       attr->u.val = read_1_byte (abfd, info_ptr);
1046       info_ptr += 1;
1047       break;
1048     case DW_FORM_ref2:
1049       attr->u.val = read_2_bytes (abfd, info_ptr);
1050       info_ptr += 2;
1051       break;
1052     case DW_FORM_ref4:
1053       attr->u.val = read_4_bytes (abfd, info_ptr);
1054       info_ptr += 4;
1055       break;
1056     case DW_FORM_ref8:
1057       attr->u.val = read_8_bytes (abfd, info_ptr);
1058       info_ptr += 8;
1059       break;
1060     case DW_FORM_ref_sig8:
1061       attr->u.val = read_8_bytes (abfd, info_ptr);
1062       info_ptr += 8;
1063       break;
1064     case DW_FORM_ref_udata:
1065       attr->u.val = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1066       info_ptr += bytes_read;
1067       break;
1068     case DW_FORM_indirect:
1069       form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1070       info_ptr += bytes_read;
1071       info_ptr = read_attribute_value (attr, form, unit, info_ptr);
1072       break;
1073     default:
1074       (*_bfd_error_handler) (_("Dwarf Error: Invalid or unhandled FORM value: %#x."),
1075                              form);
1076       bfd_set_error (bfd_error_bad_value);
1077       return NULL;
1078     }
1079   return info_ptr;
1080 }
1081
1082 /* Read an attribute described by an abbreviated attribute.  */
1083
1084 static bfd_byte *
1085 read_attribute (struct attribute *attr,
1086                 struct attr_abbrev *abbrev,
1087                 struct comp_unit *unit,
1088                 bfd_byte *info_ptr)
1089 {
1090   attr->name = abbrev->name;
1091   info_ptr = read_attribute_value (attr, abbrev->form, unit, info_ptr);
1092   return info_ptr;
1093 }
1094
1095 /* Source line information table routines.  */
1096
1097 #define FILE_ALLOC_CHUNK 5
1098 #define DIR_ALLOC_CHUNK 5
1099
1100 struct line_info
1101 {
1102   struct line_info* prev_line;
1103   bfd_vma address;
1104   char *filename;
1105   unsigned int line;
1106   unsigned int column;
1107   unsigned int discriminator;
1108   unsigned char op_index;
1109   unsigned char end_sequence;           /* End of (sequential) code sequence.  */
1110 };
1111
1112 struct fileinfo
1113 {
1114   char *name;
1115   unsigned int dir;
1116   unsigned int time;
1117   unsigned int size;
1118 };
1119
1120 struct line_sequence
1121 {
1122   bfd_vma               low_pc;
1123   struct line_sequence* prev_sequence;
1124   struct line_info*     last_line;  /* Largest VMA.  */
1125 };
1126
1127 struct line_info_table
1128 {
1129   bfd*                  abfd;
1130   unsigned int          num_files;
1131   unsigned int          num_dirs;
1132   unsigned int          num_sequences;
1133   char *                comp_dir;
1134   char **               dirs;
1135   struct fileinfo*      files;
1136   struct line_sequence* sequences;
1137   struct line_info*     lcl_head;   /* Local head; used in 'add_line_info'.  */
1138 };
1139
1140 /* Remember some information about each function.  If the function is
1141    inlined (DW_TAG_inlined_subroutine) it may have two additional
1142    attributes, DW_AT_call_file and DW_AT_call_line, which specify the
1143    source code location where this function was inlined.  */
1144
1145 struct funcinfo
1146 {
1147   /* Pointer to previous function in list of all functions.  */
1148   struct funcinfo *prev_func;
1149   /* Pointer to function one scope higher.  */
1150   struct funcinfo *caller_func;
1151   /* Source location file name where caller_func inlines this func.  */
1152   char *caller_file;
1153   /* Source location line number where caller_func inlines this func.  */
1154   int caller_line;
1155   /* Source location file name.  */
1156   char *file;
1157   /* Source location line number.  */
1158   int line;
1159   int tag;
1160   char *name;
1161   struct arange arange;
1162   /* Where the symbol is defined.  */
1163   asection *sec;
1164 };
1165
1166 struct varinfo
1167 {
1168   /* Pointer to previous variable in list of all variables */
1169   struct varinfo *prev_var;
1170   /* Source location file name */
1171   char *file;
1172   /* Source location line number */
1173   int line;
1174   int tag;
1175   char *name;
1176   bfd_vma addr;
1177   /* Where the symbol is defined */
1178   asection *sec;
1179   /* Is this a stack variable? */
1180   unsigned int stack: 1;
1181 };
1182
1183 /* Return TRUE if NEW_LINE should sort after LINE.  */
1184
1185 static inline bfd_boolean
1186 new_line_sorts_after (struct line_info *new_line, struct line_info *line)
1187 {
1188   return (new_line->address > line->address
1189           || (new_line->address == line->address
1190               && (new_line->op_index > line->op_index
1191                   || (new_line->op_index == line->op_index
1192                       && new_line->end_sequence < line->end_sequence))));
1193 }
1194
1195
1196 /* Adds a new entry to the line_info list in the line_info_table, ensuring
1197    that the list is sorted.  Note that the line_info list is sorted from
1198    highest to lowest VMA (with possible duplicates); that is,
1199    line_info->prev_line always accesses an equal or smaller VMA.  */
1200
1201 static bfd_boolean
1202 add_line_info (struct line_info_table *table,
1203                bfd_vma address,
1204                unsigned char op_index,
1205                char *filename,
1206                unsigned int line,
1207                unsigned int column,
1208                unsigned int discriminator,
1209                int end_sequence)
1210 {
1211   bfd_size_type amt = sizeof (struct line_info);
1212   struct line_sequence* seq = table->sequences;
1213   struct line_info* info = (struct line_info *) bfd_alloc (table->abfd, amt);
1214
1215   if (info == NULL)
1216     return FALSE;
1217
1218   /* Set member data of 'info'.  */
1219   info->prev_line = NULL;
1220   info->address = address;
1221   info->op_index = op_index;
1222   info->line = line;
1223   info->column = column;
1224   info->discriminator = discriminator;
1225   info->end_sequence = end_sequence;
1226
1227   if (filename && filename[0])
1228     {
1229       info->filename = (char *) bfd_alloc (table->abfd, strlen (filename) + 1);
1230       if (info->filename == NULL)
1231         return FALSE;
1232       strcpy (info->filename, filename);
1233     }
1234   else
1235     info->filename = NULL;
1236
1237   /* Find the correct location for 'info'.  Normally we will receive
1238      new line_info data 1) in order and 2) with increasing VMAs.
1239      However some compilers break the rules (cf. decode_line_info) and
1240      so we include some heuristics for quickly finding the correct
1241      location for 'info'. In particular, these heuristics optimize for
1242      the common case in which the VMA sequence that we receive is a
1243      list of locally sorted VMAs such as
1244        p...z a...j  (where a < j < p < z)
1245
1246      Note: table->lcl_head is used to head an *actual* or *possible*
1247      sub-sequence within the list (such as a...j) that is not directly
1248      headed by table->last_line
1249
1250      Note: we may receive duplicate entries from 'decode_line_info'.  */
1251
1252   if (seq
1253       && seq->last_line->address == address
1254       && seq->last_line->op_index == op_index
1255       && seq->last_line->end_sequence == end_sequence)
1256     {
1257       /* We only keep the last entry with the same address and end
1258          sequence.  See PR ld/4986.  */
1259       if (table->lcl_head == seq->last_line)
1260         table->lcl_head = info;
1261       info->prev_line = seq->last_line->prev_line;
1262       seq->last_line = info;
1263     }
1264   else if (!seq || seq->last_line->end_sequence)
1265     {
1266       /* Start a new line sequence.  */
1267       amt = sizeof (struct line_sequence);
1268       seq = (struct line_sequence *) bfd_malloc (amt);
1269       if (seq == NULL)
1270         return FALSE;
1271       seq->low_pc = address;
1272       seq->prev_sequence = table->sequences;
1273       seq->last_line = info;
1274       table->lcl_head = info;
1275       table->sequences = seq;
1276       table->num_sequences++;
1277     }
1278   else if (new_line_sorts_after (info, seq->last_line))
1279     {
1280       /* Normal case: add 'info' to the beginning of the current sequence.  */
1281       info->prev_line = seq->last_line;
1282       seq->last_line = info;
1283
1284       /* lcl_head: initialize to head a *possible* sequence at the end.  */
1285       if (!table->lcl_head)
1286         table->lcl_head = info;
1287     }
1288   else if (!new_line_sorts_after (info, table->lcl_head)
1289            && (!table->lcl_head->prev_line
1290                || new_line_sorts_after (info, table->lcl_head->prev_line)))
1291     {
1292       /* Abnormal but easy: lcl_head is the head of 'info'.  */
1293       info->prev_line = table->lcl_head->prev_line;
1294       table->lcl_head->prev_line = info;
1295     }
1296   else
1297     {
1298       /* Abnormal and hard: Neither 'last_line' nor 'lcl_head'
1299          are valid heads for 'info'.  Reset 'lcl_head'.  */
1300       struct line_info* li2 = seq->last_line; /* Always non-NULL.  */
1301       struct line_info* li1 = li2->prev_line;
1302
1303       while (li1)
1304         {
1305           if (!new_line_sorts_after (info, li2)
1306               && new_line_sorts_after (info, li1))
1307             break;
1308
1309           li2 = li1; /* always non-NULL */
1310           li1 = li1->prev_line;
1311         }
1312       table->lcl_head = li2;
1313       info->prev_line = table->lcl_head->prev_line;
1314       table->lcl_head->prev_line = info;
1315       if (address < seq->low_pc)
1316         seq->low_pc = address;
1317     }
1318   return TRUE;
1319 }
1320
1321 /* Extract a fully qualified filename from a line info table.
1322    The returned string has been malloc'ed and it is the caller's
1323    responsibility to free it.  */
1324
1325 static char *
1326 concat_filename (struct line_info_table *table, unsigned int file)
1327 {
1328   char *filename;
1329
1330   if (file - 1 >= table->num_files)
1331     {
1332       /* FILE == 0 means unknown.  */
1333       if (file)
1334         (*_bfd_error_handler)
1335           (_("Dwarf Error: mangled line number section (bad file number)."));
1336       return strdup ("<unknown>");
1337     }
1338
1339   filename = table->files[file - 1].name;
1340
1341   if (!IS_ABSOLUTE_PATH (filename))
1342     {
1343       char *dir_name = NULL;
1344       char *subdir_name = NULL;
1345       char *name;
1346       size_t len;
1347
1348       if (table->files[file - 1].dir)
1349         subdir_name = table->dirs[table->files[file - 1].dir - 1];
1350
1351       if (!subdir_name || !IS_ABSOLUTE_PATH (subdir_name))
1352         dir_name = table->comp_dir;
1353
1354       if (!dir_name)
1355         {
1356           dir_name = subdir_name;
1357           subdir_name = NULL;
1358         }
1359
1360       if (!dir_name)
1361         return strdup (filename);
1362
1363       len = strlen (dir_name) + strlen (filename) + 2;
1364
1365       if (subdir_name)
1366         {
1367           len += strlen (subdir_name) + 1;
1368           name = (char *) bfd_malloc (len);
1369           if (name)
1370             sprintf (name, "%s/%s/%s", dir_name, subdir_name, filename);
1371         }
1372       else
1373         {
1374           name = (char *) bfd_malloc (len);
1375           if (name)
1376             sprintf (name, "%s/%s", dir_name, filename);
1377         }
1378
1379       return name;
1380     }
1381
1382   return strdup (filename);
1383 }
1384
1385 static bfd_boolean
1386 arange_add (const struct comp_unit *unit, struct arange *first_arange,
1387             bfd_vma low_pc, bfd_vma high_pc)
1388 {
1389   struct arange *arange;
1390
1391   /* Ignore empty ranges.  */
1392   if (low_pc == high_pc)
1393     return TRUE;
1394
1395   /* If the first arange is empty, use it.  */
1396   if (first_arange->high == 0)
1397     {
1398       first_arange->low = low_pc;
1399       first_arange->high = high_pc;
1400       return TRUE;
1401     }
1402
1403   /* Next see if we can cheaply extend an existing range.  */
1404   arange = first_arange;
1405   do
1406     {
1407       if (low_pc == arange->high)
1408         {
1409           arange->high = high_pc;
1410           return TRUE;
1411         }
1412       if (high_pc == arange->low)
1413         {
1414           arange->low = low_pc;
1415           return TRUE;
1416         }
1417       arange = arange->next;
1418     }
1419   while (arange);
1420
1421   /* Need to allocate a new arange and insert it into the arange list.
1422      Order isn't significant, so just insert after the first arange. */
1423   arange = (struct arange *) bfd_alloc (unit->abfd, sizeof (*arange));
1424   if (arange == NULL)
1425     return FALSE;
1426   arange->low = low_pc;
1427   arange->high = high_pc;
1428   arange->next = first_arange->next;
1429   first_arange->next = arange;
1430   return TRUE;
1431 }
1432
1433 /* Compare function for line sequences.  */
1434
1435 static int
1436 compare_sequences (const void* a, const void* b)
1437 {
1438   const struct line_sequence* seq1 = a;
1439   const struct line_sequence* seq2 = b;
1440
1441   /* Sort by low_pc as the primary key.  */
1442   if (seq1->low_pc < seq2->low_pc)
1443     return -1;
1444   if (seq1->low_pc > seq2->low_pc)
1445     return 1;
1446
1447   /* If low_pc values are equal, sort in reverse order of
1448      high_pc, so that the largest region comes first.  */
1449   if (seq1->last_line->address < seq2->last_line->address)
1450     return 1;
1451   if (seq1->last_line->address > seq2->last_line->address)
1452     return -1;
1453
1454   if (seq1->last_line->op_index < seq2->last_line->op_index)
1455     return 1;
1456   if (seq1->last_line->op_index > seq2->last_line->op_index)
1457     return -1;
1458
1459   return 0;
1460 }
1461
1462 /* Sort the line sequences for quick lookup.  */
1463
1464 static bfd_boolean
1465 sort_line_sequences (struct line_info_table* table)
1466 {
1467   bfd_size_type amt;
1468   struct line_sequence* sequences;
1469   struct line_sequence* seq;
1470   unsigned int n = 0;
1471   unsigned int num_sequences = table->num_sequences;
1472   bfd_vma last_high_pc;
1473
1474   if (num_sequences == 0)
1475     return TRUE;
1476
1477   /* Allocate space for an array of sequences.  */
1478   amt = sizeof (struct line_sequence) * num_sequences;
1479   sequences = (struct line_sequence *) bfd_alloc (table->abfd, amt);
1480   if (sequences == NULL)
1481     return FALSE;
1482
1483   /* Copy the linked list into the array, freeing the original nodes.  */
1484   seq = table->sequences;
1485   for (n = 0; n < num_sequences; n++)
1486     {
1487       struct line_sequence* last_seq = seq;
1488
1489       BFD_ASSERT (seq);
1490       sequences[n].low_pc = seq->low_pc;
1491       sequences[n].prev_sequence = NULL;
1492       sequences[n].last_line = seq->last_line;
1493       seq = seq->prev_sequence;
1494       free (last_seq);
1495     }
1496   BFD_ASSERT (seq == NULL);
1497
1498   qsort (sequences, n, sizeof (struct line_sequence), compare_sequences);
1499
1500   /* Make the list binary-searchable by trimming overlapping entries
1501      and removing nested entries.  */
1502   num_sequences = 1;
1503   last_high_pc = sequences[0].last_line->address;
1504   for (n = 1; n < table->num_sequences; n++)
1505     {
1506       if (sequences[n].low_pc < last_high_pc)
1507         {
1508           if (sequences[n].last_line->address <= last_high_pc)
1509             /* Skip nested entries.  */
1510             continue;
1511
1512           /* Trim overlapping entries.  */
1513           sequences[n].low_pc = last_high_pc;
1514         }
1515       last_high_pc = sequences[n].last_line->address;
1516       if (n > num_sequences)
1517         {
1518           /* Close up the gap.  */
1519           sequences[num_sequences].low_pc = sequences[n].low_pc;
1520           sequences[num_sequences].last_line = sequences[n].last_line;
1521         }
1522       num_sequences++;
1523     }
1524
1525   table->sequences = sequences;
1526   table->num_sequences = num_sequences;
1527   return TRUE;
1528 }
1529
1530 /* Decode the line number information for UNIT.  */
1531
1532 static struct line_info_table*
1533 decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
1534 {
1535   bfd *abfd = unit->abfd;
1536   struct line_info_table* table;
1537   bfd_byte *line_ptr;
1538   bfd_byte *line_end;
1539   struct line_head lh;
1540   unsigned int i, bytes_read, offset_size;
1541   char *cur_file, *cur_dir;
1542   unsigned char op_code, extended_op, adj_opcode;
1543   unsigned int exop_len;
1544   bfd_size_type amt;
1545
1546   if (! read_section (abfd, &stash->debug_sections[debug_line],
1547                       stash->syms, unit->line_offset,
1548                       &stash->dwarf_line_buffer, &stash->dwarf_line_size))
1549     return NULL;
1550
1551   amt = sizeof (struct line_info_table);
1552   table = (struct line_info_table *) bfd_alloc (abfd, amt);
1553   if (table == NULL)
1554     return NULL;
1555   table->abfd = abfd;
1556   table->comp_dir = unit->comp_dir;
1557
1558   table->num_files = 0;
1559   table->files = NULL;
1560
1561   table->num_dirs = 0;
1562   table->dirs = NULL;
1563
1564   table->num_sequences = 0;
1565   table->sequences = NULL;
1566
1567   table->lcl_head = NULL;
1568
1569   line_ptr = stash->dwarf_line_buffer + unit->line_offset;
1570
1571   /* Read in the prologue.  */
1572   lh.total_length = read_4_bytes (abfd, line_ptr);
1573   line_ptr += 4;
1574   offset_size = 4;
1575   if (lh.total_length == 0xffffffff)
1576     {
1577       lh.total_length = read_8_bytes (abfd, line_ptr);
1578       line_ptr += 8;
1579       offset_size = 8;
1580     }
1581   else if (lh.total_length == 0 && unit->addr_size == 8)
1582     {
1583       /* Handle (non-standard) 64-bit DWARF2 formats.  */
1584       lh.total_length = read_4_bytes (abfd, line_ptr);
1585       line_ptr += 4;
1586       offset_size = 8;
1587     }
1588   line_end = line_ptr + lh.total_length;
1589   lh.version = read_2_bytes (abfd, line_ptr);
1590   if (lh.version < 2 || lh.version > 4)
1591     {
1592       (*_bfd_error_handler)
1593         (_("Dwarf Error: Unhandled .debug_line version %d."), lh.version);
1594       bfd_set_error (bfd_error_bad_value);
1595       return NULL;
1596     }
1597   line_ptr += 2;
1598   if (offset_size == 4)
1599     lh.prologue_length = read_4_bytes (abfd, line_ptr);
1600   else
1601     lh.prologue_length = read_8_bytes (abfd, line_ptr);
1602   line_ptr += offset_size;
1603   lh.minimum_instruction_length = read_1_byte (abfd, line_ptr);
1604   line_ptr += 1;
1605   if (lh.version >= 4)
1606     {
1607       lh.maximum_ops_per_insn = read_1_byte (abfd, line_ptr);
1608       line_ptr += 1;
1609     }
1610   else
1611     lh.maximum_ops_per_insn = 1;
1612   if (lh.maximum_ops_per_insn == 0)
1613     {
1614       (*_bfd_error_handler)
1615         (_("Dwarf Error: Invalid maximum operations per instruction."));
1616       bfd_set_error (bfd_error_bad_value);
1617       return NULL;
1618     }
1619   lh.default_is_stmt = read_1_byte (abfd, line_ptr);
1620   line_ptr += 1;
1621   lh.line_base = read_1_signed_byte (abfd, line_ptr);
1622   line_ptr += 1;
1623   lh.line_range = read_1_byte (abfd, line_ptr);
1624   line_ptr += 1;
1625   lh.opcode_base = read_1_byte (abfd, line_ptr);
1626   line_ptr += 1;
1627   amt = lh.opcode_base * sizeof (unsigned char);
1628   lh.standard_opcode_lengths = (unsigned char *) bfd_alloc (abfd, amt);
1629
1630   lh.standard_opcode_lengths[0] = 1;
1631
1632   for (i = 1; i < lh.opcode_base; ++i)
1633     {
1634       lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
1635       line_ptr += 1;
1636     }
1637
1638   /* Read directory table.  */
1639   while ((cur_dir = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1640     {
1641       line_ptr += bytes_read;
1642
1643       if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
1644         {
1645           char **tmp;
1646
1647           amt = table->num_dirs + DIR_ALLOC_CHUNK;
1648           amt *= sizeof (char *);
1649
1650           tmp = (char **) bfd_realloc (table->dirs, amt);
1651           if (tmp == NULL)
1652             goto fail;
1653           table->dirs = tmp;
1654         }
1655
1656       table->dirs[table->num_dirs++] = cur_dir;
1657     }
1658
1659   line_ptr += bytes_read;
1660
1661   /* Read file name table.  */
1662   while ((cur_file = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1663     {
1664       line_ptr += bytes_read;
1665
1666       if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1667         {
1668           struct fileinfo *tmp;
1669
1670           amt = table->num_files + FILE_ALLOC_CHUNK;
1671           amt *= sizeof (struct fileinfo);
1672
1673           tmp = (struct fileinfo *) bfd_realloc (table->files, amt);
1674           if (tmp == NULL)
1675             goto fail;
1676           table->files = tmp;
1677         }
1678
1679       table->files[table->num_files].name = cur_file;
1680       table->files[table->num_files].dir =
1681         read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1682       line_ptr += bytes_read;
1683       table->files[table->num_files].time =
1684         read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1685       line_ptr += bytes_read;
1686       table->files[table->num_files].size =
1687         read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1688       line_ptr += bytes_read;
1689       table->num_files++;
1690     }
1691
1692   line_ptr += bytes_read;
1693
1694   /* Read the statement sequences until there's nothing left.  */
1695   while (line_ptr < line_end)
1696     {
1697       /* State machine registers.  */
1698       bfd_vma address = 0;
1699       unsigned char op_index = 0;
1700       char * filename = table->num_files ? concat_filename (table, 1) : NULL;
1701       unsigned int line = 1;
1702       unsigned int column = 0;
1703       unsigned int discriminator = 0;
1704       int is_stmt = lh.default_is_stmt;
1705       int end_sequence = 0;
1706       /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
1707          compilers generate address sequences that are wildly out of
1708          order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
1709          for ia64-Linux).  Thus, to determine the low and high
1710          address, we must compare on every DW_LNS_copy, etc.  */
1711       bfd_vma low_pc  = (bfd_vma) -1;
1712       bfd_vma high_pc = 0;
1713
1714       /* Decode the table.  */
1715       while (! end_sequence)
1716         {
1717           op_code = read_1_byte (abfd, line_ptr);
1718           line_ptr += 1;
1719
1720           if (op_code >= lh.opcode_base)
1721             {
1722               /* Special operand.  */
1723               adj_opcode = op_code - lh.opcode_base;
1724               if (lh.maximum_ops_per_insn == 1)
1725                 address += (adj_opcode / lh.line_range
1726                             * lh.minimum_instruction_length);
1727               else
1728                 {
1729                   address += ((op_index + adj_opcode / lh.line_range)
1730                               / lh.maximum_ops_per_insn
1731                               * lh.minimum_instruction_length);
1732                   op_index = ((op_index + adj_opcode / lh.line_range)
1733                               % lh.maximum_ops_per_insn);
1734                 }
1735               line += lh.line_base + (adj_opcode % lh.line_range);
1736               /* Append row to matrix using current values.  */
1737               if (!add_line_info (table, address, op_index, filename,
1738                                   line, column, discriminator, 0))
1739                 goto line_fail;
1740               discriminator = 0;
1741               if (address < low_pc)
1742                 low_pc = address;
1743               if (address > high_pc)
1744                 high_pc = address;
1745             }
1746           else switch (op_code)
1747             {
1748             case DW_LNS_extended_op:
1749               exop_len = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1750               line_ptr += bytes_read;
1751               extended_op = read_1_byte (abfd, line_ptr);
1752               line_ptr += 1;
1753
1754               switch (extended_op)
1755                 {
1756                 case DW_LNE_end_sequence:
1757                   end_sequence = 1;
1758                   if (!add_line_info (table, address, op_index, filename, line,
1759                                       column, discriminator, end_sequence))
1760                     goto line_fail;
1761                   discriminator = 0;
1762                   if (address < low_pc)
1763                     low_pc = address;
1764                   if (address > high_pc)
1765                     high_pc = address;
1766                   if (!arange_add (unit, &unit->arange, low_pc, high_pc))
1767                     goto line_fail;
1768                   break;
1769                 case DW_LNE_set_address:
1770                   address = read_address (unit, line_ptr);
1771                   op_index = 0;
1772                   line_ptr += unit->addr_size;
1773                   break;
1774                 case DW_LNE_define_file:
1775                   cur_file = read_string (abfd, line_ptr, &bytes_read);
1776                   line_ptr += bytes_read;
1777                   if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1778                     {
1779                       struct fileinfo *tmp;
1780
1781                       amt = table->num_files + FILE_ALLOC_CHUNK;
1782                       amt *= sizeof (struct fileinfo);
1783                       tmp = (struct fileinfo *) bfd_realloc (table->files, amt);
1784                       if (tmp == NULL)
1785                         goto line_fail;
1786                       table->files = tmp;
1787                     }
1788                   table->files[table->num_files].name = cur_file;
1789                   table->files[table->num_files].dir =
1790                     read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1791                   line_ptr += bytes_read;
1792                   table->files[table->num_files].time =
1793                     read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1794                   line_ptr += bytes_read;
1795                   table->files[table->num_files].size =
1796                     read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1797                   line_ptr += bytes_read;
1798                   table->num_files++;
1799                   break;
1800                 case DW_LNE_set_discriminator:
1801                   discriminator =
1802                       read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1803                   line_ptr += bytes_read;
1804                   break;
1805                 case DW_LNE_HP_source_file_correlation:
1806                   line_ptr += exop_len - 1;
1807                   break;
1808                 default:
1809                   (*_bfd_error_handler)
1810                     (_("Dwarf Error: mangled line number section."));
1811                   bfd_set_error (bfd_error_bad_value);
1812                 line_fail:
1813                   if (filename != NULL)
1814                     free (filename);
1815                   goto fail;
1816                 }
1817               break;
1818             case DW_LNS_copy:
1819               if (!add_line_info (table, address, op_index,
1820                                   filename, line, column, discriminator, 0))
1821                 goto line_fail;
1822               discriminator = 0;
1823               if (address < low_pc)
1824                 low_pc = address;
1825               if (address > high_pc)
1826                 high_pc = address;
1827               break;
1828             case DW_LNS_advance_pc:
1829               if (lh.maximum_ops_per_insn == 1)
1830                 address += (lh.minimum_instruction_length
1831                             * read_unsigned_leb128 (abfd, line_ptr,
1832                                                     &bytes_read));
1833               else
1834                 {
1835                   bfd_vma adjust = read_unsigned_leb128 (abfd, line_ptr,
1836                                                          &bytes_read);
1837                   address = ((op_index + adjust) / lh.maximum_ops_per_insn
1838                              * lh.minimum_instruction_length);
1839                   op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
1840                 }
1841               line_ptr += bytes_read;
1842               break;
1843             case DW_LNS_advance_line:
1844               line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
1845               line_ptr += bytes_read;
1846               break;
1847             case DW_LNS_set_file:
1848               {
1849                 unsigned int file;
1850
1851                 /* The file and directory tables are 0
1852                    based, the references are 1 based.  */
1853                 file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1854                 line_ptr += bytes_read;
1855                 if (filename)
1856                   free (filename);
1857                 filename = concat_filename (table, file);
1858                 break;
1859               }
1860             case DW_LNS_set_column:
1861               column = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1862               line_ptr += bytes_read;
1863               break;
1864             case DW_LNS_negate_stmt:
1865               is_stmt = (!is_stmt);
1866               break;
1867             case DW_LNS_set_basic_block:
1868               break;
1869             case DW_LNS_const_add_pc:
1870               if (lh.maximum_ops_per_insn == 1)
1871                 address += (lh.minimum_instruction_length
1872                             * ((255 - lh.opcode_base) / lh.line_range));
1873               else
1874                 {
1875                   bfd_vma adjust = ((255 - lh.opcode_base) / lh.line_range);
1876                   address += (lh.minimum_instruction_length
1877                               * ((op_index + adjust)
1878                                  / lh.maximum_ops_per_insn));
1879                   op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
1880                 }
1881               break;
1882             case DW_LNS_fixed_advance_pc:
1883               address += read_2_bytes (abfd, line_ptr);
1884               op_index = 0;
1885               line_ptr += 2;
1886               break;
1887             default:
1888               /* Unknown standard opcode, ignore it.  */
1889               for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
1890                 {
1891                   (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1892                   line_ptr += bytes_read;
1893                 }
1894               break;
1895             }
1896         }
1897
1898       if (filename)
1899         free (filename);
1900     }
1901
1902   if (sort_line_sequences (table))
1903     return table;
1904
1905  fail:
1906   if (table->sequences != NULL)
1907     free (table->sequences);
1908   if (table->files != NULL)
1909     free (table->files);
1910   if (table->dirs != NULL)
1911     free (table->dirs);
1912   return NULL;
1913 }
1914
1915 /* If ADDR is within TABLE set the output parameters and return the
1916    range of addresses covered by the entry used to fill them out.
1917    Otherwise set * FILENAME_PTR to NULL and return 0.
1918    The parameters FILENAME_PTR, LINENUMBER_PTR and DISCRIMINATOR_PTR
1919    are pointers to the objects to be filled in.  */
1920
1921 static bfd_vma
1922 lookup_address_in_line_info_table (struct line_info_table *table,
1923                                    bfd_vma addr,
1924                                    const char **filename_ptr,
1925                                    unsigned int *linenumber_ptr,
1926                                    unsigned int *discriminator_ptr)
1927 {
1928   struct line_sequence *seq = NULL;
1929   struct line_info *each_line;
1930   int low, high, mid;
1931
1932   /* Binary search the array of sequences.  */
1933   low = 0;
1934   high = table->num_sequences;
1935   while (low < high)
1936     {
1937       mid = (low + high) / 2;
1938       seq = &table->sequences[mid];
1939       if (addr < seq->low_pc)
1940         high = mid;
1941       else if (addr >= seq->last_line->address)
1942         low = mid + 1;
1943       else
1944         break;
1945     }
1946
1947   if (seq && addr >= seq->low_pc && addr < seq->last_line->address)
1948     {
1949       /* Note: seq->last_line should be a descendingly sorted list.  */
1950       for (each_line = seq->last_line;
1951            each_line;
1952            each_line = each_line->prev_line)
1953         if (addr >= each_line->address)
1954           break;
1955
1956       if (each_line
1957           && !(each_line->end_sequence || each_line == seq->last_line))
1958         {
1959           *filename_ptr = each_line->filename;
1960           *linenumber_ptr = each_line->line;
1961           if (discriminator_ptr)
1962             *discriminator_ptr = each_line->discriminator;
1963           return seq->last_line->address - seq->low_pc;
1964         }
1965     }
1966
1967   *filename_ptr = NULL;
1968   return 0;
1969 }
1970
1971 /* Read in the .debug_ranges section for future reference.  */
1972
1973 static bfd_boolean
1974 read_debug_ranges (struct comp_unit *unit)
1975 {
1976   struct dwarf2_debug *stash = unit->stash;
1977   return read_section (unit->abfd, &stash->debug_sections[debug_ranges],
1978                        stash->syms, 0,
1979                        &stash->dwarf_ranges_buffer, &stash->dwarf_ranges_size);
1980 }
1981
1982 /* Function table functions.  */
1983
1984 /* If ADDR is within UNIT's function tables, set FUNCTIONNAME_PTR, and return
1985    TRUE.  Note that we need to find the function that has the smallest range
1986    that contains ADDR, to handle inlined functions without depending upon
1987    them being ordered in TABLE by increasing range.  */
1988
1989 static bfd_boolean
1990 lookup_address_in_function_table (struct comp_unit *unit,
1991                                   bfd_vma addr,
1992                                   struct funcinfo **function_ptr,
1993                                   const char **functionname_ptr)
1994 {
1995   struct funcinfo* each_func;
1996   struct funcinfo* best_fit = NULL;
1997   struct arange *arange;
1998
1999   for (each_func = unit->function_table;
2000        each_func;
2001        each_func = each_func->prev_func)
2002     {
2003       for (arange = &each_func->arange;
2004            arange;
2005            arange = arange->next)
2006         {
2007           if (addr >= arange->low && addr < arange->high)
2008             {
2009               if (!best_fit
2010                   || (arange->high - arange->low
2011                       < best_fit->arange.high - best_fit->arange.low))
2012                 best_fit = each_func;
2013             }
2014         }
2015     }
2016
2017   if (best_fit)
2018     {
2019       *functionname_ptr = best_fit->name;
2020       *function_ptr = best_fit;
2021       return TRUE;
2022     }
2023   else
2024     {
2025       return FALSE;
2026     }
2027 }
2028
2029 /* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR
2030    and LINENUMBER_PTR, and return TRUE.  */
2031
2032 static bfd_boolean
2033 lookup_symbol_in_function_table (struct comp_unit *unit,
2034                                  asymbol *sym,
2035                                  bfd_vma addr,
2036                                  const char **filename_ptr,
2037                                  unsigned int *linenumber_ptr)
2038 {
2039   struct funcinfo* each_func;
2040   struct funcinfo* best_fit = NULL;
2041   struct arange *arange;
2042   const char *name = bfd_asymbol_name (sym);
2043   asection *sec = bfd_get_section (sym);
2044
2045   for (each_func = unit->function_table;
2046        each_func;
2047        each_func = each_func->prev_func)
2048     {
2049       for (arange = &each_func->arange;
2050            arange;
2051            arange = arange->next)
2052         {
2053           if ((!each_func->sec || each_func->sec == sec)
2054               && addr >= arange->low
2055               && addr < arange->high
2056               && each_func->name
2057               && strcmp (name, each_func->name) == 0
2058               && (!best_fit
2059                   || (arange->high - arange->low
2060                       < best_fit->arange.high - best_fit->arange.low)))
2061             best_fit = each_func;
2062         }
2063     }
2064
2065   if (best_fit)
2066     {
2067       best_fit->sec = sec;
2068       *filename_ptr = best_fit->file;
2069       *linenumber_ptr = best_fit->line;
2070       return TRUE;
2071     }
2072   else
2073     return FALSE;
2074 }
2075
2076 /* Variable table functions.  */
2077
2078 /* If SYM is within variable table of UNIT, set FILENAME_PTR and
2079    LINENUMBER_PTR, and return TRUE.  */
2080
2081 static bfd_boolean
2082 lookup_symbol_in_variable_table (struct comp_unit *unit,
2083                                  asymbol *sym,
2084                                  bfd_vma addr,
2085                                  const char **filename_ptr,
2086                                  unsigned int *linenumber_ptr)
2087 {
2088   const char *name = bfd_asymbol_name (sym);
2089   asection *sec = bfd_get_section (sym);
2090   struct varinfo* each;
2091
2092   for (each = unit->variable_table; each; each = each->prev_var)
2093     if (each->stack == 0
2094         && each->file != NULL
2095         && each->name != NULL
2096         && each->addr == addr
2097         && (!each->sec || each->sec == sec)
2098         && strcmp (name, each->name) == 0)
2099       break;
2100
2101   if (each)
2102     {
2103       each->sec = sec;
2104       *filename_ptr = each->file;
2105       *linenumber_ptr = each->line;
2106       return TRUE;
2107     }
2108   else
2109     return FALSE;
2110 }
2111
2112 static char *
2113 find_abstract_instance_name (struct comp_unit *unit,
2114                              struct attribute *attr_ptr)
2115 {
2116   bfd *abfd = unit->abfd;
2117   bfd_byte *info_ptr;
2118   unsigned int abbrev_number, bytes_read, i;
2119   struct abbrev_info *abbrev;
2120   bfd_uint64_t die_ref = attr_ptr->u.val;
2121   struct attribute attr;
2122   char *name = NULL;
2123
2124   /* DW_FORM_ref_addr can reference an entry in a different CU. It
2125      is an offset from the .debug_info section, not the current CU.  */
2126   if (attr_ptr->form == DW_FORM_ref_addr)
2127     {
2128       /* We only support DW_FORM_ref_addr within the same file, so
2129          any relocations should be resolved already.  */
2130       if (!die_ref)
2131         abort ();
2132
2133       info_ptr = unit->sec_info_ptr + die_ref;
2134
2135       /* Now find the CU containing this pointer.  */
2136       if (info_ptr >= unit->info_ptr_unit && info_ptr < unit->end_ptr)
2137         ;
2138       else
2139         {
2140           /* Check other CUs to see if they contain the abbrev.  */
2141           struct comp_unit * u;
2142
2143           for (u = unit->prev_unit; u != NULL; u = u->prev_unit)
2144             if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr)
2145               break;
2146
2147           if (u == NULL)
2148             for (u = unit->next_unit; u != NULL; u = u->next_unit)
2149               if (info_ptr >= u->info_ptr_unit && info_ptr < u->end_ptr)
2150                 break;
2151
2152           if (u)
2153             unit = u;
2154           /* else FIXME: What do we do now ?  */
2155         }
2156     }
2157   else if (attr_ptr->form == DW_FORM_GNU_ref_alt)
2158     {
2159       info_ptr = read_alt_indirect_ref (unit, die_ref);
2160       if (info_ptr == NULL)
2161         {
2162           (*_bfd_error_handler)
2163             (_("Dwarf Error: Unable to read alt ref %u."), die_ref);
2164           bfd_set_error (bfd_error_bad_value);
2165           return name;
2166         }
2167       /* FIXME: Do we need to locate the correct CU, in a similar
2168          fashion to the code in the DW_FORM_ref_addr case above ?  */
2169     }
2170   else
2171     info_ptr = unit->info_ptr_unit + die_ref;
2172
2173   abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2174   info_ptr += bytes_read;
2175
2176   if (abbrev_number)
2177     {
2178       abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
2179       if (! abbrev)
2180         {
2181           (*_bfd_error_handler)
2182             (_("Dwarf Error: Could not find abbrev number %u."), abbrev_number);
2183           bfd_set_error (bfd_error_bad_value);
2184         }
2185       else
2186         {
2187           for (i = 0; i < abbrev->num_attrs; ++i)
2188             {
2189               info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit,
2190                                          info_ptr);
2191               if (info_ptr == NULL)
2192                 break;
2193               switch (attr.name)
2194                 {
2195                 case DW_AT_name:
2196                   /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
2197                      over DW_AT_name.  */
2198                   if (name == NULL)
2199                     name = attr.u.str;
2200                   break;
2201                 case DW_AT_specification:
2202                   name = find_abstract_instance_name (unit, &attr);
2203                   break;
2204                 case DW_AT_linkage_name:
2205                 case DW_AT_MIPS_linkage_name:
2206                   name = attr.u.str;
2207                   break;
2208                 default:
2209                   break;
2210                 }
2211             }
2212         }
2213     }
2214   return name;
2215 }
2216
2217 static bfd_boolean
2218 read_rangelist (struct comp_unit *unit, struct arange *arange,
2219                 bfd_uint64_t offset)
2220 {
2221   bfd_byte *ranges_ptr;
2222   bfd_vma base_address = unit->base_address;
2223
2224   if (! unit->stash->dwarf_ranges_buffer)
2225     {
2226       if (! read_debug_ranges (unit))
2227         return FALSE;
2228     }
2229   ranges_ptr = unit->stash->dwarf_ranges_buffer + offset;
2230
2231   for (;;)
2232     {
2233       bfd_vma low_pc;
2234       bfd_vma high_pc;
2235
2236       low_pc = read_address (unit, ranges_ptr);
2237       ranges_ptr += unit->addr_size;
2238       high_pc = read_address (unit, ranges_ptr);
2239       ranges_ptr += unit->addr_size;
2240
2241       if (low_pc == 0 && high_pc == 0)
2242         break;
2243       if (low_pc == -1UL && high_pc != -1UL)
2244         base_address = high_pc;
2245       else
2246         {
2247           if (!arange_add (unit, arange,
2248                            base_address + low_pc, base_address + high_pc))
2249             return FALSE;
2250         }
2251     }
2252   return TRUE;
2253 }
2254
2255 /* DWARF2 Compilation unit functions.  */
2256
2257 /* Scan over each die in a comp. unit looking for functions to add
2258    to the function table and variables to the variable table.  */
2259
2260 static bfd_boolean
2261 scan_unit_for_symbols (struct comp_unit *unit)
2262 {
2263   bfd *abfd = unit->abfd;
2264   bfd_byte *info_ptr = unit->first_child_die_ptr;
2265   int nesting_level = 1;
2266   struct funcinfo **nested_funcs;
2267   int nested_funcs_size;
2268
2269   /* Maintain a stack of in-scope functions and inlined functions, which we
2270      can use to set the caller_func field.  */
2271   nested_funcs_size = 32;
2272   nested_funcs = (struct funcinfo **)
2273     bfd_malloc (nested_funcs_size * sizeof (struct funcinfo *));
2274   if (nested_funcs == NULL)
2275     return FALSE;
2276   nested_funcs[nesting_level] = 0;
2277
2278   while (nesting_level)
2279     {
2280       unsigned int abbrev_number, bytes_read, i;
2281       struct abbrev_info *abbrev;
2282       struct attribute attr;
2283       struct funcinfo *func;
2284       struct varinfo *var;
2285       bfd_vma low_pc = 0;
2286       bfd_vma high_pc = 0;
2287       bfd_boolean high_pc_relative = FALSE;
2288
2289       abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2290       info_ptr += bytes_read;
2291
2292       if (! abbrev_number)
2293         {
2294           nesting_level--;
2295           continue;
2296         }
2297
2298       abbrev = lookup_abbrev (abbrev_number,unit->abbrevs);
2299       if (! abbrev)
2300         {
2301           (*_bfd_error_handler)
2302             (_("Dwarf Error: Could not find abbrev number %u."),
2303              abbrev_number);
2304           bfd_set_error (bfd_error_bad_value);
2305           goto fail;
2306         }
2307
2308       var = NULL;
2309       if (abbrev->tag == DW_TAG_subprogram
2310           || abbrev->tag == DW_TAG_entry_point
2311           || abbrev->tag == DW_TAG_inlined_subroutine)
2312         {
2313           bfd_size_type amt = sizeof (struct funcinfo);
2314           func = (struct funcinfo *) bfd_zalloc (abfd, amt);
2315           if (func == NULL)
2316             goto fail;
2317           func->tag = abbrev->tag;
2318           func->prev_func = unit->function_table;
2319           unit->function_table = func;
2320           BFD_ASSERT (!unit->cached);
2321
2322           if (func->tag == DW_TAG_inlined_subroutine)
2323             for (i = nesting_level - 1; i >= 1; i--)
2324               if (nested_funcs[i])
2325                 {
2326                   func->caller_func = nested_funcs[i];
2327                   break;
2328                 }
2329           nested_funcs[nesting_level] = func;
2330         }
2331       else
2332         {
2333           func = NULL;
2334           if (abbrev->tag == DW_TAG_variable)
2335             {
2336               bfd_size_type amt = sizeof (struct varinfo);
2337               var = (struct varinfo *) bfd_zalloc (abfd, amt);
2338               if (var == NULL)
2339                 goto fail;
2340               var->tag = abbrev->tag;
2341               var->stack = 1;
2342               var->prev_var = unit->variable_table;
2343               unit->variable_table = var;
2344               BFD_ASSERT (!unit->cached);
2345             }
2346
2347           /* No inline function in scope at this nesting level.  */
2348           nested_funcs[nesting_level] = 0;
2349         }
2350
2351       for (i = 0; i < abbrev->num_attrs; ++i)
2352         {
2353           info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
2354           if (info_ptr == NULL)
2355             goto fail;
2356
2357           if (func)
2358             {
2359               switch (attr.name)
2360                 {
2361                 case DW_AT_call_file:
2362                   func->caller_file = concat_filename (unit->line_table,
2363                                                        attr.u.val);
2364                   break;
2365
2366                 case DW_AT_call_line:
2367                   func->caller_line = attr.u.val;
2368                   break;
2369
2370                 case DW_AT_abstract_origin:
2371                 case DW_AT_specification:
2372                   func->name = find_abstract_instance_name (unit, &attr);
2373                   break;
2374
2375                 case DW_AT_name:
2376                   /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
2377                      over DW_AT_name.  */
2378                   if (func->name == NULL)
2379                     func->name = attr.u.str;
2380                   break;
2381
2382                 case DW_AT_linkage_name:
2383                 case DW_AT_MIPS_linkage_name:
2384                   func->name = attr.u.str;
2385                   break;
2386
2387                 case DW_AT_low_pc:
2388                   low_pc = attr.u.val;
2389                   break;
2390
2391                 case DW_AT_high_pc:
2392                   high_pc = attr.u.val;
2393                   high_pc_relative = attr.form != DW_FORM_addr;
2394                   break;
2395
2396                 case DW_AT_ranges:
2397                   if (!read_rangelist (unit, &func->arange, attr.u.val))
2398                     goto fail;
2399                   break;
2400
2401                 case DW_AT_decl_file:
2402                   func->file = concat_filename (unit->line_table,
2403                                                 attr.u.val);
2404                   break;
2405
2406                 case DW_AT_decl_line:
2407                   func->line = attr.u.val;
2408                   break;
2409
2410                 default:
2411                   break;
2412                 }
2413             }
2414           else if (var)
2415             {
2416               switch (attr.name)
2417                 {
2418                 case DW_AT_name:
2419                   var->name = attr.u.str;
2420                   break;
2421
2422                 case DW_AT_decl_file:
2423                   var->file = concat_filename (unit->line_table,
2424                                                attr.u.val);
2425                   break;
2426
2427                 case DW_AT_decl_line:
2428                   var->line = attr.u.val;
2429                   break;
2430
2431                 case DW_AT_external:
2432                   if (attr.u.val != 0)
2433                     var->stack = 0;
2434                   break;
2435
2436                 case DW_AT_location:
2437                   switch (attr.form)
2438                     {
2439                     case DW_FORM_block:
2440                     case DW_FORM_block1:
2441                     case DW_FORM_block2:
2442                     case DW_FORM_block4:
2443                     case DW_FORM_exprloc:
2444                       if (*attr.u.blk->data == DW_OP_addr)
2445                         {
2446                           var->stack = 0;
2447
2448                           /* Verify that DW_OP_addr is the only opcode in the
2449                              location, in which case the block size will be 1
2450                              plus the address size.  */
2451                           /* ??? For TLS variables, gcc can emit
2452                              DW_OP_addr <addr> DW_OP_GNU_push_tls_address
2453                              which we don't handle here yet.  */
2454                           if (attr.u.blk->size == unit->addr_size + 1U)
2455                             var->addr = bfd_get (unit->addr_size * 8,
2456                                                  unit->abfd,
2457                                                  attr.u.blk->data + 1);
2458                         }
2459                       break;
2460
2461                     default:
2462                       break;
2463                     }
2464                   break;
2465
2466                 default:
2467                   break;
2468                 }
2469             }
2470         }
2471
2472       if (high_pc_relative)
2473         high_pc += low_pc;
2474
2475       if (func && high_pc != 0)
2476         {
2477           if (!arange_add (unit, &func->arange, low_pc, high_pc))
2478             goto fail;
2479         }
2480
2481       if (abbrev->has_children)
2482         {
2483           nesting_level++;
2484
2485           if (nesting_level >= nested_funcs_size)
2486             {
2487               struct funcinfo **tmp;
2488
2489               nested_funcs_size *= 2;
2490               tmp = (struct funcinfo **)
2491                 bfd_realloc (nested_funcs,
2492                              nested_funcs_size * sizeof (struct funcinfo *));
2493               if (tmp == NULL)
2494                 goto fail;
2495               nested_funcs = tmp;
2496             }
2497           nested_funcs[nesting_level] = 0;
2498         }
2499     }
2500
2501   free (nested_funcs);
2502   return TRUE;
2503
2504  fail:
2505   free (nested_funcs);
2506   return FALSE;
2507 }
2508
2509 /* Parse a DWARF2 compilation unit starting at INFO_PTR.  This
2510    includes the compilation unit header that proceeds the DIE's, but
2511    does not include the length field that precedes each compilation
2512    unit header.  END_PTR points one past the end of this comp unit.
2513    OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
2514
2515    This routine does not read the whole compilation unit; only enough
2516    to get to the line number information for the compilation unit.  */
2517
2518 static struct comp_unit *
2519 parse_comp_unit (struct dwarf2_debug *stash,
2520                  bfd_vma unit_length,
2521                  bfd_byte *info_ptr_unit,
2522                  unsigned int offset_size)
2523 {
2524   struct comp_unit* unit;
2525   unsigned int version;
2526   bfd_uint64_t abbrev_offset = 0;
2527   unsigned int addr_size;
2528   struct abbrev_info** abbrevs;
2529   unsigned int abbrev_number, bytes_read, i;
2530   struct abbrev_info *abbrev;
2531   struct attribute attr;
2532   bfd_byte *info_ptr = stash->info_ptr;
2533   bfd_byte *end_ptr = info_ptr + unit_length;
2534   bfd_size_type amt;
2535   bfd_vma low_pc = 0;
2536   bfd_vma high_pc = 0;
2537   bfd *abfd = stash->bfd_ptr;
2538   bfd_boolean high_pc_relative = FALSE;
2539
2540   version = read_2_bytes (abfd, info_ptr);
2541   info_ptr += 2;
2542   BFD_ASSERT (offset_size == 4 || offset_size == 8);
2543   if (offset_size == 4)
2544     abbrev_offset = read_4_bytes (abfd, info_ptr);
2545   else
2546     abbrev_offset = read_8_bytes (abfd, info_ptr);
2547   info_ptr += offset_size;
2548   addr_size = read_1_byte (abfd, info_ptr);
2549   info_ptr += 1;
2550
2551   if (version != 2 && version != 3 && version != 4)
2552     {
2553       (*_bfd_error_handler)
2554         (_("Dwarf Error: found dwarf version '%u', this reader"
2555            " only handles version 2, 3 and 4 information."), version);
2556       bfd_set_error (bfd_error_bad_value);
2557       return 0;
2558     }
2559
2560   if (addr_size > sizeof (bfd_vma))
2561     {
2562       (*_bfd_error_handler)
2563         (_("Dwarf Error: found address size '%u', this reader"
2564            " can not handle sizes greater than '%u'."),
2565          addr_size,
2566          (unsigned int) sizeof (bfd_vma));
2567       bfd_set_error (bfd_error_bad_value);
2568       return 0;
2569     }
2570
2571   if (addr_size != 2 && addr_size != 4 && addr_size != 8)
2572     {
2573       (*_bfd_error_handler)
2574         ("Dwarf Error: found address size '%u', this reader"
2575          " can only handle address sizes '2', '4' and '8'.", addr_size);
2576       bfd_set_error (bfd_error_bad_value);
2577       return 0;
2578     }
2579
2580   /* Read the abbrevs for this compilation unit into a table.  */
2581   abbrevs = read_abbrevs (abfd, abbrev_offset, stash);
2582   if (! abbrevs)
2583     return 0;
2584
2585   abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2586   info_ptr += bytes_read;
2587   if (! abbrev_number)
2588     {
2589       (*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %u."),
2590                              abbrev_number);
2591       bfd_set_error (bfd_error_bad_value);
2592       return 0;
2593     }
2594
2595   abbrev = lookup_abbrev (abbrev_number, abbrevs);
2596   if (! abbrev)
2597     {
2598       (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
2599                              abbrev_number);
2600       bfd_set_error (bfd_error_bad_value);
2601       return 0;
2602     }
2603
2604   amt = sizeof (struct comp_unit);
2605   unit = (struct comp_unit *) bfd_zalloc (abfd, amt);
2606   if (unit == NULL)
2607     return NULL;
2608   unit->abfd = abfd;
2609   unit->version = version;
2610   unit->addr_size = addr_size;
2611   unit->offset_size = offset_size;
2612   unit->abbrevs = abbrevs;
2613   unit->end_ptr = end_ptr;
2614   unit->stash = stash;
2615   unit->info_ptr_unit = info_ptr_unit;
2616   unit->sec_info_ptr = stash->sec_info_ptr;
2617
2618   for (i = 0; i < abbrev->num_attrs; ++i)
2619     {
2620       info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
2621       if (info_ptr == NULL)
2622         return NULL;
2623
2624       /* Store the data if it is of an attribute we want to keep in a
2625          partial symbol table.  */
2626       switch (attr.name)
2627         {
2628         case DW_AT_stmt_list:
2629           unit->stmtlist = 1;
2630           unit->line_offset = attr.u.val;
2631           break;
2632
2633         case DW_AT_name:
2634           unit->name = attr.u.str;
2635           break;
2636
2637         case DW_AT_low_pc:
2638           low_pc = attr.u.val;
2639           /* If the compilation unit DIE has a DW_AT_low_pc attribute,
2640              this is the base address to use when reading location
2641              lists or range lists. */
2642           if (abbrev->tag == DW_TAG_compile_unit)
2643             unit->base_address = low_pc;
2644           break;
2645
2646         case DW_AT_high_pc:
2647           high_pc = attr.u.val;
2648           high_pc_relative = attr.form != DW_FORM_addr;
2649           break;
2650
2651         case DW_AT_ranges:
2652           if (!read_rangelist (unit, &unit->arange, attr.u.val))
2653             return NULL;
2654           break;
2655
2656         case DW_AT_comp_dir:
2657           {
2658             char *comp_dir = attr.u.str;
2659             if (comp_dir)
2660               {
2661                 /* Irix 6.2 native cc prepends <machine>.: to the compilation
2662                    directory, get rid of it.  */
2663                 char *cp = strchr (comp_dir, ':');
2664
2665                 if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
2666                   comp_dir = cp + 1;
2667               }
2668             unit->comp_dir = comp_dir;
2669             break;
2670           }
2671
2672         default:
2673           break;
2674         }
2675     }
2676   if (high_pc_relative)
2677     high_pc += low_pc;
2678   if (high_pc != 0)
2679     {
2680       if (!arange_add (unit, &unit->arange, low_pc, high_pc))
2681         return NULL;
2682     }
2683
2684   unit->first_child_die_ptr = info_ptr;
2685   return unit;
2686 }
2687
2688 /* Return TRUE if UNIT may contain the address given by ADDR.  When
2689    there are functions written entirely with inline asm statements, the
2690    range info in the compilation unit header may not be correct.  We
2691    need to consult the line info table to see if a compilation unit
2692    really contains the given address.  */
2693
2694 static bfd_boolean
2695 comp_unit_contains_address (struct comp_unit *unit, bfd_vma addr)
2696 {
2697   struct arange *arange;
2698
2699   if (unit->error)
2700     return FALSE;
2701
2702   arange = &unit->arange;
2703   do
2704     {
2705       if (addr >= arange->low && addr < arange->high)
2706         return TRUE;
2707       arange = arange->next;
2708     }
2709   while (arange);
2710
2711   return FALSE;
2712 }
2713
2714 /* If UNIT contains ADDR, set the output parameters to the values for
2715    the line containing ADDR.  The output parameters, FILENAME_PTR,
2716    FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
2717    to be filled in.
2718
2719    Returns the range of addresses covered by the entry that was used
2720    to fill in *LINENUMBER_PTR or 0 if it was not filled in.  */
2721
2722 static bfd_vma
2723 comp_unit_find_nearest_line (struct comp_unit *unit,
2724                              bfd_vma addr,
2725                              const char **filename_ptr,
2726                              const char **functionname_ptr,
2727                              unsigned int *linenumber_ptr,
2728                              unsigned int *discriminator_ptr,
2729                              struct dwarf2_debug *stash)
2730 {
2731   bfd_boolean func_p;
2732   struct funcinfo *function;
2733
2734   if (unit->error)
2735     return FALSE;
2736
2737   if (! unit->line_table)
2738     {
2739       if (! unit->stmtlist)
2740         {
2741           unit->error = 1;
2742           return FALSE;
2743         }
2744
2745       unit->line_table = decode_line_info (unit, stash);
2746
2747       if (! unit->line_table)
2748         {
2749           unit->error = 1;
2750           return FALSE;
2751         }
2752
2753       if (unit->first_child_die_ptr < unit->end_ptr
2754           && ! scan_unit_for_symbols (unit))
2755         {
2756           unit->error = 1;
2757           return FALSE;
2758         }
2759     }
2760
2761   function = NULL;
2762   func_p = lookup_address_in_function_table (unit, addr,
2763                                              &function, functionname_ptr);
2764   if (func_p && (function->tag == DW_TAG_inlined_subroutine))
2765     stash->inliner_chain = function;
2766
2767   return lookup_address_in_line_info_table (unit->line_table, addr,
2768                                             filename_ptr,
2769                                             linenumber_ptr,
2770                                             discriminator_ptr);
2771 }
2772
2773 /* Check to see if line info is already decoded in a comp_unit.
2774    If not, decode it.  Returns TRUE if no errors were encountered;
2775    FALSE otherwise.  */
2776
2777 static bfd_boolean
2778 comp_unit_maybe_decode_line_info (struct comp_unit *unit,
2779                                   struct dwarf2_debug *stash)
2780 {
2781   if (unit->error)
2782     return FALSE;
2783
2784   if (! unit->line_table)
2785     {
2786       if (! unit->stmtlist)
2787         {
2788           unit->error = 1;
2789           return FALSE;
2790         }
2791
2792       unit->line_table = decode_line_info (unit, stash);
2793
2794       if (! unit->line_table)
2795         {
2796           unit->error = 1;
2797           return FALSE;
2798         }
2799
2800       if (unit->first_child_die_ptr < unit->end_ptr
2801           && ! scan_unit_for_symbols (unit))
2802         {
2803           unit->error = 1;
2804           return FALSE;
2805         }
2806     }
2807
2808   return TRUE;
2809 }
2810
2811 /* If UNIT contains SYM at ADDR, set the output parameters to the
2812    values for the line containing SYM.  The output parameters,
2813    FILENAME_PTR, and LINENUMBER_PTR, are pointers to the objects to be
2814    filled in.
2815
2816    Return TRUE if UNIT contains SYM, and no errors were encountered;
2817    FALSE otherwise.  */
2818
2819 static bfd_boolean
2820 comp_unit_find_line (struct comp_unit *unit,
2821                      asymbol *sym,
2822                      bfd_vma addr,
2823                      const char **filename_ptr,
2824                      unsigned int *linenumber_ptr,
2825                      struct dwarf2_debug *stash)
2826 {
2827   if (!comp_unit_maybe_decode_line_info (unit, stash))
2828     return FALSE;
2829
2830   if (sym->flags & BSF_FUNCTION)
2831     return lookup_symbol_in_function_table (unit, sym, addr,
2832                                             filename_ptr,
2833                                             linenumber_ptr);
2834
2835   return lookup_symbol_in_variable_table (unit, sym, addr,
2836                                           filename_ptr,
2837                                           linenumber_ptr);
2838 }
2839
2840 static struct funcinfo *
2841 reverse_funcinfo_list (struct funcinfo *head)
2842 {
2843   struct funcinfo *rhead;
2844   struct funcinfo *temp;
2845
2846   for (rhead = NULL; head; head = temp)
2847     {
2848       temp = head->prev_func;
2849       head->prev_func = rhead;
2850       rhead = head;
2851     }
2852   return rhead;
2853 }
2854
2855 static struct varinfo *
2856 reverse_varinfo_list (struct varinfo *head)
2857 {
2858   struct varinfo *rhead;
2859   struct varinfo *temp;
2860
2861   for (rhead = NULL; head; head = temp)
2862     {
2863       temp = head->prev_var;
2864       head->prev_var = rhead;
2865       rhead = head;
2866     }
2867   return rhead;
2868 }
2869
2870 /* Extract all interesting funcinfos and varinfos of a compilation
2871    unit into hash tables for faster lookup.  Returns TRUE if no
2872    errors were enountered; FALSE otherwise.  */
2873
2874 static bfd_boolean
2875 comp_unit_hash_info (struct dwarf2_debug *stash,
2876                      struct comp_unit *unit,
2877                      struct info_hash_table *funcinfo_hash_table,
2878                      struct info_hash_table *varinfo_hash_table)
2879 {
2880   struct funcinfo* each_func;
2881   struct varinfo* each_var;
2882   bfd_boolean okay = TRUE;
2883
2884   BFD_ASSERT (stash->info_hash_status != STASH_INFO_HASH_DISABLED);
2885
2886   if (!comp_unit_maybe_decode_line_info (unit, stash))
2887     return FALSE;
2888
2889   BFD_ASSERT (!unit->cached);
2890
2891   /* To preserve the original search order, we went to visit the function
2892      infos in the reversed order of the list.  However, making the list
2893      bi-directional use quite a bit of extra memory.  So we reverse
2894      the list first, traverse the list in the now reversed order and
2895      finally reverse the list again to get back the original order.  */
2896   unit->function_table = reverse_funcinfo_list (unit->function_table);
2897   for (each_func = unit->function_table;
2898        each_func && okay;
2899        each_func = each_func->prev_func)
2900     {
2901       /* Skip nameless functions. */
2902       if (each_func->name)
2903         /* There is no need to copy name string into hash table as
2904            name string is either in the dwarf string buffer or
2905            info in the stash.  */
2906         okay = insert_info_hash_table (funcinfo_hash_table, each_func->name,
2907                                        (void*) each_func, FALSE);
2908     }
2909   unit->function_table = reverse_funcinfo_list (unit->function_table);
2910   if (!okay)
2911     return FALSE;
2912
2913   /* We do the same for variable infos.  */
2914   unit->variable_table = reverse_varinfo_list (unit->variable_table);
2915   for (each_var = unit->variable_table;
2916        each_var && okay;
2917        each_var = each_var->prev_var)
2918     {
2919       /* Skip stack vars and vars with no files or names.  */
2920       if (each_var->stack == 0
2921           && each_var->file != NULL
2922           && each_var->name != NULL)
2923         /* There is no need to copy name string into hash table as
2924            name string is either in the dwarf string buffer or
2925            info in the stash.  */
2926         okay = insert_info_hash_table (varinfo_hash_table, each_var->name,
2927                                        (void*) each_var, FALSE);
2928     }
2929
2930   unit->variable_table = reverse_varinfo_list (unit->variable_table);
2931   unit->cached = TRUE;
2932   return okay;
2933 }
2934
2935 /* Locate a section in a BFD containing debugging info.  The search starts
2936    from the section after AFTER_SEC, or from the first section in the BFD if
2937    AFTER_SEC is NULL.  The search works by examining the names of the
2938    sections.  There are three permissiable names.  The first two are given
2939    by DEBUG_SECTIONS[debug_info] (whose standard DWARF2 names are .debug_info
2940    and .zdebug_info).  The third is a prefix .gnu.linkonce.wi.
2941    This is a variation on the .debug_info section which has a checksum
2942    describing the contents appended onto the name.  This allows the linker to
2943    identify and discard duplicate debugging sections for different
2944    compilation units.  */
2945 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
2946
2947 static asection *
2948 find_debug_info (bfd *abfd, const struct dwarf_debug_section *debug_sections,
2949                  asection *after_sec)
2950 {
2951   asection *msec;
2952   const char *look;
2953
2954   if (after_sec == NULL)
2955     {
2956       look = debug_sections[debug_info].uncompressed_name;
2957       msec = bfd_get_section_by_name (abfd, look);
2958       if (msec != NULL)
2959         return msec;
2960
2961       look = debug_sections[debug_info].compressed_name;
2962       if (look != NULL)
2963         {
2964           msec = bfd_get_section_by_name (abfd, look);
2965           if (msec != NULL)
2966             return msec;
2967         }
2968
2969       for (msec = abfd->sections; msec != NULL; msec = msec->next)
2970         if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
2971           return msec;
2972
2973       return NULL;
2974     }
2975
2976   for (msec = after_sec->next; msec != NULL; msec = msec->next)
2977     {
2978       look = debug_sections[debug_info].uncompressed_name;
2979       if (strcmp (msec->name, look) == 0)
2980         return msec;
2981
2982       look = debug_sections[debug_info].compressed_name;
2983       if (look != NULL && strcmp (msec->name, look) == 0)
2984         return msec;
2985
2986       if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
2987         return msec;
2988     }
2989
2990   return NULL;
2991 }
2992
2993 /* Unset vmas for adjusted sections in STASH.  */
2994
2995 static void
2996 unset_sections (struct dwarf2_debug *stash)
2997 {
2998   unsigned int i;
2999   struct adjusted_section *p;
3000
3001   i = stash->adjusted_section_count;
3002   p = stash->adjusted_sections;
3003   for (; i > 0; i--, p++)
3004     p->section->vma = 0;
3005 }
3006
3007 /* Set unique VMAs for loadable and DWARF sections in ABFD and save
3008    VMAs in STASH for unset_sections.  */
3009
3010 static bfd_boolean
3011 place_sections (bfd *abfd, struct dwarf2_debug *stash)
3012 {
3013   struct adjusted_section *p;
3014   unsigned int i;
3015
3016   if (stash->adjusted_section_count != 0)
3017     {
3018       i = stash->adjusted_section_count;
3019       p = stash->adjusted_sections;
3020       for (; i > 0; i--, p++)
3021         p->section->vma = p->adj_vma;
3022     }
3023   else
3024     {
3025       asection *sect;
3026       bfd_vma last_vma = 0, last_dwarf = 0;
3027       bfd_size_type amt;
3028       const char *debug_info_name;
3029
3030       debug_info_name = stash->debug_sections[debug_info].uncompressed_name;
3031       i = 0;
3032       for (sect = abfd->sections; sect != NULL; sect = sect->next)
3033         {
3034           bfd_size_type sz;
3035           int is_debug_info;
3036
3037           if ((sect->output_section != NULL
3038                && sect->output_section != sect)
3039               || sect->vma != 0)
3040             continue;
3041
3042           /* We need to adjust the VMAs of any .debug_info sections.
3043              Skip compressed ones, since no relocations could target
3044              them - they should not appear in object files anyway.  */
3045           if (strcmp (sect->name, debug_info_name) == 0)
3046             is_debug_info = 1;
3047           else if (CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO))
3048             is_debug_info = 1;
3049           else
3050             is_debug_info = 0;
3051
3052           if (!is_debug_info && (sect->flags & SEC_LOAD) == 0)
3053             continue;
3054
3055           sz = sect->rawsize ? sect->rawsize : sect->size;
3056           if (sz == 0)
3057             continue;
3058
3059           i++;
3060         }
3061       if (i <= 1)
3062         return TRUE;
3063
3064       amt = i * sizeof (struct adjusted_section);
3065       p = (struct adjusted_section *) bfd_alloc (abfd, amt);
3066       if (! p)
3067         return FALSE;
3068
3069       stash->adjusted_sections = p;
3070       stash->adjusted_section_count = i;
3071
3072       for (sect = abfd->sections; sect != NULL; sect = sect->next)
3073         {
3074           bfd_size_type sz;
3075           int is_debug_info;
3076
3077           if ((sect->output_section != NULL
3078                && sect->output_section != sect)
3079               || sect->vma != 0)
3080             continue;
3081
3082           /* We need to adjust the VMAs of any .debug_info sections.
3083              Skip compressed ones, since no relocations could target
3084              them - they should not appear in object files anyway.  */
3085           if (strcmp (sect->name, debug_info_name) == 0)
3086             is_debug_info = 1;
3087           else if (CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO))
3088             is_debug_info = 1;
3089           else
3090             is_debug_info = 0;
3091
3092           if (!is_debug_info && (sect->flags & SEC_LOAD) == 0)
3093             continue;
3094
3095           sz = sect->rawsize ? sect->rawsize : sect->size;
3096           if (sz == 0)
3097             continue;
3098
3099           p->section = sect;
3100           if (is_debug_info)
3101             {
3102               BFD_ASSERT (sect->alignment_power == 0);
3103               sect->vma = last_dwarf;
3104               last_dwarf += sz;
3105             }
3106           else if (last_vma != 0)
3107             {
3108               /* Align the new address to the current section
3109                  alignment.  */
3110               last_vma = ((last_vma
3111                            + ~((bfd_vma) -1 << sect->alignment_power))
3112                           & ((bfd_vma) -1 << sect->alignment_power));
3113               sect->vma = last_vma;
3114               last_vma += sect->vma + sz;
3115             }
3116           else
3117             last_vma += sect->vma + sz;
3118
3119           p->adj_vma = sect->vma;
3120
3121           p++;
3122         }
3123     }
3124
3125   return TRUE;
3126 }
3127
3128 /* Look up a funcinfo by name using the given info hash table.  If found,
3129    also update the locations pointed to by filename_ptr and linenumber_ptr.
3130
3131    This function returns TRUE if a funcinfo that matches the given symbol
3132    and address is found with any error; otherwise it returns FALSE.  */
3133
3134 static bfd_boolean
3135 info_hash_lookup_funcinfo (struct info_hash_table *hash_table,
3136                            asymbol *sym,
3137                            bfd_vma addr,
3138                            const char **filename_ptr,
3139                            unsigned int *linenumber_ptr)
3140 {
3141   struct funcinfo* each_func;
3142   struct funcinfo* best_fit = NULL;
3143   struct info_list_node *node;
3144   struct arange *arange;
3145   const char *name = bfd_asymbol_name (sym);
3146   asection *sec = bfd_get_section (sym);
3147
3148   for (node = lookup_info_hash_table (hash_table, name);
3149        node;
3150        node = node->next)
3151     {
3152       each_func = (struct funcinfo *) node->info;
3153       for (arange = &each_func->arange;
3154            arange;
3155            arange = arange->next)
3156         {
3157           if ((!each_func->sec || each_func->sec == sec)
3158               && addr >= arange->low
3159               && addr < arange->high
3160               && (!best_fit
3161                   || (arange->high - arange->low
3162                       < best_fit->arange.high - best_fit->arange.low)))
3163             best_fit = each_func;
3164         }
3165     }
3166
3167   if (best_fit)
3168     {
3169       best_fit->sec = sec;
3170       *filename_ptr = best_fit->file;
3171       *linenumber_ptr = best_fit->line;
3172       return TRUE;
3173     }
3174
3175   return FALSE;
3176 }
3177
3178 /* Look up a varinfo by name using the given info hash table.  If found,
3179    also update the locations pointed to by filename_ptr and linenumber_ptr.
3180
3181    This function returns TRUE if a varinfo that matches the given symbol
3182    and address is found with any error; otherwise it returns FALSE.  */
3183
3184 static bfd_boolean
3185 info_hash_lookup_varinfo (struct info_hash_table *hash_table,
3186                           asymbol *sym,
3187                           bfd_vma addr,
3188                           const char **filename_ptr,
3189                           unsigned int *linenumber_ptr)
3190 {
3191   const char *name = bfd_asymbol_name (sym);
3192   asection *sec = bfd_get_section (sym);
3193   struct varinfo* each;
3194   struct info_list_node *node;
3195
3196   for (node = lookup_info_hash_table (hash_table, name);
3197        node;
3198        node = node->next)
3199     {
3200       each = (struct varinfo *) node->info;
3201       if (each->addr == addr
3202           && (!each->sec || each->sec == sec))
3203         {
3204           each->sec = sec;
3205           *filename_ptr = each->file;
3206           *linenumber_ptr = each->line;
3207           return TRUE;
3208         }
3209     }
3210
3211   return FALSE;
3212 }
3213
3214 /* Update the funcinfo and varinfo info hash tables if they are
3215    not up to date.  Returns TRUE if there is no error; otherwise
3216    returns FALSE and disable the info hash tables.  */
3217
3218 static bfd_boolean
3219 stash_maybe_update_info_hash_tables (struct dwarf2_debug *stash)
3220 {
3221   struct comp_unit *each;
3222
3223   /* Exit if hash tables are up-to-date.  */
3224   if (stash->all_comp_units == stash->hash_units_head)
3225     return TRUE;
3226
3227   if (stash->hash_units_head)
3228     each = stash->hash_units_head->prev_unit;
3229   else
3230     each = stash->last_comp_unit;
3231
3232   while (each)
3233     {
3234       if (!comp_unit_hash_info (stash, each, stash->funcinfo_hash_table,
3235                                 stash->varinfo_hash_table))
3236         {
3237           stash->info_hash_status = STASH_INFO_HASH_DISABLED;
3238           return FALSE;
3239         }
3240       each = each->prev_unit;
3241     }
3242
3243   stash->hash_units_head = stash->all_comp_units;
3244   return TRUE;
3245 }
3246
3247 /* Check consistency of info hash tables.  This is for debugging only. */
3248
3249 static void ATTRIBUTE_UNUSED
3250 stash_verify_info_hash_table (struct dwarf2_debug *stash)
3251 {
3252   struct comp_unit *each_unit;
3253   struct funcinfo *each_func;
3254   struct varinfo *each_var;
3255   struct info_list_node *node;
3256   bfd_boolean found;
3257
3258   for (each_unit = stash->all_comp_units;
3259        each_unit;
3260        each_unit = each_unit->next_unit)
3261     {
3262       for (each_func = each_unit->function_table;
3263            each_func;
3264            each_func = each_func->prev_func)
3265         {
3266           if (!each_func->name)
3267             continue;
3268           node = lookup_info_hash_table (stash->funcinfo_hash_table,
3269                                          each_func->name);
3270           BFD_ASSERT (node);
3271           found = FALSE;
3272           while (node && !found)
3273             {
3274               found = node->info == each_func;
3275               node = node->next;
3276             }
3277           BFD_ASSERT (found);
3278         }
3279
3280       for (each_var = each_unit->variable_table;
3281            each_var;
3282            each_var = each_var->prev_var)
3283         {
3284           if (!each_var->name || !each_var->file || each_var->stack)
3285             continue;
3286           node = lookup_info_hash_table (stash->varinfo_hash_table,
3287                                          each_var->name);
3288           BFD_ASSERT (node);
3289           found = FALSE;
3290           while (node && !found)
3291             {
3292               found = node->info == each_var;
3293               node = node->next;
3294             }
3295           BFD_ASSERT (found);
3296         }
3297     }
3298 }
3299
3300 /* Check to see if we want to enable the info hash tables, which consume
3301    quite a bit of memory.  Currently we only check the number times
3302    bfd_dwarf2_find_line is called.  In the future, we may also want to
3303    take the number of symbols into account.  */
3304
3305 static void
3306 stash_maybe_enable_info_hash_tables (bfd *abfd, struct dwarf2_debug *stash)
3307 {
3308   BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_OFF);
3309
3310   if (stash->info_hash_count++ < STASH_INFO_HASH_TRIGGER)
3311     return;
3312
3313   /* FIXME: Maybe we should check the reduce_memory_overheads
3314      and optimize fields in the bfd_link_info structure ?  */
3315
3316   /* Create hash tables.  */
3317   stash->funcinfo_hash_table = create_info_hash_table (abfd);
3318   stash->varinfo_hash_table = create_info_hash_table (abfd);
3319   if (!stash->funcinfo_hash_table || !stash->varinfo_hash_table)
3320     {
3321       /* Turn off info hashes if any allocation above fails.  */
3322       stash->info_hash_status = STASH_INFO_HASH_DISABLED;
3323       return;
3324     }
3325   /* We need a forced update so that the info hash tables will
3326      be created even though there is no compilation unit.  That
3327      happens if STASH_INFO_HASH_TRIGGER is 0.  */
3328   stash_maybe_update_info_hash_tables (stash);
3329   stash->info_hash_status = STASH_INFO_HASH_ON;
3330 }
3331
3332 /* Find the file and line associated with a symbol and address using the
3333    info hash tables of a stash. If there is a match, the function returns
3334    TRUE and update the locations pointed to by filename_ptr and linenumber_ptr;
3335    otherwise it returns FALSE.  */
3336
3337 static bfd_boolean
3338 stash_find_line_fast (struct dwarf2_debug *stash,
3339                       asymbol *sym,
3340                       bfd_vma addr,
3341                       const char **filename_ptr,
3342                       unsigned int *linenumber_ptr)
3343 {
3344   BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_ON);
3345
3346   if (sym->flags & BSF_FUNCTION)
3347     return info_hash_lookup_funcinfo (stash->funcinfo_hash_table, sym, addr,
3348                                       filename_ptr, linenumber_ptr);
3349   return info_hash_lookup_varinfo (stash->varinfo_hash_table, sym, addr,
3350                                    filename_ptr, linenumber_ptr);
3351 }
3352
3353 /* Save current section VMAs.  */
3354
3355 static bfd_boolean
3356 save_section_vma (const bfd *abfd, struct dwarf2_debug *stash)
3357 {
3358   asection *s;
3359   unsigned int i;
3360
3361   if (abfd->section_count == 0)
3362     return TRUE;
3363   stash->sec_vma = bfd_malloc (sizeof (*stash->sec_vma) * abfd->section_count);
3364   if (stash->sec_vma == NULL)
3365     return FALSE;
3366   for (i = 0, s = abfd->sections; i < abfd->section_count; i++, s = s->next)
3367     {
3368       if (s->output_section != NULL)
3369         stash->sec_vma[i] = s->output_section->vma + s->output_offset;
3370       else
3371         stash->sec_vma[i] = s->vma;
3372     }
3373   return TRUE;
3374 }
3375
3376 /* Compare current section VMAs against those at the time the stash
3377    was created.  If find_nearest_line is used in linker warnings or
3378    errors early in the link process, the debug info stash will be
3379    invalid for later calls.  This is because we relocate debug info
3380    sections, so the stashed section contents depend on symbol values,
3381    which in turn depend on section VMAs.  */
3382
3383 static bfd_boolean
3384 section_vma_same (const bfd *abfd, const struct dwarf2_debug *stash)
3385 {
3386   asection *s;
3387   unsigned int i;
3388
3389   for (i = 0, s = abfd->sections; i < abfd->section_count; i++, s = s->next)
3390     {
3391       bfd_vma vma;
3392
3393       if (s->output_section != NULL)
3394         vma = s->output_section->vma + s->output_offset;
3395       else
3396         vma = s->vma;
3397       if (vma != stash->sec_vma[i])
3398         return FALSE;
3399     }
3400   return TRUE;
3401 }
3402
3403 /* Read debug information from DEBUG_BFD when DEBUG_BFD is specified.
3404    If DEBUG_BFD is not specified, we read debug information from ABFD
3405    or its gnu_debuglink. The results will be stored in PINFO.
3406    The function returns TRUE iff debug information is ready.  */
3407
3408 bfd_boolean
3409 _bfd_dwarf2_slurp_debug_info (bfd *abfd, bfd *debug_bfd,
3410                               const struct dwarf_debug_section *debug_sections,
3411                               asymbol **symbols,
3412                               void **pinfo)
3413 {
3414   bfd_size_type amt = sizeof (struct dwarf2_debug);
3415   bfd_size_type total_size;
3416   asection *msec;
3417   struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
3418
3419   if (stash != NULL)
3420     {
3421       if (stash->syms == symbols
3422           && section_vma_same (abfd, stash))
3423         return TRUE;
3424       _bfd_dwarf2_cleanup_debug_info (abfd, pinfo);
3425       memset (stash, 0, amt);
3426     }
3427   else
3428     {
3429       stash = (struct dwarf2_debug *) bfd_zalloc (abfd, amt);
3430       if (! stash)
3431         return FALSE;
3432     }
3433   stash->debug_sections = debug_sections;
3434   stash->syms = symbols;
3435   if (!save_section_vma (abfd, stash))
3436     return FALSE;
3437
3438   *pinfo = stash;
3439
3440   if (debug_bfd == NULL)
3441     debug_bfd = abfd;
3442
3443   msec = find_debug_info (debug_bfd, debug_sections, NULL);
3444   if (msec == NULL && abfd == debug_bfd)
3445     {
3446       char * debug_filename = bfd_follow_gnu_debuglink (abfd, DEBUGDIR);
3447
3448       if (debug_filename == NULL)
3449         /* No dwarf2 info, and no gnu_debuglink to follow.
3450            Note that at this point the stash has been allocated, but
3451            contains zeros.  This lets future calls to this function
3452            fail more quickly.  */
3453         return FALSE;
3454
3455       if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL
3456           || ! bfd_check_format (debug_bfd, bfd_object)
3457           || (msec = find_debug_info (debug_bfd,
3458                                       debug_sections, NULL)) == NULL)
3459         {
3460           if (debug_bfd)
3461             bfd_close (debug_bfd);
3462           /* FIXME: Should we report our failure to follow the debuglink ?  */
3463           free (debug_filename);
3464           return FALSE;
3465         }
3466       stash->close_on_cleanup = TRUE;
3467     }
3468   stash->bfd_ptr = debug_bfd;
3469
3470   /* There can be more than one DWARF2 info section in a BFD these
3471      days.  First handle the easy case when there's only one.  If
3472      there's more than one, try case two: none of the sections is
3473      compressed.  In that case, read them all in and produce one
3474      large stash.  We do this in two passes - in the first pass we
3475      just accumulate the section sizes, and in the second pass we
3476      read in the section's contents.  (The allows us to avoid
3477      reallocing the data as we add sections to the stash.)  If
3478      some or all sections are compressed, then do things the slow
3479      way, with a bunch of reallocs.  */
3480
3481   if (! find_debug_info (debug_bfd, debug_sections, msec))
3482     {
3483       /* Case 1: only one info section.  */
3484       total_size = msec->size;
3485       if (! read_section (debug_bfd, &stash->debug_sections[debug_info],
3486                           symbols, 0,
3487                           &stash->info_ptr_memory, &total_size))
3488         return FALSE;
3489     }
3490   else
3491     {
3492       /* Case 2: multiple sections.  */
3493       for (total_size = 0;
3494            msec;
3495            msec = find_debug_info (debug_bfd, debug_sections, msec))
3496         total_size += msec->size;
3497
3498       stash->info_ptr_memory = (bfd_byte *) bfd_malloc (total_size);
3499       if (stash->info_ptr_memory == NULL)
3500         return FALSE;
3501
3502       total_size = 0;
3503       for (msec = find_debug_info (debug_bfd, debug_sections, NULL);
3504            msec;
3505            msec = find_debug_info (debug_bfd, debug_sections, msec))
3506         {
3507           bfd_size_type size;
3508
3509           size = msec->size;
3510           if (size == 0)
3511             continue;
3512
3513           if (!(bfd_simple_get_relocated_section_contents
3514                 (debug_bfd, msec, stash->info_ptr_memory + total_size,
3515                  symbols)))
3516             return FALSE;
3517
3518           total_size += size;
3519         }
3520     }
3521
3522   stash->info_ptr = stash->info_ptr_memory;
3523   stash->info_ptr_end = stash->info_ptr + total_size;
3524   stash->sec = find_debug_info (debug_bfd, debug_sections, NULL);
3525   stash->sec_info_ptr = stash->info_ptr;
3526   return TRUE;
3527 }
3528
3529 /* Find the source code location of SYMBOL.  If SYMBOL is NULL
3530    then find the nearest source code location corresponding to
3531    the address SECTION + OFFSET.
3532    Returns TRUE if the line is found without error and fills in
3533    FILENAME_PTR and LINENUMBER_PTR.  In the case where SYMBOL was
3534    NULL the FUNCTIONNAME_PTR is also filled in.
3535    SYMBOLS contains the symbol table for ABFD.
3536    DEBUG_SECTIONS contains the name of the dwarf debug sections.
3537    ADDR_SIZE is the number of bytes in the initial .debug_info length
3538    field and in the abbreviation offset, or zero to indicate that the
3539    default value should be used.  */
3540
3541 static bfd_boolean
3542 find_line (bfd *abfd,
3543            const struct dwarf_debug_section *debug_sections,
3544            asection *section,
3545            bfd_vma offset,
3546            asymbol *symbol,
3547            asymbol **symbols,
3548            const char **filename_ptr,
3549            const char **functionname_ptr,
3550            unsigned int *linenumber_ptr,
3551            unsigned int *discriminator_ptr,
3552            unsigned int addr_size,
3553            void **pinfo)
3554 {
3555   /* Read each compilation unit from the section .debug_info, and check
3556      to see if it contains the address we are searching for.  If yes,
3557      lookup the address, and return the line number info.  If no, go
3558      on to the next compilation unit.
3559
3560      We keep a list of all the previously read compilation units, and
3561      a pointer to the next un-read compilation unit.  Check the
3562      previously read units before reading more.  */
3563   struct dwarf2_debug *stash;
3564   /* What address are we looking for?  */
3565   bfd_vma addr;
3566   struct comp_unit* each;
3567   bfd_boolean found = FALSE;
3568   bfd_boolean do_line;
3569
3570   *filename_ptr = NULL;
3571   if (functionname_ptr != NULL)
3572     *functionname_ptr = NULL;
3573   *linenumber_ptr = 0;
3574   if (discriminator_ptr)
3575     *discriminator_ptr = 0;
3576
3577   if (! _bfd_dwarf2_slurp_debug_info (abfd, NULL,
3578                                       debug_sections, symbols, pinfo))
3579     return FALSE;
3580
3581   stash = (struct dwarf2_debug *) *pinfo;
3582
3583   /* In a relocatable file, 2 functions may have the same address.
3584      We change the section vma so that they won't overlap.  */
3585   if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
3586     {
3587       if (! place_sections (abfd, stash))
3588         return FALSE;
3589     }
3590
3591   do_line = (section == NULL
3592              && offset == 0
3593              && functionname_ptr == NULL
3594              && symbol != NULL);
3595   if (do_line)
3596     {
3597       addr = symbol->value;
3598       section = bfd_get_section (symbol);
3599     }
3600   else if (section != NULL
3601            && functionname_ptr != NULL
3602            && symbol == NULL)
3603     addr = offset;
3604   else
3605     abort ();
3606
3607   if (section->output_section)
3608     addr += section->output_section->vma + section->output_offset;
3609   else
3610     addr += section->vma;
3611
3612   /* A null info_ptr indicates that there is no dwarf2 info
3613      (or that an error occured while setting up the stash).  */
3614   if (! stash->info_ptr)
3615     return FALSE;
3616
3617   stash->inliner_chain = NULL;
3618
3619   /* Check the previously read comp. units first.  */
3620   if (do_line)
3621     {
3622       /* The info hash tables use quite a bit of memory.  We may not want to
3623          always use them.  We use some heuristics to decide if and when to
3624          turn it on.  */
3625       if (stash->info_hash_status == STASH_INFO_HASH_OFF)
3626         stash_maybe_enable_info_hash_tables (abfd, stash);
3627
3628       /* Keep info hash table up to date if they are available.  Note that we
3629          may disable the hash tables if there is any error duing update. */
3630       if (stash->info_hash_status == STASH_INFO_HASH_ON)
3631         stash_maybe_update_info_hash_tables (stash);
3632
3633       if (stash->info_hash_status == STASH_INFO_HASH_ON)
3634         {
3635           found = stash_find_line_fast (stash, symbol, addr, filename_ptr,
3636                                         linenumber_ptr);
3637           if (found)
3638             goto done;
3639         }
3640       else
3641         {
3642           /* Check the previously read comp. units first.  */
3643           for (each = stash->all_comp_units; each; each = each->next_unit)
3644             if ((symbol->flags & BSF_FUNCTION) == 0
3645                 || each->arange.high == 0
3646                 || comp_unit_contains_address (each, addr))
3647               {
3648                 found = comp_unit_find_line (each, symbol, addr, filename_ptr,
3649                                              linenumber_ptr, stash);
3650                 if (found)
3651                   goto done;
3652               }
3653         }
3654     }
3655   else
3656     {
3657       bfd_vma min_range = (bfd_vma) -1;
3658       const char * local_filename = NULL;
3659       const char * local_functionname = NULL;
3660       unsigned int local_linenumber = 0;
3661       unsigned int local_discriminator = 0;
3662
3663       for (each = stash->all_comp_units; each; each = each->next_unit)
3664         {
3665           bfd_vma range = (bfd_vma) -1;
3666
3667           found = ((each->arange.high == 0
3668                     || comp_unit_contains_address (each, addr))
3669                    && (range = comp_unit_find_nearest_line (each, addr,
3670                                                             & local_filename,
3671                                                             & local_functionname,
3672                                                             & local_linenumber,
3673                                                             & local_discriminator,
3674                                                             stash)) != 0);
3675           if (found)
3676             {
3677               /* PRs 15935 15994: Bogus debug information may have provided us
3678                  with an erroneous match.  We attempt to counter this by
3679                  selecting the match that has the smallest address range
3680                  associated with it.  (We are assuming that corrupt debug info
3681                  will tend to result in extra large address ranges rather than
3682                  extra small ranges).
3683
3684                  This does mean that we scan through all of the CUs associated
3685                  with the bfd each time this function is called.  But this does
3686                  have the benefit of producing consistent results every time the
3687                  function is called.  */
3688               if (range <= min_range)
3689                 {
3690                   if (filename_ptr && local_filename)
3691                     * filename_ptr = local_filename;
3692                   if (functionname_ptr && local_functionname)
3693                     * functionname_ptr = local_functionname;
3694                   if (discriminator_ptr && local_discriminator)
3695                     * discriminator_ptr = local_discriminator;
3696                   if (local_linenumber)
3697                     * linenumber_ptr = local_linenumber;
3698                   min_range = range;
3699                 }
3700             }
3701         }
3702
3703       if (* linenumber_ptr)
3704         {
3705           found = TRUE;
3706           goto done;
3707         }
3708     }
3709
3710   /* The DWARF2 spec says that the initial length field, and the
3711      offset of the abbreviation table, should both be 4-byte values.
3712      However, some compilers do things differently.  */
3713   if (addr_size == 0)
3714     addr_size = 4;
3715   BFD_ASSERT (addr_size == 4 || addr_size == 8);
3716
3717   /* Read each remaining comp. units checking each as they are read.  */
3718   while (stash->info_ptr < stash->info_ptr_end)
3719     {
3720       bfd_vma length;
3721       unsigned int offset_size = addr_size;
3722       bfd_byte *info_ptr_unit = stash->info_ptr;
3723
3724       length = read_4_bytes (stash->bfd_ptr, stash->info_ptr);
3725       /* A 0xffffff length is the DWARF3 way of indicating
3726          we use 64-bit offsets, instead of 32-bit offsets.  */
3727       if (length == 0xffffffff)
3728         {
3729           offset_size = 8;
3730           length = read_8_bytes (stash->bfd_ptr, stash->info_ptr + 4);
3731           stash->info_ptr += 12;
3732         }
3733       /* A zero length is the IRIX way of indicating 64-bit offsets,
3734          mostly because the 64-bit length will generally fit in 32
3735          bits, and the endianness helps.  */
3736       else if (length == 0)
3737         {
3738           offset_size = 8;
3739           length = read_4_bytes (stash->bfd_ptr, stash->info_ptr + 4);
3740           stash->info_ptr += 8;
3741         }
3742       /* In the absence of the hints above, we assume 32-bit DWARF2
3743          offsets even for targets with 64-bit addresses, because:
3744            a) most of the time these targets will not have generated
3745               more than 2Gb of debug info and so will not need 64-bit
3746               offsets,
3747          and
3748            b) if they do use 64-bit offsets but they are not using
3749               the size hints that are tested for above then they are
3750               not conforming to the DWARF3 standard anyway.  */
3751       else if (addr_size == 8)
3752         {
3753           offset_size = 4;
3754           stash->info_ptr += 4;
3755         }
3756       else
3757         stash->info_ptr += 4;
3758
3759       if (length > 0)
3760         {
3761           each = parse_comp_unit (stash, length, info_ptr_unit,
3762                                   offset_size);
3763           if (!each)
3764             /* The dwarf information is damaged, don't trust it any
3765                more.  */
3766             break;
3767           stash->info_ptr += length;
3768
3769           if (stash->all_comp_units)
3770             stash->all_comp_units->prev_unit = each;
3771           else
3772             stash->last_comp_unit = each;
3773
3774           each->next_unit = stash->all_comp_units;
3775           stash->all_comp_units = each;
3776
3777           /* DW_AT_low_pc and DW_AT_high_pc are optional for
3778              compilation units.  If we don't have them (i.e.,
3779              unit->high == 0), we need to consult the line info table
3780              to see if a compilation unit contains the given
3781              address.  */
3782           if (do_line)
3783             found = (((symbol->flags & BSF_FUNCTION) == 0
3784                       || each->arange.high == 0
3785                       || comp_unit_contains_address (each, addr))
3786                      && comp_unit_find_line (each, symbol, addr,
3787                                              filename_ptr,
3788                                              linenumber_ptr,
3789                                              stash));
3790           else
3791             found = ((each->arange.high == 0
3792                       || comp_unit_contains_address (each, addr))
3793                      && comp_unit_find_nearest_line (each, addr,
3794                                                      filename_ptr,
3795                                                      functionname_ptr,
3796                                                      linenumber_ptr,
3797                                                      discriminator_ptr,
3798                                                      stash)) > 0;
3799
3800           if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr)
3801               == stash->sec->size)
3802             {
3803               stash->sec = find_debug_info (stash->bfd_ptr, debug_sections,
3804                                             stash->sec);
3805               stash->sec_info_ptr = stash->info_ptr;
3806             }
3807
3808           if (found)
3809             goto done;
3810         }
3811     }
3812
3813  done:
3814   if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
3815     unset_sections (stash);
3816
3817   return found;
3818 }
3819
3820 /* The DWARF2 version of find_nearest_line.
3821    Return TRUE if the line is found without error.  */
3822
3823 bfd_boolean
3824 _bfd_dwarf2_find_nearest_line (bfd *abfd,
3825                                const struct dwarf_debug_section *debug_sections,
3826                                asection *section,
3827                                asymbol **symbols,
3828                                bfd_vma offset,
3829                                const char **filename_ptr,
3830                                const char **functionname_ptr,
3831                                unsigned int *linenumber_ptr,
3832                                unsigned int *discriminator_ptr,
3833                                unsigned int addr_size,
3834                                void **pinfo)
3835 {
3836   return find_line (abfd, debug_sections, section, offset, NULL, symbols,
3837                     filename_ptr, functionname_ptr, linenumber_ptr,
3838                     discriminator_ptr, addr_size, pinfo);
3839 }
3840
3841 /* The DWARF2 version of find_line.
3842    Return TRUE if the line is found without error.  */
3843
3844 bfd_boolean
3845 _bfd_dwarf2_find_line (bfd *abfd,
3846                        asymbol **symbols,
3847                        asymbol *symbol,
3848                        const char **filename_ptr,
3849                        unsigned int *linenumber_ptr,
3850                        unsigned int *discriminator_ptr,
3851                        unsigned int addr_size,
3852                        void **pinfo)
3853 {
3854   return find_line (abfd, dwarf_debug_sections, NULL, 0, symbol, symbols,
3855                     filename_ptr, NULL, linenumber_ptr, discriminator_ptr,
3856                     addr_size, pinfo);
3857 }
3858
3859 bfd_boolean
3860 _bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
3861                                const char **filename_ptr,
3862                                const char **functionname_ptr,
3863                                unsigned int *linenumber_ptr,
3864                                void **pinfo)
3865 {
3866   struct dwarf2_debug *stash;
3867
3868   stash = (struct dwarf2_debug *) *pinfo;
3869   if (stash)
3870     {
3871       struct funcinfo *func = stash->inliner_chain;
3872
3873       if (func && func->caller_func)
3874         {
3875           *filename_ptr = func->caller_file;
3876           *functionname_ptr = func->caller_func->name;
3877           *linenumber_ptr = func->caller_line;
3878           stash->inliner_chain = func->caller_func;
3879           return TRUE;
3880         }
3881     }
3882
3883   return FALSE;
3884 }
3885
3886 void
3887 _bfd_dwarf2_cleanup_debug_info (bfd *abfd, void **pinfo)
3888 {
3889   struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
3890   struct comp_unit *each;
3891
3892   if (abfd == NULL || stash == NULL)
3893     return;
3894
3895   for (each = stash->all_comp_units; each; each = each->next_unit)
3896     {
3897       struct abbrev_info **abbrevs = each->abbrevs;
3898       struct funcinfo *function_table = each->function_table;
3899       struct varinfo *variable_table = each->variable_table;
3900       size_t i;
3901
3902       for (i = 0; i < ABBREV_HASH_SIZE; i++)
3903         {
3904           struct abbrev_info *abbrev = abbrevs[i];
3905
3906           while (abbrev)
3907             {
3908               free (abbrev->attrs);
3909               abbrev = abbrev->next;
3910             }
3911         }
3912
3913       if (each->line_table)
3914         {
3915           free (each->line_table->dirs);
3916           free (each->line_table->files);
3917         }
3918
3919       while (function_table)
3920         {
3921           if (function_table->file)
3922             {
3923               free (function_table->file);
3924               function_table->file = NULL;
3925             }
3926
3927           if (function_table->caller_file)
3928             {
3929               free (function_table->caller_file);
3930               function_table->caller_file = NULL;
3931             }
3932           function_table = function_table->prev_func;
3933         }
3934
3935       while (variable_table)
3936         {
3937           if (variable_table->file)
3938             {
3939               free (variable_table->file);
3940               variable_table->file = NULL;
3941             }
3942
3943           variable_table = variable_table->prev_var;
3944         }
3945     }
3946
3947   if (stash->dwarf_abbrev_buffer)
3948     free (stash->dwarf_abbrev_buffer);
3949   if (stash->dwarf_line_buffer)
3950     free (stash->dwarf_line_buffer);
3951   if (stash->dwarf_str_buffer)
3952     free (stash->dwarf_str_buffer);
3953   if (stash->dwarf_ranges_buffer)
3954     free (stash->dwarf_ranges_buffer);
3955   if (stash->info_ptr_memory)
3956     free (stash->info_ptr_memory);
3957   if (stash->close_on_cleanup)
3958     bfd_close (stash->bfd_ptr);
3959   if (stash->alt_dwarf_str_buffer)
3960     free (stash->alt_dwarf_str_buffer);
3961   if (stash->alt_dwarf_info_buffer)
3962     free (stash->alt_dwarf_info_buffer);
3963   if (stash->sec_vma)
3964     free (stash->sec_vma);
3965   if (stash->alt_bfd_ptr)
3966     bfd_close (stash->alt_bfd_ptr);
3967 }