Fix addr2line -i problem; reports incorrect function nesting for inline funcs.
[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 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 2 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, MA 02110-1301, USA.  */
31
32 #include "bfd.h"
33 #include "sysdep.h"
34 #include "libiberty.h"
35 #include "libbfd.h"
36 #include "elf-bfd.h"
37 #include "elf/dwarf2.h"
38
39 /* The data in the .debug_line statement prologue looks like this.  */
40
41 struct line_head
42 {
43   bfd_vma total_length;
44   unsigned short version;
45   bfd_vma prologue_length;
46   unsigned char minimum_instruction_length;
47   unsigned char default_is_stmt;
48   int line_base;
49   unsigned char line_range;
50   unsigned char opcode_base;
51   unsigned char *standard_opcode_lengths;
52 };
53
54 /* Attributes have a name and a value.  */
55
56 struct attribute
57 {
58   enum dwarf_attribute name;
59   enum dwarf_form form;
60   union
61   {
62     char *str;
63     struct dwarf_block *blk;
64     bfd_uint64_t val;
65     bfd_int64_t sval;
66   }
67   u;
68 };
69
70 /* Blocks are a bunch of untyped bytes.  */
71 struct dwarf_block
72 {
73   unsigned int size;
74   bfd_byte *data;
75 };
76
77 struct dwarf2_debug
78 {
79   /* A list of all previously read comp_units.  */
80   struct comp_unit *all_comp_units;
81
82   /* The next unread compilation unit within the .debug_info section.
83      Zero indicates that the .debug_info section has not been loaded
84      into a buffer yet.  */
85   bfd_byte *info_ptr;
86
87   /* Pointer to the end of the .debug_info section memory buffer.  */
88   bfd_byte *info_ptr_end;
89
90   /* Pointer to the section and address of the beginning of the
91      section.  */
92   asection *sec;
93   bfd_byte *sec_info_ptr;
94
95   /* Pointer to the symbol table.  */
96   asymbol **syms;
97
98   /* Pointer to the .debug_abbrev section loaded into memory.  */
99   bfd_byte *dwarf_abbrev_buffer;
100
101   /* Length of the loaded .debug_abbrev section.  */
102   unsigned long dwarf_abbrev_size;
103
104   /* Buffer for decode_line_info.  */
105   bfd_byte *dwarf_line_buffer;
106
107   /* Length of the loaded .debug_line section.  */
108   unsigned long dwarf_line_size;
109
110   /* Pointer to the .debug_str section loaded into memory.  */
111   bfd_byte *dwarf_str_buffer;
112
113   /* Length of the loaded .debug_str section.  */
114   unsigned long dwarf_str_size;
115
116   /* Pointer to the .debug_ranges section loaded into memory. */
117   bfd_byte *dwarf_ranges_buffer;
118
119   /* Length of the loaded .debug_ranges section. */
120   unsigned long dwarf_ranges_size;
121
122   /* If the most recent call to bfd_find_nearest_line was given an
123      address in an inlined function, preserve a pointer into the
124      calling chain for subsequent calls to bfd_find_inliner_info to
125      use. */
126   struct funcinfo *inliner_chain;
127 };
128
129 struct arange
130 {
131   struct arange *next;
132   bfd_vma low;
133   bfd_vma high;
134 };
135
136 /* A minimal decoding of DWARF2 compilation units.  We only decode
137    what's needed to get to the line number information.  */
138
139 struct comp_unit
140 {
141   /* Chain the previously read compilation units.  */
142   struct comp_unit *next_unit;
143
144   /* Keep the bfd convenient (for memory allocation).  */
145   bfd *abfd;
146
147   /* The lowest and highest addresses contained in this compilation
148      unit as specified in the compilation unit header.  */
149   struct arange arange;
150
151   /* The DW_AT_name attribute (for error messages).  */
152   char *name;
153
154   /* The abbrev hash table.  */
155   struct abbrev_info **abbrevs;
156
157   /* Note that an error was found by comp_unit_find_nearest_line.  */
158   int error;
159
160   /* The DW_AT_comp_dir attribute.  */
161   char *comp_dir;
162
163   /* TRUE if there is a line number table associated with this comp. unit.  */
164   int stmtlist;
165
166   /* Pointer to the current comp_unit so that we can find a given entry
167      by its reference.  */
168   bfd_byte *info_ptr_unit;
169
170   /* The offset into .debug_line of the line number table.  */
171   unsigned long line_offset;
172
173   /* Pointer to the first child die for the comp unit.  */
174   bfd_byte *first_child_die_ptr;
175
176   /* The end of the comp unit.  */
177   bfd_byte *end_ptr;
178
179   /* The decoded line number, NULL if not yet decoded.  */
180   struct line_info_table *line_table;
181
182   /* A list of the functions found in this comp. unit.  */
183   struct funcinfo *function_table;
184
185   /* A list of the variables found in this comp. unit.  */
186   struct varinfo *variable_table;
187
188   /* Pointer to dwarf2_debug structure.  */
189   struct dwarf2_debug *stash;
190
191   /* Address size for this unit - from unit header.  */
192   unsigned char addr_size;
193
194   /* Offset size for this unit - from unit header.  */
195   unsigned char offset_size;
196
197   /* Base address for this unit - from DW_AT_low_pc attribute of
198      DW_TAG_compile_unit DIE */
199   bfd_vma base_address;
200 };
201
202 /* This data structure holds the information of an abbrev.  */
203 struct abbrev_info
204 {
205   unsigned int number;          /* Number identifying abbrev.  */
206   enum dwarf_tag tag;           /* DWARF tag.  */
207   int has_children;             /* Boolean.  */
208   unsigned int num_attrs;       /* Number of attributes.  */
209   struct attr_abbrev *attrs;    /* An array of attribute descriptions.  */
210   struct abbrev_info *next;     /* Next in chain.  */
211 };
212
213 struct attr_abbrev
214 {
215   enum dwarf_attribute name;
216   enum dwarf_form form;
217 };
218
219 #ifndef ABBREV_HASH_SIZE
220 #define ABBREV_HASH_SIZE 121
221 #endif
222 #ifndef ATTR_ALLOC_CHUNK
223 #define ATTR_ALLOC_CHUNK 4
224 #endif
225
226 /* VERBATIM
227    The following function up to the END VERBATIM mark are
228    copied directly from dwarf2read.c.  */
229
230 /* Read dwarf information from a buffer.  */
231
232 static unsigned int
233 read_1_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf)
234 {
235   return bfd_get_8 (abfd, buf);
236 }
237
238 static int
239 read_1_signed_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf)
240 {
241   return bfd_get_signed_8 (abfd, buf);
242 }
243
244 static unsigned int
245 read_2_bytes (bfd *abfd, bfd_byte *buf)
246 {
247   return bfd_get_16 (abfd, buf);
248 }
249
250 static unsigned int
251 read_4_bytes (bfd *abfd, bfd_byte *buf)
252 {
253   return bfd_get_32 (abfd, buf);
254 }
255
256 static bfd_uint64_t
257 read_8_bytes (bfd *abfd, bfd_byte *buf)
258 {
259   return bfd_get_64 (abfd, buf);
260 }
261
262 static bfd_byte *
263 read_n_bytes (bfd *abfd ATTRIBUTE_UNUSED,
264               bfd_byte *buf,
265               unsigned int size ATTRIBUTE_UNUSED)
266 {
267   /* If the size of a host char is 8 bits, we can return a pointer
268      to the buffer, otherwise we have to copy the data to a buffer
269      allocated on the temporary obstack.  */
270   return buf;
271 }
272
273 static char *
274 read_string (bfd *abfd ATTRIBUTE_UNUSED,
275              bfd_byte *buf,
276              unsigned int *bytes_read_ptr)
277 {
278   /* Return a pointer to the embedded string.  */
279   char *str = (char *) buf;
280   if (*str == '\0')
281     {
282       *bytes_read_ptr = 1;
283       return NULL;
284     }
285
286   *bytes_read_ptr = strlen (str) + 1;
287   return str;
288 }
289
290 static char *
291 read_indirect_string (struct comp_unit* unit,
292                       bfd_byte *buf,
293                       unsigned int *bytes_read_ptr)
294 {
295   bfd_uint64_t offset;
296   struct dwarf2_debug *stash = unit->stash;
297   char *str;
298
299   if (unit->offset_size == 4)
300     offset = read_4_bytes (unit->abfd, buf);
301   else
302     offset = read_8_bytes (unit->abfd, buf);
303   *bytes_read_ptr = unit->offset_size;
304
305   if (! stash->dwarf_str_buffer)
306     {
307       asection *msec;
308       bfd *abfd = unit->abfd;
309       bfd_size_type sz;
310
311       msec = bfd_get_section_by_name (abfd, ".debug_str");
312       if (! msec)
313         {
314           (*_bfd_error_handler)
315             (_("Dwarf Error: Can't find .debug_str section."));
316           bfd_set_error (bfd_error_bad_value);
317           return NULL;
318         }
319
320       sz = msec->rawsize ? msec->rawsize : msec->size;
321       stash->dwarf_str_size = sz;
322       stash->dwarf_str_buffer = bfd_alloc (abfd, sz);
323       if (! stash->dwarf_str_buffer)
324         return NULL;
325
326       if (! bfd_get_section_contents (abfd, msec, stash->dwarf_str_buffer,
327                                       0, sz))
328         return NULL;
329     }
330
331   if (offset >= stash->dwarf_str_size)
332     {
333       (*_bfd_error_handler) (_("Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)."),
334                              (unsigned long) offset, stash->dwarf_str_size);
335       bfd_set_error (bfd_error_bad_value);
336       return NULL;
337     }
338
339   str = (char *) stash->dwarf_str_buffer + offset;
340   if (*str == '\0')
341     return NULL;
342   return str;
343 }
344
345 /* END VERBATIM */
346
347 static bfd_uint64_t
348 read_address (struct comp_unit *unit, bfd_byte *buf)
349 {
350   int signed_vma = get_elf_backend_data (unit->abfd)->sign_extend_vma;
351
352   if (signed_vma)
353     {
354       switch (unit->addr_size)
355         {
356         case 8:
357           return bfd_get_signed_64 (unit->abfd, buf);
358         case 4:
359           return bfd_get_signed_32 (unit->abfd, buf);
360         case 2:
361           return bfd_get_signed_16 (unit->abfd, buf);
362         default:
363           abort ();
364         }
365     }
366   else
367     {
368       switch (unit->addr_size)
369         {
370         case 8:
371           return bfd_get_64 (unit->abfd, buf);
372         case 4:
373           return bfd_get_32 (unit->abfd, buf);
374         case 2:
375           return bfd_get_16 (unit->abfd, buf);
376         default:
377           abort ();
378         }
379     }
380 }
381
382 /* Lookup an abbrev_info structure in the abbrev hash table.  */
383
384 static struct abbrev_info *
385 lookup_abbrev (unsigned int number, struct abbrev_info **abbrevs)
386 {
387   unsigned int hash_number;
388   struct abbrev_info *abbrev;
389
390   hash_number = number % ABBREV_HASH_SIZE;
391   abbrev = abbrevs[hash_number];
392
393   while (abbrev)
394     {
395       if (abbrev->number == number)
396         return abbrev;
397       else
398         abbrev = abbrev->next;
399     }
400
401   return NULL;
402 }
403
404 /* In DWARF version 2, the description of the debugging information is
405    stored in a separate .debug_abbrev section.  Before we read any
406    dies from a section we read in all abbreviations and install them
407    in a hash table.  */
408
409 static struct abbrev_info**
410 read_abbrevs (bfd *abfd, bfd_uint64_t offset, struct dwarf2_debug *stash)
411 {
412   struct abbrev_info **abbrevs;
413   bfd_byte *abbrev_ptr;
414   struct abbrev_info *cur_abbrev;
415   unsigned int abbrev_number, bytes_read, abbrev_name;
416   unsigned int abbrev_form, hash_number;
417   bfd_size_type amt;
418
419   if (! stash->dwarf_abbrev_buffer)
420     {
421       asection *msec;
422
423       msec = bfd_get_section_by_name (abfd, ".debug_abbrev");
424       if (! msec)
425         {
426           (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_abbrev section."));
427           bfd_set_error (bfd_error_bad_value);
428           return 0;
429         }
430
431       stash->dwarf_abbrev_size = msec->size;
432       stash->dwarf_abbrev_buffer
433         = bfd_simple_get_relocated_section_contents (abfd, msec, NULL,
434                                                      stash->syms);
435       if (! stash->dwarf_abbrev_buffer)
436           return 0;
437     }
438
439   if (offset >= stash->dwarf_abbrev_size)
440     {
441       (*_bfd_error_handler) (_("Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)."),
442                              (unsigned long) offset, stash->dwarf_abbrev_size);
443       bfd_set_error (bfd_error_bad_value);
444       return 0;
445     }
446
447   amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE;
448   abbrevs = bfd_zalloc (abfd, amt);
449
450   abbrev_ptr = stash->dwarf_abbrev_buffer + offset;
451   abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
452   abbrev_ptr += bytes_read;
453
454   /* Loop until we reach an abbrev number of 0.  */
455   while (abbrev_number)
456     {
457       amt = sizeof (struct abbrev_info);
458       cur_abbrev = bfd_zalloc (abfd, amt);
459
460       /* Read in abbrev header.  */
461       cur_abbrev->number = abbrev_number;
462       cur_abbrev->tag = (enum dwarf_tag)
463         read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
464       abbrev_ptr += bytes_read;
465       cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
466       abbrev_ptr += 1;
467
468       /* Now read in declarations.  */
469       abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
470       abbrev_ptr += bytes_read;
471       abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
472       abbrev_ptr += bytes_read;
473
474       while (abbrev_name)
475         {
476           if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
477             {
478               struct attr_abbrev *tmp;
479
480               amt = cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK;
481               amt *= sizeof (struct attr_abbrev);
482               tmp = bfd_realloc (cur_abbrev->attrs, amt);
483               if (tmp == NULL)
484                 {
485                   size_t i;
486
487                   for (i = 0; i < ABBREV_HASH_SIZE; i++)
488                     {
489                     struct abbrev_info *abbrev = abbrevs[i];
490
491                     while (abbrev)
492                       {
493                         free (abbrev->attrs);
494                         abbrev = abbrev->next;
495                       }
496                     }
497                   return NULL;
498                 }
499               cur_abbrev->attrs = tmp;
500             }
501
502           cur_abbrev->attrs[cur_abbrev->num_attrs].name
503             = (enum dwarf_attribute) abbrev_name;
504           cur_abbrev->attrs[cur_abbrev->num_attrs++].form
505             = (enum dwarf_form) abbrev_form;
506           abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
507           abbrev_ptr += bytes_read;
508           abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
509           abbrev_ptr += bytes_read;
510         }
511
512       hash_number = abbrev_number % ABBREV_HASH_SIZE;
513       cur_abbrev->next = abbrevs[hash_number];
514       abbrevs[hash_number] = cur_abbrev;
515
516       /* Get next abbreviation.
517          Under Irix6 the abbreviations for a compilation unit are not
518          always properly terminated with an abbrev number of 0.
519          Exit loop if we encounter an abbreviation which we have
520          already read (which means we are about to read the abbreviations
521          for the next compile unit) or if the end of the abbreviation
522          table is reached.  */
523       if ((unsigned int) (abbrev_ptr - stash->dwarf_abbrev_buffer)
524             >= stash->dwarf_abbrev_size)
525         break;
526       abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
527       abbrev_ptr += bytes_read;
528       if (lookup_abbrev (abbrev_number,abbrevs) != NULL)
529         break;
530     }
531
532   return abbrevs;
533 }
534
535 /* Read an attribute value described by an attribute form.  */
536
537 static bfd_byte *
538 read_attribute_value (struct attribute *attr,
539                       unsigned form,
540                       struct comp_unit *unit,
541                       bfd_byte *info_ptr)
542 {
543   bfd *abfd = unit->abfd;
544   unsigned int bytes_read;
545   struct dwarf_block *blk;
546   bfd_size_type amt;
547
548   attr->form = (enum dwarf_form) form;
549
550   switch (form)
551     {
552     case DW_FORM_addr:
553       /* FIXME: DWARF3 draft says DW_FORM_ref_addr is offset_size.  */
554     case DW_FORM_ref_addr:
555       attr->u.val = read_address (unit, info_ptr);
556       info_ptr += unit->addr_size;
557       break;
558     case DW_FORM_block2:
559       amt = sizeof (struct dwarf_block);
560       blk = bfd_alloc (abfd, amt);
561       blk->size = read_2_bytes (abfd, info_ptr);
562       info_ptr += 2;
563       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
564       info_ptr += blk->size;
565       attr->u.blk = blk;
566       break;
567     case DW_FORM_block4:
568       amt = sizeof (struct dwarf_block);
569       blk = bfd_alloc (abfd, amt);
570       blk->size = read_4_bytes (abfd, info_ptr);
571       info_ptr += 4;
572       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
573       info_ptr += blk->size;
574       attr->u.blk = blk;
575       break;
576     case DW_FORM_data2:
577       attr->u.val = read_2_bytes (abfd, info_ptr);
578       info_ptr += 2;
579       break;
580     case DW_FORM_data4:
581       attr->u.val = read_4_bytes (abfd, info_ptr);
582       info_ptr += 4;
583       break;
584     case DW_FORM_data8:
585       attr->u.val = read_8_bytes (abfd, info_ptr);
586       info_ptr += 8;
587       break;
588     case DW_FORM_string:
589       attr->u.str = read_string (abfd, info_ptr, &bytes_read);
590       info_ptr += bytes_read;
591       break;
592     case DW_FORM_strp:
593       attr->u.str = read_indirect_string (unit, info_ptr, &bytes_read);
594       info_ptr += bytes_read;
595       break;
596     case DW_FORM_block:
597       amt = sizeof (struct dwarf_block);
598       blk = bfd_alloc (abfd, amt);
599       blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
600       info_ptr += bytes_read;
601       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
602       info_ptr += blk->size;
603       attr->u.blk = blk;
604       break;
605     case DW_FORM_block1:
606       amt = sizeof (struct dwarf_block);
607       blk = bfd_alloc (abfd, amt);
608       blk->size = read_1_byte (abfd, info_ptr);
609       info_ptr += 1;
610       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
611       info_ptr += blk->size;
612       attr->u.blk = blk;
613       break;
614     case DW_FORM_data1:
615       attr->u.val = read_1_byte (abfd, info_ptr);
616       info_ptr += 1;
617       break;
618     case DW_FORM_flag:
619       attr->u.val = read_1_byte (abfd, info_ptr);
620       info_ptr += 1;
621       break;
622     case DW_FORM_sdata:
623       attr->u.sval = read_signed_leb128 (abfd, info_ptr, &bytes_read);
624       info_ptr += bytes_read;
625       break;
626     case DW_FORM_udata:
627       attr->u.val = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
628       info_ptr += bytes_read;
629       break;
630     case DW_FORM_ref1:
631       attr->u.val = read_1_byte (abfd, info_ptr);
632       info_ptr += 1;
633       break;
634     case DW_FORM_ref2:
635       attr->u.val = read_2_bytes (abfd, info_ptr);
636       info_ptr += 2;
637       break;
638     case DW_FORM_ref4:
639       attr->u.val = read_4_bytes (abfd, info_ptr);
640       info_ptr += 4;
641       break;
642     case DW_FORM_ref8:
643       attr->u.val = read_8_bytes (abfd, info_ptr);
644       info_ptr += 8;
645       break;
646     case DW_FORM_ref_udata:
647       attr->u.val = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
648       info_ptr += bytes_read;
649       break;
650     case DW_FORM_indirect:
651       form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
652       info_ptr += bytes_read;
653       info_ptr = read_attribute_value (attr, form, unit, info_ptr);
654       break;
655     default:
656       (*_bfd_error_handler) (_("Dwarf Error: Invalid or unhandled FORM value: %u."),
657                              form);
658       bfd_set_error (bfd_error_bad_value);
659     }
660   return info_ptr;
661 }
662
663 /* Read an attribute described by an abbreviated attribute.  */
664
665 static bfd_byte *
666 read_attribute (struct attribute *attr,
667                 struct attr_abbrev *abbrev,
668                 struct comp_unit *unit,
669                 bfd_byte *info_ptr)
670 {
671   attr->name = abbrev->name;
672   info_ptr = read_attribute_value (attr, abbrev->form, unit, info_ptr);
673   return info_ptr;
674 }
675
676 /* Source line information table routines.  */
677
678 #define FILE_ALLOC_CHUNK 5
679 #define DIR_ALLOC_CHUNK 5
680
681 struct line_info
682 {
683   struct line_info* prev_line;
684   bfd_vma address;
685   char *filename;
686   unsigned int line;
687   unsigned int column;
688   int end_sequence;             /* End of (sequential) code sequence.  */
689 };
690
691 struct fileinfo
692 {
693   char *name;
694   unsigned int dir;
695   unsigned int time;
696   unsigned int size;
697 };
698
699 struct line_info_table
700 {
701   bfd* abfd;
702   unsigned int num_files;
703   unsigned int num_dirs;
704   char *comp_dir;
705   char **dirs;
706   struct fileinfo* files;
707   struct line_info* last_line;  /* largest VMA */
708   struct line_info* lcl_head;   /* local head; used in 'add_line_info' */
709 };
710
711 /* Remember some information about each function.  If the function is
712    inlined (DW_TAG_inlined_subroutine) it may have two additional
713    attributes, DW_AT_call_file and DW_AT_call_line, which specify the
714    source code location where this function was inlined. */
715
716 struct funcinfo
717 {
718   struct funcinfo *prev_func;           /* Pointer to previous function in list of all functions */
719   struct funcinfo *caller_func;         /* Pointer to function one scope higher */
720   char *caller_file;                    /* Source location file name where caller_func inlines this func */
721   int caller_line;                      /* Source location line number where caller_func inlines this func */
722   char *file;                           /* Source location file name */
723   int line;                             /* Source location line number */
724   int tag;
725   char *name;
726   struct arange arange;
727   asection *sec;                        /* Where the symbol is defined */
728 };
729
730 struct varinfo
731 {
732   /* Pointer to previous variable in list of all variables */
733   struct varinfo *prev_var;
734   /* Source location file name */
735   char *file;
736   /* Source location line number */
737   int line;
738   int tag;
739   char *name;
740   bfd_vma addr;
741   /* Where the symbol is defined */
742   asection *sec;
743   /* Is this a stack variable? */
744   unsigned int stack: 1;
745 };
746
747 /* Adds a new entry to the line_info list in the line_info_table, ensuring
748    that the list is sorted.  Note that the line_info list is sorted from
749    highest to lowest VMA (with possible duplicates); that is,
750    line_info->prev_line always accesses an equal or smaller VMA.  */
751
752 static void
753 add_line_info (struct line_info_table *table,
754                bfd_vma address,
755                char *filename,
756                unsigned int line,
757                unsigned int column,
758                int end_sequence)
759 {
760   bfd_size_type amt = sizeof (struct line_info);
761   struct line_info* info = bfd_alloc (table->abfd, amt);
762
763   /* Find the correct location for 'info'.  Normally we will receive
764      new line_info data 1) in order and 2) with increasing VMAs.
765      However some compilers break the rules (cf. decode_line_info) and
766      so we include some heuristics for quickly finding the correct
767      location for 'info'. In particular, these heuristics optimize for
768      the common case in which the VMA sequence that we receive is a
769      list of locally sorted VMAs such as
770        p...z a...j  (where a < j < p < z)
771
772      Note: table->lcl_head is used to head an *actual* or *possible*
773      sequence within the list (such as a...j) that is not directly
774      headed by table->last_line
775
776      Note: we may receive duplicate entries from 'decode_line_info'.  */
777
778   while (1)
779     if (!table->last_line
780         || address >= table->last_line->address)
781       {
782         /* Normal case: add 'info' to the beginning of the list */
783         info->prev_line = table->last_line;
784         table->last_line = info;
785
786         /* lcl_head: initialize to head a *possible* sequence at the end.  */
787         if (!table->lcl_head)
788           table->lcl_head = info;
789         break;
790       }
791     else if (!table->lcl_head->prev_line
792              && table->lcl_head->address > address)
793       {
794         /* Abnormal but easy: lcl_head is 1) at the *end* of the line
795            list and 2) the head of 'info'.  */
796         info->prev_line = NULL;
797         table->lcl_head->prev_line = info;
798         break;
799       }
800     else if (table->lcl_head->prev_line
801              && table->lcl_head->address > address
802              && address >= table->lcl_head->prev_line->address)
803       {
804         /* Abnormal but easy: lcl_head is 1) in the *middle* of the line
805            list and 2) the head of 'info'.  */
806         info->prev_line = table->lcl_head->prev_line;
807         table->lcl_head->prev_line = info;
808         break;
809       }
810     else
811       {
812         /* Abnormal and hard: Neither 'last_line' nor 'lcl_head' are valid
813            heads for 'info'.  Reset 'lcl_head' and repeat.  */
814         struct line_info* li2 = table->last_line; /* always non-NULL */
815         struct line_info* li1 = li2->prev_line;
816
817         while (li1)
818           {
819             if (li2->address > address && address >= li1->address)
820               break;
821
822             li2 = li1; /* always non-NULL */
823             li1 = li1->prev_line;
824           }
825         table->lcl_head = li2;
826       }
827
828   /* Set member data of 'info'.  */
829   info->address = address;
830   info->line = line;
831   info->column = column;
832   info->end_sequence = end_sequence;
833
834   if (filename && filename[0])
835     {
836       info->filename = bfd_alloc (table->abfd, strlen (filename) + 1);
837       if (info->filename)
838         strcpy (info->filename, filename);
839     }
840   else
841     info->filename = NULL;
842 }
843
844 /* Extract a fully qualified filename from a line info table.
845    The returned string has been malloc'ed and it is the caller's
846    responsibility to free it.  */
847
848 static char *
849 concat_filename (struct line_info_table *table, unsigned int file)
850 {
851   char *filename;
852
853   if (file - 1 >= table->num_files)
854     {
855       (*_bfd_error_handler)
856         (_("Dwarf Error: mangled line number section (bad file number)."));
857       return strdup ("<unknown>");
858     }
859
860   filename = table->files[file - 1].name;
861
862   if (! IS_ABSOLUTE_PATH (filename))
863     {
864       char *dirname = (table->files[file - 1].dir
865                        ? table->dirs[table->files[file - 1].dir - 1]
866                        : table->comp_dir);
867
868       /* Not all tools set DW_AT_comp_dir, so dirname may be unknown.
869          The best we can do is return the filename part.  */
870       if (dirname != NULL)
871         {
872           unsigned int len = strlen (dirname) + strlen (filename) + 2;
873           char * name;
874
875           name = bfd_malloc (len);
876           if (name)
877             sprintf (name, "%s/%s", dirname, filename);
878           return name;
879         }
880     }
881
882   return strdup (filename);
883 }
884
885 static void
886 arange_add (bfd *abfd, struct arange *first_arange, bfd_vma low_pc, bfd_vma high_pc)
887 {
888   struct arange *arange;
889
890   /* If the first arange is empty, use it. */
891   if (first_arange->high == 0)
892     {
893       first_arange->low = low_pc;
894       first_arange->high = high_pc;
895       return;
896     }
897
898   /* Next see if we can cheaply extend an existing range.  */
899   arange = first_arange;
900   do
901     {
902       if (low_pc == arange->high)
903         {
904           arange->high = high_pc;
905           return;
906         }
907       if (high_pc == arange->low)
908         {
909           arange->low = low_pc;
910           return;
911         }
912       arange = arange->next;
913     }
914   while (arange);
915
916   /* Need to allocate a new arange and insert it into the arange list.
917      Order isn't significant, so just insert after the first arange. */
918   arange = bfd_zalloc (abfd, sizeof (*arange));
919   arange->low = low_pc;
920   arange->high = high_pc;
921   arange->next = first_arange->next;
922   first_arange->next = arange;
923 }
924
925 /* Decode the line number information for UNIT.  */
926
927 static struct line_info_table*
928 decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
929 {
930   bfd *abfd = unit->abfd;
931   struct line_info_table* table;
932   bfd_byte *line_ptr;
933   bfd_byte *line_end;
934   struct line_head lh;
935   unsigned int i, bytes_read, offset_size;
936   char *cur_file, *cur_dir;
937   unsigned char op_code, extended_op, adj_opcode;
938   bfd_size_type amt;
939
940   if (! stash->dwarf_line_buffer)
941     {
942       asection *msec;
943
944       msec = bfd_get_section_by_name (abfd, ".debug_line");
945       if (! msec)
946         {
947           (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_line section."));
948           bfd_set_error (bfd_error_bad_value);
949           return 0;
950         }
951
952       stash->dwarf_line_size = msec->size;
953       stash->dwarf_line_buffer
954         = bfd_simple_get_relocated_section_contents (abfd, msec, NULL,
955                                                      stash->syms);
956       if (! stash->dwarf_line_buffer)
957         return 0;
958     }
959
960   /* It is possible to get a bad value for the line_offset.  Validate
961      it here so that we won't get a segfault below.  */
962   if (unit->line_offset >= stash->dwarf_line_size)
963     {
964       (*_bfd_error_handler) (_("Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)."),
965                              unit->line_offset, stash->dwarf_line_size);
966       bfd_set_error (bfd_error_bad_value);
967       return 0;
968     }
969
970   amt = sizeof (struct line_info_table);
971   table = bfd_alloc (abfd, amt);
972   table->abfd = abfd;
973   table->comp_dir = unit->comp_dir;
974
975   table->num_files = 0;
976   table->files = NULL;
977
978   table->num_dirs = 0;
979   table->dirs = NULL;
980
981   table->files = NULL;
982   table->last_line = NULL;
983   table->lcl_head = NULL;
984
985   line_ptr = stash->dwarf_line_buffer + unit->line_offset;
986
987   /* Read in the prologue.  */
988   lh.total_length = read_4_bytes (abfd, line_ptr);
989   line_ptr += 4;
990   offset_size = 4;
991   if (lh.total_length == 0xffffffff)
992     {
993       lh.total_length = read_8_bytes (abfd, line_ptr);
994       line_ptr += 8;
995       offset_size = 8;
996     }
997   else if (lh.total_length == 0 && unit->addr_size == 8)
998     {
999       /* Handle (non-standard) 64-bit DWARF2 formats.  */
1000       lh.total_length = read_4_bytes (abfd, line_ptr);
1001       line_ptr += 4;
1002       offset_size = 8;
1003     }
1004   line_end = line_ptr + lh.total_length;
1005   lh.version = read_2_bytes (abfd, line_ptr);
1006   line_ptr += 2;
1007   if (offset_size == 4)
1008     lh.prologue_length = read_4_bytes (abfd, line_ptr);
1009   else
1010     lh.prologue_length = read_8_bytes (abfd, line_ptr);
1011   line_ptr += offset_size;
1012   lh.minimum_instruction_length = read_1_byte (abfd, line_ptr);
1013   line_ptr += 1;
1014   lh.default_is_stmt = read_1_byte (abfd, line_ptr);
1015   line_ptr += 1;
1016   lh.line_base = read_1_signed_byte (abfd, line_ptr);
1017   line_ptr += 1;
1018   lh.line_range = read_1_byte (abfd, line_ptr);
1019   line_ptr += 1;
1020   lh.opcode_base = read_1_byte (abfd, line_ptr);
1021   line_ptr += 1;
1022   amt = lh.opcode_base * sizeof (unsigned char);
1023   lh.standard_opcode_lengths = bfd_alloc (abfd, amt);
1024
1025   lh.standard_opcode_lengths[0] = 1;
1026
1027   for (i = 1; i < lh.opcode_base; ++i)
1028     {
1029       lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
1030       line_ptr += 1;
1031     }
1032
1033   /* Read directory table.  */
1034   while ((cur_dir = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1035     {
1036       line_ptr += bytes_read;
1037
1038       if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
1039         {
1040           char **tmp;
1041
1042           amt = table->num_dirs + DIR_ALLOC_CHUNK;
1043           amt *= sizeof (char *);
1044
1045           tmp = bfd_realloc (table->dirs, amt);
1046           if (tmp == NULL)
1047             {
1048               free (table->dirs);
1049               return NULL;
1050             }
1051           table->dirs = tmp;
1052         }
1053
1054       table->dirs[table->num_dirs++] = cur_dir;
1055     }
1056
1057   line_ptr += bytes_read;
1058
1059   /* Read file name table.  */
1060   while ((cur_file = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1061     {
1062       line_ptr += bytes_read;
1063
1064       if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1065         {
1066           struct fileinfo *tmp;
1067
1068           amt = table->num_files + FILE_ALLOC_CHUNK;
1069           amt *= sizeof (struct fileinfo);
1070
1071           tmp = bfd_realloc (table->files, amt);
1072           if (tmp == NULL)
1073             {
1074               free (table->files);
1075               free (table->dirs);
1076               return NULL;
1077             }
1078           table->files = tmp;
1079         }
1080
1081       table->files[table->num_files].name = cur_file;
1082       table->files[table->num_files].dir =
1083         read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1084       line_ptr += bytes_read;
1085       table->files[table->num_files].time =
1086         read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1087       line_ptr += bytes_read;
1088       table->files[table->num_files].size =
1089         read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1090       line_ptr += bytes_read;
1091       table->num_files++;
1092     }
1093
1094   line_ptr += bytes_read;
1095
1096   /* Read the statement sequences until there's nothing left.  */
1097   while (line_ptr < line_end)
1098     {
1099       /* State machine registers.  */
1100       bfd_vma address = 0;
1101       char * filename = table->num_files ? concat_filename (table, 1) : NULL;
1102       unsigned int line = 1;
1103       unsigned int column = 0;
1104       int is_stmt = lh.default_is_stmt;
1105       int basic_block = 0;
1106       int end_sequence = 0;
1107       /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
1108          compilers generate address sequences that are wildly out of
1109          order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
1110          for ia64-Linux).  Thus, to determine the low and high
1111          address, we must compare on every DW_LNS_copy, etc.  */
1112       bfd_vma low_pc  = (bfd_vma) -1;
1113       bfd_vma high_pc = 0;
1114
1115       /* Decode the table.  */
1116       while (! end_sequence)
1117         {
1118           op_code = read_1_byte (abfd, line_ptr);
1119           line_ptr += 1;
1120
1121           if (op_code >= lh.opcode_base)
1122             {
1123               /* Special operand.  */
1124               adj_opcode = op_code - lh.opcode_base;
1125               address += (adj_opcode / lh.line_range)
1126                 * lh.minimum_instruction_length;
1127               line += lh.line_base + (adj_opcode % lh.line_range);
1128               /* Append row to matrix using current values.  */
1129               add_line_info (table, address, filename, line, column, 0);
1130               basic_block = 1;
1131               if (address < low_pc)
1132                 low_pc = address;
1133               if (address > high_pc)
1134                 high_pc = address;
1135             }
1136           else switch (op_code)
1137             {
1138             case DW_LNS_extended_op:
1139               /* Ignore length.  */
1140               line_ptr += 1;
1141               extended_op = read_1_byte (abfd, line_ptr);
1142               line_ptr += 1;
1143
1144               switch (extended_op)
1145                 {
1146                 case DW_LNE_end_sequence:
1147                   end_sequence = 1;
1148                   add_line_info (table, address, filename, line, column,
1149                                  end_sequence);
1150                   if (address < low_pc)
1151                     low_pc = address;
1152                   if (address > high_pc)
1153                     high_pc = address;
1154                   arange_add (unit->abfd, &unit->arange, low_pc, high_pc);
1155                   break;
1156                 case DW_LNE_set_address:
1157                   address = read_address (unit, line_ptr);
1158                   line_ptr += unit->addr_size;
1159                   break;
1160                 case DW_LNE_define_file:
1161                   cur_file = read_string (abfd, line_ptr, &bytes_read);
1162                   line_ptr += bytes_read;
1163                   if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1164                     {
1165                       struct fileinfo *tmp;
1166
1167                       amt = table->num_files + FILE_ALLOC_CHUNK;
1168                       amt *= sizeof (struct fileinfo);
1169                       tmp = bfd_realloc (table->files, amt);
1170                       if (tmp == NULL)
1171                         {
1172                           free (table->files);
1173                           free (table->dirs);
1174                           free (filename);
1175                           return NULL;
1176                         }
1177                       table->files = tmp;
1178                     }
1179                   table->files[table->num_files].name = cur_file;
1180                   table->files[table->num_files].dir =
1181                     read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1182                   line_ptr += bytes_read;
1183                   table->files[table->num_files].time =
1184                     read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1185                   line_ptr += bytes_read;
1186                   table->files[table->num_files].size =
1187                     read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1188                   line_ptr += bytes_read;
1189                   table->num_files++;
1190                   break;
1191                 default:
1192                   (*_bfd_error_handler) (_("Dwarf Error: mangled line number section."));
1193                   bfd_set_error (bfd_error_bad_value);
1194                   free (filename);
1195                   free (table->files);
1196                   free (table->dirs);
1197                   return NULL;
1198                 }
1199               break;
1200             case DW_LNS_copy:
1201               add_line_info (table, address, filename, line, column, 0);
1202               basic_block = 0;
1203               if (address < low_pc)
1204                 low_pc = address;
1205               if (address > high_pc)
1206                 high_pc = address;
1207               break;
1208             case DW_LNS_advance_pc:
1209               address += lh.minimum_instruction_length
1210                 * read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1211               line_ptr += bytes_read;
1212               break;
1213             case DW_LNS_advance_line:
1214               line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
1215               line_ptr += bytes_read;
1216               break;
1217             case DW_LNS_set_file:
1218               {
1219                 unsigned int file;
1220
1221                 /* The file and directory tables are 0
1222                    based, the references are 1 based.  */
1223                 file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1224                 line_ptr += bytes_read;
1225                 if (filename)
1226                   free (filename);
1227                 filename = concat_filename (table, file);
1228                 break;
1229               }
1230             case DW_LNS_set_column:
1231               column = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1232               line_ptr += bytes_read;
1233               break;
1234             case DW_LNS_negate_stmt:
1235               is_stmt = (!is_stmt);
1236               break;
1237             case DW_LNS_set_basic_block:
1238               basic_block = 1;
1239               break;
1240             case DW_LNS_const_add_pc:
1241               address += lh.minimum_instruction_length
1242                       * ((255 - lh.opcode_base) / lh.line_range);
1243               break;
1244             case DW_LNS_fixed_advance_pc:
1245               address += read_2_bytes (abfd, line_ptr);
1246               line_ptr += 2;
1247               break;
1248             default:
1249               {
1250                 int i;
1251
1252                 /* Unknown standard opcode, ignore it.  */
1253                 for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
1254                   {
1255                     (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1256                     line_ptr += bytes_read;
1257                   }
1258               }
1259             }
1260         }
1261
1262       if (filename)
1263         free (filename);
1264     }
1265
1266   return table;
1267 }
1268
1269 /* If ADDR is within TABLE set the output parameters and return TRUE,
1270    otherwise return FALSE.  The output parameters, FILENAME_PTR and
1271    LINENUMBER_PTR, are pointers to the objects to be filled in.  */
1272
1273 static bfd_boolean
1274 lookup_address_in_line_info_table (struct line_info_table *table,
1275                                    bfd_vma addr,
1276                                    struct funcinfo *function,
1277                                    const char **filename_ptr,
1278                                    unsigned int *linenumber_ptr)
1279 {
1280   /* Note: table->last_line should be a descendingly sorted list. */
1281   struct line_info* next_line = table->last_line;
1282   struct line_info* each_line = NULL;
1283   *filename_ptr = NULL;
1284
1285   if (!next_line)
1286     return FALSE;
1287
1288   each_line = next_line->prev_line;
1289
1290   /* Check for large addresses */
1291   if (addr > next_line->address)
1292     each_line = NULL; /* ensure we skip over the normal case */
1293
1294   /* Normal case: search the list; save  */
1295   while (each_line && next_line)
1296     {
1297       /* If we have an address match, save this info.  This allows us
1298          to return as good as results as possible for strange debugging
1299          info.  */
1300       bfd_boolean addr_match = FALSE;
1301       if (each_line->address <= addr && addr < next_line->address)
1302         {
1303           addr_match = TRUE;
1304
1305           /* If this line appears to span functions, and addr is in the
1306              later function, return the first line of that function instead
1307              of the last line of the earlier one.  This check is for GCC
1308              2.95, which emits the first line number for a function late.  */
1309
1310           if (function != NULL)
1311             {
1312               bfd_vma lowest_pc;
1313               struct arange *arange;
1314
1315               /* Find the lowest address in the function's range list */
1316               lowest_pc = function->arange.low;
1317               for (arange = &function->arange;
1318                    arange;
1319                    arange = arange->next)
1320                 {
1321                   if (function->arange.low < lowest_pc)
1322                     lowest_pc = function->arange.low;
1323                 }
1324               /* Check for spanning function and set outgoing line info */
1325               if (addr >= lowest_pc
1326                   && each_line->address < lowest_pc
1327                   && next_line->address > lowest_pc)
1328                 {
1329                   *filename_ptr = next_line->filename;
1330                   *linenumber_ptr = next_line->line;
1331                 }
1332               else
1333                 {
1334                   *filename_ptr = each_line->filename;
1335                   *linenumber_ptr = each_line->line;
1336                 }
1337             }
1338           else
1339             {
1340               *filename_ptr = each_line->filename;
1341               *linenumber_ptr = each_line->line;
1342             }
1343         }
1344
1345       if (addr_match && !each_line->end_sequence)
1346         return TRUE; /* we have definitely found what we want */
1347
1348       next_line = each_line;
1349       each_line = each_line->prev_line;
1350     }
1351
1352   /* At this point each_line is NULL but next_line is not.  If we found
1353      a candidate end-of-sequence point in the loop above, we can return
1354      that (compatibility with a bug in the Intel compiler); otherwise,
1355      assuming that we found the containing function for this address in
1356      this compilation unit, return the first line we have a number for
1357      (compatibility with GCC 2.95).  */
1358   if (*filename_ptr == NULL && function != NULL)
1359     {
1360       *filename_ptr = next_line->filename;
1361       *linenumber_ptr = next_line->line;
1362       return TRUE;
1363     }
1364
1365   return FALSE;
1366 }
1367
1368 /* Read in the .debug_ranges section for future reference */
1369
1370 static bfd_boolean
1371 read_debug_ranges (struct comp_unit *unit)
1372 {
1373   struct dwarf2_debug *stash = unit->stash;
1374   if (! stash->dwarf_ranges_buffer)
1375     {
1376       bfd *abfd = unit->abfd;
1377       asection *msec;
1378
1379       msec = bfd_get_section_by_name (abfd, ".debug_ranges");
1380       if (! msec)
1381         {
1382           (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_ranges section."));
1383           bfd_set_error (bfd_error_bad_value);
1384           return FALSE;
1385         }
1386
1387       stash->dwarf_ranges_size = msec->size;
1388       stash->dwarf_ranges_buffer
1389         = bfd_simple_get_relocated_section_contents (abfd, msec, NULL,
1390                                                      stash->syms);
1391       if (! stash->dwarf_ranges_buffer)
1392         return FALSE;
1393     }
1394   return TRUE;
1395 }
1396
1397 /* Function table functions.  */
1398
1399 /* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return TRUE.
1400    Note that we need to find the function that has the smallest
1401    range that contains ADDR, to handle inlined functions without
1402    depending upon them being ordered in TABLE by increasing range. */
1403
1404 static bfd_boolean
1405 lookup_address_in_function_table (struct comp_unit *unit,
1406                                   bfd_vma addr,
1407                                   struct funcinfo **function_ptr,
1408                                   const char **functionname_ptr)
1409 {
1410   struct funcinfo* each_func;
1411   struct funcinfo* best_fit = NULL;
1412   struct arange *arange;
1413
1414   for (each_func = unit->function_table;
1415        each_func;
1416        each_func = each_func->prev_func)
1417     {
1418       for (arange = &each_func->arange;
1419            arange;
1420            arange = arange->next)
1421         {
1422           if (addr >= arange->low && addr < arange->high)
1423             {
1424               if (!best_fit ||
1425                   ((arange->high - arange->low) < (best_fit->arange.high - best_fit->arange.low)))
1426                 best_fit = each_func;
1427             }
1428         }
1429     }
1430
1431   if (best_fit)
1432     {
1433       *functionname_ptr = best_fit->name;
1434       *function_ptr = best_fit;
1435       return TRUE;
1436     }
1437   else
1438     {
1439       return FALSE;
1440     }
1441 }
1442
1443 /* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR
1444    and LINENUMBER_PTR, and return TRUE.  */
1445
1446 static bfd_boolean
1447 lookup_symbol_in_function_table (struct comp_unit *unit,
1448                                  asymbol *sym,
1449                                  bfd_vma addr,
1450                                  const char **filename_ptr,
1451                                  unsigned int *linenumber_ptr)
1452 {
1453   struct funcinfo* each_func;
1454   struct funcinfo* best_fit = NULL;
1455   struct arange *arange;
1456   const char *name = bfd_asymbol_name (sym);
1457   asection *sec = bfd_get_section (sym);
1458
1459   for (each_func = unit->function_table;
1460        each_func;
1461        each_func = each_func->prev_func)
1462     {
1463       for (arange = &each_func->arange;
1464            arange;
1465            arange = arange->next)
1466         {
1467           if ((!each_func->sec || each_func->sec == sec)
1468               && addr >= arange->low
1469               && addr < arange->high
1470               && strcmp (name, each_func->name) == 0
1471               && (!best_fit
1472                   || ((arange->high - arange->low)
1473                       < (best_fit->arange.high - best_fit->arange.low))))
1474             best_fit = each_func;
1475         }
1476     }
1477
1478   if (best_fit)
1479     {
1480       best_fit->sec = sec;
1481       *filename_ptr = best_fit->file;
1482       *linenumber_ptr = best_fit->line;
1483       return TRUE;
1484     }
1485   else
1486     return FALSE;
1487 }
1488
1489 /* Variable table functions.  */
1490
1491 /* If SYM is within variable table of UNIT, set FILENAME_PTR and
1492    LINENUMBER_PTR, and return TRUE.  */
1493
1494 static bfd_boolean
1495 lookup_symbol_in_variable_table (struct comp_unit *unit,
1496                                  asymbol *sym,
1497                                  bfd_vma addr,
1498                                  const char **filename_ptr,
1499                                  unsigned int *linenumber_ptr)
1500 {
1501   const char *name = bfd_asymbol_name (sym);
1502   asection *sec = bfd_get_section (sym);
1503   struct varinfo* each;
1504
1505   for (each = unit->variable_table; each; each = each->prev_var)
1506     if (each->stack == 0
1507         && each->file != NULL
1508         && each->name != NULL
1509         && each->addr == addr
1510         && (!each->sec || each->sec == sec)
1511         && strcmp (name, each->name) == 0)
1512       break;
1513
1514   if (each)
1515     {
1516       each->sec = sec;
1517       *filename_ptr = each->file;
1518       *linenumber_ptr = each->line;
1519       return TRUE;
1520     }
1521   else
1522     return FALSE;
1523 }
1524
1525 static char *
1526 find_abstract_instance_name (struct comp_unit *unit, bfd_uint64_t die_ref)
1527 {
1528   bfd *abfd = unit->abfd;
1529   bfd_byte *info_ptr;
1530   unsigned int abbrev_number, bytes_read, i;
1531   struct abbrev_info *abbrev;
1532   struct attribute attr;
1533   char *name = 0;
1534
1535   info_ptr = unit->info_ptr_unit + die_ref;
1536   abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1537   info_ptr += bytes_read;
1538
1539   if (abbrev_number)
1540     {
1541       abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
1542       if (! abbrev)
1543         {
1544           (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1545                                  abbrev_number);
1546           bfd_set_error (bfd_error_bad_value);
1547         }
1548       else
1549         {
1550           for (i = 0; i < abbrev->num_attrs; ++i)
1551             {
1552               info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1553               switch (attr.name)
1554                 {
1555                 case DW_AT_name:
1556                   /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name.  */
1557                   if (name == NULL)
1558                     name = attr.u.str;
1559                   break;
1560                 case DW_AT_specification:
1561                   name = find_abstract_instance_name (unit, attr.u.val);
1562                   break;
1563                 case DW_AT_MIPS_linkage_name:
1564                   name = attr.u.str;
1565                   break;
1566                 default:
1567                   break;
1568                 }
1569             }
1570         }
1571     }
1572   return (name);
1573 }
1574
1575 static void
1576 read_rangelist (struct comp_unit *unit, struct arange *arange, bfd_uint64_t offset)
1577 {
1578   bfd_byte *ranges_ptr;
1579   bfd_vma base_address = unit->base_address;
1580
1581   if (! unit->stash->dwarf_ranges_buffer)
1582     {
1583       if (! read_debug_ranges (unit))
1584         return;
1585     }
1586   ranges_ptr = unit->stash->dwarf_ranges_buffer + offset;
1587     
1588   for (;;)
1589     {
1590       bfd_vma low_pc;
1591       bfd_vma high_pc;
1592
1593       if (unit->addr_size == 4)
1594         {
1595           low_pc = read_4_bytes (unit->abfd, ranges_ptr);
1596           ranges_ptr += 4;
1597           high_pc = read_4_bytes (unit->abfd, ranges_ptr);
1598           ranges_ptr += 4;
1599         }
1600       else
1601         {
1602           low_pc = read_8_bytes (unit->abfd, ranges_ptr);
1603           ranges_ptr += 8;
1604           high_pc = read_8_bytes (unit->abfd, ranges_ptr);
1605           ranges_ptr += 8;
1606         }
1607       if (low_pc == 0 && high_pc == 0)
1608         break;
1609       if (low_pc == -1UL && high_pc != -1UL)
1610         base_address = high_pc;
1611       else
1612           arange_add (unit->abfd, arange, base_address + low_pc, base_address + high_pc);
1613     }
1614 }
1615
1616 /* DWARF2 Compilation unit functions.  */
1617
1618 /* Scan over each die in a comp. unit looking for functions to add
1619    to the function table and variables to the variable table.  */
1620
1621 static bfd_boolean
1622 scan_unit_for_symbols (struct comp_unit *unit)
1623 {
1624   bfd *abfd = unit->abfd;
1625   bfd_byte *info_ptr = unit->first_child_die_ptr;
1626   int nesting_level = 1;
1627   struct funcinfo **nested_funcs;
1628   int nested_funcs_size;
1629
1630   /* Maintain a stack of in-scope functions and inlined functions, which we
1631      can use to set the caller_func field.  */
1632   nested_funcs_size = 32;
1633   nested_funcs = bfd_malloc (nested_funcs_size * sizeof (struct funcinfo *));
1634   if (nested_funcs == NULL)
1635     return FALSE;
1636   nested_funcs[nesting_level] = 0;
1637
1638   while (nesting_level)
1639     {
1640       unsigned int abbrev_number, bytes_read, i;
1641       struct abbrev_info *abbrev;
1642       struct attribute attr;
1643       struct funcinfo *func;
1644       struct varinfo *var;
1645       bfd_vma low_pc = 0;
1646       bfd_vma high_pc = 0;
1647
1648       abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1649       info_ptr += bytes_read;
1650
1651       if (! abbrev_number)
1652         {
1653           nesting_level--;
1654           continue;
1655         }
1656
1657       abbrev = lookup_abbrev (abbrev_number,unit->abbrevs);
1658       if (! abbrev)
1659         {
1660           (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1661                              abbrev_number);
1662           bfd_set_error (bfd_error_bad_value);
1663           free (nested_funcs);
1664           return FALSE;
1665         }
1666
1667       var = NULL;
1668       if (abbrev->tag == DW_TAG_subprogram
1669           || abbrev->tag == DW_TAG_entry_point
1670           || abbrev->tag == DW_TAG_inlined_subroutine)
1671         {
1672           bfd_size_type amt = sizeof (struct funcinfo);
1673           func = bfd_zalloc (abfd, amt);
1674           func->tag = abbrev->tag;
1675           func->prev_func = unit->function_table;
1676           unit->function_table = func;
1677
1678           if (func->tag == DW_TAG_inlined_subroutine)
1679             for (i = nesting_level - 1; i >= 1; i--)
1680               if (nested_funcs[i])
1681                 {
1682                   func->caller_func = nested_funcs[i];
1683                   break;
1684                 }
1685           nested_funcs[nesting_level] = func;
1686         }
1687       else
1688         {
1689           func = NULL;
1690           if (abbrev->tag == DW_TAG_variable)
1691             {
1692               bfd_size_type amt = sizeof (struct varinfo);
1693               var = bfd_zalloc (abfd, amt);
1694               var->tag = abbrev->tag;
1695               var->stack = 1;
1696               var->prev_var = unit->variable_table;
1697               unit->variable_table = var;
1698             }
1699
1700           /* No inline function in scope at this nesting level.  */
1701           nested_funcs[nesting_level] = 0;
1702         }
1703
1704       for (i = 0; i < abbrev->num_attrs; ++i)
1705         {
1706           info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1707
1708           if (func)
1709             {
1710               switch (attr.name)
1711                 {
1712                 case DW_AT_call_file:
1713                   func->caller_file = concat_filename (unit->line_table, attr.u.val);
1714                   break;
1715
1716                 case DW_AT_call_line:
1717                   func->caller_line = attr.u.val;
1718                   break;
1719
1720                 case DW_AT_abstract_origin:
1721                   func->name = find_abstract_instance_name (unit, attr.u.val);
1722                   break;
1723
1724                 case DW_AT_name:
1725                   /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name.  */
1726                   if (func->name == NULL)
1727                     func->name = attr.u.str;
1728                   break;
1729
1730                 case DW_AT_MIPS_linkage_name:
1731                   func->name = attr.u.str;
1732                   break;
1733
1734                 case DW_AT_low_pc:
1735                   low_pc = attr.u.val;
1736                   break;
1737
1738                 case DW_AT_high_pc:
1739                   high_pc = attr.u.val;
1740                   break;
1741
1742                 case DW_AT_ranges:
1743                   read_rangelist (unit, &func->arange, attr.u.val);
1744                   break;
1745
1746                 case DW_AT_decl_file:
1747                   func->file = concat_filename (unit->line_table,
1748                                                 attr.u.val);
1749                   break;
1750
1751                 case DW_AT_decl_line:
1752                   func->line = attr.u.val;
1753                   break;
1754
1755                 default:
1756                   break;
1757                 }
1758             }
1759           else if (var)
1760             {
1761               switch (attr.name)
1762                 {
1763                 case DW_AT_name:
1764                   var->name = attr.u.str;
1765                   break;
1766
1767                 case DW_AT_decl_file:
1768                   var->file = concat_filename (unit->line_table,
1769                                                attr.u.val);
1770                   break;
1771
1772                 case DW_AT_decl_line:
1773                   var->line = attr.u.val;
1774                   break;
1775
1776                 case DW_AT_external:
1777                   if (attr.u.val != 0)
1778                     var->stack = 0;
1779                   break;
1780
1781                 case DW_AT_location:
1782                   switch (attr.form)
1783                     {
1784                     case DW_FORM_block:
1785                     case DW_FORM_block1:
1786                     case DW_FORM_block2:
1787                     case DW_FORM_block4:
1788                       if (*attr.u.blk->data == DW_OP_addr)
1789                         {
1790                           var->stack = 0;
1791
1792                           /* Verify that DW_OP_addr is the only opcode in the
1793                              location, in which case the block size will be 1
1794                              plus the address size.  */
1795                           /* ??? For TLS variables, gcc can emit
1796                              DW_OP_addr <addr> DW_OP_GNU_push_tls_address
1797                              which we don't handle here yet.  */
1798                           if (attr.u.blk->size == unit->addr_size + 1U)
1799                             var->addr = bfd_get (unit->addr_size * 8,
1800                                                  unit->abfd,
1801                                                  attr.u.blk->data + 1);
1802                         }
1803                       break;
1804                     
1805                     default:
1806                       break;
1807                     }
1808                   break;
1809
1810                 default:
1811                   break;
1812                 }
1813             }
1814         }
1815
1816       if (func && high_pc != 0)
1817         {
1818           arange_add (unit->abfd, &func->arange, low_pc, high_pc);
1819         }
1820
1821       if (abbrev->has_children)
1822         {
1823           nesting_level++;
1824
1825           if (nesting_level >= nested_funcs_size)
1826             {
1827               struct funcinfo **tmp;
1828
1829               nested_funcs_size *= 2;
1830               tmp = bfd_realloc (nested_funcs,
1831                                  (nested_funcs_size
1832                                   * sizeof (struct funcinfo *)));
1833               if (tmp == NULL)
1834                 {
1835                   free (nested_funcs);
1836                   return FALSE;
1837                 }
1838               nested_funcs = tmp;
1839             }
1840           nested_funcs[nesting_level] = 0;
1841         }
1842     }
1843
1844   free (nested_funcs);
1845   return TRUE;
1846 }
1847
1848 /* Parse a DWARF2 compilation unit starting at INFO_PTR.  This
1849    includes the compilation unit header that proceeds the DIE's, but
1850    does not include the length field that precedes each compilation
1851    unit header.  END_PTR points one past the end of this comp unit.
1852    OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
1853
1854    This routine does not read the whole compilation unit; only enough
1855    to get to the line number information for the compilation unit.  */
1856
1857 static struct comp_unit *
1858 parse_comp_unit (bfd *abfd,
1859                  struct dwarf2_debug *stash,
1860                  bfd_vma unit_length,
1861                  bfd_byte *info_ptr_unit,
1862                  unsigned int offset_size)
1863 {
1864   struct comp_unit* unit;
1865   unsigned int version;
1866   bfd_uint64_t abbrev_offset = 0;
1867   unsigned int addr_size;
1868   struct abbrev_info** abbrevs;
1869   unsigned int abbrev_number, bytes_read, i;
1870   struct abbrev_info *abbrev;
1871   struct attribute attr;
1872   bfd_byte *info_ptr = stash->info_ptr;
1873   bfd_byte *end_ptr = info_ptr + unit_length;
1874   bfd_size_type amt;
1875   bfd_vma low_pc = 0;
1876   bfd_vma high_pc = 0;
1877
1878   version = read_2_bytes (abfd, info_ptr);
1879   info_ptr += 2;
1880   BFD_ASSERT (offset_size == 4 || offset_size == 8);
1881   if (offset_size == 4)
1882     abbrev_offset = read_4_bytes (abfd, info_ptr);
1883   else
1884     abbrev_offset = read_8_bytes (abfd, info_ptr);
1885   info_ptr += offset_size;
1886   addr_size = read_1_byte (abfd, info_ptr);
1887   info_ptr += 1;
1888
1889   if (version != 2)
1890     {
1891       (*_bfd_error_handler) (_("Dwarf Error: found dwarf version '%u', this reader only handles version 2 information."), version);
1892       bfd_set_error (bfd_error_bad_value);
1893       return 0;
1894     }
1895
1896   if (addr_size > sizeof (bfd_vma))
1897     {
1898       (*_bfd_error_handler) (_("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."),
1899                          addr_size,
1900                          (unsigned int) sizeof (bfd_vma));
1901       bfd_set_error (bfd_error_bad_value);
1902       return 0;
1903     }
1904
1905   if (addr_size != 2 && addr_size != 4 && addr_size != 8)
1906     {
1907       (*_bfd_error_handler) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '2', '4' and '8'.", addr_size);
1908       bfd_set_error (bfd_error_bad_value);
1909       return 0;
1910     }
1911
1912   /* Read the abbrevs for this compilation unit into a table.  */
1913   abbrevs = read_abbrevs (abfd, abbrev_offset, stash);
1914   if (! abbrevs)
1915       return 0;
1916
1917   abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1918   info_ptr += bytes_read;
1919   if (! abbrev_number)
1920     {
1921       (*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %u."),
1922                          abbrev_number);
1923       bfd_set_error (bfd_error_bad_value);
1924       return 0;
1925     }
1926
1927   abbrev = lookup_abbrev (abbrev_number, abbrevs);
1928   if (! abbrev)
1929     {
1930       (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1931                          abbrev_number);
1932       bfd_set_error (bfd_error_bad_value);
1933       return 0;
1934     }
1935
1936   amt = sizeof (struct comp_unit);
1937   unit = bfd_zalloc (abfd, amt);
1938   unit->abfd = abfd;
1939   unit->addr_size = addr_size;
1940   unit->offset_size = offset_size;
1941   unit->abbrevs = abbrevs;
1942   unit->end_ptr = end_ptr;
1943   unit->stash = stash;
1944   unit->info_ptr_unit = info_ptr_unit;
1945
1946   for (i = 0; i < abbrev->num_attrs; ++i)
1947     {
1948       info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1949
1950       /* Store the data if it is of an attribute we want to keep in a
1951          partial symbol table.  */
1952       switch (attr.name)
1953         {
1954         case DW_AT_stmt_list:
1955           unit->stmtlist = 1;
1956           unit->line_offset = attr.u.val;
1957           break;
1958
1959         case DW_AT_name:
1960           unit->name = attr.u.str;
1961           break;
1962
1963         case DW_AT_low_pc:
1964           low_pc = attr.u.val;
1965           /* If the compilation unit DIE has a DW_AT_low_pc attribute,
1966              this is the base address to use when reading location
1967              lists or range lists. */
1968           unit->base_address = low_pc;
1969           break;
1970
1971         case DW_AT_high_pc:
1972           high_pc = attr.u.val;
1973           break;
1974
1975         case DW_AT_ranges:
1976           read_rangelist (unit, &unit->arange, attr.u.val);
1977           break;
1978
1979         case DW_AT_comp_dir:
1980           {
1981             char *comp_dir = attr.u.str;
1982             if (comp_dir)
1983               {
1984                 /* Irix 6.2 native cc prepends <machine>.: to the compilation
1985                    directory, get rid of it.  */
1986                 char *cp = strchr (comp_dir, ':');
1987
1988                 if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
1989                   comp_dir = cp + 1;
1990               }
1991             unit->comp_dir = comp_dir;
1992             break;
1993           }
1994
1995         default:
1996           break;
1997         }
1998     }
1999   if (high_pc != 0)
2000     {
2001       arange_add (unit->abfd, &unit->arange, low_pc, high_pc);
2002     }
2003
2004   unit->first_child_die_ptr = info_ptr;
2005   return unit;
2006 }
2007
2008 /* Return TRUE if UNIT contains the address given by ADDR.  */
2009
2010 static bfd_boolean
2011 comp_unit_contains_address (struct comp_unit *unit, bfd_vma addr)
2012 {
2013   struct arange *arange;
2014
2015   if (unit->error)
2016     return FALSE;
2017
2018   arange = &unit->arange;
2019   do
2020     {
2021       if (addr >= arange->low && addr < arange->high)
2022         return TRUE;
2023       arange = arange->next;
2024     }
2025   while (arange);
2026
2027   return FALSE;
2028 }
2029
2030 /* If UNIT contains ADDR, set the output parameters to the values for
2031    the line containing ADDR.  The output parameters, FILENAME_PTR,
2032    FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
2033    to be filled in.
2034
2035    Return TRUE if UNIT contains ADDR, and no errors were encountered;
2036    FALSE otherwise.  */
2037
2038 static bfd_boolean
2039 comp_unit_find_nearest_line (struct comp_unit *unit,
2040                              bfd_vma addr,
2041                              const char **filename_ptr,
2042                              const char **functionname_ptr,
2043                              unsigned int *linenumber_ptr,
2044                              struct dwarf2_debug *stash)
2045 {
2046   bfd_boolean line_p;
2047   bfd_boolean func_p;
2048   struct funcinfo *function;
2049
2050   if (unit->error)
2051     return FALSE;
2052
2053   if (! unit->line_table)
2054     {
2055       if (! unit->stmtlist)
2056         {
2057           unit->error = 1;
2058           return FALSE;
2059         }
2060
2061       unit->line_table = decode_line_info (unit, stash);
2062
2063       if (! unit->line_table)
2064         {
2065           unit->error = 1;
2066           return FALSE;
2067         }
2068
2069       if (unit->first_child_die_ptr < unit->end_ptr
2070           && ! scan_unit_for_symbols (unit))
2071         {
2072           unit->error = 1;
2073           return FALSE;
2074         }
2075     }
2076
2077   function = NULL;
2078   func_p = lookup_address_in_function_table (unit, addr,
2079                                              &function, functionname_ptr);
2080   if (func_p && (function->tag == DW_TAG_inlined_subroutine))
2081     stash->inliner_chain = function;
2082   line_p = lookup_address_in_line_info_table (unit->line_table, addr,
2083                                               function, filename_ptr,
2084                                               linenumber_ptr);
2085   return line_p || func_p;
2086 }
2087
2088 /* If UNIT contains SYM at ADDR, set the output parameters to the
2089    values for the line containing SYM.  The output parameters,
2090    FILENAME_PTR, and LINENUMBER_PTR, are pointers to the objects to be
2091    filled in.
2092
2093    Return TRUE if UNIT contains SYM, and no errors were encountered;
2094    FALSE otherwise.  */
2095
2096 static bfd_boolean
2097 comp_unit_find_line (struct comp_unit *unit,
2098                      asymbol *sym,
2099                      bfd_vma addr,
2100                      const char **filename_ptr,
2101                      unsigned int *linenumber_ptr,
2102                      struct dwarf2_debug *stash)
2103 {
2104   if (unit->error)
2105     return FALSE;
2106
2107   if (! unit->line_table)
2108     {
2109       if (! unit->stmtlist)
2110         {
2111           unit->error = 1;
2112           return FALSE;
2113         }
2114
2115       unit->line_table = decode_line_info (unit, stash);
2116
2117       if (! unit->line_table)
2118         {
2119           unit->error = 1;
2120           return FALSE;
2121         }
2122
2123       if (unit->first_child_die_ptr < unit->end_ptr
2124           && ! scan_unit_for_symbols (unit))
2125         {
2126           unit->error = 1;
2127           return FALSE;
2128         }
2129     }
2130
2131   if (sym->flags & BSF_FUNCTION)
2132     return lookup_symbol_in_function_table (unit, sym, addr,
2133                                             filename_ptr,
2134                                             linenumber_ptr);
2135   else
2136     return lookup_symbol_in_variable_table (unit, sym, addr,
2137                                             filename_ptr,
2138                                             linenumber_ptr);
2139 }
2140
2141 /* Locate a section in a BFD containing debugging info.  The search starts
2142    from the section after AFTER_SEC, or from the first section in the BFD if
2143    AFTER_SEC is NULL.  The search works by examining the names of the
2144    sections.  There are two permissiable names.  The first is .debug_info.
2145    This is the standard DWARF2 name.  The second is a prefix .gnu.linkonce.wi.
2146    This is a variation on the .debug_info section which has a checksum
2147    describing the contents appended onto the name.  This allows the linker to
2148    identify and discard duplicate debugging sections for different
2149    compilation units.  */
2150 #define DWARF2_DEBUG_INFO ".debug_info"
2151 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
2152
2153 static asection *
2154 find_debug_info (bfd *abfd, asection *after_sec)
2155 {
2156   asection * msec;
2157
2158   if (after_sec)
2159     msec = after_sec->next;
2160   else
2161     msec = abfd->sections;
2162
2163   while (msec)
2164     {
2165       if (strcmp (msec->name, DWARF2_DEBUG_INFO) == 0)
2166         return msec;
2167
2168       if (strncmp (msec->name, GNU_LINKONCE_INFO, strlen (GNU_LINKONCE_INFO)) == 0)
2169         return msec;
2170
2171       msec = msec->next;
2172     }
2173
2174   return NULL;
2175 }
2176
2177 /* The DWARF2 version of find_nearest_line.  Return TRUE if the line
2178    is found without error.  ADDR_SIZE is the number of bytes in the
2179    initial .debug_info length field and in the abbreviation offset.
2180    You may use zero to indicate that the default value should be
2181    used.  */
2182
2183 bfd_boolean
2184 _bfd_dwarf2_find_nearest_line (bfd *abfd,
2185                                asection *section,
2186                                asymbol **symbols,
2187                                bfd_vma offset,
2188                                const char **filename_ptr,
2189                                const char **functionname_ptr,
2190                                unsigned int *linenumber_ptr,
2191                                unsigned int addr_size,
2192                                void **pinfo)
2193 {
2194   /* Read each compilation unit from the section .debug_info, and check
2195      to see if it contains the address we are searching for.  If yes,
2196      lookup the address, and return the line number info.  If no, go
2197      on to the next compilation unit.
2198
2199      We keep a list of all the previously read compilation units, and
2200      a pointer to the next un-read compilation unit.  Check the
2201      previously read units before reading more.  */
2202   struct dwarf2_debug *stash;
2203
2204   /* What address are we looking for?  */
2205   bfd_vma addr;
2206
2207   struct comp_unit* each;
2208
2209   stash = *pinfo;
2210   addr = offset;
2211   if (section->output_section)
2212     addr += section->output_section->lma + section->output_offset;
2213   else
2214     addr += section->lma;
2215   *filename_ptr = NULL;
2216   *functionname_ptr = NULL;
2217   *linenumber_ptr = 0;
2218
2219   /* The DWARF2 spec says that the initial length field, and the
2220      offset of the abbreviation table, should both be 4-byte values.
2221      However, some compilers do things differently.  */
2222   if (addr_size == 0)
2223     addr_size = 4;
2224   BFD_ASSERT (addr_size == 4 || addr_size == 8);
2225
2226   if (! stash)
2227     {
2228       bfd_size_type total_size;
2229       asection *msec;
2230       bfd_size_type amt = sizeof (struct dwarf2_debug);
2231
2232       stash = bfd_zalloc (abfd, amt);
2233       if (! stash)
2234         return FALSE;
2235
2236       *pinfo = stash;
2237
2238       msec = find_debug_info (abfd, NULL);
2239       if (! msec)
2240         /* No dwarf2 info.  Note that at this point the stash
2241            has been allocated, but contains zeros, this lets
2242            future calls to this function fail quicker.  */
2243          return FALSE;
2244
2245       /* There can be more than one DWARF2 info section in a BFD these days.
2246          Read them all in and produce one large stash.  We do this in two
2247          passes - in the first pass we just accumulate the section sizes.
2248          In the second pass we read in the section's contents.  The allows
2249          us to avoid reallocing the data as we add sections to the stash.  */
2250       for (total_size = 0; msec; msec = find_debug_info (abfd, msec))
2251         total_size += msec->size;
2252
2253       stash->info_ptr = bfd_alloc (abfd, total_size);
2254       if (stash->info_ptr == NULL)
2255         return FALSE;
2256
2257       stash->info_ptr_end = stash->info_ptr;
2258
2259       for (msec = find_debug_info (abfd, NULL);
2260            msec;
2261            msec = find_debug_info (abfd, msec))
2262         {
2263           bfd_size_type size;
2264           bfd_size_type start;
2265
2266           size = msec->size;
2267           if (size == 0)
2268             continue;
2269
2270           start = stash->info_ptr_end - stash->info_ptr;
2271
2272           if ((bfd_simple_get_relocated_section_contents
2273                (abfd, msec, stash->info_ptr + start, symbols)) == NULL)
2274             continue;
2275
2276           stash->info_ptr_end = stash->info_ptr + start + size;
2277         }
2278
2279       BFD_ASSERT (stash->info_ptr_end == stash->info_ptr + total_size);
2280
2281       stash->sec = find_debug_info (abfd, NULL);
2282       stash->sec_info_ptr = stash->info_ptr;
2283       stash->syms = symbols;
2284     }
2285
2286   /* A null info_ptr indicates that there is no dwarf2 info
2287      (or that an error occured while setting up the stash).  */
2288   if (! stash->info_ptr)
2289     return FALSE;
2290
2291   stash->inliner_chain = NULL;
2292
2293   /* Check the previously read comp. units first.  */
2294   for (each = stash->all_comp_units; each; each = each->next_unit)
2295     if (comp_unit_contains_address (each, addr))
2296       return comp_unit_find_nearest_line (each, addr, filename_ptr,
2297                                           functionname_ptr, linenumber_ptr,
2298                                           stash);
2299
2300   /* Read each remaining comp. units checking each as they are read.  */
2301   while (stash->info_ptr < stash->info_ptr_end)
2302     {
2303       bfd_vma length;
2304       bfd_boolean found;
2305       unsigned int offset_size = addr_size;
2306       bfd_byte *info_ptr_unit = stash->info_ptr;
2307
2308       length = read_4_bytes (abfd, stash->info_ptr);
2309       /* A 0xffffff length is the DWARF3 way of indicating we use
2310          64-bit offsets, instead of 32-bit offsets.  */
2311       if (length == 0xffffffff)
2312         {
2313           offset_size = 8;
2314           length = read_8_bytes (abfd, stash->info_ptr + 4);
2315           stash->info_ptr += 12;
2316         }
2317       /* A zero length is the IRIX way of indicating 64-bit offsets,
2318          mostly because the 64-bit length will generally fit in 32
2319          bits, and the endianness helps.  */
2320       else if (length == 0)
2321         {
2322           offset_size = 8;
2323           length = read_4_bytes (abfd, stash->info_ptr + 4);
2324           stash->info_ptr += 8;
2325         }
2326       /* In the absence of the hints above, we assume addr_size-sized
2327          offsets, for backward-compatibility with pre-DWARF3 64-bit
2328          platforms.  */
2329       else if (addr_size == 8)
2330         {
2331           length = read_8_bytes (abfd, stash->info_ptr);
2332           stash->info_ptr += 8;
2333         }
2334       else
2335         stash->info_ptr += 4;
2336
2337       if (length > 0)
2338         {
2339           each = parse_comp_unit (abfd, stash, length, info_ptr_unit,
2340                                   offset_size);
2341           stash->info_ptr += length;
2342
2343           if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr)
2344               == stash->sec->size)
2345             {
2346               stash->sec = find_debug_info (abfd, stash->sec);
2347               stash->sec_info_ptr = stash->info_ptr;
2348             }
2349
2350           if (each)
2351             {
2352               each->next_unit = stash->all_comp_units;
2353               stash->all_comp_units = each;
2354
2355               /* DW_AT_low_pc and DW_AT_high_pc are optional for
2356                  compilation units.  If we don't have them (i.e.,
2357                  unit->high == 0), we need to consult the line info
2358                  table to see if a compilation unit contains the given
2359                  address.  */
2360               if (each->arange.high > 0)
2361                 {
2362                   if (comp_unit_contains_address (each, addr))
2363                     return comp_unit_find_nearest_line (each, addr,
2364                                                         filename_ptr,
2365                                                         functionname_ptr,
2366                                                         linenumber_ptr,
2367                                                         stash);
2368                 }
2369               else
2370                 {
2371                   found = comp_unit_find_nearest_line (each, addr,
2372                                                        filename_ptr,
2373                                                        functionname_ptr,
2374                                                        linenumber_ptr,
2375                                                        stash);
2376                   if (found)
2377                     return TRUE;
2378                 }
2379             }
2380         }
2381     }
2382
2383   return FALSE;
2384 }
2385
2386 /* The DWARF2 version of find_line.  Return TRUE if the line is found
2387    without error.  */
2388
2389 bfd_boolean
2390 _bfd_dwarf2_find_line (bfd *abfd,
2391                        asymbol **symbols,
2392                        asymbol *symbol,
2393                        const char **filename_ptr,
2394                        unsigned int *linenumber_ptr,
2395                        unsigned int addr_size,
2396                        void **pinfo)
2397 {
2398   /* Read each compilation unit from the section .debug_info, and check
2399      to see if it contains the address we are searching for.  If yes,
2400      lookup the address, and return the line number info.  If no, go
2401      on to the next compilation unit.
2402
2403      We keep a list of all the previously read compilation units, and
2404      a pointer to the next un-read compilation unit.  Check the
2405      previously read units before reading more.  */
2406   struct dwarf2_debug *stash;
2407
2408   /* What address are we looking for?  */
2409   bfd_vma addr;
2410
2411   struct comp_unit* each;
2412
2413   asection *section;
2414
2415   bfd_boolean found;
2416
2417   section = bfd_get_section (symbol);
2418
2419   addr = symbol->value;
2420   if (section->output_section)
2421     addr += section->output_section->lma + section->output_offset;
2422   else
2423     addr += section->lma;
2424
2425   *filename_ptr = NULL;
2426   stash = *pinfo;
2427   *filename_ptr = NULL;
2428   *linenumber_ptr = 0;
2429
2430   if (! stash)
2431     {
2432       bfd_size_type total_size;
2433       asection *msec;
2434       bfd_size_type amt = sizeof (struct dwarf2_debug);
2435
2436       stash = bfd_zalloc (abfd, amt);
2437       if (! stash)
2438         return FALSE;
2439
2440       *pinfo = stash;
2441
2442       msec = find_debug_info (abfd, NULL);
2443       if (! msec)
2444         /* No dwarf2 info.  Note that at this point the stash
2445            has been allocated, but contains zeros, this lets
2446            future calls to this function fail quicker.  */
2447          return FALSE;
2448
2449       /* There can be more than one DWARF2 info section in a BFD these days.
2450          Read them all in and produce one large stash.  We do this in two
2451          passes - in the first pass we just accumulate the section sizes.
2452          In the second pass we read in the section's contents.  The allows
2453          us to avoid reallocing the data as we add sections to the stash.  */
2454       for (total_size = 0; msec; msec = find_debug_info (abfd, msec))
2455         total_size += msec->size;
2456
2457       stash->info_ptr = bfd_alloc (abfd, total_size);
2458       if (stash->info_ptr == NULL)
2459         return FALSE;
2460
2461       stash->info_ptr_end = stash->info_ptr;
2462
2463       for (msec = find_debug_info (abfd, NULL);
2464            msec;
2465            msec = find_debug_info (abfd, msec))
2466         {
2467           bfd_size_type size;
2468           bfd_size_type start;
2469
2470           size = msec->size;
2471           if (size == 0)
2472             continue;
2473
2474           start = stash->info_ptr_end - stash->info_ptr;
2475
2476           if ((bfd_simple_get_relocated_section_contents
2477                (abfd, msec, stash->info_ptr + start, symbols)) == NULL)
2478             continue;
2479
2480           stash->info_ptr_end = stash->info_ptr + start + size;
2481         }
2482
2483       BFD_ASSERT (stash->info_ptr_end == stash->info_ptr + total_size);
2484
2485       stash->sec = find_debug_info (abfd, NULL);
2486       stash->sec_info_ptr = stash->info_ptr;
2487       stash->syms = symbols;
2488     }
2489
2490   /* A null info_ptr indicates that there is no dwarf2 info
2491      (or that an error occured while setting up the stash).  */
2492   if (! stash->info_ptr)
2493     return FALSE;
2494
2495   stash->inliner_chain = NULL;
2496
2497   /* Check the previously read comp. units first.  */
2498   for (each = stash->all_comp_units; each; each = each->next_unit)
2499     if ((symbol->flags & BSF_FUNCTION) == 0
2500         || comp_unit_contains_address (each, addr))
2501       {
2502         found = comp_unit_find_line (each, symbol, addr, filename_ptr,
2503                                      linenumber_ptr, stash);
2504         if (found)
2505           return found;
2506       }
2507
2508   /* The DWARF2 spec says that the initial length field, and the
2509      offset of the abbreviation table, should both be 4-byte values.
2510      However, some compilers do things differently.  */
2511   if (addr_size == 0)
2512     addr_size = 4;
2513   BFD_ASSERT (addr_size == 4 || addr_size == 8);
2514
2515   /* Read each remaining comp. units checking each as they are read.  */
2516   while (stash->info_ptr < stash->info_ptr_end)
2517     {
2518       bfd_vma length;
2519       unsigned int offset_size = addr_size;
2520       bfd_byte *info_ptr_unit = stash->info_ptr;
2521
2522       length = read_4_bytes (abfd, stash->info_ptr);
2523       /* A 0xffffff length is the DWARF3 way of indicating we use
2524          64-bit offsets, instead of 32-bit offsets.  */
2525       if (length == 0xffffffff)
2526         {
2527           offset_size = 8;
2528           length = read_8_bytes (abfd, stash->info_ptr + 4);
2529           stash->info_ptr += 12;
2530         }
2531       /* A zero length is the IRIX way of indicating 64-bit offsets,
2532          mostly because the 64-bit length will generally fit in 32
2533          bits, and the endianness helps.  */
2534       else if (length == 0)
2535         {
2536           offset_size = 8;
2537           length = read_4_bytes (abfd, stash->info_ptr + 4);
2538           stash->info_ptr += 8;
2539         }
2540       /* In the absence of the hints above, we assume addr_size-sized
2541          offsets, for backward-compatibility with pre-DWARF3 64-bit
2542          platforms.  */
2543       else if (addr_size == 8)
2544         {
2545           length = read_8_bytes (abfd, stash->info_ptr);
2546           stash->info_ptr += 8;
2547         }
2548       else
2549         stash->info_ptr += 4;
2550
2551       if (length > 0)
2552         {
2553           each = parse_comp_unit (abfd, stash, length, info_ptr_unit,
2554                                   offset_size);
2555           stash->info_ptr += length;
2556
2557           if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr)
2558               == stash->sec->size)
2559             {
2560               stash->sec = find_debug_info (abfd, stash->sec);
2561               stash->sec_info_ptr = stash->info_ptr;
2562             }
2563
2564           if (each)
2565             {
2566               each->next_unit = stash->all_comp_units;
2567               stash->all_comp_units = each;
2568
2569               /* DW_AT_low_pc and DW_AT_high_pc are optional for
2570                  compilation units.  If we don't have them (i.e.,
2571                  unit->high == 0), we need to consult the line info
2572                  table to see if a compilation unit contains the given
2573                  address.  */
2574               found = (((symbol->flags & BSF_FUNCTION) == 0
2575                         || each->arange.high <= 0
2576                         || comp_unit_contains_address (each, addr))
2577                        && comp_unit_find_line (each, symbol, addr,
2578                                                filename_ptr,
2579                                                linenumber_ptr,
2580                                                stash));
2581               if (found)
2582                 return TRUE;
2583             }
2584         }
2585     }
2586
2587   return FALSE;
2588 }
2589
2590 bfd_boolean
2591 _bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
2592                                const char **filename_ptr,
2593                                const char **functionname_ptr,
2594                                unsigned int *linenumber_ptr,
2595                                void **pinfo)
2596 {
2597   struct dwarf2_debug *stash;
2598
2599   stash = *pinfo;
2600   if (stash)
2601     {
2602       struct funcinfo *func = stash->inliner_chain;
2603       if (func && func->caller_func)
2604         {
2605           *filename_ptr = func->caller_file;
2606           *functionname_ptr = func->caller_func->name;
2607           *linenumber_ptr = func->caller_line;
2608           stash->inliner_chain = func->caller_func;
2609           return (TRUE);
2610         }
2611     }
2612
2613   return (FALSE);
2614 }
2615
2616 void
2617 _bfd_dwarf2_cleanup_debug_info (bfd *abfd)
2618 {
2619   struct comp_unit *each;
2620   struct dwarf2_debug *stash;
2621
2622   if (abfd == NULL || elf_tdata (abfd) == NULL)
2623     return;
2624
2625   stash = elf_tdata (abfd)->dwarf2_find_line_info;
2626
2627   if (stash == NULL)
2628     return;
2629
2630   for (each = stash->all_comp_units; each; each = each->next_unit)
2631     {
2632       struct abbrev_info **abbrevs = each->abbrevs;
2633       size_t i;
2634
2635       for (i = 0; i < ABBREV_HASH_SIZE; i++)
2636         {
2637           struct abbrev_info *abbrev = abbrevs[i];
2638
2639           while (abbrev)
2640             {
2641               free (abbrev->attrs);
2642               abbrev = abbrev->next;
2643             }
2644         }
2645
2646       if (each->line_table)
2647         {
2648           free (each->line_table->dirs);
2649           free (each->line_table->files);
2650         }
2651     }
2652
2653   free (stash->dwarf_abbrev_buffer);
2654   free (stash->dwarf_line_buffer);
2655   free (stash->dwarf_ranges_buffer);
2656 }