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