2 Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3 2004, 2005 Free Software Foundation, Inc.
5 Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
34 #include "libiberty.h"
37 #include "elf/dwarf2.h"
39 /* The data in the .debug_line statement prologue looks like this. */
44 unsigned short version
;
45 bfd_vma prologue_length
;
46 unsigned char minimum_instruction_length
;
47 unsigned char default_is_stmt
;
49 unsigned char line_range
;
50 unsigned char opcode_base
;
51 unsigned char *standard_opcode_lengths
;
54 /* Attributes have a name and a value. */
58 enum dwarf_attribute name
;
63 struct dwarf_block
*blk
;
70 /* Blocks are a bunch of untyped bytes. */
79 /* A list of all previously read comp_units. */
80 struct comp_unit
*all_comp_units
;
82 /* The next unread compilation unit within the .debug_info section.
83 Zero indicates that the .debug_info section has not been loaded
87 /* Pointer to the end of the .debug_info section memory buffer. */
88 bfd_byte
*info_ptr_end
;
90 /* Pointer to the section and address of the beginning of the
93 bfd_byte
*sec_info_ptr
;
95 /* Pointer to the symbol table. */
98 /* Pointer to the .debug_abbrev section loaded into memory. */
99 bfd_byte
*dwarf_abbrev_buffer
;
101 /* Length of the loaded .debug_abbrev section. */
102 unsigned long dwarf_abbrev_size
;
104 /* Buffer for decode_line_info. */
105 bfd_byte
*dwarf_line_buffer
;
107 /* Length of the loaded .debug_line section. */
108 unsigned long dwarf_line_size
;
110 /* Pointer to the .debug_str section loaded into memory. */
111 bfd_byte
*dwarf_str_buffer
;
113 /* Length of the loaded .debug_str section. */
114 unsigned long dwarf_str_size
;
116 /* Pointer to the .debug_ranges section loaded into memory. */
117 bfd_byte
*dwarf_ranges_buffer
;
119 /* Length of the loaded .debug_ranges section. */
120 unsigned long dwarf_ranges_size
;
122 /* If the most recent call to bfd_find_nearest_line was given an
123 address in an inlined function, preserve a pointer into the
124 calling chain for subsequent calls to bfd_find_inliner_info to
126 struct funcinfo
*inliner_chain
;
136 /* A minimal decoding of DWARF2 compilation units. We only decode
137 what's needed to get to the line number information. */
141 /* Chain the previously read compilation units. */
142 struct comp_unit
*next_unit
;
144 /* Keep the bfd convenient (for memory allocation). */
147 /* The lowest and highest addresses contained in this compilation
148 unit as specified in the compilation unit header. */
149 struct arange arange
;
151 /* The DW_AT_name attribute (for error messages). */
154 /* The abbrev hash table. */
155 struct abbrev_info
**abbrevs
;
157 /* Note that an error was found by comp_unit_find_nearest_line. */
160 /* The DW_AT_comp_dir attribute. */
163 /* TRUE if there is a line number table associated with this comp. unit. */
166 /* Pointer to the current comp_unit so that we can find a given entry
168 bfd_byte
*info_ptr_unit
;
170 /* The offset into .debug_line of the line number table. */
171 unsigned long line_offset
;
173 /* Pointer to the first child die for the comp unit. */
174 bfd_byte
*first_child_die_ptr
;
176 /* The end of the comp unit. */
179 /* The decoded line number, NULL if not yet decoded. */
180 struct line_info_table
*line_table
;
182 /* A list of the functions found in this comp. unit. */
183 struct funcinfo
*function_table
;
185 /* A list of the variables found in this comp. unit. */
186 struct varinfo
*variable_table
;
188 /* Pointer to dwarf2_debug structure. */
189 struct dwarf2_debug
*stash
;
191 /* Address size for this unit - from unit header. */
192 unsigned char addr_size
;
194 /* Offset size for this unit - from unit header. */
195 unsigned char offset_size
;
197 /* Base address for this unit - from DW_AT_low_pc attribute of
198 DW_TAG_compile_unit DIE */
199 bfd_vma base_address
;
202 /* This data structure holds the information of an abbrev. */
205 unsigned int number
; /* Number identifying abbrev. */
206 enum dwarf_tag tag
; /* DWARF tag. */
207 int has_children
; /* Boolean. */
208 unsigned int num_attrs
; /* Number of attributes. */
209 struct attr_abbrev
*attrs
; /* An array of attribute descriptions. */
210 struct abbrev_info
*next
; /* Next in chain. */
215 enum dwarf_attribute name
;
216 enum dwarf_form form
;
219 #ifndef ABBREV_HASH_SIZE
220 #define ABBREV_HASH_SIZE 121
222 #ifndef ATTR_ALLOC_CHUNK
223 #define ATTR_ALLOC_CHUNK 4
227 The following function up to the END VERBATIM mark are
228 copied directly from dwarf2read.c. */
230 /* Read dwarf information from a buffer. */
233 read_1_byte (bfd
*abfd ATTRIBUTE_UNUSED
, bfd_byte
*buf
)
235 return bfd_get_8 (abfd
, buf
);
239 read_1_signed_byte (bfd
*abfd ATTRIBUTE_UNUSED
, bfd_byte
*buf
)
241 return bfd_get_signed_8 (abfd
, buf
);
245 read_2_bytes (bfd
*abfd
, bfd_byte
*buf
)
247 return bfd_get_16 (abfd
, buf
);
251 read_4_bytes (bfd
*abfd
, bfd_byte
*buf
)
253 return bfd_get_32 (abfd
, buf
);
257 read_8_bytes (bfd
*abfd
, bfd_byte
*buf
)
259 return bfd_get_64 (abfd
, buf
);
263 read_n_bytes (bfd
*abfd ATTRIBUTE_UNUSED
,
265 unsigned int size ATTRIBUTE_UNUSED
)
267 /* If the size of a host char is 8 bits, we can return a pointer
268 to the buffer, otherwise we have to copy the data to a buffer
269 allocated on the temporary obstack. */
274 read_string (bfd
*abfd ATTRIBUTE_UNUSED
,
276 unsigned int *bytes_read_ptr
)
278 /* Return a pointer to the embedded string. */
279 char *str
= (char *) buf
;
286 *bytes_read_ptr
= strlen (str
) + 1;
291 read_indirect_string (struct comp_unit
* unit
,
293 unsigned int *bytes_read_ptr
)
296 struct dwarf2_debug
*stash
= unit
->stash
;
299 if (unit
->offset_size
== 4)
300 offset
= read_4_bytes (unit
->abfd
, buf
);
302 offset
= read_8_bytes (unit
->abfd
, buf
);
303 *bytes_read_ptr
= unit
->offset_size
;
305 if (! stash
->dwarf_str_buffer
)
308 bfd
*abfd
= unit
->abfd
;
311 msec
= bfd_get_section_by_name (abfd
, ".debug_str");
314 (*_bfd_error_handler
)
315 (_("Dwarf Error: Can't find .debug_str section."));
316 bfd_set_error (bfd_error_bad_value
);
320 sz
= msec
->rawsize
? msec
->rawsize
: msec
->size
;
321 stash
->dwarf_str_size
= sz
;
322 stash
->dwarf_str_buffer
= bfd_alloc (abfd
, sz
);
323 if (! stash
->dwarf_str_buffer
)
326 if (! bfd_get_section_contents (abfd
, msec
, stash
->dwarf_str_buffer
,
331 if (offset
>= stash
->dwarf_str_size
)
333 (*_bfd_error_handler
) (_("Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)."),
334 (unsigned long) offset
, stash
->dwarf_str_size
);
335 bfd_set_error (bfd_error_bad_value
);
339 str
= (char *) stash
->dwarf_str_buffer
+ offset
;
348 read_address (struct comp_unit
*unit
, bfd_byte
*buf
)
350 int signed_vma
= get_elf_backend_data (unit
->abfd
)->sign_extend_vma
;
354 switch (unit
->addr_size
)
357 return bfd_get_signed_64 (unit
->abfd
, buf
);
359 return bfd_get_signed_32 (unit
->abfd
, buf
);
361 return bfd_get_signed_16 (unit
->abfd
, buf
);
368 switch (unit
->addr_size
)
371 return bfd_get_64 (unit
->abfd
, buf
);
373 return bfd_get_32 (unit
->abfd
, buf
);
375 return bfd_get_16 (unit
->abfd
, buf
);
382 /* Lookup an abbrev_info structure in the abbrev hash table. */
384 static struct abbrev_info
*
385 lookup_abbrev (unsigned int number
, struct abbrev_info
**abbrevs
)
387 unsigned int hash_number
;
388 struct abbrev_info
*abbrev
;
390 hash_number
= number
% ABBREV_HASH_SIZE
;
391 abbrev
= abbrevs
[hash_number
];
395 if (abbrev
->number
== number
)
398 abbrev
= abbrev
->next
;
404 /* In DWARF version 2, the description of the debugging information is
405 stored in a separate .debug_abbrev section. Before we read any
406 dies from a section we read in all abbreviations and install them
409 static struct abbrev_info
**
410 read_abbrevs (bfd
*abfd
, bfd_uint64_t offset
, struct dwarf2_debug
*stash
)
412 struct abbrev_info
**abbrevs
;
413 bfd_byte
*abbrev_ptr
;
414 struct abbrev_info
*cur_abbrev
;
415 unsigned int abbrev_number
, bytes_read
, abbrev_name
;
416 unsigned int abbrev_form
, hash_number
;
419 if (! stash
->dwarf_abbrev_buffer
)
423 msec
= bfd_get_section_by_name (abfd
, ".debug_abbrev");
426 (*_bfd_error_handler
) (_("Dwarf Error: Can't find .debug_abbrev section."));
427 bfd_set_error (bfd_error_bad_value
);
431 stash
->dwarf_abbrev_size
= msec
->size
;
432 stash
->dwarf_abbrev_buffer
433 = bfd_simple_get_relocated_section_contents (abfd
, msec
, NULL
,
435 if (! stash
->dwarf_abbrev_buffer
)
439 if (offset
>= stash
->dwarf_abbrev_size
)
441 (*_bfd_error_handler
) (_("Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)."),
442 (unsigned long) offset
, stash
->dwarf_abbrev_size
);
443 bfd_set_error (bfd_error_bad_value
);
447 amt
= sizeof (struct abbrev_info
*) * ABBREV_HASH_SIZE
;
448 abbrevs
= bfd_zalloc (abfd
, amt
);
450 abbrev_ptr
= stash
->dwarf_abbrev_buffer
+ offset
;
451 abbrev_number
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
452 abbrev_ptr
+= bytes_read
;
454 /* Loop until we reach an abbrev number of 0. */
455 while (abbrev_number
)
457 amt
= sizeof (struct abbrev_info
);
458 cur_abbrev
= bfd_zalloc (abfd
, amt
);
460 /* Read in abbrev header. */
461 cur_abbrev
->number
= abbrev_number
;
462 cur_abbrev
->tag
= (enum dwarf_tag
)
463 read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
464 abbrev_ptr
+= bytes_read
;
465 cur_abbrev
->has_children
= read_1_byte (abfd
, abbrev_ptr
);
468 /* Now read in declarations. */
469 abbrev_name
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
470 abbrev_ptr
+= bytes_read
;
471 abbrev_form
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
472 abbrev_ptr
+= bytes_read
;
476 if ((cur_abbrev
->num_attrs
% ATTR_ALLOC_CHUNK
) == 0)
478 struct attr_abbrev
*tmp
;
480 amt
= cur_abbrev
->num_attrs
+ ATTR_ALLOC_CHUNK
;
481 amt
*= sizeof (struct attr_abbrev
);
482 tmp
= bfd_realloc (cur_abbrev
->attrs
, amt
);
487 for (i
= 0; i
< ABBREV_HASH_SIZE
; i
++)
489 struct abbrev_info
*abbrev
= abbrevs
[i
];
493 free (abbrev
->attrs
);
494 abbrev
= abbrev
->next
;
499 cur_abbrev
->attrs
= tmp
;
502 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].name
503 = (enum dwarf_attribute
) abbrev_name
;
504 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
++].form
505 = (enum dwarf_form
) abbrev_form
;
506 abbrev_name
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
507 abbrev_ptr
+= bytes_read
;
508 abbrev_form
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
509 abbrev_ptr
+= bytes_read
;
512 hash_number
= abbrev_number
% ABBREV_HASH_SIZE
;
513 cur_abbrev
->next
= abbrevs
[hash_number
];
514 abbrevs
[hash_number
] = cur_abbrev
;
516 /* Get next abbreviation.
517 Under Irix6 the abbreviations for a compilation unit are not
518 always properly terminated with an abbrev number of 0.
519 Exit loop if we encounter an abbreviation which we have
520 already read (which means we are about to read the abbreviations
521 for the next compile unit) or if the end of the abbreviation
523 if ((unsigned int) (abbrev_ptr
- stash
->dwarf_abbrev_buffer
)
524 >= stash
->dwarf_abbrev_size
)
526 abbrev_number
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
527 abbrev_ptr
+= bytes_read
;
528 if (lookup_abbrev (abbrev_number
,abbrevs
) != NULL
)
535 /* Read an attribute value described by an attribute form. */
538 read_attribute_value (struct attribute
*attr
,
540 struct comp_unit
*unit
,
543 bfd
*abfd
= unit
->abfd
;
544 unsigned int bytes_read
;
545 struct dwarf_block
*blk
;
548 attr
->form
= (enum dwarf_form
) form
;
553 /* FIXME: DWARF3 draft says DW_FORM_ref_addr is offset_size. */
554 case DW_FORM_ref_addr
:
555 attr
->u
.val
= read_address (unit
, info_ptr
);
556 info_ptr
+= unit
->addr_size
;
559 amt
= sizeof (struct dwarf_block
);
560 blk
= bfd_alloc (abfd
, amt
);
561 blk
->size
= read_2_bytes (abfd
, info_ptr
);
563 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
564 info_ptr
+= blk
->size
;
568 amt
= sizeof (struct dwarf_block
);
569 blk
= bfd_alloc (abfd
, amt
);
570 blk
->size
= read_4_bytes (abfd
, info_ptr
);
572 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
573 info_ptr
+= blk
->size
;
577 attr
->u
.val
= read_2_bytes (abfd
, info_ptr
);
581 attr
->u
.val
= read_4_bytes (abfd
, info_ptr
);
585 attr
->u
.val
= read_8_bytes (abfd
, info_ptr
);
589 attr
->u
.str
= read_string (abfd
, info_ptr
, &bytes_read
);
590 info_ptr
+= bytes_read
;
593 attr
->u
.str
= read_indirect_string (unit
, info_ptr
, &bytes_read
);
594 info_ptr
+= bytes_read
;
597 amt
= sizeof (struct dwarf_block
);
598 blk
= bfd_alloc (abfd
, amt
);
599 blk
->size
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
600 info_ptr
+= bytes_read
;
601 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
602 info_ptr
+= blk
->size
;
606 amt
= sizeof (struct dwarf_block
);
607 blk
= bfd_alloc (abfd
, amt
);
608 blk
->size
= read_1_byte (abfd
, info_ptr
);
610 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
611 info_ptr
+= blk
->size
;
615 attr
->u
.val
= read_1_byte (abfd
, info_ptr
);
619 attr
->u
.val
= read_1_byte (abfd
, info_ptr
);
623 attr
->u
.sval
= read_signed_leb128 (abfd
, info_ptr
, &bytes_read
);
624 info_ptr
+= bytes_read
;
627 attr
->u
.val
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
628 info_ptr
+= bytes_read
;
631 attr
->u
.val
= read_1_byte (abfd
, info_ptr
);
635 attr
->u
.val
= read_2_bytes (abfd
, info_ptr
);
639 attr
->u
.val
= read_4_bytes (abfd
, info_ptr
);
643 attr
->u
.val
= read_8_bytes (abfd
, info_ptr
);
646 case DW_FORM_ref_udata
:
647 attr
->u
.val
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
648 info_ptr
+= bytes_read
;
650 case DW_FORM_indirect
:
651 form
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
652 info_ptr
+= bytes_read
;
653 info_ptr
= read_attribute_value (attr
, form
, unit
, info_ptr
);
656 (*_bfd_error_handler
) (_("Dwarf Error: Invalid or unhandled FORM value: %u."),
658 bfd_set_error (bfd_error_bad_value
);
663 /* Read an attribute described by an abbreviated attribute. */
666 read_attribute (struct attribute
*attr
,
667 struct attr_abbrev
*abbrev
,
668 struct comp_unit
*unit
,
671 attr
->name
= abbrev
->name
;
672 info_ptr
= read_attribute_value (attr
, abbrev
->form
, unit
, info_ptr
);
676 /* Source line information table routines. */
678 #define FILE_ALLOC_CHUNK 5
679 #define DIR_ALLOC_CHUNK 5
683 struct line_info
* prev_line
;
688 int end_sequence
; /* End of (sequential) code sequence. */
699 struct line_info_table
702 unsigned int num_files
;
703 unsigned int num_dirs
;
706 struct fileinfo
* files
;
707 struct line_info
* last_line
; /* largest VMA */
708 struct line_info
* lcl_head
; /* local head; used in 'add_line_info' */
711 /* Remember some information about each function. If the function is
712 inlined (DW_TAG_inlined_subroutine) it may have two additional
713 attributes, DW_AT_call_file and DW_AT_call_line, which specify the
714 source code location where this function was inlined. */
718 struct funcinfo
*prev_func
; /* Pointer to previous function in list of all functions */
719 struct funcinfo
*caller_func
; /* Pointer to function one scope higher */
720 char *caller_file
; /* Source location file name where caller_func inlines this func */
721 int caller_line
; /* Source location line number where caller_func inlines this func */
722 char *file
; /* Source location file name */
723 int line
; /* Source location line number */
726 struct arange arange
;
727 asection
*sec
; /* Where the symbol is defined */
732 /* Pointer to previous variable in list of all variables */
733 struct varinfo
*prev_var
;
734 /* Source location file name */
736 /* Source location line number */
741 /* Where the symbol is defined */
743 /* Is this a stack variable? */
744 unsigned int stack
: 1;
747 /* Adds a new entry to the line_info list in the line_info_table, ensuring
748 that the list is sorted. Note that the line_info list is sorted from
749 highest to lowest VMA (with possible duplicates); that is,
750 line_info->prev_line always accesses an equal or smaller VMA. */
753 add_line_info (struct line_info_table
*table
,
760 bfd_size_type amt
= sizeof (struct line_info
);
761 struct line_info
* info
= bfd_alloc (table
->abfd
, amt
);
763 /* Find the correct location for 'info'. Normally we will receive
764 new line_info data 1) in order and 2) with increasing VMAs.
765 However some compilers break the rules (cf. decode_line_info) and
766 so we include some heuristics for quickly finding the correct
767 location for 'info'. In particular, these heuristics optimize for
768 the common case in which the VMA sequence that we receive is a
769 list of locally sorted VMAs such as
770 p...z a...j (where a < j < p < z)
772 Note: table->lcl_head is used to head an *actual* or *possible*
773 sequence within the list (such as a...j) that is not directly
774 headed by table->last_line
776 Note: we may receive duplicate entries from 'decode_line_info'. */
779 if (!table
->last_line
780 || address
>= table
->last_line
->address
)
782 /* Normal case: add 'info' to the beginning of the list */
783 info
->prev_line
= table
->last_line
;
784 table
->last_line
= info
;
786 /* lcl_head: initialize to head a *possible* sequence at the end. */
787 if (!table
->lcl_head
)
788 table
->lcl_head
= info
;
791 else if (!table
->lcl_head
->prev_line
792 && table
->lcl_head
->address
> address
)
794 /* Abnormal but easy: lcl_head is 1) at the *end* of the line
795 list and 2) the head of 'info'. */
796 info
->prev_line
= NULL
;
797 table
->lcl_head
->prev_line
= info
;
800 else if (table
->lcl_head
->prev_line
801 && table
->lcl_head
->address
> address
802 && address
>= table
->lcl_head
->prev_line
->address
)
804 /* Abnormal but easy: lcl_head is 1) in the *middle* of the line
805 list and 2) the head of 'info'. */
806 info
->prev_line
= table
->lcl_head
->prev_line
;
807 table
->lcl_head
->prev_line
= info
;
812 /* Abnormal and hard: Neither 'last_line' nor 'lcl_head' are valid
813 heads for 'info'. Reset 'lcl_head' and repeat. */
814 struct line_info
* li2
= table
->last_line
; /* always non-NULL */
815 struct line_info
* li1
= li2
->prev_line
;
819 if (li2
->address
> address
&& address
>= li1
->address
)
822 li2
= li1
; /* always non-NULL */
823 li1
= li1
->prev_line
;
825 table
->lcl_head
= li2
;
828 /* Set member data of 'info'. */
829 info
->address
= address
;
831 info
->column
= column
;
832 info
->end_sequence
= end_sequence
;
834 if (filename
&& filename
[0])
836 info
->filename
= bfd_alloc (table
->abfd
, strlen (filename
) + 1);
838 strcpy (info
->filename
, filename
);
841 info
->filename
= NULL
;
844 /* Extract a fully qualified filename from a line info table.
845 The returned string has been malloc'ed and it is the caller's
846 responsibility to free it. */
849 concat_filename (struct line_info_table
*table
, unsigned int file
)
853 if (file
- 1 >= table
->num_files
)
855 (*_bfd_error_handler
)
856 (_("Dwarf Error: mangled line number section (bad file number)."));
857 return strdup ("<unknown>");
860 filename
= table
->files
[file
- 1].name
;
862 if (! IS_ABSOLUTE_PATH (filename
))
864 char *dirname
= (table
->files
[file
- 1].dir
865 ? table
->dirs
[table
->files
[file
- 1].dir
- 1]
868 /* Not all tools set DW_AT_comp_dir, so dirname may be unknown.
869 The best we can do is return the filename part. */
872 unsigned int len
= strlen (dirname
) + strlen (filename
) + 2;
875 name
= bfd_malloc (len
);
877 sprintf (name
, "%s/%s", dirname
, filename
);
882 return strdup (filename
);
886 arange_add (bfd
*abfd
, struct arange
*first_arange
, bfd_vma low_pc
, bfd_vma high_pc
)
888 struct arange
*arange
;
890 /* If the first arange is empty, use it. */
891 if (first_arange
->high
== 0)
893 first_arange
->low
= low_pc
;
894 first_arange
->high
= high_pc
;
898 /* Next see if we can cheaply extend an existing range. */
899 arange
= first_arange
;
902 if (low_pc
== arange
->high
)
904 arange
->high
= high_pc
;
907 if (high_pc
== arange
->low
)
909 arange
->low
= low_pc
;
912 arange
= arange
->next
;
916 /* Need to allocate a new arange and insert it into the arange list.
917 Order isn't significant, so just insert after the first arange. */
918 arange
= bfd_zalloc (abfd
, sizeof (*arange
));
919 arange
->low
= low_pc
;
920 arange
->high
= high_pc
;
921 arange
->next
= first_arange
->next
;
922 first_arange
->next
= arange
;
925 /* Decode the line number information for UNIT. */
927 static struct line_info_table
*
928 decode_line_info (struct comp_unit
*unit
, struct dwarf2_debug
*stash
)
930 bfd
*abfd
= unit
->abfd
;
931 struct line_info_table
* table
;
935 unsigned int i
, bytes_read
, offset_size
;
936 char *cur_file
, *cur_dir
;
937 unsigned char op_code
, extended_op
, adj_opcode
;
940 if (! stash
->dwarf_line_buffer
)
944 msec
= bfd_get_section_by_name (abfd
, ".debug_line");
947 (*_bfd_error_handler
) (_("Dwarf Error: Can't find .debug_line section."));
948 bfd_set_error (bfd_error_bad_value
);
952 stash
->dwarf_line_size
= msec
->size
;
953 stash
->dwarf_line_buffer
954 = bfd_simple_get_relocated_section_contents (abfd
, msec
, NULL
,
956 if (! stash
->dwarf_line_buffer
)
960 /* It is possible to get a bad value for the line_offset. Validate
961 it here so that we won't get a segfault below. */
962 if (unit
->line_offset
>= stash
->dwarf_line_size
)
964 (*_bfd_error_handler
) (_("Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)."),
965 unit
->line_offset
, stash
->dwarf_line_size
);
966 bfd_set_error (bfd_error_bad_value
);
970 amt
= sizeof (struct line_info_table
);
971 table
= bfd_alloc (abfd
, amt
);
973 table
->comp_dir
= unit
->comp_dir
;
975 table
->num_files
= 0;
982 table
->last_line
= NULL
;
983 table
->lcl_head
= NULL
;
985 line_ptr
= stash
->dwarf_line_buffer
+ unit
->line_offset
;
987 /* Read in the prologue. */
988 lh
.total_length
= read_4_bytes (abfd
, line_ptr
);
991 if (lh
.total_length
== 0xffffffff)
993 lh
.total_length
= read_8_bytes (abfd
, line_ptr
);
997 else if (lh
.total_length
== 0 && unit
->addr_size
== 8)
999 /* Handle (non-standard) 64-bit DWARF2 formats. */
1000 lh
.total_length
= read_4_bytes (abfd
, line_ptr
);
1004 line_end
= line_ptr
+ lh
.total_length
;
1005 lh
.version
= read_2_bytes (abfd
, line_ptr
);
1007 if (offset_size
== 4)
1008 lh
.prologue_length
= read_4_bytes (abfd
, line_ptr
);
1010 lh
.prologue_length
= read_8_bytes (abfd
, line_ptr
);
1011 line_ptr
+= offset_size
;
1012 lh
.minimum_instruction_length
= read_1_byte (abfd
, line_ptr
);
1014 lh
.default_is_stmt
= read_1_byte (abfd
, line_ptr
);
1016 lh
.line_base
= read_1_signed_byte (abfd
, line_ptr
);
1018 lh
.line_range
= read_1_byte (abfd
, line_ptr
);
1020 lh
.opcode_base
= read_1_byte (abfd
, line_ptr
);
1022 amt
= lh
.opcode_base
* sizeof (unsigned char);
1023 lh
.standard_opcode_lengths
= bfd_alloc (abfd
, amt
);
1025 lh
.standard_opcode_lengths
[0] = 1;
1027 for (i
= 1; i
< lh
.opcode_base
; ++i
)
1029 lh
.standard_opcode_lengths
[i
] = read_1_byte (abfd
, line_ptr
);
1033 /* Read directory table. */
1034 while ((cur_dir
= read_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
1036 line_ptr
+= bytes_read
;
1038 if ((table
->num_dirs
% DIR_ALLOC_CHUNK
) == 0)
1042 amt
= table
->num_dirs
+ DIR_ALLOC_CHUNK
;
1043 amt
*= sizeof (char *);
1045 tmp
= bfd_realloc (table
->dirs
, amt
);
1054 table
->dirs
[table
->num_dirs
++] = cur_dir
;
1057 line_ptr
+= bytes_read
;
1059 /* Read file name table. */
1060 while ((cur_file
= read_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
1062 line_ptr
+= bytes_read
;
1064 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
1066 struct fileinfo
*tmp
;
1068 amt
= table
->num_files
+ FILE_ALLOC_CHUNK
;
1069 amt
*= sizeof (struct fileinfo
);
1071 tmp
= bfd_realloc (table
->files
, amt
);
1074 free (table
->files
);
1081 table
->files
[table
->num_files
].name
= cur_file
;
1082 table
->files
[table
->num_files
].dir
=
1083 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1084 line_ptr
+= bytes_read
;
1085 table
->files
[table
->num_files
].time
=
1086 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1087 line_ptr
+= bytes_read
;
1088 table
->files
[table
->num_files
].size
=
1089 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1090 line_ptr
+= bytes_read
;
1094 line_ptr
+= bytes_read
;
1096 /* Read the statement sequences until there's nothing left. */
1097 while (line_ptr
< line_end
)
1099 /* State machine registers. */
1100 bfd_vma address
= 0;
1101 char * filename
= table
->num_files
? concat_filename (table
, 1) : NULL
;
1102 unsigned int line
= 1;
1103 unsigned int column
= 0;
1104 int is_stmt
= lh
.default_is_stmt
;
1105 int basic_block
= 0;
1106 int end_sequence
= 0;
1107 /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
1108 compilers generate address sequences that are wildly out of
1109 order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
1110 for ia64-Linux). Thus, to determine the low and high
1111 address, we must compare on every DW_LNS_copy, etc. */
1112 bfd_vma low_pc
= (bfd_vma
) -1;
1113 bfd_vma high_pc
= 0;
1115 /* Decode the table. */
1116 while (! end_sequence
)
1118 op_code
= read_1_byte (abfd
, line_ptr
);
1121 if (op_code
>= lh
.opcode_base
)
1123 /* Special operand. */
1124 adj_opcode
= op_code
- lh
.opcode_base
;
1125 address
+= (adj_opcode
/ lh
.line_range
)
1126 * lh
.minimum_instruction_length
;
1127 line
+= lh
.line_base
+ (adj_opcode
% lh
.line_range
);
1128 /* Append row to matrix using current values. */
1129 add_line_info (table
, address
, filename
, line
, column
, 0);
1131 if (address
< low_pc
)
1133 if (address
> high_pc
)
1136 else switch (op_code
)
1138 case DW_LNS_extended_op
:
1139 /* Ignore length. */
1141 extended_op
= read_1_byte (abfd
, line_ptr
);
1144 switch (extended_op
)
1146 case DW_LNE_end_sequence
:
1148 add_line_info (table
, address
, filename
, line
, column
,
1150 if (address
< low_pc
)
1152 if (address
> high_pc
)
1154 arange_add (unit
->abfd
, &unit
->arange
, low_pc
, high_pc
);
1156 case DW_LNE_set_address
:
1157 address
= read_address (unit
, line_ptr
);
1158 line_ptr
+= unit
->addr_size
;
1160 case DW_LNE_define_file
:
1161 cur_file
= read_string (abfd
, line_ptr
, &bytes_read
);
1162 line_ptr
+= bytes_read
;
1163 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
1165 struct fileinfo
*tmp
;
1167 amt
= table
->num_files
+ FILE_ALLOC_CHUNK
;
1168 amt
*= sizeof (struct fileinfo
);
1169 tmp
= bfd_realloc (table
->files
, amt
);
1172 free (table
->files
);
1179 table
->files
[table
->num_files
].name
= cur_file
;
1180 table
->files
[table
->num_files
].dir
=
1181 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1182 line_ptr
+= bytes_read
;
1183 table
->files
[table
->num_files
].time
=
1184 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1185 line_ptr
+= bytes_read
;
1186 table
->files
[table
->num_files
].size
=
1187 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1188 line_ptr
+= bytes_read
;
1192 (*_bfd_error_handler
) (_("Dwarf Error: mangled line number section."));
1193 bfd_set_error (bfd_error_bad_value
);
1195 free (table
->files
);
1201 add_line_info (table
, address
, filename
, line
, column
, 0);
1203 if (address
< low_pc
)
1205 if (address
> high_pc
)
1208 case DW_LNS_advance_pc
:
1209 address
+= lh
.minimum_instruction_length
1210 * read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1211 line_ptr
+= bytes_read
;
1213 case DW_LNS_advance_line
:
1214 line
+= read_signed_leb128 (abfd
, line_ptr
, &bytes_read
);
1215 line_ptr
+= bytes_read
;
1217 case DW_LNS_set_file
:
1221 /* The file and directory tables are 0
1222 based, the references are 1 based. */
1223 file
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1224 line_ptr
+= bytes_read
;
1227 filename
= concat_filename (table
, file
);
1230 case DW_LNS_set_column
:
1231 column
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1232 line_ptr
+= bytes_read
;
1234 case DW_LNS_negate_stmt
:
1235 is_stmt
= (!is_stmt
);
1237 case DW_LNS_set_basic_block
:
1240 case DW_LNS_const_add_pc
:
1241 address
+= lh
.minimum_instruction_length
1242 * ((255 - lh
.opcode_base
) / lh
.line_range
);
1244 case DW_LNS_fixed_advance_pc
:
1245 address
+= read_2_bytes (abfd
, line_ptr
);
1252 /* Unknown standard opcode, ignore it. */
1253 for (i
= 0; i
< lh
.standard_opcode_lengths
[op_code
]; i
++)
1255 (void) read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1256 line_ptr
+= bytes_read
;
1269 /* If ADDR is within TABLE set the output parameters and return TRUE,
1270 otherwise return FALSE. The output parameters, FILENAME_PTR and
1271 LINENUMBER_PTR, are pointers to the objects to be filled in. */
1274 lookup_address_in_line_info_table (struct line_info_table
*table
,
1276 struct funcinfo
*function
,
1277 const char **filename_ptr
,
1278 unsigned int *linenumber_ptr
)
1280 /* Note: table->last_line should be a descendingly sorted list. */
1281 struct line_info
* next_line
= table
->last_line
;
1282 struct line_info
* each_line
= NULL
;
1283 *filename_ptr
= NULL
;
1288 each_line
= next_line
->prev_line
;
1290 /* Check for large addresses */
1291 if (addr
> next_line
->address
)
1292 each_line
= NULL
; /* ensure we skip over the normal case */
1294 /* Normal case: search the list; save */
1295 while (each_line
&& next_line
)
1297 /* If we have an address match, save this info. This allows us
1298 to return as good as results as possible for strange debugging
1300 bfd_boolean addr_match
= FALSE
;
1301 if (each_line
->address
<= addr
&& addr
< next_line
->address
)
1305 /* If this line appears to span functions, and addr is in the
1306 later function, return the first line of that function instead
1307 of the last line of the earlier one. This check is for GCC
1308 2.95, which emits the first line number for a function late. */
1310 if (function
!= NULL
)
1313 struct arange
*arange
;
1315 /* Find the lowest address in the function's range list */
1316 lowest_pc
= function
->arange
.low
;
1317 for (arange
= &function
->arange
;
1319 arange
= arange
->next
)
1321 if (function
->arange
.low
< lowest_pc
)
1322 lowest_pc
= function
->arange
.low
;
1324 /* Check for spanning function and set outgoing line info */
1325 if (addr
>= lowest_pc
1326 && each_line
->address
< lowest_pc
1327 && next_line
->address
> lowest_pc
)
1329 *filename_ptr
= next_line
->filename
;
1330 *linenumber_ptr
= next_line
->line
;
1334 *filename_ptr
= each_line
->filename
;
1335 *linenumber_ptr
= each_line
->line
;
1340 *filename_ptr
= each_line
->filename
;
1341 *linenumber_ptr
= each_line
->line
;
1345 if (addr_match
&& !each_line
->end_sequence
)
1346 return TRUE
; /* we have definitely found what we want */
1348 next_line
= each_line
;
1349 each_line
= each_line
->prev_line
;
1352 /* At this point each_line is NULL but next_line is not. If we found
1353 a candidate end-of-sequence point in the loop above, we can return
1354 that (compatibility with a bug in the Intel compiler); otherwise,
1355 assuming that we found the containing function for this address in
1356 this compilation unit, return the first line we have a number for
1357 (compatibility with GCC 2.95). */
1358 if (*filename_ptr
== NULL
&& function
!= NULL
)
1360 *filename_ptr
= next_line
->filename
;
1361 *linenumber_ptr
= next_line
->line
;
1368 /* Read in the .debug_ranges section for future reference */
1371 read_debug_ranges (struct comp_unit
*unit
)
1373 struct dwarf2_debug
*stash
= unit
->stash
;
1374 if (! stash
->dwarf_ranges_buffer
)
1376 bfd
*abfd
= unit
->abfd
;
1379 msec
= bfd_get_section_by_name (abfd
, ".debug_ranges");
1382 (*_bfd_error_handler
) (_("Dwarf Error: Can't find .debug_ranges section."));
1383 bfd_set_error (bfd_error_bad_value
);
1387 stash
->dwarf_ranges_size
= msec
->size
;
1388 stash
->dwarf_ranges_buffer
1389 = bfd_simple_get_relocated_section_contents (abfd
, msec
, NULL
,
1391 if (! stash
->dwarf_ranges_buffer
)
1397 /* Function table functions. */
1399 /* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return TRUE.
1400 Note that we need to find the function that has the smallest
1401 range that contains ADDR, to handle inlined functions without
1402 depending upon them being ordered in TABLE by increasing range. */
1405 lookup_address_in_function_table (struct comp_unit
*unit
,
1407 struct funcinfo
**function_ptr
,
1408 const char **functionname_ptr
)
1410 struct funcinfo
* each_func
;
1411 struct funcinfo
* best_fit
= NULL
;
1412 struct arange
*arange
;
1414 for (each_func
= unit
->function_table
;
1416 each_func
= each_func
->prev_func
)
1418 for (arange
= &each_func
->arange
;
1420 arange
= arange
->next
)
1422 if (addr
>= arange
->low
&& addr
< arange
->high
)
1425 ((arange
->high
- arange
->low
) < (best_fit
->arange
.high
- best_fit
->arange
.low
)))
1426 best_fit
= each_func
;
1433 *functionname_ptr
= best_fit
->name
;
1434 *function_ptr
= best_fit
;
1443 /* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR
1444 and LINENUMBER_PTR, and return TRUE. */
1447 lookup_symbol_in_function_table (struct comp_unit
*unit
,
1450 const char **filename_ptr
,
1451 unsigned int *linenumber_ptr
)
1453 struct funcinfo
* each_func
;
1454 struct funcinfo
* best_fit
= NULL
;
1455 struct arange
*arange
;
1456 const char *name
= bfd_asymbol_name (sym
);
1457 asection
*sec
= bfd_get_section (sym
);
1459 for (each_func
= unit
->function_table
;
1461 each_func
= each_func
->prev_func
)
1463 for (arange
= &each_func
->arange
;
1465 arange
= arange
->next
)
1467 if ((!each_func
->sec
|| each_func
->sec
== sec
)
1468 && addr
>= arange
->low
1469 && addr
< arange
->high
1471 && strcmp (name
, each_func
->name
) == 0
1473 || ((arange
->high
- arange
->low
)
1474 < (best_fit
->arange
.high
- best_fit
->arange
.low
))))
1475 best_fit
= each_func
;
1481 best_fit
->sec
= sec
;
1482 *filename_ptr
= best_fit
->file
;
1483 *linenumber_ptr
= best_fit
->line
;
1490 /* Variable table functions. */
1492 /* If SYM is within variable table of UNIT, set FILENAME_PTR and
1493 LINENUMBER_PTR, and return TRUE. */
1496 lookup_symbol_in_variable_table (struct comp_unit
*unit
,
1499 const char **filename_ptr
,
1500 unsigned int *linenumber_ptr
)
1502 const char *name
= bfd_asymbol_name (sym
);
1503 asection
*sec
= bfd_get_section (sym
);
1504 struct varinfo
* each
;
1506 for (each
= unit
->variable_table
; each
; each
= each
->prev_var
)
1507 if (each
->stack
== 0
1508 && each
->file
!= NULL
1509 && each
->name
!= NULL
1510 && each
->addr
== addr
1511 && (!each
->sec
|| each
->sec
== sec
)
1512 && strcmp (name
, each
->name
) == 0)
1518 *filename_ptr
= each
->file
;
1519 *linenumber_ptr
= each
->line
;
1527 find_abstract_instance_name (struct comp_unit
*unit
, bfd_uint64_t die_ref
)
1529 bfd
*abfd
= unit
->abfd
;
1531 unsigned int abbrev_number
, bytes_read
, i
;
1532 struct abbrev_info
*abbrev
;
1533 struct attribute attr
;
1536 info_ptr
= unit
->info_ptr_unit
+ die_ref
;
1537 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1538 info_ptr
+= bytes_read
;
1542 abbrev
= lookup_abbrev (abbrev_number
, unit
->abbrevs
);
1545 (*_bfd_error_handler
) (_("Dwarf Error: Could not find abbrev number %u."),
1547 bfd_set_error (bfd_error_bad_value
);
1551 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1553 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1557 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
1561 case DW_AT_specification
:
1562 name
= find_abstract_instance_name (unit
, attr
.u
.val
);
1564 case DW_AT_MIPS_linkage_name
:
1577 read_rangelist (struct comp_unit
*unit
, struct arange
*arange
, bfd_uint64_t offset
)
1579 bfd_byte
*ranges_ptr
;
1580 bfd_vma base_address
= unit
->base_address
;
1582 if (! unit
->stash
->dwarf_ranges_buffer
)
1584 if (! read_debug_ranges (unit
))
1587 ranges_ptr
= unit
->stash
->dwarf_ranges_buffer
+ offset
;
1594 if (unit
->addr_size
== 4)
1596 low_pc
= read_4_bytes (unit
->abfd
, ranges_ptr
);
1598 high_pc
= read_4_bytes (unit
->abfd
, ranges_ptr
);
1603 low_pc
= read_8_bytes (unit
->abfd
, ranges_ptr
);
1605 high_pc
= read_8_bytes (unit
->abfd
, ranges_ptr
);
1608 if (low_pc
== 0 && high_pc
== 0)
1610 if (low_pc
== -1UL && high_pc
!= -1UL)
1611 base_address
= high_pc
;
1613 arange_add (unit
->abfd
, arange
, base_address
+ low_pc
, base_address
+ high_pc
);
1617 /* DWARF2 Compilation unit functions. */
1619 /* Scan over each die in a comp. unit looking for functions to add
1620 to the function table and variables to the variable table. */
1623 scan_unit_for_symbols (struct comp_unit
*unit
)
1625 bfd
*abfd
= unit
->abfd
;
1626 bfd_byte
*info_ptr
= unit
->first_child_die_ptr
;
1627 int nesting_level
= 1;
1628 struct funcinfo
**nested_funcs
;
1629 int nested_funcs_size
;
1631 /* Maintain a stack of in-scope functions and inlined functions, which we
1632 can use to set the caller_func field. */
1633 nested_funcs_size
= 32;
1634 nested_funcs
= bfd_malloc (nested_funcs_size
* sizeof (struct funcinfo
*));
1635 if (nested_funcs
== NULL
)
1637 nested_funcs
[nesting_level
] = 0;
1639 while (nesting_level
)
1641 unsigned int abbrev_number
, bytes_read
, i
;
1642 struct abbrev_info
*abbrev
;
1643 struct attribute attr
;
1644 struct funcinfo
*func
;
1645 struct varinfo
*var
;
1647 bfd_vma high_pc
= 0;
1649 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1650 info_ptr
+= bytes_read
;
1652 if (! abbrev_number
)
1658 abbrev
= lookup_abbrev (abbrev_number
,unit
->abbrevs
);
1661 (*_bfd_error_handler
) (_("Dwarf Error: Could not find abbrev number %u."),
1663 bfd_set_error (bfd_error_bad_value
);
1664 free (nested_funcs
);
1669 if (abbrev
->tag
== DW_TAG_subprogram
1670 || abbrev
->tag
== DW_TAG_entry_point
1671 || abbrev
->tag
== DW_TAG_inlined_subroutine
)
1673 bfd_size_type amt
= sizeof (struct funcinfo
);
1674 func
= bfd_zalloc (abfd
, amt
);
1675 func
->tag
= abbrev
->tag
;
1676 func
->prev_func
= unit
->function_table
;
1677 unit
->function_table
= func
;
1679 if (func
->tag
== DW_TAG_inlined_subroutine
)
1680 for (i
= nesting_level
- 1; i
>= 1; i
--)
1681 if (nested_funcs
[i
])
1683 func
->caller_func
= nested_funcs
[i
];
1686 nested_funcs
[nesting_level
] = func
;
1691 if (abbrev
->tag
== DW_TAG_variable
)
1693 bfd_size_type amt
= sizeof (struct varinfo
);
1694 var
= bfd_zalloc (abfd
, amt
);
1695 var
->tag
= abbrev
->tag
;
1697 var
->prev_var
= unit
->variable_table
;
1698 unit
->variable_table
= var
;
1701 /* No inline function in scope at this nesting level. */
1702 nested_funcs
[nesting_level
] = 0;
1705 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1707 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1713 case DW_AT_call_file
:
1714 func
->caller_file
= concat_filename (unit
->line_table
, attr
.u
.val
);
1717 case DW_AT_call_line
:
1718 func
->caller_line
= attr
.u
.val
;
1721 case DW_AT_abstract_origin
:
1722 func
->name
= find_abstract_instance_name (unit
, attr
.u
.val
);
1726 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
1727 if (func
->name
== NULL
)
1728 func
->name
= attr
.u
.str
;
1731 case DW_AT_MIPS_linkage_name
:
1732 func
->name
= attr
.u
.str
;
1736 low_pc
= attr
.u
.val
;
1740 high_pc
= attr
.u
.val
;
1744 read_rangelist (unit
, &func
->arange
, attr
.u
.val
);
1747 case DW_AT_decl_file
:
1748 func
->file
= concat_filename (unit
->line_table
,
1752 case DW_AT_decl_line
:
1753 func
->line
= attr
.u
.val
;
1765 var
->name
= attr
.u
.str
;
1768 case DW_AT_decl_file
:
1769 var
->file
= concat_filename (unit
->line_table
,
1773 case DW_AT_decl_line
:
1774 var
->line
= attr
.u
.val
;
1777 case DW_AT_external
:
1778 if (attr
.u
.val
!= 0)
1782 case DW_AT_location
:
1786 case DW_FORM_block1
:
1787 case DW_FORM_block2
:
1788 case DW_FORM_block4
:
1789 if (*attr
.u
.blk
->data
== DW_OP_addr
)
1793 /* Verify that DW_OP_addr is the only opcode in the
1794 location, in which case the block size will be 1
1795 plus the address size. */
1796 /* ??? For TLS variables, gcc can emit
1797 DW_OP_addr <addr> DW_OP_GNU_push_tls_address
1798 which we don't handle here yet. */
1799 if (attr
.u
.blk
->size
== unit
->addr_size
+ 1U)
1800 var
->addr
= bfd_get (unit
->addr_size
* 8,
1802 attr
.u
.blk
->data
+ 1);
1817 if (func
&& high_pc
!= 0)
1819 arange_add (unit
->abfd
, &func
->arange
, low_pc
, high_pc
);
1822 if (abbrev
->has_children
)
1826 if (nesting_level
>= nested_funcs_size
)
1828 struct funcinfo
**tmp
;
1830 nested_funcs_size
*= 2;
1831 tmp
= bfd_realloc (nested_funcs
,
1833 * sizeof (struct funcinfo
*)));
1836 free (nested_funcs
);
1841 nested_funcs
[nesting_level
] = 0;
1845 free (nested_funcs
);
1849 /* Parse a DWARF2 compilation unit starting at INFO_PTR. This
1850 includes the compilation unit header that proceeds the DIE's, but
1851 does not include the length field that precedes each compilation
1852 unit header. END_PTR points one past the end of this comp unit.
1853 OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
1855 This routine does not read the whole compilation unit; only enough
1856 to get to the line number information for the compilation unit. */
1858 static struct comp_unit
*
1859 parse_comp_unit (bfd
*abfd
,
1860 struct dwarf2_debug
*stash
,
1861 bfd_vma unit_length
,
1862 bfd_byte
*info_ptr_unit
,
1863 unsigned int offset_size
)
1865 struct comp_unit
* unit
;
1866 unsigned int version
;
1867 bfd_uint64_t abbrev_offset
= 0;
1868 unsigned int addr_size
;
1869 struct abbrev_info
** abbrevs
;
1870 unsigned int abbrev_number
, bytes_read
, i
;
1871 struct abbrev_info
*abbrev
;
1872 struct attribute attr
;
1873 bfd_byte
*info_ptr
= stash
->info_ptr
;
1874 bfd_byte
*end_ptr
= info_ptr
+ unit_length
;
1877 bfd_vma high_pc
= 0;
1879 version
= read_2_bytes (abfd
, info_ptr
);
1881 BFD_ASSERT (offset_size
== 4 || offset_size
== 8);
1882 if (offset_size
== 4)
1883 abbrev_offset
= read_4_bytes (abfd
, info_ptr
);
1885 abbrev_offset
= read_8_bytes (abfd
, info_ptr
);
1886 info_ptr
+= offset_size
;
1887 addr_size
= read_1_byte (abfd
, info_ptr
);
1892 (*_bfd_error_handler
) (_("Dwarf Error: found dwarf version '%u', this reader only handles version 2 information."), version
);
1893 bfd_set_error (bfd_error_bad_value
);
1897 if (addr_size
> sizeof (bfd_vma
))
1899 (*_bfd_error_handler
) (_("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."),
1901 (unsigned int) sizeof (bfd_vma
));
1902 bfd_set_error (bfd_error_bad_value
);
1906 if (addr_size
!= 2 && addr_size
!= 4 && addr_size
!= 8)
1908 (*_bfd_error_handler
) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '2', '4' and '8'.", addr_size
);
1909 bfd_set_error (bfd_error_bad_value
);
1913 /* Read the abbrevs for this compilation unit into a table. */
1914 abbrevs
= read_abbrevs (abfd
, abbrev_offset
, stash
);
1918 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1919 info_ptr
+= bytes_read
;
1920 if (! abbrev_number
)
1922 (*_bfd_error_handler
) (_("Dwarf Error: Bad abbrev number: %u."),
1924 bfd_set_error (bfd_error_bad_value
);
1928 abbrev
= lookup_abbrev (abbrev_number
, abbrevs
);
1931 (*_bfd_error_handler
) (_("Dwarf Error: Could not find abbrev number %u."),
1933 bfd_set_error (bfd_error_bad_value
);
1937 amt
= sizeof (struct comp_unit
);
1938 unit
= bfd_zalloc (abfd
, amt
);
1940 unit
->addr_size
= addr_size
;
1941 unit
->offset_size
= offset_size
;
1942 unit
->abbrevs
= abbrevs
;
1943 unit
->end_ptr
= end_ptr
;
1944 unit
->stash
= stash
;
1945 unit
->info_ptr_unit
= info_ptr_unit
;
1947 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1949 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1951 /* Store the data if it is of an attribute we want to keep in a
1952 partial symbol table. */
1955 case DW_AT_stmt_list
:
1957 unit
->line_offset
= attr
.u
.val
;
1961 unit
->name
= attr
.u
.str
;
1965 low_pc
= attr
.u
.val
;
1966 /* If the compilation unit DIE has a DW_AT_low_pc attribute,
1967 this is the base address to use when reading location
1968 lists or range lists. */
1969 unit
->base_address
= low_pc
;
1973 high_pc
= attr
.u
.val
;
1977 read_rangelist (unit
, &unit
->arange
, attr
.u
.val
);
1980 case DW_AT_comp_dir
:
1982 char *comp_dir
= attr
.u
.str
;
1985 /* Irix 6.2 native cc prepends <machine>.: to the compilation
1986 directory, get rid of it. */
1987 char *cp
= strchr (comp_dir
, ':');
1989 if (cp
&& cp
!= comp_dir
&& cp
[-1] == '.' && cp
[1] == '/')
1992 unit
->comp_dir
= comp_dir
;
2002 arange_add (unit
->abfd
, &unit
->arange
, low_pc
, high_pc
);
2005 unit
->first_child_die_ptr
= info_ptr
;
2009 /* Return TRUE if UNIT may contain the address given by ADDR. When
2010 there are functions written entirely with inline asm statements, the
2011 range info in the compilation unit header may not be correct. We
2012 need to consult the line info table to see if a compilation unit
2013 really contains the given address. */
2016 comp_unit_contains_address (struct comp_unit
*unit
, bfd_vma addr
)
2018 struct arange
*arange
;
2023 arange
= &unit
->arange
;
2026 if (addr
>= arange
->low
&& addr
< arange
->high
)
2028 arange
= arange
->next
;
2035 /* If UNIT contains ADDR, set the output parameters to the values for
2036 the line containing ADDR. The output parameters, FILENAME_PTR,
2037 FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
2040 Return TRUE if UNIT contains ADDR, and no errors were encountered;
2044 comp_unit_find_nearest_line (struct comp_unit
*unit
,
2046 const char **filename_ptr
,
2047 const char **functionname_ptr
,
2048 unsigned int *linenumber_ptr
,
2049 struct dwarf2_debug
*stash
)
2053 struct funcinfo
*function
;
2058 if (! unit
->line_table
)
2060 if (! unit
->stmtlist
)
2066 unit
->line_table
= decode_line_info (unit
, stash
);
2068 if (! unit
->line_table
)
2074 if (unit
->first_child_die_ptr
< unit
->end_ptr
2075 && ! scan_unit_for_symbols (unit
))
2083 func_p
= lookup_address_in_function_table (unit
, addr
,
2084 &function
, functionname_ptr
);
2085 if (func_p
&& (function
->tag
== DW_TAG_inlined_subroutine
))
2086 stash
->inliner_chain
= function
;
2087 line_p
= lookup_address_in_line_info_table (unit
->line_table
, addr
,
2088 function
, filename_ptr
,
2090 return line_p
|| func_p
;
2093 /* If UNIT contains SYM at ADDR, set the output parameters to the
2094 values for the line containing SYM. The output parameters,
2095 FILENAME_PTR, and LINENUMBER_PTR, are pointers to the objects to be
2098 Return TRUE if UNIT contains SYM, and no errors were encountered;
2102 comp_unit_find_line (struct comp_unit
*unit
,
2105 const char **filename_ptr
,
2106 unsigned int *linenumber_ptr
,
2107 struct dwarf2_debug
*stash
)
2112 if (! unit
->line_table
)
2114 if (! unit
->stmtlist
)
2120 unit
->line_table
= decode_line_info (unit
, stash
);
2122 if (! unit
->line_table
)
2128 if (unit
->first_child_die_ptr
< unit
->end_ptr
2129 && ! scan_unit_for_symbols (unit
))
2136 if (sym
->flags
& BSF_FUNCTION
)
2137 return lookup_symbol_in_function_table (unit
, sym
, addr
,
2141 return lookup_symbol_in_variable_table (unit
, sym
, addr
,
2146 /* Locate a section in a BFD containing debugging info. The search starts
2147 from the section after AFTER_SEC, or from the first section in the BFD if
2148 AFTER_SEC is NULL. The search works by examining the names of the
2149 sections. There are two permissiable names. The first is .debug_info.
2150 This is the standard DWARF2 name. The second is a prefix .gnu.linkonce.wi.
2151 This is a variation on the .debug_info section which has a checksum
2152 describing the contents appended onto the name. This allows the linker to
2153 identify and discard duplicate debugging sections for different
2154 compilation units. */
2155 #define DWARF2_DEBUG_INFO ".debug_info"
2156 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
2159 find_debug_info (bfd
*abfd
, asection
*after_sec
)
2164 msec
= after_sec
->next
;
2166 msec
= abfd
->sections
;
2170 if (strcmp (msec
->name
, DWARF2_DEBUG_INFO
) == 0)
2173 if (strncmp (msec
->name
, GNU_LINKONCE_INFO
, strlen (GNU_LINKONCE_INFO
)) == 0)
2182 /* The DWARF2 version of find_nearest_line. Return TRUE if the line
2183 is found without error. ADDR_SIZE is the number of bytes in the
2184 initial .debug_info length field and in the abbreviation offset.
2185 You may use zero to indicate that the default value should be
2189 _bfd_dwarf2_find_nearest_line (bfd
*abfd
,
2193 const char **filename_ptr
,
2194 const char **functionname_ptr
,
2195 unsigned int *linenumber_ptr
,
2196 unsigned int addr_size
,
2199 /* Read each compilation unit from the section .debug_info, and check
2200 to see if it contains the address we are searching for. If yes,
2201 lookup the address, and return the line number info. If no, go
2202 on to the next compilation unit.
2204 We keep a list of all the previously read compilation units, and
2205 a pointer to the next un-read compilation unit. Check the
2206 previously read units before reading more. */
2207 struct dwarf2_debug
*stash
;
2209 /* What address are we looking for? */
2212 struct comp_unit
* each
;
2216 if (section
->output_section
)
2217 addr
+= section
->output_section
->vma
+ section
->output_offset
;
2219 addr
+= section
->vma
;
2220 *filename_ptr
= NULL
;
2221 *functionname_ptr
= NULL
;
2222 *linenumber_ptr
= 0;
2224 /* The DWARF2 spec says that the initial length field, and the
2225 offset of the abbreviation table, should both be 4-byte values.
2226 However, some compilers do things differently. */
2229 BFD_ASSERT (addr_size
== 4 || addr_size
== 8);
2233 bfd_size_type total_size
;
2235 bfd_size_type amt
= sizeof (struct dwarf2_debug
);
2237 stash
= bfd_zalloc (abfd
, amt
);
2243 msec
= find_debug_info (abfd
, NULL
);
2245 /* No dwarf2 info. Note that at this point the stash
2246 has been allocated, but contains zeros, this lets
2247 future calls to this function fail quicker. */
2250 /* There can be more than one DWARF2 info section in a BFD these days.
2251 Read them all in and produce one large stash. We do this in two
2252 passes - in the first pass we just accumulate the section sizes.
2253 In the second pass we read in the section's contents. The allows
2254 us to avoid reallocing the data as we add sections to the stash. */
2255 for (total_size
= 0; msec
; msec
= find_debug_info (abfd
, msec
))
2256 total_size
+= msec
->size
;
2258 stash
->info_ptr
= bfd_alloc (abfd
, total_size
);
2259 if (stash
->info_ptr
== NULL
)
2262 stash
->info_ptr_end
= stash
->info_ptr
;
2264 for (msec
= find_debug_info (abfd
, NULL
);
2266 msec
= find_debug_info (abfd
, msec
))
2269 bfd_size_type start
;
2275 start
= stash
->info_ptr_end
- stash
->info_ptr
;
2277 if ((bfd_simple_get_relocated_section_contents
2278 (abfd
, msec
, stash
->info_ptr
+ start
, symbols
)) == NULL
)
2281 stash
->info_ptr_end
= stash
->info_ptr
+ start
+ size
;
2284 BFD_ASSERT (stash
->info_ptr_end
== stash
->info_ptr
+ total_size
);
2286 stash
->sec
= find_debug_info (abfd
, NULL
);
2287 stash
->sec_info_ptr
= stash
->info_ptr
;
2288 stash
->syms
= symbols
;
2291 /* A null info_ptr indicates that there is no dwarf2 info
2292 (or that an error occured while setting up the stash). */
2293 if (! stash
->info_ptr
)
2296 stash
->inliner_chain
= NULL
;
2298 /* Check the previously read comp. units first. */
2299 for (each
= stash
->all_comp_units
; each
; each
= each
->next_unit
)
2300 if (comp_unit_contains_address (each
, addr
)
2301 && comp_unit_find_nearest_line (each
, addr
, filename_ptr
,
2303 linenumber_ptr
, stash
))
2306 /* Read each remaining comp. units checking each as they are read. */
2307 while (stash
->info_ptr
< stash
->info_ptr_end
)
2310 unsigned int offset_size
= addr_size
;
2311 bfd_byte
*info_ptr_unit
= stash
->info_ptr
;
2313 length
= read_4_bytes (abfd
, stash
->info_ptr
);
2314 /* A 0xffffff length is the DWARF3 way of indicating we use
2315 64-bit offsets, instead of 32-bit offsets. */
2316 if (length
== 0xffffffff)
2319 length
= read_8_bytes (abfd
, stash
->info_ptr
+ 4);
2320 stash
->info_ptr
+= 12;
2322 /* A zero length is the IRIX way of indicating 64-bit offsets,
2323 mostly because the 64-bit length will generally fit in 32
2324 bits, and the endianness helps. */
2325 else if (length
== 0)
2328 length
= read_4_bytes (abfd
, stash
->info_ptr
+ 4);
2329 stash
->info_ptr
+= 8;
2331 /* In the absence of the hints above, we assume addr_size-sized
2332 offsets, for backward-compatibility with pre-DWARF3 64-bit
2334 else if (addr_size
== 8)
2336 length
= read_8_bytes (abfd
, stash
->info_ptr
);
2337 stash
->info_ptr
+= 8;
2340 stash
->info_ptr
+= 4;
2344 each
= parse_comp_unit (abfd
, stash
, length
, info_ptr_unit
,
2346 stash
->info_ptr
+= length
;
2348 if ((bfd_vma
) (stash
->info_ptr
- stash
->sec_info_ptr
)
2349 == stash
->sec
->size
)
2351 stash
->sec
= find_debug_info (abfd
, stash
->sec
);
2352 stash
->sec_info_ptr
= stash
->info_ptr
;
2357 each
->next_unit
= stash
->all_comp_units
;
2358 stash
->all_comp_units
= each
;
2360 /* DW_AT_low_pc and DW_AT_high_pc are optional for
2361 compilation units. If we don't have them (i.e.,
2362 unit->high == 0), we need to consult the line info
2363 table to see if a compilation unit contains the given
2365 if ((each
->arange
.high
== 0
2366 || comp_unit_contains_address (each
, addr
))
2367 && comp_unit_find_nearest_line (each
, addr
,
2380 /* The DWARF2 version of find_line. Return TRUE if the line is found
2384 _bfd_dwarf2_find_line (bfd
*abfd
,
2387 const char **filename_ptr
,
2388 unsigned int *linenumber_ptr
,
2389 unsigned int addr_size
,
2392 /* Read each compilation unit from the section .debug_info, and check
2393 to see if it contains the address we are searching for. If yes,
2394 lookup the address, and return the line number info. If no, go
2395 on to the next compilation unit.
2397 We keep a list of all the previously read compilation units, and
2398 a pointer to the next un-read compilation unit. Check the
2399 previously read units before reading more. */
2400 struct dwarf2_debug
*stash
;
2402 /* What address are we looking for? */
2405 struct comp_unit
* each
;
2411 section
= bfd_get_section (symbol
);
2413 addr
= symbol
->value
;
2414 if (section
->output_section
)
2415 addr
+= section
->output_section
->vma
+ section
->output_offset
;
2417 addr
+= section
->vma
;
2419 *filename_ptr
= NULL
;
2421 *filename_ptr
= NULL
;
2422 *linenumber_ptr
= 0;
2426 bfd_size_type total_size
;
2428 bfd_size_type amt
= sizeof (struct dwarf2_debug
);
2430 stash
= bfd_zalloc (abfd
, amt
);
2436 msec
= find_debug_info (abfd
, NULL
);
2438 /* No dwarf2 info. Note that at this point the stash
2439 has been allocated, but contains zeros, this lets
2440 future calls to this function fail quicker. */
2443 /* There can be more than one DWARF2 info section in a BFD these days.
2444 Read them all in and produce one large stash. We do this in two
2445 passes - in the first pass we just accumulate the section sizes.
2446 In the second pass we read in the section's contents. The allows
2447 us to avoid reallocing the data as we add sections to the stash. */
2448 for (total_size
= 0; msec
; msec
= find_debug_info (abfd
, msec
))
2449 total_size
+= msec
->size
;
2451 stash
->info_ptr
= bfd_alloc (abfd
, total_size
);
2452 if (stash
->info_ptr
== NULL
)
2455 stash
->info_ptr_end
= stash
->info_ptr
;
2457 for (msec
= find_debug_info (abfd
, NULL
);
2459 msec
= find_debug_info (abfd
, msec
))
2462 bfd_size_type start
;
2468 start
= stash
->info_ptr_end
- stash
->info_ptr
;
2470 if ((bfd_simple_get_relocated_section_contents
2471 (abfd
, msec
, stash
->info_ptr
+ start
, symbols
)) == NULL
)
2474 stash
->info_ptr_end
= stash
->info_ptr
+ start
+ size
;
2477 BFD_ASSERT (stash
->info_ptr_end
== stash
->info_ptr
+ total_size
);
2479 stash
->sec
= find_debug_info (abfd
, NULL
);
2480 stash
->sec_info_ptr
= stash
->info_ptr
;
2481 stash
->syms
= symbols
;
2484 /* A null info_ptr indicates that there is no dwarf2 info
2485 (or that an error occured while setting up the stash). */
2486 if (! stash
->info_ptr
)
2489 stash
->inliner_chain
= NULL
;
2491 /* Check the previously read comp. units first. */
2492 for (each
= stash
->all_comp_units
; each
; each
= each
->next_unit
)
2493 if ((symbol
->flags
& BSF_FUNCTION
) == 0
2494 || comp_unit_contains_address (each
, addr
))
2496 found
= comp_unit_find_line (each
, symbol
, addr
, filename_ptr
,
2497 linenumber_ptr
, stash
);
2502 /* The DWARF2 spec says that the initial length field, and the
2503 offset of the abbreviation table, should both be 4-byte values.
2504 However, some compilers do things differently. */
2507 BFD_ASSERT (addr_size
== 4 || addr_size
== 8);
2509 /* Read each remaining comp. units checking each as they are read. */
2510 while (stash
->info_ptr
< stash
->info_ptr_end
)
2513 unsigned int offset_size
= addr_size
;
2514 bfd_byte
*info_ptr_unit
= stash
->info_ptr
;
2516 length
= read_4_bytes (abfd
, stash
->info_ptr
);
2517 /* A 0xffffff length is the DWARF3 way of indicating we use
2518 64-bit offsets, instead of 32-bit offsets. */
2519 if (length
== 0xffffffff)
2522 length
= read_8_bytes (abfd
, stash
->info_ptr
+ 4);
2523 stash
->info_ptr
+= 12;
2525 /* A zero length is the IRIX way of indicating 64-bit offsets,
2526 mostly because the 64-bit length will generally fit in 32
2527 bits, and the endianness helps. */
2528 else if (length
== 0)
2531 length
= read_4_bytes (abfd
, stash
->info_ptr
+ 4);
2532 stash
->info_ptr
+= 8;
2534 /* In the absence of the hints above, we assume addr_size-sized
2535 offsets, for backward-compatibility with pre-DWARF3 64-bit
2537 else if (addr_size
== 8)
2539 length
= read_8_bytes (abfd
, stash
->info_ptr
);
2540 stash
->info_ptr
+= 8;
2543 stash
->info_ptr
+= 4;
2547 each
= parse_comp_unit (abfd
, stash
, length
, info_ptr_unit
,
2549 stash
->info_ptr
+= length
;
2551 if ((bfd_vma
) (stash
->info_ptr
- stash
->sec_info_ptr
)
2552 == stash
->sec
->size
)
2554 stash
->sec
= find_debug_info (abfd
, stash
->sec
);
2555 stash
->sec_info_ptr
= stash
->info_ptr
;
2560 each
->next_unit
= stash
->all_comp_units
;
2561 stash
->all_comp_units
= each
;
2563 /* DW_AT_low_pc and DW_AT_high_pc are optional for
2564 compilation units. If we don't have them (i.e.,
2565 unit->high == 0), we need to consult the line info
2566 table to see if a compilation unit contains the given
2568 found
= (((symbol
->flags
& BSF_FUNCTION
) == 0
2569 || each
->arange
.high
<= 0
2570 || comp_unit_contains_address (each
, addr
))
2571 && comp_unit_find_line (each
, symbol
, addr
,
2585 _bfd_dwarf2_find_inliner_info (bfd
*abfd ATTRIBUTE_UNUSED
,
2586 const char **filename_ptr
,
2587 const char **functionname_ptr
,
2588 unsigned int *linenumber_ptr
,
2591 struct dwarf2_debug
*stash
;
2596 struct funcinfo
*func
= stash
->inliner_chain
;
2597 if (func
&& func
->caller_func
)
2599 *filename_ptr
= func
->caller_file
;
2600 *functionname_ptr
= func
->caller_func
->name
;
2601 *linenumber_ptr
= func
->caller_line
;
2602 stash
->inliner_chain
= func
->caller_func
;
2611 _bfd_dwarf2_cleanup_debug_info (bfd
*abfd
)
2613 struct comp_unit
*each
;
2614 struct dwarf2_debug
*stash
;
2616 if (abfd
== NULL
|| elf_tdata (abfd
) == NULL
)
2619 stash
= elf_tdata (abfd
)->dwarf2_find_line_info
;
2624 for (each
= stash
->all_comp_units
; each
; each
= each
->next_unit
)
2626 struct abbrev_info
**abbrevs
= each
->abbrevs
;
2629 for (i
= 0; i
< ABBREV_HASH_SIZE
; i
++)
2631 struct abbrev_info
*abbrev
= abbrevs
[i
];
2635 free (abbrev
->attrs
);
2636 abbrev
= abbrev
->next
;
2640 if (each
->line_table
)
2642 free (each
->line_table
->dirs
);
2643 free (each
->line_table
->files
);
2647 free (stash
->dwarf_abbrev_buffer
);
2648 free (stash
->dwarf_line_buffer
);
2649 free (stash
->dwarf_ranges_buffer
);