2 Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3 2004, 2005, 2006 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. */
77 struct loadable_section
85 /* A list of all previously read comp_units. */
86 struct comp_unit
*all_comp_units
;
88 /* The next unread compilation unit within the .debug_info section.
89 Zero indicates that the .debug_info section has not been loaded
93 /* Pointer to the end of the .debug_info section memory buffer. */
94 bfd_byte
*info_ptr_end
;
96 /* Pointer to the section and address of the beginning of the
99 bfd_byte
*sec_info_ptr
;
101 /* Pointer to the symbol table. */
104 /* Pointer to the .debug_abbrev section loaded into memory. */
105 bfd_byte
*dwarf_abbrev_buffer
;
107 /* Length of the loaded .debug_abbrev section. */
108 unsigned long dwarf_abbrev_size
;
110 /* Buffer for decode_line_info. */
111 bfd_byte
*dwarf_line_buffer
;
113 /* Length of the loaded .debug_line section. */
114 unsigned long dwarf_line_size
;
116 /* Pointer to the .debug_str section loaded into memory. */
117 bfd_byte
*dwarf_str_buffer
;
119 /* Length of the loaded .debug_str section. */
120 unsigned long dwarf_str_size
;
122 /* Pointer to the .debug_ranges section loaded into memory. */
123 bfd_byte
*dwarf_ranges_buffer
;
125 /* Length of the loaded .debug_ranges section. */
126 unsigned long dwarf_ranges_size
;
128 /* If the most recent call to bfd_find_nearest_line was given an
129 address in an inlined function, preserve a pointer into the
130 calling chain for subsequent calls to bfd_find_inliner_info to
132 struct funcinfo
*inliner_chain
;
134 /* Number of loadable sections. */
135 unsigned int loadable_section_count
;
137 /* Array of loadable sections. */
138 struct loadable_section
*loadable_sections
;
148 /* A minimal decoding of DWARF2 compilation units. We only decode
149 what's needed to get to the line number information. */
153 /* Chain the previously read compilation units. */
154 struct comp_unit
*next_unit
;
156 /* Keep the bfd convenient (for memory allocation). */
159 /* The lowest and highest addresses contained in this compilation
160 unit as specified in the compilation unit header. */
161 struct arange arange
;
163 /* The DW_AT_name attribute (for error messages). */
166 /* The abbrev hash table. */
167 struct abbrev_info
**abbrevs
;
169 /* Note that an error was found by comp_unit_find_nearest_line. */
172 /* The DW_AT_comp_dir attribute. */
175 /* TRUE if there is a line number table associated with this comp. unit. */
178 /* Pointer to the current comp_unit so that we can find a given entry
180 bfd_byte
*info_ptr_unit
;
182 /* The offset into .debug_line of the line number table. */
183 unsigned long line_offset
;
185 /* Pointer to the first child die for the comp unit. */
186 bfd_byte
*first_child_die_ptr
;
188 /* The end of the comp unit. */
191 /* The decoded line number, NULL if not yet decoded. */
192 struct line_info_table
*line_table
;
194 /* A list of the functions found in this comp. unit. */
195 struct funcinfo
*function_table
;
197 /* A list of the variables found in this comp. unit. */
198 struct varinfo
*variable_table
;
200 /* Pointer to dwarf2_debug structure. */
201 struct dwarf2_debug
*stash
;
203 /* Address size for this unit - from unit header. */
204 unsigned char addr_size
;
206 /* Offset size for this unit - from unit header. */
207 unsigned char offset_size
;
209 /* Base address for this unit - from DW_AT_low_pc attribute of
210 DW_TAG_compile_unit DIE */
211 bfd_vma base_address
;
214 /* This data structure holds the information of an abbrev. */
217 unsigned int number
; /* Number identifying abbrev. */
218 enum dwarf_tag tag
; /* DWARF tag. */
219 int has_children
; /* Boolean. */
220 unsigned int num_attrs
; /* Number of attributes. */
221 struct attr_abbrev
*attrs
; /* An array of attribute descriptions. */
222 struct abbrev_info
*next
; /* Next in chain. */
227 enum dwarf_attribute name
;
228 enum dwarf_form form
;
231 #ifndef ABBREV_HASH_SIZE
232 #define ABBREV_HASH_SIZE 121
234 #ifndef ATTR_ALLOC_CHUNK
235 #define ATTR_ALLOC_CHUNK 4
239 The following function up to the END VERBATIM mark are
240 copied directly from dwarf2read.c. */
242 /* Read dwarf information from a buffer. */
245 read_1_byte (bfd
*abfd ATTRIBUTE_UNUSED
, bfd_byte
*buf
)
247 return bfd_get_8 (abfd
, buf
);
251 read_1_signed_byte (bfd
*abfd ATTRIBUTE_UNUSED
, bfd_byte
*buf
)
253 return bfd_get_signed_8 (abfd
, buf
);
257 read_2_bytes (bfd
*abfd
, bfd_byte
*buf
)
259 return bfd_get_16 (abfd
, buf
);
263 read_4_bytes (bfd
*abfd
, bfd_byte
*buf
)
265 return bfd_get_32 (abfd
, buf
);
269 read_8_bytes (bfd
*abfd
, bfd_byte
*buf
)
271 return bfd_get_64 (abfd
, buf
);
275 read_n_bytes (bfd
*abfd ATTRIBUTE_UNUSED
,
277 unsigned int size ATTRIBUTE_UNUSED
)
279 /* If the size of a host char is 8 bits, we can return a pointer
280 to the buffer, otherwise we have to copy the data to a buffer
281 allocated on the temporary obstack. */
286 read_string (bfd
*abfd ATTRIBUTE_UNUSED
,
288 unsigned int *bytes_read_ptr
)
290 /* Return a pointer to the embedded string. */
291 char *str
= (char *) buf
;
298 *bytes_read_ptr
= strlen (str
) + 1;
303 read_indirect_string (struct comp_unit
* unit
,
305 unsigned int *bytes_read_ptr
)
308 struct dwarf2_debug
*stash
= unit
->stash
;
311 if (unit
->offset_size
== 4)
312 offset
= read_4_bytes (unit
->abfd
, buf
);
314 offset
= read_8_bytes (unit
->abfd
, buf
);
315 *bytes_read_ptr
= unit
->offset_size
;
317 if (! stash
->dwarf_str_buffer
)
320 bfd
*abfd
= unit
->abfd
;
323 msec
= bfd_get_section_by_name (abfd
, ".debug_str");
326 (*_bfd_error_handler
)
327 (_("Dwarf Error: Can't find .debug_str section."));
328 bfd_set_error (bfd_error_bad_value
);
332 sz
= msec
->rawsize
? msec
->rawsize
: msec
->size
;
333 stash
->dwarf_str_size
= sz
;
334 stash
->dwarf_str_buffer
= bfd_alloc (abfd
, sz
);
335 if (! stash
->dwarf_str_buffer
)
338 if (! bfd_get_section_contents (abfd
, msec
, stash
->dwarf_str_buffer
,
343 if (offset
>= stash
->dwarf_str_size
)
345 (*_bfd_error_handler
) (_("Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)."),
346 (unsigned long) offset
, stash
->dwarf_str_size
);
347 bfd_set_error (bfd_error_bad_value
);
351 str
= (char *) stash
->dwarf_str_buffer
+ offset
;
360 read_address (struct comp_unit
*unit
, bfd_byte
*buf
)
362 int signed_vma
= get_elf_backend_data (unit
->abfd
)->sign_extend_vma
;
366 switch (unit
->addr_size
)
369 return bfd_get_signed_64 (unit
->abfd
, buf
);
371 return bfd_get_signed_32 (unit
->abfd
, buf
);
373 return bfd_get_signed_16 (unit
->abfd
, buf
);
380 switch (unit
->addr_size
)
383 return bfd_get_64 (unit
->abfd
, buf
);
385 return bfd_get_32 (unit
->abfd
, buf
);
387 return bfd_get_16 (unit
->abfd
, buf
);
394 /* Lookup an abbrev_info structure in the abbrev hash table. */
396 static struct abbrev_info
*
397 lookup_abbrev (unsigned int number
, struct abbrev_info
**abbrevs
)
399 unsigned int hash_number
;
400 struct abbrev_info
*abbrev
;
402 hash_number
= number
% ABBREV_HASH_SIZE
;
403 abbrev
= abbrevs
[hash_number
];
407 if (abbrev
->number
== number
)
410 abbrev
= abbrev
->next
;
416 /* In DWARF version 2, the description of the debugging information is
417 stored in a separate .debug_abbrev section. Before we read any
418 dies from a section we read in all abbreviations and install them
421 static struct abbrev_info
**
422 read_abbrevs (bfd
*abfd
, bfd_uint64_t offset
, struct dwarf2_debug
*stash
)
424 struct abbrev_info
**abbrevs
;
425 bfd_byte
*abbrev_ptr
;
426 struct abbrev_info
*cur_abbrev
;
427 unsigned int abbrev_number
, bytes_read
, abbrev_name
;
428 unsigned int abbrev_form
, hash_number
;
431 if (! stash
->dwarf_abbrev_buffer
)
435 msec
= bfd_get_section_by_name (abfd
, ".debug_abbrev");
438 (*_bfd_error_handler
) (_("Dwarf Error: Can't find .debug_abbrev section."));
439 bfd_set_error (bfd_error_bad_value
);
443 stash
->dwarf_abbrev_size
= msec
->size
;
444 stash
->dwarf_abbrev_buffer
445 = bfd_simple_get_relocated_section_contents (abfd
, msec
, NULL
,
447 if (! stash
->dwarf_abbrev_buffer
)
451 if (offset
>= stash
->dwarf_abbrev_size
)
453 (*_bfd_error_handler
) (_("Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)."),
454 (unsigned long) offset
, stash
->dwarf_abbrev_size
);
455 bfd_set_error (bfd_error_bad_value
);
459 amt
= sizeof (struct abbrev_info
*) * ABBREV_HASH_SIZE
;
460 abbrevs
= bfd_zalloc (abfd
, amt
);
462 abbrev_ptr
= stash
->dwarf_abbrev_buffer
+ offset
;
463 abbrev_number
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
464 abbrev_ptr
+= bytes_read
;
466 /* Loop until we reach an abbrev number of 0. */
467 while (abbrev_number
)
469 amt
= sizeof (struct abbrev_info
);
470 cur_abbrev
= bfd_zalloc (abfd
, amt
);
472 /* Read in abbrev header. */
473 cur_abbrev
->number
= abbrev_number
;
474 cur_abbrev
->tag
= (enum dwarf_tag
)
475 read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
476 abbrev_ptr
+= bytes_read
;
477 cur_abbrev
->has_children
= read_1_byte (abfd
, abbrev_ptr
);
480 /* Now read in declarations. */
481 abbrev_name
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
482 abbrev_ptr
+= bytes_read
;
483 abbrev_form
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
484 abbrev_ptr
+= bytes_read
;
488 if ((cur_abbrev
->num_attrs
% ATTR_ALLOC_CHUNK
) == 0)
490 struct attr_abbrev
*tmp
;
492 amt
= cur_abbrev
->num_attrs
+ ATTR_ALLOC_CHUNK
;
493 amt
*= sizeof (struct attr_abbrev
);
494 tmp
= bfd_realloc (cur_abbrev
->attrs
, amt
);
499 for (i
= 0; i
< ABBREV_HASH_SIZE
; i
++)
501 struct abbrev_info
*abbrev
= abbrevs
[i
];
505 free (abbrev
->attrs
);
506 abbrev
= abbrev
->next
;
511 cur_abbrev
->attrs
= tmp
;
514 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].name
515 = (enum dwarf_attribute
) abbrev_name
;
516 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
++].form
517 = (enum dwarf_form
) abbrev_form
;
518 abbrev_name
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
519 abbrev_ptr
+= bytes_read
;
520 abbrev_form
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
521 abbrev_ptr
+= bytes_read
;
524 hash_number
= abbrev_number
% ABBREV_HASH_SIZE
;
525 cur_abbrev
->next
= abbrevs
[hash_number
];
526 abbrevs
[hash_number
] = cur_abbrev
;
528 /* Get next abbreviation.
529 Under Irix6 the abbreviations for a compilation unit are not
530 always properly terminated with an abbrev number of 0.
531 Exit loop if we encounter an abbreviation which we have
532 already read (which means we are about to read the abbreviations
533 for the next compile unit) or if the end of the abbreviation
535 if ((unsigned int) (abbrev_ptr
- stash
->dwarf_abbrev_buffer
)
536 >= stash
->dwarf_abbrev_size
)
538 abbrev_number
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
539 abbrev_ptr
+= bytes_read
;
540 if (lookup_abbrev (abbrev_number
,abbrevs
) != NULL
)
547 /* Read an attribute value described by an attribute form. */
550 read_attribute_value (struct attribute
*attr
,
552 struct comp_unit
*unit
,
555 bfd
*abfd
= unit
->abfd
;
556 unsigned int bytes_read
;
557 struct dwarf_block
*blk
;
560 attr
->form
= (enum dwarf_form
) form
;
565 /* FIXME: DWARF3 draft says DW_FORM_ref_addr is offset_size. */
566 case DW_FORM_ref_addr
:
567 attr
->u
.val
= read_address (unit
, info_ptr
);
568 info_ptr
+= unit
->addr_size
;
571 amt
= sizeof (struct dwarf_block
);
572 blk
= bfd_alloc (abfd
, amt
);
573 blk
->size
= read_2_bytes (abfd
, info_ptr
);
575 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
576 info_ptr
+= blk
->size
;
580 amt
= sizeof (struct dwarf_block
);
581 blk
= bfd_alloc (abfd
, amt
);
582 blk
->size
= read_4_bytes (abfd
, info_ptr
);
584 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
585 info_ptr
+= blk
->size
;
589 attr
->u
.val
= read_2_bytes (abfd
, info_ptr
);
593 attr
->u
.val
= read_4_bytes (abfd
, info_ptr
);
597 attr
->u
.val
= read_8_bytes (abfd
, info_ptr
);
601 attr
->u
.str
= read_string (abfd
, info_ptr
, &bytes_read
);
602 info_ptr
+= bytes_read
;
605 attr
->u
.str
= read_indirect_string (unit
, info_ptr
, &bytes_read
);
606 info_ptr
+= bytes_read
;
609 amt
= sizeof (struct dwarf_block
);
610 blk
= bfd_alloc (abfd
, amt
);
611 blk
->size
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
612 info_ptr
+= bytes_read
;
613 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
614 info_ptr
+= blk
->size
;
618 amt
= sizeof (struct dwarf_block
);
619 blk
= bfd_alloc (abfd
, amt
);
620 blk
->size
= read_1_byte (abfd
, info_ptr
);
622 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
623 info_ptr
+= blk
->size
;
627 attr
->u
.val
= read_1_byte (abfd
, info_ptr
);
631 attr
->u
.val
= read_1_byte (abfd
, info_ptr
);
635 attr
->u
.sval
= read_signed_leb128 (abfd
, info_ptr
, &bytes_read
);
636 info_ptr
+= bytes_read
;
639 attr
->u
.val
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
640 info_ptr
+= bytes_read
;
643 attr
->u
.val
= read_1_byte (abfd
, info_ptr
);
647 attr
->u
.val
= read_2_bytes (abfd
, info_ptr
);
651 attr
->u
.val
= read_4_bytes (abfd
, info_ptr
);
655 attr
->u
.val
= read_8_bytes (abfd
, info_ptr
);
658 case DW_FORM_ref_udata
:
659 attr
->u
.val
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
660 info_ptr
+= bytes_read
;
662 case DW_FORM_indirect
:
663 form
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
664 info_ptr
+= bytes_read
;
665 info_ptr
= read_attribute_value (attr
, form
, unit
, info_ptr
);
668 (*_bfd_error_handler
) (_("Dwarf Error: Invalid or unhandled FORM value: %u."),
670 bfd_set_error (bfd_error_bad_value
);
675 /* Read an attribute described by an abbreviated attribute. */
678 read_attribute (struct attribute
*attr
,
679 struct attr_abbrev
*abbrev
,
680 struct comp_unit
*unit
,
683 attr
->name
= abbrev
->name
;
684 info_ptr
= read_attribute_value (attr
, abbrev
->form
, unit
, info_ptr
);
688 /* Source line information table routines. */
690 #define FILE_ALLOC_CHUNK 5
691 #define DIR_ALLOC_CHUNK 5
695 struct line_info
* prev_line
;
700 int end_sequence
; /* End of (sequential) code sequence. */
711 struct line_info_table
714 unsigned int num_files
;
715 unsigned int num_dirs
;
718 struct fileinfo
* files
;
719 struct line_info
* last_line
; /* largest VMA */
720 struct line_info
* lcl_head
; /* local head; used in 'add_line_info' */
723 /* Remember some information about each function. If the function is
724 inlined (DW_TAG_inlined_subroutine) it may have two additional
725 attributes, DW_AT_call_file and DW_AT_call_line, which specify the
726 source code location where this function was inlined. */
730 struct funcinfo
*prev_func
; /* Pointer to previous function in list of all functions */
731 struct funcinfo
*caller_func
; /* Pointer to function one scope higher */
732 char *caller_file
; /* Source location file name where caller_func inlines this func */
733 int caller_line
; /* Source location line number where caller_func inlines this func */
734 char *file
; /* Source location file name */
735 int line
; /* Source location line number */
738 struct arange arange
;
739 asection
*sec
; /* Where the symbol is defined */
744 /* Pointer to previous variable in list of all variables */
745 struct varinfo
*prev_var
;
746 /* Source location file name */
748 /* Source location line number */
753 /* Where the symbol is defined */
755 /* Is this a stack variable? */
756 unsigned int stack
: 1;
759 /* Return TRUE if NEW_LINE should sort after LINE. */
761 static inline bfd_boolean
762 new_line_sorts_after (struct line_info
*new_line
, struct line_info
*line
)
764 return (new_line
->address
> line
->address
765 || (new_line
->address
== line
->address
766 && new_line
->end_sequence
< line
->end_sequence
));
770 /* Adds a new entry to the line_info list in the line_info_table, ensuring
771 that the list is sorted. Note that the line_info list is sorted from
772 highest to lowest VMA (with possible duplicates); that is,
773 line_info->prev_line always accesses an equal or smaller VMA. */
776 add_line_info (struct line_info_table
*table
,
783 bfd_size_type amt
= sizeof (struct line_info
);
784 struct line_info
* info
= bfd_alloc (table
->abfd
, amt
);
786 /* Set member data of 'info'. */
787 info
->address
= address
;
789 info
->column
= column
;
790 info
->end_sequence
= end_sequence
;
792 if (filename
&& filename
[0])
794 info
->filename
= bfd_alloc (table
->abfd
, strlen (filename
) + 1);
796 strcpy (info
->filename
, filename
);
799 info
->filename
= NULL
;
801 /* Find the correct location for 'info'. Normally we will receive
802 new line_info data 1) in order and 2) with increasing VMAs.
803 However some compilers break the rules (cf. decode_line_info) and
804 so we include some heuristics for quickly finding the correct
805 location for 'info'. In particular, these heuristics optimize for
806 the common case in which the VMA sequence that we receive is a
807 list of locally sorted VMAs such as
808 p...z a...j (where a < j < p < z)
810 Note: table->lcl_head is used to head an *actual* or *possible*
811 sequence within the list (such as a...j) that is not directly
812 headed by table->last_line
814 Note: we may receive duplicate entries from 'decode_line_info'. */
816 if (!table
->last_line
817 || new_line_sorts_after (info
, table
->last_line
))
819 /* Normal case: add 'info' to the beginning of the list */
820 info
->prev_line
= table
->last_line
;
821 table
->last_line
= info
;
823 /* lcl_head: initialize to head a *possible* sequence at the end. */
824 if (!table
->lcl_head
)
825 table
->lcl_head
= info
;
827 else if (!new_line_sorts_after (info
, table
->lcl_head
)
828 && (!table
->lcl_head
->prev_line
829 || new_line_sorts_after (info
, table
->lcl_head
->prev_line
)))
831 /* Abnormal but easy: lcl_head is the head of 'info'. */
832 info
->prev_line
= table
->lcl_head
->prev_line
;
833 table
->lcl_head
->prev_line
= info
;
837 /* Abnormal and hard: Neither 'last_line' nor 'lcl_head' are valid
838 heads for 'info'. Reset 'lcl_head'. */
839 struct line_info
* li2
= table
->last_line
; /* always non-NULL */
840 struct line_info
* li1
= li2
->prev_line
;
844 if (!new_line_sorts_after (info
, li2
)
845 && new_line_sorts_after (info
, li1
))
848 li2
= li1
; /* always non-NULL */
849 li1
= li1
->prev_line
;
851 table
->lcl_head
= li2
;
852 info
->prev_line
= table
->lcl_head
->prev_line
;
853 table
->lcl_head
->prev_line
= info
;
857 /* Extract a fully qualified filename from a line info table.
858 The returned string has been malloc'ed and it is the caller's
859 responsibility to free it. */
862 concat_filename (struct line_info_table
*table
, unsigned int file
)
866 if (file
- 1 >= table
->num_files
)
868 /* FILE == 0 means unknown. */
870 (*_bfd_error_handler
)
871 (_("Dwarf Error: mangled line number section (bad file number)."));
872 return strdup ("<unknown>");
875 filename
= table
->files
[file
- 1].name
;
877 if (!IS_ABSOLUTE_PATH (filename
))
879 char *dirname
= NULL
;
880 char *subdirname
= NULL
;
884 if (table
->files
[file
- 1].dir
)
885 subdirname
= table
->dirs
[table
->files
[file
- 1].dir
- 1];
887 if (!subdirname
|| !IS_ABSOLUTE_PATH (subdirname
))
888 dirname
= table
->comp_dir
;
892 dirname
= subdirname
;
897 return strdup (filename
);
899 len
= strlen (dirname
) + strlen (filename
) + 2;
903 len
+= strlen (subdirname
) + 1;
904 name
= bfd_malloc (len
);
906 sprintf (name
, "%s/%s/%s", dirname
, subdirname
, filename
);
910 name
= bfd_malloc (len
);
912 sprintf (name
, "%s/%s", dirname
, filename
);
918 return strdup (filename
);
922 arange_add (bfd
*abfd
, struct arange
*first_arange
, bfd_vma low_pc
, bfd_vma high_pc
)
924 struct arange
*arange
;
926 /* If the first arange is empty, use it. */
927 if (first_arange
->high
== 0)
929 first_arange
->low
= low_pc
;
930 first_arange
->high
= high_pc
;
934 /* Next see if we can cheaply extend an existing range. */
935 arange
= first_arange
;
938 if (low_pc
== arange
->high
)
940 arange
->high
= high_pc
;
943 if (high_pc
== arange
->low
)
945 arange
->low
= low_pc
;
948 arange
= arange
->next
;
952 /* Need to allocate a new arange and insert it into the arange list.
953 Order isn't significant, so just insert after the first arange. */
954 arange
= bfd_zalloc (abfd
, sizeof (*arange
));
955 arange
->low
= low_pc
;
956 arange
->high
= high_pc
;
957 arange
->next
= first_arange
->next
;
958 first_arange
->next
= arange
;
961 /* Decode the line number information for UNIT. */
963 static struct line_info_table
*
964 decode_line_info (struct comp_unit
*unit
, struct dwarf2_debug
*stash
)
966 bfd
*abfd
= unit
->abfd
;
967 struct line_info_table
* table
;
971 unsigned int i
, bytes_read
, offset_size
;
972 char *cur_file
, *cur_dir
;
973 unsigned char op_code
, extended_op
, adj_opcode
;
976 if (! stash
->dwarf_line_buffer
)
980 msec
= bfd_get_section_by_name (abfd
, ".debug_line");
983 (*_bfd_error_handler
) (_("Dwarf Error: Can't find .debug_line section."));
984 bfd_set_error (bfd_error_bad_value
);
988 stash
->dwarf_line_size
= msec
->size
;
989 stash
->dwarf_line_buffer
990 = bfd_simple_get_relocated_section_contents (abfd
, msec
, NULL
,
992 if (! stash
->dwarf_line_buffer
)
996 /* It is possible to get a bad value for the line_offset. Validate
997 it here so that we won't get a segfault below. */
998 if (unit
->line_offset
>= stash
->dwarf_line_size
)
1000 (*_bfd_error_handler
) (_("Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)."),
1001 unit
->line_offset
, stash
->dwarf_line_size
);
1002 bfd_set_error (bfd_error_bad_value
);
1006 amt
= sizeof (struct line_info_table
);
1007 table
= bfd_alloc (abfd
, amt
);
1009 table
->comp_dir
= unit
->comp_dir
;
1011 table
->num_files
= 0;
1012 table
->files
= NULL
;
1014 table
->num_dirs
= 0;
1017 table
->files
= NULL
;
1018 table
->last_line
= NULL
;
1019 table
->lcl_head
= NULL
;
1021 line_ptr
= stash
->dwarf_line_buffer
+ unit
->line_offset
;
1023 /* Read in the prologue. */
1024 lh
.total_length
= read_4_bytes (abfd
, line_ptr
);
1027 if (lh
.total_length
== 0xffffffff)
1029 lh
.total_length
= read_8_bytes (abfd
, line_ptr
);
1033 else if (lh
.total_length
== 0 && unit
->addr_size
== 8)
1035 /* Handle (non-standard) 64-bit DWARF2 formats. */
1036 lh
.total_length
= read_4_bytes (abfd
, line_ptr
);
1040 line_end
= line_ptr
+ lh
.total_length
;
1041 lh
.version
= read_2_bytes (abfd
, line_ptr
);
1043 if (offset_size
== 4)
1044 lh
.prologue_length
= read_4_bytes (abfd
, line_ptr
);
1046 lh
.prologue_length
= read_8_bytes (abfd
, line_ptr
);
1047 line_ptr
+= offset_size
;
1048 lh
.minimum_instruction_length
= read_1_byte (abfd
, line_ptr
);
1050 lh
.default_is_stmt
= read_1_byte (abfd
, line_ptr
);
1052 lh
.line_base
= read_1_signed_byte (abfd
, line_ptr
);
1054 lh
.line_range
= read_1_byte (abfd
, line_ptr
);
1056 lh
.opcode_base
= read_1_byte (abfd
, line_ptr
);
1058 amt
= lh
.opcode_base
* sizeof (unsigned char);
1059 lh
.standard_opcode_lengths
= bfd_alloc (abfd
, amt
);
1061 lh
.standard_opcode_lengths
[0] = 1;
1063 for (i
= 1; i
< lh
.opcode_base
; ++i
)
1065 lh
.standard_opcode_lengths
[i
] = read_1_byte (abfd
, line_ptr
);
1069 /* Read directory table. */
1070 while ((cur_dir
= read_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
1072 line_ptr
+= bytes_read
;
1074 if ((table
->num_dirs
% DIR_ALLOC_CHUNK
) == 0)
1078 amt
= table
->num_dirs
+ DIR_ALLOC_CHUNK
;
1079 amt
*= sizeof (char *);
1081 tmp
= bfd_realloc (table
->dirs
, amt
);
1090 table
->dirs
[table
->num_dirs
++] = cur_dir
;
1093 line_ptr
+= bytes_read
;
1095 /* Read file name table. */
1096 while ((cur_file
= read_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
1098 line_ptr
+= bytes_read
;
1100 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
1102 struct fileinfo
*tmp
;
1104 amt
= table
->num_files
+ FILE_ALLOC_CHUNK
;
1105 amt
*= sizeof (struct fileinfo
);
1107 tmp
= bfd_realloc (table
->files
, amt
);
1110 free (table
->files
);
1117 table
->files
[table
->num_files
].name
= cur_file
;
1118 table
->files
[table
->num_files
].dir
=
1119 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1120 line_ptr
+= bytes_read
;
1121 table
->files
[table
->num_files
].time
=
1122 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1123 line_ptr
+= bytes_read
;
1124 table
->files
[table
->num_files
].size
=
1125 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1126 line_ptr
+= bytes_read
;
1130 line_ptr
+= bytes_read
;
1132 /* Read the statement sequences until there's nothing left. */
1133 while (line_ptr
< line_end
)
1135 /* State machine registers. */
1136 bfd_vma address
= 0;
1137 char * filename
= table
->num_files
? concat_filename (table
, 1) : NULL
;
1138 unsigned int line
= 1;
1139 unsigned int column
= 0;
1140 int is_stmt
= lh
.default_is_stmt
;
1141 int end_sequence
= 0;
1142 /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
1143 compilers generate address sequences that are wildly out of
1144 order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
1145 for ia64-Linux). Thus, to determine the low and high
1146 address, we must compare on every DW_LNS_copy, etc. */
1147 bfd_vma low_pc
= (bfd_vma
) -1;
1148 bfd_vma high_pc
= 0;
1150 /* Decode the table. */
1151 while (! end_sequence
)
1153 op_code
= read_1_byte (abfd
, line_ptr
);
1156 if (op_code
>= lh
.opcode_base
)
1158 /* Special operand. */
1159 adj_opcode
= op_code
- lh
.opcode_base
;
1160 address
+= (adj_opcode
/ lh
.line_range
)
1161 * lh
.minimum_instruction_length
;
1162 line
+= lh
.line_base
+ (adj_opcode
% lh
.line_range
);
1163 /* Append row to matrix using current values. */
1164 add_line_info (table
, address
, filename
, line
, column
, 0);
1165 if (address
< low_pc
)
1167 if (address
> high_pc
)
1170 else switch (op_code
)
1172 case DW_LNS_extended_op
:
1173 /* Ignore length. */
1175 extended_op
= read_1_byte (abfd
, line_ptr
);
1178 switch (extended_op
)
1180 case DW_LNE_end_sequence
:
1182 add_line_info (table
, address
, filename
, line
, column
,
1184 if (address
< low_pc
)
1186 if (address
> high_pc
)
1188 arange_add (unit
->abfd
, &unit
->arange
, low_pc
, high_pc
);
1190 case DW_LNE_set_address
:
1191 address
= read_address (unit
, line_ptr
);
1192 line_ptr
+= unit
->addr_size
;
1194 case DW_LNE_define_file
:
1195 cur_file
= read_string (abfd
, line_ptr
, &bytes_read
);
1196 line_ptr
+= bytes_read
;
1197 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
1199 struct fileinfo
*tmp
;
1201 amt
= table
->num_files
+ FILE_ALLOC_CHUNK
;
1202 amt
*= sizeof (struct fileinfo
);
1203 tmp
= bfd_realloc (table
->files
, amt
);
1206 free (table
->files
);
1213 table
->files
[table
->num_files
].name
= cur_file
;
1214 table
->files
[table
->num_files
].dir
=
1215 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1216 line_ptr
+= bytes_read
;
1217 table
->files
[table
->num_files
].time
=
1218 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1219 line_ptr
+= bytes_read
;
1220 table
->files
[table
->num_files
].size
=
1221 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1222 line_ptr
+= bytes_read
;
1226 (*_bfd_error_handler
) (_("Dwarf Error: mangled line number section."));
1227 bfd_set_error (bfd_error_bad_value
);
1229 free (table
->files
);
1235 add_line_info (table
, address
, filename
, line
, column
, 0);
1236 if (address
< low_pc
)
1238 if (address
> high_pc
)
1241 case DW_LNS_advance_pc
:
1242 address
+= lh
.minimum_instruction_length
1243 * read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1244 line_ptr
+= bytes_read
;
1246 case DW_LNS_advance_line
:
1247 line
+= read_signed_leb128 (abfd
, line_ptr
, &bytes_read
);
1248 line_ptr
+= bytes_read
;
1250 case DW_LNS_set_file
:
1254 /* The file and directory tables are 0
1255 based, the references are 1 based. */
1256 file
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1257 line_ptr
+= bytes_read
;
1260 filename
= concat_filename (table
, file
);
1263 case DW_LNS_set_column
:
1264 column
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1265 line_ptr
+= bytes_read
;
1267 case DW_LNS_negate_stmt
:
1268 is_stmt
= (!is_stmt
);
1270 case DW_LNS_set_basic_block
:
1272 case DW_LNS_const_add_pc
:
1273 address
+= lh
.minimum_instruction_length
1274 * ((255 - lh
.opcode_base
) / lh
.line_range
);
1276 case DW_LNS_fixed_advance_pc
:
1277 address
+= read_2_bytes (abfd
, line_ptr
);
1284 /* Unknown standard opcode, ignore it. */
1285 for (i
= 0; i
< lh
.standard_opcode_lengths
[op_code
]; i
++)
1287 (void) read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1288 line_ptr
+= bytes_read
;
1301 /* If ADDR is within TABLE set the output parameters and return TRUE,
1302 otherwise return FALSE. The output parameters, FILENAME_PTR and
1303 LINENUMBER_PTR, are pointers to the objects to be filled in. */
1306 lookup_address_in_line_info_table (struct line_info_table
*table
,
1308 struct funcinfo
*function
,
1309 const char **filename_ptr
,
1310 unsigned int *linenumber_ptr
)
1312 /* Note: table->last_line should be a descendingly sorted list. */
1313 struct line_info
* next_line
= table
->last_line
;
1314 struct line_info
* each_line
= NULL
;
1315 *filename_ptr
= NULL
;
1320 each_line
= next_line
->prev_line
;
1322 /* Check for large addresses */
1323 if (addr
> next_line
->address
)
1324 each_line
= NULL
; /* ensure we skip over the normal case */
1326 /* Normal case: search the list; save */
1327 while (each_line
&& next_line
)
1329 /* If we have an address match, save this info. This allows us
1330 to return as good as results as possible for strange debugging
1332 bfd_boolean addr_match
= FALSE
;
1333 if (each_line
->address
<= addr
&& addr
< next_line
->address
)
1337 /* If this line appears to span functions, and addr is in the
1338 later function, return the first line of that function instead
1339 of the last line of the earlier one. This check is for GCC
1340 2.95, which emits the first line number for a function late. */
1342 if (function
!= NULL
)
1345 struct arange
*arange
;
1347 /* Find the lowest address in the function's range list */
1348 lowest_pc
= function
->arange
.low
;
1349 for (arange
= &function
->arange
;
1351 arange
= arange
->next
)
1353 if (function
->arange
.low
< lowest_pc
)
1354 lowest_pc
= function
->arange
.low
;
1356 /* Check for spanning function and set outgoing line info */
1357 if (addr
>= lowest_pc
1358 && each_line
->address
< lowest_pc
1359 && next_line
->address
> lowest_pc
)
1361 *filename_ptr
= next_line
->filename
;
1362 *linenumber_ptr
= next_line
->line
;
1366 *filename_ptr
= each_line
->filename
;
1367 *linenumber_ptr
= each_line
->line
;
1372 *filename_ptr
= each_line
->filename
;
1373 *linenumber_ptr
= each_line
->line
;
1377 if (addr_match
&& !each_line
->end_sequence
)
1378 return TRUE
; /* we have definitely found what we want */
1380 next_line
= each_line
;
1381 each_line
= each_line
->prev_line
;
1384 /* At this point each_line is NULL but next_line is not. If we found
1385 a candidate end-of-sequence point in the loop above, we can return
1386 that (compatibility with a bug in the Intel compiler); otherwise,
1387 assuming that we found the containing function for this address in
1388 this compilation unit, return the first line we have a number for
1389 (compatibility with GCC 2.95). */
1390 if (*filename_ptr
== NULL
&& function
!= NULL
)
1392 *filename_ptr
= next_line
->filename
;
1393 *linenumber_ptr
= next_line
->line
;
1400 /* Read in the .debug_ranges section for future reference */
1403 read_debug_ranges (struct comp_unit
*unit
)
1405 struct dwarf2_debug
*stash
= unit
->stash
;
1406 if (! stash
->dwarf_ranges_buffer
)
1408 bfd
*abfd
= unit
->abfd
;
1411 msec
= bfd_get_section_by_name (abfd
, ".debug_ranges");
1414 (*_bfd_error_handler
) (_("Dwarf Error: Can't find .debug_ranges section."));
1415 bfd_set_error (bfd_error_bad_value
);
1419 stash
->dwarf_ranges_size
= msec
->size
;
1420 stash
->dwarf_ranges_buffer
1421 = bfd_simple_get_relocated_section_contents (abfd
, msec
, NULL
,
1423 if (! stash
->dwarf_ranges_buffer
)
1429 /* Function table functions. */
1431 /* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return TRUE.
1432 Note that we need to find the function that has the smallest
1433 range that contains ADDR, to handle inlined functions without
1434 depending upon them being ordered in TABLE by increasing range. */
1437 lookup_address_in_function_table (struct comp_unit
*unit
,
1439 struct funcinfo
**function_ptr
,
1440 const char **functionname_ptr
)
1442 struct funcinfo
* each_func
;
1443 struct funcinfo
* best_fit
= NULL
;
1444 struct arange
*arange
;
1446 for (each_func
= unit
->function_table
;
1448 each_func
= each_func
->prev_func
)
1450 for (arange
= &each_func
->arange
;
1452 arange
= arange
->next
)
1454 if (addr
>= arange
->low
&& addr
< arange
->high
)
1457 ((arange
->high
- arange
->low
) < (best_fit
->arange
.high
- best_fit
->arange
.low
)))
1458 best_fit
= each_func
;
1465 *functionname_ptr
= best_fit
->name
;
1466 *function_ptr
= best_fit
;
1475 /* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR
1476 and LINENUMBER_PTR, and return TRUE. */
1479 lookup_symbol_in_function_table (struct comp_unit
*unit
,
1482 const char **filename_ptr
,
1483 unsigned int *linenumber_ptr
)
1485 struct funcinfo
* each_func
;
1486 struct funcinfo
* best_fit
= NULL
;
1487 struct arange
*arange
;
1488 const char *name
= bfd_asymbol_name (sym
);
1489 asection
*sec
= bfd_get_section (sym
);
1491 for (each_func
= unit
->function_table
;
1493 each_func
= each_func
->prev_func
)
1495 for (arange
= &each_func
->arange
;
1497 arange
= arange
->next
)
1499 if ((!each_func
->sec
|| each_func
->sec
== sec
)
1500 && addr
>= arange
->low
1501 && addr
< arange
->high
1503 && strcmp (name
, each_func
->name
) == 0
1505 || ((arange
->high
- arange
->low
)
1506 < (best_fit
->arange
.high
- best_fit
->arange
.low
))))
1507 best_fit
= each_func
;
1513 best_fit
->sec
= sec
;
1514 *filename_ptr
= best_fit
->file
;
1515 *linenumber_ptr
= best_fit
->line
;
1522 /* Variable table functions. */
1524 /* If SYM is within variable table of UNIT, set FILENAME_PTR and
1525 LINENUMBER_PTR, and return TRUE. */
1528 lookup_symbol_in_variable_table (struct comp_unit
*unit
,
1531 const char **filename_ptr
,
1532 unsigned int *linenumber_ptr
)
1534 const char *name
= bfd_asymbol_name (sym
);
1535 asection
*sec
= bfd_get_section (sym
);
1536 struct varinfo
* each
;
1538 for (each
= unit
->variable_table
; each
; each
= each
->prev_var
)
1539 if (each
->stack
== 0
1540 && each
->file
!= NULL
1541 && each
->name
!= NULL
1542 && each
->addr
== addr
1543 && (!each
->sec
|| each
->sec
== sec
)
1544 && strcmp (name
, each
->name
) == 0)
1550 *filename_ptr
= each
->file
;
1551 *linenumber_ptr
= each
->line
;
1559 find_abstract_instance_name (struct comp_unit
*unit
, bfd_uint64_t die_ref
)
1561 bfd
*abfd
= unit
->abfd
;
1563 unsigned int abbrev_number
, bytes_read
, i
;
1564 struct abbrev_info
*abbrev
;
1565 struct attribute attr
;
1568 info_ptr
= unit
->info_ptr_unit
+ die_ref
;
1569 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1570 info_ptr
+= bytes_read
;
1574 abbrev
= lookup_abbrev (abbrev_number
, unit
->abbrevs
);
1577 (*_bfd_error_handler
) (_("Dwarf Error: Could not find abbrev number %u."),
1579 bfd_set_error (bfd_error_bad_value
);
1583 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1585 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1589 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
1593 case DW_AT_specification
:
1594 name
= find_abstract_instance_name (unit
, attr
.u
.val
);
1596 case DW_AT_MIPS_linkage_name
:
1609 read_rangelist (struct comp_unit
*unit
, struct arange
*arange
, bfd_uint64_t offset
)
1611 bfd_byte
*ranges_ptr
;
1612 bfd_vma base_address
= unit
->base_address
;
1614 if (! unit
->stash
->dwarf_ranges_buffer
)
1616 if (! read_debug_ranges (unit
))
1619 ranges_ptr
= unit
->stash
->dwarf_ranges_buffer
+ offset
;
1626 if (unit
->addr_size
== 4)
1628 low_pc
= read_4_bytes (unit
->abfd
, ranges_ptr
);
1630 high_pc
= read_4_bytes (unit
->abfd
, ranges_ptr
);
1635 low_pc
= read_8_bytes (unit
->abfd
, ranges_ptr
);
1637 high_pc
= read_8_bytes (unit
->abfd
, ranges_ptr
);
1640 if (low_pc
== 0 && high_pc
== 0)
1642 if (low_pc
== -1UL && high_pc
!= -1UL)
1643 base_address
= high_pc
;
1645 arange_add (unit
->abfd
, arange
, base_address
+ low_pc
, base_address
+ high_pc
);
1649 /* DWARF2 Compilation unit functions. */
1651 /* Scan over each die in a comp. unit looking for functions to add
1652 to the function table and variables to the variable table. */
1655 scan_unit_for_symbols (struct comp_unit
*unit
)
1657 bfd
*abfd
= unit
->abfd
;
1658 bfd_byte
*info_ptr
= unit
->first_child_die_ptr
;
1659 int nesting_level
= 1;
1660 struct funcinfo
**nested_funcs
;
1661 int nested_funcs_size
;
1663 /* Maintain a stack of in-scope functions and inlined functions, which we
1664 can use to set the caller_func field. */
1665 nested_funcs_size
= 32;
1666 nested_funcs
= bfd_malloc (nested_funcs_size
* sizeof (struct funcinfo
*));
1667 if (nested_funcs
== NULL
)
1669 nested_funcs
[nesting_level
] = 0;
1671 while (nesting_level
)
1673 unsigned int abbrev_number
, bytes_read
, i
;
1674 struct abbrev_info
*abbrev
;
1675 struct attribute attr
;
1676 struct funcinfo
*func
;
1677 struct varinfo
*var
;
1679 bfd_vma high_pc
= 0;
1681 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1682 info_ptr
+= bytes_read
;
1684 if (! abbrev_number
)
1690 abbrev
= lookup_abbrev (abbrev_number
,unit
->abbrevs
);
1693 (*_bfd_error_handler
) (_("Dwarf Error: Could not find abbrev number %u."),
1695 bfd_set_error (bfd_error_bad_value
);
1696 free (nested_funcs
);
1701 if (abbrev
->tag
== DW_TAG_subprogram
1702 || abbrev
->tag
== DW_TAG_entry_point
1703 || abbrev
->tag
== DW_TAG_inlined_subroutine
)
1705 bfd_size_type amt
= sizeof (struct funcinfo
);
1706 func
= bfd_zalloc (abfd
, amt
);
1707 func
->tag
= abbrev
->tag
;
1708 func
->prev_func
= unit
->function_table
;
1709 unit
->function_table
= func
;
1711 if (func
->tag
== DW_TAG_inlined_subroutine
)
1712 for (i
= nesting_level
- 1; i
>= 1; i
--)
1713 if (nested_funcs
[i
])
1715 func
->caller_func
= nested_funcs
[i
];
1718 nested_funcs
[nesting_level
] = func
;
1723 if (abbrev
->tag
== DW_TAG_variable
)
1725 bfd_size_type amt
= sizeof (struct varinfo
);
1726 var
= bfd_zalloc (abfd
, amt
);
1727 var
->tag
= abbrev
->tag
;
1729 var
->prev_var
= unit
->variable_table
;
1730 unit
->variable_table
= var
;
1733 /* No inline function in scope at this nesting level. */
1734 nested_funcs
[nesting_level
] = 0;
1737 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1739 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1745 case DW_AT_call_file
:
1746 func
->caller_file
= concat_filename (unit
->line_table
, attr
.u
.val
);
1749 case DW_AT_call_line
:
1750 func
->caller_line
= attr
.u
.val
;
1753 case DW_AT_abstract_origin
:
1754 func
->name
= find_abstract_instance_name (unit
, attr
.u
.val
);
1758 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
1759 if (func
->name
== NULL
)
1760 func
->name
= attr
.u
.str
;
1763 case DW_AT_MIPS_linkage_name
:
1764 func
->name
= attr
.u
.str
;
1768 low_pc
= attr
.u
.val
;
1772 high_pc
= attr
.u
.val
;
1776 read_rangelist (unit
, &func
->arange
, attr
.u
.val
);
1779 case DW_AT_decl_file
:
1780 func
->file
= concat_filename (unit
->line_table
,
1784 case DW_AT_decl_line
:
1785 func
->line
= attr
.u
.val
;
1797 var
->name
= attr
.u
.str
;
1800 case DW_AT_decl_file
:
1801 var
->file
= concat_filename (unit
->line_table
,
1805 case DW_AT_decl_line
:
1806 var
->line
= attr
.u
.val
;
1809 case DW_AT_external
:
1810 if (attr
.u
.val
!= 0)
1814 case DW_AT_location
:
1818 case DW_FORM_block1
:
1819 case DW_FORM_block2
:
1820 case DW_FORM_block4
:
1821 if (*attr
.u
.blk
->data
== DW_OP_addr
)
1825 /* Verify that DW_OP_addr is the only opcode in the
1826 location, in which case the block size will be 1
1827 plus the address size. */
1828 /* ??? For TLS variables, gcc can emit
1829 DW_OP_addr <addr> DW_OP_GNU_push_tls_address
1830 which we don't handle here yet. */
1831 if (attr
.u
.blk
->size
== unit
->addr_size
+ 1U)
1832 var
->addr
= bfd_get (unit
->addr_size
* 8,
1834 attr
.u
.blk
->data
+ 1);
1849 if (func
&& high_pc
!= 0)
1851 arange_add (unit
->abfd
, &func
->arange
, low_pc
, high_pc
);
1854 if (abbrev
->has_children
)
1858 if (nesting_level
>= nested_funcs_size
)
1860 struct funcinfo
**tmp
;
1862 nested_funcs_size
*= 2;
1863 tmp
= bfd_realloc (nested_funcs
,
1865 * sizeof (struct funcinfo
*)));
1868 free (nested_funcs
);
1873 nested_funcs
[nesting_level
] = 0;
1877 free (nested_funcs
);
1881 /* Parse a DWARF2 compilation unit starting at INFO_PTR. This
1882 includes the compilation unit header that proceeds the DIE's, but
1883 does not include the length field that precedes each compilation
1884 unit header. END_PTR points one past the end of this comp unit.
1885 OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
1887 This routine does not read the whole compilation unit; only enough
1888 to get to the line number information for the compilation unit. */
1890 static struct comp_unit
*
1891 parse_comp_unit (bfd
*abfd
,
1892 struct dwarf2_debug
*stash
,
1893 bfd_vma unit_length
,
1894 bfd_byte
*info_ptr_unit
,
1895 unsigned int offset_size
)
1897 struct comp_unit
* unit
;
1898 unsigned int version
;
1899 bfd_uint64_t abbrev_offset
= 0;
1900 unsigned int addr_size
;
1901 struct abbrev_info
** abbrevs
;
1902 unsigned int abbrev_number
, bytes_read
, i
;
1903 struct abbrev_info
*abbrev
;
1904 struct attribute attr
;
1905 bfd_byte
*info_ptr
= stash
->info_ptr
;
1906 bfd_byte
*end_ptr
= info_ptr
+ unit_length
;
1909 bfd_vma high_pc
= 0;
1911 version
= read_2_bytes (abfd
, info_ptr
);
1913 BFD_ASSERT (offset_size
== 4 || offset_size
== 8);
1914 if (offset_size
== 4)
1915 abbrev_offset
= read_4_bytes (abfd
, info_ptr
);
1917 abbrev_offset
= read_8_bytes (abfd
, info_ptr
);
1918 info_ptr
+= offset_size
;
1919 addr_size
= read_1_byte (abfd
, info_ptr
);
1924 (*_bfd_error_handler
) (_("Dwarf Error: found dwarf version '%u', this reader only handles version 2 information."), version
);
1925 bfd_set_error (bfd_error_bad_value
);
1929 if (addr_size
> sizeof (bfd_vma
))
1931 (*_bfd_error_handler
) (_("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."),
1933 (unsigned int) sizeof (bfd_vma
));
1934 bfd_set_error (bfd_error_bad_value
);
1938 if (addr_size
!= 2 && addr_size
!= 4 && addr_size
!= 8)
1940 (*_bfd_error_handler
) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '2', '4' and '8'.", addr_size
);
1941 bfd_set_error (bfd_error_bad_value
);
1945 /* Read the abbrevs for this compilation unit into a table. */
1946 abbrevs
= read_abbrevs (abfd
, abbrev_offset
, stash
);
1950 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1951 info_ptr
+= bytes_read
;
1952 if (! abbrev_number
)
1954 (*_bfd_error_handler
) (_("Dwarf Error: Bad abbrev number: %u."),
1956 bfd_set_error (bfd_error_bad_value
);
1960 abbrev
= lookup_abbrev (abbrev_number
, abbrevs
);
1963 (*_bfd_error_handler
) (_("Dwarf Error: Could not find abbrev number %u."),
1965 bfd_set_error (bfd_error_bad_value
);
1969 amt
= sizeof (struct comp_unit
);
1970 unit
= bfd_zalloc (abfd
, amt
);
1972 unit
->addr_size
= addr_size
;
1973 unit
->offset_size
= offset_size
;
1974 unit
->abbrevs
= abbrevs
;
1975 unit
->end_ptr
= end_ptr
;
1976 unit
->stash
= stash
;
1977 unit
->info_ptr_unit
= info_ptr_unit
;
1979 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1981 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1983 /* Store the data if it is of an attribute we want to keep in a
1984 partial symbol table. */
1987 case DW_AT_stmt_list
:
1989 unit
->line_offset
= attr
.u
.val
;
1993 unit
->name
= attr
.u
.str
;
1997 low_pc
= attr
.u
.val
;
1998 /* If the compilation unit DIE has a DW_AT_low_pc attribute,
1999 this is the base address to use when reading location
2000 lists or range lists. */
2001 unit
->base_address
= low_pc
;
2005 high_pc
= attr
.u
.val
;
2009 read_rangelist (unit
, &unit
->arange
, attr
.u
.val
);
2012 case DW_AT_comp_dir
:
2014 char *comp_dir
= attr
.u
.str
;
2017 /* Irix 6.2 native cc prepends <machine>.: to the compilation
2018 directory, get rid of it. */
2019 char *cp
= strchr (comp_dir
, ':');
2021 if (cp
&& cp
!= comp_dir
&& cp
[-1] == '.' && cp
[1] == '/')
2024 unit
->comp_dir
= comp_dir
;
2034 arange_add (unit
->abfd
, &unit
->arange
, low_pc
, high_pc
);
2037 unit
->first_child_die_ptr
= info_ptr
;
2041 /* Return TRUE if UNIT may contain the address given by ADDR. When
2042 there are functions written entirely with inline asm statements, the
2043 range info in the compilation unit header may not be correct. We
2044 need to consult the line info table to see if a compilation unit
2045 really contains the given address. */
2048 comp_unit_contains_address (struct comp_unit
*unit
, bfd_vma addr
)
2050 struct arange
*arange
;
2055 arange
= &unit
->arange
;
2058 if (addr
>= arange
->low
&& addr
< arange
->high
)
2060 arange
= arange
->next
;
2067 /* If UNIT contains ADDR, set the output parameters to the values for
2068 the line containing ADDR. The output parameters, FILENAME_PTR,
2069 FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
2072 Return TRUE if UNIT contains ADDR, and no errors were encountered;
2076 comp_unit_find_nearest_line (struct comp_unit
*unit
,
2078 const char **filename_ptr
,
2079 const char **functionname_ptr
,
2080 unsigned int *linenumber_ptr
,
2081 struct dwarf2_debug
*stash
)
2085 struct funcinfo
*function
;
2090 if (! unit
->line_table
)
2092 if (! unit
->stmtlist
)
2098 unit
->line_table
= decode_line_info (unit
, stash
);
2100 if (! unit
->line_table
)
2106 if (unit
->first_child_die_ptr
< unit
->end_ptr
2107 && ! scan_unit_for_symbols (unit
))
2115 func_p
= lookup_address_in_function_table (unit
, addr
,
2116 &function
, functionname_ptr
);
2117 if (func_p
&& (function
->tag
== DW_TAG_inlined_subroutine
))
2118 stash
->inliner_chain
= function
;
2119 line_p
= lookup_address_in_line_info_table (unit
->line_table
, addr
,
2120 function
, filename_ptr
,
2122 return line_p
|| func_p
;
2125 /* If UNIT contains SYM at ADDR, set the output parameters to the
2126 values for the line containing SYM. The output parameters,
2127 FILENAME_PTR, and LINENUMBER_PTR, are pointers to the objects to be
2130 Return TRUE if UNIT contains SYM, and no errors were encountered;
2134 comp_unit_find_line (struct comp_unit
*unit
,
2137 const char **filename_ptr
,
2138 unsigned int *linenumber_ptr
,
2139 struct dwarf2_debug
*stash
)
2144 if (! unit
->line_table
)
2146 if (! unit
->stmtlist
)
2152 unit
->line_table
= decode_line_info (unit
, stash
);
2154 if (! unit
->line_table
)
2160 if (unit
->first_child_die_ptr
< unit
->end_ptr
2161 && ! scan_unit_for_symbols (unit
))
2168 if (sym
->flags
& BSF_FUNCTION
)
2169 return lookup_symbol_in_function_table (unit
, sym
, addr
,
2173 return lookup_symbol_in_variable_table (unit
, sym
, addr
,
2178 /* Locate a section in a BFD containing debugging info. The search starts
2179 from the section after AFTER_SEC, or from the first section in the BFD if
2180 AFTER_SEC is NULL. The search works by examining the names of the
2181 sections. There are two permissiable names. The first is .debug_info.
2182 This is the standard DWARF2 name. The second is a prefix .gnu.linkonce.wi.
2183 This is a variation on the .debug_info section which has a checksum
2184 describing the contents appended onto the name. This allows the linker to
2185 identify and discard duplicate debugging sections for different
2186 compilation units. */
2187 #define DWARF2_DEBUG_INFO ".debug_info"
2188 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
2191 find_debug_info (bfd
*abfd
, asection
*after_sec
)
2196 msec
= after_sec
->next
;
2198 msec
= abfd
->sections
;
2202 if (strcmp (msec
->name
, DWARF2_DEBUG_INFO
) == 0)
2205 if (CONST_STRNEQ (msec
->name
, GNU_LINKONCE_INFO
))
2214 /* Unset vmas for loadable sections in STASH. */
2217 unset_sections (struct dwarf2_debug
*stash
)
2220 struct loadable_section
*p
;
2222 i
= stash
->loadable_section_count
;
2223 p
= stash
->loadable_sections
;
2224 for (; i
> 0; i
--, p
++)
2225 p
->section
->vma
= 0;
2228 /* Set unique vmas for loadable sections in ABFD and save vmas in
2229 STASH for unset_sections. */
2232 place_sections (bfd
*abfd
, struct dwarf2_debug
*stash
)
2234 struct loadable_section
*p
;
2237 if (stash
->loadable_section_count
!= 0)
2239 i
= stash
->loadable_section_count
;
2240 p
= stash
->loadable_sections
;
2241 for (; i
> 0; i
--, p
++)
2242 p
->section
->vma
= p
->adj_vma
;
2247 bfd_vma last_vma
= 0;
2249 struct loadable_section
*p
;
2252 for (sect
= abfd
->sections
; sect
!= NULL
; sect
= sect
->next
)
2256 if (sect
->vma
!= 0 || (sect
->flags
& SEC_LOAD
) == 0)
2259 sz
= sect
->rawsize
? sect
->rawsize
: sect
->size
;
2266 amt
= i
* sizeof (struct loadable_section
);
2267 p
= (struct loadable_section
*) bfd_zalloc (abfd
, amt
);
2271 stash
->loadable_sections
= p
;
2272 stash
->loadable_section_count
= i
;
2274 for (sect
= abfd
->sections
; sect
!= NULL
; sect
= sect
->next
)
2278 if (sect
->vma
!= 0 || (sect
->flags
& SEC_LOAD
) == 0)
2281 sz
= sect
->rawsize
? sect
->rawsize
: sect
->size
;
2288 /* Align the new address to the current section
2290 last_vma
= ((last_vma
2291 + ~((bfd_vma
) -1 << sect
->alignment_power
))
2292 & ((bfd_vma
) -1 << sect
->alignment_power
));
2293 sect
->vma
= last_vma
;
2295 p
->adj_vma
= sect
->vma
;
2296 last_vma
+= sect
->vma
+ sz
;
2305 /* The DWARF2 version of find_nearest_line. Return TRUE if the line
2306 is found without error. ADDR_SIZE is the number of bytes in the
2307 initial .debug_info length field and in the abbreviation offset.
2308 You may use zero to indicate that the default value should be
2312 _bfd_dwarf2_find_nearest_line (bfd
*abfd
,
2316 const char **filename_ptr
,
2317 const char **functionname_ptr
,
2318 unsigned int *linenumber_ptr
,
2319 unsigned int addr_size
,
2322 /* Read each compilation unit from the section .debug_info, and check
2323 to see if it contains the address we are searching for. If yes,
2324 lookup the address, and return the line number info. If no, go
2325 on to the next compilation unit.
2327 We keep a list of all the previously read compilation units, and
2328 a pointer to the next un-read compilation unit. Check the
2329 previously read units before reading more. */
2330 struct dwarf2_debug
*stash
;
2332 /* What address are we looking for? */
2335 struct comp_unit
* each
;
2337 bfd_vma found
= FALSE
;
2343 bfd_size_type amt
= sizeof (struct dwarf2_debug
);
2345 stash
= bfd_zalloc (abfd
, amt
);
2350 /* In a relocatable file, 2 functions may have the same address.
2351 We change the section vma so that they won't overlap. */
2352 if ((abfd
->flags
& (EXEC_P
| DYNAMIC
)) == 0)
2354 if (! place_sections (abfd
, stash
))
2359 if (section
->output_section
)
2360 addr
+= section
->output_section
->vma
+ section
->output_offset
;
2362 addr
+= section
->vma
;
2363 *filename_ptr
= NULL
;
2364 *functionname_ptr
= NULL
;
2365 *linenumber_ptr
= 0;
2367 /* The DWARF2 spec says that the initial length field, and the
2368 offset of the abbreviation table, should both be 4-byte values.
2369 However, some compilers do things differently. */
2372 BFD_ASSERT (addr_size
== 4 || addr_size
== 8);
2376 bfd_size_type total_size
;
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 (comp_unit_contains_address (each
, addr
)
2439 && comp_unit_find_nearest_line (each
, addr
, filename_ptr
,
2441 linenumber_ptr
, stash
))
2447 /* Read each remaining comp. units checking each as they are read. */
2448 while (stash
->info_ptr
< stash
->info_ptr_end
)
2451 unsigned int offset_size
= addr_size
;
2452 bfd_byte
*info_ptr_unit
= stash
->info_ptr
;
2454 length
= read_4_bytes (abfd
, stash
->info_ptr
);
2455 /* A 0xffffff length is the DWARF3 way of indicating we use
2456 64-bit offsets, instead of 32-bit offsets. */
2457 if (length
== 0xffffffff)
2460 length
= read_8_bytes (abfd
, stash
->info_ptr
+ 4);
2461 stash
->info_ptr
+= 12;
2463 /* A zero length is the IRIX way of indicating 64-bit offsets,
2464 mostly because the 64-bit length will generally fit in 32
2465 bits, and the endianness helps. */
2466 else if (length
== 0)
2469 length
= read_4_bytes (abfd
, stash
->info_ptr
+ 4);
2470 stash
->info_ptr
+= 8;
2472 /* In the absence of the hints above, we assume addr_size-sized
2473 offsets, for backward-compatibility with pre-DWARF3 64-bit
2475 else if (addr_size
== 8)
2477 length
= read_8_bytes (abfd
, stash
->info_ptr
);
2478 stash
->info_ptr
+= 8;
2481 stash
->info_ptr
+= 4;
2485 each
= parse_comp_unit (abfd
, stash
, length
, info_ptr_unit
,
2487 stash
->info_ptr
+= length
;
2489 if ((bfd_vma
) (stash
->info_ptr
- stash
->sec_info_ptr
)
2490 == stash
->sec
->size
)
2492 stash
->sec
= find_debug_info (abfd
, stash
->sec
);
2493 stash
->sec_info_ptr
= stash
->info_ptr
;
2498 each
->next_unit
= stash
->all_comp_units
;
2499 stash
->all_comp_units
= each
;
2501 /* DW_AT_low_pc and DW_AT_high_pc are optional for
2502 compilation units. If we don't have them (i.e.,
2503 unit->high == 0), we need to consult the line info
2504 table to see if a compilation unit contains the given
2506 if ((each
->arange
.high
== 0
2507 || comp_unit_contains_address (each
, addr
))
2508 && comp_unit_find_nearest_line (each
, addr
,
2522 if ((abfd
->flags
& (EXEC_P
| DYNAMIC
)) == 0)
2523 unset_sections (stash
);
2528 /* The DWARF2 version of find_line. Return TRUE if the line is found
2532 _bfd_dwarf2_find_line (bfd
*abfd
,
2535 const char **filename_ptr
,
2536 unsigned int *linenumber_ptr
,
2537 unsigned int addr_size
,
2540 /* Read each compilation unit from the section .debug_info, and check
2541 to see if it contains the address we are searching for. If yes,
2542 lookup the address, and return the line number info. If no, go
2543 on to the next compilation unit.
2545 We keep a list of all the previously read compilation units, and
2546 a pointer to the next un-read compilation unit. Check the
2547 previously read units before reading more. */
2548 struct dwarf2_debug
*stash
;
2550 /* What address are we looking for? */
2553 struct comp_unit
* each
;
2557 bfd_boolean found
= FALSE
;
2559 section
= bfd_get_section (symbol
);
2565 bfd_size_type amt
= sizeof (struct dwarf2_debug
);
2567 stash
= bfd_zalloc (abfd
, amt
);
2572 /* In a relocatable file, 2 functions may have the same address.
2573 We change the section vma so that they won't overlap. */
2574 if (!stash
&& (abfd
->flags
& (EXEC_P
| DYNAMIC
)) == 0)
2576 if (! place_sections (abfd
, stash
))
2580 addr
= symbol
->value
;
2581 if (section
->output_section
)
2582 addr
+= section
->output_section
->vma
+ section
->output_offset
;
2584 addr
+= section
->vma
;
2586 *filename_ptr
= NULL
;
2587 *filename_ptr
= NULL
;
2588 *linenumber_ptr
= 0;
2592 bfd_size_type total_size
;
2597 msec
= find_debug_info (abfd
, NULL
);
2599 /* No dwarf2 info. Note that at this point the stash
2600 has been allocated, but contains zeros, this lets
2601 future calls to this function fail quicker. */
2604 /* There can be more than one DWARF2 info section in a BFD these days.
2605 Read them all in and produce one large stash. We do this in two
2606 passes - in the first pass we just accumulate the section sizes.
2607 In the second pass we read in the section's contents. The allows
2608 us to avoid reallocing the data as we add sections to the stash. */
2609 for (total_size
= 0; msec
; msec
= find_debug_info (abfd
, msec
))
2610 total_size
+= msec
->size
;
2612 stash
->info_ptr
= bfd_alloc (abfd
, total_size
);
2613 if (stash
->info_ptr
== NULL
)
2616 stash
->info_ptr_end
= stash
->info_ptr
;
2618 for (msec
= find_debug_info (abfd
, NULL
);
2620 msec
= find_debug_info (abfd
, msec
))
2623 bfd_size_type start
;
2629 start
= stash
->info_ptr_end
- stash
->info_ptr
;
2631 if ((bfd_simple_get_relocated_section_contents
2632 (abfd
, msec
, stash
->info_ptr
+ start
, symbols
)) == NULL
)
2635 stash
->info_ptr_end
= stash
->info_ptr
+ start
+ size
;
2638 BFD_ASSERT (stash
->info_ptr_end
== stash
->info_ptr
+ total_size
);
2640 stash
->sec
= find_debug_info (abfd
, NULL
);
2641 stash
->sec_info_ptr
= stash
->info_ptr
;
2642 stash
->syms
= symbols
;
2645 /* A null info_ptr indicates that there is no dwarf2 info
2646 (or that an error occured while setting up the stash). */
2647 if (! stash
->info_ptr
)
2650 stash
->inliner_chain
= NULL
;
2652 /* Check the previously read comp. units first. */
2653 for (each
= stash
->all_comp_units
; each
; each
= each
->next_unit
)
2654 if ((symbol
->flags
& BSF_FUNCTION
) == 0
2655 || comp_unit_contains_address (each
, addr
))
2657 found
= comp_unit_find_line (each
, symbol
, addr
, filename_ptr
,
2658 linenumber_ptr
, stash
);
2663 /* The DWARF2 spec says that the initial length field, and the
2664 offset of the abbreviation table, should both be 4-byte values.
2665 However, some compilers do things differently. */
2668 BFD_ASSERT (addr_size
== 4 || addr_size
== 8);
2670 /* Read each remaining comp. units checking each as they are read. */
2671 while (stash
->info_ptr
< stash
->info_ptr_end
)
2674 unsigned int offset_size
= addr_size
;
2675 bfd_byte
*info_ptr_unit
= stash
->info_ptr
;
2677 length
= read_4_bytes (abfd
, stash
->info_ptr
);
2678 /* A 0xffffff length is the DWARF3 way of indicating we use
2679 64-bit offsets, instead of 32-bit offsets. */
2680 if (length
== 0xffffffff)
2683 length
= read_8_bytes (abfd
, stash
->info_ptr
+ 4);
2684 stash
->info_ptr
+= 12;
2686 /* A zero length is the IRIX way of indicating 64-bit offsets,
2687 mostly because the 64-bit length will generally fit in 32
2688 bits, and the endianness helps. */
2689 else if (length
== 0)
2692 length
= read_4_bytes (abfd
, stash
->info_ptr
+ 4);
2693 stash
->info_ptr
+= 8;
2695 /* In the absence of the hints above, we assume addr_size-sized
2696 offsets, for backward-compatibility with pre-DWARF3 64-bit
2698 else if (addr_size
== 8)
2700 length
= read_8_bytes (abfd
, stash
->info_ptr
);
2701 stash
->info_ptr
+= 8;
2704 stash
->info_ptr
+= 4;
2708 each
= parse_comp_unit (abfd
, stash
, length
, info_ptr_unit
,
2710 stash
->info_ptr
+= length
;
2712 if ((bfd_vma
) (stash
->info_ptr
- stash
->sec_info_ptr
)
2713 == stash
->sec
->size
)
2715 stash
->sec
= find_debug_info (abfd
, stash
->sec
);
2716 stash
->sec_info_ptr
= stash
->info_ptr
;
2721 each
->next_unit
= stash
->all_comp_units
;
2722 stash
->all_comp_units
= each
;
2724 /* DW_AT_low_pc and DW_AT_high_pc are optional for
2725 compilation units. If we don't have them (i.e.,
2726 unit->high == 0), we need to consult the line info
2727 table to see if a compilation unit contains the given
2729 found
= (((symbol
->flags
& BSF_FUNCTION
) == 0
2730 || each
->arange
.high
<= 0
2731 || comp_unit_contains_address (each
, addr
))
2732 && comp_unit_find_line (each
, symbol
, addr
,
2743 if ((abfd
->flags
& (EXEC_P
| DYNAMIC
)) == 0)
2744 unset_sections (stash
);
2750 _bfd_dwarf2_find_inliner_info (bfd
*abfd ATTRIBUTE_UNUSED
,
2751 const char **filename_ptr
,
2752 const char **functionname_ptr
,
2753 unsigned int *linenumber_ptr
,
2756 struct dwarf2_debug
*stash
;
2761 struct funcinfo
*func
= stash
->inliner_chain
;
2762 if (func
&& func
->caller_func
)
2764 *filename_ptr
= func
->caller_file
;
2765 *functionname_ptr
= func
->caller_func
->name
;
2766 *linenumber_ptr
= func
->caller_line
;
2767 stash
->inliner_chain
= func
->caller_func
;
2776 _bfd_dwarf2_cleanup_debug_info (bfd
*abfd
)
2778 struct comp_unit
*each
;
2779 struct dwarf2_debug
*stash
;
2781 if (abfd
== NULL
|| elf_tdata (abfd
) == NULL
)
2784 stash
= elf_tdata (abfd
)->dwarf2_find_line_info
;
2789 for (each
= stash
->all_comp_units
; each
; each
= each
->next_unit
)
2791 struct abbrev_info
**abbrevs
= each
->abbrevs
;
2794 for (i
= 0; i
< ABBREV_HASH_SIZE
; i
++)
2796 struct abbrev_info
*abbrev
= abbrevs
[i
];
2800 free (abbrev
->attrs
);
2801 abbrev
= abbrev
->next
;
2805 if (each
->line_table
)
2807 free (each
->line_table
->dirs
);
2808 free (each
->line_table
->files
);
2812 free (stash
->dwarf_abbrev_buffer
);
2813 free (stash
->dwarf_line_buffer
);
2814 free (stash
->dwarf_ranges_buffer
);