2002-09-20 Nathanael Nerode <neroden@gcc.gnu.org>
[binutils.git] / bfd / dwarf2.c
blob1cdd46156bba02b0bc5f19dad5fa927d8860c559
1 /* DWARF 2 support.
2 Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
3 Free Software Foundation, Inc.
5 Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
6 (gavin@cygnus.com).
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
16 This file is part of BFD.
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.
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.
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. */
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"
39 /* The data in the .debug_line statement prologue looks like this. */
41 struct line_head
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;
54 /* Attributes have a name and a value. */
56 struct attribute
58 enum dwarf_attribute name;
59 enum dwarf_form form;
60 union
62 char *str;
63 struct dwarf_block *blk;
64 unsigned int unsnd;
65 int snd;
66 bfd_vma addr;
71 /* Get at parts of an attribute structure. */
73 #define DW_STRING(attr) ((attr)->u.str)
74 #define DW_UNSND(attr) ((attr)->u.unsnd)
75 #define DW_BLOCK(attr) ((attr)->u.blk)
76 #define DW_SND(attr) ((attr)->u.snd)
77 #define DW_ADDR(attr) ((attr)->u.addr)
79 /* Blocks are a bunch of untyped bytes. */
80 struct dwarf_block
82 unsigned int size;
83 char *data;
86 struct dwarf2_debug
88 /* A list of all previously read comp_units. */
89 struct comp_unit* all_comp_units;
91 /* The next unread compilation unit within the .debug_info section.
92 Zero indicates that the .debug_info section has not been loaded
93 into a buffer yet. */
94 char* info_ptr;
96 /* Pointer to the end of the .debug_info section memory buffer. */
97 char* info_ptr_end;
99 /* Pointer to the section and address of the beginning of the
100 section. */
101 asection* sec;
102 char* sec_info_ptr;
104 /* Pointer to the symbol table. */
105 asymbol** syms;
107 /* Pointer to the .debug_abbrev section loaded into memory. */
108 char* dwarf_abbrev_buffer;
110 /* Length of the loaded .debug_abbrev section. */
111 unsigned long dwarf_abbrev_size;
113 /* Buffer for decode_line_info. */
114 char *dwarf_line_buffer;
116 /* Length of the loaded .debug_line section. */
117 unsigned long dwarf_line_size;
119 /* Pointer to the .debug_str section loaded into memory. */
120 char* dwarf_str_buffer;
122 /* Length of the loaded .debug_str section. */
123 unsigned long dwarf_str_size;
126 struct arange
128 struct arange *next;
129 bfd_vma low;
130 bfd_vma high;
133 /* A minimal decoding of DWARF2 compilation units. We only decode
134 what's needed to get to the line number information. */
136 struct comp_unit
138 /* Chain the previously read compilation units. */
139 struct comp_unit* next_unit;
141 /* Keep the bdf convenient (for memory allocation). */
142 bfd* abfd;
144 /* The lowest and higest addresses contained in this compilation
145 unit as specified in the compilation unit header. */
146 struct arange arange;
148 /* The DW_AT_name attribute (for error messages). */
149 char* name;
151 /* The abbrev hash table. */
152 struct abbrev_info** abbrevs;
154 /* Note that an error was found by comp_unit_find_nearest_line. */
155 int error;
157 /* The DW_AT_comp_dir attribute. */
158 char* comp_dir;
160 /* True if there is a line number table associated with this comp. unit. */
161 int stmtlist;
163 /* The offset into .debug_line of the line number table. */
164 unsigned long line_offset;
166 /* Pointer to the first child die for the comp unit. */
167 char *first_child_die_ptr;
169 /* The end of the comp unit. */
170 char *end_ptr;
172 /* The decoded line number, NULL if not yet decoded. */
173 struct line_info_table* line_table;
175 /* A list of the functions found in this comp. unit. */
176 struct funcinfo* function_table;
178 /* Pointer to dwarf2_debug structure. */
179 struct dwarf2_debug *stash;
181 /* Address size for this unit - from unit header. */
182 unsigned char addr_size;
184 /* Offset size for this unit - from unit header. */
185 unsigned char offset_size;
188 /* This data structure holds the information of an abbrev. */
189 struct abbrev_info
191 unsigned int number; /* Number identifying abbrev. */
192 enum dwarf_tag tag; /* DWARF tag. */
193 int has_children; /* Boolean. */
194 unsigned int num_attrs; /* Number of attributes. */
195 struct attr_abbrev *attrs; /* An array of attribute descriptions. */
196 struct abbrev_info *next; /* Next in chain. */
199 struct attr_abbrev
201 enum dwarf_attribute name;
202 enum dwarf_form form;
205 #ifndef ABBREV_HASH_SIZE
206 #define ABBREV_HASH_SIZE 121
207 #endif
208 #ifndef ATTR_ALLOC_CHUNK
209 #define ATTR_ALLOC_CHUNK 4
210 #endif
212 static unsigned int read_1_byte PARAMS ((bfd *, char *));
213 static int read_1_signed_byte PARAMS ((bfd *, char *));
214 static unsigned int read_2_bytes PARAMS ((bfd *, char *));
215 static unsigned int read_4_bytes PARAMS ((bfd *, char *));
216 static bfd_vma read_8_bytes PARAMS ((bfd *, char *));
217 static char *read_n_bytes PARAMS ((bfd *, char *, unsigned int));
218 static char *read_string PARAMS ((bfd *, char *, unsigned int *));
219 static char *read_indirect_string PARAMS ((struct comp_unit *, char *, unsigned int *));
220 static unsigned int read_unsigned_leb128
221 PARAMS ((bfd *, char *, unsigned int *));
222 static int read_signed_leb128
223 PARAMS ((bfd *, char *, unsigned int *));
224 static bfd_vma read_address PARAMS ((struct comp_unit *, char *));
225 static struct abbrev_info *lookup_abbrev
226 PARAMS ((unsigned int, struct abbrev_info **));
227 static struct abbrev_info **read_abbrevs
228 PARAMS ((bfd *, bfd_vma, struct dwarf2_debug *));
229 static char *read_attribute
230 PARAMS ((struct attribute *, struct attr_abbrev *,
231 struct comp_unit *, char *));
232 static char *read_attribute_value
233 PARAMS ((struct attribute *, unsigned,
234 struct comp_unit *, char *));
235 static void add_line_info
236 PARAMS ((struct line_info_table *, bfd_vma, char *,
237 unsigned int, unsigned int, int));
238 static char *concat_filename PARAMS ((struct line_info_table *, unsigned int));
239 static void arange_add PARAMS ((struct comp_unit *, bfd_vma, bfd_vma));
240 static struct line_info_table *decode_line_info
241 PARAMS ((struct comp_unit *, struct dwarf2_debug *));
242 static boolean lookup_address_in_line_info_table
243 PARAMS ((struct line_info_table *, bfd_vma, struct funcinfo *,
244 const char **, unsigned int *));
245 static boolean lookup_address_in_function_table
246 PARAMS ((struct funcinfo *, bfd_vma, struct funcinfo **, const char **));
247 static boolean scan_unit_for_functions PARAMS ((struct comp_unit *));
248 static bfd_vma find_rela_addend
249 PARAMS ((bfd *, asection *, bfd_size_type, asymbol**));
250 static struct comp_unit *parse_comp_unit
251 PARAMS ((bfd *, struct dwarf2_debug *, bfd_vma, unsigned int));
252 static boolean comp_unit_contains_address
253 PARAMS ((struct comp_unit *, bfd_vma));
254 static boolean comp_unit_find_nearest_line
255 PARAMS ((struct comp_unit *, bfd_vma, const char **, const char **,
256 unsigned int *, struct dwarf2_debug *));
257 static asection *find_debug_info PARAMS ((bfd *, asection *));
259 /* VERBATIM
260 The following function up to the END VERBATIM mark are
261 copied directly from dwarf2read.c. */
263 /* Read dwarf information from a buffer. */
265 static unsigned int
266 read_1_byte (abfd, buf)
267 bfd *abfd ATTRIBUTE_UNUSED;
268 char *buf;
270 return bfd_get_8 (abfd, (bfd_byte *) buf);
273 static int
274 read_1_signed_byte (abfd, buf)
275 bfd *abfd ATTRIBUTE_UNUSED;
276 char *buf;
278 return bfd_get_signed_8 (abfd, (bfd_byte *) buf);
281 static unsigned int
282 read_2_bytes (abfd, buf)
283 bfd *abfd;
284 char *buf;
286 return bfd_get_16 (abfd, (bfd_byte *) buf);
289 #if 0 /* This is not used. */
291 static int
292 read_2_signed_bytes (abfd, buf)
293 bfd *abfd;
294 char *buf;
296 return bfd_get_signed_16 (abfd, (bfd_byte *) buf);
299 #endif
301 static unsigned int
302 read_4_bytes (abfd, buf)
303 bfd *abfd;
304 char *buf;
306 return bfd_get_32 (abfd, (bfd_byte *) buf);
309 #if 0 /* This is not used. */
311 static int
312 read_4_signed_bytes (abfd, buf)
313 bfd *abfd;
314 char *buf;
316 return bfd_get_signed_32 (abfd, (bfd_byte *) buf);
319 #endif
321 static bfd_vma
322 read_8_bytes (abfd, buf)
323 bfd *abfd;
324 char *buf;
326 return bfd_get_64 (abfd, (bfd_byte *) buf);
329 static char *
330 read_n_bytes (abfd, buf, size)
331 bfd *abfd ATTRIBUTE_UNUSED;
332 char *buf;
333 unsigned int size ATTRIBUTE_UNUSED;
335 /* If the size of a host char is 8 bits, we can return a pointer
336 to the buffer, otherwise we have to copy the data to a buffer
337 allocated on the temporary obstack. */
338 return buf;
341 static char *
342 read_string (abfd, buf, bytes_read_ptr)
343 bfd *abfd ATTRIBUTE_UNUSED;
344 char *buf;
345 unsigned int *bytes_read_ptr;
347 /* Return a pointer to the embedded string. */
348 if (*buf == '\0')
350 *bytes_read_ptr = 1;
351 return NULL;
354 *bytes_read_ptr = strlen (buf) + 1;
355 return buf;
358 static char *
359 read_indirect_string (unit, buf, bytes_read_ptr)
360 struct comp_unit* unit;
361 char *buf;
362 unsigned int *bytes_read_ptr;
364 bfd_vma offset;
365 struct dwarf2_debug *stash = unit->stash;
367 if (unit->offset_size == 4)
368 offset = read_4_bytes (unit->abfd, buf);
369 else
370 offset = read_8_bytes (unit->abfd, buf);
371 *bytes_read_ptr = unit->offset_size;
373 if (! stash->dwarf_str_buffer)
375 asection *msec;
376 bfd *abfd = unit->abfd;
378 msec = bfd_get_section_by_name (abfd, ".debug_str");
379 if (! msec)
381 (*_bfd_error_handler)
382 (_("Dwarf Error: Can't find .debug_str section."));
383 bfd_set_error (bfd_error_bad_value);
384 return NULL;
387 stash->dwarf_str_size = msec->_raw_size;
388 stash->dwarf_str_buffer = (char*) bfd_alloc (abfd, msec->_raw_size);
389 if (! stash->dwarf_abbrev_buffer)
390 return NULL;
392 if (! bfd_get_section_contents (abfd, msec, stash->dwarf_str_buffer,
393 (bfd_vma) 0, msec->_raw_size))
394 return NULL;
397 if (offset >= stash->dwarf_str_size)
399 (*_bfd_error_handler) (_("Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)."),
400 (unsigned long) offset, stash->dwarf_str_size);
401 bfd_set_error (bfd_error_bad_value);
402 return NULL;
405 buf = stash->dwarf_str_buffer + offset;
406 if (*buf == '\0')
407 return NULL;
408 return buf;
411 static unsigned int
412 read_unsigned_leb128 (abfd, buf, bytes_read_ptr)
413 bfd *abfd ATTRIBUTE_UNUSED;
414 char *buf;
415 unsigned int *bytes_read_ptr;
417 unsigned int result;
418 unsigned int num_read;
419 int shift;
420 unsigned char byte;
422 result = 0;
423 shift = 0;
424 num_read = 0;
428 byte = bfd_get_8 (abfd, (bfd_byte *) buf);
429 buf ++;
430 num_read ++;
431 result |= ((byte & 0x7f) << shift);
432 shift += 7;
434 while (byte & 0x80);
436 * bytes_read_ptr = num_read;
438 return result;
441 static int
442 read_signed_leb128 (abfd, buf, bytes_read_ptr)
443 bfd *abfd ATTRIBUTE_UNUSED;
444 char *buf;
445 unsigned int * bytes_read_ptr;
447 int result;
448 int shift;
449 int num_read;
450 unsigned char byte;
452 result = 0;
453 shift = 0;
454 num_read = 0;
458 byte = bfd_get_8 (abfd, (bfd_byte *) buf);
459 buf ++;
460 num_read ++;
461 result |= ((byte & 0x7f) << shift);
462 shift += 7;
464 while (byte & 0x80);
466 if ((shift < 32) && (byte & 0x40))
467 result |= -(1 << shift);
469 * bytes_read_ptr = num_read;
471 return result;
474 /* END VERBATIM */
476 static bfd_vma
477 read_address (unit, buf)
478 struct comp_unit* unit;
479 char *buf;
481 switch (unit->addr_size)
483 case 8:
484 return bfd_get_64 (unit->abfd, (bfd_byte *) buf);
485 case 4:
486 return bfd_get_32 (unit->abfd, (bfd_byte *) buf);
487 case 2:
488 return bfd_get_16 (unit->abfd, (bfd_byte *) buf);
489 default:
490 abort ();
494 /* Lookup an abbrev_info structure in the abbrev hash table. */
496 static struct abbrev_info *
497 lookup_abbrev (number,abbrevs)
498 unsigned int number;
499 struct abbrev_info **abbrevs;
501 unsigned int hash_number;
502 struct abbrev_info *abbrev;
504 hash_number = number % ABBREV_HASH_SIZE;
505 abbrev = abbrevs[hash_number];
507 while (abbrev)
509 if (abbrev->number == number)
510 return abbrev;
511 else
512 abbrev = abbrev->next;
515 return NULL;
518 /* In DWARF version 2, the description of the debugging information is
519 stored in a separate .debug_abbrev section. Before we read any
520 dies from a section we read in all abbreviations and install them
521 in a hash table. */
523 static struct abbrev_info**
524 read_abbrevs (abfd, offset, stash)
525 bfd * abfd;
526 bfd_vma offset;
527 struct dwarf2_debug *stash;
529 struct abbrev_info **abbrevs;
530 char *abbrev_ptr;
531 struct abbrev_info *cur_abbrev;
532 unsigned int abbrev_number, bytes_read, abbrev_name;
533 unsigned int abbrev_form, hash_number;
534 bfd_size_type amt;
536 if (! stash->dwarf_abbrev_buffer)
538 asection *msec;
540 msec = bfd_get_section_by_name (abfd, ".debug_abbrev");
541 if (! msec)
543 (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_abbrev section."));
544 bfd_set_error (bfd_error_bad_value);
545 return 0;
548 stash->dwarf_abbrev_size = msec->_raw_size;
549 stash->dwarf_abbrev_buffer = (char*) bfd_alloc (abfd, msec->_raw_size);
550 if (! stash->dwarf_abbrev_buffer)
551 return 0;
553 if (! bfd_get_section_contents (abfd, msec, stash->dwarf_abbrev_buffer,
554 (bfd_vma) 0, msec->_raw_size))
555 return 0;
558 if (offset >= stash->dwarf_abbrev_size)
560 (*_bfd_error_handler) (_("Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)."),
561 (unsigned long) offset, stash->dwarf_abbrev_size);
562 bfd_set_error (bfd_error_bad_value);
563 return 0;
566 amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE;
567 abbrevs = (struct abbrev_info**) bfd_zalloc (abfd, amt);
569 abbrev_ptr = stash->dwarf_abbrev_buffer + offset;
570 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
571 abbrev_ptr += bytes_read;
573 /* Loop until we reach an abbrev number of 0. */
574 while (abbrev_number)
576 amt = sizeof (struct abbrev_info);
577 cur_abbrev = (struct abbrev_info *) bfd_zalloc (abfd, amt);
579 /* Read in abbrev header. */
580 cur_abbrev->number = abbrev_number;
581 cur_abbrev->tag = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
582 abbrev_ptr += bytes_read;
583 cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
584 abbrev_ptr += 1;
586 /* Now read in declarations. */
587 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
588 abbrev_ptr += bytes_read;
589 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
590 abbrev_ptr += bytes_read;
592 while (abbrev_name)
594 if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
596 amt = cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK;
597 amt *= sizeof (struct attr_abbrev);
598 cur_abbrev->attrs = ((struct attr_abbrev *)
599 bfd_realloc (cur_abbrev->attrs, amt));
600 if (! cur_abbrev->attrs)
601 return 0;
604 cur_abbrev->attrs[cur_abbrev->num_attrs].name = abbrev_name;
605 cur_abbrev->attrs[cur_abbrev->num_attrs++].form = abbrev_form;
606 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
607 abbrev_ptr += bytes_read;
608 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
609 abbrev_ptr += bytes_read;
612 hash_number = abbrev_number % ABBREV_HASH_SIZE;
613 cur_abbrev->next = abbrevs[hash_number];
614 abbrevs[hash_number] = cur_abbrev;
616 /* Get next abbreviation.
617 Under Irix6 the abbreviations for a compilation unit are not
618 always properly terminated with an abbrev number of 0.
619 Exit loop if we encounter an abbreviation which we have
620 already read (which means we are about to read the abbreviations
621 for the next compile unit) or if the end of the abbreviation
622 table is reached. */
623 if ((unsigned int) (abbrev_ptr - stash->dwarf_abbrev_buffer)
624 >= stash->dwarf_abbrev_size)
625 break;
626 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
627 abbrev_ptr += bytes_read;
628 if (lookup_abbrev (abbrev_number,abbrevs) != NULL)
629 break;
632 return abbrevs;
635 /* Read an attribute value described by an attribute form. */
637 static char *
638 read_attribute_value (attr, form, unit, info_ptr)
639 struct attribute *attr;
640 unsigned form;
641 struct comp_unit *unit;
642 char *info_ptr;
644 bfd *abfd = unit->abfd;
645 unsigned int bytes_read;
646 struct dwarf_block *blk;
647 bfd_size_type amt;
649 attr->form = form;
651 switch (form)
653 case DW_FORM_addr:
654 /* FIXME: DWARF3 draft sais DW_FORM_ref_addr is offset_size. */
655 case DW_FORM_ref_addr:
656 DW_ADDR (attr) = read_address (unit, info_ptr);
657 info_ptr += unit->addr_size;
658 break;
659 case DW_FORM_block2:
660 amt = sizeof (struct dwarf_block);
661 blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
662 blk->size = read_2_bytes (abfd, info_ptr);
663 info_ptr += 2;
664 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
665 info_ptr += blk->size;
666 DW_BLOCK (attr) = blk;
667 break;
668 case DW_FORM_block4:
669 amt = sizeof (struct dwarf_block);
670 blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
671 blk->size = read_4_bytes (abfd, info_ptr);
672 info_ptr += 4;
673 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
674 info_ptr += blk->size;
675 DW_BLOCK (attr) = blk;
676 break;
677 case DW_FORM_data2:
678 DW_UNSND (attr) = read_2_bytes (abfd, info_ptr);
679 info_ptr += 2;
680 break;
681 case DW_FORM_data4:
682 DW_UNSND (attr) = read_4_bytes (abfd, info_ptr);
683 info_ptr += 4;
684 break;
685 case DW_FORM_data8:
686 DW_UNSND (attr) = read_8_bytes (abfd, info_ptr);
687 info_ptr += 8;
688 break;
689 case DW_FORM_string:
690 DW_STRING (attr) = read_string (abfd, info_ptr, &bytes_read);
691 info_ptr += bytes_read;
692 break;
693 case DW_FORM_strp:
694 DW_STRING (attr) = read_indirect_string (unit, info_ptr, &bytes_read);
695 info_ptr += bytes_read;
696 break;
697 case DW_FORM_block:
698 amt = sizeof (struct dwarf_block);
699 blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
700 blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
701 info_ptr += bytes_read;
702 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
703 info_ptr += blk->size;
704 DW_BLOCK (attr) = blk;
705 break;
706 case DW_FORM_block1:
707 amt = sizeof (struct dwarf_block);
708 blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
709 blk->size = read_1_byte (abfd, info_ptr);
710 info_ptr += 1;
711 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
712 info_ptr += blk->size;
713 DW_BLOCK (attr) = blk;
714 break;
715 case DW_FORM_data1:
716 DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
717 info_ptr += 1;
718 break;
719 case DW_FORM_flag:
720 DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
721 info_ptr += 1;
722 break;
723 case DW_FORM_sdata:
724 DW_SND (attr) = read_signed_leb128 (abfd, info_ptr, &bytes_read);
725 info_ptr += bytes_read;
726 break;
727 case DW_FORM_udata:
728 DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
729 info_ptr += bytes_read;
730 break;
731 case DW_FORM_ref1:
732 DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
733 info_ptr += 1;
734 break;
735 case DW_FORM_ref2:
736 DW_UNSND (attr) = read_2_bytes (abfd, info_ptr);
737 info_ptr += 2;
738 break;
739 case DW_FORM_ref4:
740 DW_UNSND (attr) = read_4_bytes (abfd, info_ptr);
741 info_ptr += 4;
742 break;
743 case DW_FORM_ref8:
744 DW_UNSND (attr) = read_8_bytes (abfd, info_ptr);
745 info_ptr += 8;
746 break;
747 case DW_FORM_ref_udata:
748 DW_UNSND (attr) = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
749 info_ptr += bytes_read;
750 break;
751 case DW_FORM_indirect:
752 form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
753 info_ptr += bytes_read;
754 info_ptr = read_attribute_value (attr, form, unit, info_ptr);
755 break;
756 default:
757 (*_bfd_error_handler) (_("Dwarf Error: Invalid or unhandled FORM value: %u."),
758 form);
759 bfd_set_error (bfd_error_bad_value);
761 return info_ptr;
764 /* Read an attribute described by an abbreviated attribute. */
766 static char *
767 read_attribute (attr, abbrev, unit, info_ptr)
768 struct attribute *attr;
769 struct attr_abbrev *abbrev;
770 struct comp_unit *unit;
771 char *info_ptr;
773 attr->name = abbrev->name;
774 info_ptr = read_attribute_value (attr, abbrev->form, unit, info_ptr);
775 return info_ptr;
778 /* Source line information table routines. */
780 #define FILE_ALLOC_CHUNK 5
781 #define DIR_ALLOC_CHUNK 5
783 struct line_info
785 struct line_info* prev_line;
786 bfd_vma address;
787 char* filename;
788 unsigned int line;
789 unsigned int column;
790 int end_sequence; /* End of (sequential) code sequence. */
793 struct fileinfo
795 char *name;
796 unsigned int dir;
797 unsigned int time;
798 unsigned int size;
801 struct line_info_table
803 bfd* abfd;
804 unsigned int num_files;
805 unsigned int num_dirs;
806 char* comp_dir;
807 char** dirs;
808 struct fileinfo* files;
809 struct line_info* last_line;
812 struct funcinfo
814 struct funcinfo *prev_func;
815 char* name;
816 bfd_vma low;
817 bfd_vma high;
820 static void
821 add_line_info (table, address, filename, line, column, end_sequence)
822 struct line_info_table* table;
823 bfd_vma address;
824 char* filename;
825 unsigned int line;
826 unsigned int column;
827 int end_sequence;
829 bfd_size_type amt = sizeof (struct line_info);
830 struct line_info* info = (struct line_info*) bfd_alloc (table->abfd, amt);
832 info->prev_line = table->last_line;
833 table->last_line = info;
835 info->address = address;
836 info->filename = filename;
837 info->line = line;
838 info->column = column;
839 info->end_sequence = end_sequence;
842 static char *
843 concat_filename (table, file)
844 struct line_info_table* table;
845 unsigned int file;
847 char* filename;
849 if (file - 1 >= table->num_files)
851 (*_bfd_error_handler)
852 (_("Dwarf Error: mangled line number section (bad file number)."));
853 return "<unknown>";
856 filename = table->files[file - 1].name;
857 if (IS_ABSOLUTE_PATH(filename))
858 return filename;
859 else
861 char* dirname = (table->files[file - 1].dir
862 ? table->dirs[table->files[file - 1].dir - 1]
863 : table->comp_dir);
865 /* Not all tools set DW_AT_comp_dir, so dirname may be unknown. The
866 best we can do is return the filename part. */
867 if (dirname == NULL)
868 return filename;
869 else
870 return (char*) concat (dirname, "/", filename, NULL);
874 static void
875 arange_add (unit, low_pc, high_pc)
876 struct comp_unit *unit;
877 bfd_vma low_pc;
878 bfd_vma high_pc;
880 struct arange *arange;
882 /* First see if we can cheaply extend an existing range. */
883 arange = &unit->arange;
887 if (low_pc == arange->high)
889 arange->high = high_pc;
890 return;
892 if (high_pc == arange->low)
894 arange->low = low_pc;
895 return;
897 arange = arange->next;
899 while (arange);
901 if (unit->arange.high == 0)
903 /* This is the first address range: store it in unit->arange. */
904 unit->arange.next = 0;
905 unit->arange.low = low_pc;
906 unit->arange.high = high_pc;
907 return;
910 /* Need to allocate a new arange and insert it into the arange list. */
911 arange = bfd_zalloc (unit->abfd, (bfd_size_type) sizeof (*arange));
912 arange->low = low_pc;
913 arange->high = high_pc;
915 arange->next = unit->arange.next;
916 unit->arange.next = arange;
919 /* Decode the line number information for UNIT. */
921 static struct line_info_table*
922 decode_line_info (unit, stash)
923 struct comp_unit *unit;
924 struct dwarf2_debug *stash;
926 bfd *abfd = unit->abfd;
927 struct line_info_table* table;
928 char *line_ptr;
929 char *line_end;
930 struct line_head lh;
931 unsigned int i, bytes_read, offset_size;
932 char *cur_file, *cur_dir;
933 unsigned char op_code, extended_op, adj_opcode;
934 bfd_size_type amt;
936 if (! stash->dwarf_line_buffer)
938 asection *msec;
940 msec = bfd_get_section_by_name (abfd, ".debug_line");
941 if (! msec)
943 (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_line section."));
944 bfd_set_error (bfd_error_bad_value);
945 return 0;
948 stash->dwarf_line_size = msec->_raw_size;
949 stash->dwarf_line_buffer = (char *) bfd_alloc (abfd, msec->_raw_size);
950 if (! stash->dwarf_line_buffer)
951 return 0;
953 if (! bfd_get_section_contents (abfd, msec, stash->dwarf_line_buffer,
954 (bfd_vma) 0, msec->_raw_size))
955 return 0;
957 /* FIXME: We ought to apply the relocs against this section before
958 we process it... */
961 /* Since we are using un-relocated data, it is possible to get a bad value
962 for the line_offset. Validate it here so that we won't get a segfault
963 below. */
964 if (unit->line_offset >= stash->dwarf_line_size)
966 (*_bfd_error_handler) (_("Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)."),
967 unit->line_offset, stash->dwarf_line_size);
968 bfd_set_error (bfd_error_bad_value);
969 return 0;
972 amt = sizeof (struct line_info_table);
973 table = (struct line_info_table*) bfd_alloc (abfd, amt);
974 table->abfd = abfd;
975 table->comp_dir = unit->comp_dir;
977 table->num_files = 0;
978 table->files = NULL;
980 table->num_dirs = 0;
981 table->dirs = NULL;
983 table->files = NULL;
984 table->last_line = NULL;
986 line_ptr = stash->dwarf_line_buffer + unit->line_offset;
988 /* Read in the prologue. */
989 lh.total_length = read_4_bytes (abfd, line_ptr);
990 line_ptr += 4;
991 offset_size = 4;
992 if (lh.total_length == 0xffffffff)
994 lh.total_length = read_8_bytes (abfd, line_ptr);
995 line_ptr += 8;
996 offset_size = 8;
998 else if (lh.total_length == 0 && unit->addr_size == 8)
1000 /* Handle (non-standard) 64-bit DWARF2 formats. */
1001 lh.total_length = read_4_bytes (abfd, line_ptr);
1002 line_ptr += 4;
1003 offset_size = 8;
1005 line_end = line_ptr + lh.total_length;
1006 lh.version = read_2_bytes (abfd, line_ptr);
1007 line_ptr += 2;
1008 if (offset_size == 4)
1009 lh.prologue_length = read_4_bytes (abfd, line_ptr);
1010 else
1011 lh.prologue_length = read_8_bytes (abfd, line_ptr);
1012 line_ptr += offset_size;
1013 lh.minimum_instruction_length = read_1_byte (abfd, line_ptr);
1014 line_ptr += 1;
1015 lh.default_is_stmt = read_1_byte (abfd, line_ptr);
1016 line_ptr += 1;
1017 lh.line_base = read_1_signed_byte (abfd, line_ptr);
1018 line_ptr += 1;
1019 lh.line_range = read_1_byte (abfd, line_ptr);
1020 line_ptr += 1;
1021 lh.opcode_base = read_1_byte (abfd, line_ptr);
1022 line_ptr += 1;
1023 amt = lh.opcode_base * sizeof (unsigned char);
1024 lh.standard_opcode_lengths = (unsigned char *) bfd_alloc (abfd, amt);
1026 lh.standard_opcode_lengths[0] = 1;
1028 for (i = 1; i < lh.opcode_base; ++i)
1030 lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
1031 line_ptr += 1;
1034 /* Read directory table. */
1035 while ((cur_dir = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1037 line_ptr += bytes_read;
1039 if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
1041 amt = table->num_dirs + DIR_ALLOC_CHUNK;
1042 amt *= sizeof (char *);
1043 table->dirs = (char **) bfd_realloc (table->dirs, amt);
1044 if (! table->dirs)
1045 return 0;
1048 table->dirs[table->num_dirs++] = cur_dir;
1051 line_ptr += bytes_read;
1053 /* Read file name table. */
1054 while ((cur_file = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1056 line_ptr += bytes_read;
1058 if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1060 amt = table->num_files + FILE_ALLOC_CHUNK;
1061 amt *= sizeof (struct fileinfo);
1062 table->files = (struct fileinfo *) bfd_realloc (table->files, amt);
1063 if (! table->files)
1064 return 0;
1067 table->files[table->num_files].name = cur_file;
1068 table->files[table->num_files].dir =
1069 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1070 line_ptr += bytes_read;
1071 table->files[table->num_files].time =
1072 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1073 line_ptr += bytes_read;
1074 table->files[table->num_files].size =
1075 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1076 line_ptr += bytes_read;
1077 table->num_files++;
1080 line_ptr += bytes_read;
1082 /* Read the statement sequences until there's nothing left. */
1083 while (line_ptr < line_end)
1085 /* State machine registers. */
1086 bfd_vma address = 0;
1087 char* filename = concat_filename (table, 1);
1088 unsigned int line = 1;
1089 unsigned int column = 0;
1090 int is_stmt = lh.default_is_stmt;
1091 int basic_block = 0;
1092 int end_sequence = 0, need_low_pc = 1;
1093 bfd_vma low_pc = 0;
1095 /* Decode the table. */
1096 while (! end_sequence)
1098 op_code = read_1_byte (abfd, line_ptr);
1099 line_ptr += 1;
1101 if (op_code >= lh.opcode_base)
1102 { /* Special operand. */
1103 adj_opcode = op_code - lh.opcode_base;
1104 address += (adj_opcode / lh.line_range)
1105 * lh.minimum_instruction_length;
1106 line += lh.line_base + (adj_opcode % lh.line_range);
1107 /* Append row to matrix using current values. */
1108 add_line_info (table, address, filename, line, column, 0);
1109 basic_block = 1;
1110 if (need_low_pc)
1112 need_low_pc = 0;
1113 low_pc = address;
1116 else switch (op_code)
1118 case DW_LNS_extended_op:
1119 line_ptr += 1; /* Ignore length. */
1120 extended_op = read_1_byte (abfd, line_ptr);
1121 line_ptr += 1;
1122 switch (extended_op)
1124 case DW_LNE_end_sequence:
1125 end_sequence = 1;
1126 add_line_info (table, address, filename, line, column,
1127 end_sequence);
1128 if (need_low_pc)
1130 need_low_pc = 0;
1131 low_pc = address;
1133 arange_add (unit, low_pc, address);
1134 break;
1135 case DW_LNE_set_address:
1136 address = read_address (unit, line_ptr);
1137 line_ptr += unit->addr_size;
1138 break;
1139 case DW_LNE_define_file:
1140 cur_file = read_string (abfd, line_ptr, &bytes_read);
1141 line_ptr += bytes_read;
1142 if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1144 amt = table->num_files + FILE_ALLOC_CHUNK;
1145 amt *= sizeof (struct fileinfo);
1146 table->files =
1147 (struct fileinfo *) bfd_realloc (table->files, amt);
1148 if (! table->files)
1149 return 0;
1151 table->files[table->num_files].name = cur_file;
1152 table->files[table->num_files].dir =
1153 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1154 line_ptr += bytes_read;
1155 table->files[table->num_files].time =
1156 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1157 line_ptr += bytes_read;
1158 table->files[table->num_files].size =
1159 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1160 line_ptr += bytes_read;
1161 table->num_files++;
1162 break;
1163 default:
1164 (*_bfd_error_handler) (_("Dwarf Error: mangled line number section."));
1165 bfd_set_error (bfd_error_bad_value);
1166 return 0;
1168 break;
1169 case DW_LNS_copy:
1170 add_line_info (table, address, filename, line, column, 0);
1171 basic_block = 0;
1172 if (need_low_pc)
1174 need_low_pc = 0;
1175 low_pc = address;
1177 break;
1178 case DW_LNS_advance_pc:
1179 address += lh.minimum_instruction_length
1180 * read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1181 line_ptr += bytes_read;
1182 break;
1183 case DW_LNS_advance_line:
1184 line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
1185 line_ptr += bytes_read;
1186 break;
1187 case DW_LNS_set_file:
1189 unsigned int file;
1191 /* The file and directory tables are 0 based, the references
1192 are 1 based. */
1193 file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1194 line_ptr += bytes_read;
1195 filename = concat_filename (table, file);
1196 break;
1198 case DW_LNS_set_column:
1199 column = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1200 line_ptr += bytes_read;
1201 break;
1202 case DW_LNS_negate_stmt:
1203 is_stmt = (!is_stmt);
1204 break;
1205 case DW_LNS_set_basic_block:
1206 basic_block = 1;
1207 break;
1208 case DW_LNS_const_add_pc:
1209 address += lh.minimum_instruction_length
1210 * ((255 - lh.opcode_base) / lh.line_range);
1211 break;
1212 case DW_LNS_fixed_advance_pc:
1213 address += read_2_bytes (abfd, line_ptr);
1214 line_ptr += 2;
1215 break;
1216 default:
1217 { /* Unknown standard opcode, ignore it. */
1218 int i;
1219 for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
1221 (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1222 line_ptr += bytes_read;
1229 return table;
1232 /* If ADDR is within TABLE set the output parameters and return true,
1233 otherwise return false. The output parameters, FILENAME_PTR and
1234 LINENUMBER_PTR, are pointers to the objects to be filled in. */
1236 static boolean
1237 lookup_address_in_line_info_table (table,
1238 addr,
1239 function,
1240 filename_ptr,
1241 linenumber_ptr)
1242 struct line_info_table* table;
1243 bfd_vma addr;
1244 struct funcinfo *function;
1245 const char **filename_ptr;
1246 unsigned int *linenumber_ptr;
1248 struct line_info* next_line = table->last_line;
1249 struct line_info* each_line;
1251 if (!next_line)
1252 return false;
1254 each_line = next_line->prev_line;
1256 while (each_line && next_line)
1258 if (!each_line->end_sequence
1259 && addr >= each_line->address && addr < next_line->address)
1261 /* If this line appears to span functions, and addr is in the
1262 later function, return the first line of that function instead
1263 of the last line of the earlier one. This check is for GCC
1264 2.95, which emits the first line number for a function late. */
1265 if (function != NULL
1266 && each_line->address < function->low
1267 && next_line->address > function->low)
1269 *filename_ptr = next_line->filename;
1270 *linenumber_ptr = next_line->line;
1272 else
1274 *filename_ptr = each_line->filename;
1275 *linenumber_ptr = each_line->line;
1277 return true;
1279 next_line = each_line;
1280 each_line = each_line->prev_line;
1283 /* At this point each_line is NULL but next_line is not. If we found the
1284 containing function in this compilation unit, return the first line we
1285 have a number for. This is also for compatibility with GCC 2.95. */
1286 if (function != NULL)
1288 *filename_ptr = next_line->filename;
1289 *linenumber_ptr = next_line->line;
1290 return true;
1293 return false;
1296 /* Function table functions. */
1298 /* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return true. */
1300 static boolean
1301 lookup_address_in_function_table (table,
1302 addr,
1303 function_ptr,
1304 functionname_ptr)
1305 struct funcinfo* table;
1306 bfd_vma addr;
1307 struct funcinfo** function_ptr;
1308 const char **functionname_ptr;
1310 struct funcinfo* each_func;
1312 for (each_func = table;
1313 each_func;
1314 each_func = each_func->prev_func)
1316 if (addr >= each_func->low && addr < each_func->high)
1318 *functionname_ptr = each_func->name;
1319 *function_ptr = each_func;
1320 return true;
1324 return false;
1327 /* DWARF2 Compilation unit functions. */
1329 /* Scan over each die in a comp. unit looking for functions to add
1330 to the function table. */
1332 static boolean
1333 scan_unit_for_functions (unit)
1334 struct comp_unit *unit;
1336 bfd *abfd = unit->abfd;
1337 char *info_ptr = unit->first_child_die_ptr;
1338 int nesting_level = 1;
1340 while (nesting_level)
1342 unsigned int abbrev_number, bytes_read, i;
1343 struct abbrev_info *abbrev;
1344 struct attribute attr;
1345 struct funcinfo *func;
1346 char* name = 0;
1348 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1349 info_ptr += bytes_read;
1351 if (! abbrev_number)
1353 nesting_level--;
1354 continue;
1357 abbrev = lookup_abbrev (abbrev_number,unit->abbrevs);
1358 if (! abbrev)
1360 (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1361 abbrev_number);
1362 bfd_set_error (bfd_error_bad_value);
1363 return false;
1366 if (abbrev->tag == DW_TAG_subprogram)
1368 bfd_size_type amt = sizeof (struct funcinfo);
1369 func = (struct funcinfo *) bfd_zalloc (abfd, amt);
1370 func->prev_func = unit->function_table;
1371 unit->function_table = func;
1373 else
1374 func = NULL;
1376 for (i = 0; i < abbrev->num_attrs; ++i)
1378 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1380 if (func)
1382 switch (attr.name)
1384 case DW_AT_name:
1386 name = DW_STRING (&attr);
1388 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
1389 if (func->name == NULL)
1390 func->name = DW_STRING (&attr);
1391 break;
1393 case DW_AT_MIPS_linkage_name:
1394 func->name = DW_STRING (&attr);
1395 break;
1397 case DW_AT_low_pc:
1398 func->low = DW_ADDR (&attr);
1399 break;
1401 case DW_AT_high_pc:
1402 func->high = DW_ADDR (&attr);
1403 break;
1405 default:
1406 break;
1409 else
1411 switch (attr.name)
1413 case DW_AT_name:
1414 name = DW_STRING (&attr);
1415 break;
1417 default:
1418 break;
1423 if (abbrev->has_children)
1424 nesting_level++;
1427 return true;
1430 /* Look for a RELA relocation to be applied on OFFSET of section SEC,
1431 and return the addend if such a relocation is found. Since this is
1432 only used to find relocations referring to the .debug_abbrev
1433 section, we make sure the relocation refers to this section, but
1434 this is not strictly necessary, and it can probably be safely
1435 removed if needed. However, it is important to note that this
1436 function only returns the addend, it doesn't serve the purpose of
1437 applying a generic relocation.
1439 If no suitable relocation is found, or if it is not a real RELA
1440 relocation, this function returns 0. */
1442 static bfd_vma
1443 find_rela_addend (abfd, sec, offset, syms)
1444 bfd* abfd;
1445 asection* sec;
1446 bfd_size_type offset;
1447 asymbol** syms;
1449 long reloc_size = bfd_get_reloc_upper_bound (abfd, sec);
1450 arelent **relocs = NULL;
1451 long reloc_count, relc;
1453 if (reloc_size <= 0)
1454 return 0;
1456 relocs = (arelent **) bfd_malloc ((bfd_size_type) reloc_size);
1457 if (relocs == NULL)
1458 return 0;
1460 reloc_count = bfd_canonicalize_reloc (abfd, sec, relocs, syms);
1462 if (reloc_count <= 0)
1464 free (relocs);
1465 return 0;
1468 for (relc = 0; relc < reloc_count; relc++)
1469 if (relocs[relc]->address == offset
1470 && (*relocs[relc]->sym_ptr_ptr)->flags & BSF_SECTION_SYM
1471 && strcmp ((*relocs[relc]->sym_ptr_ptr)->name,
1472 ".debug_abbrev") == 0)
1474 bfd_vma addend = (relocs[relc]->howto->partial_inplace
1475 ? 0 : relocs[relc]->addend);
1476 free (relocs);
1477 return addend;
1480 free (relocs);
1481 return 0;
1484 /* Parse a DWARF2 compilation unit starting at INFO_PTR. This
1485 includes the compilation unit header that proceeds the DIE's, but
1486 does not include the length field that preceeds each compilation
1487 unit header. END_PTR points one past the end of this comp unit.
1488 OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
1490 This routine does not read the whole compilation unit; only enough
1491 to get to the line number information for the compilation unit. */
1493 static struct comp_unit *
1494 parse_comp_unit (abfd, stash, unit_length, offset_size)
1495 bfd* abfd;
1496 struct dwarf2_debug *stash;
1497 bfd_vma unit_length;
1498 unsigned int offset_size;
1500 struct comp_unit* unit;
1501 unsigned int version;
1502 bfd_vma abbrev_offset = 0;
1503 unsigned int addr_size;
1504 struct abbrev_info** abbrevs;
1505 unsigned int abbrev_number, bytes_read, i;
1506 struct abbrev_info *abbrev;
1507 struct attribute attr;
1508 char *info_ptr = stash->info_ptr;
1509 char *end_ptr = info_ptr + unit_length;
1510 bfd_size_type amt;
1511 bfd_size_type off;
1513 version = read_2_bytes (abfd, info_ptr);
1514 info_ptr += 2;
1515 BFD_ASSERT (offset_size == 4 || offset_size == 8);
1516 if (offset_size == 4)
1517 abbrev_offset = read_4_bytes (abfd, info_ptr);
1518 else
1519 abbrev_offset = read_8_bytes (abfd, info_ptr);
1520 /* The abbrev offset is generally a relocation pointing to
1521 .debug_abbrev+offset. On RELA targets, we have to find the
1522 relocation and extract the addend to obtain the actual
1523 abbrev_offset, so do it here. */
1524 off = info_ptr - stash->sec_info_ptr;
1525 abbrev_offset += find_rela_addend (abfd, stash->sec, off, stash->syms);
1526 info_ptr += offset_size;
1527 addr_size = read_1_byte (abfd, info_ptr);
1528 info_ptr += 1;
1530 if (version != 2)
1532 (*_bfd_error_handler) (_("Dwarf Error: found dwarf version '%u', this reader only handles version 2 information."), version);
1533 bfd_set_error (bfd_error_bad_value);
1534 return 0;
1537 if (addr_size > sizeof (bfd_vma))
1539 (*_bfd_error_handler) (_("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."),
1540 addr_size,
1541 (unsigned int) sizeof (bfd_vma));
1542 bfd_set_error (bfd_error_bad_value);
1543 return 0;
1546 if (addr_size != 2 && addr_size != 4 && addr_size != 8)
1548 (*_bfd_error_handler) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '2', '4' and '8'.", addr_size);
1549 bfd_set_error (bfd_error_bad_value);
1550 return 0;
1553 /* Read the abbrevs for this compilation unit into a table. */
1554 abbrevs = read_abbrevs (abfd, abbrev_offset, stash);
1555 if (! abbrevs)
1556 return 0;
1558 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
1559 info_ptr += bytes_read;
1560 if (! abbrev_number)
1562 (*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %u."),
1563 abbrev_number);
1564 bfd_set_error (bfd_error_bad_value);
1565 return 0;
1568 abbrev = lookup_abbrev (abbrev_number, abbrevs);
1569 if (! abbrev)
1571 (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
1572 abbrev_number);
1573 bfd_set_error (bfd_error_bad_value);
1574 return 0;
1577 amt = sizeof (struct comp_unit);
1578 unit = (struct comp_unit*) bfd_zalloc (abfd, amt);
1579 unit->abfd = abfd;
1580 unit->addr_size = addr_size;
1581 unit->offset_size = offset_size;
1582 unit->abbrevs = abbrevs;
1583 unit->end_ptr = end_ptr;
1584 unit->stash = stash;
1586 for (i = 0; i < abbrev->num_attrs; ++i)
1588 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
1590 /* Store the data if it is of an attribute we want to keep in a
1591 partial symbol table. */
1592 switch (attr.name)
1594 case DW_AT_stmt_list:
1595 unit->stmtlist = 1;
1596 unit->line_offset = DW_UNSND (&attr);
1597 break;
1599 case DW_AT_name:
1600 unit->name = DW_STRING (&attr);
1601 break;
1603 case DW_AT_low_pc:
1604 unit->arange.low = DW_ADDR (&attr);
1605 break;
1607 case DW_AT_high_pc:
1608 unit->arange.high = DW_ADDR (&attr);
1609 break;
1611 case DW_AT_comp_dir:
1613 char* comp_dir = DW_STRING (&attr);
1614 if (comp_dir)
1616 /* Irix 6.2 native cc prepends <machine>.: to the compilation
1617 directory, get rid of it. */
1618 char *cp = (char*) strchr (comp_dir, ':');
1620 if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
1621 comp_dir = cp + 1;
1623 unit->comp_dir = comp_dir;
1624 break;
1627 default:
1628 break;
1632 unit->first_child_die_ptr = info_ptr;
1633 return unit;
1636 /* Return true if UNIT contains the address given by ADDR. */
1638 static boolean
1639 comp_unit_contains_address (unit, addr)
1640 struct comp_unit* unit;
1641 bfd_vma addr;
1643 struct arange *arange;
1645 if (unit->error)
1646 return 0;
1648 arange = &unit->arange;
1651 if (addr >= arange->low && addr < arange->high)
1652 return 1;
1653 arange = arange->next;
1655 while (arange);
1657 return 0;
1660 /* If UNIT contains ADDR, set the output parameters to the values for
1661 the line containing ADDR. The output parameters, FILENAME_PTR,
1662 FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
1663 to be filled in.
1665 Return true of UNIT contains ADDR, and no errors were encountered;
1666 false otherwise. */
1668 static boolean
1669 comp_unit_find_nearest_line (unit, addr,
1670 filename_ptr, functionname_ptr, linenumber_ptr,
1671 stash)
1672 struct comp_unit* unit;
1673 bfd_vma addr;
1674 const char **filename_ptr;
1675 const char **functionname_ptr;
1676 unsigned int *linenumber_ptr;
1677 struct dwarf2_debug *stash;
1679 boolean line_p;
1680 boolean func_p;
1681 struct funcinfo *function;
1683 if (unit->error)
1684 return false;
1686 if (! unit->line_table)
1688 if (! unit->stmtlist)
1690 unit->error = 1;
1691 return false;
1694 unit->line_table = decode_line_info (unit, stash);
1696 if (! unit->line_table)
1698 unit->error = 1;
1699 return false;
1702 if (unit->first_child_die_ptr < unit->end_ptr
1703 && ! scan_unit_for_functions (unit))
1705 unit->error = 1;
1706 return false;
1710 function = NULL;
1711 func_p = lookup_address_in_function_table (unit->function_table,
1712 addr,
1713 &function,
1714 functionname_ptr);
1715 line_p = lookup_address_in_line_info_table (unit->line_table,
1716 addr,
1717 function,
1718 filename_ptr,
1719 linenumber_ptr);
1720 return line_p || func_p;
1723 /* Locate a section in a BFD containing debugging info. The search starts from the
1724 section after AFTER_SEC, or from the first section in the BFD if AFTER_SEC is
1725 NULL. The search works by examining the names of the sections. There are two
1726 permissiable names. The first is .debug_info. This is the standard DWARF2 name.
1727 The second is a prefix .gnu.linkonce.wi. This is a variation on the .debug_info
1728 section which has a checksum describing the contents appended onto the name. This
1729 allows the linker to identify and discard duplicate debugging sections for
1730 different compilation units. */
1731 #define DWARF2_DEBUG_INFO ".debug_info"
1732 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
1734 static asection *
1735 find_debug_info (abfd, after_sec)
1736 bfd * abfd;
1737 asection * after_sec;
1739 asection * msec;
1741 if (after_sec)
1742 msec = after_sec->next;
1743 else
1744 msec = abfd->sections;
1746 while (msec)
1748 if (strcmp (msec->name, DWARF2_DEBUG_INFO) == 0)
1749 return msec;
1751 if (strncmp (msec->name, GNU_LINKONCE_INFO, strlen (GNU_LINKONCE_INFO)) == 0)
1752 return msec;
1754 msec = msec->next;
1757 return NULL;
1760 /* The DWARF2 version of find_nearest line. Return true if the line
1761 is found without error. ADDR_SIZE is the number of bytes in the
1762 initial .debug_info length field and in the abbreviation offset.
1763 You may use zero to indicate that the default value should be
1764 used. */
1766 boolean
1767 _bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
1768 filename_ptr, functionname_ptr,
1769 linenumber_ptr,
1770 addr_size, pinfo)
1771 bfd *abfd;
1772 asection *section;
1773 asymbol **symbols;
1774 bfd_vma offset;
1775 const char **filename_ptr;
1776 const char **functionname_ptr;
1777 unsigned int *linenumber_ptr;
1778 unsigned int addr_size;
1779 PTR *pinfo;
1781 /* Read each compilation unit from the section .debug_info, and check
1782 to see if it contains the address we are searching for. If yes,
1783 lookup the address, and return the line number info. If no, go
1784 on to the next compilation unit.
1786 We keep a list of all the previously read compilation units, and
1787 a pointer to the next un-read compilation unit. Check the
1788 previously read units before reading more. */
1789 struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
1791 /* What address are we looking for? */
1792 bfd_vma addr = offset + section->vma;
1794 struct comp_unit* each;
1796 *filename_ptr = NULL;
1797 *functionname_ptr = NULL;
1798 *linenumber_ptr = 0;
1800 /* The DWARF2 spec says that the initial length field, and the
1801 offset of the abbreviation table, should both be 4-byte values.
1802 However, some compilers do things differently. */
1803 if (addr_size == 0)
1804 addr_size = 4;
1805 BFD_ASSERT (addr_size == 4 || addr_size == 8);
1807 if (! stash)
1809 bfd_size_type total_size;
1810 asection *msec;
1811 bfd_size_type amt = sizeof (struct dwarf2_debug);
1813 stash = (struct dwarf2_debug*) bfd_zalloc (abfd, amt);
1814 if (! stash)
1815 return false;
1817 *pinfo = (PTR) stash;
1819 msec = find_debug_info (abfd, NULL);
1820 if (! msec)
1821 /* No dwarf2 info. Note that at this point the stash
1822 has been allocated, but contains zeros, this lets
1823 future calls to this function fail quicker. */
1824 return false;
1826 /* There can be more than one DWARF2 info section in a BFD these days.
1827 Read them all in and produce one large stash. We do this in two
1828 passes - in the first pass we just accumulate the section sizes.
1829 In the second pass we read in the section's contents. The allows
1830 us to avoid reallocing the data as we add sections to the stash. */
1831 for (total_size = 0; msec; msec = find_debug_info (abfd, msec))
1832 total_size += msec->_raw_size;
1834 stash->info_ptr = (char *) bfd_alloc (abfd, total_size);
1835 if (stash->info_ptr == NULL)
1836 return false;
1838 stash->info_ptr_end = stash->info_ptr;
1840 for (msec = find_debug_info (abfd, NULL);
1841 msec;
1842 msec = find_debug_info (abfd, msec))
1844 bfd_size_type size;
1845 bfd_size_type start;
1847 size = msec->_raw_size;
1848 if (size == 0)
1849 continue;
1851 start = stash->info_ptr_end - stash->info_ptr;
1853 if (! bfd_get_section_contents (abfd, msec, stash->info_ptr + start,
1854 (bfd_vma) 0, size))
1855 continue;
1857 stash->info_ptr_end = stash->info_ptr + start + size;
1860 BFD_ASSERT (stash->info_ptr_end == stash->info_ptr + total_size);
1862 stash->sec = find_debug_info (abfd, NULL);
1863 stash->sec_info_ptr = stash->info_ptr;
1864 stash->syms = symbols;
1867 /* FIXME: There is a problem with the contents of the
1868 .debug_info section. The 'low' and 'high' addresses of the
1869 comp_units are computed by relocs against symbols in the
1870 .text segment. We need these addresses in order to determine
1871 the nearest line number, and so we have to resolve the
1872 relocs. There is a similar problem when the .debug_line
1873 section is processed as well (e.g., there may be relocs
1874 against the operand of the DW_LNE_set_address operator).
1876 Unfortunately getting hold of the reloc information is hard...
1878 For now, this means that disassembling object files (as
1879 opposed to fully executables) does not always work as well as
1880 we would like. */
1882 /* A null info_ptr indicates that there is no dwarf2 info
1883 (or that an error occured while setting up the stash). */
1884 if (! stash->info_ptr)
1885 return false;
1887 /* Check the previously read comp. units first. */
1888 for (each = stash->all_comp_units; each; each = each->next_unit)
1889 if (comp_unit_contains_address (each, addr))
1890 return comp_unit_find_nearest_line (each, addr, filename_ptr,
1891 functionname_ptr, linenumber_ptr,
1892 stash);
1894 /* Read each remaining comp. units checking each as they are read. */
1895 while (stash->info_ptr < stash->info_ptr_end)
1897 bfd_vma length;
1898 boolean found;
1899 unsigned int offset_size = addr_size;
1901 if (addr_size == 4)
1903 length = read_4_bytes (abfd, stash->info_ptr);
1904 if (length == 0xffffffff)
1906 offset_size = 8;
1907 length = read_8_bytes (abfd, stash->info_ptr + 4);
1908 stash->info_ptr += 8;
1910 else if (length == 0)
1912 /* Handle (non-standard) 64-bit DWARF2 formats. */
1913 offset_size = 8;
1914 length = read_4_bytes (abfd, stash->info_ptr + 4);
1915 stash->info_ptr += 4;
1918 else
1919 length = read_8_bytes (abfd, stash->info_ptr);
1920 stash->info_ptr += addr_size;
1922 if (length > 0)
1924 each = parse_comp_unit (abfd, stash, length, offset_size);
1925 stash->info_ptr += length;
1927 if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr)
1928 == stash->sec->_raw_size)
1930 stash->sec = find_debug_info (abfd, stash->sec);
1931 stash->sec_info_ptr = stash->info_ptr;
1934 if (each)
1936 each->next_unit = stash->all_comp_units;
1937 stash->all_comp_units = each;
1939 /* DW_AT_low_pc and DW_AT_high_pc are optional for
1940 compilation units. If we don't have them (i.e.,
1941 unit->high == 0), we need to consult the line info
1942 table to see if a compilation unit contains the given
1943 address. */
1944 if (each->arange.high > 0)
1946 if (comp_unit_contains_address (each, addr))
1947 return comp_unit_find_nearest_line (each, addr,
1948 filename_ptr,
1949 functionname_ptr,
1950 linenumber_ptr,
1951 stash);
1953 else
1955 found = comp_unit_find_nearest_line (each, addr,
1956 filename_ptr,
1957 functionname_ptr,
1958 linenumber_ptr,
1959 stash);
1960 if (found)
1961 return true;
1967 return false;