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