xref: /openbsd-src/gnu/usr.bin/binutils/bfd/dwarf2.c (revision b2ea75c1b17e1a9a339660e7ed45cd24946b230e)
1 /* DWARF 2 support.
2    Copyright 1994, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
3 
4    Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
5    (gavin@cygnus.com).
6 
7    From the dwarf2read.c header:
8    Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
9    Inc.  with support from Florida State University (under contract
10    with the Ada Joint Program Office), and Silicon Graphics, Inc.
11    Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
12    based on Fred Fish's (Cygnus Support) implementation of DWARF 1
13    support in dwarfread.c
14 
15 This file is part of BFD.
16 
17 This program is free software; you can redistribute it and/or modify
18 it under the terms of the GNU General Public License as published by
19 the Free Software Foundation; either version 2 of the License, or (at
20 your option) any later version.
21 
22 This program is distributed in the hope that it will be useful, but
23 WITHOUT ANY WARRANTY; without even the implied warranty of
24 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25 General Public License for more details.
26 
27 You should have received a copy of the GNU General Public License
28 along with this program; if not, write to the Free Software
29 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
30 
31 #include "bfd.h"
32 #include "sysdep.h"
33 #include "libiberty.h"
34 #include "libbfd.h"
35 #include "elf-bfd.h"
36 #include "elf/dwarf2.h"
37 
38 /* The data in the .debug_line statement prologue looks like this.  */
39 struct line_head
40   {
41     unsigned int total_length;
42     unsigned short version;
43     unsigned int prologue_length;
44     unsigned char minimum_instruction_length;
45     unsigned char default_is_stmt;
46     int line_base;
47     unsigned char line_range;
48     unsigned char opcode_base;
49     unsigned char *standard_opcode_lengths;
50   };
51 
52 /* Attributes have a name and a value */
53 struct attribute
54   {
55     enum dwarf_attribute name;
56     enum dwarf_form form;
57     union
58       {
59 	char *str;
60 	struct dwarf_block *blk;
61 	unsigned int unsnd;
62 	int snd;
63 	bfd_vma addr;
64       }
65     u;
66   };
67 
68 /* Get at parts of an attribute structure */
69 
70 #define DW_STRING(attr)    ((attr)->u.str)
71 #define DW_UNSND(attr)     ((attr)->u.unsnd)
72 #define DW_BLOCK(attr)     ((attr)->u.blk)
73 #define DW_SND(attr)       ((attr)->u.snd)
74 #define DW_ADDR(attr)	   ((attr)->u.addr)
75 
76 /* Blocks are a bunch of untyped bytes. */
77 struct dwarf_block
78   {
79     unsigned int size;
80     char *data;
81   };
82 
83 
84 struct dwarf2_debug {
85 
86   /* A list of all previously read comp_units. */
87   struct comp_unit* all_comp_units;
88 
89   /* The next unread compilation unit within the .debug_info section.
90      Zero indicates that the .debug_info section has not been loaded
91      into a buffer yet.*/
92   char* info_ptr;
93 
94   /* Pointer to the end of the .debug_info section memory buffer. */
95   char* info_ptr_end;
96 
97   /* Pointer to the .debug_abbrev section loaded into memory. */
98   char* dwarf_abbrev_buffer;
99 
100   /* Length of the loaded .debug_abbrev section. */
101   unsigned long dwarf_abbrev_size;
102 
103   /* Buffer for decode_line_info.  */
104   char *dwarf_line_buffer;
105 };
106 
107 struct arange {
108   struct arange *next;
109   bfd_vma low;
110   bfd_vma high;
111 };
112 
113 
114 /* A minimal decoding of DWARF2 compilation units.  We only decode
115    what's needed to get to the line number information. */
116 
117 struct comp_unit {
118 
119   /* Chain the previously read compilation units. */
120   struct comp_unit* next_unit;
121 
122   /* Keep the bdf convenient (for memory allocation). */
123   bfd* abfd;
124 
125   /* The lowest and higest addresses contained in this compilation
126      unit as specified in the compilation unit header. */
127   struct arange arange;
128 
129   /* The DW_AT_name attribute (for error messages). */
130   char* name;
131 
132   /* The abbrev hash table. */
133   struct abbrev_info** abbrevs;
134 
135   /* Note that an error was found by comp_unit_find_nearest_line. */
136   int error;
137 
138   /* The DW_AT_comp_dir attribute */
139   char* comp_dir;
140 
141   /* True if there is a line number table associated with this comp. unit. */
142   int stmtlist;
143 
144   /* The offset into .debug_line of the line number table. */
145   unsigned long line_offset;
146 
147   /* Pointer to the first child die for the comp unit. */
148   char *first_child_die_ptr;
149 
150   /* The end of the comp unit. */
151   char *end_ptr;
152 
153   /* The decoded line number, NULL if not yet decoded. */
154   struct line_info_table* line_table;
155 
156   /* A list of the functions found in this comp. unit. */
157   struct funcinfo* function_table;
158 
159   /* Address size for this unit - from unit header */
160   unsigned char addr_size;
161 };
162 
163 
164 
165 /* VERBATIM
166    The following function up to the END VERBATIM mark are
167    copied directly from dwarf2read.c. */
168 
169 /* read dwarf information from a buffer */
170 
171 static unsigned int
172 read_1_byte (abfd, buf)
173      bfd *abfd ATTRIBUTE_UNUSED;
174      char *buf;
175 {
176   return bfd_get_8 (abfd, (bfd_byte *) buf);
177 }
178 
179 static int
180 read_1_signed_byte (abfd, buf)
181      bfd *abfd ATTRIBUTE_UNUSED;
182      char *buf;
183 {
184   return bfd_get_signed_8 (abfd, (bfd_byte *) buf);
185 }
186 
187 static unsigned int
188 read_2_bytes (abfd, buf)
189      bfd *abfd;
190      char *buf;
191 {
192   return bfd_get_16 (abfd, (bfd_byte *) buf);
193 }
194 
195 #if 0
196 
197 /* This is not used.  */
198 
199 static int
200 read_2_signed_bytes (abfd, buf)
201      bfd *abfd;
202      char *buf;
203 {
204   return bfd_get_signed_16 (abfd, (bfd_byte *) buf);
205 }
206 
207 #endif
208 
209 static unsigned int
210 read_4_bytes (abfd, buf)
211      bfd *abfd;
212      char *buf;
213 {
214   return bfd_get_32 (abfd, (bfd_byte *) buf);
215 }
216 
217 #if 0
218 
219 /* This is not used.  */
220 
221 static int
222 read_4_signed_bytes (abfd, buf)
223      bfd *abfd;
224      char *buf;
225 {
226   return bfd_get_signed_32 (abfd, (bfd_byte *) buf);
227 }
228 
229 #endif
230 
231 static unsigned int
232 read_8_bytes (abfd, buf)
233      bfd *abfd;
234      char *buf;
235 {
236   return bfd_get_64 (abfd, (bfd_byte *) buf);
237 }
238 
239 static char *
240 read_n_bytes (abfd, buf, size)
241      bfd *abfd ATTRIBUTE_UNUSED;
242      char *buf;
243      unsigned int size ATTRIBUTE_UNUSED;
244 {
245   /* If the size of a host char is 8 bits, we can return a pointer
246      to the buffer, otherwise we have to copy the data to a buffer
247      allocated on the temporary obstack.  */
248   return buf;
249 }
250 
251 static char *
252 read_string (abfd, buf, bytes_read_ptr)
253      bfd *abfd ATTRIBUTE_UNUSED;
254      char *buf;
255      unsigned int *bytes_read_ptr;
256 {
257   /* If the size of a host char is 8 bits, we can return a pointer
258      to the string, otherwise we have to copy the string to a buffer
259      allocated on the temporary obstack.  */
260   if (*buf == '\0')
261     {
262       *bytes_read_ptr = 1;
263       return NULL;
264     }
265   *bytes_read_ptr = strlen (buf) + 1;
266   return buf;
267 }
268 
269 static unsigned int
270 read_unsigned_leb128 (abfd, buf, bytes_read_ptr)
271      bfd *abfd ATTRIBUTE_UNUSED;
272      char *buf;
273      unsigned int *bytes_read_ptr;
274 {
275   unsigned int  result;
276   unsigned int  num_read;
277   int           shift;
278   unsigned char byte;
279 
280   result   = 0;
281   shift    = 0;
282   num_read = 0;
283 
284   do
285     {
286       byte = bfd_get_8 (abfd, (bfd_byte *) buf);
287       buf ++;
288       num_read ++;
289       result |= ((byte & 0x7f) << shift);
290       shift += 7;
291     }
292   while (byte & 0x80);
293 
294   * bytes_read_ptr = num_read;
295 
296   return result;
297 }
298 
299 static int
300 read_signed_leb128 (abfd, buf, bytes_read_ptr)
301      bfd *abfd ATTRIBUTE_UNUSED;
302      char *buf;
303      unsigned int * bytes_read_ptr;
304 {
305   int           result;
306   int           shift;
307   int           num_read;
308   unsigned char byte;
309 
310   result = 0;
311   shift = 0;
312   num_read = 0;
313 
314   do
315     {
316       byte = bfd_get_8 (abfd, (bfd_byte *) buf);
317       buf ++;
318       num_read ++;
319       result |= ((byte & 0x7f) << shift);
320       shift += 7;
321     }
322   while (byte & 0x80);
323 
324   if ((shift < 32) && (byte & 0x40))
325     result |= -(1 << shift);
326 
327   * bytes_read_ptr = num_read;
328 
329   return result;
330 }
331 
332 /* END VERBATIM */
333 
334 static bfd_vma
335 read_address (unit, buf)
336      struct comp_unit* unit;
337      char *buf;
338 {
339   switch (unit->addr_size)
340     {
341     case 8:
342       return bfd_get_64 (unit->abfd, (bfd_byte *) buf);
343     case 4:
344       return bfd_get_32 (unit->abfd, (bfd_byte *) buf);
345     case 2:
346       return bfd_get_16 (unit->abfd, (bfd_byte *) buf);
347     default:
348       abort ();
349     }
350 }
351 
352 
353 
354 
355 
356 /* This data structure holds the information of an abbrev. */
357 struct abbrev_info
358   {
359     unsigned int number;	/* number identifying abbrev */
360     enum dwarf_tag tag;		/* dwarf tag */
361     int has_children;		/* boolean */
362     unsigned int num_attrs;	/* number of attributes */
363     struct attr_abbrev *attrs;	/* an array of attribute descriptions */
364     struct abbrev_info *next;	/* next in chain */
365   };
366 
367 struct attr_abbrev
368   {
369     enum dwarf_attribute name;
370     enum dwarf_form form;
371   };
372 
373 #ifndef ABBREV_HASH_SIZE
374 #define ABBREV_HASH_SIZE 121
375 #endif
376 #ifndef ATTR_ALLOC_CHUNK
377 #define ATTR_ALLOC_CHUNK 4
378 #endif
379 
380 /* Lookup an abbrev_info structure in the abbrev hash table.  */
381 
382 static struct abbrev_info *
383 lookup_abbrev (number,abbrevs)
384      unsigned int number;
385      struct abbrev_info **abbrevs;
386 {
387   unsigned int hash_number;
388   struct abbrev_info *abbrev;
389 
390   hash_number = number % ABBREV_HASH_SIZE;
391   abbrev = abbrevs[hash_number];
392 
393   while (abbrev)
394     {
395       if (abbrev->number == number)
396 	return abbrev;
397       else
398 	abbrev = abbrev->next;
399     }
400   return NULL;
401 }
402 
403 /* In DWARF version 2, the description of the debugging information is
404    stored in a separate .debug_abbrev section.  Before we read any
405    dies from a section we read in all abbreviations and install them
406    in a hash table.  */
407 
408 static struct abbrev_info**
409 read_abbrevs (abfd, offset)
410      bfd * abfd;
411      unsigned int offset;
412 {
413   struct abbrev_info **abbrevs;
414   char *abbrev_ptr;
415   struct abbrev_info *cur_abbrev;
416   unsigned int abbrev_number, bytes_read, abbrev_name;
417   unsigned int abbrev_form, hash_number;
418   struct dwarf2_debug *stash;
419 
420   stash = elf_tdata(abfd)->dwarf2_find_line_info;
421 
422   if (! stash->dwarf_abbrev_buffer)
423     {
424       asection *msec;
425 
426       msec = bfd_get_section_by_name (abfd, ".debug_abbrev");
427       if (! msec)
428 	{
429 	  (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_abbrev section."));
430 	  bfd_set_error (bfd_error_bad_value);
431 	  return 0;
432 	}
433 
434       stash->dwarf_abbrev_size = msec->_raw_size;
435       stash->dwarf_abbrev_buffer = (char*) bfd_alloc (abfd, stash->dwarf_abbrev_size);
436       if (! stash->dwarf_abbrev_buffer)
437 	  return 0;
438 
439       if (! bfd_get_section_contents (abfd, msec,
440 				      stash->dwarf_abbrev_buffer, 0,
441 				      stash->dwarf_abbrev_size))
442 	return 0;
443     }
444 
445   if (offset > stash->dwarf_abbrev_size)
446     {
447       (*_bfd_error_handler) (_("Dwarf Error: Abbrev offset (%u) bigger than abbrev size (%u)."),
448 			     offset, stash->dwarf_abbrev_size );
449       bfd_set_error (bfd_error_bad_value);
450       return 0;
451     }
452 
453   abbrevs = (struct abbrev_info**) bfd_zalloc (abfd, sizeof(struct abbrev_info*) * ABBREV_HASH_SIZE);
454 
455   abbrev_ptr = stash->dwarf_abbrev_buffer + offset;
456   abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
457   abbrev_ptr += bytes_read;
458 
459   /* loop until we reach an abbrev number of 0 */
460   while (abbrev_number)
461     {
462       cur_abbrev = (struct abbrev_info*)bfd_zalloc (abfd, sizeof (struct abbrev_info));
463 
464       /* read in abbrev header */
465       cur_abbrev->number = abbrev_number;
466       cur_abbrev->tag = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
467       abbrev_ptr += bytes_read;
468       cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
469       abbrev_ptr += 1;
470 
471       /* now read in declarations */
472       abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
473       abbrev_ptr += bytes_read;
474       abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
475       abbrev_ptr += bytes_read;
476       while (abbrev_name)
477 	{
478 	  if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
479 	    {
480 	      cur_abbrev->attrs = (struct attr_abbrev *)
481 		bfd_realloc (cur_abbrev->attrs,
482 			     (cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK)
483 			     * sizeof (struct attr_abbrev));
484 	      if (! cur_abbrev->attrs)
485 		return 0;
486 	    }
487 	  cur_abbrev->attrs[cur_abbrev->num_attrs].name = abbrev_name;
488 	  cur_abbrev->attrs[cur_abbrev->num_attrs++].form = abbrev_form;
489 	  abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
490 	  abbrev_ptr += bytes_read;
491 	  abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
492 	  abbrev_ptr += bytes_read;
493 	}
494 
495       hash_number = abbrev_number % ABBREV_HASH_SIZE;
496       cur_abbrev->next = abbrevs[hash_number];
497       abbrevs[hash_number] = cur_abbrev;
498 
499       /* Get next abbreviation.
500          Under Irix6 the abbreviations for a compilation unit are not
501 	 always properly terminated with an abbrev number of 0.
502 	 Exit loop if we encounter an abbreviation which we have
503 	 already read (which means we are about to read the abbreviations
504 	 for the next compile unit) or if the end of the abbreviation
505 	 table is reached.  */
506       if ((unsigned int) (abbrev_ptr - stash->dwarf_abbrev_buffer)
507 	    >= stash->dwarf_abbrev_size)
508 	break;
509       abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
510       abbrev_ptr += bytes_read;
511       if (lookup_abbrev (abbrev_number,abbrevs) != NULL)
512 	break;
513     }
514 
515   return abbrevs;
516 }
517 
518 /* Read an attribute described by an abbreviated attribute.  */
519 
520 static char *
521 read_attribute (attr, abbrev, unit, info_ptr)
522      struct attribute   *attr;
523      struct attr_abbrev *abbrev;
524      struct comp_unit   *unit;
525      char               *info_ptr;
526 {
527   bfd *abfd = unit->abfd;
528   unsigned int bytes_read;
529   struct dwarf_block *blk;
530 
531   attr->name = abbrev->name;
532   attr->form = abbrev->form;
533   switch (abbrev->form)
534     {
535     case DW_FORM_addr:
536     case DW_FORM_ref_addr:
537       DW_ADDR (attr) = read_address (unit, info_ptr);
538       info_ptr += unit->addr_size;
539       break;
540     case DW_FORM_block2:
541       blk = (struct dwarf_block *) bfd_alloc (abfd, sizeof (struct dwarf_block));
542       blk->size = read_2_bytes (abfd, info_ptr);
543       info_ptr += 2;
544       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
545       info_ptr += blk->size;
546       DW_BLOCK (attr) = blk;
547       break;
548     case DW_FORM_block4:
549       blk = (struct dwarf_block *) bfd_alloc (abfd, sizeof (struct dwarf_block));
550       blk->size = read_4_bytes (abfd, info_ptr);
551       info_ptr += 4;
552       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
553       info_ptr += blk->size;
554       DW_BLOCK (attr) = blk;
555       break;
556     case DW_FORM_data2:
557       DW_UNSND (attr) = read_2_bytes (abfd, info_ptr);
558       info_ptr += 2;
559       break;
560     case DW_FORM_data4:
561       DW_UNSND (attr) = read_4_bytes (abfd, info_ptr);
562       info_ptr += 4;
563       break;
564     case DW_FORM_data8:
565       DW_UNSND (attr) = read_8_bytes (abfd, info_ptr);
566       info_ptr += 8;
567       break;
568     case DW_FORM_string:
569       DW_STRING (attr) = read_string (abfd, info_ptr, &bytes_read);
570       info_ptr += bytes_read;
571       break;
572     case DW_FORM_block:
573       blk = (struct dwarf_block *) bfd_alloc (abfd, sizeof (struct dwarf_block));
574       blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
575       info_ptr += bytes_read;
576       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
577       info_ptr += blk->size;
578       DW_BLOCK (attr) = blk;
579       break;
580     case DW_FORM_block1:
581       blk = (struct dwarf_block *) bfd_alloc (abfd, sizeof (struct dwarf_block));
582       blk->size = read_1_byte (abfd, info_ptr);
583       info_ptr += 1;
584       blk->data = read_n_bytes (abfd, info_ptr, blk->size);
585       info_ptr += blk->size;
586       DW_BLOCK (attr) = blk;
587       break;
588     case DW_FORM_data1:
589       DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
590       info_ptr += 1;
591       break;
592     case DW_FORM_flag:
593       DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
594       info_ptr += 1;
595       break;
596     case DW_FORM_sdata:
597       DW_SND (attr) = read_signed_leb128 (abfd, info_ptr, &bytes_read);
598       info_ptr += bytes_read;
599       break;
600     case DW_FORM_udata:
601       DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
602       info_ptr += bytes_read;
603       break;
604     case DW_FORM_ref1:
605       DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
606       info_ptr += 1;
607       break;
608     case DW_FORM_ref2:
609       DW_UNSND (attr) = read_2_bytes (abfd, info_ptr);
610       info_ptr += 2;
611       break;
612     case DW_FORM_ref4:
613       DW_UNSND (attr) = read_4_bytes (abfd, info_ptr);
614       info_ptr += 4;
615       break;
616     case DW_FORM_ref8:
617       DW_UNSND (attr) = read_8_bytes (abfd, info_ptr);
618       info_ptr += 8;
619       break;
620     case DW_FORM_ref_udata:
621       DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
622       info_ptr += bytes_read;
623       break;
624     case DW_FORM_strp:
625     case DW_FORM_indirect:
626     default:
627       (*_bfd_error_handler) (_("Dwarf Error: Invalid or unhandled FORM value: %d."),
628 			     abbrev->form);
629       bfd_set_error (bfd_error_bad_value);
630     }
631   return info_ptr;
632 }
633 
634 
635 /* Source line information table routines. */
636 
637 #define FILE_ALLOC_CHUNK 5
638 #define DIR_ALLOC_CHUNK 5
639 
640 struct line_info {
641   struct line_info* prev_line;
642 
643   bfd_vma address;
644   char* filename;
645   unsigned int line;
646   unsigned int column;
647   int end_sequence;		/* end of (sequential) code sequence */
648 };
649 
650 struct fileinfo {
651   char *name;
652   unsigned int dir;
653   unsigned int time;
654   unsigned int size;
655 };
656 
657 struct line_info_table {
658   bfd* abfd;
659 
660   unsigned int num_files;
661   unsigned int num_dirs;
662 
663   char* comp_dir;
664   char** dirs;
665   struct fileinfo* files;
666   struct line_info* last_line;
667 };
668 
669 static void
670 add_line_info (table, address, filename, line, column, end_sequence)
671      struct line_info_table* table;
672      bfd_vma address;
673      char* filename;
674      unsigned int line;
675      unsigned int column;
676      int end_sequence;
677 {
678   struct line_info* info = (struct line_info*)
679     bfd_alloc (table->abfd, sizeof (struct line_info));
680 
681   info->prev_line = table->last_line;
682   table->last_line = info;
683 
684   info->address = address;
685   info->filename = filename;
686   info->line = line;
687   info->column = column;
688   info->end_sequence = end_sequence;
689 }
690 
691 static char*
692 concat_filename (table, file)
693      struct line_info_table* table;
694      unsigned int file;
695 {
696   char* filename;
697 
698   if (file - 1 >= table->num_files)
699     {
700       (*_bfd_error_handler)
701 	(_("Dwarf Error: mangled line number section (bad file number)."));
702       return "<unknown>";
703     }
704 
705   filename = table->files[file - 1].name;
706   if (*filename == '/')
707     return filename;
708 
709   else
710     {
711       char* dirname = (table->files[file - 1].dir
712 		       ? table->dirs[table->files[file - 1].dir - 1]
713 		       : table->comp_dir);
714       return (char*) concat (dirname, "/", filename, NULL);
715     }
716 }
717 
718 static void
719 arange_add (unit, low_pc, high_pc)
720      struct comp_unit *unit;
721      bfd_vma low_pc;
722      bfd_vma high_pc;
723 {
724   struct arange *arange;
725 
726   /* first see if we can cheaply extend an existing range: */
727   arange = &unit->arange;
728   do
729     {
730       if (low_pc == arange->high)
731 	{
732 	  arange->high = high_pc;
733 	  return;
734 	}
735       if (high_pc == arange->low)
736 	{
737 	  arange->low = low_pc;
738 	  return;
739 	}
740       arange = arange->next;
741     }
742   while (arange);
743 
744   if (unit->arange.high == 0)
745     {
746       /* this is the first address range: store it in unit->arange: */
747       unit->arange.next = 0;
748       unit->arange.low = low_pc;
749       unit->arange.high = high_pc;
750       return;
751     }
752 
753   /* need to allocate a new arange and insert it into the arange list: */
754   arange = bfd_zalloc (unit->abfd, sizeof (*arange));
755   arange->low = low_pc;
756   arange->high = high_pc;
757 
758   arange->next = unit->arange.next;
759   unit->arange.next = arange;
760 }
761 
762 /* Decode the line number information for UNIT. */
763 
764 static struct line_info_table*
765 decode_line_info (unit)
766      struct comp_unit *unit;
767 {
768   bfd *abfd = unit->abfd;
769 
770   struct dwarf2_debug *stash;
771 
772   struct line_info_table* table;
773 
774   char *line_ptr;
775   char *line_end;
776   struct line_head lh;
777   unsigned int i, bytes_read;
778   char *cur_file, *cur_dir;
779   unsigned char op_code, extended_op, adj_opcode;
780 
781   stash = elf_tdata (abfd)->dwarf2_find_line_info;
782 
783   if (! stash->dwarf_line_buffer)
784     {
785       asection *msec;
786       unsigned long size;
787 
788       msec = bfd_get_section_by_name (abfd, ".debug_line");
789       if (! msec)
790 	{
791 	  (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_line section."));
792 	  bfd_set_error (bfd_error_bad_value);
793 	  return 0;
794 	}
795 
796       size = msec->_raw_size;
797       stash->dwarf_line_buffer = (char *) bfd_alloc (abfd, size);
798       if (! stash->dwarf_line_buffer)
799 	return 0;
800 
801       if (! bfd_get_section_contents (abfd, msec,
802 				      stash->dwarf_line_buffer, 0,
803 				      size))
804 	return 0;
805 
806       /* FIXME: We ought to apply the relocs against this section before
807 	 we process it.... */
808     }
809 
810   table = (struct line_info_table*) bfd_alloc (abfd,
811 					       sizeof (struct line_info_table));
812   table->abfd = abfd;
813   table->comp_dir = unit->comp_dir;
814 
815   table->num_files = 0;
816   table->files = NULL;
817 
818   table->num_dirs = 0;
819   table->dirs = NULL;
820 
821   table->files = NULL;
822   table->last_line = NULL;
823 
824   line_ptr = stash->dwarf_line_buffer + unit->line_offset;
825 
826   /* read in the prologue */
827   lh.total_length = read_4_bytes (abfd, line_ptr);
828   line_ptr += 4;
829   line_end = line_ptr + lh.total_length;
830   lh.version = read_2_bytes (abfd, line_ptr);
831   line_ptr += 2;
832   lh.prologue_length = read_4_bytes (abfd, line_ptr);
833   line_ptr += 4;
834   lh.minimum_instruction_length = read_1_byte (abfd, line_ptr);
835   line_ptr += 1;
836   lh.default_is_stmt = read_1_byte (abfd, line_ptr);
837   line_ptr += 1;
838   lh.line_base = read_1_signed_byte (abfd, line_ptr);
839   line_ptr += 1;
840   lh.line_range = read_1_byte (abfd, line_ptr);
841   line_ptr += 1;
842   lh.opcode_base = read_1_byte (abfd, line_ptr);
843   line_ptr += 1;
844   lh.standard_opcode_lengths = (unsigned char *)
845     bfd_alloc (abfd, lh.opcode_base * sizeof (unsigned char));
846 
847   lh.standard_opcode_lengths[0] = 1;
848   for (i = 1; i < lh.opcode_base; ++i)
849     {
850       lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
851       line_ptr += 1;
852     }
853 
854   /* Read directory table  */
855   while ((cur_dir = read_string (abfd, line_ptr, &bytes_read)) != NULL)
856     {
857       line_ptr += bytes_read;
858       if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
859 	{
860 	  table->dirs = (char **)
861 	    bfd_realloc (table->dirs,
862 			 (table->num_dirs + DIR_ALLOC_CHUNK) * sizeof (char *));
863 	  if (! table->dirs)
864 	    return 0;
865 	}
866       table->dirs[table->num_dirs++] = cur_dir;
867     }
868   line_ptr += bytes_read;
869 
870   /* Read file name table */
871   while ((cur_file = read_string (abfd, line_ptr, &bytes_read)) != NULL)
872     {
873       line_ptr += bytes_read;
874       if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
875 	{
876 	  table->files = (struct fileinfo *)
877 	    bfd_realloc (table->files,
878 			 (table->num_files + FILE_ALLOC_CHUNK)
879 			 * sizeof (struct fileinfo));
880 	  if (! table->files)
881 	    return 0;
882 	}
883       table->files[table->num_files].name = cur_file;
884       table->files[table->num_files].dir =
885 	read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
886       line_ptr += bytes_read;
887       table->files[table->num_files].time =
888 	read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
889       line_ptr += bytes_read;
890       table->files[table->num_files].size =
891 	read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
892       line_ptr += bytes_read;
893       table->num_files++;
894     }
895   line_ptr += bytes_read;
896 
897   /* Read the statement sequences until there's nothing left.  */
898   while (line_ptr < line_end)
899     {
900       /* state machine registers  */
901       bfd_vma address = 0;
902       char* filename = concat_filename (table, 1);
903       unsigned int line = 1;
904       unsigned int column = 0;
905       int is_stmt = lh.default_is_stmt;
906       int basic_block = 0;
907       int end_sequence = 0, need_low_pc = 1;
908       bfd_vma low_pc = 0;
909 
910       /* Decode the table. */
911       while (! end_sequence)
912 	{
913 	  op_code = read_1_byte (abfd, line_ptr);
914 	  line_ptr += 1;
915 	  switch (op_code)
916 	    {
917 	    case DW_LNS_extended_op:
918 	      line_ptr += 1;	/* ignore length */
919 	      extended_op = read_1_byte (abfd, line_ptr);
920 	      line_ptr += 1;
921 	      switch (extended_op)
922 		{
923 		case DW_LNE_end_sequence:
924 		  end_sequence = 1;
925 		  add_line_info (table, address, filename, line, column,
926 				 end_sequence);
927 		  if (need_low_pc)
928 		    {
929 		      need_low_pc = 0;
930 		      low_pc = address;
931 		    }
932 		  arange_add (unit, low_pc, address);
933 		  break;
934 		case DW_LNE_set_address:
935 		  address = read_address (unit, line_ptr);
936 		  line_ptr += unit->addr_size;
937 		  break;
938 		case DW_LNE_define_file:
939 		  cur_file = read_string (abfd, line_ptr, &bytes_read);
940 		  line_ptr += bytes_read;
941 		  if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
942 		    {
943 		      table->files = (struct fileinfo *)
944 			bfd_realloc (table->files,
945 				     (table->num_files + FILE_ALLOC_CHUNK)
946 				     * sizeof (struct fileinfo));
947 		      if (! table->files)
948 			return 0;
949 		    }
950 		  table->files[table->num_files].name = cur_file;
951 		  table->files[table->num_files].dir =
952 		    read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
953 		  line_ptr += bytes_read;
954 		  table->files[table->num_files].time =
955 		    read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
956 		  line_ptr += bytes_read;
957 		  table->files[table->num_files].size =
958 		    read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
959 		  line_ptr += bytes_read;
960 		  table->num_files++;
961 		  break;
962 		default:
963 		  (*_bfd_error_handler) (_("Dwarf Error: mangled line number section."));
964 		  bfd_set_error (bfd_error_bad_value);
965 		  return 0;
966 		}
967 	      break;
968 	    case DW_LNS_copy:
969 	      add_line_info (table, address, filename, line, column, 0);
970 	      basic_block = 0;
971 	      if (need_low_pc)
972 		{
973 		  need_low_pc = 0;
974 		  low_pc = address;
975 		}
976 	      break;
977 	    case DW_LNS_advance_pc:
978 	      address += lh.minimum_instruction_length
979 		* read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
980 	      line_ptr += bytes_read;
981 	      break;
982 	    case DW_LNS_advance_line:
983 	      line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
984 	      line_ptr += bytes_read;
985 	      break;
986 	    case DW_LNS_set_file:
987 	      {
988 		unsigned int file;
989 
990 		/* The file and directory tables are 0 based, the references
991 		   are 1 based.  */
992 		file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
993 		line_ptr += bytes_read;
994 		filename = concat_filename (table, file);
995 		break;
996 	      }
997 	    case DW_LNS_set_column:
998 	      column = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
999 	      line_ptr += bytes_read;
1000 	      break;
1001 	    case DW_LNS_negate_stmt:
1002 	      is_stmt = (!is_stmt);
1003 	      break;
1004 	    case DW_LNS_set_basic_block:
1005 	      basic_block = 1;
1006 	      break;
1007 	    case DW_LNS_const_add_pc:
1008 	      address += lh.minimum_instruction_length
1009 		      * ((255 - lh.opcode_base) / lh.line_range);
1010 	      break;
1011 	    case DW_LNS_fixed_advance_pc:
1012 	      address += read_2_bytes (abfd, line_ptr);
1013 	      line_ptr += 2;
1014 	      break;
1015 	    default:		/* special operand */
1016 	      adj_opcode = op_code - lh.opcode_base;
1017 	      address += (adj_opcode / lh.line_range)
1018 		* lh.minimum_instruction_length;
1019 	      line += lh.line_base + (adj_opcode % lh.line_range);
1020 	      /* append row to matrix using current values */
1021 	      add_line_info (table, address, filename, line, column, 0);
1022 	      basic_block = 1;
1023 	      if (need_low_pc)
1024 		{
1025 		  need_low_pc = 0;
1026 		  low_pc = address;
1027 		}
1028 	    }
1029 	}
1030     }
1031 
1032   return table;
1033 }
1034 
1035 
1036 /* If ADDR is within TABLE set the output parameters and return true,
1037    otherwise return false.  The output parameters, FILENAME_PTR and
1038    LINENUMBER_PTR, are pointers to the objects to be filled in. */
1039 
1040 static boolean
1041 lookup_address_in_line_info_table (table,
1042 				   addr,
1043 				   filename_ptr,
1044 				   linenumber_ptr)
1045      struct line_info_table* table;
1046      bfd_vma addr;
1047      const char **filename_ptr;
1048      unsigned int *linenumber_ptr;
1049 {
1050   struct line_info* next_line = table->last_line;
1051   struct line_info* each_line;
1052 
1053   if (!next_line)
1054     return false;
1055 
1056   each_line = next_line->prev_line;
1057 
1058   while (each_line && next_line)
1059     {
1060       if (!each_line->end_sequence
1061 	  && addr >= each_line->address && addr < next_line->address)
1062 	{
1063 	  *filename_ptr = each_line->filename;
1064 	  *linenumber_ptr = each_line->line;
1065 	  return true;
1066 	}
1067       next_line = each_line;
1068       each_line = each_line->prev_line;
1069     }
1070 
1071   return false;
1072 }
1073 
1074 
1075 
1076 
1077 /* Function table functions. */
1078 
1079 struct funcinfo {
1080   struct funcinfo *prev_func;
1081 
1082   char* name;
1083   bfd_vma low;
1084   bfd_vma high;
1085 };
1086 
1087 
1088 /* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return true. */
1089 
1090 static boolean
1091 lookup_address_in_function_table (table,
1092 				  addr,
1093 				  functionname_ptr)
1094      struct funcinfo* table;
1095      bfd_vma addr;
1096      const char **functionname_ptr;
1097 {
1098   struct funcinfo* each_func;
1099 
1100   for (each_func = table;
1101        each_func;
1102        each_func = each_func->prev_func)
1103     {
1104       if (addr >= each_func->low && addr < each_func->high)
1105 	{
1106 	  *functionname_ptr = each_func->name;
1107 	  return true;
1108 	}
1109     }
1110 
1111   return false;
1112 }
1113 
1114 
1115 
1116 
1117 /* DWARF2 Compilation unit functions. */
1118 
1119 
1120 /* Scan over each die in a comp. unit looking for functions to add
1121    to the function table. */
1122 
1123 static boolean
1124 scan_unit_for_functions (unit)
1125      struct comp_unit *unit;
1126 {
1127   bfd *abfd = unit->abfd;
1128   char *info_ptr = unit->first_child_die_ptr;
1129   int nesting_level = 1;
1130 
1131   while (nesting_level)
1132     {
1133       unsigned int abbrev_number, bytes_read, i;
1134       struct abbrev_info *abbrev;
1135       struct attribute attr;
1136       struct funcinfo *func;
1137       char* name = 0;
1138 
1139       abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1140       info_ptr += bytes_read;
1141 
1142       if (! abbrev_number)
1143 	{
1144 	  nesting_level--;
1145 	  continue;
1146 	}
1147 
1148       abbrev = lookup_abbrev (abbrev_number,unit->abbrevs);
1149       if (! abbrev)
1150 	{
1151 	  (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %d."),
1152 			     abbrev_number);
1153 	  bfd_set_error (bfd_error_bad_value);
1154 	  return false;
1155 	}
1156 
1157       if (abbrev->tag == DW_TAG_subprogram)
1158 	{
1159 	  func = (struct funcinfo*) bfd_zalloc (abfd, sizeof (struct funcinfo));
1160 	  func->prev_func = unit->function_table;
1161 	  unit->function_table = func;
1162 	}
1163       else
1164 	func = NULL;
1165 
1166       for (i = 0; i < abbrev->num_attrs; ++i)
1167 	{
1168 	  info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1169 
1170 	  if (func)
1171 	    {
1172 	      switch (attr.name)
1173 		{
1174 		case DW_AT_name:
1175 
1176 		  name = DW_STRING (&attr);
1177 
1178 		  /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name.  */
1179 		  if (func->name == NULL)
1180 		    func->name = DW_STRING (&attr);
1181 		  break;
1182 
1183 		case DW_AT_MIPS_linkage_name:
1184 		  func->name = DW_STRING (&attr);
1185 		  break;
1186 
1187 		case DW_AT_low_pc:
1188 		  func->low = DW_ADDR (&attr);
1189 		  break;
1190 
1191 		case DW_AT_high_pc:
1192 		  func->high = DW_ADDR (&attr);
1193 		  break;
1194 
1195 		default:
1196 		  break;
1197 		}
1198 	    }
1199 	  else
1200 	    {
1201 	      switch (attr.name)
1202 		{
1203 		case DW_AT_name:
1204 		  name = DW_STRING (&attr);
1205 		  break;
1206 
1207 		default:
1208 		  break;
1209 		}
1210 	    }
1211 	}
1212 
1213       if (abbrev->has_children)
1214 	nesting_level++;
1215     }
1216 
1217   return true;
1218 }
1219 
1220 
1221 
1222 
1223 
1224 
1225 /* Parse a DWARF2 compilation unit starting at INFO_PTR.  This
1226    includes the compilation unit header that proceeds the DIE's, but
1227    does not include the length field that preceeds each compilation
1228    unit header.  END_PTR points one past the end of this comp unit.
1229    If ABBREV_LENGTH is 0, then the length of the abbreviation offset
1230    is assumed to be four bytes.  Otherwise, it it is the size given.
1231 
1232    This routine does not read the whole compilation unit; only enough
1233    to get to the line number information for the compilation unit.  */
1234 
1235 static struct comp_unit *
1236 parse_comp_unit (abfd, info_ptr, end_ptr, abbrev_length)
1237      bfd* abfd;
1238      char* info_ptr;
1239      char* end_ptr;
1240      unsigned int abbrev_length;
1241 {
1242   struct comp_unit* unit;
1243 
1244   unsigned short version;
1245   unsigned int abbrev_offset = 0;
1246   unsigned char addr_size;
1247   struct abbrev_info** abbrevs;
1248 
1249   unsigned int abbrev_number, bytes_read, i;
1250   struct abbrev_info *abbrev;
1251   struct attribute attr;
1252 
1253   version = read_2_bytes (abfd, info_ptr);
1254   info_ptr += 2;
1255   BFD_ASSERT (abbrev_length == 0
1256 	      || abbrev_length == 4
1257 	      || abbrev_length == 8);
1258   if (abbrev_length == 0 || abbrev_length == 4)
1259     abbrev_offset = read_4_bytes (abfd, info_ptr);
1260   else if (abbrev_length == 8)
1261     abbrev_offset = read_8_bytes (abfd, info_ptr);
1262   info_ptr += abbrev_length;
1263   addr_size = read_1_byte (abfd, info_ptr);
1264   info_ptr += 1;
1265 
1266   if (version != 2)
1267     {
1268       (*_bfd_error_handler) (_("Dwarf Error: found dwarf version '%hu', this reader only handles version 2 information."), version );
1269       bfd_set_error (bfd_error_bad_value);
1270       return 0;
1271     }
1272 
1273   if (addr_size > sizeof (bfd_vma))
1274     {
1275       (*_bfd_error_handler) (_("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."),
1276 			 addr_size,
1277 			 sizeof (bfd_vma));
1278       bfd_set_error (bfd_error_bad_value);
1279       return 0;
1280     }
1281 
1282   if (addr_size != 2 && addr_size != 4 && addr_size != 8)
1283     {
1284       (*_bfd_error_handler) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '2', '4' and '8'.", addr_size );
1285       bfd_set_error (bfd_error_bad_value);
1286       return 0;
1287     }
1288 
1289   /* Read the abbrevs for this compilation unit into a table */
1290   abbrevs = read_abbrevs (abfd, abbrev_offset);
1291   if (! abbrevs)
1292       return 0;
1293 
1294   abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1295   info_ptr += bytes_read;
1296   if (! abbrev_number)
1297     {
1298       (*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %d."),
1299 			 abbrev_number);
1300       bfd_set_error (bfd_error_bad_value);
1301       return 0;
1302     }
1303 
1304   abbrev = lookup_abbrev (abbrev_number, abbrevs);
1305   if (! abbrev)
1306     {
1307       (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %d."),
1308 			 abbrev_number);
1309       bfd_set_error (bfd_error_bad_value);
1310       return 0;
1311     }
1312 
1313   unit = (struct comp_unit*) bfd_zalloc (abfd, sizeof (struct comp_unit));
1314   unit->abfd = abfd;
1315   unit->addr_size = addr_size;
1316   unit->abbrevs = abbrevs;
1317   unit->end_ptr = end_ptr;
1318 
1319   for (i = 0; i < abbrev->num_attrs; ++i)
1320     {
1321       info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1322 
1323       /* Store the data if it is of an attribute we want to keep in a
1324 	 partial symbol table.  */
1325       switch (attr.name)
1326 	{
1327 	case DW_AT_stmt_list:
1328 	  unit->stmtlist = 1;
1329 	  unit->line_offset = DW_UNSND (&attr);
1330 	  break;
1331 
1332 	case DW_AT_name:
1333 	  unit->name = DW_STRING (&attr);
1334 	  break;
1335 
1336 	case DW_AT_low_pc:
1337 	  unit->arange.low = DW_ADDR (&attr);
1338 	  break;
1339 
1340 	case DW_AT_high_pc:
1341 	  unit->arange.high = DW_ADDR (&attr);
1342 	  break;
1343 
1344 	case DW_AT_comp_dir:
1345 	  {
1346 	    char* comp_dir = DW_STRING (&attr);
1347 	    if (comp_dir)
1348 	      {
1349 		/* Irix 6.2 native cc prepends <machine>.: to the compilation
1350 		   directory, get rid of it.  */
1351 		char *cp = (char*) strchr (comp_dir, ':');
1352 
1353 		if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
1354 		  comp_dir = cp + 1;
1355 	      }
1356 	    unit->comp_dir = comp_dir;
1357 	    break;
1358 	  }
1359 
1360 	default:
1361 	  break;
1362 	}
1363     }
1364 
1365   unit->first_child_die_ptr = info_ptr;
1366   return unit;
1367 }
1368 
1369 
1370 
1371 
1372 
1373 /* Return true if UNIT contains the address given by ADDR. */
1374 
1375 static boolean
1376 comp_unit_contains_address (unit, addr)
1377      struct comp_unit* unit;
1378      bfd_vma addr;
1379 {
1380   struct arange *arange;
1381 
1382   if (unit->error)
1383     return 0;
1384 
1385   arange = &unit->arange;
1386   do
1387     {
1388       if (addr >= arange->low && addr < arange->high)
1389 	return 1;
1390       arange = arange->next;
1391     }
1392   while (arange);
1393   return 0;
1394 }
1395 
1396 
1397 /* If UNIT contains ADDR, set the output parameters to the values for
1398    the line containing ADDR.  The output parameters, FILENAME_PTR,
1399    FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
1400    to be filled in.
1401 
1402    Return true of UNIT contains ADDR, and no errors were encountered;
1403    false otherwise.  */
1404 
1405 static boolean
1406 comp_unit_find_nearest_line (unit, addr,
1407 			     filename_ptr, functionname_ptr, linenumber_ptr)
1408      struct comp_unit* unit;
1409      bfd_vma addr;
1410      const char **filename_ptr;
1411      const char **functionname_ptr;
1412      unsigned int *linenumber_ptr;
1413 {
1414   boolean line_p;
1415   boolean func_p;
1416 
1417   if (unit->error)
1418     return false;
1419 
1420   if (! unit->line_table)
1421     {
1422       if (! unit->stmtlist)
1423 	{
1424 	  unit->error = 1;
1425 	  return false;
1426 	}
1427 
1428       unit->line_table = decode_line_info (unit);
1429 
1430       if (! unit->line_table)
1431 	{
1432 	  unit->error = 1;
1433 	  return false;
1434 	}
1435 
1436       if (! scan_unit_for_functions (unit))
1437 	{
1438 	  unit->error = 1;
1439 	  return false;
1440 	}
1441     }
1442 
1443   line_p = lookup_address_in_line_info_table (unit->line_table,
1444 					      addr,
1445 					      filename_ptr,
1446 					      linenumber_ptr);
1447   func_p = lookup_address_in_function_table (unit->function_table,
1448 					     addr,
1449 					     functionname_ptr);
1450   return line_p || func_p;
1451 }
1452 
1453 /* The DWARF2 version of find_nearest line.  Return true if the line
1454    is found without error.  ADDR_SIZE is the number of bytes in the
1455    initial .debug_info length field and in the abbreviation offset.
1456    You may use zero to indicate that the default value should be
1457    used.  */
1458 
1459 boolean
1460 _bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
1461 			       filename_ptr, functionname_ptr,
1462 			       linenumber_ptr,
1463 			       addr_size)
1464      bfd *abfd;
1465      asection *section;
1466      asymbol **symbols ATTRIBUTE_UNUSED;
1467      bfd_vma offset;
1468      const char **filename_ptr;
1469      const char **functionname_ptr;
1470      unsigned int *linenumber_ptr;
1471      unsigned int addr_size;
1472 {
1473   /* Read each compilation unit from the section .debug_info, and check
1474      to see if it contains the address we are searching for.  If yes,
1475      lookup the address, and return the line number info.  If no, go
1476      on to the next compilation unit.
1477 
1478      We keep a list of all the previously read compilation units, and
1479      a pointer to the next un-read compilation unit.  Check the
1480      previously read units before reading more.
1481      */
1482 
1483   struct dwarf2_debug *stash = elf_tdata (abfd)->dwarf2_find_line_info;
1484 
1485   /* What address are we looking for? */
1486   bfd_vma addr = offset + section->vma;
1487 
1488   struct comp_unit* each;
1489 
1490   *filename_ptr = NULL;
1491   *functionname_ptr = NULL;
1492   *linenumber_ptr = 0;
1493 
1494   /* The DWARF2 spec says that the initial length field, and the
1495      offset of the abbreviation table, should both be 4-byte values.
1496      However, some compilers do things differently.  */
1497   if (addr_size == 0)
1498     addr_size = 4;
1499   BFD_ASSERT (addr_size == 4 || addr_size == 8);
1500 
1501   if (! stash)
1502     {
1503       asection *msec;
1504       unsigned long size;
1505 
1506       stash = elf_tdata (abfd)->dwarf2_find_line_info =
1507 	(struct dwarf2_debug*) bfd_zalloc (abfd, sizeof (struct dwarf2_debug));
1508 
1509       if (! stash)
1510 	return false;
1511 
1512       msec = bfd_get_section_by_name (abfd, ".debug_info");
1513       if (! msec)
1514 	{
1515 	  /* No dwarf2 info.  Note that at this point the stash
1516 	     has been allocated, but contains zeros, this lets
1517 	     future calls to this function fail quicker. */
1518 	  return false;
1519 	}
1520 
1521       size = msec->_raw_size;
1522       if (size == 0)
1523 	return false;
1524 
1525       stash->info_ptr = (char *) bfd_alloc (abfd, size);
1526 
1527       if (! stash->info_ptr)
1528 	return false;
1529 
1530       if (! bfd_get_section_contents (abfd, msec, stash->info_ptr, 0, size))
1531 	{
1532 	  stash->info_ptr = 0;
1533 	  return false;
1534 	}
1535 
1536       stash->info_ptr_end = stash->info_ptr + size;
1537 
1538       /* FIXME: There is a problem with the contents of the
1539 	 .debug_info section.  The 'low' and 'high' addresses of the
1540 	 comp_units are computed by relocs against symbols in the
1541 	 .text segment.  We need these addresses in order to determine
1542 	 the nearest line number, and so we have to resolve the
1543 	 relocs.  There is a similar problem when the .debug_line
1544 	 section is processed as well (e.g., there may be relocs
1545 	 against the operand of the DW_LNE_set_address operator).
1546 
1547 	 Unfortunately getting hold of the reloc information is hard...
1548 
1549 	 For now, this means that disassembling object files (as
1550 	 opposed to fully executables) does not always work as well as
1551 	 we would like.  */
1552     }
1553 
1554   /* A null info_ptr indicates that there is no dwarf2 info
1555      (or that an error occured while setting up the stash). */
1556 
1557   if (! stash->info_ptr)
1558     return false;
1559 
1560   /* Check the previously read comp. units first. */
1561 
1562   for (each = stash->all_comp_units; each; each = each->next_unit)
1563     if (comp_unit_contains_address (each, addr))
1564       return comp_unit_find_nearest_line (each, addr, filename_ptr,
1565 					  functionname_ptr, linenumber_ptr);
1566 
1567   /* Read each remaining comp. units checking each as they are read. */
1568   while (stash->info_ptr < stash->info_ptr_end)
1569     {
1570       struct comp_unit* each;
1571       bfd_vma length;
1572       boolean found;
1573 
1574       if (addr_size == 4)
1575 	length = read_4_bytes (abfd, stash->info_ptr);
1576       else
1577 	length = read_8_bytes (abfd, stash->info_ptr);
1578       stash->info_ptr += addr_size;
1579 
1580       if (length > 0)
1581         {
1582 	  each = parse_comp_unit (abfd, stash->info_ptr,
1583 				  stash->info_ptr + length,
1584 				  addr_size);
1585 	  stash->info_ptr += length;
1586 
1587 	  if (each)
1588 	    {
1589 	      each->next_unit = stash->all_comp_units;
1590 	      stash->all_comp_units = each;
1591 
1592 	      /* DW_AT_low_pc and DW_AT_high_pc are optional for
1593 		 compilation units.  If we don't have them (i.e.,
1594 		 unit->high == 0), we need to consult the line info
1595 		 table to see if a compilation unit contains the given
1596 		 address. */
1597 	      if (each->arange.high > 0)
1598 		{
1599 		  if (comp_unit_contains_address (each, addr))
1600 		    return comp_unit_find_nearest_line (each, addr,
1601 						       filename_ptr,
1602 						       functionname_ptr,
1603 						       linenumber_ptr);
1604 		}
1605 	      else
1606 		{
1607 		  found = comp_unit_find_nearest_line (each, addr,
1608 						       filename_ptr,
1609 						       functionname_ptr,
1610 						       linenumber_ptr);
1611 		  if (found)
1612 		    return true;
1613 		}
1614 	    }
1615 	}
1616     }
1617 
1618   return false;
1619 }
1620 
1621 /* end of file */
1622