Approved by nickc@redhat.com
[platform/upstream/binutils.git] / bfd / dwarf2.c
1 /* DWARF 2 support.
2    Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3    2004, 2005 Free Software Foundation, Inc.
4
5    Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
6    (gavin@cygnus.com).
7
8    From the dwarf2read.c header:
9    Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
10    Inc.  with support from Florida State University (under contract
11    with the Ada Joint Program Office), and Silicon Graphics, Inc.
12    Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
13    based on Fred Fish's (Cygnus Support) implementation of DWARF 1
14    support in dwarfread.c
15
16    This file is part of BFD.
17
18    This program is free software; you can redistribute it and/or modify
19    it under the terms of the GNU General Public License as published by
20    the Free Software Foundation; either version 2 of the License, or (at
21    your option) any later version.
22
23    This program is distributed in the hope that it will be useful, but
24    WITHOUT ANY WARRANTY; without even the implied warranty of
25    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
26    General Public License for more details.
27
28    You should have received a copy of the GNU General Public License
29    along with this program; if not, write to the Free Software
30    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
31
32 #include "bfd.h"
33 #include "sysdep.h"
34 #include "libiberty.h"
35 #include "libbfd.h"
36 #include "elf-bfd.h"
37 #include "elf/dwarf2.h"
38
39 /* The data in the .debug_line statement prologue looks like this.  */
40
41 struct line_head
42 {
43   bfd_vma total_length;
44   unsigned short version;
45   bfd_vma prologue_length;
46   unsigned char minimum_instruction_length;
47   unsigned char default_is_stmt;
48   int line_base;
49   unsigned char line_range;
50   unsigned char opcode_base;
51   unsigned char *standard_opcode_lengths;
52 };
53
54 /* Attributes have a name and a value.  */
55
56 struct attribute
57 {
58   enum dwarf_attribute name;
59   enum dwarf_form form;
60   union
61   {
62     char *str;
63     struct dwarf_block *blk;
64     bfd_uint64_t val;
65     bfd_int64_t sval;
66   }
67   u;
68 };
69
70 /* Blocks are a bunch of untyped bytes.  */
71 struct dwarf_block
72 {
73   unsigned int size;
74   bfd_byte *data;
75 };
76
77 struct dwarf2_debug
78 {
79   /* A list of all previously read comp_units.  */
80   struct comp_unit *all_comp_units;
81
82   /* The next unread compilation unit within the .debug_info section.
83      Zero indicates that the .debug_info section has not been loaded
84      into a buffer yet.  */
85   bfd_byte *info_ptr;
86
87   /* Pointer to the end of the .debug_info section memory buffer.  */
88   bfd_byte *info_ptr_end;
89
90   /* Pointer to the section and address of the beginning of the
91      section.  */
92   asection *sec;
93   bfd_byte *sec_info_ptr;
94
95   /* Pointer to the symbol table.  */
96   asymbol **syms;
97
98   /* Pointer to the .debug_abbrev section loaded into memory.  */
99   bfd_byte *dwarf_abbrev_buffer;
100
101   /* Length of the loaded .debug_abbrev section.  */
102   unsigned long dwarf_abbrev_size;
103
104   /* Buffer for decode_line_info.  */
105   bfd_byte *dwarf_line_buffer;
106
107   /* Length of the loaded .debug_line section.  */
108   unsigned long dwarf_line_size;
109
110   /* Pointer to the .debug_str section loaded into memory.  */
111   bfd_byte *dwarf_str_buffer;
112
113   /* Length of the loaded .debug_str section.  */
114   unsigned long dwarf_str_size;
115 };
116
117 struct arange
118 {
119   struct arange *next;
120   bfd_vma low;
121   bfd_vma high;
122 };
123
124 /* A minimal decoding of DWARF2 compilation units.  We only decode
125    what's needed to get to the line number information.  */
126
127 struct comp_unit
128 {
129   /* Chain the previously read compilation units.  */
130   struct comp_unit *next_unit;
131
132   /* Keep the bdf convenient (for memory allocation).  */
133   bfd *abfd;
134
135   /* The lowest and highest addresses contained in this compilation
136      unit as specified in the compilation unit header.  */
137   struct arange arange;
138
139   /* The DW_AT_name attribute (for error messages).  */
140   char *name;
141
142   /* The abbrev hash table.  */
143   struct abbrev_info **abbrevs;
144
145   /* Note that an error was found by comp_unit_find_nearest_line.  */
146   int error;
147
148   /* The DW_AT_comp_dir attribute.  */
149   char *comp_dir;
150
151   /* TRUE if there is a line number table associated with this comp. unit.  */
152   int stmtlist;
153
154   /* Pointer to the current comp_unit so that we can find a given entry
155      by its reference.  */
156   bfd_byte *info_ptr_unit;
157
158   /* The offset into .debug_line of the line number table.  */
159   unsigned long line_offset;
160
161   /* Pointer to the first child die for the comp unit.  */
162   bfd_byte *first_child_die_ptr;
163
164   /* The end of the comp unit.  */
165   bfd_byte *end_ptr;
166
167   /* The decoded line number, NULL if not yet decoded.  */
168   struct line_info_table *line_table;
169
170   /* A list of the functions found in this comp. unit.  */
171   struct funcinfo *function_table;
172
173   /* Pointer to dwarf2_debug structure.  */
174   struct dwarf2_debug *stash;
175
176   /* Address size for this unit - from unit header.  */
177   unsigned char addr_size;
178
179   /* Offset size for this unit - from unit header.  */
180   unsigned char offset_size;
181 };
182
183 /* This data structure holds the information of an abbrev.  */
184 struct abbrev_info
185 {
186   unsigned int number;          /* Number identifying abbrev.  */
187   enum dwarf_tag tag;           /* DWARF tag.  */
188   int has_children;             /* Boolean.  */
189   unsigned int num_attrs;       /* Number of attributes.  */
190   struct attr_abbrev *attrs;    /* An array of attribute descriptions.  */
191   struct abbrev_info *next;     /* Next in chain.  */
192 };
193
194 struct attr_abbrev
195 {
196   enum dwarf_attribute name;
197   enum dwarf_form form;
198 };
199
200 #ifndef ABBREV_HASH_SIZE
201 #define ABBREV_HASH_SIZE 121
202 #endif
203 #ifndef ATTR_ALLOC_CHUNK
204 #define ATTR_ALLOC_CHUNK 4
205 #endif
206
207 /* VERBATIM
208    The following function up to the END VERBATIM mark are
209    copied directly from dwarf2read.c.  */
210
211 /* Read dwarf information from a buffer.  */
212
213 static unsigned int
214 read_1_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf)
215 {
216   return bfd_get_8 (abfd, buf);
217 }
218
219 static int
220 read_1_signed_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf)
221 {
222   return bfd_get_signed_8 (abfd, buf);
223 }
224
225 static unsigned int
226 read_2_bytes (bfd *abfd, bfd_byte *buf)
227 {
228   return bfd_get_16 (abfd, buf);
229 }
230
231 static unsigned int
232 read_4_bytes (bfd *abfd, bfd_byte *buf)
233 {
234   return bfd_get_32 (abfd, buf);
235 }
236
237 static bfd_uint64_t
238 read_8_bytes (bfd *abfd, bfd_byte *buf)
239 {
240   return bfd_get_64 (abfd, buf);
241 }
242
243 static bfd_byte *
244 read_n_bytes (bfd *abfd ATTRIBUTE_UNUSED,
245               bfd_byte *buf,
246               unsigned int size ATTRIBUTE_UNUSED)
247 {
248   /* If the size of a host char is 8 bits, we can return a pointer
249      to the buffer, otherwise we have to copy the data to a buffer
250      allocated on the temporary obstack.  */
251   return buf;
252 }
253
254 static char *
255 read_string (bfd *abfd ATTRIBUTE_UNUSED,
256              bfd_byte *buf,
257              unsigned int *bytes_read_ptr)
258 {
259   /* Return a pointer to the embedded string.  */
260   char *str = (char *) buf;
261   if (*str == '\0')
262     {
263       *bytes_read_ptr = 1;
264       return NULL;
265     }
266
267   *bytes_read_ptr = strlen (str) + 1;
268   return str;
269 }
270
271 static char *
272 read_indirect_string (struct comp_unit* unit,
273                       bfd_byte *buf,
274                       unsigned int *bytes_read_ptr)
275 {
276   bfd_uint64_t offset;
277   struct dwarf2_debug *stash = unit->stash;
278   char *str;
279
280   if (unit->offset_size == 4)
281     offset = read_4_bytes (unit->abfd, buf);
282   else
283     offset = read_8_bytes (unit->abfd, buf);
284   *bytes_read_ptr = unit->offset_size;
285
286   if (! stash->dwarf_str_buffer)
287     {
288       asection *msec;
289       bfd *abfd = unit->abfd;
290       bfd_size_type sz;
291
292       msec = bfd_get_section_by_name (abfd, ".debug_str");
293       if (! msec)
294         {
295           (*_bfd_error_handler)
296             (_("Dwarf Error: Can't find .debug_str section."));
297           bfd_set_error (bfd_error_bad_value);
298           return NULL;
299         }
300
301       sz = msec->rawsize ? msec->rawsize : msec->size;
302       stash->dwarf_str_size = sz;
303       stash->dwarf_str_buffer = bfd_alloc (abfd, sz);
304       if (! stash->dwarf_str_buffer)
305         return NULL;
306
307       if (! bfd_get_section_contents (abfd, msec, stash->dwarf_str_buffer,
308                                       0, sz))
309         return NULL;
310     }
311
312   if (offset >= stash->dwarf_str_size)
313     {
314       (*_bfd_error_handler) (_("Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)."),
315                              (unsigned long) offset, stash->dwarf_str_size);
316       bfd_set_error (bfd_error_bad_value);
317       return NULL;
318     }
319
320   str = (char *) stash->dwarf_str_buffer + offset;
321   if (*str == '\0')
322     return NULL;
323   return str;
324 }
325
326 /* END VERBATIM */
327
328 static bfd_uint64_t
329 read_address (struct comp_unit *unit, bfd_byte *buf)
330 {
331   switch (unit->addr_size)
332     {
333     case 8:
334       return bfd_get_64 (unit->abfd, buf);
335     case 4:
336       return bfd_get_32 (unit->abfd, buf);
337     case 2:
338       return bfd_get_16 (unit->abfd, buf);
339     default:
340       abort ();
341     }
342 }
343
344 /* Lookup an abbrev_info structure in the abbrev hash table.  */
345
346 static struct abbrev_info *
347 lookup_abbrev (unsigned int number, struct abbrev_info **abbrevs)
348 {
349   unsigned int hash_number;
350   struct abbrev_info *abbrev;
351
352   hash_number = number % ABBREV_HASH_SIZE;
353   abbrev = abbrevs[hash_number];
354
355   while (abbrev)
356     {
357       if (abbrev->number == number)
358         return abbrev;
359       else
360         abbrev = abbrev->next;
361     }
362
363   return NULL;
364 }
365
366 /* In DWARF version 2, the description of the debugging information is
367    stored in a separate .debug_abbrev section.  Before we read any
368    dies from a section we read in all abbreviations and install them
369    in a hash table.  */
370
371 static struct abbrev_info**
372 read_abbrevs (bfd *abfd, bfd_uint64_t offset, struct dwarf2_debug *stash)
373 {
374   struct abbrev_info **abbrevs;
375   bfd_byte *abbrev_ptr;
376   struct abbrev_info *cur_abbrev;
377   unsigned int abbrev_number, bytes_read, abbrev_name;
378   unsigned int abbrev_form, hash_number;
379   bfd_size_type amt;
380
381   if (! stash->dwarf_abbrev_buffer)
382     {
383       asection *msec;
384
385       msec = bfd_get_section_by_name (abfd, ".debug_abbrev");
386       if (! msec)
387         {
388           (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_abbrev section."));
389           bfd_set_error (bfd_error_bad_value);
390           return 0;
391         }
392
393       stash->dwarf_abbrev_size = msec->size;
394       stash->dwarf_abbrev_buffer
395         = bfd_simple_get_relocated_section_contents (abfd, msec, NULL,
396                                                      stash->syms);
397       if (! stash->dwarf_abbrev_buffer)
398           return 0;
399     }
400
401   if (offset >= stash->dwarf_abbrev_size)
402     {
403       (*_bfd_error_handler) (_("Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)."),
404                              (unsigned long) offset, stash->dwarf_abbrev_size);
405       bfd_set_error (bfd_error_bad_value);
406       return 0;
407     }
408
409   amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE;
410   abbrevs = bfd_zalloc (abfd, amt);
411
412   abbrev_ptr = stash->dwarf_abbrev_buffer + offset;
413   abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
414   abbrev_ptr += bytes_read;
415
416   /* Loop until we reach an abbrev number of 0.  */
417   while (abbrev_number)
418     {
419       amt = sizeof (struct abbrev_info);
420       cur_abbrev = bfd_zalloc (abfd, amt);
421
422       /* Read in abbrev header.  */
423       cur_abbrev->number = abbrev_number;
424       cur_abbrev->tag = (enum dwarf_tag)
425         read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
426       abbrev_ptr += bytes_read;
427       cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
428       abbrev_ptr += 1;
429
430       /* Now read in declarations.  */
431       abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
432       abbrev_ptr += bytes_read;
433       abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
434       abbrev_ptr += bytes_read;
435
436       while (abbrev_name)
437         {
438           if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
439             {
440               amt = cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK;
441               amt *= sizeof (struct attr_abbrev);
442               cur_abbrev->attrs = bfd_realloc (cur_abbrev->attrs, amt);
443               if (! cur_abbrev->attrs)
444                 return 0;
445             }
446
447           cur_abbrev->attrs[cur_abbrev->num_attrs].name
448             = (enum dwarf_attribute) abbrev_name;
449           cur_abbrev->attrs[cur_abbrev->num_attrs++].form
450             = (enum dwarf_form) abbrev_form;
451           abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
452           abbrev_ptr += bytes_read;
453           abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
454           abbrev_ptr += bytes_read;
455         }
456
457       hash_number = abbrev_number % ABBREV_HASH_SIZE;
458       cur_abbrev->next = abbrevs[hash_number];
459       abbrevs[hash_number] = cur_abbrev;
460
461       /* Get next abbreviation.
462          Under Irix6 the abbreviations for a compilation unit are not
463          always properly terminated with an abbrev number of 0.
464          Exit loop if we encounter an abbreviation which we have
465          already read (which means we are about to read the abbreviations
466          for the next compile unit) or if the end of the abbreviation
467          table is reached.  */
468       if ((unsigned int) (abbrev_ptr - stash->dwarf_abbrev_buffer)
469             >= stash->dwarf_abbrev_size)
470         break;
471       abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
472       abbrev_ptr += bytes_read;
473       if (lookup_abbrev (abbrev_number,abbrevs) != NULL)
474         break;
475     }
476
477   return abbrevs;
478 }
479
480 /* Read an attribute value described by an attribute form.  */
481
482 static bfd_byte *
483 read_attribute_value (struct attribute *attr,
484                       unsigned form,
485                       struct comp_unit *unit,
486                       bfd_byte *info_ptr)
487 {
488   bfd *abfd = unit->abfd;
489   unsigned int bytes_read;
490   struct dwarf_block *blk;
491   bfd_size_type amt;
492
493   attr->form = (enum dwarf_form) form;
494
495   switch (form)
496     {
497     case DW_FORM_addr:
498       /* FIXME: DWARF3 draft says DW_FORM_ref_addr is offset_size.  */
499     case DW_FORM_ref_addr:
500       attr->u.val = read_address (unit, info_ptr);
501       info_ptr += unit->addr_size;
502       break;
503     case DW_FORM_block2:
504       amt = sizeof (struct dwarf_block);
505       blk = bfd_alloc (abfd, amt);
506       blk->size = read_2_bytes (abfd, info_ptr);
507       info_ptr += 2;
508       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
509       info_ptr += blk->size;
510       attr->u.blk = blk;
511       break;
512     case DW_FORM_block4:
513       amt = sizeof (struct dwarf_block);
514       blk = bfd_alloc (abfd, amt);
515       blk->size = read_4_bytes (abfd, info_ptr);
516       info_ptr += 4;
517       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
518       info_ptr += blk->size;
519       attr->u.blk = blk;
520       break;
521     case DW_FORM_data2:
522       attr->u.val = read_2_bytes (abfd, info_ptr);
523       info_ptr += 2;
524       break;
525     case DW_FORM_data4:
526       attr->u.val = read_4_bytes (abfd, info_ptr);
527       info_ptr += 4;
528       break;
529     case DW_FORM_data8:
530       attr->u.val = read_8_bytes (abfd, info_ptr);
531       info_ptr += 8;
532       break;
533     case DW_FORM_string:
534       attr->u.str = read_string (abfd, info_ptr, &bytes_read);
535       info_ptr += bytes_read;
536       break;
537     case DW_FORM_strp:
538       attr->u.str = read_indirect_string (unit, info_ptr, &bytes_read);
539       info_ptr += bytes_read;
540       break;
541     case DW_FORM_block:
542       amt = sizeof (struct dwarf_block);
543       blk = bfd_alloc (abfd, amt);
544       blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
545       info_ptr += bytes_read;
546       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
547       info_ptr += blk->size;
548       attr->u.blk = blk;
549       break;
550     case DW_FORM_block1:
551       amt = sizeof (struct dwarf_block);
552       blk = bfd_alloc (abfd, amt);
553       blk->size = read_1_byte (abfd, info_ptr);
554       info_ptr += 1;
555       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
556       info_ptr += blk->size;
557       attr->u.blk = blk;
558       break;
559     case DW_FORM_data1:
560       attr->u.val = read_1_byte (abfd, info_ptr);
561       info_ptr += 1;
562       break;
563     case DW_FORM_flag:
564       attr->u.val = read_1_byte (abfd, info_ptr);
565       info_ptr += 1;
566       break;
567     case DW_FORM_sdata:
568       attr->u.sval = read_signed_leb128 (abfd, info_ptr, &bytes_read);
569       info_ptr += bytes_read;
570       break;
571     case DW_FORM_udata:
572       attr->u.val = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
573       info_ptr += bytes_read;
574       break;
575     case DW_FORM_ref1:
576       attr->u.val = read_1_byte (abfd, info_ptr);
577       info_ptr += 1;
578       break;
579     case DW_FORM_ref2:
580       attr->u.val = read_2_bytes (abfd, info_ptr);
581       info_ptr += 2;
582       break;
583     case DW_FORM_ref4:
584       attr->u.val = read_4_bytes (abfd, info_ptr);
585       info_ptr += 4;
586       break;
587     case DW_FORM_ref8:
588       attr->u.val = read_8_bytes (abfd, info_ptr);
589       info_ptr += 8;
590       break;
591     case DW_FORM_ref_udata:
592       attr->u.val = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
593       info_ptr += bytes_read;
594       break;
595     case DW_FORM_indirect:
596       form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
597       info_ptr += bytes_read;
598       info_ptr = read_attribute_value (attr, form, unit, info_ptr);
599       break;
600     default:
601       (*_bfd_error_handler) (_("Dwarf Error: Invalid or unhandled FORM value: %u."),
602                              form);
603       bfd_set_error (bfd_error_bad_value);
604     }
605   return info_ptr;
606 }
607
608 /* Read an attribute described by an abbreviated attribute.  */
609
610 static bfd_byte *
611 read_attribute (struct attribute *attr,
612                 struct attr_abbrev *abbrev,
613                 struct comp_unit *unit,
614                 bfd_byte *info_ptr)
615 {
616   attr->name = abbrev->name;
617   info_ptr = read_attribute_value (attr, abbrev->form, unit, info_ptr);
618   return info_ptr;
619 }
620
621 /* Source line information table routines.  */
622
623 #define FILE_ALLOC_CHUNK 5
624 #define DIR_ALLOC_CHUNK 5
625
626 struct line_info
627 {
628   struct line_info* prev_line;
629   bfd_vma address;
630   char *filename;
631   unsigned int line;
632   unsigned int column;
633   int end_sequence;             /* End of (sequential) code sequence.  */
634 };
635
636 struct fileinfo
637 {
638   char *name;
639   unsigned int dir;
640   unsigned int time;
641   unsigned int size;
642 };
643
644 struct line_info_table
645 {
646   bfd* abfd;
647   unsigned int num_files;
648   unsigned int num_dirs;
649   char *comp_dir;
650   char **dirs;
651   struct fileinfo* files;
652   struct line_info* last_line;  /* largest VMA */
653   struct line_info* lcl_head;   /* local head; used in 'add_line_info' */
654 };
655
656 struct funcinfo
657 {
658   struct funcinfo *prev_func;
659   char *name;
660   bfd_vma low;
661   bfd_vma high;
662 };
663
664 /* Adds a new entry to the line_info list in the line_info_table, ensuring
665    that the list is sorted.  Note that the line_info list is sorted from
666    highest to lowest VMA (with possible duplicates); that is,
667    line_info->prev_line always accesses an equal or smaller VMA.  */
668
669 static void
670 add_line_info (struct line_info_table *table,
671                bfd_vma address,
672                char *filename,
673                unsigned int line,
674                unsigned int column,
675                int end_sequence)
676 {
677   bfd_size_type amt = sizeof (struct line_info);
678   struct line_info* info = bfd_alloc (table->abfd, amt);
679
680   /* Find the correct location for 'info'.  Normally we will receive
681      new line_info data 1) in order and 2) with increasing VMAs.
682      However some compilers break the rules (cf. decode_line_info) and
683      so we include some heuristics for quickly finding the correct
684      location for 'info'. In particular, these heuristics optimize for
685      the common case in which the VMA sequence that we receive is a
686      list of locally sorted VMAs such as
687        p...z a...j  (where a < j < p < z)
688
689      Note: table->lcl_head is used to head an *actual* or *possible*
690      sequence within the list (such as a...j) that is not directly
691      headed by table->last_line
692
693      Note: we may receive duplicate entries from 'decode_line_info'.  */
694
695   while (1)
696     if (!table->last_line
697         || address >= table->last_line->address)
698       {
699         /* Normal case: add 'info' to the beginning of the list */
700         info->prev_line = table->last_line;
701         table->last_line = info;
702
703         /* lcl_head: initialize to head a *possible* sequence at the end.  */
704         if (!table->lcl_head)
705           table->lcl_head = info;
706         break;
707       }
708     else if (!table->lcl_head->prev_line
709              && table->lcl_head->address > address)
710       {
711         /* Abnormal but easy: lcl_head is 1) at the *end* of the line
712            list and 2) the head of 'info'.  */
713         info->prev_line = NULL;
714         table->lcl_head->prev_line = info;
715         break;
716       }
717     else if (table->lcl_head->prev_line
718              && table->lcl_head->address > address
719              && address >= table->lcl_head->prev_line->address)
720       {
721         /* Abnormal but easy: lcl_head is 1) in the *middle* of the line
722            list and 2) the head of 'info'.  */
723         info->prev_line = table->lcl_head->prev_line;
724         table->lcl_head->prev_line = info;
725         break;
726       }
727     else
728       {
729         /* Abnormal and hard: Neither 'last_line' nor 'lcl_head' are valid
730            heads for 'info'.  Reset 'lcl_head' and repeat.  */
731         struct line_info* li2 = table->last_line; /* always non-NULL */
732         struct line_info* li1 = li2->prev_line;
733
734         while (li1)
735           {
736             if (li2->address > address && address >= li1->address)
737               break;
738
739             li2 = li1; /* always non-NULL */
740             li1 = li1->prev_line;
741           }
742         table->lcl_head = li2;
743       }
744
745   /* Set member data of 'info'.  */
746   info->address = address;
747   info->line = line;
748   info->column = column;
749   info->end_sequence = end_sequence;
750
751   if (filename && filename[0])
752     {
753       info->filename = bfd_alloc (table->abfd, strlen (filename) + 1);
754       if (info->filename)
755         strcpy (info->filename, filename);
756     }
757   else
758     info->filename = NULL;
759 }
760
761 /* Extract a fully qualified filename from a line info table.
762    The returned string has been malloc'ed and it is the caller's
763    responsibility to free it.  */
764
765 static char *
766 concat_filename (struct line_info_table *table, unsigned int file)
767 {
768   char *filename;
769
770   if (file - 1 >= table->num_files)
771     {
772       (*_bfd_error_handler)
773         (_("Dwarf Error: mangled line number section (bad file number)."));
774       return strdup ("<unknown>");
775     }
776
777   filename = table->files[file - 1].name;
778
779   if (! IS_ABSOLUTE_PATH (filename))
780     {
781       char *dirname = (table->files[file - 1].dir
782                        ? table->dirs[table->files[file - 1].dir - 1]
783                        : table->comp_dir);
784
785       /* Not all tools set DW_AT_comp_dir, so dirname may be unknown.
786          The best we can do is return the filename part.  */
787       if (dirname != NULL)
788         {
789           unsigned int len = strlen (dirname) + strlen (filename) + 2;
790           char * name;
791
792           name = bfd_malloc (len);
793           if (name)
794             sprintf (name, "%s/%s", dirname, filename);
795           return name;
796         }
797     }
798
799   return strdup (filename);
800 }
801
802 static void
803 arange_add (struct comp_unit *unit, bfd_vma low_pc, bfd_vma high_pc)
804 {
805   struct arange *arange;
806
807   /* First see if we can cheaply extend an existing range.  */
808   arange = &unit->arange;
809
810   do
811     {
812       if (low_pc == arange->high)
813         {
814           arange->high = high_pc;
815           return;
816         }
817       if (high_pc == arange->low)
818         {
819           arange->low = low_pc;
820           return;
821         }
822       arange = arange->next;
823     }
824   while (arange);
825
826   if (unit->arange.high == 0)
827     {
828       /* This is the first address range: store it in unit->arange.  */
829       unit->arange.next = 0;
830       unit->arange.low = low_pc;
831       unit->arange.high = high_pc;
832       return;
833     }
834
835   /* Need to allocate a new arange and insert it into the arange list.  */
836   arange = bfd_zalloc (unit->abfd, sizeof (*arange));
837   arange->low = low_pc;
838   arange->high = high_pc;
839
840   arange->next = unit->arange.next;
841   unit->arange.next = arange;
842 }
843
844 /* Decode the line number information for UNIT.  */
845
846 static struct line_info_table*
847 decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
848 {
849   bfd *abfd = unit->abfd;
850   struct line_info_table* table;
851   bfd_byte *line_ptr;
852   bfd_byte *line_end;
853   struct line_head lh;
854   unsigned int i, bytes_read, offset_size;
855   char *cur_file, *cur_dir;
856   unsigned char op_code, extended_op, adj_opcode;
857   bfd_size_type amt;
858
859   if (! stash->dwarf_line_buffer)
860     {
861       asection *msec;
862
863       msec = bfd_get_section_by_name (abfd, ".debug_line");
864       if (! msec)
865         {
866           (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_line section."));
867           bfd_set_error (bfd_error_bad_value);
868           return 0;
869         }
870
871       stash->dwarf_line_size = msec->size;
872       stash->dwarf_line_buffer
873         = bfd_simple_get_relocated_section_contents (abfd, msec, NULL,
874                                                      stash->syms);
875       if (! stash->dwarf_line_buffer)
876         return 0;
877     }
878
879   /* It is possible to get a bad value for the line_offset.  Validate
880      it here so that we won't get a segfault below.  */
881   if (unit->line_offset >= stash->dwarf_line_size)
882     {
883       (*_bfd_error_handler) (_("Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)."),
884                              unit->line_offset, stash->dwarf_line_size);
885       bfd_set_error (bfd_error_bad_value);
886       return 0;
887     }
888
889   amt = sizeof (struct line_info_table);
890   table = bfd_alloc (abfd, amt);
891   table->abfd = abfd;
892   table->comp_dir = unit->comp_dir;
893
894   table->num_files = 0;
895   table->files = NULL;
896
897   table->num_dirs = 0;
898   table->dirs = NULL;
899
900   table->files = NULL;
901   table->last_line = NULL;
902   table->lcl_head = NULL;
903
904   line_ptr = stash->dwarf_line_buffer + unit->line_offset;
905
906   /* Read in the prologue.  */
907   lh.total_length = read_4_bytes (abfd, line_ptr);
908   line_ptr += 4;
909   offset_size = 4;
910   if (lh.total_length == 0xffffffff)
911     {
912       lh.total_length = read_8_bytes (abfd, line_ptr);
913       line_ptr += 8;
914       offset_size = 8;
915     }
916   else if (lh.total_length == 0 && unit->addr_size == 8)
917     {
918       /* Handle (non-standard) 64-bit DWARF2 formats.  */
919       lh.total_length = read_4_bytes (abfd, line_ptr);
920       line_ptr += 4;
921       offset_size = 8;
922     }
923   line_end = line_ptr + lh.total_length;
924   lh.version = read_2_bytes (abfd, line_ptr);
925   line_ptr += 2;
926   if (offset_size == 4)
927     lh.prologue_length = read_4_bytes (abfd, line_ptr);
928   else
929     lh.prologue_length = read_8_bytes (abfd, line_ptr);
930   line_ptr += offset_size;
931   lh.minimum_instruction_length = read_1_byte (abfd, line_ptr);
932   line_ptr += 1;
933   lh.default_is_stmt = read_1_byte (abfd, line_ptr);
934   line_ptr += 1;
935   lh.line_base = read_1_signed_byte (abfd, line_ptr);
936   line_ptr += 1;
937   lh.line_range = read_1_byte (abfd, line_ptr);
938   line_ptr += 1;
939   lh.opcode_base = read_1_byte (abfd, line_ptr);
940   line_ptr += 1;
941   amt = lh.opcode_base * sizeof (unsigned char);
942   lh.standard_opcode_lengths = bfd_alloc (abfd, amt);
943
944   lh.standard_opcode_lengths[0] = 1;
945
946   for (i = 1; i < lh.opcode_base; ++i)
947     {
948       lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
949       line_ptr += 1;
950     }
951
952   /* Read directory table.  */
953   while ((cur_dir = read_string (abfd, line_ptr, &bytes_read)) != NULL)
954     {
955       line_ptr += bytes_read;
956
957       if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
958         {
959           amt = table->num_dirs + DIR_ALLOC_CHUNK;
960           amt *= sizeof (char *);
961           table->dirs = bfd_realloc (table->dirs, amt);
962           if (! table->dirs)
963             return 0;
964         }
965
966       table->dirs[table->num_dirs++] = cur_dir;
967     }
968
969   line_ptr += bytes_read;
970
971   /* Read file name table.  */
972   while ((cur_file = read_string (abfd, line_ptr, &bytes_read)) != NULL)
973     {
974       line_ptr += bytes_read;
975
976       if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
977         {
978           amt = table->num_files + FILE_ALLOC_CHUNK;
979           amt *= sizeof (struct fileinfo);
980           table->files = bfd_realloc (table->files, amt);
981           if (! table->files)
982             return 0;
983         }
984
985       table->files[table->num_files].name = cur_file;
986       table->files[table->num_files].dir =
987         read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
988       line_ptr += bytes_read;
989       table->files[table->num_files].time =
990         read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
991       line_ptr += bytes_read;
992       table->files[table->num_files].size =
993         read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
994       line_ptr += bytes_read;
995       table->num_files++;
996     }
997
998   line_ptr += bytes_read;
999
1000   /* Read the statement sequences until there's nothing left.  */
1001   while (line_ptr < line_end)
1002     {
1003       /* State machine registers.  */
1004       bfd_vma address = 0;
1005       char * filename = table->num_files ? concat_filename (table, 1) : NULL;
1006       unsigned int line = 1;
1007       unsigned int column = 0;
1008       int is_stmt = lh.default_is_stmt;
1009       int basic_block = 0;
1010       int end_sequence = 0;
1011       /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
1012          compilers generate address sequences that are wildly out of
1013          order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
1014          for ia64-Linux).  Thus, to determine the low and high
1015          address, we must compare on every DW_LNS_copy, etc.  */
1016       bfd_vma low_pc  = 0;
1017       bfd_vma high_pc = 0;
1018
1019       /* Decode the table.  */
1020       while (! end_sequence)
1021         {
1022           op_code = read_1_byte (abfd, line_ptr);
1023           line_ptr += 1;
1024
1025           if (op_code >= lh.opcode_base)
1026             {
1027               /* Special operand.  */
1028               adj_opcode = op_code - lh.opcode_base;
1029               address += (adj_opcode / lh.line_range)
1030                 * lh.minimum_instruction_length;
1031               line += lh.line_base + (adj_opcode % lh.line_range);
1032               /* Append row to matrix using current values.  */
1033               add_line_info (table, address, filename, line, column, 0);
1034               basic_block = 1;
1035               if (low_pc == 0 || address < low_pc)
1036                 low_pc = address;
1037               if (address > high_pc)
1038                 high_pc = address;
1039             }
1040           else switch (op_code)
1041             {
1042             case DW_LNS_extended_op:
1043               /* Ignore length.  */
1044               line_ptr += 1;
1045               extended_op = read_1_byte (abfd, line_ptr);
1046               line_ptr += 1;
1047
1048               switch (extended_op)
1049                 {
1050                 case DW_LNE_end_sequence:
1051                   end_sequence = 1;
1052                   add_line_info (table, address, filename, line, column,
1053                                  end_sequence);
1054                   if (low_pc == 0 || address < low_pc)
1055                     low_pc = address;
1056                   if (address > high_pc)
1057                     high_pc = address;
1058                   arange_add (unit, low_pc, high_pc);
1059                   break;
1060                 case DW_LNE_set_address:
1061                   address = read_address (unit, line_ptr);
1062                   line_ptr += unit->addr_size;
1063                   break;
1064                 case DW_LNE_define_file:
1065                   cur_file = read_string (abfd, line_ptr, &bytes_read);
1066                   line_ptr += bytes_read;
1067                   if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1068                     {
1069                       amt = table->num_files + FILE_ALLOC_CHUNK;
1070                       amt *= sizeof (struct fileinfo);
1071                       table->files = bfd_realloc (table->files, amt);
1072                       if (! table->files)
1073                         return 0;
1074                     }
1075                   table->files[table->num_files].name = cur_file;
1076                   table->files[table->num_files].dir =
1077                     read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1078                   line_ptr += bytes_read;
1079                   table->files[table->num_files].time =
1080                     read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1081                   line_ptr += bytes_read;
1082                   table->files[table->num_files].size =
1083                     read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1084                   line_ptr += bytes_read;
1085                   table->num_files++;
1086                   break;
1087                 default:
1088                   (*_bfd_error_handler) (_("Dwarf Error: mangled line number section."));
1089                   bfd_set_error (bfd_error_bad_value);
1090                   return 0;
1091                 }
1092               break;
1093             case DW_LNS_copy:
1094               add_line_info (table, address, filename, line, column, 0);
1095               basic_block = 0;
1096               if (low_pc == 0 || address < low_pc)
1097                 low_pc = address;
1098               if (address > high_pc)
1099                 high_pc = address;
1100               break;
1101             case DW_LNS_advance_pc:
1102               address += lh.minimum_instruction_length
1103                 * read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1104               line_ptr += bytes_read;
1105               break;
1106             case DW_LNS_advance_line:
1107               line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
1108               line_ptr += bytes_read;
1109               break;
1110             case DW_LNS_set_file:
1111               {
1112                 unsigned int file;
1113
1114                 /* The file and directory tables are 0
1115                    based, the references are 1 based.  */
1116                 file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1117                 line_ptr += bytes_read;
1118                 if (filename)
1119                   free (filename);
1120                 filename = concat_filename (table, file);
1121                 break;
1122               }
1123             case DW_LNS_set_column:
1124               column = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1125               line_ptr += bytes_read;
1126               break;
1127             case DW_LNS_negate_stmt:
1128               is_stmt = (!is_stmt);
1129               break;
1130             case DW_LNS_set_basic_block:
1131               basic_block = 1;
1132               break;
1133             case DW_LNS_const_add_pc:
1134               address += lh.minimum_instruction_length
1135                       * ((255 - lh.opcode_base) / lh.line_range);
1136               break;
1137             case DW_LNS_fixed_advance_pc:
1138               address += read_2_bytes (abfd, line_ptr);
1139               line_ptr += 2;
1140               break;
1141             default:
1142               {
1143                 int i;
1144
1145                 /* Unknown standard opcode, ignore it.  */
1146                 for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
1147                   {
1148                     (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1149                     line_ptr += bytes_read;
1150                   }
1151               }
1152             }
1153         }
1154
1155       if (filename)
1156         free (filename);
1157     }
1158
1159   return table;
1160 }
1161
1162 /* If ADDR is within TABLE set the output parameters and return TRUE,
1163    otherwise return FALSE.  The output parameters, FILENAME_PTR and
1164    LINENUMBER_PTR, are pointers to the objects to be filled in.  */
1165
1166 static bfd_boolean
1167 lookup_address_in_line_info_table (struct line_info_table *table,
1168                                    bfd_vma addr,
1169                                    struct funcinfo *function,
1170                                    const char **filename_ptr,
1171                                    unsigned int *linenumber_ptr)
1172 {
1173   /* Note: table->last_line should be a descendingly sorted list. */
1174   struct line_info* next_line = table->last_line;
1175   struct line_info* each_line = NULL;
1176   *filename_ptr = NULL;
1177
1178   if (!next_line)
1179     return FALSE;
1180
1181   each_line = next_line->prev_line;
1182
1183   /* Check for large addresses */
1184   if (addr > next_line->address)
1185     each_line = NULL; /* ensure we skip over the normal case */
1186
1187   /* Normal case: search the list; save  */
1188   while (each_line && next_line)
1189     {
1190       /* If we have an address match, save this info.  This allows us
1191          to return as good as results as possible for strange debugging
1192          info.  */
1193       bfd_boolean addr_match = FALSE;
1194       if (each_line->address <= addr && addr <= next_line->address)
1195         {
1196           addr_match = TRUE;
1197
1198           /* If this line appears to span functions, and addr is in the
1199              later function, return the first line of that function instead
1200              of the last line of the earlier one.  This check is for GCC
1201              2.95, which emits the first line number for a function late.  */
1202           if (function != NULL
1203               && each_line->address < function->low
1204               && next_line->address > function->low)
1205             {
1206               *filename_ptr = next_line->filename;
1207               *linenumber_ptr = next_line->line;
1208             }
1209           else
1210             {
1211               *filename_ptr = each_line->filename;
1212               *linenumber_ptr = each_line->line;
1213             }
1214         }
1215
1216       if (addr_match && !each_line->end_sequence)
1217         return TRUE; /* we have definitely found what we want */
1218
1219       next_line = each_line;
1220       each_line = each_line->prev_line;
1221     }
1222
1223   /* At this point each_line is NULL but next_line is not.  If we found
1224      a candidate end-of-sequence point in the loop above, we can return
1225      that (compatibility with a bug in the Intel compiler); otherwise,
1226      assuming that we found the containing function for this address in
1227      this compilation unit, return the first line we have a number for
1228      (compatibility with GCC 2.95).  */
1229   if (*filename_ptr == NULL && function != NULL)
1230     {
1231       *filename_ptr = next_line->filename;
1232       *linenumber_ptr = next_line->line;
1233       return TRUE;
1234     }
1235
1236   return FALSE;
1237 }
1238
1239 /* Function table functions.  */
1240
1241 /* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return TRUE.  */
1242
1243 static bfd_boolean
1244 lookup_address_in_function_table (struct funcinfo *table,
1245                                   bfd_vma addr,
1246                                   struct funcinfo **function_ptr,
1247                                   const char **functionname_ptr)
1248 {
1249   struct funcinfo* each_func;
1250
1251   for (each_func = table;
1252        each_func;
1253        each_func = each_func->prev_func)
1254     {
1255       if (addr >= each_func->low && addr < each_func->high)
1256         {
1257           *functionname_ptr = each_func->name;
1258           *function_ptr = each_func;
1259           return TRUE;
1260         }
1261     }
1262
1263   return FALSE;
1264 }
1265
1266 static char *
1267 find_abstract_instance_name (struct comp_unit *unit, bfd_uint64_t die_ref)
1268 {
1269   bfd *abfd = unit->abfd;
1270   bfd_byte *info_ptr;
1271   unsigned int abbrev_number, bytes_read, i;
1272   struct abbrev_info *abbrev;
1273   struct attribute attr;
1274   char *name = 0;
1275
1276   info_ptr = unit->info_ptr_unit + die_ref;
1277   abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1278   info_ptr += bytes_read;
1279
1280   if (abbrev_number)
1281     {
1282       abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
1283       if (! abbrev)
1284         {
1285           (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1286                                  abbrev_number);
1287           bfd_set_error (bfd_error_bad_value);
1288         }
1289       else
1290         {
1291           for (i = 0; i < abbrev->num_attrs && !name; ++i)
1292             {
1293               info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1294               switch (attr.name)
1295                 {
1296                 case DW_AT_name:
1297                   name = attr.u.str;
1298                   break;
1299                 case DW_AT_specification:
1300                   name = find_abstract_instance_name (unit, attr.u.val);
1301                   break;
1302                 default:
1303                   break;
1304                 }
1305             }
1306         }
1307     }
1308   return (name);
1309 }
1310
1311 /* DWARF2 Compilation unit functions.  */
1312
1313 /* Scan over each die in a comp. unit looking for functions to add
1314    to the function table.  */
1315
1316 static bfd_boolean
1317 scan_unit_for_functions (struct comp_unit *unit)
1318 {
1319   bfd *abfd = unit->abfd;
1320   bfd_byte *info_ptr = unit->first_child_die_ptr;
1321   int nesting_level = 1;
1322
1323   while (nesting_level)
1324     {
1325       unsigned int abbrev_number, bytes_read, i;
1326       struct abbrev_info *abbrev;
1327       struct attribute attr;
1328       struct funcinfo *func;
1329
1330       abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1331       info_ptr += bytes_read;
1332
1333       if (! abbrev_number)
1334         {
1335           nesting_level--;
1336           continue;
1337         }
1338
1339       abbrev = lookup_abbrev (abbrev_number,unit->abbrevs);
1340       if (! abbrev)
1341         {
1342           (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1343                              abbrev_number);
1344           bfd_set_error (bfd_error_bad_value);
1345           return FALSE;
1346         }
1347
1348       if (abbrev->tag == DW_TAG_subprogram
1349           || abbrev->tag == DW_TAG_inlined_subroutine)
1350         {
1351           bfd_size_type amt = sizeof (struct funcinfo);
1352           func = bfd_zalloc (abfd, amt);
1353           func->prev_func = unit->function_table;
1354           unit->function_table = func;
1355         }
1356       else
1357         func = NULL;
1358
1359       for (i = 0; i < abbrev->num_attrs; ++i)
1360         {
1361           info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1362
1363           if (func)
1364             {
1365               switch (attr.name)
1366                 {
1367                 case DW_AT_abstract_origin:
1368                   func->name = find_abstract_instance_name (unit, attr.u.val);
1369                   break;
1370
1371                 case DW_AT_name:
1372                   /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name.  */
1373                   if (func->name == NULL)
1374                     func->name = attr.u.str;
1375                   break;
1376
1377                 case DW_AT_MIPS_linkage_name:
1378                   func->name = attr.u.str;
1379                   break;
1380
1381                 case DW_AT_low_pc:
1382                   func->low = attr.u.val;
1383                   break;
1384
1385                 case DW_AT_high_pc:
1386                   func->high = attr.u.val;
1387                   break;
1388
1389                 default:
1390                   break;
1391                 }
1392             }
1393         }
1394
1395       if (abbrev->has_children)
1396         nesting_level++;
1397     }
1398
1399   return TRUE;
1400 }
1401
1402 /* Parse a DWARF2 compilation unit starting at INFO_PTR.  This
1403    includes the compilation unit header that proceeds the DIE's, but
1404    does not include the length field that precedes each compilation
1405    unit header.  END_PTR points one past the end of this comp unit.
1406    OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
1407
1408    This routine does not read the whole compilation unit; only enough
1409    to get to the line number information for the compilation unit.  */
1410
1411 static struct comp_unit *
1412 parse_comp_unit (bfd *abfd,
1413                  struct dwarf2_debug *stash,
1414                  bfd_vma unit_length,
1415                  bfd_byte *info_ptr_unit,
1416                  unsigned int offset_size)
1417 {
1418   struct comp_unit* unit;
1419   unsigned int version;
1420   bfd_uint64_t abbrev_offset = 0;
1421   unsigned int addr_size;
1422   struct abbrev_info** abbrevs;
1423   unsigned int abbrev_number, bytes_read, i;
1424   struct abbrev_info *abbrev;
1425   struct attribute attr;
1426   bfd_byte *info_ptr = stash->info_ptr;
1427   bfd_byte *end_ptr = info_ptr + unit_length;
1428   bfd_size_type amt;
1429
1430   version = read_2_bytes (abfd, info_ptr);
1431   info_ptr += 2;
1432   BFD_ASSERT (offset_size == 4 || offset_size == 8);
1433   if (offset_size == 4)
1434     abbrev_offset = read_4_bytes (abfd, info_ptr);
1435   else
1436     abbrev_offset = read_8_bytes (abfd, info_ptr);
1437   info_ptr += offset_size;
1438   addr_size = read_1_byte (abfd, info_ptr);
1439   info_ptr += 1;
1440
1441   if (version != 2)
1442     {
1443       (*_bfd_error_handler) (_("Dwarf Error: found dwarf version '%u', this reader only handles version 2 information."), version);
1444       bfd_set_error (bfd_error_bad_value);
1445       return 0;
1446     }
1447
1448   if (addr_size > sizeof (bfd_vma))
1449     {
1450       (*_bfd_error_handler) (_("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."),
1451                          addr_size,
1452                          (unsigned int) sizeof (bfd_vma));
1453       bfd_set_error (bfd_error_bad_value);
1454       return 0;
1455     }
1456
1457   if (addr_size != 2 && addr_size != 4 && addr_size != 8)
1458     {
1459       (*_bfd_error_handler) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '2', '4' and '8'.", addr_size);
1460       bfd_set_error (bfd_error_bad_value);
1461       return 0;
1462     }
1463
1464   /* Read the abbrevs for this compilation unit into a table.  */
1465   abbrevs = read_abbrevs (abfd, abbrev_offset, stash);
1466   if (! abbrevs)
1467       return 0;
1468
1469   abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1470   info_ptr += bytes_read;
1471   if (! abbrev_number)
1472     {
1473       (*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %u."),
1474                          abbrev_number);
1475       bfd_set_error (bfd_error_bad_value);
1476       return 0;
1477     }
1478
1479   abbrev = lookup_abbrev (abbrev_number, abbrevs);
1480   if (! abbrev)
1481     {
1482       (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1483                          abbrev_number);
1484       bfd_set_error (bfd_error_bad_value);
1485       return 0;
1486     }
1487
1488   amt = sizeof (struct comp_unit);
1489   unit = bfd_zalloc (abfd, amt);
1490   unit->abfd = abfd;
1491   unit->addr_size = addr_size;
1492   unit->offset_size = offset_size;
1493   unit->abbrevs = abbrevs;
1494   unit->end_ptr = end_ptr;
1495   unit->stash = stash;
1496   unit->info_ptr_unit = info_ptr_unit;
1497
1498   for (i = 0; i < abbrev->num_attrs; ++i)
1499     {
1500       info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1501
1502       /* Store the data if it is of an attribute we want to keep in a
1503          partial symbol table.  */
1504       switch (attr.name)
1505         {
1506         case DW_AT_stmt_list:
1507           unit->stmtlist = 1;
1508           unit->line_offset = attr.u.val;
1509           break;
1510
1511         case DW_AT_name:
1512           unit->name = attr.u.str;
1513           break;
1514
1515         case DW_AT_low_pc:
1516           unit->arange.low = attr.u.val;
1517           break;
1518
1519         case DW_AT_high_pc:
1520           unit->arange.high = attr.u.val;
1521           break;
1522
1523         case DW_AT_comp_dir:
1524           {
1525             char *comp_dir = attr.u.str;
1526             if (comp_dir)
1527               {
1528                 /* Irix 6.2 native cc prepends <machine>.: to the compilation
1529                    directory, get rid of it.  */
1530                 char *cp = strchr (comp_dir, ':');
1531
1532                 if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
1533                   comp_dir = cp + 1;
1534               }
1535             unit->comp_dir = comp_dir;
1536             break;
1537           }
1538
1539         default:
1540           break;
1541         }
1542     }
1543
1544   unit->first_child_die_ptr = info_ptr;
1545   return unit;
1546 }
1547
1548 /* Return TRUE if UNIT contains the address given by ADDR.  */
1549
1550 static bfd_boolean
1551 comp_unit_contains_address (struct comp_unit *unit, bfd_vma addr)
1552 {
1553   struct arange *arange;
1554
1555   if (unit->error)
1556     return FALSE;
1557
1558   arange = &unit->arange;
1559   do
1560     {
1561       if (addr >= arange->low && addr < arange->high)
1562         return TRUE;
1563       arange = arange->next;
1564     }
1565   while (arange);
1566
1567   return FALSE;
1568 }
1569
1570 /* If UNIT contains ADDR, set the output parameters to the values for
1571    the line containing ADDR.  The output parameters, FILENAME_PTR,
1572    FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
1573    to be filled in.
1574
1575    Return TRUE if UNIT contains ADDR, and no errors were encountered;
1576    FALSE otherwise.  */
1577
1578 static bfd_boolean
1579 comp_unit_find_nearest_line (struct comp_unit *unit,
1580                              bfd_vma addr,
1581                              const char **filename_ptr,
1582                              const char **functionname_ptr,
1583                              unsigned int *linenumber_ptr,
1584                              struct dwarf2_debug *stash)
1585 {
1586   bfd_boolean line_p;
1587   bfd_boolean func_p;
1588   struct funcinfo *function;
1589
1590   if (unit->error)
1591     return FALSE;
1592
1593   if (! unit->line_table)
1594     {
1595       if (! unit->stmtlist)
1596         {
1597           unit->error = 1;
1598           return FALSE;
1599         }
1600
1601       unit->line_table = decode_line_info (unit, stash);
1602
1603       if (! unit->line_table)
1604         {
1605           unit->error = 1;
1606           return FALSE;
1607         }
1608
1609       if (unit->first_child_die_ptr < unit->end_ptr
1610           && ! scan_unit_for_functions (unit))
1611         {
1612           unit->error = 1;
1613           return FALSE;
1614         }
1615     }
1616
1617   function = NULL;
1618   func_p = lookup_address_in_function_table (unit->function_table, addr,
1619                                              &function, functionname_ptr);
1620   line_p = lookup_address_in_line_info_table (unit->line_table, addr,
1621                                               function, filename_ptr,
1622                                               linenumber_ptr);
1623   return line_p || func_p;
1624 }
1625
1626 /* Locate a section in a BFD containing debugging info.  The search starts
1627    from the section after AFTER_SEC, or from the first section in the BFD if
1628    AFTER_SEC is NULL.  The search works by examining the names of the
1629    sections.  There are two permissiable names.  The first is .debug_info.
1630    This is the standard DWARF2 name.  The second is a prefix .gnu.linkonce.wi.
1631    This is a variation on the .debug_info section which has a checksum
1632    describing the contents appended onto the name.  This allows the linker to
1633    identify and discard duplicate debugging sections for different
1634    compilation units.  */
1635 #define DWARF2_DEBUG_INFO ".debug_info"
1636 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
1637
1638 static asection *
1639 find_debug_info (bfd *abfd, asection *after_sec)
1640 {
1641   asection * msec;
1642
1643   if (after_sec)
1644     msec = after_sec->next;
1645   else
1646     msec = abfd->sections;
1647
1648   while (msec)
1649     {
1650       if (strcmp (msec->name, DWARF2_DEBUG_INFO) == 0)
1651         return msec;
1652
1653       if (strncmp (msec->name, GNU_LINKONCE_INFO, strlen (GNU_LINKONCE_INFO)) == 0)
1654         return msec;
1655
1656       msec = msec->next;
1657     }
1658
1659   return NULL;
1660 }
1661
1662 /* The DWARF2 version of find_nearest_line.  Return TRUE if the line
1663    is found without error.  ADDR_SIZE is the number of bytes in the
1664    initial .debug_info length field and in the abbreviation offset.
1665    You may use zero to indicate that the default value should be
1666    used.  */
1667
1668 bfd_boolean
1669 _bfd_dwarf2_find_nearest_line (bfd *abfd,
1670                                asection *section,
1671                                asymbol **symbols,
1672                                bfd_vma offset,
1673                                const char **filename_ptr,
1674                                const char **functionname_ptr,
1675                                unsigned int *linenumber_ptr,
1676                                unsigned int addr_size,
1677                                void **pinfo)
1678 {
1679   /* Read each compilation unit from the section .debug_info, and check
1680      to see if it contains the address we are searching for.  If yes,
1681      lookup the address, and return the line number info.  If no, go
1682      on to the next compilation unit.
1683
1684      We keep a list of all the previously read compilation units, and
1685      a pointer to the next un-read compilation unit.  Check the
1686      previously read units before reading more.  */
1687   struct dwarf2_debug *stash;
1688
1689   /* What address are we looking for?  */
1690   bfd_vma addr;
1691
1692   struct comp_unit* each;
1693
1694   stash = *pinfo;
1695   addr = offset;
1696   if (section->output_section)
1697     addr += section->output_section->vma + section->output_offset;
1698   else
1699     addr += section->vma;
1700   *filename_ptr = NULL;
1701   *functionname_ptr = NULL;
1702   *linenumber_ptr = 0;
1703
1704   /* The DWARF2 spec says that the initial length field, and the
1705      offset of the abbreviation table, should both be 4-byte values.
1706      However, some compilers do things differently.  */
1707   if (addr_size == 0)
1708     addr_size = 4;
1709   BFD_ASSERT (addr_size == 4 || addr_size == 8);
1710
1711   if (! stash)
1712     {
1713       bfd_size_type total_size;
1714       asection *msec;
1715       bfd_size_type amt = sizeof (struct dwarf2_debug);
1716
1717       stash = bfd_zalloc (abfd, amt);
1718       if (! stash)
1719         return FALSE;
1720
1721       *pinfo = stash;
1722
1723       msec = find_debug_info (abfd, NULL);
1724       if (! msec)
1725         /* No dwarf2 info.  Note that at this point the stash
1726            has been allocated, but contains zeros, this lets
1727            future calls to this function fail quicker.  */
1728          return FALSE;
1729
1730       /* There can be more than one DWARF2 info section in a BFD these days.
1731          Read them all in and produce one large stash.  We do this in two
1732          passes - in the first pass we just accumulate the section sizes.
1733          In the second pass we read in the section's contents.  The allows
1734          us to avoid reallocing the data as we add sections to the stash.  */
1735       for (total_size = 0; msec; msec = find_debug_info (abfd, msec))
1736         total_size += msec->size;
1737
1738       stash->info_ptr = bfd_alloc (abfd, total_size);
1739       if (stash->info_ptr == NULL)
1740         return FALSE;
1741
1742       stash->info_ptr_end = stash->info_ptr;
1743
1744       for (msec = find_debug_info (abfd, NULL);
1745            msec;
1746            msec = find_debug_info (abfd, msec))
1747         {
1748           bfd_size_type size;
1749           bfd_size_type start;
1750
1751           size = msec->size;
1752           if (size == 0)
1753             continue;
1754
1755           start = stash->info_ptr_end - stash->info_ptr;
1756
1757           if ((bfd_simple_get_relocated_section_contents
1758                (abfd, msec, stash->info_ptr + start, symbols)) == NULL)
1759             continue;
1760
1761           stash->info_ptr_end = stash->info_ptr + start + size;
1762         }
1763
1764       BFD_ASSERT (stash->info_ptr_end == stash->info_ptr + total_size);
1765
1766       stash->sec = find_debug_info (abfd, NULL);
1767       stash->sec_info_ptr = stash->info_ptr;
1768       stash->syms = symbols;
1769     }
1770
1771   /* A null info_ptr indicates that there is no dwarf2 info
1772      (or that an error occured while setting up the stash).  */
1773   if (! stash->info_ptr)
1774     return FALSE;
1775
1776   /* Check the previously read comp. units first.  */
1777   for (each = stash->all_comp_units; each; each = each->next_unit)
1778     if (comp_unit_contains_address (each, addr))
1779       return comp_unit_find_nearest_line (each, addr, filename_ptr,
1780                                           functionname_ptr, linenumber_ptr,
1781                                           stash);
1782
1783   /* Read each remaining comp. units checking each as they are read.  */
1784   while (stash->info_ptr < stash->info_ptr_end)
1785     {
1786       bfd_vma length;
1787       bfd_boolean found;
1788       unsigned int offset_size = addr_size;
1789       bfd_byte *info_ptr_unit = stash->info_ptr;
1790
1791       length = read_4_bytes (abfd, stash->info_ptr);
1792       /* A 0xffffff length is the DWARF3 way of indicating we use
1793          64-bit offsets, instead of 32-bit offsets.  */
1794       if (length == 0xffffffff)
1795         {
1796           offset_size = 8;
1797           length = read_8_bytes (abfd, stash->info_ptr + 4);
1798           stash->info_ptr += 12;
1799         }
1800       /* A zero length is the IRIX way of indicating 64-bit offsets,
1801          mostly because the 64-bit length will generally fit in 32
1802          bits, and the endianness helps.  */
1803       else if (length == 0)
1804         {
1805           offset_size = 8;
1806           length = read_4_bytes (abfd, stash->info_ptr + 4);
1807           stash->info_ptr += 8;
1808         }
1809       /* In the absence of the hints above, we assume addr_size-sized
1810          offsets, for backward-compatibility with pre-DWARF3 64-bit
1811          platforms.  */
1812       else if (addr_size == 8)
1813         {
1814           length = read_8_bytes (abfd, stash->info_ptr);
1815           stash->info_ptr += 8;
1816         }
1817       else
1818         stash->info_ptr += 4;
1819
1820       if (length > 0)
1821         {
1822           each = parse_comp_unit (abfd, stash, length, info_ptr_unit,
1823                                   offset_size);
1824           stash->info_ptr += length;
1825
1826           if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr)
1827               == stash->sec->size)
1828             {
1829               stash->sec = find_debug_info (abfd, stash->sec);
1830               stash->sec_info_ptr = stash->info_ptr;
1831             }
1832
1833           if (each)
1834             {
1835               each->next_unit = stash->all_comp_units;
1836               stash->all_comp_units = each;
1837
1838               /* DW_AT_low_pc and DW_AT_high_pc are optional for
1839                  compilation units.  If we don't have them (i.e.,
1840                  unit->high == 0), we need to consult the line info
1841                  table to see if a compilation unit contains the given
1842                  address.  */
1843               if (each->arange.high > 0)
1844                 {
1845                   if (comp_unit_contains_address (each, addr))
1846                     return comp_unit_find_nearest_line (each, addr,
1847                                                         filename_ptr,
1848                                                         functionname_ptr,
1849                                                         linenumber_ptr,
1850                                                         stash);
1851                 }
1852               else
1853                 {
1854                   found = comp_unit_find_nearest_line (each, addr,
1855                                                        filename_ptr,
1856                                                        functionname_ptr,
1857                                                        linenumber_ptr,
1858                                                        stash);
1859                   if (found)
1860                     return TRUE;
1861                 }
1862             }
1863         }
1864     }
1865
1866   return FALSE;
1867 }