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