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 switch (unit
->addr_size
)
353 return bfd_get_64 (unit
->abfd
, buf
);
355 return bfd_get_32 (unit
->abfd
, buf
);
357 return bfd_get_16 (unit
->abfd
, buf
);
363 /* Lookup an abbrev_info structure in the abbrev hash table. */
365 static struct abbrev_info
*
366 lookup_abbrev (unsigned int number
, struct abbrev_info
**abbrevs
)
368 unsigned int hash_number
;
369 struct abbrev_info
*abbrev
;
371 hash_number
= number
% ABBREV_HASH_SIZE
;
372 abbrev
= abbrevs
[hash_number
];
376 if (abbrev
->number
== number
)
379 abbrev
= abbrev
->next
;
385 /* In DWARF version 2, the description of the debugging information is
386 stored in a separate .debug_abbrev section. Before we read any
387 dies from a section we read in all abbreviations and install them
390 static struct abbrev_info
**
391 read_abbrevs (bfd
*abfd
, bfd_uint64_t offset
, struct dwarf2_debug
*stash
)
393 struct abbrev_info
**abbrevs
;
394 bfd_byte
*abbrev_ptr
;
395 struct abbrev_info
*cur_abbrev
;
396 unsigned int abbrev_number
, bytes_read
, abbrev_name
;
397 unsigned int abbrev_form
, hash_number
;
400 if (! stash
->dwarf_abbrev_buffer
)
404 msec
= bfd_get_section_by_name (abfd
, ".debug_abbrev");
407 (*_bfd_error_handler
) (_("Dwarf Error: Can't find .debug_abbrev section."));
408 bfd_set_error (bfd_error_bad_value
);
412 stash
->dwarf_abbrev_size
= msec
->size
;
413 stash
->dwarf_abbrev_buffer
414 = bfd_simple_get_relocated_section_contents (abfd
, msec
, NULL
,
416 if (! stash
->dwarf_abbrev_buffer
)
420 if (offset
>= stash
->dwarf_abbrev_size
)
422 (*_bfd_error_handler
) (_("Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)."),
423 (unsigned long) offset
, stash
->dwarf_abbrev_size
);
424 bfd_set_error (bfd_error_bad_value
);
428 amt
= sizeof (struct abbrev_info
*) * ABBREV_HASH_SIZE
;
429 abbrevs
= bfd_zalloc (abfd
, amt
);
431 abbrev_ptr
= stash
->dwarf_abbrev_buffer
+ offset
;
432 abbrev_number
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
433 abbrev_ptr
+= bytes_read
;
435 /* Loop until we reach an abbrev number of 0. */
436 while (abbrev_number
)
438 amt
= sizeof (struct abbrev_info
);
439 cur_abbrev
= bfd_zalloc (abfd
, amt
);
441 /* Read in abbrev header. */
442 cur_abbrev
->number
= abbrev_number
;
443 cur_abbrev
->tag
= (enum dwarf_tag
)
444 read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
445 abbrev_ptr
+= bytes_read
;
446 cur_abbrev
->has_children
= read_1_byte (abfd
, abbrev_ptr
);
449 /* Now read in declarations. */
450 abbrev_name
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
451 abbrev_ptr
+= bytes_read
;
452 abbrev_form
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
453 abbrev_ptr
+= bytes_read
;
457 if ((cur_abbrev
->num_attrs
% ATTR_ALLOC_CHUNK
) == 0)
459 struct attr_abbrev
*tmp
;
461 amt
= cur_abbrev
->num_attrs
+ ATTR_ALLOC_CHUNK
;
462 amt
*= sizeof (struct attr_abbrev
);
463 tmp
= bfd_realloc (cur_abbrev
->attrs
, amt
);
468 for (i
= 0; i
< ABBREV_HASH_SIZE
; i
++)
470 struct abbrev_info
*abbrev
= abbrevs
[i
];
474 free (abbrev
->attrs
);
475 abbrev
= abbrev
->next
;
480 cur_abbrev
->attrs
= tmp
;
483 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].name
484 = (enum dwarf_attribute
) abbrev_name
;
485 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
++].form
486 = (enum dwarf_form
) abbrev_form
;
487 abbrev_name
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
488 abbrev_ptr
+= bytes_read
;
489 abbrev_form
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
490 abbrev_ptr
+= bytes_read
;
493 hash_number
= abbrev_number
% ABBREV_HASH_SIZE
;
494 cur_abbrev
->next
= abbrevs
[hash_number
];
495 abbrevs
[hash_number
] = cur_abbrev
;
497 /* Get next abbreviation.
498 Under Irix6 the abbreviations for a compilation unit are not
499 always properly terminated with an abbrev number of 0.
500 Exit loop if we encounter an abbreviation which we have
501 already read (which means we are about to read the abbreviations
502 for the next compile unit) or if the end of the abbreviation
504 if ((unsigned int) (abbrev_ptr
- stash
->dwarf_abbrev_buffer
)
505 >= stash
->dwarf_abbrev_size
)
507 abbrev_number
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
508 abbrev_ptr
+= bytes_read
;
509 if (lookup_abbrev (abbrev_number
,abbrevs
) != NULL
)
516 /* Read an attribute value described by an attribute form. */
519 read_attribute_value (struct attribute
*attr
,
521 struct comp_unit
*unit
,
524 bfd
*abfd
= unit
->abfd
;
525 unsigned int bytes_read
;
526 struct dwarf_block
*blk
;
529 attr
->form
= (enum dwarf_form
) form
;
534 /* FIXME: DWARF3 draft says DW_FORM_ref_addr is offset_size. */
535 case DW_FORM_ref_addr
:
536 attr
->u
.val
= read_address (unit
, info_ptr
);
537 info_ptr
+= unit
->addr_size
;
540 amt
= sizeof (struct dwarf_block
);
541 blk
= bfd_alloc (abfd
, amt
);
542 blk
->size
= read_2_bytes (abfd
, info_ptr
);
544 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
545 info_ptr
+= blk
->size
;
549 amt
= sizeof (struct dwarf_block
);
550 blk
= bfd_alloc (abfd
, amt
);
551 blk
->size
= read_4_bytes (abfd
, info_ptr
);
553 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
554 info_ptr
+= blk
->size
;
558 attr
->u
.val
= read_2_bytes (abfd
, info_ptr
);
562 attr
->u
.val
= read_4_bytes (abfd
, info_ptr
);
566 attr
->u
.val
= read_8_bytes (abfd
, info_ptr
);
570 attr
->u
.str
= read_string (abfd
, info_ptr
, &bytes_read
);
571 info_ptr
+= bytes_read
;
574 attr
->u
.str
= read_indirect_string (unit
, info_ptr
, &bytes_read
);
575 info_ptr
+= bytes_read
;
578 amt
= sizeof (struct dwarf_block
);
579 blk
= bfd_alloc (abfd
, amt
);
580 blk
->size
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
581 info_ptr
+= bytes_read
;
582 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
583 info_ptr
+= blk
->size
;
587 amt
= sizeof (struct dwarf_block
);
588 blk
= bfd_alloc (abfd
, amt
);
589 blk
->size
= read_1_byte (abfd
, info_ptr
);
591 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
592 info_ptr
+= blk
->size
;
596 attr
->u
.val
= read_1_byte (abfd
, info_ptr
);
600 attr
->u
.val
= read_1_byte (abfd
, info_ptr
);
604 attr
->u
.sval
= read_signed_leb128 (abfd
, info_ptr
, &bytes_read
);
605 info_ptr
+= bytes_read
;
608 attr
->u
.val
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
609 info_ptr
+= bytes_read
;
612 attr
->u
.val
= read_1_byte (abfd
, info_ptr
);
616 attr
->u
.val
= read_2_bytes (abfd
, info_ptr
);
620 attr
->u
.val
= read_4_bytes (abfd
, info_ptr
);
624 attr
->u
.val
= read_8_bytes (abfd
, info_ptr
);
627 case DW_FORM_ref_udata
:
628 attr
->u
.val
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
629 info_ptr
+= bytes_read
;
631 case DW_FORM_indirect
:
632 form
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
633 info_ptr
+= bytes_read
;
634 info_ptr
= read_attribute_value (attr
, form
, unit
, info_ptr
);
637 (*_bfd_error_handler
) (_("Dwarf Error: Invalid or unhandled FORM value: %u."),
639 bfd_set_error (bfd_error_bad_value
);
644 /* Read an attribute described by an abbreviated attribute. */
647 read_attribute (struct attribute
*attr
,
648 struct attr_abbrev
*abbrev
,
649 struct comp_unit
*unit
,
652 attr
->name
= abbrev
->name
;
653 info_ptr
= read_attribute_value (attr
, abbrev
->form
, unit
, info_ptr
);
657 /* Source line information table routines. */
659 #define FILE_ALLOC_CHUNK 5
660 #define DIR_ALLOC_CHUNK 5
664 struct line_info
* prev_line
;
669 int end_sequence
; /* End of (sequential) code sequence. */
680 struct line_info_table
683 unsigned int num_files
;
684 unsigned int num_dirs
;
687 struct fileinfo
* files
;
688 struct line_info
* last_line
; /* largest VMA */
689 struct line_info
* lcl_head
; /* local head; used in 'add_line_info' */
692 /* Remember some information about each function. If the function is
693 inlined (DW_TAG_inlined_subroutine) it may have two additional
694 attributes, DW_AT_call_file and DW_AT_call_line, which specify the
695 source code location where this function was inlined. */
699 struct funcinfo
*prev_func
; /* Pointer to previous function in list of all functions */
700 struct funcinfo
*caller_func
; /* Pointer to function one scope higher */
701 char *caller_file
; /* Source location file name where caller_func inlines this func */
702 int caller_line
; /* Source location line number where caller_func inlines this func */
703 char *file
; /* Source location file name */
704 int line
; /* Source location line number */
708 struct arange arange
;
709 asection
*sec
; /* Where the symbol is defined */
714 /* Pointer to previous variable in list of all variables */
715 struct varinfo
*prev_var
;
716 /* Source location file name */
718 /* Source location line number */
722 /* Where the symbol is defined */
724 /* Is this a stack variable? */
725 unsigned int stack
: 1;
728 /* Adds a new entry to the line_info list in the line_info_table, ensuring
729 that the list is sorted. Note that the line_info list is sorted from
730 highest to lowest VMA (with possible duplicates); that is,
731 line_info->prev_line always accesses an equal or smaller VMA. */
734 add_line_info (struct line_info_table
*table
,
741 bfd_size_type amt
= sizeof (struct line_info
);
742 struct line_info
* info
= bfd_alloc (table
->abfd
, amt
);
744 /* Find the correct location for 'info'. Normally we will receive
745 new line_info data 1) in order and 2) with increasing VMAs.
746 However some compilers break the rules (cf. decode_line_info) and
747 so we include some heuristics for quickly finding the correct
748 location for 'info'. In particular, these heuristics optimize for
749 the common case in which the VMA sequence that we receive is a
750 list of locally sorted VMAs such as
751 p...z a...j (where a < j < p < z)
753 Note: table->lcl_head is used to head an *actual* or *possible*
754 sequence within the list (such as a...j) that is not directly
755 headed by table->last_line
757 Note: we may receive duplicate entries from 'decode_line_info'. */
760 if (!table
->last_line
761 || address
>= table
->last_line
->address
)
763 /* Normal case: add 'info' to the beginning of the list */
764 info
->prev_line
= table
->last_line
;
765 table
->last_line
= info
;
767 /* lcl_head: initialize to head a *possible* sequence at the end. */
768 if (!table
->lcl_head
)
769 table
->lcl_head
= info
;
772 else if (!table
->lcl_head
->prev_line
773 && table
->lcl_head
->address
> address
)
775 /* Abnormal but easy: lcl_head is 1) at the *end* of the line
776 list and 2) the head of 'info'. */
777 info
->prev_line
= NULL
;
778 table
->lcl_head
->prev_line
= info
;
781 else if (table
->lcl_head
->prev_line
782 && table
->lcl_head
->address
> address
783 && address
>= table
->lcl_head
->prev_line
->address
)
785 /* Abnormal but easy: lcl_head is 1) in the *middle* of the line
786 list and 2) the head of 'info'. */
787 info
->prev_line
= table
->lcl_head
->prev_line
;
788 table
->lcl_head
->prev_line
= info
;
793 /* Abnormal and hard: Neither 'last_line' nor 'lcl_head' are valid
794 heads for 'info'. Reset 'lcl_head' and repeat. */
795 struct line_info
* li2
= table
->last_line
; /* always non-NULL */
796 struct line_info
* li1
= li2
->prev_line
;
800 if (li2
->address
> address
&& address
>= li1
->address
)
803 li2
= li1
; /* always non-NULL */
804 li1
= li1
->prev_line
;
806 table
->lcl_head
= li2
;
809 /* Set member data of 'info'. */
810 info
->address
= address
;
812 info
->column
= column
;
813 info
->end_sequence
= end_sequence
;
815 if (filename
&& filename
[0])
817 info
->filename
= bfd_alloc (table
->abfd
, strlen (filename
) + 1);
819 strcpy (info
->filename
, filename
);
822 info
->filename
= NULL
;
825 /* Extract a fully qualified filename from a line info table.
826 The returned string has been malloc'ed and it is the caller's
827 responsibility to free it. */
830 concat_filename (struct line_info_table
*table
, unsigned int file
)
834 if (file
- 1 >= table
->num_files
)
836 (*_bfd_error_handler
)
837 (_("Dwarf Error: mangled line number section (bad file number)."));
838 return strdup ("<unknown>");
841 filename
= table
->files
[file
- 1].name
;
843 if (! IS_ABSOLUTE_PATH (filename
))
845 char *dirname
= (table
->files
[file
- 1].dir
846 ? table
->dirs
[table
->files
[file
- 1].dir
- 1]
849 /* Not all tools set DW_AT_comp_dir, so dirname may be unknown.
850 The best we can do is return the filename part. */
853 unsigned int len
= strlen (dirname
) + strlen (filename
) + 2;
856 name
= bfd_malloc (len
);
858 sprintf (name
, "%s/%s", dirname
, filename
);
863 return strdup (filename
);
867 arange_add (bfd
*abfd
, struct arange
*first_arange
, bfd_vma low_pc
, bfd_vma high_pc
)
869 struct arange
*arange
;
871 /* If the first arange is empty, use it. */
872 if (first_arange
->high
== 0)
874 first_arange
->low
= low_pc
;
875 first_arange
->high
= high_pc
;
879 /* Next see if we can cheaply extend an existing range. */
880 arange
= first_arange
;
883 if (low_pc
== arange
->high
)
885 arange
->high
= high_pc
;
888 if (high_pc
== arange
->low
)
890 arange
->low
= low_pc
;
893 arange
= arange
->next
;
897 /* Need to allocate a new arange and insert it into the arange list.
898 Order isn't significant, so just insert after the first arange. */
899 arange
= bfd_zalloc (abfd
, sizeof (*arange
));
900 arange
->low
= low_pc
;
901 arange
->high
= high_pc
;
902 arange
->next
= first_arange
->next
;
903 first_arange
->next
= arange
;
906 /* Decode the line number information for UNIT. */
908 static struct line_info_table
*
909 decode_line_info (struct comp_unit
*unit
, struct dwarf2_debug
*stash
)
911 bfd
*abfd
= unit
->abfd
;
912 struct line_info_table
* table
;
916 unsigned int i
, bytes_read
, offset_size
;
917 char *cur_file
, *cur_dir
;
918 unsigned char op_code
, extended_op
, adj_opcode
;
921 if (! stash
->dwarf_line_buffer
)
925 msec
= bfd_get_section_by_name (abfd
, ".debug_line");
928 (*_bfd_error_handler
) (_("Dwarf Error: Can't find .debug_line section."));
929 bfd_set_error (bfd_error_bad_value
);
933 stash
->dwarf_line_size
= msec
->size
;
934 stash
->dwarf_line_buffer
935 = bfd_simple_get_relocated_section_contents (abfd
, msec
, NULL
,
937 if (! stash
->dwarf_line_buffer
)
941 /* It is possible to get a bad value for the line_offset. Validate
942 it here so that we won't get a segfault below. */
943 if (unit
->line_offset
>= stash
->dwarf_line_size
)
945 (*_bfd_error_handler
) (_("Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)."),
946 unit
->line_offset
, stash
->dwarf_line_size
);
947 bfd_set_error (bfd_error_bad_value
);
951 amt
= sizeof (struct line_info_table
);
952 table
= bfd_alloc (abfd
, amt
);
954 table
->comp_dir
= unit
->comp_dir
;
956 table
->num_files
= 0;
963 table
->last_line
= NULL
;
964 table
->lcl_head
= NULL
;
966 line_ptr
= stash
->dwarf_line_buffer
+ unit
->line_offset
;
968 /* Read in the prologue. */
969 lh
.total_length
= read_4_bytes (abfd
, line_ptr
);
972 if (lh
.total_length
== 0xffffffff)
974 lh
.total_length
= read_8_bytes (abfd
, line_ptr
);
978 else if (lh
.total_length
== 0 && unit
->addr_size
== 8)
980 /* Handle (non-standard) 64-bit DWARF2 formats. */
981 lh
.total_length
= read_4_bytes (abfd
, line_ptr
);
985 line_end
= line_ptr
+ lh
.total_length
;
986 lh
.version
= read_2_bytes (abfd
, line_ptr
);
988 if (offset_size
== 4)
989 lh
.prologue_length
= read_4_bytes (abfd
, line_ptr
);
991 lh
.prologue_length
= read_8_bytes (abfd
, line_ptr
);
992 line_ptr
+= offset_size
;
993 lh
.minimum_instruction_length
= read_1_byte (abfd
, line_ptr
);
995 lh
.default_is_stmt
= read_1_byte (abfd
, line_ptr
);
997 lh
.line_base
= read_1_signed_byte (abfd
, line_ptr
);
999 lh
.line_range
= read_1_byte (abfd
, line_ptr
);
1001 lh
.opcode_base
= read_1_byte (abfd
, line_ptr
);
1003 amt
= lh
.opcode_base
* sizeof (unsigned char);
1004 lh
.standard_opcode_lengths
= bfd_alloc (abfd
, amt
);
1006 lh
.standard_opcode_lengths
[0] = 1;
1008 for (i
= 1; i
< lh
.opcode_base
; ++i
)
1010 lh
.standard_opcode_lengths
[i
] = read_1_byte (abfd
, line_ptr
);
1014 /* Read directory table. */
1015 while ((cur_dir
= read_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
1017 line_ptr
+= bytes_read
;
1019 if ((table
->num_dirs
% DIR_ALLOC_CHUNK
) == 0)
1023 amt
= table
->num_dirs
+ DIR_ALLOC_CHUNK
;
1024 amt
*= sizeof (char *);
1026 tmp
= bfd_realloc (table
->dirs
, amt
);
1035 table
->dirs
[table
->num_dirs
++] = cur_dir
;
1038 line_ptr
+= bytes_read
;
1040 /* Read file name table. */
1041 while ((cur_file
= read_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
1043 line_ptr
+= bytes_read
;
1045 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
1047 struct fileinfo
*tmp
;
1049 amt
= table
->num_files
+ FILE_ALLOC_CHUNK
;
1050 amt
*= sizeof (struct fileinfo
);
1052 tmp
= bfd_realloc (table
->files
, amt
);
1055 free (table
->files
);
1062 table
->files
[table
->num_files
].name
= cur_file
;
1063 table
->files
[table
->num_files
].dir
=
1064 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1065 line_ptr
+= bytes_read
;
1066 table
->files
[table
->num_files
].time
=
1067 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1068 line_ptr
+= bytes_read
;
1069 table
->files
[table
->num_files
].size
=
1070 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1071 line_ptr
+= bytes_read
;
1075 line_ptr
+= bytes_read
;
1077 /* Read the statement sequences until there's nothing left. */
1078 while (line_ptr
< line_end
)
1080 /* State machine registers. */
1081 bfd_vma address
= 0;
1082 char * filename
= table
->num_files
? concat_filename (table
, 1) : NULL
;
1083 unsigned int line
= 1;
1084 unsigned int column
= 0;
1085 int is_stmt
= lh
.default_is_stmt
;
1086 int basic_block
= 0;
1087 int end_sequence
= 0;
1088 /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
1089 compilers generate address sequences that are wildly out of
1090 order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
1091 for ia64-Linux). Thus, to determine the low and high
1092 address, we must compare on every DW_LNS_copy, etc. */
1093 bfd_vma low_pc
= (bfd_vma
) -1;
1094 bfd_vma high_pc
= 0;
1096 /* Decode the table. */
1097 while (! end_sequence
)
1099 op_code
= read_1_byte (abfd
, line_ptr
);
1102 if (op_code
>= lh
.opcode_base
)
1104 /* Special operand. */
1105 adj_opcode
= op_code
- lh
.opcode_base
;
1106 address
+= (adj_opcode
/ lh
.line_range
)
1107 * lh
.minimum_instruction_length
;
1108 line
+= lh
.line_base
+ (adj_opcode
% lh
.line_range
);
1109 /* Append row to matrix using current values. */
1110 add_line_info (table
, address
, filename
, line
, column
, 0);
1112 if (address
< low_pc
)
1114 if (address
> high_pc
)
1117 else switch (op_code
)
1119 case DW_LNS_extended_op
:
1120 /* Ignore length. */
1122 extended_op
= read_1_byte (abfd
, line_ptr
);
1125 switch (extended_op
)
1127 case DW_LNE_end_sequence
:
1129 add_line_info (table
, address
, filename
, line
, column
,
1131 if (address
< low_pc
)
1133 if (address
> high_pc
)
1135 arange_add (unit
->abfd
, &unit
->arange
, low_pc
, high_pc
);
1137 case DW_LNE_set_address
:
1138 address
= read_address (unit
, line_ptr
);
1139 line_ptr
+= unit
->addr_size
;
1141 case DW_LNE_define_file
:
1142 cur_file
= read_string (abfd
, line_ptr
, &bytes_read
);
1143 line_ptr
+= bytes_read
;
1144 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
1146 struct fileinfo
*tmp
;
1148 amt
= table
->num_files
+ FILE_ALLOC_CHUNK
;
1149 amt
*= sizeof (struct fileinfo
);
1150 tmp
= bfd_realloc (table
->files
, amt
);
1153 free (table
->files
);
1160 table
->files
[table
->num_files
].name
= cur_file
;
1161 table
->files
[table
->num_files
].dir
=
1162 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1163 line_ptr
+= bytes_read
;
1164 table
->files
[table
->num_files
].time
=
1165 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1166 line_ptr
+= bytes_read
;
1167 table
->files
[table
->num_files
].size
=
1168 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1169 line_ptr
+= bytes_read
;
1173 (*_bfd_error_handler
) (_("Dwarf Error: mangled line number section."));
1174 bfd_set_error (bfd_error_bad_value
);
1176 free (table
->files
);
1182 add_line_info (table
, address
, filename
, line
, column
, 0);
1184 if (address
< low_pc
)
1186 if (address
> high_pc
)
1189 case DW_LNS_advance_pc
:
1190 address
+= lh
.minimum_instruction_length
1191 * read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1192 line_ptr
+= bytes_read
;
1194 case DW_LNS_advance_line
:
1195 line
+= read_signed_leb128 (abfd
, line_ptr
, &bytes_read
);
1196 line_ptr
+= bytes_read
;
1198 case DW_LNS_set_file
:
1202 /* The file and directory tables are 0
1203 based, the references are 1 based. */
1204 file
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1205 line_ptr
+= bytes_read
;
1208 filename
= concat_filename (table
, file
);
1211 case DW_LNS_set_column
:
1212 column
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1213 line_ptr
+= bytes_read
;
1215 case DW_LNS_negate_stmt
:
1216 is_stmt
= (!is_stmt
);
1218 case DW_LNS_set_basic_block
:
1221 case DW_LNS_const_add_pc
:
1222 address
+= lh
.minimum_instruction_length
1223 * ((255 - lh
.opcode_base
) / lh
.line_range
);
1225 case DW_LNS_fixed_advance_pc
:
1226 address
+= read_2_bytes (abfd
, line_ptr
);
1233 /* Unknown standard opcode, ignore it. */
1234 for (i
= 0; i
< lh
.standard_opcode_lengths
[op_code
]; i
++)
1236 (void) read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1237 line_ptr
+= bytes_read
;
1250 /* If ADDR is within TABLE set the output parameters and return TRUE,
1251 otherwise return FALSE. The output parameters, FILENAME_PTR and
1252 LINENUMBER_PTR, are pointers to the objects to be filled in. */
1255 lookup_address_in_line_info_table (struct line_info_table
*table
,
1257 struct funcinfo
*function
,
1258 const char **filename_ptr
,
1259 unsigned int *linenumber_ptr
)
1261 /* Note: table->last_line should be a descendingly sorted list. */
1262 struct line_info
* next_line
= table
->last_line
;
1263 struct line_info
* each_line
= NULL
;
1264 *filename_ptr
= NULL
;
1269 each_line
= next_line
->prev_line
;
1271 /* Check for large addresses */
1272 if (addr
> next_line
->address
)
1273 each_line
= NULL
; /* ensure we skip over the normal case */
1275 /* Normal case: search the list; save */
1276 while (each_line
&& next_line
)
1278 /* If we have an address match, save this info. This allows us
1279 to return as good as results as possible for strange debugging
1281 bfd_boolean addr_match
= FALSE
;
1282 if (each_line
->address
<= addr
&& addr
< next_line
->address
)
1286 /* If this line appears to span functions, and addr is in the
1287 later function, return the first line of that function instead
1288 of the last line of the earlier one. This check is for GCC
1289 2.95, which emits the first line number for a function late. */
1291 if (function
!= NULL
)
1294 struct arange
*arange
;
1296 /* Find the lowest address in the function's range list */
1297 lowest_pc
= function
->arange
.low
;
1298 for (arange
= &function
->arange
;
1300 arange
= arange
->next
)
1302 if (function
->arange
.low
< lowest_pc
)
1303 lowest_pc
= function
->arange
.low
;
1305 /* Check for spanning function and set outgoing line info */
1306 if (addr
>= lowest_pc
1307 && each_line
->address
< lowest_pc
1308 && next_line
->address
> lowest_pc
)
1310 *filename_ptr
= next_line
->filename
;
1311 *linenumber_ptr
= next_line
->line
;
1315 *filename_ptr
= each_line
->filename
;
1316 *linenumber_ptr
= each_line
->line
;
1321 *filename_ptr
= each_line
->filename
;
1322 *linenumber_ptr
= each_line
->line
;
1326 if (addr_match
&& !each_line
->end_sequence
)
1327 return TRUE
; /* we have definitely found what we want */
1329 next_line
= each_line
;
1330 each_line
= each_line
->prev_line
;
1333 /* At this point each_line is NULL but next_line is not. If we found
1334 a candidate end-of-sequence point in the loop above, we can return
1335 that (compatibility with a bug in the Intel compiler); otherwise,
1336 assuming that we found the containing function for this address in
1337 this compilation unit, return the first line we have a number for
1338 (compatibility with GCC 2.95). */
1339 if (*filename_ptr
== NULL
&& function
!= NULL
)
1341 *filename_ptr
= next_line
->filename
;
1342 *linenumber_ptr
= next_line
->line
;
1349 /* Read in the .debug_ranges section for future reference */
1352 read_debug_ranges (struct comp_unit
*unit
)
1354 struct dwarf2_debug
*stash
= unit
->stash
;
1355 if (! stash
->dwarf_ranges_buffer
)
1357 bfd
*abfd
= unit
->abfd
;
1360 msec
= bfd_get_section_by_name (abfd
, ".debug_ranges");
1363 (*_bfd_error_handler
) (_("Dwarf Error: Can't find .debug_ranges section."));
1364 bfd_set_error (bfd_error_bad_value
);
1368 stash
->dwarf_ranges_size
= msec
->size
;
1369 stash
->dwarf_ranges_buffer
1370 = bfd_simple_get_relocated_section_contents (abfd
, msec
, NULL
,
1372 if (! stash
->dwarf_ranges_buffer
)
1378 /* Function table functions. */
1380 /* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return TRUE.
1381 Note that we need to find the function that has the smallest
1382 range that contains ADDR, to handle inlined functions without
1383 depending upon them being ordered in TABLE by increasing range. */
1386 lookup_address_in_function_table (struct comp_unit
*unit
,
1388 struct funcinfo
**function_ptr
,
1389 const char **functionname_ptr
)
1391 struct funcinfo
* each_func
;
1392 struct funcinfo
* best_fit
= NULL
;
1393 struct arange
*arange
;
1395 for (each_func
= unit
->function_table
;
1397 each_func
= each_func
->prev_func
)
1399 for (arange
= &each_func
->arange
;
1401 arange
= arange
->next
)
1403 if (addr
>= arange
->low
&& addr
< arange
->high
)
1406 ((arange
->high
- arange
->low
) < (best_fit
->arange
.high
- best_fit
->arange
.low
)))
1407 best_fit
= each_func
;
1414 struct funcinfo
* curr_func
= best_fit
;
1416 *functionname_ptr
= best_fit
->name
;
1417 *function_ptr
= best_fit
;
1419 /* If we found a match and it is a function that was inlined,
1420 traverse the function list looking for the function at the
1421 next higher scope and save a pointer to it for future use.
1422 Note that because of the way the DWARF info is generated, and
1423 the way we build the function list, the first function at the
1424 next higher level is the one we want. */
1426 for (each_func
= best_fit
-> prev_func
;
1427 each_func
&& (curr_func
->tag
== DW_TAG_inlined_subroutine
);
1428 each_func
= each_func
->prev_func
)
1430 if (each_func
->nesting_level
< curr_func
->nesting_level
)
1432 curr_func
->caller_func
= each_func
;
1433 curr_func
= each_func
;
1444 /* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR
1445 and LINENUMBER_PTR, and return TRUE. */
1448 lookup_symbol_in_function_table (struct comp_unit
*unit
,
1451 const char **filename_ptr
,
1452 unsigned int *linenumber_ptr
)
1454 struct funcinfo
* each_func
;
1455 struct funcinfo
* best_fit
= NULL
;
1456 struct arange
*arange
;
1457 const char *name
= bfd_asymbol_name (sym
);
1458 asection
*sec
= bfd_get_section (sym
);
1460 for (each_func
= unit
->function_table
;
1462 each_func
= each_func
->prev_func
)
1464 for (arange
= &each_func
->arange
;
1466 arange
= arange
->next
)
1468 if ((!each_func
->sec
|| each_func
->sec
== sec
)
1469 && addr
>= arange
->low
1470 && 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
,
1498 const char **filename_ptr
,
1499 unsigned int *linenumber_ptr
)
1501 const char *name
= bfd_asymbol_name (sym
);
1502 asection
*sec
= bfd_get_section (sym
);
1503 struct varinfo
* each
;
1505 for (each
= unit
->variable_table
; each
; each
= each
->prev_var
)
1506 if (each
->stack
== 0
1507 && (!each
->sec
|| each
->sec
== sec
)
1508 && strcmp (name
, each
->name
) == 0)
1514 *filename_ptr
= each
->file
;
1515 *linenumber_ptr
= each
->line
;
1523 find_abstract_instance_name (struct comp_unit
*unit
, bfd_uint64_t die_ref
)
1525 bfd
*abfd
= unit
->abfd
;
1527 unsigned int abbrev_number
, bytes_read
, i
;
1528 struct abbrev_info
*abbrev
;
1529 struct attribute attr
;
1532 info_ptr
= unit
->info_ptr_unit
+ die_ref
;
1533 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1534 info_ptr
+= bytes_read
;
1538 abbrev
= lookup_abbrev (abbrev_number
, unit
->abbrevs
);
1541 (*_bfd_error_handler
) (_("Dwarf Error: Could not find abbrev number %u."),
1543 bfd_set_error (bfd_error_bad_value
);
1547 for (i
= 0; i
< abbrev
->num_attrs
&& !name
; ++i
)
1549 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1555 case DW_AT_specification
:
1556 name
= find_abstract_instance_name (unit
, attr
.u
.val
);
1568 read_rangelist (struct comp_unit
*unit
, struct arange
*arange
, bfd_uint64_t offset
)
1570 bfd_byte
*ranges_ptr
;
1571 bfd_vma base_address
= unit
->base_address
;
1573 if (! unit
->stash
->dwarf_ranges_buffer
)
1575 if (! read_debug_ranges (unit
))
1578 ranges_ptr
= unit
->stash
->dwarf_ranges_buffer
+ offset
;
1585 if (unit
->offset_size
== 4)
1587 low_pc
= read_4_bytes (unit
->abfd
, ranges_ptr
);
1589 high_pc
= read_4_bytes (unit
->abfd
, ranges_ptr
);
1594 low_pc
= read_8_bytes (unit
->abfd
, ranges_ptr
);
1596 high_pc
= read_8_bytes (unit
->abfd
, ranges_ptr
);
1599 if (low_pc
== 0 && high_pc
== 0)
1601 if (low_pc
== -1UL && high_pc
!= -1UL)
1602 base_address
= high_pc
;
1604 arange_add (unit
->abfd
, arange
, base_address
+ low_pc
, base_address
+ high_pc
);
1608 /* DWARF2 Compilation unit functions. */
1610 /* Scan over each die in a comp. unit looking for functions to add
1611 to the function table and variables to the variable table. */
1614 scan_unit_for_symbols (struct comp_unit
*unit
)
1616 bfd
*abfd
= unit
->abfd
;
1617 bfd_byte
*info_ptr
= unit
->first_child_die_ptr
;
1618 int nesting_level
= 1;
1620 while (nesting_level
)
1622 unsigned int abbrev_number
, bytes_read
, i
;
1623 struct abbrev_info
*abbrev
;
1624 struct attribute attr
;
1625 struct funcinfo
*func
;
1626 struct varinfo
*var
;
1628 bfd_vma high_pc
= 0;
1630 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1631 info_ptr
+= bytes_read
;
1633 if (! abbrev_number
)
1639 abbrev
= lookup_abbrev (abbrev_number
,unit
->abbrevs
);
1642 (*_bfd_error_handler
) (_("Dwarf Error: Could not find abbrev number %u."),
1644 bfd_set_error (bfd_error_bad_value
);
1649 if (abbrev
->tag
== DW_TAG_subprogram
1650 || abbrev
->tag
== DW_TAG_entry_point
1651 || abbrev
->tag
== DW_TAG_inlined_subroutine
)
1653 bfd_size_type amt
= sizeof (struct funcinfo
);
1654 func
= bfd_zalloc (abfd
, amt
);
1655 func
->tag
= abbrev
->tag
;
1656 func
->nesting_level
= nesting_level
;
1657 func
->prev_func
= unit
->function_table
;
1658 unit
->function_table
= func
;
1663 if (abbrev
->tag
== DW_TAG_variable
)
1665 bfd_size_type amt
= sizeof (struct varinfo
);
1666 var
= bfd_zalloc (abfd
, amt
);
1667 var
->tag
= abbrev
->tag
;
1669 var
->prev_var
= unit
->variable_table
;
1670 unit
->variable_table
= var
;
1674 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1676 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1682 case DW_AT_call_file
:
1683 func
->caller_file
= concat_filename (unit
->line_table
, attr
.u
.val
);
1686 case DW_AT_call_line
:
1687 func
->caller_line
= attr
.u
.val
;
1690 case DW_AT_abstract_origin
:
1691 func
->name
= find_abstract_instance_name (unit
, attr
.u
.val
);
1695 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
1696 if (func
->name
== NULL
)
1697 func
->name
= attr
.u
.str
;
1700 case DW_AT_MIPS_linkage_name
:
1701 func
->name
= attr
.u
.str
;
1705 low_pc
= attr
.u
.val
;
1709 high_pc
= attr
.u
.val
;
1713 read_rangelist (unit
, &func
->arange
, attr
.u
.val
);
1716 case DW_AT_decl_file
:
1717 func
->file
= concat_filename (unit
->line_table
,
1721 case DW_AT_decl_line
:
1722 func
->line
= attr
.u
.val
;
1734 var
->name
= attr
.u
.str
;
1737 case DW_AT_decl_file
:
1738 var
->file
= concat_filename (unit
->line_table
,
1742 case DW_AT_decl_line
:
1743 var
->line
= attr
.u
.val
;
1746 case DW_AT_external
:
1747 if (attr
.u
.val
!= 0)
1751 case DW_AT_location
:
1757 case DW_FORM_block1
:
1758 case DW_FORM_block2
:
1759 case DW_FORM_block4
:
1760 if (*attr
.u
.blk
->data
== DW_OP_addr
)
1776 if (func
&& high_pc
!= 0)
1778 arange_add (unit
->abfd
, &func
->arange
, low_pc
, high_pc
);
1781 if (abbrev
->has_children
)
1788 /* Parse a DWARF2 compilation unit starting at INFO_PTR. This
1789 includes the compilation unit header that proceeds the DIE's, but
1790 does not include the length field that precedes each compilation
1791 unit header. END_PTR points one past the end of this comp unit.
1792 OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
1794 This routine does not read the whole compilation unit; only enough
1795 to get to the line number information for the compilation unit. */
1797 static struct comp_unit
*
1798 parse_comp_unit (bfd
*abfd
,
1799 struct dwarf2_debug
*stash
,
1800 bfd_vma unit_length
,
1801 bfd_byte
*info_ptr_unit
,
1802 unsigned int offset_size
)
1804 struct comp_unit
* unit
;
1805 unsigned int version
;
1806 bfd_uint64_t abbrev_offset
= 0;
1807 unsigned int addr_size
;
1808 struct abbrev_info
** abbrevs
;
1809 unsigned int abbrev_number
, bytes_read
, i
;
1810 struct abbrev_info
*abbrev
;
1811 struct attribute attr
;
1812 bfd_byte
*info_ptr
= stash
->info_ptr
;
1813 bfd_byte
*end_ptr
= info_ptr
+ unit_length
;
1816 bfd_vma high_pc
= 0;
1818 version
= read_2_bytes (abfd
, info_ptr
);
1820 BFD_ASSERT (offset_size
== 4 || offset_size
== 8);
1821 if (offset_size
== 4)
1822 abbrev_offset
= read_4_bytes (abfd
, info_ptr
);
1824 abbrev_offset
= read_8_bytes (abfd
, info_ptr
);
1825 info_ptr
+= offset_size
;
1826 addr_size
= read_1_byte (abfd
, info_ptr
);
1831 (*_bfd_error_handler
) (_("Dwarf Error: found dwarf version '%u', this reader only handles version 2 information."), version
);
1832 bfd_set_error (bfd_error_bad_value
);
1836 if (addr_size
> sizeof (bfd_vma
))
1838 (*_bfd_error_handler
) (_("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."),
1840 (unsigned int) sizeof (bfd_vma
));
1841 bfd_set_error (bfd_error_bad_value
);
1845 if (addr_size
!= 2 && addr_size
!= 4 && addr_size
!= 8)
1847 (*_bfd_error_handler
) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '2', '4' and '8'.", addr_size
);
1848 bfd_set_error (bfd_error_bad_value
);
1852 /* Read the abbrevs for this compilation unit into a table. */
1853 abbrevs
= read_abbrevs (abfd
, abbrev_offset
, stash
);
1857 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1858 info_ptr
+= bytes_read
;
1859 if (! abbrev_number
)
1861 (*_bfd_error_handler
) (_("Dwarf Error: Bad abbrev number: %u."),
1863 bfd_set_error (bfd_error_bad_value
);
1867 abbrev
= lookup_abbrev (abbrev_number
, abbrevs
);
1870 (*_bfd_error_handler
) (_("Dwarf Error: Could not find abbrev number %u."),
1872 bfd_set_error (bfd_error_bad_value
);
1876 amt
= sizeof (struct comp_unit
);
1877 unit
= bfd_zalloc (abfd
, amt
);
1879 unit
->addr_size
= addr_size
;
1880 unit
->offset_size
= offset_size
;
1881 unit
->abbrevs
= abbrevs
;
1882 unit
->end_ptr
= end_ptr
;
1883 unit
->stash
= stash
;
1884 unit
->info_ptr_unit
= info_ptr_unit
;
1886 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1888 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1890 /* Store the data if it is of an attribute we want to keep in a
1891 partial symbol table. */
1894 case DW_AT_stmt_list
:
1896 unit
->line_offset
= attr
.u
.val
;
1900 unit
->name
= attr
.u
.str
;
1904 low_pc
= attr
.u
.val
;
1905 /* If the compilation unit DIE has a DW_AT_low_pc attribute,
1906 this is the base address to use when reading location
1907 lists or range lists. */
1908 unit
->base_address
= low_pc
;
1912 high_pc
= attr
.u
.val
;
1916 read_rangelist (unit
, &unit
->arange
, attr
.u
.val
);
1919 case DW_AT_comp_dir
:
1921 char *comp_dir
= attr
.u
.str
;
1924 /* Irix 6.2 native cc prepends <machine>.: to the compilation
1925 directory, get rid of it. */
1926 char *cp
= strchr (comp_dir
, ':');
1928 if (cp
&& cp
!= comp_dir
&& cp
[-1] == '.' && cp
[1] == '/')
1931 unit
->comp_dir
= comp_dir
;
1941 arange_add (unit
->abfd
, &unit
->arange
, low_pc
, high_pc
);
1944 unit
->first_child_die_ptr
= info_ptr
;
1948 /* Return TRUE if UNIT contains the address given by ADDR. */
1951 comp_unit_contains_address (struct comp_unit
*unit
, bfd_vma addr
)
1953 struct arange
*arange
;
1958 arange
= &unit
->arange
;
1961 if (addr
>= arange
->low
&& addr
< arange
->high
)
1963 arange
= arange
->next
;
1970 /* If UNIT contains ADDR, set the output parameters to the values for
1971 the line containing ADDR. The output parameters, FILENAME_PTR,
1972 FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
1975 Return TRUE if UNIT contains ADDR, and no errors were encountered;
1979 comp_unit_find_nearest_line (struct comp_unit
*unit
,
1981 const char **filename_ptr
,
1982 const char **functionname_ptr
,
1983 unsigned int *linenumber_ptr
,
1984 struct dwarf2_debug
*stash
)
1988 struct funcinfo
*function
;
1993 if (! unit
->line_table
)
1995 if (! unit
->stmtlist
)
2001 unit
->line_table
= decode_line_info (unit
, stash
);
2003 if (! unit
->line_table
)
2009 if (unit
->first_child_die_ptr
< unit
->end_ptr
2010 && ! scan_unit_for_symbols (unit
))
2018 func_p
= lookup_address_in_function_table (unit
, addr
,
2019 &function
, functionname_ptr
);
2020 if (func_p
&& (function
->tag
== DW_TAG_inlined_subroutine
))
2021 stash
->inliner_chain
= function
;
2022 line_p
= lookup_address_in_line_info_table (unit
->line_table
, addr
,
2023 function
, filename_ptr
,
2025 return line_p
|| func_p
;
2028 /* If UNIT contains SYM at ADDR, set the output parameters to the
2029 values for the line containing SYM. The output parameters,
2030 FILENAME_PTR, and LINENUMBER_PTR, are pointers to the objects to be
2033 Return TRUE if UNIT contains SYM, and no errors were encountered;
2037 comp_unit_find_line (struct comp_unit
*unit
,
2040 const char **filename_ptr
,
2041 unsigned int *linenumber_ptr
,
2042 struct dwarf2_debug
*stash
)
2047 if (! unit
->line_table
)
2049 if (! unit
->stmtlist
)
2055 unit
->line_table
= decode_line_info (unit
, stash
);
2057 if (! unit
->line_table
)
2063 if (unit
->first_child_die_ptr
< unit
->end_ptr
2064 && ! scan_unit_for_symbols (unit
))
2071 if (sym
->flags
& BSF_FUNCTION
)
2072 return lookup_symbol_in_function_table (unit
, sym
, addr
,
2076 return lookup_symbol_in_variable_table (unit
, sym
, filename_ptr
,
2080 /* Locate a section in a BFD containing debugging info. The search starts
2081 from the section after AFTER_SEC, or from the first section in the BFD if
2082 AFTER_SEC is NULL. The search works by examining the names of the
2083 sections. There are two permissiable names. The first is .debug_info.
2084 This is the standard DWARF2 name. The second is a prefix .gnu.linkonce.wi.
2085 This is a variation on the .debug_info section which has a checksum
2086 describing the contents appended onto the name. This allows the linker to
2087 identify and discard duplicate debugging sections for different
2088 compilation units. */
2089 #define DWARF2_DEBUG_INFO ".debug_info"
2090 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
2093 find_debug_info (bfd
*abfd
, asection
*after_sec
)
2098 msec
= after_sec
->next
;
2100 msec
= abfd
->sections
;
2104 if (strcmp (msec
->name
, DWARF2_DEBUG_INFO
) == 0)
2107 if (strncmp (msec
->name
, GNU_LINKONCE_INFO
, strlen (GNU_LINKONCE_INFO
)) == 0)
2116 /* The DWARF2 version of find_nearest_line. Return TRUE if the line
2117 is found without error. ADDR_SIZE is the number of bytes in the
2118 initial .debug_info length field and in the abbreviation offset.
2119 You may use zero to indicate that the default value should be
2123 _bfd_dwarf2_find_nearest_line (bfd
*abfd
,
2127 const char **filename_ptr
,
2128 const char **functionname_ptr
,
2129 unsigned int *linenumber_ptr
,
2130 unsigned int addr_size
,
2133 /* Read each compilation unit from the section .debug_info, and check
2134 to see if it contains the address we are searching for. If yes,
2135 lookup the address, and return the line number info. If no, go
2136 on to the next compilation unit.
2138 We keep a list of all the previously read compilation units, and
2139 a pointer to the next un-read compilation unit. Check the
2140 previously read units before reading more. */
2141 struct dwarf2_debug
*stash
;
2143 /* What address are we looking for? */
2146 struct comp_unit
* each
;
2150 if (section
->output_section
)
2151 addr
+= section
->output_section
->vma
+ section
->output_offset
;
2153 addr
+= section
->vma
;
2154 *filename_ptr
= NULL
;
2155 *functionname_ptr
= NULL
;
2156 *linenumber_ptr
= 0;
2158 /* The DWARF2 spec says that the initial length field, and the
2159 offset of the abbreviation table, should both be 4-byte values.
2160 However, some compilers do things differently. */
2163 BFD_ASSERT (addr_size
== 4 || addr_size
== 8);
2167 bfd_size_type total_size
;
2169 bfd_size_type amt
= sizeof (struct dwarf2_debug
);
2171 stash
= bfd_zalloc (abfd
, amt
);
2177 msec
= find_debug_info (abfd
, NULL
);
2179 /* No dwarf2 info. Note that at this point the stash
2180 has been allocated, but contains zeros, this lets
2181 future calls to this function fail quicker. */
2184 /* There can be more than one DWARF2 info section in a BFD these days.
2185 Read them all in and produce one large stash. We do this in two
2186 passes - in the first pass we just accumulate the section sizes.
2187 In the second pass we read in the section's contents. The allows
2188 us to avoid reallocing the data as we add sections to the stash. */
2189 for (total_size
= 0; msec
; msec
= find_debug_info (abfd
, msec
))
2190 total_size
+= msec
->size
;
2192 stash
->info_ptr
= bfd_alloc (abfd
, total_size
);
2193 if (stash
->info_ptr
== NULL
)
2196 stash
->info_ptr_end
= stash
->info_ptr
;
2198 for (msec
= find_debug_info (abfd
, NULL
);
2200 msec
= find_debug_info (abfd
, msec
))
2203 bfd_size_type start
;
2209 start
= stash
->info_ptr_end
- stash
->info_ptr
;
2211 if ((bfd_simple_get_relocated_section_contents
2212 (abfd
, msec
, stash
->info_ptr
+ start
, symbols
)) == NULL
)
2215 stash
->info_ptr_end
= stash
->info_ptr
+ start
+ size
;
2218 BFD_ASSERT (stash
->info_ptr_end
== stash
->info_ptr
+ total_size
);
2220 stash
->sec
= find_debug_info (abfd
, NULL
);
2221 stash
->sec_info_ptr
= stash
->info_ptr
;
2222 stash
->syms
= symbols
;
2225 /* A null info_ptr indicates that there is no dwarf2 info
2226 (or that an error occured while setting up the stash). */
2227 if (! stash
->info_ptr
)
2230 stash
->inliner_chain
= NULL
;
2232 /* Check the previously read comp. units first. */
2233 for (each
= stash
->all_comp_units
; each
; each
= each
->next_unit
)
2234 if (comp_unit_contains_address (each
, addr
))
2235 return comp_unit_find_nearest_line (each
, addr
, filename_ptr
,
2236 functionname_ptr
, linenumber_ptr
,
2239 /* Read each remaining comp. units checking each as they are read. */
2240 while (stash
->info_ptr
< stash
->info_ptr_end
)
2244 unsigned int offset_size
= addr_size
;
2245 bfd_byte
*info_ptr_unit
= stash
->info_ptr
;
2247 length
= read_4_bytes (abfd
, stash
->info_ptr
);
2248 /* A 0xffffff length is the DWARF3 way of indicating we use
2249 64-bit offsets, instead of 32-bit offsets. */
2250 if (length
== 0xffffffff)
2253 length
= read_8_bytes (abfd
, stash
->info_ptr
+ 4);
2254 stash
->info_ptr
+= 12;
2256 /* A zero length is the IRIX way of indicating 64-bit offsets,
2257 mostly because the 64-bit length will generally fit in 32
2258 bits, and the endianness helps. */
2259 else if (length
== 0)
2262 length
= read_4_bytes (abfd
, stash
->info_ptr
+ 4);
2263 stash
->info_ptr
+= 8;
2265 /* In the absence of the hints above, we assume addr_size-sized
2266 offsets, for backward-compatibility with pre-DWARF3 64-bit
2268 else if (addr_size
== 8)
2270 length
= read_8_bytes (abfd
, stash
->info_ptr
);
2271 stash
->info_ptr
+= 8;
2274 stash
->info_ptr
+= 4;
2278 each
= parse_comp_unit (abfd
, stash
, length
, info_ptr_unit
,
2280 stash
->info_ptr
+= length
;
2282 if ((bfd_vma
) (stash
->info_ptr
- stash
->sec_info_ptr
)
2283 == stash
->sec
->size
)
2285 stash
->sec
= find_debug_info (abfd
, stash
->sec
);
2286 stash
->sec_info_ptr
= stash
->info_ptr
;
2291 each
->next_unit
= stash
->all_comp_units
;
2292 stash
->all_comp_units
= each
;
2294 /* DW_AT_low_pc and DW_AT_high_pc are optional for
2295 compilation units. If we don't have them (i.e.,
2296 unit->high == 0), we need to consult the line info
2297 table to see if a compilation unit contains the given
2299 if (each
->arange
.high
> 0)
2301 if (comp_unit_contains_address (each
, addr
))
2302 return comp_unit_find_nearest_line (each
, addr
,
2310 found
= comp_unit_find_nearest_line (each
, addr
,
2325 /* The DWARF2 version of find_line. Return TRUE if the line is found
2329 _bfd_dwarf2_find_line (bfd
*abfd
,
2332 const char **filename_ptr
,
2333 unsigned int *linenumber_ptr
,
2334 unsigned int addr_size
,
2337 /* Read each compilation unit from the section .debug_info, and check
2338 to see if it contains the address we are searching for. If yes,
2339 lookup the address, and return the line number info. If no, go
2340 on to the next compilation unit.
2342 We keep a list of all the previously read compilation units, and
2343 a pointer to the next un-read compilation unit. Check the
2344 previously read units before reading more. */
2345 struct dwarf2_debug
*stash
;
2347 /* What address are we looking for? */
2350 struct comp_unit
* each
;
2356 section
= bfd_get_section (symbol
);
2358 addr
= symbol
->value
;
2359 if (section
->output_section
)
2360 addr
+= section
->output_section
->vma
+ section
->output_offset
;
2362 addr
+= section
->vma
;
2364 *filename_ptr
= NULL
;
2366 *filename_ptr
= NULL
;
2367 *linenumber_ptr
= 0;
2371 bfd_size_type total_size
;
2373 bfd_size_type amt
= sizeof (struct dwarf2_debug
);
2375 stash
= bfd_zalloc (abfd
, amt
);
2381 msec
= find_debug_info (abfd
, NULL
);
2383 /* No dwarf2 info. Note that at this point the stash
2384 has been allocated, but contains zeros, this lets
2385 future calls to this function fail quicker. */
2388 /* There can be more than one DWARF2 info section in a BFD these days.
2389 Read them all in and produce one large stash. We do this in two
2390 passes - in the first pass we just accumulate the section sizes.
2391 In the second pass we read in the section's contents. The allows
2392 us to avoid reallocing the data as we add sections to the stash. */
2393 for (total_size
= 0; msec
; msec
= find_debug_info (abfd
, msec
))
2394 total_size
+= msec
->size
;
2396 stash
->info_ptr
= bfd_alloc (abfd
, total_size
);
2397 if (stash
->info_ptr
== NULL
)
2400 stash
->info_ptr_end
= stash
->info_ptr
;
2402 for (msec
= find_debug_info (abfd
, NULL
);
2404 msec
= find_debug_info (abfd
, msec
))
2407 bfd_size_type start
;
2413 start
= stash
->info_ptr_end
- stash
->info_ptr
;
2415 if ((bfd_simple_get_relocated_section_contents
2416 (abfd
, msec
, stash
->info_ptr
+ start
, symbols
)) == NULL
)
2419 stash
->info_ptr_end
= stash
->info_ptr
+ start
+ size
;
2422 BFD_ASSERT (stash
->info_ptr_end
== stash
->info_ptr
+ total_size
);
2424 stash
->sec
= find_debug_info (abfd
, NULL
);
2425 stash
->sec_info_ptr
= stash
->info_ptr
;
2426 stash
->syms
= symbols
;
2429 /* A null info_ptr indicates that there is no dwarf2 info
2430 (or that an error occured while setting up the stash). */
2431 if (! stash
->info_ptr
)
2434 stash
->inliner_chain
= NULL
;
2436 /* Check the previously read comp. units first. */
2437 for (each
= stash
->all_comp_units
; each
; each
= each
->next_unit
)
2438 if ((symbol
->flags
& BSF_FUNCTION
) == 0
2439 || comp_unit_contains_address (each
, addr
))
2441 found
= comp_unit_find_line (each
, symbol
, addr
, filename_ptr
,
2442 linenumber_ptr
, stash
);
2447 /* The DWARF2 spec says that the initial length field, and the
2448 offset of the abbreviation table, should both be 4-byte values.
2449 However, some compilers do things differently. */
2452 BFD_ASSERT (addr_size
== 4 || addr_size
== 8);
2454 /* Read each remaining comp. units checking each as they are read. */
2455 while (stash
->info_ptr
< stash
->info_ptr_end
)
2458 unsigned int offset_size
= addr_size
;
2459 bfd_byte
*info_ptr_unit
= stash
->info_ptr
;
2461 length
= read_4_bytes (abfd
, stash
->info_ptr
);
2462 /* A 0xffffff length is the DWARF3 way of indicating we use
2463 64-bit offsets, instead of 32-bit offsets. */
2464 if (length
== 0xffffffff)
2467 length
= read_8_bytes (abfd
, stash
->info_ptr
+ 4);
2468 stash
->info_ptr
+= 12;
2470 /* A zero length is the IRIX way of indicating 64-bit offsets,
2471 mostly because the 64-bit length will generally fit in 32
2472 bits, and the endianness helps. */
2473 else if (length
== 0)
2476 length
= read_4_bytes (abfd
, stash
->info_ptr
+ 4);
2477 stash
->info_ptr
+= 8;
2479 /* In the absence of the hints above, we assume addr_size-sized
2480 offsets, for backward-compatibility with pre-DWARF3 64-bit
2482 else if (addr_size
== 8)
2484 length
= read_8_bytes (abfd
, stash
->info_ptr
);
2485 stash
->info_ptr
+= 8;
2488 stash
->info_ptr
+= 4;
2492 each
= parse_comp_unit (abfd
, stash
, length
, info_ptr_unit
,
2494 stash
->info_ptr
+= length
;
2496 if ((bfd_vma
) (stash
->info_ptr
- stash
->sec_info_ptr
)
2497 == stash
->sec
->size
)
2499 stash
->sec
= find_debug_info (abfd
, stash
->sec
);
2500 stash
->sec_info_ptr
= stash
->info_ptr
;
2505 each
->next_unit
= stash
->all_comp_units
;
2506 stash
->all_comp_units
= each
;
2508 /* DW_AT_low_pc and DW_AT_high_pc are optional for
2509 compilation units. If we don't have them (i.e.,
2510 unit->high == 0), we need to consult the line info
2511 table to see if a compilation unit contains the given
2513 found
= (((symbol
->flags
& BSF_FUNCTION
) == 0
2514 || each
->arange
.high
<= 0
2515 || comp_unit_contains_address (each
, addr
))
2516 && comp_unit_find_line (each
, symbol
, addr
,
2530 _bfd_dwarf2_find_inliner_info (bfd
*abfd ATTRIBUTE_UNUSED
,
2531 const char **filename_ptr
,
2532 const char **functionname_ptr
,
2533 unsigned int *linenumber_ptr
,
2536 struct dwarf2_debug
*stash
;
2541 struct funcinfo
*func
= stash
->inliner_chain
;
2542 if (func
&& func
->caller_func
)
2544 *filename_ptr
= func
->caller_file
;
2545 *functionname_ptr
= func
->caller_func
->name
;
2546 *linenumber_ptr
= func
->caller_line
;
2547 stash
->inliner_chain
= func
->caller_func
;
2556 _bfd_dwarf2_cleanup_debug_info (bfd
*abfd
)
2558 struct comp_unit
*each
;
2559 struct dwarf2_debug
*stash
;
2561 if (abfd
== NULL
|| elf_tdata (abfd
) == NULL
)
2564 stash
= elf_tdata (abfd
)->dwarf2_find_line_info
;
2569 for (each
= stash
->all_comp_units
; each
; each
= each
->next_unit
)
2571 struct abbrev_info
**abbrevs
= each
->abbrevs
;
2574 for (i
= 0; i
< ABBREV_HASH_SIZE
; i
++)
2576 struct abbrev_info
*abbrev
= abbrevs
[i
];
2580 free (abbrev
->attrs
);
2581 abbrev
= abbrev
->next
;
2585 if (each
->line_table
)
2587 free (each
->line_table
->dirs
);
2588 free (each
->line_table
->files
);
2592 free (stash
->dwarf_abbrev_buffer
);
2593 free (stash
->dwarf_line_buffer
);
2594 free (stash
->dwarf_ranges_buffer
);