2 Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
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. */
43 unsigned int total_length
;
44 unsigned short version
;
45 unsigned int 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
;
127 /* A minimal decoding of DWARF2 compilation units. We only decode
128 what's needed to get to the line number information. */
132 /* Chain the previously read compilation units. */
133 struct comp_unit
* next_unit
;
135 /* Keep the bdf convenient (for memory allocation). */
138 /* The lowest and higest addresses contained in this compilation
139 unit as specified in the compilation unit header. */
140 struct arange arange
;
142 /* The DW_AT_name attribute (for error messages). */
145 /* The abbrev hash table. */
146 struct abbrev_info
** abbrevs
;
148 /* Note that an error was found by comp_unit_find_nearest_line. */
151 /* The DW_AT_comp_dir attribute. */
154 /* True if there is a line number table associated with this comp. unit. */
157 /* The offset into .debug_line of the line number table. */
158 unsigned long line_offset
;
160 /* Pointer to the first child die for the comp unit. */
161 char *first_child_die_ptr
;
163 /* The end of the comp unit. */
166 /* The decoded line number, NULL if not yet decoded. */
167 struct line_info_table
* line_table
;
169 /* A list of the functions found in this comp. unit. */
170 struct funcinfo
* function_table
;
172 /* Address size for this unit - from unit header. */
173 unsigned char addr_size
;
176 /* This data structure holds the information of an abbrev. */
179 unsigned int number
; /* Number identifying abbrev. */
180 enum dwarf_tag tag
; /* DWARF tag. */
181 int has_children
; /* Boolean. */
182 unsigned int num_attrs
; /* Number of attributes. */
183 struct attr_abbrev
*attrs
; /* An array of attribute descriptions. */
184 struct abbrev_info
*next
; /* Next in chain. */
189 enum dwarf_attribute name
;
190 enum dwarf_form form
;
193 #ifndef ABBREV_HASH_SIZE
194 #define ABBREV_HASH_SIZE 121
196 #ifndef ATTR_ALLOC_CHUNK
197 #define ATTR_ALLOC_CHUNK 4
200 static unsigned int read_1_byte
PARAMS ((bfd
*, char *));
201 static int read_1_signed_byte
PARAMS ((bfd
*, char *));
202 static unsigned int read_2_bytes
PARAMS ((bfd
*, char *));
203 static unsigned int read_4_bytes
PARAMS ((bfd
*, char *));
204 static unsigned int read_8_bytes
PARAMS ((bfd
*, char *));
205 static char *read_n_bytes
PARAMS ((bfd
*, char *, unsigned int));
206 static char *read_string
PARAMS ((bfd
*, char *, unsigned int *));
207 static unsigned int read_unsigned_leb128
208 PARAMS ((bfd
*, char *, unsigned int *));
209 static int read_signed_leb128
210 PARAMS ((bfd
*, char *, unsigned int *));
211 static bfd_vma read_address
PARAMS ((struct comp_unit
*, char *));
212 static struct abbrev_info
*lookup_abbrev
213 PARAMS ((unsigned int, struct abbrev_info
**));
214 static struct abbrev_info
**read_abbrevs
215 PARAMS ((bfd
*, unsigned int, struct dwarf2_debug
*));
216 static char *read_attribute
217 PARAMS ((struct attribute
*, struct attr_abbrev
*,
218 struct comp_unit
*, char *));
219 static void add_line_info
220 PARAMS ((struct line_info_table
*, bfd_vma
, char *,
221 unsigned int, unsigned int, int));
222 static char *concat_filename
PARAMS ((struct line_info_table
*, unsigned int));
223 static void arange_add
PARAMS ((struct comp_unit
*, bfd_vma
, bfd_vma
));
224 static struct line_info_table
*decode_line_info
225 PARAMS ((struct comp_unit
*, struct dwarf2_debug
*));
226 static boolean lookup_address_in_line_info_table
227 PARAMS ((struct line_info_table
*, bfd_vma
, const char **, unsigned int *));
228 static boolean lookup_address_in_function_table
229 PARAMS ((struct funcinfo
*, bfd_vma
, const char **));
230 static boolean scan_unit_for_functions
PARAMS ((struct comp_unit
*));
231 static bfd_vma find_rela_addend
232 PARAMS ((bfd
*, asection
*, bfd_size_type
, asymbol
**));
233 static struct comp_unit
*parse_comp_unit
234 PARAMS ((bfd
*, struct dwarf2_debug
*, bfd_vma
, unsigned int));
235 static boolean comp_unit_contains_address
236 PARAMS ((struct comp_unit
*, bfd_vma
));
237 static boolean comp_unit_find_nearest_line
238 PARAMS ((struct comp_unit
*, bfd_vma
, const char **, const char **,
239 unsigned int *, struct dwarf2_debug
*));
240 static asection
*find_debug_info
PARAMS ((bfd
*, asection
*));
243 The following function up to the END VERBATIM mark are
244 copied directly from dwarf2read.c. */
246 /* Read dwarf information from a buffer. */
249 read_1_byte (abfd
, buf
)
250 bfd
*abfd ATTRIBUTE_UNUSED
;
253 return bfd_get_8 (abfd
, (bfd_byte
*) buf
);
257 read_1_signed_byte (abfd
, buf
)
258 bfd
*abfd ATTRIBUTE_UNUSED
;
261 return bfd_get_signed_8 (abfd
, (bfd_byte
*) buf
);
265 read_2_bytes (abfd
, buf
)
269 return bfd_get_16 (abfd
, (bfd_byte
*) buf
);
272 #if 0 /* This is not used. */
275 read_2_signed_bytes (abfd
, buf
)
279 return bfd_get_signed_16 (abfd
, (bfd_byte
*) buf
);
285 read_4_bytes (abfd
, buf
)
289 return bfd_get_32 (abfd
, (bfd_byte
*) buf
);
292 #if 0 /* This is not used. */
295 read_4_signed_bytes (abfd
, buf
)
299 return bfd_get_signed_32 (abfd
, (bfd_byte
*) buf
);
305 read_8_bytes (abfd
, buf
)
309 return bfd_get_64 (abfd
, (bfd_byte
*) buf
);
313 read_n_bytes (abfd
, buf
, size
)
314 bfd
*abfd ATTRIBUTE_UNUSED
;
316 unsigned int size ATTRIBUTE_UNUSED
;
318 /* If the size of a host char is 8 bits, we can return a pointer
319 to the buffer, otherwise we have to copy the data to a buffer
320 allocated on the temporary obstack. */
325 read_string (abfd
, buf
, bytes_read_ptr
)
326 bfd
*abfd ATTRIBUTE_UNUSED
;
328 unsigned int *bytes_read_ptr
;
330 /* If the size of a host char is 8 bits, we can return a pointer
331 to the string, otherwise we have to copy the string to a buffer
332 allocated on the temporary obstack. */
339 *bytes_read_ptr
= strlen (buf
) + 1;
344 read_unsigned_leb128 (abfd
, buf
, bytes_read_ptr
)
345 bfd
*abfd ATTRIBUTE_UNUSED
;
347 unsigned int *bytes_read_ptr
;
350 unsigned int num_read
;
360 byte
= bfd_get_8 (abfd
, (bfd_byte
*) buf
);
363 result
|= ((byte
& 0x7f) << shift
);
368 * bytes_read_ptr
= num_read
;
374 read_signed_leb128 (abfd
, buf
, bytes_read_ptr
)
375 bfd
*abfd ATTRIBUTE_UNUSED
;
377 unsigned int * bytes_read_ptr
;
390 byte
= bfd_get_8 (abfd
, (bfd_byte
*) buf
);
393 result
|= ((byte
& 0x7f) << shift
);
398 if ((shift
< 32) && (byte
& 0x40))
399 result
|= -(1 << shift
);
401 * bytes_read_ptr
= num_read
;
409 read_address (unit
, buf
)
410 struct comp_unit
* unit
;
413 switch (unit
->addr_size
)
416 return bfd_get_64 (unit
->abfd
, (bfd_byte
*) buf
);
418 return bfd_get_32 (unit
->abfd
, (bfd_byte
*) buf
);
420 return bfd_get_16 (unit
->abfd
, (bfd_byte
*) buf
);
426 /* Lookup an abbrev_info structure in the abbrev hash table. */
428 static struct abbrev_info
*
429 lookup_abbrev (number
,abbrevs
)
431 struct abbrev_info
**abbrevs
;
433 unsigned int hash_number
;
434 struct abbrev_info
*abbrev
;
436 hash_number
= number
% ABBREV_HASH_SIZE
;
437 abbrev
= abbrevs
[hash_number
];
441 if (abbrev
->number
== number
)
444 abbrev
= abbrev
->next
;
450 /* In DWARF version 2, the description of the debugging information is
451 stored in a separate .debug_abbrev section. Before we read any
452 dies from a section we read in all abbreviations and install them
455 static struct abbrev_info
**
456 read_abbrevs (abfd
, offset
, stash
)
459 struct dwarf2_debug
*stash
;
461 struct abbrev_info
**abbrevs
;
463 struct abbrev_info
*cur_abbrev
;
464 unsigned int abbrev_number
, bytes_read
, abbrev_name
;
465 unsigned int abbrev_form
, hash_number
;
467 if (! stash
->dwarf_abbrev_buffer
)
471 msec
= bfd_get_section_by_name (abfd
, ".debug_abbrev");
474 (*_bfd_error_handler
) (_("Dwarf Error: Can't find .debug_abbrev section."));
475 bfd_set_error (bfd_error_bad_value
);
479 stash
->dwarf_abbrev_size
= msec
->_raw_size
;
480 stash
->dwarf_abbrev_buffer
= (char*) bfd_alloc (abfd
, stash
->dwarf_abbrev_size
);
481 if (! stash
->dwarf_abbrev_buffer
)
484 if (! bfd_get_section_contents (abfd
, msec
,
485 stash
->dwarf_abbrev_buffer
, 0,
486 stash
->dwarf_abbrev_size
))
490 if (offset
>= stash
->dwarf_abbrev_size
)
492 (*_bfd_error_handler
) (_("Dwarf Error: Abbrev offset (%u) greater than or equal to abbrev size (%u)."),
493 offset
, stash
->dwarf_abbrev_size
);
494 bfd_set_error (bfd_error_bad_value
);
498 abbrevs
= (struct abbrev_info
**) bfd_zalloc (abfd
, sizeof (struct abbrev_info
*) * ABBREV_HASH_SIZE
);
500 abbrev_ptr
= stash
->dwarf_abbrev_buffer
+ offset
;
501 abbrev_number
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
502 abbrev_ptr
+= bytes_read
;
504 /* Loop until we reach an abbrev number of 0. */
505 while (abbrev_number
)
507 cur_abbrev
= (struct abbrev_info
*)bfd_zalloc (abfd
, sizeof (struct abbrev_info
));
509 /* Read in abbrev header. */
510 cur_abbrev
->number
= abbrev_number
;
511 cur_abbrev
->tag
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
512 abbrev_ptr
+= bytes_read
;
513 cur_abbrev
->has_children
= read_1_byte (abfd
, abbrev_ptr
);
516 /* Now read in declarations. */
517 abbrev_name
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
518 abbrev_ptr
+= bytes_read
;
519 abbrev_form
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
520 abbrev_ptr
+= bytes_read
;
524 if ((cur_abbrev
->num_attrs
% ATTR_ALLOC_CHUNK
) == 0)
526 cur_abbrev
->attrs
= (struct attr_abbrev
*)
527 bfd_realloc (cur_abbrev
->attrs
,
528 (cur_abbrev
->num_attrs
+ ATTR_ALLOC_CHUNK
)
529 * sizeof (struct attr_abbrev
));
530 if (! cur_abbrev
->attrs
)
534 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].name
= abbrev_name
;
535 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
++].form
= abbrev_form
;
536 abbrev_name
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
537 abbrev_ptr
+= bytes_read
;
538 abbrev_form
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
539 abbrev_ptr
+= bytes_read
;
542 hash_number
= abbrev_number
% ABBREV_HASH_SIZE
;
543 cur_abbrev
->next
= abbrevs
[hash_number
];
544 abbrevs
[hash_number
] = cur_abbrev
;
546 /* Get next abbreviation.
547 Under Irix6 the abbreviations for a compilation unit are not
548 always properly terminated with an abbrev number of 0.
549 Exit loop if we encounter an abbreviation which we have
550 already read (which means we are about to read the abbreviations
551 for the next compile unit) or if the end of the abbreviation
553 if ((unsigned int) (abbrev_ptr
- stash
->dwarf_abbrev_buffer
)
554 >= stash
->dwarf_abbrev_size
)
556 abbrev_number
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
557 abbrev_ptr
+= bytes_read
;
558 if (lookup_abbrev (abbrev_number
,abbrevs
) != NULL
)
565 /* Read an attribute described by an abbreviated attribute. */
568 read_attribute (attr
, abbrev
, unit
, info_ptr
)
569 struct attribute
*attr
;
570 struct attr_abbrev
*abbrev
;
571 struct comp_unit
*unit
;
574 bfd
*abfd
= unit
->abfd
;
575 unsigned int bytes_read
;
576 struct dwarf_block
*blk
;
578 attr
->name
= abbrev
->name
;
579 attr
->form
= abbrev
->form
;
581 switch (abbrev
->form
)
584 case DW_FORM_ref_addr
:
585 DW_ADDR (attr
) = read_address (unit
, info_ptr
);
586 info_ptr
+= unit
->addr_size
;
589 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, sizeof (struct dwarf_block
));
590 blk
->size
= read_2_bytes (abfd
, info_ptr
);
592 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
593 info_ptr
+= blk
->size
;
594 DW_BLOCK (attr
) = blk
;
597 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, sizeof (struct dwarf_block
));
598 blk
->size
= read_4_bytes (abfd
, info_ptr
);
600 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
601 info_ptr
+= blk
->size
;
602 DW_BLOCK (attr
) = blk
;
605 DW_UNSND (attr
) = read_2_bytes (abfd
, info_ptr
);
609 DW_UNSND (attr
) = read_4_bytes (abfd
, info_ptr
);
613 DW_UNSND (attr
) = read_8_bytes (abfd
, info_ptr
);
617 DW_STRING (attr
) = read_string (abfd
, info_ptr
, &bytes_read
);
618 info_ptr
+= bytes_read
;
621 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, sizeof (struct dwarf_block
));
622 blk
->size
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
623 info_ptr
+= bytes_read
;
624 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
625 info_ptr
+= blk
->size
;
626 DW_BLOCK (attr
) = blk
;
629 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, sizeof (struct dwarf_block
));
630 blk
->size
= read_1_byte (abfd
, info_ptr
);
632 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
633 info_ptr
+= blk
->size
;
634 DW_BLOCK (attr
) = blk
;
637 DW_UNSND (attr
) = read_1_byte (abfd
, info_ptr
);
641 DW_UNSND (attr
) = read_1_byte (abfd
, info_ptr
);
645 DW_SND (attr
) = read_signed_leb128 (abfd
, info_ptr
, &bytes_read
);
646 info_ptr
+= bytes_read
;
649 DW_UNSND (attr
) = read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
650 info_ptr
+= bytes_read
;
653 DW_UNSND (attr
) = read_1_byte (abfd
, info_ptr
);
657 DW_UNSND (attr
) = read_2_bytes (abfd
, info_ptr
);
661 DW_UNSND (attr
) = read_4_bytes (abfd
, info_ptr
);
665 DW_UNSND (attr
) = read_8_bytes (abfd
, info_ptr
);
668 case DW_FORM_ref_udata
:
669 DW_UNSND (attr
) = read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
670 info_ptr
+= bytes_read
;
673 case DW_FORM_indirect
:
675 (*_bfd_error_handler
) (_("Dwarf Error: Invalid or unhandled FORM value: %d."),
677 bfd_set_error (bfd_error_bad_value
);
682 /* Source line information table routines. */
684 #define FILE_ALLOC_CHUNK 5
685 #define DIR_ALLOC_CHUNK 5
689 struct line_info
* prev_line
;
694 int end_sequence
; /* End of (sequential) code sequence. */
705 struct line_info_table
708 unsigned int num_files
;
709 unsigned int num_dirs
;
712 struct fileinfo
* files
;
713 struct line_info
* last_line
;
717 add_line_info (table
, address
, filename
, line
, column
, end_sequence
)
718 struct line_info_table
* table
;
725 struct line_info
* info
= (struct line_info
*)
726 bfd_alloc (table
->abfd
, sizeof (struct line_info
));
728 info
->prev_line
= table
->last_line
;
729 table
->last_line
= info
;
731 info
->address
= address
;
732 info
->filename
= filename
;
734 info
->column
= column
;
735 info
->end_sequence
= end_sequence
;
739 concat_filename (table
, file
)
740 struct line_info_table
* table
;
745 if (file
- 1 >= table
->num_files
)
747 (*_bfd_error_handler
)
748 (_("Dwarf Error: mangled line number section (bad file number)."));
752 filename
= table
->files
[file
- 1].name
;
753 if (IS_ABSOLUTE_PATH(filename
))
758 char* dirname
= (table
->files
[file
- 1].dir
759 ? table
->dirs
[table
->files
[file
- 1].dir
- 1]
761 return (char*) concat (dirname
, "/", filename
, NULL
);
766 arange_add (unit
, low_pc
, high_pc
)
767 struct comp_unit
*unit
;
771 struct arange
*arange
;
773 /* First see if we can cheaply extend an existing range. */
774 arange
= &unit
->arange
;
778 if (low_pc
== arange
->high
)
780 arange
->high
= high_pc
;
783 if (high_pc
== arange
->low
)
785 arange
->low
= low_pc
;
788 arange
= arange
->next
;
792 if (unit
->arange
.high
== 0)
794 /* This is the first address range: store it in unit->arange. */
795 unit
->arange
.next
= 0;
796 unit
->arange
.low
= low_pc
;
797 unit
->arange
.high
= high_pc
;
801 /* Need to allocate a new arange and insert it into the arange list. */
802 arange
= bfd_zalloc (unit
->abfd
, sizeof (*arange
));
803 arange
->low
= low_pc
;
804 arange
->high
= high_pc
;
806 arange
->next
= unit
->arange
.next
;
807 unit
->arange
.next
= arange
;
810 /* Decode the line number information for UNIT. */
812 static struct line_info_table
*
813 decode_line_info (unit
, stash
)
814 struct comp_unit
*unit
;
815 struct dwarf2_debug
*stash
;
817 bfd
*abfd
= unit
->abfd
;
818 struct line_info_table
* table
;
822 unsigned int i
, bytes_read
;
823 char *cur_file
, *cur_dir
;
824 unsigned char op_code
, extended_op
, adj_opcode
;
826 if (! stash
->dwarf_line_buffer
)
830 msec
= bfd_get_section_by_name (abfd
, ".debug_line");
833 (*_bfd_error_handler
) (_("Dwarf Error: Can't find .debug_line section."));
834 bfd_set_error (bfd_error_bad_value
);
838 stash
->dwarf_line_size
= msec
->_raw_size
;
839 stash
->dwarf_line_buffer
= (char *) bfd_alloc (abfd
, stash
->dwarf_line_size
);
840 if (! stash
->dwarf_line_buffer
)
843 if (! bfd_get_section_contents (abfd
, msec
,
844 stash
->dwarf_line_buffer
, 0,
845 stash
->dwarf_line_size
))
848 /* FIXME: We ought to apply the relocs against this section before
852 /* Since we are using un-relocated data, it is possible to get a bad value
853 for the line_offset. Validate it here so that we won't get a segfault
855 if (unit
->line_offset
>= stash
->dwarf_line_size
)
857 (*_bfd_error_handler
) (_("Dwarf Error: Line offset (%u) greater than or equal to line size (%u)."),
858 unit
->line_offset
, stash
->dwarf_line_size
);
859 bfd_set_error (bfd_error_bad_value
);
863 table
= (struct line_info_table
*) bfd_alloc (abfd
,
864 sizeof (struct line_info_table
));
866 table
->comp_dir
= unit
->comp_dir
;
868 table
->num_files
= 0;
875 table
->last_line
= NULL
;
877 line_ptr
= stash
->dwarf_line_buffer
+ unit
->line_offset
;
879 /* Read in the prologue. */
880 lh
.total_length
= read_4_bytes (abfd
, line_ptr
);
882 line_end
= line_ptr
+ lh
.total_length
;
883 lh
.version
= read_2_bytes (abfd
, line_ptr
);
885 lh
.prologue_length
= read_4_bytes (abfd
, line_ptr
);
887 lh
.minimum_instruction_length
= read_1_byte (abfd
, line_ptr
);
889 lh
.default_is_stmt
= read_1_byte (abfd
, line_ptr
);
891 lh
.line_base
= read_1_signed_byte (abfd
, line_ptr
);
893 lh
.line_range
= read_1_byte (abfd
, line_ptr
);
895 lh
.opcode_base
= read_1_byte (abfd
, line_ptr
);
897 lh
.standard_opcode_lengths
= (unsigned char *)
898 bfd_alloc (abfd
, lh
.opcode_base
* sizeof (unsigned char));
900 lh
.standard_opcode_lengths
[0] = 1;
902 for (i
= 1; i
< lh
.opcode_base
; ++i
)
904 lh
.standard_opcode_lengths
[i
] = read_1_byte (abfd
, line_ptr
);
908 /* Read directory table. */
909 while ((cur_dir
= read_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
911 line_ptr
+= bytes_read
;
913 if ((table
->num_dirs
% DIR_ALLOC_CHUNK
) == 0)
915 table
->dirs
= (char **)
916 bfd_realloc (table
->dirs
,
917 (table
->num_dirs
+ DIR_ALLOC_CHUNK
) * sizeof (char *));
922 table
->dirs
[table
->num_dirs
++] = cur_dir
;
925 line_ptr
+= bytes_read
;
927 /* Read file name table. */
928 while ((cur_file
= read_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
930 line_ptr
+= bytes_read
;
932 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
934 table
->files
= (struct fileinfo
*)
935 bfd_realloc (table
->files
,
936 (table
->num_files
+ FILE_ALLOC_CHUNK
)
937 * sizeof (struct fileinfo
));
942 table
->files
[table
->num_files
].name
= cur_file
;
943 table
->files
[table
->num_files
].dir
=
944 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
945 line_ptr
+= bytes_read
;
946 table
->files
[table
->num_files
].time
=
947 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
948 line_ptr
+= bytes_read
;
949 table
->files
[table
->num_files
].size
=
950 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
951 line_ptr
+= bytes_read
;
955 line_ptr
+= bytes_read
;
957 /* Read the statement sequences until there's nothing left. */
958 while (line_ptr
< line_end
)
960 /* State machine registers. */
962 char* filename
= concat_filename (table
, 1);
963 unsigned int line
= 1;
964 unsigned int column
= 0;
965 int is_stmt
= lh
.default_is_stmt
;
967 int end_sequence
= 0, need_low_pc
= 1;
970 /* Decode the table. */
971 while (! end_sequence
)
973 op_code
= read_1_byte (abfd
, line_ptr
);
978 case DW_LNS_extended_op
:
979 line_ptr
+= 1; /* Ignore length. */
980 extended_op
= read_1_byte (abfd
, line_ptr
);
984 case DW_LNE_end_sequence
:
986 add_line_info (table
, address
, filename
, line
, column
,
993 arange_add (unit
, low_pc
, address
);
995 case DW_LNE_set_address
:
996 address
= read_address (unit
, line_ptr
);
997 line_ptr
+= unit
->addr_size
;
999 case DW_LNE_define_file
:
1000 cur_file
= read_string (abfd
, line_ptr
, &bytes_read
);
1001 line_ptr
+= bytes_read
;
1002 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
1004 table
->files
= (struct fileinfo
*)
1005 bfd_realloc (table
->files
,
1006 (table
->num_files
+ FILE_ALLOC_CHUNK
)
1007 * sizeof (struct fileinfo
));
1011 table
->files
[table
->num_files
].name
= cur_file
;
1012 table
->files
[table
->num_files
].dir
=
1013 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1014 line_ptr
+= bytes_read
;
1015 table
->files
[table
->num_files
].time
=
1016 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1017 line_ptr
+= bytes_read
;
1018 table
->files
[table
->num_files
].size
=
1019 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1020 line_ptr
+= bytes_read
;
1024 (*_bfd_error_handler
) (_("Dwarf Error: mangled line number section."));
1025 bfd_set_error (bfd_error_bad_value
);
1030 add_line_info (table
, address
, filename
, line
, column
, 0);
1038 case DW_LNS_advance_pc
:
1039 address
+= lh
.minimum_instruction_length
1040 * read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1041 line_ptr
+= bytes_read
;
1043 case DW_LNS_advance_line
:
1044 line
+= read_signed_leb128 (abfd
, line_ptr
, &bytes_read
);
1045 line_ptr
+= bytes_read
;
1047 case DW_LNS_set_file
:
1051 /* The file and directory tables are 0 based, the references
1053 file
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1054 line_ptr
+= bytes_read
;
1055 filename
= concat_filename (table
, file
);
1058 case DW_LNS_set_column
:
1059 column
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
1060 line_ptr
+= bytes_read
;
1062 case DW_LNS_negate_stmt
:
1063 is_stmt
= (!is_stmt
);
1065 case DW_LNS_set_basic_block
:
1068 case DW_LNS_const_add_pc
:
1069 address
+= lh
.minimum_instruction_length
1070 * ((255 - lh
.opcode_base
) / lh
.line_range
);
1072 case DW_LNS_fixed_advance_pc
:
1073 address
+= read_2_bytes (abfd
, line_ptr
);
1076 default: /* Special operand. */
1077 adj_opcode
= op_code
- lh
.opcode_base
;
1078 address
+= (adj_opcode
/ lh
.line_range
)
1079 * lh
.minimum_instruction_length
;
1080 line
+= lh
.line_base
+ (adj_opcode
% lh
.line_range
);
1081 /* Append row to matrix using current values. */
1082 add_line_info (table
, address
, filename
, line
, column
, 0);
1096 /* If ADDR is within TABLE set the output parameters and return true,
1097 otherwise return false. The output parameters, FILENAME_PTR and
1098 LINENUMBER_PTR, are pointers to the objects to be filled in. */
1101 lookup_address_in_line_info_table (table
,
1105 struct line_info_table
* table
;
1107 const char **filename_ptr
;
1108 unsigned int *linenumber_ptr
;
1110 struct line_info
* next_line
= table
->last_line
;
1111 struct line_info
* each_line
;
1116 each_line
= next_line
->prev_line
;
1118 while (each_line
&& next_line
)
1120 if (!each_line
->end_sequence
1121 && addr
>= each_line
->address
&& addr
< next_line
->address
)
1123 *filename_ptr
= each_line
->filename
;
1124 *linenumber_ptr
= each_line
->line
;
1127 next_line
= each_line
;
1128 each_line
= each_line
->prev_line
;
1134 /* Function table functions. */
1138 struct funcinfo
*prev_func
;
1144 /* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return true. */
1147 lookup_address_in_function_table (table
,
1150 struct funcinfo
* table
;
1152 const char **functionname_ptr
;
1154 struct funcinfo
* each_func
;
1156 for (each_func
= table
;
1158 each_func
= each_func
->prev_func
)
1160 if (addr
>= each_func
->low
&& addr
< each_func
->high
)
1162 *functionname_ptr
= each_func
->name
;
1170 /* DWARF2 Compilation unit functions. */
1172 /* Scan over each die in a comp. unit looking for functions to add
1173 to the function table. */
1176 scan_unit_for_functions (unit
)
1177 struct comp_unit
*unit
;
1179 bfd
*abfd
= unit
->abfd
;
1180 char *info_ptr
= unit
->first_child_die_ptr
;
1181 int nesting_level
= 1;
1183 while (nesting_level
)
1185 unsigned int abbrev_number
, bytes_read
, i
;
1186 struct abbrev_info
*abbrev
;
1187 struct attribute attr
;
1188 struct funcinfo
*func
;
1191 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1192 info_ptr
+= bytes_read
;
1194 if (! abbrev_number
)
1200 abbrev
= lookup_abbrev (abbrev_number
,unit
->abbrevs
);
1203 (*_bfd_error_handler
) (_("Dwarf Error: Could not find abbrev number %d."),
1205 bfd_set_error (bfd_error_bad_value
);
1209 if (abbrev
->tag
== DW_TAG_subprogram
)
1211 func
= (struct funcinfo
*) bfd_zalloc (abfd
, sizeof (struct funcinfo
));
1212 func
->prev_func
= unit
->function_table
;
1213 unit
->function_table
= func
;
1218 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1220 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1228 name
= DW_STRING (&attr
);
1230 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
1231 if (func
->name
== NULL
)
1232 func
->name
= DW_STRING (&attr
);
1235 case DW_AT_MIPS_linkage_name
:
1236 func
->name
= DW_STRING (&attr
);
1240 func
->low
= DW_ADDR (&attr
);
1244 func
->high
= DW_ADDR (&attr
);
1256 name
= DW_STRING (&attr
);
1265 if (abbrev
->has_children
)
1272 /* Look for a RELA relocation to be applied on OFFSET of section SEC,
1273 and return the addend if such a relocation is found. Since this is
1274 only used to find relocations referring to the .debug_abbrev
1275 section, we make sure the relocation refers to this section, but
1276 this is not strictly necessary, and it can probably be safely
1277 removed if needed. However, it is important to note that this
1278 function only returns the addend, it doesn't serve the purpose of
1279 applying a generic relocation.
1281 If no suitable relocation is found, or if it is not a real RELA
1282 relocation, this function returns 0. */
1285 find_rela_addend (abfd
, sec
, offset
, syms
)
1288 bfd_size_type offset
;
1291 long reloc_size
= bfd_get_reloc_upper_bound (abfd
, sec
);
1292 arelent
**relocs
= NULL
;
1293 long reloc_count
, relc
;
1295 if (reloc_size
<= 0)
1298 relocs
= (arelent
**) bfd_malloc ((size_t) reloc_size
);
1302 reloc_count
= bfd_canonicalize_reloc (abfd
, sec
, relocs
, syms
);
1304 if (reloc_count
<= 0)
1310 for (relc
= 0; relc
< reloc_count
; relc
++)
1311 if (relocs
[relc
]->address
== offset
1312 && (*relocs
[relc
]->sym_ptr_ptr
)->flags
& BSF_SECTION_SYM
1313 && strcmp ((*relocs
[relc
]->sym_ptr_ptr
)->name
,
1314 ".debug_abbrev") == 0)
1316 bfd_vma addend
= (relocs
[relc
]->howto
->partial_inplace
1317 ? 0 : relocs
[relc
]->addend
);
1326 /* Parse a DWARF2 compilation unit starting at INFO_PTR. This
1327 includes the compilation unit header that proceeds the DIE's, but
1328 does not include the length field that preceeds each compilation
1329 unit header. END_PTR points one past the end of this comp unit.
1330 If ABBREV_LENGTH is 0, then the length of the abbreviation offset
1331 is assumed to be four bytes. Otherwise, it it is the size given.
1333 This routine does not read the whole compilation unit; only enough
1334 to get to the line number information for the compilation unit. */
1336 static struct comp_unit
*
1337 parse_comp_unit (abfd
, stash
, unit_length
, abbrev_length
)
1339 struct dwarf2_debug
*stash
;
1340 bfd_vma unit_length
;
1341 unsigned int abbrev_length
;
1343 struct comp_unit
* unit
;
1345 unsigned short version
;
1346 unsigned int abbrev_offset
= 0;
1347 unsigned char addr_size
;
1348 struct abbrev_info
** abbrevs
;
1350 unsigned int abbrev_number
, bytes_read
, i
;
1351 struct abbrev_info
*abbrev
;
1352 struct attribute attr
;
1354 char *info_ptr
= stash
->info_ptr
;
1355 char *end_ptr
= info_ptr
+ unit_length
;
1357 version
= read_2_bytes (abfd
, info_ptr
);
1359 BFD_ASSERT (abbrev_length
== 0
1360 || abbrev_length
== 4
1361 || abbrev_length
== 8);
1362 if (abbrev_length
== 0 || abbrev_length
== 4)
1363 abbrev_offset
= read_4_bytes (abfd
, info_ptr
);
1364 else if (abbrev_length
== 8)
1365 abbrev_offset
= read_8_bytes (abfd
, info_ptr
);
1366 /* The abbrev offset is generally a relocation pointing to
1367 .debug_abbrev+offset. On RELA targets, we have to find the
1368 relocation and extract the addend to obtain the actual
1369 abbrev_offset, so do it here. */
1370 abbrev_offset
+= find_rela_addend (abfd
, stash
->sec
,
1371 info_ptr
- stash
->sec_info_ptr
,
1373 info_ptr
+= abbrev_length
;
1374 addr_size
= read_1_byte (abfd
, info_ptr
);
1379 (*_bfd_error_handler
) (_("Dwarf Error: found dwarf version '%hu', this reader only handles version 2 information."), version
);
1380 bfd_set_error (bfd_error_bad_value
);
1384 if (addr_size
> sizeof (bfd_vma
))
1386 (*_bfd_error_handler
) (_("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."),
1389 bfd_set_error (bfd_error_bad_value
);
1393 if (addr_size
!= 2 && addr_size
!= 4 && addr_size
!= 8)
1395 (*_bfd_error_handler
) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '2', '4' and '8'.", addr_size
);
1396 bfd_set_error (bfd_error_bad_value
);
1400 /* Read the abbrevs for this compilation unit into a table. */
1401 abbrevs
= read_abbrevs (abfd
, abbrev_offset
, stash
);
1405 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1406 info_ptr
+= bytes_read
;
1407 if (! abbrev_number
)
1409 (*_bfd_error_handler
) (_("Dwarf Error: Bad abbrev number: %d."),
1411 bfd_set_error (bfd_error_bad_value
);
1415 abbrev
= lookup_abbrev (abbrev_number
, abbrevs
);
1418 (*_bfd_error_handler
) (_("Dwarf Error: Could not find abbrev number %d."),
1420 bfd_set_error (bfd_error_bad_value
);
1424 unit
= (struct comp_unit
*) bfd_zalloc (abfd
, sizeof (struct comp_unit
));
1426 unit
->addr_size
= addr_size
;
1427 unit
->abbrevs
= abbrevs
;
1428 unit
->end_ptr
= end_ptr
;
1430 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1432 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1434 /* Store the data if it is of an attribute we want to keep in a
1435 partial symbol table. */
1438 case DW_AT_stmt_list
:
1440 unit
->line_offset
= DW_UNSND (&attr
);
1444 unit
->name
= DW_STRING (&attr
);
1448 unit
->arange
.low
= DW_ADDR (&attr
);
1452 unit
->arange
.high
= DW_ADDR (&attr
);
1455 case DW_AT_comp_dir
:
1457 char* comp_dir
= DW_STRING (&attr
);
1460 /* Irix 6.2 native cc prepends <machine>.: to the compilation
1461 directory, get rid of it. */
1462 char *cp
= (char*) strchr (comp_dir
, ':');
1464 if (cp
&& cp
!= comp_dir
&& cp
[-1] == '.' && cp
[1] == '/')
1467 unit
->comp_dir
= comp_dir
;
1476 unit
->first_child_die_ptr
= info_ptr
;
1480 /* Return true if UNIT contains the address given by ADDR. */
1483 comp_unit_contains_address (unit
, addr
)
1484 struct comp_unit
* unit
;
1487 struct arange
*arange
;
1492 arange
= &unit
->arange
;
1495 if (addr
>= arange
->low
&& addr
< arange
->high
)
1497 arange
= arange
->next
;
1504 /* If UNIT contains ADDR, set the output parameters to the values for
1505 the line containing ADDR. The output parameters, FILENAME_PTR,
1506 FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
1509 Return true of UNIT contains ADDR, and no errors were encountered;
1513 comp_unit_find_nearest_line (unit
, addr
,
1514 filename_ptr
, functionname_ptr
, linenumber_ptr
,
1516 struct comp_unit
* unit
;
1518 const char **filename_ptr
;
1519 const char **functionname_ptr
;
1520 unsigned int *linenumber_ptr
;
1521 struct dwarf2_debug
*stash
;
1529 if (! unit
->line_table
)
1531 if (! unit
->stmtlist
)
1537 unit
->line_table
= decode_line_info (unit
, stash
);
1539 if (! unit
->line_table
)
1545 if (! scan_unit_for_functions (unit
))
1552 line_p
= lookup_address_in_line_info_table (unit
->line_table
,
1556 func_p
= lookup_address_in_function_table (unit
->function_table
,
1559 return line_p
|| func_p
;
1562 /* Locate a section in a BFD containing debugging info. The search starts from the
1563 section after AFTER_SEC, or from the first section in the BFD if AFTER_SEC is
1564 NULL. The search works by examining the names of the sections. There are two
1565 permissiable names. The first is .debug_info. This is the standard DWARF2 name.
1566 The second is a prefix .gnu.linkonce.wi. This is a variation on the .debug_info
1567 section which has a checksum describing the contents appended onto the name. This
1568 allows the linker to identify and discard duplicate debugging sections for
1569 different compilation units. */
1570 #define DWARF2_DEBUG_INFO ".debug_info"
1571 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
1574 find_debug_info (abfd
, after_sec
)
1576 asection
* after_sec
;
1581 msec
= after_sec
->next
;
1583 msec
= abfd
->sections
;
1587 if (strcmp (msec
->name
, DWARF2_DEBUG_INFO
) == 0)
1590 if (strncmp (msec
->name
, GNU_LINKONCE_INFO
, strlen (GNU_LINKONCE_INFO
)) == 0)
1599 /* The DWARF2 version of find_nearest line. Return true if the line
1600 is found without error. ADDR_SIZE is the number of bytes in the
1601 initial .debug_info length field and in the abbreviation offset.
1602 You may use zero to indicate that the default value should be
1606 _bfd_dwarf2_find_nearest_line (abfd
, section
, symbols
, offset
,
1607 filename_ptr
, functionname_ptr
,
1614 const char **filename_ptr
;
1615 const char **functionname_ptr
;
1616 unsigned int *linenumber_ptr
;
1617 unsigned int addr_size
;
1620 /* Read each compilation unit from the section .debug_info, and check
1621 to see if it contains the address we are searching for. If yes,
1622 lookup the address, and return the line number info. If no, go
1623 on to the next compilation unit.
1625 We keep a list of all the previously read compilation units, and
1626 a pointer to the next un-read compilation unit. Check the
1627 previously read units before reading more. */
1628 struct dwarf2_debug
*stash
= (struct dwarf2_debug
*) *pinfo
;
1630 /* What address are we looking for? */
1631 bfd_vma addr
= offset
+ section
->vma
;
1633 struct comp_unit
* each
;
1635 *filename_ptr
= NULL
;
1636 *functionname_ptr
= NULL
;
1637 *linenumber_ptr
= 0;
1639 /* The DWARF2 spec says that the initial length field, and the
1640 offset of the abbreviation table, should both be 4-byte values.
1641 However, some compilers do things differently. */
1644 BFD_ASSERT (addr_size
== 4 || addr_size
== 8);
1648 unsigned long total_size
;
1652 (struct dwarf2_debug
*) bfd_zalloc (abfd
, sizeof (struct dwarf2_debug
));
1656 *pinfo
= (PTR
) stash
;
1658 msec
= find_debug_info (abfd
, NULL
);
1660 /* No dwarf2 info. Note that at this point the stash
1661 has been allocated, but contains zeros, this lets
1662 future calls to this function fail quicker. */
1665 /* There can be more than one DWARF2 info section in a BFD these days.
1666 Read them all in and produce one large stash. We do this in two
1667 passes - in the first pass we just accumulate the section sizes.
1668 In the second pass we read in the section's contents. The allows
1669 us to avoid reallocing the data as we add sections to the stash. */
1670 for (total_size
= 0; msec
; msec
= find_debug_info (abfd
, msec
))
1671 total_size
+= msec
->_raw_size
;
1673 stash
->info_ptr
= (char *) bfd_alloc (abfd
, total_size
);
1674 if (stash
->info_ptr
== NULL
)
1677 stash
->info_ptr_end
= stash
->info_ptr
;
1679 for (msec
= find_debug_info (abfd
, NULL
);
1681 msec
= find_debug_info (abfd
, msec
))
1684 unsigned long start
;
1686 size
= msec
->_raw_size
;
1690 start
= stash
->info_ptr_end
- stash
->info_ptr
;
1692 if (! bfd_get_section_contents (abfd
, msec
, stash
->info_ptr
+ start
, 0, size
))
1695 stash
->info_ptr_end
= stash
->info_ptr
+ start
+ size
;
1698 BFD_ASSERT (stash
->info_ptr_end
== stash
->info_ptr
+ total_size
);
1700 stash
->sec
= find_debug_info (abfd
, NULL
);
1701 stash
->sec_info_ptr
= stash
->info_ptr
;
1702 stash
->syms
= symbols
;
1705 /* FIXME: There is a problem with the contents of the
1706 .debug_info section. The 'low' and 'high' addresses of the
1707 comp_units are computed by relocs against symbols in the
1708 .text segment. We need these addresses in order to determine
1709 the nearest line number, and so we have to resolve the
1710 relocs. There is a similar problem when the .debug_line
1711 section is processed as well (e.g., there may be relocs
1712 against the operand of the DW_LNE_set_address operator).
1714 Unfortunately getting hold of the reloc information is hard...
1716 For now, this means that disassembling object files (as
1717 opposed to fully executables) does not always work as well as
1720 /* A null info_ptr indicates that there is no dwarf2 info
1721 (or that an error occured while setting up the stash). */
1722 if (! stash
->info_ptr
)
1725 /* Check the previously read comp. units first. */
1726 for (each
= stash
->all_comp_units
; each
; each
= each
->next_unit
)
1727 if (comp_unit_contains_address (each
, addr
))
1728 return comp_unit_find_nearest_line (each
, addr
, filename_ptr
,
1729 functionname_ptr
, linenumber_ptr
,
1732 /* Read each remaining comp. units checking each as they are read. */
1733 while (stash
->info_ptr
< stash
->info_ptr_end
)
1735 struct comp_unit
* each
;
1740 length
= read_4_bytes (abfd
, stash
->info_ptr
);
1742 length
= read_8_bytes (abfd
, stash
->info_ptr
);
1743 stash
->info_ptr
+= addr_size
;
1747 each
= parse_comp_unit (abfd
, stash
, length
, addr_size
);
1748 stash
->info_ptr
+= length
;
1750 if ((bfd_vma
) (stash
->info_ptr
- stash
->sec_info_ptr
)
1751 == stash
->sec
->_raw_size
)
1753 stash
->sec
= find_debug_info (abfd
, stash
->sec
);
1754 stash
->sec_info_ptr
= stash
->info_ptr
;
1759 each
->next_unit
= stash
->all_comp_units
;
1760 stash
->all_comp_units
= each
;
1762 /* DW_AT_low_pc and DW_AT_high_pc are optional for
1763 compilation units. If we don't have them (i.e.,
1764 unit->high == 0), we need to consult the line info
1765 table to see if a compilation unit contains the given
1767 if (each
->arange
.high
> 0)
1769 if (comp_unit_contains_address (each
, addr
))
1770 return comp_unit_find_nearest_line (each
, addr
,
1778 found
= comp_unit_find_nearest_line (each
, addr
,