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