2 Copyright 1994, 1995, 1996, 1997, 1998 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
;
106 /* A minimal decoding of DWARF2 compilation units. We only decode
107 what's needed to get to the line number information. */
111 /* Chain the previously read compilation units. */
112 struct comp_unit
* next_unit
;
114 /* Keep the bdf convenient (for memory allocation). */
117 /* The lowest and higest addresses contained in this compilation
118 unit as specified in the compilation unit header. */
122 /* The DW_AT_name attribute (for error messages). */
125 /* The abbrev hash table. */
126 struct abbrev_info
** abbrevs
;
128 /* Note that an error was found by comp_unit_find_nearest_line. */
131 /* The DW_AT_comp_dir attribute */
134 /* True if there is a line number table associated with this comp. unit. */
137 /* The offset into .debug_line of the line number table. */
138 unsigned long line_offset
;
140 /* Pointer to the first child die for the comp unit. */
141 char *first_child_die_ptr
;
143 /* The end of the comp unit. */
146 /* The decoded line number, NULL if not yet decoded. */
147 struct line_info_table
* line_table
;
149 /* A list of the functions found in this comp. unit. */
150 struct funcinfo
* function_table
;
152 /* Address size for this unit - from unit header */
153 unsigned char addr_size
;
159 The following function up to the END VERBATUM mark are
160 copied directly from dwarf2read.c. */
162 /* read dwarf information from a buffer */
165 read_1_byte (abfd
, buf
)
169 return bfd_get_8 (abfd
, (bfd_byte
*) buf
);
173 read_1_signed_byte (abfd
, buf
)
177 return bfd_get_signed_8 (abfd
, (bfd_byte
*) buf
);
181 read_2_bytes (abfd
, buf
)
185 return bfd_get_16 (abfd
, (bfd_byte
*) buf
);
190 /* This is not used. */
193 read_2_signed_bytes (abfd
, buf
)
197 return bfd_get_signed_16 (abfd
, (bfd_byte
*) buf
);
203 read_4_bytes (abfd
, buf
)
207 return bfd_get_32 (abfd
, (bfd_byte
*) buf
);
212 /* This is not used. */
215 read_4_signed_bytes (abfd
, buf
)
219 return bfd_get_signed_32 (abfd
, (bfd_byte
*) buf
);
225 read_8_bytes (abfd
, buf
)
229 return bfd_get_64 (abfd
, (bfd_byte
*) buf
);
233 read_n_bytes (abfd
, buf
, size
)
238 /* If the size of a host char is 8 bits, we can return a pointer
239 to the buffer, otherwise we have to copy the data to a buffer
240 allocated on the temporary obstack. */
245 read_string (abfd
, buf
, bytes_read_ptr
)
248 unsigned int *bytes_read_ptr
;
250 /* If the size of a host char is 8 bits, we can return a pointer
251 to the string, otherwise we have to copy the string to a buffer
252 allocated on the temporary obstack. */
258 *bytes_read_ptr
= strlen (buf
) + 1;
263 read_unsigned_leb128 (abfd
, buf
, bytes_read_ptr
)
266 unsigned int *bytes_read_ptr
;
268 unsigned int result
, num_read
;
278 byte
= bfd_get_8 (abfd
, (bfd_byte
*) buf
);
281 result
|= ((byte
& 127) << shift
);
282 if ((byte
& 128) == 0)
288 *bytes_read_ptr
= num_read
;
293 read_signed_leb128 (abfd
, buf
, bytes_read_ptr
)
296 unsigned int *bytes_read_ptr
;
299 int i
, shift
, size
, num_read
;
309 byte
= bfd_get_8 (abfd
, (bfd_byte
*) buf
);
312 result
|= ((byte
& 127) << shift
);
314 if ((byte
& 128) == 0)
319 if ((shift
< size
) && (byte
& 0x40))
321 result
|= -(1 << shift
);
323 *bytes_read_ptr
= num_read
;
330 read_address (unit
, buf
)
331 struct comp_unit
* unit
;
336 if (unit
->addr_size
== 4)
338 retval
= bfd_get_32 (unit
->abfd
, (bfd_byte
*) buf
);
340 retval
= bfd_get_64 (unit
->abfd
, (bfd_byte
*) buf
);
349 /* This data structure holds the information of an abbrev. */
352 unsigned int number
; /* number identifying abbrev */
353 enum dwarf_tag tag
; /* dwarf tag */
354 int has_children
; /* boolean */
355 unsigned int num_attrs
; /* number of attributes */
356 struct attr_abbrev
*attrs
; /* an array of attribute descriptions */
357 struct abbrev_info
*next
; /* next in chain */
362 enum dwarf_attribute name
;
363 enum dwarf_form form
;
366 #ifndef ABBREV_HASH_SIZE
367 #define ABBREV_HASH_SIZE 121
369 #ifndef ATTR_ALLOC_CHUNK
370 #define ATTR_ALLOC_CHUNK 4
373 /* Lookup an abbrev_info structure in the abbrev hash table. */
375 static struct abbrev_info
*
376 lookup_abbrev (number
,abbrevs
)
378 struct abbrev_info
**abbrevs
;
380 unsigned int hash_number
;
381 struct abbrev_info
*abbrev
;
383 hash_number
= number
% ABBREV_HASH_SIZE
;
384 abbrev
= abbrevs
[hash_number
];
388 if (abbrev
->number
== number
)
391 abbrev
= abbrev
->next
;
396 /* In DWARF version 2, the description of the debugging information is
397 stored in a separate .debug_abbrev section. Before we read any
398 dies from a section we read in all abbreviations and install them
401 static struct abbrev_info
**
402 read_abbrevs (abfd
, offset
)
406 struct abbrev_info
**abbrevs
;
408 struct abbrev_info
*cur_abbrev
;
409 unsigned int abbrev_number
, bytes_read
, abbrev_name
;
410 unsigned int abbrev_form
, hash_number
;
411 struct dwarf2_debug
*stash
;
413 stash
= elf_tdata(abfd
)->dwarf2_find_line_info
;
415 if (! stash
->dwarf_abbrev_buffer
)
419 msec
= bfd_get_section_by_name (abfd
, ".debug_abbrev");
422 (*_bfd_error_handler
) ("Dwarf Error: Can't find .debug_abbrev section.");
423 bfd_set_error (bfd_error_bad_value
);
427 stash
->dwarf_abbrev_size
= bfd_get_section_size_before_reloc (msec
);
428 stash
->dwarf_abbrev_buffer
= (unsigned char*) bfd_alloc (abfd
, stash
->dwarf_abbrev_size
);
429 if (! stash
->dwarf_abbrev_buffer
)
432 if (! bfd_get_section_contents (abfd
, msec
,
433 stash
->dwarf_abbrev_buffer
, 0,
434 stash
->dwarf_abbrev_size
))
438 if (offset
> stash
->dwarf_abbrev_size
)
440 (*_bfd_error_handler
) ("Dwarf Error: Abbrev offset (%u) bigger than abbrev size (%u).",
441 offset
, stash
->dwarf_abbrev_size
);
442 bfd_set_error (bfd_error_bad_value
);
446 abbrevs
= (struct abbrev_info
**) bfd_zalloc (abfd
, sizeof(struct abbrev_info
*) * ABBREV_HASH_SIZE
);
448 abbrev_ptr
= stash
->dwarf_abbrev_buffer
+ offset
;
449 abbrev_number
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
450 abbrev_ptr
+= bytes_read
;
452 /* loop until we reach an abbrev number of 0 */
453 while (abbrev_number
)
455 cur_abbrev
= (struct abbrev_info
*)bfd_zalloc (abfd
, sizeof (struct abbrev_info
));
457 /* read in abbrev header */
458 cur_abbrev
->number
= abbrev_number
;
459 cur_abbrev
->tag
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
460 abbrev_ptr
+= bytes_read
;
461 cur_abbrev
->has_children
= read_1_byte (abfd
, abbrev_ptr
);
464 /* now read in declarations */
465 abbrev_name
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
466 abbrev_ptr
+= bytes_read
;
467 abbrev_form
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
468 abbrev_ptr
+= bytes_read
;
471 if ((cur_abbrev
->num_attrs
% ATTR_ALLOC_CHUNK
) == 0)
473 cur_abbrev
->attrs
= (struct attr_abbrev
*)
474 bfd_realloc (cur_abbrev
->attrs
,
475 (cur_abbrev
->num_attrs
+ ATTR_ALLOC_CHUNK
)
476 * sizeof (struct attr_abbrev
));
477 if (! cur_abbrev
->attrs
)
480 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].name
= abbrev_name
;
481 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
++].form
= abbrev_form
;
482 abbrev_name
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
483 abbrev_ptr
+= bytes_read
;
484 abbrev_form
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
485 abbrev_ptr
+= bytes_read
;
488 hash_number
= abbrev_number
% ABBREV_HASH_SIZE
;
489 cur_abbrev
->next
= abbrevs
[hash_number
];
490 abbrevs
[hash_number
] = cur_abbrev
;
492 /* Get next abbreviation.
493 Under Irix6 the abbreviations for a compilation unit are not
494 always properly terminated with an abbrev number of 0.
495 Exit loop if we encounter an abbreviation which we have
496 already read (which means we are about to read the abbreviations
497 for the next compile unit) or if the end of the abbreviation
499 if ((unsigned int) (abbrev_ptr
- stash
->dwarf_abbrev_buffer
)
500 >= stash
->dwarf_abbrev_size
)
502 abbrev_number
= read_unsigned_leb128 (abfd
, abbrev_ptr
, &bytes_read
);
503 abbrev_ptr
+= bytes_read
;
504 if (lookup_abbrev (abbrev_number
,abbrevs
) != NULL
)
511 /* Read an attribute described by an abbreviated attribute. */
514 read_attribute (attr
, abbrev
, unit
, info_ptr
)
515 struct attribute
*attr
;
516 struct attr_abbrev
*abbrev
;
517 struct comp_unit
*unit
;
520 bfd
*abfd
= unit
->abfd
;
521 unsigned int bytes_read
;
522 struct dwarf_block
*blk
;
524 attr
->name
= abbrev
->name
;
525 attr
->form
= abbrev
->form
;
526 switch (abbrev
->form
)
529 case DW_FORM_ref_addr
:
530 DW_ADDR (attr
) = read_address (unit
, info_ptr
);
531 info_ptr
+= unit
->addr_size
;
534 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, sizeof (struct dwarf_block
));
535 blk
->size
= read_2_bytes (abfd
, info_ptr
);
537 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
538 info_ptr
+= blk
->size
;
539 DW_BLOCK (attr
) = blk
;
542 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, sizeof (struct dwarf_block
));
543 blk
->size
= read_4_bytes (abfd
, info_ptr
);
545 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
546 info_ptr
+= blk
->size
;
547 DW_BLOCK (attr
) = blk
;
550 DW_UNSND (attr
) = read_2_bytes (abfd
, info_ptr
);
554 DW_UNSND (attr
) = read_4_bytes (abfd
, info_ptr
);
558 DW_UNSND (attr
) = read_8_bytes (abfd
, info_ptr
);
562 DW_STRING (attr
) = read_string (abfd
, info_ptr
, &bytes_read
);
563 info_ptr
+= bytes_read
;
566 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, sizeof (struct dwarf_block
));
567 blk
->size
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
568 info_ptr
+= bytes_read
;
569 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
570 info_ptr
+= blk
->size
;
571 DW_BLOCK (attr
) = blk
;
574 blk
= (struct dwarf_block
*) bfd_alloc (abfd
, sizeof (struct dwarf_block
));
575 blk
->size
= read_1_byte (abfd
, info_ptr
);
577 blk
->data
= read_n_bytes (abfd
, info_ptr
, blk
->size
);
578 info_ptr
+= blk
->size
;
579 DW_BLOCK (attr
) = blk
;
582 DW_UNSND (attr
) = read_1_byte (abfd
, info_ptr
);
586 DW_UNSND (attr
) = read_1_byte (abfd
, info_ptr
);
590 DW_SND (attr
) = read_signed_leb128 (abfd
, info_ptr
, &bytes_read
);
591 info_ptr
+= bytes_read
;
594 DW_UNSND (attr
) = read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
595 info_ptr
+= bytes_read
;
598 DW_UNSND (attr
) = read_1_byte (abfd
, info_ptr
);
602 DW_UNSND (attr
) = read_2_bytes (abfd
, info_ptr
);
606 DW_UNSND (attr
) = read_4_bytes (abfd
, info_ptr
);
609 case DW_FORM_ref_udata
:
610 DW_UNSND (attr
) = read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
611 info_ptr
+= bytes_read
;
614 case DW_FORM_indirect
:
616 (*_bfd_error_handler
) ("Dwarf Error: Invalid or unhandled FORM value: %d.",
618 bfd_set_error (bfd_error_bad_value
);
624 /* Source line information table routines. */
626 #define FILE_ALLOC_CHUNK 5
627 #define DIR_ALLOC_CHUNK 5
630 struct line_info
* prev_line
;
645 struct line_info_table
{
648 unsigned int num_files
;
649 unsigned int num_dirs
;
653 struct fileinfo
* files
;
654 struct line_info
* last_line
;
658 add_line_info (table
, address
, filename
, line
, column
)
659 struct line_info_table
* table
;
665 struct line_info
* info
= (struct line_info
*)
666 bfd_alloc (table
->abfd
, sizeof (struct line_info
));
668 info
->prev_line
= table
->last_line
;
669 table
->last_line
= info
;
671 info
->address
= address
;
672 info
->filename
= filename
;
674 info
->column
= column
;
678 concat_filename (table
, file
)
679 struct line_info_table
* table
;
682 char* filename
= table
->files
[file
- 1].name
;
683 if (*filename
== '/')
688 char* dirname
= (table
->files
[file
- 1].dir
689 ? table
->dirs
[table
->files
[file
- 1].dir
- 1]
691 return (char*) concat (dirname
, "/", filename
, NULL
);
695 /* Decode the line number information for UNIT. */
697 static struct line_info_table
*
698 decode_line_info (unit
)
699 struct comp_unit
*unit
;
701 bfd
*abfd
= unit
->abfd
;
703 static char* dwarf_line_buffer
= 0;
705 struct line_info_table
* table
;
710 unsigned int i
, bytes_read
;
711 char *cur_file
, *cur_dir
;
712 unsigned char op_code
, extended_op
, adj_opcode
;
714 if (! dwarf_line_buffer
)
719 msec
= bfd_get_section_by_name (abfd
, ".debug_line");
722 (*_bfd_error_handler
) ("Dwarf Error: Can't find .debug_line section.");
723 bfd_set_error (bfd_error_bad_value
);
727 size
= bfd_get_section_size_before_reloc (msec
);
728 dwarf_line_buffer
= (unsigned char*) bfd_alloc (abfd
, size
);
729 if (! dwarf_line_buffer
)
732 if (! bfd_get_section_contents (abfd
, msec
,
733 dwarf_line_buffer
, 0,
738 table
= (struct line_info_table
*) bfd_alloc (abfd
,
739 sizeof (struct line_info_table
));
741 table
->comp_dir
= unit
->comp_dir
;
743 table
->num_files
= 0;
749 line_ptr
= dwarf_line_buffer
+ unit
->line_offset
;
751 /* read in the prologue */
752 lh
.total_length
= read_4_bytes (abfd
, line_ptr
);
754 line_end
= line_ptr
+ lh
.total_length
;
755 lh
.version
= read_2_bytes (abfd
, line_ptr
);
757 lh
.prologue_length
= read_4_bytes (abfd
, line_ptr
);
759 lh
.minimum_instruction_length
= read_1_byte (abfd
, line_ptr
);
761 lh
.default_is_stmt
= read_1_byte (abfd
, line_ptr
);
763 lh
.line_base
= read_1_signed_byte (abfd
, line_ptr
);
765 lh
.line_range
= read_1_byte (abfd
, line_ptr
);
767 lh
.opcode_base
= read_1_byte (abfd
, line_ptr
);
769 lh
.standard_opcode_lengths
= (unsigned char *)
770 bfd_alloc (abfd
, lh
.opcode_base
* sizeof (unsigned char));
772 lh
.standard_opcode_lengths
[0] = 1;
773 for (i
= 1; i
< lh
.opcode_base
; ++i
)
775 lh
.standard_opcode_lengths
[i
] = read_1_byte (abfd
, line_ptr
);
779 /* Read directory table */
780 while ((cur_dir
= read_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
782 line_ptr
+= bytes_read
;
783 if ((table
->num_dirs
% DIR_ALLOC_CHUNK
) == 0)
785 table
->dirs
= (char **)
786 bfd_realloc (table
->dirs
,
787 (table
->num_dirs
+ DIR_ALLOC_CHUNK
) * sizeof (char *));
791 table
->dirs
[table
->num_dirs
++] = cur_dir
;
793 line_ptr
+= bytes_read
;
795 /* Read file name table */
796 while ((cur_file
= read_string (abfd
, line_ptr
, &bytes_read
)) != NULL
)
798 line_ptr
+= bytes_read
;
799 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
801 table
->files
= (struct fileinfo
*)
802 bfd_realloc (table
->files
,
803 (table
->num_files
+ FILE_ALLOC_CHUNK
)
804 * sizeof (struct fileinfo
));
808 table
->files
[table
->num_files
].name
= cur_file
;
809 table
->files
[table
->num_files
].dir
=
810 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
811 line_ptr
+= bytes_read
;
812 table
->files
[table
->num_files
].time
=
813 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
814 line_ptr
+= bytes_read
;
815 table
->files
[table
->num_files
].size
=
816 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
817 line_ptr
+= bytes_read
;
820 line_ptr
+= bytes_read
;
822 /* Read the statement sequences until there's nothing left. */
823 while (line_ptr
< line_end
)
825 /* state machine registers */
827 char* filename
= concat_filename (table
, 1);
828 unsigned int line
= 1;
829 unsigned int column
= 0;
830 int is_stmt
= lh
.default_is_stmt
;
832 int end_sequence
= 0;
834 /* Decode the table. */
835 while (! end_sequence
)
837 op_code
= read_1_byte (abfd
, line_ptr
);
841 case DW_LNS_extended_op
:
842 line_ptr
+= 1; /* ignore length */
843 extended_op
= read_1_byte (abfd
, line_ptr
);
847 case DW_LNE_end_sequence
:
849 add_line_info (table
, address
, filename
, line
, column
);
851 case DW_LNE_set_address
:
852 address
= read_address (unit
, line_ptr
);
853 address
&= 0xffffffff;
854 line_ptr
+= unit
->addr_size
;
856 case DW_LNE_define_file
:
857 cur_file
= read_string (abfd
, line_ptr
, &bytes_read
);
858 line_ptr
+= bytes_read
;
859 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
861 table
->files
= (struct fileinfo
*)
862 bfd_realloc (table
->files
,
863 (table
->num_files
+ FILE_ALLOC_CHUNK
)
864 * sizeof (struct fileinfo
));
868 table
->files
[table
->num_files
].name
= cur_file
;
869 table
->files
[table
->num_files
].dir
=
870 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
871 line_ptr
+= bytes_read
;
872 table
->files
[table
->num_files
].time
=
873 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
874 line_ptr
+= bytes_read
;
875 table
->files
[table
->num_files
].size
=
876 read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
877 line_ptr
+= bytes_read
;
881 (*_bfd_error_handler
) ("Dwarf Error: mangled line number section.");
882 bfd_set_error (bfd_error_bad_value
);
887 add_line_info (table
, address
, filename
, line
, column
);
890 case DW_LNS_advance_pc
:
891 address
+= lh
.minimum_instruction_length
892 * read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
893 line_ptr
+= bytes_read
;
895 case DW_LNS_advance_line
:
896 line
+= read_signed_leb128 (abfd
, line_ptr
, &bytes_read
);
897 line_ptr
+= bytes_read
;
899 case DW_LNS_set_file
:
903 /* The file and directory tables are 0 based, the references
905 file
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
906 line_ptr
+= bytes_read
;
907 filename
= concat_filename (table
, file
);
910 case DW_LNS_set_column
:
911 column
= read_unsigned_leb128 (abfd
, line_ptr
, &bytes_read
);
912 line_ptr
+= bytes_read
;
914 case DW_LNS_negate_stmt
:
915 is_stmt
= (!is_stmt
);
917 case DW_LNS_set_basic_block
:
920 case DW_LNS_const_add_pc
:
921 address
+= (255 - lh
.opcode_base
) / lh
.line_range
;
923 case DW_LNS_fixed_advance_pc
:
924 address
+= read_2_bytes (abfd
, line_ptr
);
927 default: /* special operand */
928 adj_opcode
= op_code
- lh
.opcode_base
;
929 address
+= (adj_opcode
/ lh
.line_range
)
930 * lh
.minimum_instruction_length
;
931 line
+= lh
.line_base
+ (adj_opcode
% lh
.line_range
);
932 /* append row to matrix using current values */
933 add_line_info (table
, address
, filename
, line
, column
);
943 /* If ADDR is within TABLE set the output parameters and return true,
944 otherwise return false. The output parameters, FILENAME_PTR and
945 LINENUMBER_PTR, are pointers to the objects to be filled in. */
948 lookup_address_in_line_info_table (table
,
952 struct line_info_table
* table
;
954 const char **filename_ptr
;
955 unsigned int *linenumber_ptr
;
957 struct line_info
* each_line
;
958 struct line_info
* next_line
;
960 for (next_line
= 0, each_line
= table
->last_line
;
962 next_line
= each_line
, each_line
= each_line
->prev_line
)
964 if (addr
>= each_line
->address
966 || addr
< next_line
->address
))
968 *filename_ptr
= each_line
->filename
;
969 *linenumber_ptr
= each_line
->line
;
980 /* Function table functions. */
983 struct funcinfo
*prev_func
;
991 /* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return true. */
994 lookup_address_in_function_table (table
,
997 struct funcinfo
* table
;
999 const char **functionname_ptr
;
1001 struct funcinfo
* each_func
;
1003 for (each_func
= table
;
1005 each_func
= each_func
->prev_func
)
1007 if (addr
>= (each_func
->low
& 0xffffffff)
1008 && addr
< (each_func
->high
& 0xffffffff))
1010 *functionname_ptr
= each_func
->name
;
1021 /* DWARF2 Compilation unit functions. */
1024 /* Scan over each die in a comp. unit looking for functions to add
1025 to the function table. */
1028 scan_unit_for_functions (unit
)
1029 struct comp_unit
*unit
;
1031 bfd
*abfd
= unit
->abfd
;
1032 char *info_ptr
= unit
->first_child_die_ptr
;
1033 int nesting_level
= 1;
1035 while (nesting_level
)
1037 unsigned int abbrev_number
, bytes_read
, i
;
1038 struct abbrev_info
*abbrev
;
1039 struct attribute attr
;
1040 struct funcinfo
*func
;
1043 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1044 info_ptr
+= bytes_read
;
1046 if (! abbrev_number
)
1052 abbrev
= lookup_abbrev (abbrev_number
,unit
->abbrevs
);
1055 (*_bfd_error_handler
) ("Dwarf Error: Could not find abbrev number %d.",
1057 bfd_set_error (bfd_error_bad_value
);
1061 if (abbrev
->tag
== DW_TAG_subprogram
)
1063 func
= (struct funcinfo
*) bfd_zalloc (abfd
, sizeof (struct funcinfo
));
1064 func
->prev_func
= unit
->function_table
;
1065 unit
->function_table
= func
;
1070 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1072 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1080 name
= DW_STRING (&attr
);
1082 /* Prefer DW_AT_MIPS_linkage_name over DW_AT_name. */
1083 if (func
->name
== NULL
)
1084 func
->name
= DW_STRING (&attr
);
1087 case DW_AT_MIPS_linkage_name
:
1088 func
->name
= DW_STRING (&attr
);
1092 func
->low
= DW_ADDR (&attr
);
1096 func
->high
= DW_ADDR (&attr
);
1108 name
= DW_STRING (&attr
);
1117 if (abbrev
->has_children
)
1129 /* Parse a DWARF2 compilation unit starting at INFO_PTR. This includes
1130 the compilation unit header that proceeds the DIE's, but does not
1131 include the length field that preceeds each compilation unit header.
1132 END_PTR points one past the end of this comp unit.
1134 This routine does not read the whole compilation unit; only enough
1135 to get to the line number information for the compilation unit.
1138 static struct comp_unit
*
1139 parse_comp_unit (abfd
, info_ptr
, end_ptr
)
1144 struct comp_unit
* unit
;
1146 unsigned short version
;
1147 unsigned int abbrev_offset
;
1148 unsigned char addr_size
;
1149 struct abbrev_info
** abbrevs
;
1151 unsigned int abbrev_number
, bytes_read
, i
;
1152 struct abbrev_info
*abbrev
;
1153 struct attribute attr
;
1155 version
= read_2_bytes (abfd
, info_ptr
);
1157 abbrev_offset
= read_4_bytes (abfd
, info_ptr
);
1159 addr_size
= read_1_byte (abfd
, info_ptr
);
1164 (*_bfd_error_handler
) ("Dwarf Error: found dwarf version '%hu', this reader only handles version 2 information.", version
);
1165 bfd_set_error (bfd_error_bad_value
);
1169 if (addr_size
> sizeof (bfd_vma
))
1171 (*_bfd_error_handler
) ("Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'.",
1174 bfd_set_error (bfd_error_bad_value
);
1178 if (addr_size
!= 4 && addr_size
!= 8)
1180 (*_bfd_error_handler
) ("Dwarf Error: found address size '%u', this reader can only handle address sizes '4' and '8'.", addr_size
);
1181 bfd_set_error (bfd_error_bad_value
);
1185 /* Read the abbrevs for this compilation unit into a table */
1186 abbrevs
= read_abbrevs (abfd
, abbrev_offset
);
1190 abbrev_number
= read_unsigned_leb128 (abfd
, info_ptr
, &bytes_read
);
1191 info_ptr
+= bytes_read
;
1192 if (! abbrev_number
)
1194 (*_bfd_error_handler
) ("Dwarf Error: Bad abbrev number: %d.",
1196 bfd_set_error (bfd_error_bad_value
);
1200 abbrev
= lookup_abbrev (abbrev_number
, abbrevs
);
1203 (*_bfd_error_handler
) ("Dwarf Error: Could not find abbrev number %d.",
1205 bfd_set_error (bfd_error_bad_value
);
1209 unit
= (struct comp_unit
*) bfd_zalloc (abfd
, sizeof (struct comp_unit
));
1211 unit
->addr_size
= addr_size
;
1212 unit
->abbrevs
= abbrevs
;
1213 unit
->end_ptr
= end_ptr
;
1215 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
1217 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
);
1219 /* Store the data if it is of an attribute we want to keep in a
1220 partial symbol table. */
1223 case DW_AT_stmt_list
:
1225 unit
->line_offset
= DW_UNSND (&attr
);
1229 unit
->name
= DW_STRING (&attr
);
1233 unit
->low
= DW_ADDR (&attr
);
1237 unit
->high
= DW_ADDR (&attr
);
1240 case DW_AT_comp_dir
:
1242 char* comp_dir
= DW_STRING (&attr
);
1245 /* Irix 6.2 native cc prepends <machine>.: to the compilation
1246 directory, get rid of it. */
1247 char *cp
= (char*) strchr (comp_dir
, ':');
1249 if (cp
&& cp
!= comp_dir
&& cp
[-1] == '.' && cp
[1] == '/')
1252 unit
->comp_dir
= comp_dir
;
1261 unit
->first_child_die_ptr
= info_ptr
;
1269 /* Return true if UNIT contains the address given by ADDR. */
1272 comp_unit_contains_address (unit
, addr
)
1273 struct comp_unit
* unit
;
1276 return ! unit
->error
1277 && ( addr
>= (unit
->low
& 0xffffffff)
1278 && addr
<= (unit
->high
& 0xffffffff));
1282 /* If UNIT contains ADDR, set the output parameters to the values for
1283 the line containing ADDR. The output parameters, FILENAME_PTR,
1284 FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
1287 Return true of UNIT contains ADDR, and no errors were encountered;
1291 comp_unit_find_nearest_line (unit
, addr
,
1292 filename_ptr
, functionname_ptr
, linenumber_ptr
)
1293 struct comp_unit
* unit
;
1295 const char **filename_ptr
;
1296 const char **functionname_ptr
;
1297 unsigned int *linenumber_ptr
;
1305 if (! unit
->line_table
)
1307 if (! unit
->stmtlist
)
1313 unit
->line_table
= decode_line_info (unit
);
1315 if (! unit
->line_table
)
1321 if (! scan_unit_for_functions (unit
))
1328 line_p
= lookup_address_in_line_info_table (unit
->line_table
,
1332 func_p
= lookup_address_in_function_table (unit
->function_table
,
1335 return line_p
|| func_p
;
1338 /* The DWARF2 version of find_nearest line.
1339 Return true if the line is found without error. */
1342 _bfd_dwarf2_find_nearest_line (abfd
, section
, symbols
, offset
,
1343 filename_ptr
, functionname_ptr
, linenumber_ptr
)
1348 const char **filename_ptr
;
1349 const char **functionname_ptr
;
1350 unsigned int *linenumber_ptr
;
1352 /* Read each compilation unit from the section .debug_info, and check
1353 to see if it contains the address we are searching for. If yes,
1354 lookup the address, and return the line number info. If no, go
1355 on to the next compilation unit.
1357 We keep a list of all the previously read compilation units, and
1358 a pointer to the next un-read compilation unit. Check the
1359 previously read units before reading more.
1362 struct dwarf2_debug
*stash
= elf_tdata (abfd
)->dwarf2_find_line_info
;
1364 /* What address are we looking for? */
1365 bfd_vma addr
= offset
+ section
->vma
;
1367 struct comp_unit
* each
;
1369 *filename_ptr
= NULL
;
1370 *functionname_ptr
= NULL
;
1371 *linenumber_ptr
= 0;
1378 stash
= elf_tdata (abfd
)->dwarf2_find_line_info
=
1379 (struct dwarf2_debug
*) bfd_zalloc (abfd
, sizeof (struct dwarf2_debug
));
1384 msec
= bfd_get_section_by_name (abfd
, ".debug_info");
1387 /* No dwarf2 info. Note that at this point the stash
1388 has been allocated, but contains zeros, this lets
1389 future calls to this function fail quicker. */
1393 size
= bfd_get_section_size_before_reloc (msec
);
1394 stash
->info_ptr
= (unsigned char*) bfd_alloc (abfd
, size
);
1396 if (! stash
->info_ptr
)
1399 if (! bfd_get_section_contents (abfd
, msec
, stash
->info_ptr
, 0, size
))
1401 stash
->info_ptr
= 0;
1405 stash
->info_ptr_end
= stash
->info_ptr
+ size
;
1409 /* A null info_ptr indicates that there is no dwarf2 info
1410 (or that an error occured while setting up the stash). */
1412 if (! stash
->info_ptr
)
1417 /* Check the previously read comp. units first. */
1419 for (each
= stash
->all_comp_units
; each
; each
= each
->next_unit
)
1421 if (comp_unit_contains_address (each
, addr
))
1422 return comp_unit_find_nearest_line (each
, addr
,
1429 /* Read each remaining comp. units checking each as they are read. */
1430 while (stash
->info_ptr
< stash
->info_ptr_end
)
1432 struct comp_unit
* each
;
1433 unsigned int length
;
1435 length
= read_4_bytes (abfd
, stash
->info_ptr
);
1436 stash
->info_ptr
+= 4;
1440 each
= parse_comp_unit (abfd
, stash
->info_ptr
,
1441 stash
->info_ptr
+ length
);
1442 stash
->info_ptr
+= length
;
1446 each
->next_unit
= stash
->all_comp_units
;
1447 stash
->all_comp_units
= each
;
1449 if (comp_unit_contains_address (each
, addr
))
1450 return comp_unit_find_nearest_line (each
, addr
,