2 Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
3 Free Software Foundation, Inc.
5 Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
8 From the dwarf2read.c header:
9 Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
10 Inc. with support from Florida State University (under contract
11 with the Ada Joint Program Office), and Silicon Graphics, Inc.
12 Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
13 based on Fred Fish's (Cygnus Support) implementation of DWARF 1
14 support in dwarfread.c
16 This file is part of BFD.
18 This program is free software; you can redistribute it and/or modify
19 it under the terms of the GNU General Public License as published by
20 the Free Software Foundation; either version 2 of the License, or (at
21 your option) any later version.
23 This program is distributed in the hope that it will be useful, but
24 WITHOUT ANY WARRANTY; without even the implied warranty of
25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
26 General Public License for more details.
28 You should have received a copy of the GNU General Public License
29 along with this program; if not, write to the Free Software
30 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
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
;
71 /* Get at parts of an attribute structure. */
73 #define DW_STRING(attr) ((attr)->u.str)
74 #define DW_UNSND(attr) ((attr)->u.unsnd)
75 #define DW_BLOCK(attr) ((attr)->u.blk)
76 #define DW_SND(attr) ((attr)->u.snd)
77 #define DW_ADDR(attr) ((attr)->u.addr)
79 /* Blocks are a bunch of untyped bytes. */
88 /* A list of all previously read comp_units. */
89 struct comp_unit
* all_comp_units
;
91 /* The next unread compilation unit within the .debug_info section.
92 Zero indicates that the .debug_info section has not been loaded
96 /* Pointer to the end of the .debug_info section memory buffer. */
99 /* Pointer to the section and address of the beginning of the
104 /* Pointer to the symbol table. */
107 /* Pointer to the .debug_abbrev section loaded into memory. */
108 char* dwarf_abbrev_buffer
;
110 /* Length of the loaded .debug_abbrev section. */
111 unsigned long dwarf_abbrev_size
;
113 /* Buffer for decode_line_info. */
114 char *dwarf_line_buffer
;
116 /* Length of the loaded .debug_line section. */
117 unsigned long dwarf_line_size
;
119 /* Pointer to the .debug_str section loaded into memory. */
120 char* dwarf_str_buffer
;
122 /* Length of the loaded .debug_str section. */
123 unsigned long dwarf_str_size
;
133 /* A minimal decoding of DWARF2 compilation units. We only decode
134 what's needed to get to the line number information. */
138 /* Chain the previously read compilation units. */
139 struct comp_unit
* next_unit
;
141 /* Keep the bdf convenient (for memory allocation). */
144 /* The lowest and higest addresses contained in this compilation
145 unit as specified in the compilation unit header. */
146 struct arange arange
;
148 /* The DW_AT_name attribute (for error messages). */
151 /* The abbrev hash table. */
152 struct abbrev_info
** abbrevs
;
154 /* Note that an error was found by comp_unit_find_nearest_line. */
157 /* The DW_AT_comp_dir attribute. */
160 /* True if there is a line number table associated with this comp. unit. */
163 /* The offset into .debug_line of the line number table. */
164 unsigned long line_offset
;
166 /* Pointer to the first child die for the comp unit. */
167 char *first_child_die_ptr
;
169 /* The end of the comp unit. */
172 /* The decoded line number, NULL if not yet decoded. */
173 struct line_info_table
* line_table
;
175 /* A list of the functions found in this comp. unit. */
176 struct funcinfo
* function_table
;
178 /* Pointer to dwarf2_debug structure. */
179 struct dwarf2_debug
*stash
;
181 /* Address size for this unit - from unit header. */
182 unsigned char addr_size
;
184 /* Offset size for this unit - from unit header. */
185 unsigned char offset_size
;
188 /* This data structure holds the information of an abbrev. */
191 unsigned int number
; /* Number identifying abbrev. */
192 enum dwarf_tag tag
; /* DWARF tag. */
193 int has_children
; /* Boolean. */
194 unsigned int num_attrs
; /* Number of attributes. */
195 struct attr_abbrev
*attrs
; /* An array of attribute descriptions. */
196 struct abbrev_info
*next
; /* Next in chain. */
201 enum dwarf_attribute name
;
202 enum dwarf_form form
;
205 #ifndef ABBREV_HASH_SIZE
206 #define ABBREV_HASH_SIZE 121
208 #ifndef ATTR_ALLOC_CHUNK
209 #define ATTR_ALLOC_CHUNK 4
212 static unsigned int read_1_byte
PARAMS ((bfd
*, char *));
213 static int read_1_signed_byte
PARAMS ((bfd
*, char *));
214 static unsigned int read_2_bytes
PARAMS ((bfd
*, char *));
215 static unsigned int read_4_bytes
PARAMS ((bfd
*, char *));
216 static bfd_vma read_8_bytes
PARAMS ((bfd
*, char *));
217 static char *read_n_bytes
PARAMS ((bfd
*, char *, unsigned int));
218 static char *read_string
PARAMS ((bfd
*, char *, unsigned int *));
219 static char *read_indirect_string
PARAMS ((struct comp_unit
*, char *, unsigned int *));
220 static unsigned int read_unsigned_leb128
221 PARAMS ((bfd
*, char *, unsigned int *));
222 static int read_signed_leb128
223 PARAMS ((bfd
*, char *, unsigned int *));
224 static bfd_vma read_address
PARAMS ((struct comp_unit
*, char *));
225 static struct abbrev_info
*lookup_abbrev
226 PARAMS ((unsigned int, struct abbrev_info
**));
227 static struct abbrev_info
**read_abbrevs
228 PARAMS ((bfd
*, bfd_vma
, struct dwarf2_debug
*));
229 static char *read_attribute
230 PARAMS ((struct attribute
*, struct attr_abbrev
*,
231 struct comp_unit
*, char *));
232 static char *read_attribute_value
233 PARAMS ((struct attribute
*, unsigned,
234 struct comp_unit
*, char *));
235 static void add_line_info
236 PARAMS ((struct line_info_table
*, bfd_vma
, char *,
237 unsigned int, unsigned int, int));
238 static char *concat_filename
PARAMS ((struct line_info_table
*, unsigned int));
239 static void arange_add
PARAMS ((struct comp_unit
*, bfd_vma
, bfd_vma
));
240 static struct line_info_table
*decode_line_info
241 PARAMS ((struct comp_unit
*, struct dwarf2_debug
*));
242 static boolean lookup_address_in_line_info_table
243 PARAMS ((struct line_info_table
*, bfd_vma
, struct funcinfo
*,
244 const char **, unsigned int *));
245 static boolean lookup_address_in_function_table
246 PARAMS ((struct funcinfo
*, bfd_vma
, struct funcinfo
**, const char **));
247 static boolean scan_unit_for_functions
PARAMS ((struct comp_unit
*));
248 static bfd_vma find_rela_addend
249 PARAMS ((bfd
*, asection
*, bfd_size_type
, asymbol
**));
250 static struct comp_unit
*parse_comp_unit
251 PARAMS ((bfd
*, struct dwarf2_debug
*, bfd_vma
, unsigned int));
252 static boolean comp_unit_contains_address
253 PARAMS ((struct comp_unit
*, bfd_vma
));
254 static boolean comp_unit_find_nearest_line
255 PARAMS ((struct comp_unit
*, bfd_vma
, const char **, const char **,
256 unsigned int *, struct dwarf2_debug
*));
257 static asection
*find_debug_info
PARAMS ((bfd
*, asection
*));
260 The following function up to the END VERBATIM mark are
261 copied directly from dwarf2read.c. */
263 /* Read dwarf information from a buffer. */
266 read_1_byte (abfd
, buf
)
267 bfd
*abfd ATTRIBUTE_UNUSED
;
270 return bfd_get_8 (abfd
, (bfd_byte
*) buf
);
274 read_1_signed_byte (abfd
, buf
)
275 bfd
*abfd ATTRIBUTE_UNUSED
;
278 return bfd_get_signed_8 (abfd
, (bfd_byte
*) buf
);
282 read_2_bytes (abfd
, buf
)
286 return bfd_get_16 (abfd
, (bfd_byte
*) buf
);
289 #if 0 /* This is not used. */
292 read_2_signed_bytes (abfd
, buf
)
296 return bfd_get_signed_16 (abfd
, (bfd_byte
*) buf
);
302 read_4_bytes (abfd
, buf
)
306 return bfd_get_32 (abfd
, (bfd_byte
*) buf
);
309 #if 0 /* This is not used. */
312 read_4_signed_bytes (abfd
, buf
)
316 return bfd_get_signed_32 (abfd
, (bfd_byte
*) buf
);
322 read_8_bytes (abfd
, buf
)
326 return bfd_get_64 (abfd
, (bfd_byte
*) buf
);
330 read_n_bytes (abfd
, buf
, size
)
331 bfd
*abfd ATTRIBUTE_UNUSED
;
333 unsigned int size ATTRIBUTE_UNUSED
;
335 /* If the size of a host char is 8 bits, we can return a pointer
336 to the buffer, otherwise we have to copy the data to a buffer
337 allocated on the temporary obstack. */
342 read_string (abfd
, buf
, bytes_read_ptr
)
343 bfd
*abfd ATTRIBUTE_UNUSED
;
345 unsigned int *bytes_read_ptr
;
347 /* Return a pointer to the embedded string. */
354 *bytes_read_ptr
= strlen (buf
) + 1;
359 read_indirect_string (unit
, buf
, bytes_read_ptr
)
360 struct comp_unit
* unit
;
362 unsigned int *bytes_read_ptr
;
365 struct dwarf2_debug
*stash
= unit
->stash
;
367 if (unit
->offset_size
== 4)
368 offset
= read_4_bytes (unit
->abfd
, buf
);
370 offset
= read_8_bytes (unit
->abfd
, buf
);
371 *bytes_read_ptr
= unit
->offset_size
;
373 if (! stash
->dwarf_str_buffer
)
376 bfd
*abfd
= unit
->abfd
;
378 msec
= bfd_get_section_by_name (abfd
, ".debug_str");
381 (*_bfd_error_handler
)
382 (_("Dwarf Error: Can't find .debug_str section."));
383 bfd_set_error (bfd_error_bad_value
);
387 stash
->dwarf_str_size
= msec
->_raw_size
;
388 stash
->dwarf_str_buffer
= (char*) bfd_alloc (abfd
, msec
->_raw_size
);
389 if (! stash
->dwarf_abbrev_buffer
)
392 if (! bfd_get_section_contents (abfd
, msec
, stash
->dwarf_str_buffer
,
393 (bfd_vma
) 0, msec
->_raw_size
))
397 if (offset
>= stash
->dwarf_str_size
)
399 (*_bfd_error_handler
) (_("Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)."),
400 (unsigned long) offset
, stash
->dwarf_str_size
);
401 bfd_set_error (bfd_error_bad_value
);
405 buf
= stash
->dwarf_str_buffer
+ offset
;
412 read_unsigned_leb128 (abfd
, buf
, bytes_read_ptr
)
413 bfd
*abfd ATTRIBUTE_UNUSED
;
415 unsigned int *bytes_read_ptr
;
418 unsigned int num_read
;
428 byte
= bfd_get_8 (abfd
, (bfd_byte
*) buf
);
431 result
|= ((byte
& 0x7f) << shift
);
436 * bytes_read_ptr
= num_read
;
442 read_signed_leb128 (abfd
, buf
, bytes_read_ptr
)
443 bfd
*abfd ATTRIBUTE_UNUSED
;
445 unsigned int * bytes_read_ptr
;
458 byte
= bfd_get_8 (abfd
, (bfd_byte
*) buf
);
461 result
|= ((byte
& 0x7f) << shift
);
466 if ((shift
< 32) && (byte
& 0x40))
467 result
|= -(1 << shift
);
469 * bytes_read_ptr
= num_read
;
477 read_address (unit
, buf
)
478 struct comp_unit
* unit
;
481 switch (unit
->addr_size
)
484 return bfd_get_64 (unit
->abfd
, (bfd_byte
*) buf
);
486 return bfd_get_32 (unit
->abfd
, (bfd_byte
*) buf
);
488 return bfd_get_16 (unit
->abfd
, (bfd_byte
*) buf
);
494 /* Lookup an abbrev_info structure in the abbrev hash table. */
496 static struct abbrev_info
*
497 lookup_abbrev (number
,abbrevs
)
499 struct abbrev_info
**abbrevs
;
501 unsigned int hash_number
;
502 struct abbrev_info
*abbrev
;
504 hash_number
= number
% ABBREV_HASH_SIZE
;
505 abbrev
= abbrevs
[hash_number
];
509 if (abbrev
->number
== number
)
512 abbrev
= abbrev
->next
;
518 /* In DWARF version 2, the description of the debugging information is
519 stored in a separate .debug_abbrev section. Before we read any
520 dies from a section we read in all abbreviations and install them
523 static struct abbrev_info
**
524 read_abbrevs (abfd
, offset
, stash
)
527 struct dwarf2_debug
*stash
;
529 struct abbrev_info
**abbrevs
;
531 struct abbrev_info
*cur_abbrev
;
532 unsigned int abbrev_number
, bytes_read
, abbrev_name
;
533 unsigned int abbrev_form
, hash_number
;
536 if (! stash
->dwarf_abbrev_buffer
)
540 msec
= bfd_get_section_by_name (abfd
, ".debug_abbrev");
543 (*_bfd_error_handler
) (_("Dwarf Error: Can't find .debug_abbrev section."));
544 bfd_set_error (bfd_error_bad_value
);
548 stash
->dwarf_abbrev_size
= msec
->_raw_size
;
549 stash
->dwarf_abbrev_buffer
= (char*) bfd_alloc (abfd
, msec
->_raw_size
);
550 if (! stash
->dwarf_abbrev_buffer
)
553 if (! bfd_get_section_contents (abfd
, msec
, stash
->dwarf_abbrev_buffer
,
554 (bfd_vma
) 0, msec
->_raw_size
))
558 if (offset
>= stash
->dwarf_abbrev_size
)
560 (*_bfd_error_handler
) (_("Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)."),
561 (unsigned long) offset
, stash
->dwarf_abbrev_size
);
562 bfd_set_error (bfd_error_bad_value
);
566 amt
= sizeof (struct abbrev_info
*) * ABBREV_HASH_SIZE
;
567 abbrevs
= (struct abbrev_info
**) bfd_zalloc (abfd
, amt
);
569 abbrev_ptr
= stash
->dwarf_abbrev_buffer
+ offset
;
570 abbrev_number
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
571 abbrev_ptr
+= bytes_read
;
573 /* Loop until we reach an abbrev number of 0. */
574 while (abbrev_number
)
576 amt
= sizeof (struct abbrev_info
);
577 cur_abbrev
= (struct abbrev_info
*) bfd_zalloc (abfd
, amt
);
579 /* Read in abbrev header. */
580 cur_abbrev
->number
= abbrev_number
;
581 cur_abbrev
->tag
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
582 abbrev_ptr
+= bytes_read
;
583 cur_abbrev
->has_children
= read_1_byte (abfd
, abbrev_ptr
);
586 /* Now read in declarations. */
587 abbrev_name
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
588 abbrev_ptr
+= bytes_read
;
589 abbrev_form
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
590 abbrev_ptr
+= bytes_read
;
594 if ((cur_abbrev
->num_attrs
% ATTR_ALLOC_CHUNK
) == 0)
596 amt
= cur_abbrev
->num_attrs
+ ATTR_ALLOC_CHUNK
;
597 amt
*= sizeof (struct attr_abbrev
);
598 cur_abbrev
->attrs
= ((struct attr_abbrev
*)
599 bfd_realloc (cur_abbrev
->attrs
, amt
));
600 if (! cur_abbrev
->attrs
)
604 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].name
= abbrev_name
;
605 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
++].form
= abbrev_form
;
606 abbrev_name
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
607 abbrev_ptr
+= bytes_read
;
608 abbrev_form
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
609 abbrev_ptr
+= bytes_read
;
612 hash_number
= abbrev_number
% ABBREV_HASH_SIZE
;
613 cur_abbrev
->next
= abbrevs
[hash_number
];
614 abbrevs
[hash_number
] = cur_abbrev
;
616 /* Get next abbreviation.
617 Under Irix6 the abbreviations for a compilation unit are not
618 always properly terminated with an abbrev number of 0.
619 Exit loop if we encounter an abbreviation which we have
620 already read (which means we are about to read the abbreviations
621 for the next compile unit) or if the end of the abbreviation
623 if ((unsigned int) (abbrev_ptr
- stash
->dwarf_abbrev_buffer
)
624 >= stash
->dwarf_abbrev_size
)
626 abbrev_number
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
627 abbrev_ptr
+= bytes_read
;
628 if (lookup_abbrev (abbrev_number
,abbrevs
) != NULL
)
635 /* Read an attribute value described by an attribute form. */
638 read_attribute_value (attr
, form
, unit
, info_ptr
)
639 struct attribute
*attr
;
641 struct comp_unit
*unit
;
644 bfd
*abfd
= unit
->abfd
;
645 unsigned int bytes_read
;
646 struct dwarf_block
*blk
;
654 /* FIXME: DWARF3 draft sais DW_FORM_ref_addr is offset_size. */
655 case DW_FORM_ref_addr
:
656 DW_ADDR (attr
) = read_address (unit
, info_ptr
);
657 info_ptr
+= unit
->addr_size
;
660 amt
= sizeof (struct dwarf_block
);
661 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, amt
);
662 blk
->size
= read_2_bytes (abfd
, info_ptr
);
664 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
665 info_ptr
+= blk
->size
;
666 DW_BLOCK (attr
) = blk
;
669 amt
= sizeof (struct dwarf_block
);
670 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, amt
);
671 blk
->size
= read_4_bytes (abfd
, info_ptr
);
673 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
674 info_ptr
+= blk
->size
;
675 DW_BLOCK (attr
) = blk
;
678 DW_UNSND (attr
) = read_2_bytes (abfd
, info_ptr
);
682 DW_UNSND (attr
) = read_4_bytes (abfd
, info_ptr
);
686 DW_UNSND (attr
) = read_8_bytes (abfd
, info_ptr
);
690 DW_STRING (attr
) = read_string (abfd
, info_ptr
, &bytes_read
);
691 info_ptr
+= bytes_read
;
694 DW_STRING (attr
) = read_indirect_string (unit
, info_ptr
, &bytes_read
);
695 info_ptr
+= bytes_read
;
698 amt
= sizeof (struct dwarf_block
);
699 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, amt
);
700 blk
->size
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
701 info_ptr
+= bytes_read
;
702 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
703 info_ptr
+= blk
->size
;
704 DW_BLOCK (attr
) = blk
;
707 amt
= sizeof (struct dwarf_block
);
708 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, amt
);
709 blk
->size
= read_1_byte (abfd
, info_ptr
);
711 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
712 info_ptr
+= blk
->size
;
713 DW_BLOCK (attr
) = blk
;
716 DW_UNSND (attr
) = read_1_byte (abfd
, info_ptr
);
720 DW_UNSND (attr
) = read_1_byte (abfd
, info_ptr
);
724 DW_SND (attr
) = read_signed_leb128 (abfd
, info_ptr
, &bytes_read
);
725 info_ptr
+= bytes_read
;
728 DW_UNSND (attr
) = read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
729 info_ptr
+= bytes_read
;
732 DW_UNSND (attr
) = read_1_byte (abfd
, info_ptr
);
736 DW_UNSND (attr
) = read_2_bytes (abfd
, info_ptr
);
740 DW_UNSND (attr
) = read_4_bytes (abfd
, info_ptr
);
744 DW_UNSND (attr
) = read_8_bytes (abfd
, info_ptr
);
747 case DW_FORM_ref_udata
:
748 DW_UNSND (attr
) = read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
749 info_ptr
+= bytes_read
;
751 case DW_FORM_indirect
:
752 form
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
753 info_ptr
+= bytes_read
;
754 info_ptr
= read_attribute_value (attr
, form
, unit
, info_ptr
);
757 (*_bfd_error_handler
) (_("Dwarf Error: Invalid or unhandled FORM value: %u."),
759 bfd_set_error (bfd_error_bad_value
);
764 /* Read an attribute described by an abbreviated attribute. */
767 read_attribute (attr
, abbrev
, unit
, info_ptr
)
768 struct attribute
*attr
;
769 struct attr_abbrev
*abbrev
;
770 struct comp_unit
*unit
;
773 attr
->name
= abbrev
->name
;
774 info_ptr
= read_attribute_value (attr
, abbrev
->form
, unit
, info_ptr
);
778 /* Source line information table routines. */
780 #define FILE_ALLOC_CHUNK 5
781 #define DIR_ALLOC_CHUNK 5
785 struct line_info
* prev_line
;
790 int end_sequence
; /* End of (sequential) code sequence. */
801 struct line_info_table
804 unsigned int num_files
;
805 unsigned int num_dirs
;
808 struct fileinfo
* files
;
809 struct line_info
* last_line
; /* largest VMA */
810 struct line_info
* lcl_head
; /* local head; used in 'add_line_info' */
815 struct funcinfo
*prev_func
;
821 /* add_line_info: adds a new entry to the line_info list in the
822 line_info_table, ensuring that the list is sorted. Note that the
823 line_info list is sorted from highest to lowest VMA (with possible
824 duplicates); that is, line_info->prev_line always accesses an equal
827 add_line_info (table
, address
, filename
, line
, column
, end_sequence
)
828 struct line_info_table
* table
;
835 bfd_size_type amt
= sizeof (struct line_info
);
836 struct line_info
* info
= (struct line_info
*) bfd_alloc (table
->abfd
, amt
);
838 /* Find the correct location for 'info'. Normally we will receive
839 new line_info data 1) in order and 2) with increasing VMAs.
840 However some compilers break the rules (cf. decode_line_info) and
841 so we include some heuristics for quickly finding the correct
842 location for 'info'. In particular, these heuristics optimize for
843 the common case in which the VMA sequence that we receive is a
844 list of locally sorted VMAs such as
845 p...z a...j (where a < j < p < z)
847 Note: table->lcl_head is used to head an *actual* or *possible*
848 sequence within the list (such as a...j) that is not directly
849 headed by table->last_line
851 Note: we may receive duplicate entries from 'decode_line_info'. */
854 if (!table
->last_line
855 || address
>= table
->last_line
->address
)
857 /* Normal case: add 'info' to the beginning of the list */
858 info
->prev_line
= table
->last_line
;
859 table
->last_line
= info
;
861 /* lcl_head: initialize to head a *possible* sequence at the end. */
862 if (!table
->lcl_head
)
863 table
->lcl_head
= info
;
866 else if (!table
->lcl_head
->prev_line
867 && table
->lcl_head
->address
> address
)
869 /* Abnormal but easy: lcl_head is 1) at the *end* of the line
870 list and 2) the head of 'info'. */
871 info
->prev_line
= NULL
;
872 table
->lcl_head
->prev_line
= info
;
875 else if (table
->lcl_head
->prev_line
876 && table
->lcl_head
->address
> address
877 && address
>= table
->lcl_head
->prev_line
->address
)
879 /* Abnormal but easy: lcl_head is 1) in the *middle* of the line
880 list and 2) the head of 'info'. */
881 info
->prev_line
= table
->lcl_head
->prev_line
;
882 table
->lcl_head
->prev_line
= info
;
887 /* Abnormal and hard: Neither 'last_line' nor 'lcl_head' are valid
888 heads for 'info'. Reset 'lcl_head' and repeat. */
889 struct line_info
* li2
= table
->last_line
; /* always non-NULL */
890 struct line_info
* li1
= li2
->prev_line
;
894 if (li2
->address
> address
&& address
>= li1
->address
)
897 li2
= li1
; /* always non-NULL */
898 li1
= li1
->prev_line
;
900 table
->lcl_head
= li2
;
903 /* Set member data of 'info'. */
904 info
->address
= address
;
905 info
->filename
= filename
;
907 info
->column
= column
;
908 info
->end_sequence
= end_sequence
;
912 concat_filename (table
, file
)
913 struct line_info_table
* table
;
918 if (file
- 1 >= table
->num_files
)
920 (*_bfd_error_handler
)
921 (_("Dwarf Error: mangled line number section (bad file number)."));
925 filename
= table
->files
[file
- 1].name
;
926 if (IS_ABSOLUTE_PATH(filename
))
930 char* dirname
= (table
->files
[file
- 1].dir
931 ? table
->dirs
[table
->files
[file
- 1].dir
- 1]
934 /* Not all tools set DW_AT_comp_dir, so dirname may be unknown. The
935 best we can do is return the filename part. */
939 return (char*) concat (dirname
, "/", filename
, NULL
);
944 arange_add (unit
, low_pc
, high_pc
)
945 struct comp_unit
*unit
;
949 struct arange
*arange
;
951 /* First see if we can cheaply extend an existing range. */
952 arange
= &unit
->arange
;
956 if (low_pc
== arange
->high
)
958 arange
->high
= high_pc
;
961 if (high_pc
== arange
->low
)
963 arange
->low
= low_pc
;
966 arange
= arange
->next
;
970 if (unit
->arange
.high
== 0)
972 /* This is the first address range: store it in unit->arange. */
973 unit
->arange
.next
= 0;
974 unit
->arange
.low
= low_pc
;
975 unit
->arange
.high
= high_pc
;
979 /* Need to allocate a new arange and insert it into the arange list. */
980 arange
= bfd_zalloc (unit
->abfd
, (bfd_size_type
) sizeof (*arange
));
981 arange
->low
= low_pc
;
982 arange
->high
= high_pc
;
984 arange
->next
= unit
->arange
.next
;
985 unit
->arange
.next
= arange
;
988 /* Decode the line number information for UNIT. */
990 static struct line_info_table
*
991 decode_line_info (unit
, stash
)
992 struct comp_unit
*unit
;
993 struct dwarf2_debug
*stash
;
995 bfd
*abfd
= unit
->abfd
;
996 struct line_info_table
* table
;
1000 unsigned int i
, bytes_read
, offset_size
;
1001 char *cur_file
, *cur_dir
;
1002 unsigned char op_code
, extended_op
, adj_opcode
;
1005 if (! stash
->dwarf_line_buffer
)
1009 msec
= bfd_get_section_by_name (abfd
, ".debug_line");
1012 (*_bfd_error_handler
) (_("Dwarf Error: Can't find .debug_line section."));
1013 bfd_set_error (bfd_error_bad_value
);
1017 stash
->dwarf_line_size
= msec
->_raw_size
;
1018 stash
->dwarf_line_buffer
= (char *) bfd_alloc (abfd
, msec
->_raw_size
);
1019 if (! stash
->dwarf_line_buffer
)
1022 if (! bfd_get_section_contents (abfd
, msec
, stash
->dwarf_line_buffer
,
1023 (bfd_vma
) 0, msec
->_raw_size
))
1026 /* FIXME: We ought to apply the relocs against this section before
1030 /* Since we are using un-relocated data, it is possible to get a bad value
1031 for the line_offset. Validate it here so that we won't get a segfault
1033 if (unit
->line_offset
>= stash
->dwarf_line_size
)
1035 (*_bfd_error_handler
) (_("Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)."),
1036 unit
->line_offset
, stash
->dwarf_line_size
);
1037 bfd_set_error (bfd_error_bad_value
);
1041 amt
= sizeof (struct line_info_table
);
1042 table
= (struct line_info_table
*) bfd_alloc (abfd
, amt
);
1044 table
->comp_dir
= unit
->comp_dir
;
1046 table
->num_files
= 0;
1047 table
->files
= NULL
;
1049 table
->num_dirs
= 0;
1052 table
->files
= NULL
;
1053 table
->last_line
= NULL
;
1054 table
->lcl_head
= NULL
;
1056 line_ptr
= stash
->dwarf_line_buffer
+ unit
->line_offset
;
1058 /* Read in the prologue. */
1059 lh
.total_length
= read_4_bytes (abfd
, line_ptr
);
1062 if (lh
.total_length
== 0xffffffff)
1064 lh
.total_length
= read_8_bytes (abfd
, line_ptr
);
1068 else if (lh
.total_length
== 0 && unit
->addr_size
== 8)
1070 /* Handle (non-standard) 64-bit DWARF2 formats. */
1071 lh
.total_length
= read_4_bytes (abfd
, line_ptr
);
1075 line_end
= line_ptr
+ lh
.total_length
;
1076 lh
.version
= read_2_bytes (abfd
, line_ptr
);
1078 if (offset_size
== 4)
1079 lh
.prologue_length
= read_4_bytes (abfd
, line_ptr
);
1081 lh
.prologue_length
= read_8_bytes (abfd
, line_ptr
);
1082 line_ptr
+= offset_size
;
1083 lh
.minimum_instruction_length
= read_1_byte (abfd
, line_ptr
);
1085 lh
.default_is_stmt
= read_1_byte (abfd
, line_ptr
);
1087 lh
.line_base
= read_1_signed_byte (abfd
, line_ptr
);
1089 lh
.line_range
= read_1_byte (abfd
, line_ptr
);
1091 lh
.opcode_base
= read_1_byte (abfd
, line_ptr
);
1093 amt
= lh
.opcode_base
* sizeof (unsigned char);
1094 lh
.standard_opcode_lengths
= (unsigned char *) bfd_alloc (abfd
, amt
);
1096 lh
.standard_opcode_lengths
[0] = 1;
1098 for (i
= 1; i
< lh
.opcode_base
; ++i
)
1100 lh
.standard_opcode_lengths
[i
] = read_1_byte (abfd
, line_ptr
);
1104 /* Read directory table. */
1105 while ((cur_dir
= read_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
1107 line_ptr
+= bytes_read
;
1109 if ((table
->num_dirs
% DIR_ALLOC_CHUNK
) == 0)
1111 amt
= table
->num_dirs
+ DIR_ALLOC_CHUNK
;
1112 amt
*= sizeof (char *);
1113 table
->dirs
= (char **) bfd_realloc (table
->dirs
, amt
);
1118 table
->dirs
[table
->num_dirs
++] = cur_dir
;
1121 line_ptr
+= bytes_read
;
1123 /* Read file name table. */
1124 while ((cur_file
= read_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
1126 line_ptr
+= bytes_read
;
1128 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
1130 amt
= table
->num_files
+ FILE_ALLOC_CHUNK
;
1131 amt
*= sizeof (struct fileinfo
);
1132 table
->files
= (struct fileinfo
*) bfd_realloc (table
->files
, amt
);
1137 table
->files
[table
->num_files
].name
= cur_file
;
1138 table
->files
[table
->num_files
].dir
=
1139 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1140 line_ptr
+= bytes_read
;
1141 table
->files
[table
->num_files
].time
=
1142 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1143 line_ptr
+= bytes_read
;
1144 table
->files
[table
->num_files
].size
=
1145 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1146 line_ptr
+= bytes_read
;
1150 line_ptr
+= bytes_read
;
1152 /* Read the statement sequences until there's nothing left. */
1153 while (line_ptr
< line_end
)
1155 /* State machine registers. */
1156 bfd_vma address
= 0;
1157 char * filename
= concat_filename (table
, 1);
1158 unsigned int line
= 1;
1159 unsigned int column
= 0;
1160 int is_stmt
= lh
.default_is_stmt
;
1161 int basic_block
= 0;
1162 int end_sequence
= 0;
1163 /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
1164 compilers generate address sequences that are wildly out of
1165 order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
1166 for ia64-Linux). Thus, to determine the low and high
1167 address, we must compare on every DW_LNS_copy, etc. */
1169 bfd_vma high_pc
= 0;
1171 /* Decode the table. */
1172 while (! end_sequence
)
1174 op_code
= read_1_byte (abfd
, line_ptr
);
1177 if (op_code
>= lh
.opcode_base
)
1179 /* Special operand. */
1180 adj_opcode
= op_code
- lh
.opcode_base
;
1181 address
+= (adj_opcode
/ lh
.line_range
)
1182 * lh
.minimum_instruction_length
;
1183 line
+= lh
.line_base
+ (adj_opcode
% lh
.line_range
);
1184 /* Append row to matrix using current values. */
1185 add_line_info (table
, address
, filename
, line
, column
, 0);
1187 if (low_pc
== 0 || address
< low_pc
)
1189 if (address
> high_pc
)
1192 else switch (op_code
)
1194 case DW_LNS_extended_op
:
1195 /* Ignore length. */
1197 extended_op
= read_1_byte (abfd
, line_ptr
);
1200 switch (extended_op
)
1202 case DW_LNE_end_sequence
:
1204 add_line_info (table
, address
, filename
, line
, column
,
1206 if (low_pc
== 0 || address
< low_pc
)
1208 if (address
> high_pc
)
1210 arange_add (unit
, low_pc
, high_pc
);
1212 case DW_LNE_set_address
:
1213 address
= read_address (unit
, line_ptr
);
1214 line_ptr
+= unit
->addr_size
;
1216 case DW_LNE_define_file
:
1217 cur_file
= read_string (abfd
, line_ptr
, &bytes_read
);
1218 line_ptr
+= bytes_read
;
1219 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
1221 amt
= table
->num_files
+ FILE_ALLOC_CHUNK
;
1222 amt
*= sizeof (struct fileinfo
);
1224 (struct fileinfo
*) bfd_realloc (table
->files
, amt
);
1228 table
->files
[table
->num_files
].name
= cur_file
;
1229 table
->files
[table
->num_files
].dir
=
1230 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1231 line_ptr
+= bytes_read
;
1232 table
->files
[table
->num_files
].time
=
1233 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1234 line_ptr
+= bytes_read
;
1235 table
->files
[table
->num_files
].size
=
1236 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1237 line_ptr
+= bytes_read
;
1241 (*_bfd_error_handler
) (_("Dwarf Error: mangled line number section."));
1242 bfd_set_error (bfd_error_bad_value
);
1247 add_line_info (table
, address
, filename
, line
, column
, 0);
1249 if (low_pc
== 0 || address
< low_pc
)
1251 if (address
> high_pc
)
1254 case DW_LNS_advance_pc
:
1255 address
+= lh
.minimum_instruction_length
1256 * read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1257 line_ptr
+= bytes_read
;
1259 case DW_LNS_advance_line
:
1260 line
+= read_signed_leb128 (abfd
, line_ptr
, &bytes_read
);
1261 line_ptr
+= bytes_read
;
1263 case DW_LNS_set_file
:
1267 /* The file and directory tables are 0
1268 based, the references are 1 based. */
1269 file
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1270 line_ptr
+= bytes_read
;
1271 filename
= concat_filename (table
, file
);
1274 case DW_LNS_set_column
:
1275 column
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1276 line_ptr
+= bytes_read
;
1278 case DW_LNS_negate_stmt
:
1279 is_stmt
= (!is_stmt
);
1281 case DW_LNS_set_basic_block
:
1284 case DW_LNS_const_add_pc
:
1285 address
+= lh
.minimum_instruction_length
1286 * ((255 - lh
.opcode_base
) / lh
.line_range
);
1288 case DW_LNS_fixed_advance_pc
:
1289 address
+= read_2_bytes (abfd
, line_ptr
);
1295 /* Unknown standard opcode, ignore it. */
1296 for (i
= 0; i
< lh
.standard_opcode_lengths
[op_code
]; i
++)
1298 (void) read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1299 line_ptr
+= bytes_read
;
1309 /* If ADDR is within TABLE set the output parameters and return true,
1310 otherwise return false. The output parameters, FILENAME_PTR and
1311 LINENUMBER_PTR, are pointers to the objects to be filled in. */
1314 lookup_address_in_line_info_table (table
, addr
, function
, filename_ptr
,
1316 struct line_info_table
* table
;
1318 struct funcinfo
*function
;
1319 const char **filename_ptr
;
1320 unsigned int *linenumber_ptr
;
1322 /* Note: table->last_line should be a descendingly sorted list. */
1323 struct line_info
* next_line
= table
->last_line
;
1324 struct line_info
* each_line
= NULL
;
1325 *filename_ptr
= NULL
;
1330 each_line
= next_line
->prev_line
;
1332 /* Check for large addresses */
1333 if (addr
> next_line
->address
)
1334 each_line
= NULL
; /* ensure we skip over the normal case */
1336 /* Normal case: search the list; save */
1337 while (each_line
&& next_line
)
1339 /* If we have an address match, save this info. This allows us
1340 to return as good as results as possible for strange debugging
1342 boolean addr_match
= false;
1343 if (each_line
->address
<= addr
&& addr
<= next_line
->address
)
1347 /* If this line appears to span functions, and addr is in the
1348 later function, return the first line of that function instead
1349 of the last line of the earlier one. This check is for GCC
1350 2.95, which emits the first line number for a function late. */
1351 if (function
!= NULL
1352 && each_line
->address
< function
->low
1353 && next_line
->address
> function
->low
)
1355 *filename_ptr
= next_line
->filename
;
1356 *linenumber_ptr
= next_line
->line
;
1360 *filename_ptr
= each_line
->filename
;
1361 *linenumber_ptr
= each_line
->line
;
1365 if (addr_match
&& !each_line
->end_sequence
)
1366 return true; /* we have definitely found what we want */
1368 next_line
= each_line
;
1369 each_line
= each_line
->prev_line
;
1372 /* At this point each_line is NULL but next_line is not. If we found
1373 a candidate end-of-sequence point in the loop above, we can return
1374 that (compatibility with a bug in the Intel compiler); otherwise,
1375 assuming that we found the containing function for this address in
1376 this compilation unit, return the first line we have a number for
1377 (compatibility with GCC 2.95). */
1378 if (*filename_ptr
== NULL
&& function
!= NULL
)
1380 *filename_ptr
= next_line
->filename
;
1381 *linenumber_ptr
= next_line
->line
;
1388 /* Function table functions. */
1390 /* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return true. */
1393 lookup_address_in_function_table (table
, addr
, function_ptr
,
1395 struct funcinfo
* table
;
1397 struct funcinfo
** function_ptr
;
1398 const char **functionname_ptr
;
1400 struct funcinfo
* each_func
;
1402 for (each_func
= table
;
1404 each_func
= each_func
->prev_func
)
1406 if (addr
>= each_func
->low
&& addr
< each_func
->high
)
1408 *functionname_ptr
= each_func
->name
;
1409 *function_ptr
= each_func
;
1417 /* DWARF2 Compilation unit functions. */
1419 /* Scan over each die in a comp. unit looking for functions to add
1420 to the function table. */
1423 scan_unit_for_functions (unit
)
1424 struct comp_unit
*unit
;
1426 bfd
*abfd
= unit
->abfd
;
1427 char *info_ptr
= unit
->first_child_die_ptr
;
1428 int nesting_level
= 1;
1430 while (nesting_level
)
1432 unsigned int abbrev_number
, bytes_read
, i
;
1433 struct abbrev_info
*abbrev
;
1434 struct attribute attr
;
1435 struct funcinfo
*func
;
1438 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1439 info_ptr
+= bytes_read
;
1441 if (! abbrev_number
)
1447 abbrev
= lookup_abbrev (abbrev_number
,unit
->abbrevs
);
1450 (*_bfd_error_handler
) (_("Dwarf Error: Could not find abbrev number %u."),
1452 bfd_set_error (bfd_error_bad_value
);
1456 if (abbrev
->tag
== DW_TAG_subprogram
)
1458 bfd_size_type amt
= sizeof (struct funcinfo
);
1459 func
= (struct funcinfo
*) bfd_zalloc (abfd
, amt
);
1460 func
->prev_func
= unit
->function_table
;
1461 unit
->function_table
= func
;
1466 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1468 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1476 name
= DW_STRING (&attr
);
1478 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
1479 if (func
->name
== NULL
)
1480 func
->name
= DW_STRING (&attr
);
1483 case DW_AT_MIPS_linkage_name
:
1484 func
->name
= DW_STRING (&attr
);
1488 func
->low
= DW_ADDR (&attr
);
1492 func
->high
= DW_ADDR (&attr
);
1504 name
= DW_STRING (&attr
);
1513 if (abbrev
->has_children
)
1520 /* Look for a RELA relocation to be applied on OFFSET of section SEC,
1521 and return the addend if such a relocation is found. Since this is
1522 only used to find relocations referring to the .debug_abbrev
1523 section, we make sure the relocation refers to this section, but
1524 this is not strictly necessary, and it can probably be safely
1525 removed if needed. However, it is important to note that this
1526 function only returns the addend, it doesn't serve the purpose of
1527 applying a generic relocation.
1529 If no suitable relocation is found, or if it is not a real RELA
1530 relocation, this function returns 0. */
1533 find_rela_addend (abfd
, sec
, offset
, syms
)
1536 bfd_size_type offset
;
1539 long reloc_size
= bfd_get_reloc_upper_bound (abfd
, sec
);
1540 arelent
**relocs
= NULL
;
1541 long reloc_count
, relc
;
1543 if (reloc_size
<= 0)
1546 relocs
= (arelent
**) bfd_malloc ((bfd_size_type
) reloc_size
);
1550 reloc_count
= bfd_canonicalize_reloc (abfd
, sec
, relocs
, syms
);
1552 if (reloc_count
<= 0)
1558 for (relc
= 0; relc
< reloc_count
; relc
++)
1559 if (relocs
[relc
]->address
== offset
1560 && (*relocs
[relc
]->sym_ptr_ptr
)->flags
& BSF_SECTION_SYM
1561 && strcmp ((*relocs
[relc
]->sym_ptr_ptr
)->name
,
1562 ".debug_abbrev") == 0)
1564 bfd_vma addend
= (relocs
[relc
]->howto
->partial_inplace
1565 ? 0 : relocs
[relc
]->addend
);
1574 /* Parse a DWARF2 compilation unit starting at INFO_PTR. This
1575 includes the compilation unit header that proceeds the DIE's, but
1576 does not include the length field that preceeds each compilation
1577 unit header. END_PTR points one past the end of this comp unit.
1578 OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
1580 This routine does not read the whole compilation unit; only enough
1581 to get to the line number information for the compilation unit. */
1583 static struct comp_unit
*
1584 parse_comp_unit (abfd
, stash
, unit_length
, offset_size
)
1586 struct dwarf2_debug
*stash
;
1587 bfd_vma unit_length
;
1588 unsigned int offset_size
;
1590 struct comp_unit
* unit
;
1591 unsigned int version
;
1592 bfd_vma abbrev_offset
= 0;
1593 unsigned int addr_size
;
1594 struct abbrev_info
** abbrevs
;
1595 unsigned int abbrev_number
, bytes_read
, i
;
1596 struct abbrev_info
*abbrev
;
1597 struct attribute attr
;
1598 char *info_ptr
= stash
->info_ptr
;
1599 char *end_ptr
= info_ptr
+ unit_length
;
1603 version
= read_2_bytes (abfd
, info_ptr
);
1605 BFD_ASSERT (offset_size
== 4 || offset_size
== 8);
1606 if (offset_size
== 4)
1607 abbrev_offset
= read_4_bytes (abfd
, info_ptr
);
1609 abbrev_offset
= read_8_bytes (abfd
, info_ptr
);
1610 /* The abbrev offset is generally a relocation pointing to
1611 .debug_abbrev+offset. On RELA targets, we have to find the
1612 relocation and extract the addend to obtain the actual
1613 abbrev_offset, so do it here. */
1614 off
= info_ptr
- stash
->sec_info_ptr
;
1615 abbrev_offset
+= find_rela_addend (abfd
, stash
->sec
, off
, stash
->syms
);
1616 info_ptr
+= offset_size
;
1617 addr_size
= read_1_byte (abfd
, info_ptr
);
1622 (*_bfd_error_handler
) (_("Dwarf Error: found dwarf version '%u', this reader only handles version 2 information."), version
);
1623 bfd_set_error (bfd_error_bad_value
);
1627 if (addr_size
> sizeof (bfd_vma
))
1629 (*_bfd_error_handler
) (_("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."),
1631 (unsigned int) sizeof (bfd_vma
));
1632 bfd_set_error (bfd_error_bad_value
);
1636 if (addr_size
!= 2 && addr_size
!= 4 && addr_size
!= 8)
1638 (*_bfd_error_handler
) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '2', '4' and '8'.", addr_size
);
1639 bfd_set_error (bfd_error_bad_value
);
1643 /* Read the abbrevs for this compilation unit into a table. */
1644 abbrevs
= read_abbrevs (abfd
, abbrev_offset
, stash
);
1648 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1649 info_ptr
+= bytes_read
;
1650 if (! abbrev_number
)
1652 (*_bfd_error_handler
) (_("Dwarf Error: Bad abbrev number: %u."),
1654 bfd_set_error (bfd_error_bad_value
);
1658 abbrev
= lookup_abbrev (abbrev_number
, abbrevs
);
1661 (*_bfd_error_handler
) (_("Dwarf Error: Could not find abbrev number %u."),
1663 bfd_set_error (bfd_error_bad_value
);
1667 amt
= sizeof (struct comp_unit
);
1668 unit
= (struct comp_unit
*) bfd_zalloc (abfd
, amt
);
1670 unit
->addr_size
= addr_size
;
1671 unit
->offset_size
= offset_size
;
1672 unit
->abbrevs
= abbrevs
;
1673 unit
->end_ptr
= end_ptr
;
1674 unit
->stash
= stash
;
1676 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1678 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1680 /* Store the data if it is of an attribute we want to keep in a
1681 partial symbol table. */
1684 case DW_AT_stmt_list
:
1686 unit
->line_offset
= DW_UNSND (&attr
);
1690 unit
->name
= DW_STRING (&attr
);
1694 unit
->arange
.low
= DW_ADDR (&attr
);
1698 unit
->arange
.high
= DW_ADDR (&attr
);
1701 case DW_AT_comp_dir
:
1703 char* comp_dir
= DW_STRING (&attr
);
1706 /* Irix 6.2 native cc prepends <machine>.: to the compilation
1707 directory, get rid of it. */
1708 char *cp
= (char*) strchr (comp_dir
, ':');
1710 if (cp
&& cp
!= comp_dir
&& cp
[-1] == '.' && cp
[1] == '/')
1713 unit
->comp_dir
= comp_dir
;
1722 unit
->first_child_die_ptr
= info_ptr
;
1726 /* Return true if UNIT contains the address given by ADDR. */
1729 comp_unit_contains_address (unit
, addr
)
1730 struct comp_unit
* unit
;
1733 struct arange
*arange
;
1738 arange
= &unit
->arange
;
1741 if (addr
>= arange
->low
&& addr
< arange
->high
)
1743 arange
= arange
->next
;
1750 /* If UNIT contains ADDR, set the output parameters to the values for
1751 the line containing ADDR. The output parameters, FILENAME_PTR,
1752 FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
1755 Return true of UNIT contains ADDR, and no errors were encountered;
1759 comp_unit_find_nearest_line (unit
, addr
, filename_ptr
, functionname_ptr
,
1760 linenumber_ptr
, stash
)
1761 struct comp_unit
* unit
;
1763 const char **filename_ptr
;
1764 const char **functionname_ptr
;
1765 unsigned int *linenumber_ptr
;
1766 struct dwarf2_debug
*stash
;
1770 struct funcinfo
*function
;
1775 if (! unit
->line_table
)
1777 if (! unit
->stmtlist
)
1783 unit
->line_table
= decode_line_info (unit
, stash
);
1785 if (! unit
->line_table
)
1791 if (unit
->first_child_die_ptr
< unit
->end_ptr
1792 && ! scan_unit_for_functions (unit
))
1800 func_p
= lookup_address_in_function_table (unit
->function_table
, addr
,
1801 &function
, functionname_ptr
);
1802 line_p
= lookup_address_in_line_info_table (unit
->line_table
, addr
,
1803 function
, filename_ptr
,
1805 return line_p
|| func_p
;
1808 /* Locate a section in a BFD containing debugging info. The search starts
1809 from the section after AFTER_SEC, or from the first section in the BFD if
1810 AFTER_SEC is NULL. The search works by examining the names of the
1811 sections. There are two permissiable names. The first is .debug_info.
1812 This is the standard DWARF2 name. The second is a prefix .gnu.linkonce.wi.
1813 This is a variation on the .debug_info section which has a checksum
1814 describing the contents appended onto the name. This allows the linker to
1815 identify and discard duplicate debugging sections for different
1816 compilation units. */
1817 #define DWARF2_DEBUG_INFO ".debug_info"
1818 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
1821 find_debug_info (abfd
, after_sec
)
1823 asection
* after_sec
;
1828 msec
= after_sec
->next
;
1830 msec
= abfd
->sections
;
1834 if (strcmp (msec
->name
, DWARF2_DEBUG_INFO
) == 0)
1837 if (strncmp (msec
->name
, GNU_LINKONCE_INFO
, strlen (GNU_LINKONCE_INFO
)) == 0)
1846 /* The DWARF2 version of find_nearest line. Return true if the line
1847 is found without error. ADDR_SIZE is the number of bytes in the
1848 initial .debug_info length field and in the abbreviation offset.
1849 You may use zero to indicate that the default value should be
1853 _bfd_dwarf2_find_nearest_line (abfd
, section
, symbols
, offset
,
1854 filename_ptr
, functionname_ptr
,
1855 linenumber_ptr
, addr_size
, pinfo
)
1860 const char **filename_ptr
;
1861 const char **functionname_ptr
;
1862 unsigned int *linenumber_ptr
;
1863 unsigned int addr_size
;
1866 /* Read each compilation unit from the section .debug_info, and check
1867 to see if it contains the address we are searching for. If yes,
1868 lookup the address, and return the line number info. If no, go
1869 on to the next compilation unit.
1871 We keep a list of all the previously read compilation units, and
1872 a pointer to the next un-read compilation unit. Check the
1873 previously read units before reading more. */
1874 struct dwarf2_debug
*stash
= (struct dwarf2_debug
*) *pinfo
;
1876 /* What address are we looking for? */
1877 bfd_vma addr
= offset
+ section
->vma
;
1879 struct comp_unit
* each
;
1881 *filename_ptr
= NULL
;
1882 *functionname_ptr
= NULL
;
1883 *linenumber_ptr
= 0;
1885 /* The DWARF2 spec says that the initial length field, and the
1886 offset of the abbreviation table, should both be 4-byte values.
1887 However, some compilers do things differently. */
1890 BFD_ASSERT (addr_size
== 4 || addr_size
== 8);
1894 bfd_size_type total_size
;
1896 bfd_size_type amt
= sizeof (struct dwarf2_debug
);
1898 stash
= (struct dwarf2_debug
*) bfd_zalloc (abfd
, amt
);
1902 *pinfo
= (PTR
) stash
;
1904 msec
= find_debug_info (abfd
, NULL
);
1906 /* No dwarf2 info. Note that at this point the stash
1907 has been allocated, but contains zeros, this lets
1908 future calls to this function fail quicker. */
1911 /* There can be more than one DWARF2 info section in a BFD these days.
1912 Read them all in and produce one large stash. We do this in two
1913 passes - in the first pass we just accumulate the section sizes.
1914 In the second pass we read in the section's contents. The allows
1915 us to avoid reallocing the data as we add sections to the stash. */
1916 for (total_size
= 0; msec
; msec
= find_debug_info (abfd
, msec
))
1917 total_size
+= msec
->_raw_size
;
1919 stash
->info_ptr
= (char *) bfd_alloc (abfd
, total_size
);
1920 if (stash
->info_ptr
== NULL
)
1923 stash
->info_ptr_end
= stash
->info_ptr
;
1925 for (msec
= find_debug_info (abfd
, NULL
);
1927 msec
= find_debug_info (abfd
, msec
))
1930 bfd_size_type start
;
1932 size
= msec
->_raw_size
;
1936 start
= stash
->info_ptr_end
- stash
->info_ptr
;
1938 if (! bfd_get_section_contents (abfd
, msec
, stash
->info_ptr
+ start
,
1942 stash
->info_ptr_end
= stash
->info_ptr
+ start
+ size
;
1945 BFD_ASSERT (stash
->info_ptr_end
== stash
->info_ptr
+ total_size
);
1947 stash
->sec
= find_debug_info (abfd
, NULL
);
1948 stash
->sec_info_ptr
= stash
->info_ptr
;
1949 stash
->syms
= symbols
;
1952 /* FIXME: There is a problem with the contents of the
1953 .debug_info section. The 'low' and 'high' addresses of the
1954 comp_units are computed by relocs against symbols in the
1955 .text segment. We need these addresses in order to determine
1956 the nearest line number, and so we have to resolve the
1957 relocs. There is a similar problem when the .debug_line
1958 section is processed as well (e.g., there may be relocs
1959 against the operand of the DW_LNE_set_address operator).
1961 Unfortunately getting hold of the reloc information is hard...
1963 For now, this means that disassembling object files (as
1964 opposed to fully executables) does not always work as well as
1967 /* A null info_ptr indicates that there is no dwarf2 info
1968 (or that an error occured while setting up the stash). */
1969 if (! stash
->info_ptr
)
1972 /* Check the previously read comp. units first. */
1973 for (each
= stash
->all_comp_units
; each
; each
= each
->next_unit
)
1974 if (comp_unit_contains_address (each
, addr
))
1975 return comp_unit_find_nearest_line (each
, addr
, filename_ptr
,
1976 functionname_ptr
, linenumber_ptr
,
1979 /* Read each remaining comp. units checking each as they are read. */
1980 while (stash
->info_ptr
< stash
->info_ptr_end
)
1984 unsigned int offset_size
= addr_size
;
1988 length
= read_4_bytes (abfd
, stash
->info_ptr
);
1989 if (length
== 0xffffffff)
1992 length
= read_8_bytes (abfd
, stash
->info_ptr
+ 4);
1993 stash
->info_ptr
+= 8;
1995 else if (length
== 0)
1997 /* Handle (non-standard) 64-bit DWARF2 formats. */
1999 length
= read_4_bytes (abfd
, stash
->info_ptr
+ 4);
2000 stash
->info_ptr
+= 4;
2004 length
= read_8_bytes (abfd
, stash
->info_ptr
);
2005 stash
->info_ptr
+= addr_size
;
2009 each
= parse_comp_unit (abfd
, stash
, length
, offset_size
);
2010 stash
->info_ptr
+= length
;
2012 if ((bfd_vma
) (stash
->info_ptr
- stash
->sec_info_ptr
)
2013 == stash
->sec
->_raw_size
)
2015 stash
->sec
= find_debug_info (abfd
, stash
->sec
);
2016 stash
->sec_info_ptr
= stash
->info_ptr
;
2021 each
->next_unit
= stash
->all_comp_units
;
2022 stash
->all_comp_units
= each
;
2024 /* DW_AT_low_pc and DW_AT_high_pc are optional for
2025 compilation units. If we don't have them (i.e.,
2026 unit->high == 0), we need to consult the line info
2027 table to see if a compilation unit contains the given
2029 if (each
->arange
.high
> 0)
2031 if (comp_unit_contains_address (each
, addr
))
2032 return comp_unit_find_nearest_line (each
, addr
,
2040 found
= comp_unit_find_nearest_line (each
, addr
,