2 Copyright 1994, 95, 96, 97, 98, 1999 Free Software Foundation, Inc.
4 Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
7 From the dwarf2read.c header:
8 Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
9 Inc. with support from Florida State University (under contract
10 with the Ada Joint Program Office), and Silicon Graphics, Inc.
11 Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
12 based on Fred Fish's (Cygnus Support) implementation of DWARF 1
13 support in dwarfread.c
15 This file is part of BFD.
17 This program is free software; you can redistribute it and/or modify
18 it under the terms of the GNU General Public License as published by
19 the Free Software Foundation; either version 2 of the License, or (at
20 your option) any later version.
22 This program is distributed in the hope that it will be useful, but
23 WITHOUT ANY WARRANTY; without even the implied warranty of
24 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
25 General Public License for more details.
27 You should have received a copy of the GNU General Public License
28 along with this program; if not, write to the Free Software
29 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
33 #include "libiberty.h"
36 #include "elf/dwarf2.h"
38 /* The data in the .debug_line statement prologue looks like this. */
41 unsigned int total_length
;
42 unsigned short version
;
43 unsigned int prologue_length
;
44 unsigned char minimum_instruction_length
;
45 unsigned char default_is_stmt
;
47 unsigned char line_range
;
48 unsigned char opcode_base
;
49 unsigned char *standard_opcode_lengths
;
52 /* Attributes have a name and a value */
55 enum dwarf_attribute name
;
60 struct dwarf_block
*blk
;
68 /* Get at parts of an attribute structure */
70 #define DW_STRING(attr) ((attr)->u.str)
71 #define DW_UNSND(attr) ((attr)->u.unsnd)
72 #define DW_BLOCK(attr) ((attr)->u.blk)
73 #define DW_SND(attr) ((attr)->u.snd)
74 #define DW_ADDR(attr) ((attr)->u.addr)
76 /* Blocks are a bunch of untyped bytes. */
86 /* A list of all previously read comp_units. */
87 struct comp_unit
* all_comp_units
;
89 /* The next unread compilation unit within the .debug_info section.
90 Zero indicates that the .debug_info section has not been loaded
94 /* Pointer to the end of the .debug_info section memory buffer. */
97 /* Pointer to the .debug_abbrev section loaded into memory. */
98 char* dwarf_abbrev_buffer
;
100 /* Length of the loaded .debug_abbrev section. */
101 unsigned long dwarf_abbrev_size
;
103 /* Buffer for decode_line_info. */
104 char *dwarf_line_buffer
;
114 /* A minimal decoding of DWARF2 compilation units. We only decode
115 what's needed to get to the line number information. */
119 /* Chain the previously read compilation units. */
120 struct comp_unit
* next_unit
;
122 /* Keep the bdf convenient (for memory allocation). */
125 /* The lowest and higest addresses contained in this compilation
126 unit as specified in the compilation unit header. */
127 struct arange arange
;
129 /* The DW_AT_name attribute (for error messages). */
132 /* The abbrev hash table. */
133 struct abbrev_info
** abbrevs
;
135 /* Note that an error was found by comp_unit_find_nearest_line. */
138 /* The DW_AT_comp_dir attribute */
141 /* True if there is a line number table associated with this comp. unit. */
144 /* The offset into .debug_line of the line number table. */
145 unsigned long line_offset
;
147 /* Pointer to the first child die for the comp unit. */
148 char *first_child_die_ptr
;
150 /* The end of the comp unit. */
153 /* The decoded line number, NULL if not yet decoded. */
154 struct line_info_table
* line_table
;
156 /* A list of the functions found in this comp. unit. */
157 struct funcinfo
* function_table
;
159 /* Address size for this unit - from unit header */
160 unsigned char addr_size
;
166 The following function up to the END VERBATIM mark are
167 copied directly from dwarf2read.c. */
169 /* read dwarf information from a buffer */
172 read_1_byte (abfd
, buf
)
173 bfd
*abfd ATTRIBUTE_UNUSED
;
176 return bfd_get_8 (abfd
, (bfd_byte
*) buf
);
180 read_1_signed_byte (abfd
, buf
)
181 bfd
*abfd ATTRIBUTE_UNUSED
;
184 return bfd_get_signed_8 (abfd
, (bfd_byte
*) buf
);
188 read_2_bytes (abfd
, buf
)
192 return bfd_get_16 (abfd
, (bfd_byte
*) buf
);
197 /* This is not used. */
200 read_2_signed_bytes (abfd
, buf
)
204 return bfd_get_signed_16 (abfd
, (bfd_byte
*) buf
);
210 read_4_bytes (abfd
, buf
)
214 return bfd_get_32 (abfd
, (bfd_byte
*) buf
);
219 /* This is not used. */
222 read_4_signed_bytes (abfd
, buf
)
226 return bfd_get_signed_32 (abfd
, (bfd_byte
*) buf
);
232 read_8_bytes (abfd
, buf
)
236 return bfd_get_64 (abfd
, (bfd_byte
*) buf
);
240 read_n_bytes (abfd
, buf
, size
)
241 bfd
*abfd ATTRIBUTE_UNUSED
;
243 unsigned int size ATTRIBUTE_UNUSED
;
245 /* If the size of a host char is 8 bits, we can return a pointer
246 to the buffer, otherwise we have to copy the data to a buffer
247 allocated on the temporary obstack. */
252 read_string (abfd
, buf
, bytes_read_ptr
)
253 bfd
*abfd ATTRIBUTE_UNUSED
;
255 unsigned int *bytes_read_ptr
;
257 /* If the size of a host char is 8 bits, we can return a pointer
258 to the string, otherwise we have to copy the string to a buffer
259 allocated on the temporary obstack. */
265 *bytes_read_ptr
= strlen (buf
) + 1;
270 read_unsigned_leb128 (abfd
, buf
, bytes_read_ptr
)
271 bfd
*abfd ATTRIBUTE_UNUSED
;
273 unsigned int *bytes_read_ptr
;
276 unsigned int num_read
;
286 byte
= bfd_get_8 (abfd
, (bfd_byte
*) buf
);
289 result
|= ((byte
& 0x7f) << shift
);
294 * bytes_read_ptr
= num_read
;
300 read_signed_leb128 (abfd
, buf
, bytes_read_ptr
)
301 bfd
*abfd ATTRIBUTE_UNUSED
;
303 unsigned int * bytes_read_ptr
;
316 byte
= bfd_get_8 (abfd
, (bfd_byte
*) buf
);
319 result
|= ((byte
& 0x7f) << shift
);
324 if ((shift
< 32) && (byte
& 0x40))
325 result
|= -(1 << shift
);
327 * bytes_read_ptr
= num_read
;
335 read_address (unit
, buf
)
336 struct comp_unit
* unit
;
341 if (unit
->addr_size
== 4)
343 retval
= bfd_get_32 (unit
->abfd
, (bfd_byte
*) buf
);
345 retval
= bfd_get_64 (unit
->abfd
, (bfd_byte
*) buf
);
354 /* This data structure holds the information of an abbrev. */
357 unsigned int number
; /* number identifying abbrev */
358 enum dwarf_tag tag
; /* dwarf tag */
359 int has_children
; /* boolean */
360 unsigned int num_attrs
; /* number of attributes */
361 struct attr_abbrev
*attrs
; /* an array of attribute descriptions */
362 struct abbrev_info
*next
; /* next in chain */
367 enum dwarf_attribute name
;
368 enum dwarf_form form
;
371 #ifndef ABBREV_HASH_SIZE
372 #define ABBREV_HASH_SIZE 121
374 #ifndef ATTR_ALLOC_CHUNK
375 #define ATTR_ALLOC_CHUNK 4
378 /* Lookup an abbrev_info structure in the abbrev hash table. */
380 static struct abbrev_info
*
381 lookup_abbrev (number
,abbrevs
)
383 struct abbrev_info
**abbrevs
;
385 unsigned int hash_number
;
386 struct abbrev_info
*abbrev
;
388 hash_number
= number
% ABBREV_HASH_SIZE
;
389 abbrev
= abbrevs
[hash_number
];
393 if (abbrev
->number
== number
)
396 abbrev
= abbrev
->next
;
401 /* In DWARF version 2, the description of the debugging information is
402 stored in a separate .debug_abbrev section. Before we read any
403 dies from a section we read in all abbreviations and install them
406 static struct abbrev_info
**
407 read_abbrevs (abfd
, offset
)
411 struct abbrev_info
**abbrevs
;
413 struct abbrev_info
*cur_abbrev
;
414 unsigned int abbrev_number
, bytes_read
, abbrev_name
;
415 unsigned int abbrev_form
, hash_number
;
416 struct dwarf2_debug
*stash
;
418 stash
= elf_tdata(abfd
)->dwarf2_find_line_info
;
420 if (! stash
->dwarf_abbrev_buffer
)
424 msec
= bfd_get_section_by_name (abfd
, ".debug_abbrev");
427 (*_bfd_error_handler
) (_("Dwarf Error: Can't find .debug_abbrev section."));
428 bfd_set_error (bfd_error_bad_value
);
432 stash
->dwarf_abbrev_size
= bfd_get_section_size_before_reloc (msec
);
433 stash
->dwarf_abbrev_buffer
= (char*) bfd_alloc (abfd
, stash
->dwarf_abbrev_size
);
434 if (! stash
->dwarf_abbrev_buffer
)
437 if (! bfd_get_section_contents (abfd
, msec
,
438 stash
->dwarf_abbrev_buffer
, 0,
439 stash
->dwarf_abbrev_size
))
443 if (offset
> stash
->dwarf_abbrev_size
)
445 (*_bfd_error_handler
) (_("Dwarf Error: Abbrev offset (%u) bigger than abbrev size (%u)."),
446 offset
, stash
->dwarf_abbrev_size
);
447 bfd_set_error (bfd_error_bad_value
);
451 abbrevs
= (struct abbrev_info
**) bfd_zalloc (abfd
, sizeof(struct abbrev_info
*) * ABBREV_HASH_SIZE
);
453 abbrev_ptr
= stash
->dwarf_abbrev_buffer
+ offset
;
454 abbrev_number
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
455 abbrev_ptr
+= bytes_read
;
457 /* loop until we reach an abbrev number of 0 */
458 while (abbrev_number
)
460 cur_abbrev
= (struct abbrev_info
*)bfd_zalloc (abfd
, sizeof (struct abbrev_info
));
462 /* read in abbrev header */
463 cur_abbrev
->number
= abbrev_number
;
464 cur_abbrev
->tag
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
465 abbrev_ptr
+= bytes_read
;
466 cur_abbrev
->has_children
= read_1_byte (abfd
, abbrev_ptr
);
469 /* now read in declarations */
470 abbrev_name
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
471 abbrev_ptr
+= bytes_read
;
472 abbrev_form
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
473 abbrev_ptr
+= bytes_read
;
476 if ((cur_abbrev
->num_attrs
% ATTR_ALLOC_CHUNK
) == 0)
478 cur_abbrev
->attrs
= (struct attr_abbrev
*)
479 bfd_realloc (cur_abbrev
->attrs
,
480 (cur_abbrev
->num_attrs
+ ATTR_ALLOC_CHUNK
)
481 * sizeof (struct attr_abbrev
));
482 if (! cur_abbrev
->attrs
)
485 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].name
= abbrev_name
;
486 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
++].form
= abbrev_form
;
487 abbrev_name
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
488 abbrev_ptr
+= bytes_read
;
489 abbrev_form
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
490 abbrev_ptr
+= bytes_read
;
493 hash_number
= abbrev_number
% ABBREV_HASH_SIZE
;
494 cur_abbrev
->next
= abbrevs
[hash_number
];
495 abbrevs
[hash_number
] = cur_abbrev
;
497 /* Get next abbreviation.
498 Under Irix6 the abbreviations for a compilation unit are not
499 always properly terminated with an abbrev number of 0.
500 Exit loop if we encounter an abbreviation which we have
501 already read (which means we are about to read the abbreviations
502 for the next compile unit) or if the end of the abbreviation
504 if ((unsigned int) (abbrev_ptr
- stash
->dwarf_abbrev_buffer
)
505 >= stash
->dwarf_abbrev_size
)
507 abbrev_number
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
508 abbrev_ptr
+= bytes_read
;
509 if (lookup_abbrev (abbrev_number
,abbrevs
) != NULL
)
516 /* Read an attribute described by an abbreviated attribute. */
519 read_attribute (attr
, abbrev
, unit
, info_ptr
)
520 struct attribute
*attr
;
521 struct attr_abbrev
*abbrev
;
522 struct comp_unit
*unit
;
525 bfd
*abfd
= unit
->abfd
;
526 unsigned int bytes_read
;
527 struct dwarf_block
*blk
;
529 attr
->name
= abbrev
->name
;
530 attr
->form
= abbrev
->form
;
531 switch (abbrev
->form
)
534 case DW_FORM_ref_addr
:
535 DW_ADDR (attr
) = read_address (unit
, info_ptr
);
536 info_ptr
+= unit
->addr_size
;
539 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, sizeof (struct dwarf_block
));
540 blk
->size
= read_2_bytes (abfd
, info_ptr
);
542 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
543 info_ptr
+= blk
->size
;
544 DW_BLOCK (attr
) = blk
;
547 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, sizeof (struct dwarf_block
));
548 blk
->size
= read_4_bytes (abfd
, info_ptr
);
550 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
551 info_ptr
+= blk
->size
;
552 DW_BLOCK (attr
) = blk
;
555 DW_UNSND (attr
) = read_2_bytes (abfd
, info_ptr
);
559 DW_UNSND (attr
) = read_4_bytes (abfd
, info_ptr
);
563 DW_UNSND (attr
) = read_8_bytes (abfd
, info_ptr
);
567 DW_STRING (attr
) = read_string (abfd
, info_ptr
, &bytes_read
);
568 info_ptr
+= bytes_read
;
571 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, sizeof (struct dwarf_block
));
572 blk
->size
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
573 info_ptr
+= bytes_read
;
574 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
575 info_ptr
+= blk
->size
;
576 DW_BLOCK (attr
) = blk
;
579 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, sizeof (struct dwarf_block
));
580 blk
->size
= read_1_byte (abfd
, info_ptr
);
582 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
583 info_ptr
+= blk
->size
;
584 DW_BLOCK (attr
) = blk
;
587 DW_UNSND (attr
) = read_1_byte (abfd
, info_ptr
);
591 DW_UNSND (attr
) = read_1_byte (abfd
, info_ptr
);
595 DW_SND (attr
) = read_signed_leb128 (abfd
, info_ptr
, &bytes_read
);
596 info_ptr
+= bytes_read
;
599 DW_UNSND (attr
) = read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
600 info_ptr
+= bytes_read
;
603 DW_UNSND (attr
) = read_1_byte (abfd
, info_ptr
);
607 DW_UNSND (attr
) = read_2_bytes (abfd
, info_ptr
);
611 DW_UNSND (attr
) = read_4_bytes (abfd
, info_ptr
);
615 DW_UNSND (attr
) = read_8_bytes (abfd
, info_ptr
);
618 case DW_FORM_ref_udata
:
619 DW_UNSND (attr
) = read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
620 info_ptr
+= bytes_read
;
623 case DW_FORM_indirect
:
625 (*_bfd_error_handler
) (_("Dwarf Error: Invalid or unhandled FORM value: %d."),
627 bfd_set_error (bfd_error_bad_value
);
633 /* Source line information table routines. */
635 #define FILE_ALLOC_CHUNK 5
636 #define DIR_ALLOC_CHUNK 5
639 struct line_info
* prev_line
;
645 int end_sequence
; /* end of (sequential) code sequence */
655 struct line_info_table
{
658 unsigned int num_files
;
659 unsigned int num_dirs
;
663 struct fileinfo
* files
;
664 struct line_info
* last_line
;
668 add_line_info (table
, address
, filename
, line
, column
, end_sequence
)
669 struct line_info_table
* table
;
676 struct line_info
* info
= (struct line_info
*)
677 bfd_alloc (table
->abfd
, sizeof (struct line_info
));
679 info
->prev_line
= table
->last_line
;
680 table
->last_line
= info
;
682 info
->address
= address
;
683 info
->filename
= filename
;
685 info
->column
= column
;
686 info
->end_sequence
= end_sequence
;
690 concat_filename (table
, file
)
691 struct line_info_table
* table
;
696 if (file
- 1 >= table
->num_files
)
698 (*_bfd_error_handler
) (_("Dwarf Error: mangled line number "
699 "section (bad file number)."));
703 filename
= table
->files
[file
- 1].name
;
704 if (*filename
== '/')
709 char* dirname
= (table
->files
[file
- 1].dir
710 ? table
->dirs
[table
->files
[file
- 1].dir
- 1]
712 return (char*) concat (dirname
, "/", filename
, NULL
);
717 arange_add (unit
, low_pc
, high_pc
)
718 struct comp_unit
*unit
;
722 struct arange
*arange
;
724 /* first see if we can cheaply extend an existing range: */
725 arange
= &unit
->arange
;
728 if (low_pc
== arange
->high
)
730 arange
->high
= high_pc
;
733 if (high_pc
== arange
->low
)
735 arange
->low
= low_pc
;
738 arange
= arange
->next
;
742 if (unit
->arange
.high
== 0)
744 /* this is the first address range: store it in unit->arange: */
745 unit
->arange
.next
= 0;
746 unit
->arange
.low
= low_pc
;
747 unit
->arange
.high
= high_pc
;
751 /* need to allocate a new arange and insert it into the arange list: */
752 arange
= bfd_zalloc (unit
->abfd
, sizeof (*arange
));
753 arange
->low
= low_pc
;
754 arange
->high
= high_pc
;
756 arange
->next
= unit
->arange
.next
;
757 unit
->arange
.next
= arange
;
760 /* Decode the line number information for UNIT. */
762 static struct line_info_table
*
763 decode_line_info (unit
)
764 struct comp_unit
*unit
;
766 bfd
*abfd
= unit
->abfd
;
768 struct dwarf2_debug
*stash
;
770 struct line_info_table
* table
;
775 unsigned int i
, bytes_read
;
776 char *cur_file
, *cur_dir
;
777 unsigned char op_code
, extended_op
, adj_opcode
;
779 stash
= elf_tdata (abfd
)->dwarf2_find_line_info
;
781 if (! stash
->dwarf_line_buffer
)
786 msec
= bfd_get_section_by_name (abfd
, ".debug_line");
789 (*_bfd_error_handler
) (_("Dwarf Error: Can't find .debug_line section."));
790 bfd_set_error (bfd_error_bad_value
);
794 size
= bfd_get_section_size_before_reloc (msec
);
795 stash
->dwarf_line_buffer
= (char *) bfd_alloc (abfd
, size
);
796 if (! stash
->dwarf_line_buffer
)
799 if (! bfd_get_section_contents (abfd
, msec
,
800 stash
->dwarf_line_buffer
, 0,
804 /* FIXME: We ought to apply the relocs against this section before
808 table
= (struct line_info_table
*) bfd_alloc (abfd
,
809 sizeof (struct line_info_table
));
811 table
->comp_dir
= unit
->comp_dir
;
813 table
->num_files
= 0;
820 table
->last_line
= NULL
;
822 line_ptr
= stash
->dwarf_line_buffer
+ unit
->line_offset
;
824 /* read in the prologue */
825 lh
.total_length
= read_4_bytes (abfd
, line_ptr
);
827 line_end
= line_ptr
+ lh
.total_length
;
828 lh
.version
= read_2_bytes (abfd
, line_ptr
);
830 lh
.prologue_length
= read_4_bytes (abfd
, line_ptr
);
832 lh
.minimum_instruction_length
= read_1_byte (abfd
, line_ptr
);
834 lh
.default_is_stmt
= read_1_byte (abfd
, line_ptr
);
836 lh
.line_base
= read_1_signed_byte (abfd
, line_ptr
);
838 lh
.line_range
= read_1_byte (abfd
, line_ptr
);
840 lh
.opcode_base
= read_1_byte (abfd
, line_ptr
);
842 lh
.standard_opcode_lengths
= (unsigned char *)
843 bfd_alloc (abfd
, lh
.opcode_base
* sizeof (unsigned char));
845 lh
.standard_opcode_lengths
[0] = 1;
846 for (i
= 1; i
< lh
.opcode_base
; ++i
)
848 lh
.standard_opcode_lengths
[i
] = read_1_byte (abfd
, line_ptr
);
852 /* Read directory table */
853 while ((cur_dir
= read_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
855 line_ptr
+= bytes_read
;
856 if ((table
->num_dirs
% DIR_ALLOC_CHUNK
) == 0)
858 table
->dirs
= (char **)
859 bfd_realloc (table
->dirs
,
860 (table
->num_dirs
+ DIR_ALLOC_CHUNK
) * sizeof (char *));
864 table
->dirs
[table
->num_dirs
++] = cur_dir
;
866 line_ptr
+= bytes_read
;
868 /* Read file name table */
869 while ((cur_file
= read_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
871 line_ptr
+= bytes_read
;
872 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
874 table
->files
= (struct fileinfo
*)
875 bfd_realloc (table
->files
,
876 (table
->num_files
+ FILE_ALLOC_CHUNK
)
877 * sizeof (struct fileinfo
));
881 table
->files
[table
->num_files
].name
= cur_file
;
882 table
->files
[table
->num_files
].dir
=
883 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
884 line_ptr
+= bytes_read
;
885 table
->files
[table
->num_files
].time
=
886 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
887 line_ptr
+= bytes_read
;
888 table
->files
[table
->num_files
].size
=
889 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
890 line_ptr
+= bytes_read
;
893 line_ptr
+= bytes_read
;
895 /* Read the statement sequences until there's nothing left. */
896 while (line_ptr
< line_end
)
898 /* state machine registers */
900 char* filename
= concat_filename (table
, 1);
901 unsigned int line
= 1;
902 unsigned int column
= 0;
903 int is_stmt
= lh
.default_is_stmt
;
905 int end_sequence
= 0, need_low_pc
= 1;
908 /* Decode the table. */
909 while (! end_sequence
)
911 op_code
= read_1_byte (abfd
, line_ptr
);
915 case DW_LNS_extended_op
:
916 line_ptr
+= 1; /* ignore length */
917 extended_op
= read_1_byte (abfd
, line_ptr
);
921 case DW_LNE_end_sequence
:
923 add_line_info (table
, address
, filename
, line
, column
,
930 arange_add (unit
, low_pc
, address
);
932 case DW_LNE_set_address
:
933 address
= read_address (unit
, line_ptr
);
934 line_ptr
+= unit
->addr_size
;
936 case DW_LNE_define_file
:
937 cur_file
= read_string (abfd
, line_ptr
, &bytes_read
);
938 line_ptr
+= bytes_read
;
939 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
941 table
->files
= (struct fileinfo
*)
942 bfd_realloc (table
->files
,
943 (table
->num_files
+ FILE_ALLOC_CHUNK
)
944 * sizeof (struct fileinfo
));
948 table
->files
[table
->num_files
].name
= cur_file
;
949 table
->files
[table
->num_files
].dir
=
950 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
951 line_ptr
+= bytes_read
;
952 table
->files
[table
->num_files
].time
=
953 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
954 line_ptr
+= bytes_read
;
955 table
->files
[table
->num_files
].size
=
956 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
957 line_ptr
+= bytes_read
;
961 (*_bfd_error_handler
) (_("Dwarf Error: mangled line number section."));
962 bfd_set_error (bfd_error_bad_value
);
967 add_line_info (table
, address
, filename
, line
, column
, 0);
975 case DW_LNS_advance_pc
:
976 address
+= lh
.minimum_instruction_length
977 * read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
978 line_ptr
+= bytes_read
;
980 case DW_LNS_advance_line
:
981 line
+= read_signed_leb128 (abfd
, line_ptr
, &bytes_read
);
982 line_ptr
+= bytes_read
;
984 case DW_LNS_set_file
:
988 /* The file and directory tables are 0 based, the references
990 file
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
991 line_ptr
+= bytes_read
;
992 filename
= concat_filename (table
, file
);
995 case DW_LNS_set_column
:
996 column
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
997 line_ptr
+= bytes_read
;
999 case DW_LNS_negate_stmt
:
1000 is_stmt
= (!is_stmt
);
1002 case DW_LNS_set_basic_block
:
1005 case DW_LNS_const_add_pc
:
1006 address
+= lh
.minimum_instruction_length
1007 * ((255 - lh
.opcode_base
) / lh
.line_range
);
1009 case DW_LNS_fixed_advance_pc
:
1010 address
+= read_2_bytes (abfd
, line_ptr
);
1013 default: /* special operand */
1014 adj_opcode
= op_code
- lh
.opcode_base
;
1015 address
+= (adj_opcode
/ lh
.line_range
)
1016 * lh
.minimum_instruction_length
;
1017 line
+= lh
.line_base
+ (adj_opcode
% lh
.line_range
);
1018 /* append row to matrix using current values */
1019 add_line_info (table
, address
, filename
, line
, column
, 0);
1034 /* If ADDR is within TABLE set the output parameters and return true,
1035 otherwise return false. The output parameters, FILENAME_PTR and
1036 LINENUMBER_PTR, are pointers to the objects to be filled in. */
1039 lookup_address_in_line_info_table (table
,
1043 struct line_info_table
* table
;
1045 const char **filename_ptr
;
1046 unsigned int *linenumber_ptr
;
1048 struct line_info
* next_line
= table
->last_line
;
1049 struct line_info
* each_line
;
1054 each_line
= next_line
->prev_line
;
1056 while (each_line
&& next_line
)
1058 if (!each_line
->end_sequence
1059 && addr
>= each_line
->address
&& addr
< next_line
->address
)
1061 *filename_ptr
= each_line
->filename
;
1062 *linenumber_ptr
= each_line
->line
;
1065 next_line
= each_line
;
1066 each_line
= each_line
->prev_line
;
1075 /* Function table functions. */
1078 struct funcinfo
*prev_func
;
1086 /* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return true. */
1089 lookup_address_in_function_table (table
,
1092 struct funcinfo
* table
;
1094 const char **functionname_ptr
;
1096 struct funcinfo
* each_func
;
1098 for (each_func
= table
;
1100 each_func
= each_func
->prev_func
)
1102 if (addr
>= each_func
->low
&& addr
< each_func
->high
)
1104 *functionname_ptr
= each_func
->name
;
1115 /* DWARF2 Compilation unit functions. */
1118 /* Scan over each die in a comp. unit looking for functions to add
1119 to the function table. */
1122 scan_unit_for_functions (unit
)
1123 struct comp_unit
*unit
;
1125 bfd
*abfd
= unit
->abfd
;
1126 char *info_ptr
= unit
->first_child_die_ptr
;
1127 int nesting_level
= 1;
1129 while (nesting_level
)
1131 unsigned int abbrev_number
, bytes_read
, i
;
1132 struct abbrev_info
*abbrev
;
1133 struct attribute attr
;
1134 struct funcinfo
*func
;
1137 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1138 info_ptr
+= bytes_read
;
1140 if (! abbrev_number
)
1146 abbrev
= lookup_abbrev (abbrev_number
,unit
->abbrevs
);
1149 (*_bfd_error_handler
) (_("Dwarf Error: Could not find abbrev number %d."),
1151 bfd_set_error (bfd_error_bad_value
);
1155 if (abbrev
->tag
== DW_TAG_subprogram
)
1157 func
= (struct funcinfo
*) bfd_zalloc (abfd
, sizeof (struct funcinfo
));
1158 func
->prev_func
= unit
->function_table
;
1159 unit
->function_table
= func
;
1164 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1166 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1174 name
= DW_STRING (&attr
);
1176 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
1177 if (func
->name
== NULL
)
1178 func
->name
= DW_STRING (&attr
);
1181 case DW_AT_MIPS_linkage_name
:
1182 func
->name
= DW_STRING (&attr
);
1186 func
->low
= DW_ADDR (&attr
);
1190 func
->high
= DW_ADDR (&attr
);
1202 name
= DW_STRING (&attr
);
1211 if (abbrev
->has_children
)
1223 /* Parse a DWARF2 compilation unit starting at INFO_PTR. This
1224 includes the compilation unit header that proceeds the DIE's, but
1225 does not include the length field that preceeds each compilation
1226 unit header. END_PTR points one past the end of this comp unit.
1227 If ABBREV_LENGTH is 0, then the length of the abbreviation offset
1228 is assumed to be four bytes. Otherwise, it it is the size given.
1230 This routine does not read the whole compilation unit; only enough
1231 to get to the line number information for the compilation unit. */
1233 static struct comp_unit
*
1234 parse_comp_unit (abfd
, info_ptr
, end_ptr
, abbrev_length
)
1238 unsigned int abbrev_length
;
1240 struct comp_unit
* unit
;
1242 unsigned short version
;
1243 unsigned int abbrev_offset
= 0;
1244 unsigned char addr_size
;
1245 struct abbrev_info
** abbrevs
;
1247 unsigned int abbrev_number
, bytes_read
, i
;
1248 struct abbrev_info
*abbrev
;
1249 struct attribute attr
;
1251 version
= read_2_bytes (abfd
, info_ptr
);
1253 BFD_ASSERT (abbrev_length
== 0
1254 || abbrev_length
== 4
1255 || abbrev_length
== 8);
1256 if (abbrev_length
== 0 || abbrev_length
== 4)
1257 abbrev_offset
= read_4_bytes (abfd
, info_ptr
);
1258 else if (abbrev_length
== 8)
1259 abbrev_offset
= read_8_bytes (abfd
, info_ptr
);
1260 info_ptr
+= abbrev_length
;
1261 addr_size
= read_1_byte (abfd
, info_ptr
);
1266 (*_bfd_error_handler
) (_("Dwarf Error: found dwarf version '%hu', this reader only handles version 2 information."), version
);
1267 bfd_set_error (bfd_error_bad_value
);
1271 if (addr_size
> sizeof (bfd_vma
))
1273 (*_bfd_error_handler
) (_("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'."),
1276 bfd_set_error (bfd_error_bad_value
);
1280 if (addr_size
!= 4 && addr_size
!= 8)
1282 (*_bfd_error_handler
) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '4' and '8'.", addr_size
);
1283 bfd_set_error (bfd_error_bad_value
);
1287 /* Read the abbrevs for this compilation unit into a table */
1288 abbrevs
= read_abbrevs (abfd
, abbrev_offset
);
1292 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1293 info_ptr
+= bytes_read
;
1294 if (! abbrev_number
)
1296 (*_bfd_error_handler
) (_("Dwarf Error: Bad abbrev number: %d."),
1298 bfd_set_error (bfd_error_bad_value
);
1302 abbrev
= lookup_abbrev (abbrev_number
, abbrevs
);
1305 (*_bfd_error_handler
) (_("Dwarf Error: Could not find abbrev number %d."),
1307 bfd_set_error (bfd_error_bad_value
);
1311 unit
= (struct comp_unit
*) bfd_zalloc (abfd
, sizeof (struct comp_unit
));
1313 unit
->addr_size
= addr_size
;
1314 unit
->abbrevs
= abbrevs
;
1315 unit
->end_ptr
= end_ptr
;
1317 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1319 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1321 /* Store the data if it is of an attribute we want to keep in a
1322 partial symbol table. */
1325 case DW_AT_stmt_list
:
1327 unit
->line_offset
= DW_UNSND (&attr
);
1331 unit
->name
= DW_STRING (&attr
);
1335 unit
->arange
.low
= DW_ADDR (&attr
);
1339 unit
->arange
.high
= DW_ADDR (&attr
);
1342 case DW_AT_comp_dir
:
1344 char* comp_dir
= DW_STRING (&attr
);
1347 /* Irix 6.2 native cc prepends <machine>.: to the compilation
1348 directory, get rid of it. */
1349 char *cp
= (char*) strchr (comp_dir
, ':');
1351 if (cp
&& cp
!= comp_dir
&& cp
[-1] == '.' && cp
[1] == '/')
1354 unit
->comp_dir
= comp_dir
;
1363 unit
->first_child_die_ptr
= info_ptr
;
1371 /* Return true if UNIT contains the address given by ADDR. */
1374 comp_unit_contains_address (unit
, addr
)
1375 struct comp_unit
* unit
;
1378 struct arange
*arange
;
1383 arange
= &unit
->arange
;
1386 if (addr
>= arange
->low
&& addr
< arange
->high
)
1388 arange
= arange
->next
;
1395 /* If UNIT contains ADDR, set the output parameters to the values for
1396 the line containing ADDR. The output parameters, FILENAME_PTR,
1397 FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
1400 Return true of UNIT contains ADDR, and no errors were encountered;
1404 comp_unit_find_nearest_line (unit
, addr
,
1405 filename_ptr
, functionname_ptr
, linenumber_ptr
)
1406 struct comp_unit
* unit
;
1408 const char **filename_ptr
;
1409 const char **functionname_ptr
;
1410 unsigned int *linenumber_ptr
;
1418 if (! unit
->line_table
)
1420 if (! unit
->stmtlist
)
1426 unit
->line_table
= decode_line_info (unit
);
1428 if (! unit
->line_table
)
1434 if (! scan_unit_for_functions (unit
))
1441 line_p
= lookup_address_in_line_info_table (unit
->line_table
,
1445 func_p
= lookup_address_in_function_table (unit
->function_table
,
1448 return line_p
|| func_p
;
1451 /* The DWARF2 version of find_nearest line. Return true if the line
1452 is found without error. ADDR_SIZE is the number of bytes in the
1453 initial .debug_info length field and in the abbreviation offset.
1454 You may use zero to indicate that the default value should be
1458 _bfd_dwarf2_find_nearest_line (abfd
, section
, symbols
, offset
,
1459 filename_ptr
, functionname_ptr
,
1464 asymbol
**symbols ATTRIBUTE_UNUSED
;
1466 const char **filename_ptr
;
1467 const char **functionname_ptr
;
1468 unsigned int *linenumber_ptr
;
1469 unsigned int addr_size
;
1471 /* Read each compilation unit from the section .debug_info, and check
1472 to see if it contains the address we are searching for. If yes,
1473 lookup the address, and return the line number info. If no, go
1474 on to the next compilation unit.
1476 We keep a list of all the previously read compilation units, and
1477 a pointer to the next un-read compilation unit. Check the
1478 previously read units before reading more.
1481 struct dwarf2_debug
*stash
= elf_tdata (abfd
)->dwarf2_find_line_info
;
1483 /* What address are we looking for? */
1484 bfd_vma addr
= offset
+ section
->vma
;
1486 struct comp_unit
* each
;
1488 *filename_ptr
= NULL
;
1489 *functionname_ptr
= NULL
;
1490 *linenumber_ptr
= 0;
1492 /* The DWARF2 spec says that the initial length field, and the
1493 offset of the abbreviation table, should both be 4-byte values.
1494 However, some compilers do things differently. */
1497 BFD_ASSERT (addr_size
== 4 || addr_size
== 8);
1504 stash
= elf_tdata (abfd
)->dwarf2_find_line_info
=
1505 (struct dwarf2_debug
*) bfd_zalloc (abfd
, sizeof (struct dwarf2_debug
));
1510 msec
= bfd_get_section_by_name (abfd
, ".debug_info");
1513 /* No dwarf2 info. Note that at this point the stash
1514 has been allocated, but contains zeros, this lets
1515 future calls to this function fail quicker. */
1519 size
= bfd_get_section_size_before_reloc (msec
);
1523 stash
->info_ptr
= (char *) bfd_alloc (abfd
, size
);
1525 if (! stash
->info_ptr
)
1528 if (! bfd_get_section_contents (abfd
, msec
, stash
->info_ptr
, 0, size
))
1530 stash
->info_ptr
= 0;
1534 stash
->info_ptr_end
= stash
->info_ptr
+ size
;
1536 /* FIXME: There is a problem with the contents of the
1537 .debug_info section. The 'low' and 'high' addresses of the
1538 comp_units are computed by relocs against symbols in the
1539 .text segment. We need these addresses in order to determine
1540 the nearest line number, and so we have to resolve the
1541 relocs. There is a similar problem when the .debug_line
1542 section is processed as well (e.g., there may be relocs
1543 against the operand of the DW_LNE_set_address operator).
1545 Unfortunately getting hold of the reloc information is hard...
1547 For now, this means that disassembling object files (as
1548 opposed to fully executables) does not always work as well as
1552 /* A null info_ptr indicates that there is no dwarf2 info
1553 (or that an error occured while setting up the stash). */
1555 if (! stash
->info_ptr
)
1558 /* Check the previously read comp. units first. */
1560 for (each
= stash
->all_comp_units
; each
; each
= each
->next_unit
)
1561 if (comp_unit_contains_address (each
, addr
))
1562 return comp_unit_find_nearest_line (each
, addr
, filename_ptr
,
1563 functionname_ptr
, linenumber_ptr
);
1565 /* Read each remaining comp. units checking each as they are read. */
1566 while (stash
->info_ptr
< stash
->info_ptr_end
)
1568 struct comp_unit
* each
;
1573 length
= read_4_bytes (abfd
, stash
->info_ptr
);
1575 length
= read_8_bytes (abfd
, stash
->info_ptr
);
1576 stash
->info_ptr
+= addr_size
;
1580 each
= parse_comp_unit (abfd
, stash
->info_ptr
,
1581 stash
->info_ptr
+ length
,
1583 stash
->info_ptr
+= length
;
1587 each
->next_unit
= stash
->all_comp_units
;
1588 stash
->all_comp_units
= each
;
1590 /* DW_AT_low_pc and DW_AT_high_pc are optional for
1591 compilation units. If we don't have them (i.e.,
1592 unit->high == 0), we need to consult the line info
1593 table to see if a compilation unit contains the given
1595 if (each
->arange
.high
> 0)
1597 if (comp_unit_contains_address (each
, addr
))
1598 return comp_unit_find_nearest_line (each
, addr
,
1605 found
= comp_unit_find_nearest_line (each
, addr
,