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