2 Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
3 2004, 2005, 2006, 2007, 2008, 2009, 2010 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 3 of the License, or (at
21 your option) any later version.
23 This program is distributed in the hope that it will be useful, but
24 WITHOUT ANY WARRANTY; without even the implied warranty of
25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
26 General Public License for more details.
28 You should have received a copy of the GNU General Public License
29 along with this program; if not, write to the Free Software
30 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
31 MA 02110-1301, USA. */
35 #include "libiberty.h"
40 /* The data in the .debug_line statement prologue looks like this. */
45 unsigned short version;
46 bfd_vma prologue_length;
47 unsigned char minimum_instruction_length;
48 unsigned char maximum_ops_per_insn;
49 unsigned char default_is_stmt;
51 unsigned char line_range;
52 unsigned char opcode_base;
53 unsigned char *standard_opcode_lengths;
56 /* Attributes have a name and a value. */
60 enum dwarf_attribute name;
65 struct dwarf_block *blk;
72 /* Blocks are a bunch of untyped bytes. */
79 struct adjusted_section
87 /* A list of all previously read comp_units. */
88 struct comp_unit *all_comp_units;
90 /* Last comp unit in list above. */
91 struct comp_unit *last_comp_unit;
93 /* Names of the debug sections. */
94 const struct dwarf_debug_section *debug_sections;
96 /* The next unread compilation unit within the .debug_info section.
97 Zero indicates that the .debug_info section has not been loaded
101 /* Pointer to the end of the .debug_info section memory buffer. */
102 bfd_byte *info_ptr_end;
104 /* Pointer to the bfd, section and address of the beginning of the
105 section. The bfd might be different than expected because of
106 gnu_debuglink sections. */
109 bfd_byte *sec_info_ptr;
111 /* A pointer to the memory block allocated for info_ptr. Neither
112 info_ptr nor sec_info_ptr are guaranteed to stay pointing to the
113 beginning of the malloc block. This is used only to free the
115 bfd_byte *info_ptr_memory;
117 /* Pointer to the symbol table. */
120 /* Pointer to the .debug_abbrev section loaded into memory. */
121 bfd_byte *dwarf_abbrev_buffer;
123 /* Length of the loaded .debug_abbrev section. */
124 bfd_size_type dwarf_abbrev_size;
126 /* Buffer for decode_line_info. */
127 bfd_byte *dwarf_line_buffer;
129 /* Length of the loaded .debug_line section. */
130 bfd_size_type dwarf_line_size;
132 /* Pointer to the .debug_str section loaded into memory. */
133 bfd_byte *dwarf_str_buffer;
135 /* Length of the loaded .debug_str section. */
136 bfd_size_type dwarf_str_size;
138 /* Pointer to the .debug_ranges section loaded into memory. */
139 bfd_byte *dwarf_ranges_buffer;
141 /* Length of the loaded .debug_ranges section. */
142 bfd_size_type dwarf_ranges_size;
144 /* If the most recent call to bfd_find_nearest_line was given an
145 address in an inlined function, preserve a pointer into the
146 calling chain for subsequent calls to bfd_find_inliner_info to
148 struct funcinfo *inliner_chain;
150 /* Number of sections whose VMA we must adjust. */
151 unsigned int adjusted_section_count;
153 /* Array of sections with adjusted VMA. */
154 struct adjusted_section *adjusted_sections;
156 /* Number of times find_line is called. This is used in
157 the heuristic for enabling the info hash tables. */
160 #define STASH_INFO_HASH_TRIGGER 100
162 /* Hash table mapping symbol names to function infos. */
163 struct info_hash_table *funcinfo_hash_table;
165 /* Hash table mapping symbol names to variable infos. */
166 struct info_hash_table *varinfo_hash_table;
168 /* Head of comp_unit list in the last hash table update. */
169 struct comp_unit *hash_units_head;
171 /* Status of info hash. */
172 int info_hash_status;
173 #define STASH_INFO_HASH_OFF 0
174 #define STASH_INFO_HASH_ON 1
175 #define STASH_INFO_HASH_DISABLED 2
185 /* A minimal decoding of DWARF2 compilation units. We only decode
186 what's needed to get to the line number information. */
190 /* Chain the previously read compilation units. */
191 struct comp_unit *next_unit;
193 /* Likewise, chain the compilation unit read after this one.
194 The comp units are stored in reversed reading order. */
195 struct comp_unit *prev_unit;
197 /* Keep the bfd convenient (for memory allocation). */
200 /* The lowest and highest addresses contained in this compilation
201 unit as specified in the compilation unit header. */
202 struct arange arange;
204 /* The DW_AT_name attribute (for error messages). */
207 /* The abbrev hash table. */
208 struct abbrev_info **abbrevs;
210 /* Note that an error was found by comp_unit_find_nearest_line. */
213 /* The DW_AT_comp_dir attribute. */
216 /* TRUE if there is a line number table associated with this comp. unit. */
219 /* Pointer to the current comp_unit so that we can find a given entry
221 bfd_byte *info_ptr_unit;
223 /* Pointer to the start of the debug section, for DW_FORM_ref_addr. */
224 bfd_byte *sec_info_ptr;
226 /* The offset into .debug_line of the line number table. */
227 unsigned long line_offset;
229 /* Pointer to the first child die for the comp unit. */
230 bfd_byte *first_child_die_ptr;
232 /* The end of the comp unit. */
235 /* The decoded line number, NULL if not yet decoded. */
236 struct line_info_table *line_table;
238 /* A list of the functions found in this comp. unit. */
239 struct funcinfo *function_table;
241 /* A list of the variables found in this comp. unit. */
242 struct varinfo *variable_table;
244 /* Pointer to dwarf2_debug structure. */
245 struct dwarf2_debug *stash;
247 /* DWARF format version for this unit - from unit header. */
250 /* Address size for this unit - from unit header. */
251 unsigned char addr_size;
253 /* Offset size for this unit - from unit header. */
254 unsigned char offset_size;
256 /* Base address for this unit - from DW_AT_low_pc attribute of
257 DW_TAG_compile_unit DIE */
258 bfd_vma base_address;
260 /* TRUE if symbols are cached in hash table for faster lookup by name. */
264 /* This data structure holds the information of an abbrev. */
267 unsigned int number; /* Number identifying abbrev. */
268 enum dwarf_tag tag; /* DWARF tag. */
269 int has_children; /* Boolean. */
270 unsigned int num_attrs; /* Number of attributes. */
271 struct attr_abbrev *attrs; /* An array of attribute descriptions. */
272 struct abbrev_info *next; /* Next in chain. */
277 enum dwarf_attribute name;
278 enum dwarf_form form;
281 /* Map of uncompressed DWARF debug section name to compressed one. It
282 is terminated by NULL uncompressed_name. */
284 const struct dwarf_debug_section dwarf_debug_sections[] =
286 { ".debug_abbrev", ".zdebug_abbrev" },
287 { ".debug_aranges", ".zdebug_aranges" },
288 { ".debug_frame", ".zdebug_frame" },
289 { ".debug_info", ".zdebug_info" },
290 { ".debug_line", ".zdebug_line" },
291 { ".debug_loc", ".zdebug_loc" },
292 { ".debug_macinfo", ".zdebug_macinfo" },
293 { ".debug_macro", ".zdebug_macro" },
294 { ".debug_pubnames", ".zdebug_pubnames" },
295 { ".debug_pubtypes", ".zdebug_pubtypes" },
296 { ".debug_ranges", ".zdebug_ranges" },
297 { ".debug_static_func", ".zdebug_static_func" },
298 { ".debug_static_vars", ".zdebug_static_vars" },
299 { ".debug_str", ".zdebug_str", },
300 { ".debug_types", ".zdebug_types" },
301 /* GNU DWARF 1 extensions */
302 { ".debug_sfnames", ".zdebug_sfnames" },
303 { ".debug_srcinfo", ".zebug_srcinfo" },
304 /* SGI/MIPS DWARF 2 extensions */
305 { ".debug_funcnames", ".zdebug_funcnames" },
306 { ".debug_typenames", ".zdebug_typenames" },
307 { ".debug_varnames", ".zdebug_varnames" },
308 { ".debug_weaknames", ".zdebug_weaknames" },
312 enum dwarf_debug_section_enum
337 #ifndef ABBREV_HASH_SIZE
338 #define ABBREV_HASH_SIZE 121
340 #ifndef ATTR_ALLOC_CHUNK
341 #define ATTR_ALLOC_CHUNK 4
344 /* Variable and function hash tables. This is used to speed up look-up
345 in lookup_symbol_in_var_table() and lookup_symbol_in_function_table().
346 In order to share code between variable and function infos, we use
347 a list of untyped pointer for all variable/function info associated with
348 a symbol. We waste a bit of memory for list with one node but that
349 simplifies the code. */
351 struct info_list_node
353 struct info_list_node *next;
357 /* Info hash entry. */
358 struct info_hash_entry
360 struct bfd_hash_entry root;
361 struct info_list_node *head;
364 struct info_hash_table
366 struct bfd_hash_table base;
369 /* Function to create a new entry in info hash table. */
371 static struct bfd_hash_entry *
372 info_hash_table_newfunc (struct bfd_hash_entry *entry,
373 struct bfd_hash_table *table,
376 struct info_hash_entry *ret = (struct info_hash_entry *) entry;
378 /* Allocate the structure if it has not already been allocated by a
382 ret = (struct info_hash_entry *) bfd_hash_allocate (table,
388 /* Call the allocation method of the base class. */
389 ret = ((struct info_hash_entry *)
390 bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string));
392 /* Initialize the local fields here. */
396 return (struct bfd_hash_entry *) ret;
399 /* Function to create a new info hash table. It returns a pointer to the
400 newly created table or NULL if there is any error. We need abfd
401 solely for memory allocation. */
403 static struct info_hash_table *
404 create_info_hash_table (bfd *abfd)
406 struct info_hash_table *hash_table;
408 hash_table = ((struct info_hash_table *)
409 bfd_alloc (abfd, sizeof (struct info_hash_table)));
413 if (!bfd_hash_table_init (&hash_table->base, info_hash_table_newfunc,
414 sizeof (struct info_hash_entry)))
416 bfd_release (abfd, hash_table);
423 /* Insert an info entry into an info hash table. We do not check of
424 duplicate entries. Also, the caller need to guarantee that the
425 right type of info in inserted as info is passed as a void* pointer.
426 This function returns true if there is no error. */
429 insert_info_hash_table (struct info_hash_table *hash_table,
434 struct info_hash_entry *entry;
435 struct info_list_node *node;
437 entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base,
442 node = (struct info_list_node *) bfd_hash_allocate (&hash_table->base,
448 node->next = entry->head;
454 /* Look up an info entry list from an info hash table. Return NULL
457 static struct info_list_node *
458 lookup_info_hash_table (struct info_hash_table *hash_table, const char *key)
460 struct info_hash_entry *entry;
462 entry = (struct info_hash_entry*) bfd_hash_lookup (&hash_table->base, key,
464 return entry ? entry->head : NULL;
467 /* Read a section into its appropriate place in the dwarf2_debug
468 struct (indicated by SECTION_BUFFER and SECTION_SIZE). If SYMS is
469 not NULL, use bfd_simple_get_relocated_section_contents to read the
470 section contents, otherwise use bfd_get_section_contents. Fail if
471 the located section does not contain at least OFFSET bytes. */
474 read_section (bfd * abfd,
475 const struct dwarf_debug_section *sec,
478 bfd_byte ** section_buffer,
479 bfd_size_type * section_size)
482 const char *section_name = sec->uncompressed_name;
484 /* read_section is a noop if the section has already been read. */
485 if (!*section_buffer)
487 msec = bfd_get_section_by_name (abfd, section_name);
490 section_name = sec->compressed_name;
491 if (section_name != NULL)
492 msec = bfd_get_section_by_name (abfd, section_name);
496 (*_bfd_error_handler) (_("Dwarf Error: Can't find %s section."),
497 sec->uncompressed_name);
498 bfd_set_error (bfd_error_bad_value);
502 *section_size = msec->rawsize ? msec->rawsize : msec->size;
506 = bfd_simple_get_relocated_section_contents (abfd, msec, NULL, syms);
507 if (! *section_buffer)
512 *section_buffer = (bfd_byte *) bfd_malloc (*section_size);
513 if (! *section_buffer)
515 if (! bfd_get_section_contents (abfd, msec, *section_buffer,
521 /* It is possible to get a bad value for the offset into the section
522 that the client wants. Validate it here to avoid trouble later. */
523 if (offset != 0 && offset >= *section_size)
525 (*_bfd_error_handler) (_("Dwarf Error: Offset (%lu)"
526 " greater than or equal to %s size (%lu)."),
527 (long) offset, section_name, *section_size);
528 bfd_set_error (bfd_error_bad_value);
536 The following function up to the END VERBATIM mark are
537 copied directly from dwarf2read.c. */
539 /* Read dwarf information from a buffer. */
542 read_1_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf)
544 return bfd_get_8 (abfd, buf);
548 read_1_signed_byte (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf)
550 return bfd_get_signed_8 (abfd, buf);
554 read_2_bytes (bfd *abfd, bfd_byte *buf)
556 return bfd_get_16 (abfd, buf);
560 read_4_bytes (bfd *abfd, bfd_byte *buf)
562 return bfd_get_32 (abfd, buf);
566 read_8_bytes (bfd *abfd, bfd_byte *buf)
568 return bfd_get_64 (abfd, buf);
572 read_n_bytes (bfd *abfd ATTRIBUTE_UNUSED,
574 unsigned int size ATTRIBUTE_UNUSED)
580 read_string (bfd *abfd ATTRIBUTE_UNUSED,
582 unsigned int *bytes_read_ptr)
584 /* Return a pointer to the embedded string. */
585 char *str = (char *) buf;
593 *bytes_read_ptr = strlen (str) + 1;
600 read_indirect_string (struct comp_unit * unit,
602 unsigned int * bytes_read_ptr)
605 struct dwarf2_debug *stash = unit->stash;
608 if (unit->offset_size == 4)
609 offset = read_4_bytes (unit->abfd, buf);
611 offset = read_8_bytes (unit->abfd, buf);
613 *bytes_read_ptr = unit->offset_size;
615 if (! read_section (unit->abfd, &stash->debug_sections[debug_str],
617 &stash->dwarf_str_buffer, &stash->dwarf_str_size))
620 str = (char *) stash->dwarf_str_buffer + offset;
627 read_address (struct comp_unit *unit, bfd_byte *buf)
629 int signed_vma = get_elf_backend_data (unit->abfd)->sign_extend_vma;
633 switch (unit->addr_size)
636 return bfd_get_signed_64 (unit->abfd, buf);
638 return bfd_get_signed_32 (unit->abfd, buf);
640 return bfd_get_signed_16 (unit->abfd, buf);
647 switch (unit->addr_size)
650 return bfd_get_64 (unit->abfd, buf);
652 return bfd_get_32 (unit->abfd, buf);
654 return bfd_get_16 (unit->abfd, buf);
661 /* Lookup an abbrev_info structure in the abbrev hash table. */
663 static struct abbrev_info *
664 lookup_abbrev (unsigned int number, struct abbrev_info **abbrevs)
666 unsigned int hash_number;
667 struct abbrev_info *abbrev;
669 hash_number = number % ABBREV_HASH_SIZE;
670 abbrev = abbrevs[hash_number];
674 if (abbrev->number == number)
677 abbrev = abbrev->next;
683 /* In DWARF version 2, the description of the debugging information is
684 stored in a separate .debug_abbrev section. Before we read any
685 dies from a section we read in all abbreviations and install them
688 static struct abbrev_info**
689 read_abbrevs (bfd *abfd, bfd_uint64_t offset, struct dwarf2_debug *stash)
691 struct abbrev_info **abbrevs;
692 bfd_byte *abbrev_ptr;
693 struct abbrev_info *cur_abbrev;
694 unsigned int abbrev_number, bytes_read, abbrev_name;
695 unsigned int abbrev_form, hash_number;
698 if (! read_section (abfd, &stash->debug_sections[debug_abbrev],
700 &stash->dwarf_abbrev_buffer, &stash->dwarf_abbrev_size))
703 amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE;
704 abbrevs = (struct abbrev_info **) bfd_zalloc (abfd, amt);
708 abbrev_ptr = stash->dwarf_abbrev_buffer + offset;
709 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
710 abbrev_ptr += bytes_read;
712 /* Loop until we reach an abbrev number of 0. */
713 while (abbrev_number)
715 amt = sizeof (struct abbrev_info);
716 cur_abbrev = (struct abbrev_info *) bfd_zalloc (abfd, amt);
717 if (cur_abbrev == NULL)
720 /* Read in abbrev header. */
721 cur_abbrev->number = abbrev_number;
722 cur_abbrev->tag = (enum dwarf_tag)
723 read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
724 abbrev_ptr += bytes_read;
725 cur_abbrev->has_children = read_1_byte (abfd, abbrev_ptr);
728 /* Now read in declarations. */
729 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
730 abbrev_ptr += bytes_read;
731 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
732 abbrev_ptr += bytes_read;
736 if ((cur_abbrev->num_attrs % ATTR_ALLOC_CHUNK) == 0)
738 struct attr_abbrev *tmp;
740 amt = cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK;
741 amt *= sizeof (struct attr_abbrev);
742 tmp = (struct attr_abbrev *) bfd_realloc (cur_abbrev->attrs, amt);
747 for (i = 0; i < ABBREV_HASH_SIZE; i++)
749 struct abbrev_info *abbrev = abbrevs[i];
753 free (abbrev->attrs);
754 abbrev = abbrev->next;
759 cur_abbrev->attrs = tmp;
762 cur_abbrev->attrs[cur_abbrev->num_attrs].name
763 = (enum dwarf_attribute) abbrev_name;
764 cur_abbrev->attrs[cur_abbrev->num_attrs++].form
765 = (enum dwarf_form) abbrev_form;
766 abbrev_name = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
767 abbrev_ptr += bytes_read;
768 abbrev_form = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
769 abbrev_ptr += bytes_read;
772 hash_number = abbrev_number % ABBREV_HASH_SIZE;
773 cur_abbrev->next = abbrevs[hash_number];
774 abbrevs[hash_number] = cur_abbrev;
776 /* Get next abbreviation.
777 Under Irix6 the abbreviations for a compilation unit are not
778 always properly terminated with an abbrev number of 0.
779 Exit loop if we encounter an abbreviation which we have
780 already read (which means we are about to read the abbreviations
781 for the next compile unit) or if the end of the abbreviation
783 if ((unsigned int) (abbrev_ptr - stash->dwarf_abbrev_buffer)
784 >= stash->dwarf_abbrev_size)
786 abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read);
787 abbrev_ptr += bytes_read;
788 if (lookup_abbrev (abbrev_number,abbrevs) != NULL)
795 /* Read an attribute value described by an attribute form. */
798 read_attribute_value (struct attribute *attr,
800 struct comp_unit *unit,
803 bfd *abfd = unit->abfd;
804 unsigned int bytes_read;
805 struct dwarf_block *blk;
808 attr->form = (enum dwarf_form) form;
812 case DW_FORM_ref_addr:
813 /* DW_FORM_ref_addr is an address in DWARF2, and an offset in
815 if (unit->version == 3 || unit->version == 4)
817 if (unit->offset_size == 4)
818 attr->u.val = read_4_bytes (unit->abfd, info_ptr);
820 attr->u.val = read_8_bytes (unit->abfd, info_ptr);
821 info_ptr += unit->offset_size;
826 attr->u.val = read_address (unit, info_ptr);
827 info_ptr += unit->addr_size;
829 case DW_FORM_sec_offset:
830 if (unit->offset_size == 4)
831 attr->u.val = read_4_bytes (unit->abfd, info_ptr);
833 attr->u.val = read_8_bytes (unit->abfd, info_ptr);
834 info_ptr += unit->offset_size;
837 amt = sizeof (struct dwarf_block);
838 blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
841 blk->size = read_2_bytes (abfd, info_ptr);
843 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
844 info_ptr += blk->size;
848 amt = sizeof (struct dwarf_block);
849 blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
852 blk->size = read_4_bytes (abfd, info_ptr);
854 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
855 info_ptr += blk->size;
859 attr->u.val = read_2_bytes (abfd, info_ptr);
863 attr->u.val = read_4_bytes (abfd, info_ptr);
867 attr->u.val = read_8_bytes (abfd, info_ptr);
871 attr->u.str = read_string (abfd, info_ptr, &bytes_read);
872 info_ptr += bytes_read;
875 attr->u.str = read_indirect_string (unit, info_ptr, &bytes_read);
876 info_ptr += bytes_read;
878 case DW_FORM_exprloc:
880 amt = sizeof (struct dwarf_block);
881 blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
884 blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
885 info_ptr += bytes_read;
886 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
887 info_ptr += blk->size;
891 amt = sizeof (struct dwarf_block);
892 blk = (struct dwarf_block *) bfd_alloc (abfd, amt);
895 blk->size = read_1_byte (abfd, info_ptr);
897 blk->data = read_n_bytes (abfd, info_ptr, blk->size);
898 info_ptr += blk->size;
902 attr->u.val = read_1_byte (abfd, info_ptr);
906 attr->u.val = read_1_byte (abfd, info_ptr);
909 case DW_FORM_flag_present:
913 attr->u.sval = read_signed_leb128 (abfd, info_ptr, &bytes_read);
914 info_ptr += bytes_read;
917 attr->u.val = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
918 info_ptr += bytes_read;
921 attr->u.val = read_1_byte (abfd, info_ptr);
925 attr->u.val = read_2_bytes (abfd, info_ptr);
929 attr->u.val = read_4_bytes (abfd, info_ptr);
933 attr->u.val = read_8_bytes (abfd, info_ptr);
936 case DW_FORM_ref_sig8:
937 attr->u.val = read_8_bytes (abfd, info_ptr);
940 case DW_FORM_ref_udata:
941 attr->u.val = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
942 info_ptr += bytes_read;
944 case DW_FORM_indirect:
945 form = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
946 info_ptr += bytes_read;
947 info_ptr = read_attribute_value (attr, form, unit, info_ptr);
950 (*_bfd_error_handler) (_("Dwarf Error: Invalid or unhandled FORM value: %u."),
952 bfd_set_error (bfd_error_bad_value);
958 /* Read an attribute described by an abbreviated attribute. */
961 read_attribute (struct attribute *attr,
962 struct attr_abbrev *abbrev,
963 struct comp_unit *unit,
966 attr->name = abbrev->name;
967 info_ptr = read_attribute_value (attr, abbrev->form, unit, info_ptr);
971 /* Source line information table routines. */
973 #define FILE_ALLOC_CHUNK 5
974 #define DIR_ALLOC_CHUNK 5
978 struct line_info* prev_line;
983 unsigned char op_index;
984 unsigned char end_sequence; /* End of (sequential) code sequence. */
998 struct line_sequence* prev_sequence;
999 struct line_info* last_line; /* Largest VMA. */
1002 struct line_info_table
1005 unsigned int num_files;
1006 unsigned int num_dirs;
1007 unsigned int num_sequences;
1010 struct fileinfo* files;
1011 struct line_sequence* sequences;
1012 struct line_info* lcl_head; /* Local head; used in 'add_line_info'. */
1015 /* Remember some information about each function. If the function is
1016 inlined (DW_TAG_inlined_subroutine) it may have two additional
1017 attributes, DW_AT_call_file and DW_AT_call_line, which specify the
1018 source code location where this function was inlined. */
1022 /* Pointer to previous function in list of all functions. */
1023 struct funcinfo *prev_func;
1024 /* Pointer to function one scope higher. */
1025 struct funcinfo *caller_func;
1026 /* Source location file name where caller_func inlines this func. */
1028 /* Source location line number where caller_func inlines this func. */
1030 /* Source location file name. */
1032 /* Source location line number. */
1036 struct arange arange;
1037 /* Where the symbol is defined. */
1043 /* Pointer to previous variable in list of all variables */
1044 struct varinfo *prev_var;
1045 /* Source location file name */
1047 /* Source location line number */
1052 /* Where the symbol is defined */
1054 /* Is this a stack variable? */
1055 unsigned int stack: 1;
1058 /* Return TRUE if NEW_LINE should sort after LINE. */
1060 static inline bfd_boolean
1061 new_line_sorts_after (struct line_info *new_line, struct line_info *line)
1063 return (new_line->address > line->address
1064 || (new_line->address == line->address
1065 && (new_line->op_index > line->op_index
1066 || (new_line->op_index == line->op_index
1067 && new_line->end_sequence < line->end_sequence))));
1071 /* Adds a new entry to the line_info list in the line_info_table, ensuring
1072 that the list is sorted. Note that the line_info list is sorted from
1073 highest to lowest VMA (with possible duplicates); that is,
1074 line_info->prev_line always accesses an equal or smaller VMA. */
1077 add_line_info (struct line_info_table *table,
1079 unsigned char op_index,
1082 unsigned int column,
1085 bfd_size_type amt = sizeof (struct line_info);
1086 struct line_sequence* seq = table->sequences;
1087 struct line_info* info = (struct line_info *) bfd_alloc (table->abfd, amt);
1092 /* Set member data of 'info'. */
1093 info->prev_line = NULL;
1094 info->address = address;
1095 info->op_index = op_index;
1097 info->column = column;
1098 info->end_sequence = end_sequence;
1100 if (filename && filename[0])
1102 info->filename = (char *) bfd_alloc (table->abfd, strlen (filename) + 1);
1103 if (info->filename == NULL)
1105 strcpy (info->filename, filename);
1108 info->filename = NULL;
1110 /* Find the correct location for 'info'. Normally we will receive
1111 new line_info data 1) in order and 2) with increasing VMAs.
1112 However some compilers break the rules (cf. decode_line_info) and
1113 so we include some heuristics for quickly finding the correct
1114 location for 'info'. In particular, these heuristics optimize for
1115 the common case in which the VMA sequence that we receive is a
1116 list of locally sorted VMAs such as
1117 p...z a...j (where a < j < p < z)
1119 Note: table->lcl_head is used to head an *actual* or *possible*
1120 sub-sequence within the list (such as a...j) that is not directly
1121 headed by table->last_line
1123 Note: we may receive duplicate entries from 'decode_line_info'. */
1126 && seq->last_line->address == address
1127 && seq->last_line->op_index == op_index
1128 && seq->last_line->end_sequence == end_sequence)
1130 /* We only keep the last entry with the same address and end
1131 sequence. See PR ld/4986. */
1132 if (table->lcl_head == seq->last_line)
1133 table->lcl_head = info;
1134 info->prev_line = seq->last_line->prev_line;
1135 seq->last_line = info;
1137 else if (!seq || seq->last_line->end_sequence)
1139 /* Start a new line sequence. */
1140 amt = sizeof (struct line_sequence);
1141 seq = (struct line_sequence *) bfd_malloc (amt);
1144 seq->low_pc = address;
1145 seq->prev_sequence = table->sequences;
1146 seq->last_line = info;
1147 table->lcl_head = info;
1148 table->sequences = seq;
1149 table->num_sequences++;
1151 else if (new_line_sorts_after (info, seq->last_line))
1153 /* Normal case: add 'info' to the beginning of the current sequence. */
1154 info->prev_line = seq->last_line;
1155 seq->last_line = info;
1157 /* lcl_head: initialize to head a *possible* sequence at the end. */
1158 if (!table->lcl_head)
1159 table->lcl_head = info;
1161 else if (!new_line_sorts_after (info, table->lcl_head)
1162 && (!table->lcl_head->prev_line
1163 || new_line_sorts_after (info, table->lcl_head->prev_line)))
1165 /* Abnormal but easy: lcl_head is the head of 'info'. */
1166 info->prev_line = table->lcl_head->prev_line;
1167 table->lcl_head->prev_line = info;
1171 /* Abnormal and hard: Neither 'last_line' nor 'lcl_head'
1172 are valid heads for 'info'. Reset 'lcl_head'. */
1173 struct line_info* li2 = seq->last_line; /* Always non-NULL. */
1174 struct line_info* li1 = li2->prev_line;
1178 if (!new_line_sorts_after (info, li2)
1179 && new_line_sorts_after (info, li1))
1182 li2 = li1; /* always non-NULL */
1183 li1 = li1->prev_line;
1185 table->lcl_head = li2;
1186 info->prev_line = table->lcl_head->prev_line;
1187 table->lcl_head->prev_line = info;
1188 if (address < seq->low_pc)
1189 seq->low_pc = address;
1194 /* Extract a fully qualified filename from a line info table.
1195 The returned string has been malloc'ed and it is the caller's
1196 responsibility to free it. */
1199 concat_filename (struct line_info_table *table, unsigned int file)
1203 if (file - 1 >= table->num_files)
1205 /* FILE == 0 means unknown. */
1207 (*_bfd_error_handler)
1208 (_("Dwarf Error: mangled line number section (bad file number)."));
1209 return strdup ("<unknown>");
1212 filename = table->files[file - 1].name;
1214 if (!IS_ABSOLUTE_PATH (filename))
1216 char *dir_name = NULL;
1217 char *subdir_name = NULL;
1221 if (table->files[file - 1].dir)
1222 subdir_name = table->dirs[table->files[file - 1].dir - 1];
1224 if (!subdir_name || !IS_ABSOLUTE_PATH (subdir_name))
1225 dir_name = table->comp_dir;
1229 dir_name = subdir_name;
1234 return strdup (filename);
1236 len = strlen (dir_name) + strlen (filename) + 2;
1240 len += strlen (subdir_name) + 1;
1241 name = (char *) bfd_malloc (len);
1243 sprintf (name, "%s/%s/%s", dir_name, subdir_name, filename);
1247 name = (char *) bfd_malloc (len);
1249 sprintf (name, "%s/%s", dir_name, filename);
1255 return strdup (filename);
1259 arange_add (const struct comp_unit *unit, struct arange *first_arange,
1260 bfd_vma low_pc, bfd_vma high_pc)
1262 struct arange *arange;
1264 /* Ignore empty ranges. */
1265 if (low_pc == high_pc)
1268 /* If the first arange is empty, use it. */
1269 if (first_arange->high == 0)
1271 first_arange->low = low_pc;
1272 first_arange->high = high_pc;
1276 /* Next see if we can cheaply extend an existing range. */
1277 arange = first_arange;
1280 if (low_pc == arange->high)
1282 arange->high = high_pc;
1285 if (high_pc == arange->low)
1287 arange->low = low_pc;
1290 arange = arange->next;
1294 /* Need to allocate a new arange and insert it into the arange list.
1295 Order isn't significant, so just insert after the first arange. */
1296 arange = (struct arange *) bfd_alloc (unit->abfd, sizeof (*arange));
1299 arange->low = low_pc;
1300 arange->high = high_pc;
1301 arange->next = first_arange->next;
1302 first_arange->next = arange;
1306 /* Compare function for line sequences. */
1309 compare_sequences (const void* a, const void* b)
1311 const struct line_sequence* seq1 = a;
1312 const struct line_sequence* seq2 = b;
1314 /* Sort by low_pc as the primary key. */
1315 if (seq1->low_pc < seq2->low_pc)
1317 if (seq1->low_pc > seq2->low_pc)
1320 /* If low_pc values are equal, sort in reverse order of
1321 high_pc, so that the largest region comes first. */
1322 if (seq1->last_line->address < seq2->last_line->address)
1324 if (seq1->last_line->address > seq2->last_line->address)
1327 if (seq1->last_line->op_index < seq2->last_line->op_index)
1329 if (seq1->last_line->op_index > seq2->last_line->op_index)
1335 /* Sort the line sequences for quick lookup. */
1338 sort_line_sequences (struct line_info_table* table)
1341 struct line_sequence* sequences;
1342 struct line_sequence* seq;
1344 unsigned int num_sequences = table->num_sequences;
1345 bfd_vma last_high_pc;
1347 if (num_sequences == 0)
1350 /* Allocate space for an array of sequences. */
1351 amt = sizeof (struct line_sequence) * num_sequences;
1352 sequences = (struct line_sequence *) bfd_alloc (table->abfd, amt);
1353 if (sequences == NULL)
1356 /* Copy the linked list into the array, freeing the original nodes. */
1357 seq = table->sequences;
1358 for (n = 0; n < num_sequences; n++)
1360 struct line_sequence* last_seq = seq;
1363 sequences[n].low_pc = seq->low_pc;
1364 sequences[n].prev_sequence = NULL;
1365 sequences[n].last_line = seq->last_line;
1366 seq = seq->prev_sequence;
1369 BFD_ASSERT (seq == NULL);
1371 qsort (sequences, n, sizeof (struct line_sequence), compare_sequences);
1373 /* Make the list binary-searchable by trimming overlapping entries
1374 and removing nested entries. */
1376 last_high_pc = sequences[0].last_line->address;
1377 for (n = 1; n < table->num_sequences; n++)
1379 if (sequences[n].low_pc < last_high_pc)
1381 if (sequences[n].last_line->address <= last_high_pc)
1382 /* Skip nested entries. */
1385 /* Trim overlapping entries. */
1386 sequences[n].low_pc = last_high_pc;
1388 last_high_pc = sequences[n].last_line->address;
1389 if (n > num_sequences)
1391 /* Close up the gap. */
1392 sequences[num_sequences].low_pc = sequences[n].low_pc;
1393 sequences[num_sequences].last_line = sequences[n].last_line;
1398 table->sequences = sequences;
1399 table->num_sequences = num_sequences;
1403 /* Decode the line number information for UNIT. */
1405 static struct line_info_table*
1406 decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
1408 bfd *abfd = unit->abfd;
1409 struct line_info_table* table;
1412 struct line_head lh;
1413 unsigned int i, bytes_read, offset_size;
1414 char *cur_file, *cur_dir;
1415 unsigned char op_code, extended_op, adj_opcode;
1416 unsigned int exop_len;
1419 if (! read_section (abfd, &stash->debug_sections[debug_line],
1420 stash->syms, unit->line_offset,
1421 &stash->dwarf_line_buffer, &stash->dwarf_line_size))
1424 amt = sizeof (struct line_info_table);
1425 table = (struct line_info_table *) bfd_alloc (abfd, amt);
1429 table->comp_dir = unit->comp_dir;
1431 table->num_files = 0;
1432 table->files = NULL;
1434 table->num_dirs = 0;
1437 table->num_sequences = 0;
1438 table->sequences = NULL;
1440 table->lcl_head = NULL;
1442 line_ptr = stash->dwarf_line_buffer + unit->line_offset;
1444 /* Read in the prologue. */
1445 lh.total_length = read_4_bytes (abfd, line_ptr);
1448 if (lh.total_length == 0xffffffff)
1450 lh.total_length = read_8_bytes (abfd, line_ptr);
1454 else if (lh.total_length == 0 && unit->addr_size == 8)
1456 /* Handle (non-standard) 64-bit DWARF2 formats. */
1457 lh.total_length = read_4_bytes (abfd, line_ptr);
1461 line_end = line_ptr + lh.total_length;
1462 lh.version = read_2_bytes (abfd, line_ptr);
1463 if (lh.version < 2 || lh.version > 4)
1465 (*_bfd_error_handler)
1466 (_("Dwarf Error: Unhandled .debug_line version %d."), lh.version);
1467 bfd_set_error (bfd_error_bad_value);
1471 if (offset_size == 4)
1472 lh.prologue_length = read_4_bytes (abfd, line_ptr);
1474 lh.prologue_length = read_8_bytes (abfd, line_ptr);
1475 line_ptr += offset_size;
1476 lh.minimum_instruction_length = read_1_byte (abfd, line_ptr);
1478 if (lh.version >= 4)
1480 lh.maximum_ops_per_insn = read_1_byte (abfd, line_ptr);
1484 lh.maximum_ops_per_insn = 1;
1485 if (lh.maximum_ops_per_insn == 0)
1487 (*_bfd_error_handler)
1488 (_("Dwarf Error: Invalid maximum operations per instruction."));
1489 bfd_set_error (bfd_error_bad_value);
1492 lh.default_is_stmt = read_1_byte (abfd, line_ptr);
1494 lh.line_base = read_1_signed_byte (abfd, line_ptr);
1496 lh.line_range = read_1_byte (abfd, line_ptr);
1498 lh.opcode_base = read_1_byte (abfd, line_ptr);
1500 amt = lh.opcode_base * sizeof (unsigned char);
1501 lh.standard_opcode_lengths = (unsigned char *) bfd_alloc (abfd, amt);
1503 lh.standard_opcode_lengths[0] = 1;
1505 for (i = 1; i < lh.opcode_base; ++i)
1507 lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
1511 /* Read directory table. */
1512 while ((cur_dir = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1514 line_ptr += bytes_read;
1516 if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
1520 amt = table->num_dirs + DIR_ALLOC_CHUNK;
1521 amt *= sizeof (char *);
1523 tmp = (char **) bfd_realloc (table->dirs, amt);
1529 table->dirs[table->num_dirs++] = cur_dir;
1532 line_ptr += bytes_read;
1534 /* Read file name table. */
1535 while ((cur_file = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1537 line_ptr += bytes_read;
1539 if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1541 struct fileinfo *tmp;
1543 amt = table->num_files + FILE_ALLOC_CHUNK;
1544 amt *= sizeof (struct fileinfo);
1546 tmp = (struct fileinfo *) bfd_realloc (table->files, amt);
1552 table->files[table->num_files].name = cur_file;
1553 table->files[table->num_files].dir =
1554 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1555 line_ptr += bytes_read;
1556 table->files[table->num_files].time =
1557 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1558 line_ptr += bytes_read;
1559 table->files[table->num_files].size =
1560 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1561 line_ptr += bytes_read;
1565 line_ptr += bytes_read;
1567 /* Read the statement sequences until there's nothing left. */
1568 while (line_ptr < line_end)
1570 /* State machine registers. */
1571 bfd_vma address = 0;
1572 unsigned char op_index = 0;
1573 char * filename = table->num_files ? concat_filename (table, 1) : NULL;
1574 unsigned int line = 1;
1575 unsigned int column = 0;
1576 int is_stmt = lh.default_is_stmt;
1577 int end_sequence = 0;
1578 /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
1579 compilers generate address sequences that are wildly out of
1580 order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
1581 for ia64-Linux). Thus, to determine the low and high
1582 address, we must compare on every DW_LNS_copy, etc. */
1583 bfd_vma low_pc = (bfd_vma) -1;
1584 bfd_vma high_pc = 0;
1586 /* Decode the table. */
1587 while (! end_sequence)
1589 op_code = read_1_byte (abfd, line_ptr);
1592 if (op_code >= lh.opcode_base)
1594 /* Special operand. */
1595 adj_opcode = op_code - lh.opcode_base;
1596 if (lh.maximum_ops_per_insn == 1)
1597 address += (adj_opcode / lh.line_range
1598 * lh.minimum_instruction_length);
1601 address += ((op_index + adj_opcode / lh.line_range)
1602 / lh.maximum_ops_per_insn
1603 * lh.minimum_instruction_length);
1604 op_index = ((op_index + adj_opcode / lh.line_range)
1605 % lh.maximum_ops_per_insn);
1607 line += lh.line_base + (adj_opcode % lh.line_range);
1608 /* Append row to matrix using current values. */
1609 if (!add_line_info (table, address, op_index, filename,
1612 if (address < low_pc)
1614 if (address > high_pc)
1617 else switch (op_code)
1619 case DW_LNS_extended_op:
1620 exop_len = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1621 line_ptr += bytes_read;
1622 extended_op = read_1_byte (abfd, line_ptr);
1625 switch (extended_op)
1627 case DW_LNE_end_sequence:
1629 if (!add_line_info (table, address, op_index, filename,
1630 line, column, end_sequence))
1632 if (address < low_pc)
1634 if (address > high_pc)
1636 if (!arange_add (unit, &unit->arange, low_pc, high_pc))
1639 case DW_LNE_set_address:
1640 address = read_address (unit, line_ptr);
1642 line_ptr += unit->addr_size;
1644 case DW_LNE_define_file:
1645 cur_file = read_string (abfd, line_ptr, &bytes_read);
1646 line_ptr += bytes_read;
1647 if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1649 struct fileinfo *tmp;
1651 amt = table->num_files + FILE_ALLOC_CHUNK;
1652 amt *= sizeof (struct fileinfo);
1653 tmp = (struct fileinfo *) bfd_realloc (table->files, amt);
1658 table->files[table->num_files].name = cur_file;
1659 table->files[table->num_files].dir =
1660 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1661 line_ptr += bytes_read;
1662 table->files[table->num_files].time =
1663 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1664 line_ptr += bytes_read;
1665 table->files[table->num_files].size =
1666 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1667 line_ptr += bytes_read;
1670 case DW_LNE_set_discriminator:
1671 (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1672 line_ptr += bytes_read;
1674 case DW_LNE_HP_source_file_correlation:
1675 line_ptr += exop_len - 1;
1678 (*_bfd_error_handler)
1679 (_("Dwarf Error: mangled line number section."));
1680 bfd_set_error (bfd_error_bad_value);
1682 if (filename != NULL)
1688 if (!add_line_info (table, address, op_index,
1689 filename, line, column, 0))
1691 if (address < low_pc)
1693 if (address > high_pc)
1696 case DW_LNS_advance_pc:
1697 if (lh.maximum_ops_per_insn == 1)
1698 address += (lh.minimum_instruction_length
1699 * read_unsigned_leb128 (abfd, line_ptr,
1703 bfd_vma adjust = read_unsigned_leb128 (abfd, line_ptr,
1705 address = ((op_index + adjust) / lh.maximum_ops_per_insn
1706 * lh.minimum_instruction_length);
1707 op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
1709 line_ptr += bytes_read;
1711 case DW_LNS_advance_line:
1712 line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
1713 line_ptr += bytes_read;
1715 case DW_LNS_set_file:
1719 /* The file and directory tables are 0
1720 based, the references are 1 based. */
1721 file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1722 line_ptr += bytes_read;
1725 filename = concat_filename (table, file);
1728 case DW_LNS_set_column:
1729 column = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1730 line_ptr += bytes_read;
1732 case DW_LNS_negate_stmt:
1733 is_stmt = (!is_stmt);
1735 case DW_LNS_set_basic_block:
1737 case DW_LNS_const_add_pc:
1738 if (lh.maximum_ops_per_insn == 1)
1739 address += (lh.minimum_instruction_length
1740 * ((255 - lh.opcode_base) / lh.line_range));
1743 bfd_vma adjust = ((255 - lh.opcode_base) / lh.line_range);
1744 address += (lh.minimum_instruction_length
1745 * ((op_index + adjust)
1746 / lh.maximum_ops_per_insn));
1747 op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
1750 case DW_LNS_fixed_advance_pc:
1751 address += read_2_bytes (abfd, line_ptr);
1756 /* Unknown standard opcode, ignore it. */
1757 for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
1759 (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1760 line_ptr += bytes_read;
1770 if (sort_line_sequences (table))
1774 if (table->sequences != NULL)
1775 free (table->sequences);
1776 if (table->files != NULL)
1777 free (table->files);
1778 if (table->dirs != NULL)
1783 /* If ADDR is within TABLE set the output parameters and return TRUE,
1784 otherwise return FALSE. The output parameters, FILENAME_PTR and
1785 LINENUMBER_PTR, are pointers to the objects to be filled in. */
1788 lookup_address_in_line_info_table (struct line_info_table *table,
1790 const char **filename_ptr,
1791 unsigned int *linenumber_ptr)
1793 struct line_sequence *seq = NULL;
1794 struct line_info *each_line;
1797 /* Binary search the array of sequences. */
1799 high = table->num_sequences;
1802 mid = (low + high) / 2;
1803 seq = &table->sequences[mid];
1804 if (addr < seq->low_pc)
1806 else if (addr >= seq->last_line->address)
1812 if (seq && addr >= seq->low_pc && addr < seq->last_line->address)
1814 /* Note: seq->last_line should be a descendingly sorted list. */
1815 for (each_line = seq->last_line;
1817 each_line = each_line->prev_line)
1818 if (addr >= each_line->address)
1822 && !(each_line->end_sequence || each_line == seq->last_line))
1824 *filename_ptr = each_line->filename;
1825 *linenumber_ptr = each_line->line;
1830 *filename_ptr = NULL;
1834 /* Read in the .debug_ranges section for future reference. */
1837 read_debug_ranges (struct comp_unit *unit)
1839 struct dwarf2_debug *stash = unit->stash;
1840 return read_section (unit->abfd, &stash->debug_sections[debug_ranges],
1842 &stash->dwarf_ranges_buffer, &stash->dwarf_ranges_size);
1845 /* Function table functions. */
1847 /* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return TRUE.
1848 Note that we need to find the function that has the smallest
1849 range that contains ADDR, to handle inlined functions without
1850 depending upon them being ordered in TABLE by increasing range. */
1853 lookup_address_in_function_table (struct comp_unit *unit,
1855 struct funcinfo **function_ptr,
1856 const char **functionname_ptr)
1858 struct funcinfo* each_func;
1859 struct funcinfo* best_fit = NULL;
1860 struct arange *arange;
1862 for (each_func = unit->function_table;
1864 each_func = each_func->prev_func)
1866 for (arange = &each_func->arange;
1868 arange = arange->next)
1870 if (addr >= arange->low && addr < arange->high)
1873 || (arange->high - arange->low
1874 < best_fit->arange.high - best_fit->arange.low))
1875 best_fit = each_func;
1882 *functionname_ptr = best_fit->name;
1883 *function_ptr = best_fit;
1892 /* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR
1893 and LINENUMBER_PTR, and return TRUE. */
1896 lookup_symbol_in_function_table (struct comp_unit *unit,
1899 const char **filename_ptr,
1900 unsigned int *linenumber_ptr)
1902 struct funcinfo* each_func;
1903 struct funcinfo* best_fit = NULL;
1904 struct arange *arange;
1905 const char *name = bfd_asymbol_name (sym);
1906 asection *sec = bfd_get_section (sym);
1908 for (each_func = unit->function_table;
1910 each_func = each_func->prev_func)
1912 for (arange = &each_func->arange;
1914 arange = arange->next)
1916 if ((!each_func->sec || each_func->sec == sec)
1917 && addr >= arange->low
1918 && addr < arange->high
1920 && strcmp (name, each_func->name) == 0
1922 || (arange->high - arange->low
1923 < best_fit->arange.high - best_fit->arange.low)))
1924 best_fit = each_func;
1930 best_fit->sec = sec;
1931 *filename_ptr = best_fit->file;
1932 *linenumber_ptr = best_fit->line;
1939 /* Variable table functions. */
1941 /* If SYM is within variable table of UNIT, set FILENAME_PTR and
1942 LINENUMBER_PTR, and return TRUE. */
1945 lookup_symbol_in_variable_table (struct comp_unit *unit,
1948 const char **filename_ptr,
1949 unsigned int *linenumber_ptr)
1951 const char *name = bfd_asymbol_name (sym);
1952 asection *sec = bfd_get_section (sym);
1953 struct varinfo* each;
1955 for (each = unit->variable_table; each; each = each->prev_var)
1956 if (each->stack == 0
1957 && each->file != NULL
1958 && each->name != NULL
1959 && each->addr == addr
1960 && (!each->sec || each->sec == sec)
1961 && strcmp (name, each->name) == 0)
1967 *filename_ptr = each->file;
1968 *linenumber_ptr = each->line;
1976 find_abstract_instance_name (struct comp_unit *unit,
1977 struct attribute *attr_ptr)
1979 bfd *abfd = unit->abfd;
1981 unsigned int abbrev_number, bytes_read, i;
1982 struct abbrev_info *abbrev;
1983 bfd_uint64_t die_ref = attr_ptr->u.val;
1984 struct attribute attr;
1987 /* DW_FORM_ref_addr can reference an entry in a different CU. It
1988 is an offset from the .debug_info section, not the current CU. */
1989 if (attr_ptr->form == DW_FORM_ref_addr)
1991 /* We only support DW_FORM_ref_addr within the same file, so
1992 any relocations should be resolved already. */
1996 info_ptr = unit->sec_info_ptr + die_ref;
1999 info_ptr = unit->info_ptr_unit + die_ref;
2000 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2001 info_ptr += bytes_read;
2005 abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
2008 (*_bfd_error_handler)
2009 (_("Dwarf Error: Could not find abbrev number %u."), abbrev_number);
2010 bfd_set_error (bfd_error_bad_value);
2014 for (i = 0; i < abbrev->num_attrs; ++i)
2016 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit,
2018 if (info_ptr == NULL)
2023 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
2028 case DW_AT_specification:
2029 name = find_abstract_instance_name (unit, &attr);
2031 case DW_AT_linkage_name:
2032 case DW_AT_MIPS_linkage_name:
2045 read_rangelist (struct comp_unit *unit, struct arange *arange,
2046 bfd_uint64_t offset)
2048 bfd_byte *ranges_ptr;
2049 bfd_vma base_address = unit->base_address;
2051 if (! unit->stash->dwarf_ranges_buffer)
2053 if (! read_debug_ranges (unit))
2056 ranges_ptr = unit->stash->dwarf_ranges_buffer + offset;
2063 low_pc = read_address (unit, ranges_ptr);
2064 ranges_ptr += unit->addr_size;
2065 high_pc = read_address (unit, ranges_ptr);
2066 ranges_ptr += unit->addr_size;
2068 if (low_pc == 0 && high_pc == 0)
2070 if (low_pc == -1UL && high_pc != -1UL)
2071 base_address = high_pc;
2074 if (!arange_add (unit, arange,
2075 base_address + low_pc, base_address + high_pc))
2082 /* DWARF2 Compilation unit functions. */
2084 /* Scan over each die in a comp. unit looking for functions to add
2085 to the function table and variables to the variable table. */
2088 scan_unit_for_symbols (struct comp_unit *unit)
2090 bfd *abfd = unit->abfd;
2091 bfd_byte *info_ptr = unit->first_child_die_ptr;
2092 int nesting_level = 1;
2093 struct funcinfo **nested_funcs;
2094 int nested_funcs_size;
2096 /* Maintain a stack of in-scope functions and inlined functions, which we
2097 can use to set the caller_func field. */
2098 nested_funcs_size = 32;
2099 nested_funcs = (struct funcinfo **)
2100 bfd_malloc (nested_funcs_size * sizeof (struct funcinfo *));
2101 if (nested_funcs == NULL)
2103 nested_funcs[nesting_level] = 0;
2105 while (nesting_level)
2107 unsigned int abbrev_number, bytes_read, i;
2108 struct abbrev_info *abbrev;
2109 struct attribute attr;
2110 struct funcinfo *func;
2111 struct varinfo *var;
2113 bfd_vma high_pc = 0;
2114 bfd_boolean high_pc_relative = FALSE;
2116 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2117 info_ptr += bytes_read;
2119 if (! abbrev_number)
2125 abbrev = lookup_abbrev (abbrev_number,unit->abbrevs);
2128 (*_bfd_error_handler)
2129 (_("Dwarf Error: Could not find abbrev number %u."),
2131 bfd_set_error (bfd_error_bad_value);
2136 if (abbrev->tag == DW_TAG_subprogram
2137 || abbrev->tag == DW_TAG_entry_point
2138 || abbrev->tag == DW_TAG_inlined_subroutine)
2140 bfd_size_type amt = sizeof (struct funcinfo);
2141 func = (struct funcinfo *) bfd_zalloc (abfd, amt);
2144 func->tag = abbrev->tag;
2145 func->prev_func = unit->function_table;
2146 unit->function_table = func;
2147 BFD_ASSERT (!unit->cached);
2149 if (func->tag == DW_TAG_inlined_subroutine)
2150 for (i = nesting_level - 1; i >= 1; i--)
2151 if (nested_funcs[i])
2153 func->caller_func = nested_funcs[i];
2156 nested_funcs[nesting_level] = func;
2161 if (abbrev->tag == DW_TAG_variable)
2163 bfd_size_type amt = sizeof (struct varinfo);
2164 var = (struct varinfo *) bfd_zalloc (abfd, amt);
2167 var->tag = abbrev->tag;
2169 var->prev_var = unit->variable_table;
2170 unit->variable_table = var;
2171 BFD_ASSERT (!unit->cached);
2174 /* No inline function in scope at this nesting level. */
2175 nested_funcs[nesting_level] = 0;
2178 for (i = 0; i < abbrev->num_attrs; ++i)
2180 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
2181 if (info_ptr == NULL)
2188 case DW_AT_call_file:
2189 func->caller_file = concat_filename (unit->line_table,
2193 case DW_AT_call_line:
2194 func->caller_line = attr.u.val;
2197 case DW_AT_abstract_origin:
2198 case DW_AT_specification:
2199 func->name = find_abstract_instance_name (unit, &attr);
2203 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
2205 if (func->name == NULL)
2206 func->name = attr.u.str;
2209 case DW_AT_linkage_name:
2210 case DW_AT_MIPS_linkage_name:
2211 func->name = attr.u.str;
2215 low_pc = attr.u.val;
2219 high_pc = attr.u.val;
2220 high_pc_relative = attr.form != DW_FORM_addr;
2224 if (!read_rangelist (unit, &func->arange, attr.u.val))
2228 case DW_AT_decl_file:
2229 func->file = concat_filename (unit->line_table,
2233 case DW_AT_decl_line:
2234 func->line = attr.u.val;
2246 var->name = attr.u.str;
2249 case DW_AT_decl_file:
2250 var->file = concat_filename (unit->line_table,
2254 case DW_AT_decl_line:
2255 var->line = attr.u.val;
2258 case DW_AT_external:
2259 if (attr.u.val != 0)
2263 case DW_AT_location:
2267 case DW_FORM_block1:
2268 case DW_FORM_block2:
2269 case DW_FORM_block4:
2270 case DW_FORM_exprloc:
2271 if (*attr.u.blk->data == DW_OP_addr)
2275 /* Verify that DW_OP_addr is the only opcode in the
2276 location, in which case the block size will be 1
2277 plus the address size. */
2278 /* ??? For TLS variables, gcc can emit
2279 DW_OP_addr <addr> DW_OP_GNU_push_tls_address
2280 which we don't handle here yet. */
2281 if (attr.u.blk->size == unit->addr_size + 1U)
2282 var->addr = bfd_get (unit->addr_size * 8,
2284 attr.u.blk->data + 1);
2299 if (high_pc_relative)
2302 if (func && high_pc != 0)
2304 if (!arange_add (unit, &func->arange, low_pc, high_pc))
2308 if (abbrev->has_children)
2312 if (nesting_level >= nested_funcs_size)
2314 struct funcinfo **tmp;
2316 nested_funcs_size *= 2;
2317 tmp = (struct funcinfo **)
2318 bfd_realloc (nested_funcs,
2319 nested_funcs_size * sizeof (struct funcinfo *));
2324 nested_funcs[nesting_level] = 0;
2328 free (nested_funcs);
2332 free (nested_funcs);
2336 /* Parse a DWARF2 compilation unit starting at INFO_PTR. This
2337 includes the compilation unit header that proceeds the DIE's, but
2338 does not include the length field that precedes each compilation
2339 unit header. END_PTR points one past the end of this comp unit.
2340 OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
2342 This routine does not read the whole compilation unit; only enough
2343 to get to the line number information for the compilation unit. */
2345 static struct comp_unit *
2346 parse_comp_unit (struct dwarf2_debug *stash,
2347 bfd_vma unit_length,
2348 bfd_byte *info_ptr_unit,
2349 unsigned int offset_size)
2351 struct comp_unit* unit;
2352 unsigned int version;
2353 bfd_uint64_t abbrev_offset = 0;
2354 unsigned int addr_size;
2355 struct abbrev_info** abbrevs;
2356 unsigned int abbrev_number, bytes_read, i;
2357 struct abbrev_info *abbrev;
2358 struct attribute attr;
2359 bfd_byte *info_ptr = stash->info_ptr;
2360 bfd_byte *end_ptr = info_ptr + unit_length;
2363 bfd_vma high_pc = 0;
2364 bfd *abfd = stash->bfd_ptr;
2365 bfd_boolean high_pc_relative = FALSE;
2367 version = read_2_bytes (abfd, info_ptr);
2369 BFD_ASSERT (offset_size == 4 || offset_size == 8);
2370 if (offset_size == 4)
2371 abbrev_offset = read_4_bytes (abfd, info_ptr);
2373 abbrev_offset = read_8_bytes (abfd, info_ptr);
2374 info_ptr += offset_size;
2375 addr_size = read_1_byte (abfd, info_ptr);
2378 if (version != 2 && version != 3 && version != 4)
2380 (*_bfd_error_handler)
2381 (_("Dwarf Error: found dwarf version '%u', this reader"
2382 " only handles version 2, 3 and 4 information."), version);
2383 bfd_set_error (bfd_error_bad_value);
2387 if (addr_size > sizeof (bfd_vma))
2389 (*_bfd_error_handler)
2390 (_("Dwarf Error: found address size '%u', this reader"
2391 " can not handle sizes greater than '%u'."),
2393 (unsigned int) sizeof (bfd_vma));
2394 bfd_set_error (bfd_error_bad_value);
2398 if (addr_size != 2 && addr_size != 4 && addr_size != 8)
2400 (*_bfd_error_handler)
2401 ("Dwarf Error: found address size '%u', this reader"
2402 " can only handle address sizes '2', '4' and '8'.", addr_size);
2403 bfd_set_error (bfd_error_bad_value);
2407 /* Read the abbrevs for this compilation unit into a table. */
2408 abbrevs = read_abbrevs (abfd, abbrev_offset, stash);
2412 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2413 info_ptr += bytes_read;
2414 if (! abbrev_number)
2416 (*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %u."),
2418 bfd_set_error (bfd_error_bad_value);
2422 abbrev = lookup_abbrev (abbrev_number, abbrevs);
2425 (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
2427 bfd_set_error (bfd_error_bad_value);
2431 amt = sizeof (struct comp_unit);
2432 unit = (struct comp_unit *) bfd_zalloc (abfd, amt);
2436 unit->version = version;
2437 unit->addr_size = addr_size;
2438 unit->offset_size = offset_size;
2439 unit->abbrevs = abbrevs;
2440 unit->end_ptr = end_ptr;
2441 unit->stash = stash;
2442 unit->info_ptr_unit = info_ptr_unit;
2443 unit->sec_info_ptr = stash->sec_info_ptr;
2445 for (i = 0; i < abbrev->num_attrs; ++i)
2447 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
2448 if (info_ptr == NULL)
2451 /* Store the data if it is of an attribute we want to keep in a
2452 partial symbol table. */
2455 case DW_AT_stmt_list:
2457 unit->line_offset = attr.u.val;
2461 unit->name = attr.u.str;
2465 low_pc = attr.u.val;
2466 /* If the compilation unit DIE has a DW_AT_low_pc attribute,
2467 this is the base address to use when reading location
2468 lists or range lists. */
2469 if (abbrev->tag == DW_TAG_compile_unit)
2470 unit->base_address = low_pc;
2474 high_pc = attr.u.val;
2475 high_pc_relative = attr.form != DW_FORM_addr;
2479 if (!read_rangelist (unit, &unit->arange, attr.u.val))
2483 case DW_AT_comp_dir:
2485 char *comp_dir = attr.u.str;
2488 /* Irix 6.2 native cc prepends <machine>.: to the compilation
2489 directory, get rid of it. */
2490 char *cp = strchr (comp_dir, ':');
2492 if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
2495 unit->comp_dir = comp_dir;
2503 if (high_pc_relative)
2507 if (!arange_add (unit, &unit->arange, low_pc, high_pc))
2511 unit->first_child_die_ptr = info_ptr;
2515 /* Return TRUE if UNIT may contain the address given by ADDR. When
2516 there are functions written entirely with inline asm statements, the
2517 range info in the compilation unit header may not be correct. We
2518 need to consult the line info table to see if a compilation unit
2519 really contains the given address. */
2522 comp_unit_contains_address (struct comp_unit *unit, bfd_vma addr)
2524 struct arange *arange;
2529 arange = &unit->arange;
2532 if (addr >= arange->low && addr < arange->high)
2534 arange = arange->next;
2541 /* If UNIT contains ADDR, set the output parameters to the values for
2542 the line containing ADDR. The output parameters, FILENAME_PTR,
2543 FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
2546 Return TRUE if UNIT contains ADDR, and no errors were encountered;
2550 comp_unit_find_nearest_line (struct comp_unit *unit,
2552 const char **filename_ptr,
2553 const char **functionname_ptr,
2554 unsigned int *linenumber_ptr,
2555 struct dwarf2_debug *stash)
2559 struct funcinfo *function;
2564 if (! unit->line_table)
2566 if (! unit->stmtlist)
2572 unit->line_table = decode_line_info (unit, stash);
2574 if (! unit->line_table)
2580 if (unit->first_child_die_ptr < unit->end_ptr
2581 && ! scan_unit_for_symbols (unit))
2589 func_p = lookup_address_in_function_table (unit, addr,
2590 &function, functionname_ptr);
2591 if (func_p && (function->tag == DW_TAG_inlined_subroutine))
2592 stash->inliner_chain = function;
2593 line_p = lookup_address_in_line_info_table (unit->line_table, addr,
2596 return line_p || func_p;
2599 /* Check to see if line info is already decoded in a comp_unit.
2600 If not, decode it. Returns TRUE if no errors were encountered;
2604 comp_unit_maybe_decode_line_info (struct comp_unit *unit,
2605 struct dwarf2_debug *stash)
2610 if (! unit->line_table)
2612 if (! unit->stmtlist)
2618 unit->line_table = decode_line_info (unit, stash);
2620 if (! unit->line_table)
2626 if (unit->first_child_die_ptr < unit->end_ptr
2627 && ! scan_unit_for_symbols (unit))
2637 /* If UNIT contains SYM at ADDR, set the output parameters to the
2638 values for the line containing SYM. The output parameters,
2639 FILENAME_PTR, and LINENUMBER_PTR, are pointers to the objects to be
2642 Return TRUE if UNIT contains SYM, and no errors were encountered;
2646 comp_unit_find_line (struct comp_unit *unit,
2649 const char **filename_ptr,
2650 unsigned int *linenumber_ptr,
2651 struct dwarf2_debug *stash)
2653 if (!comp_unit_maybe_decode_line_info (unit, stash))
2656 if (sym->flags & BSF_FUNCTION)
2657 return lookup_symbol_in_function_table (unit, sym, addr,
2661 return lookup_symbol_in_variable_table (unit, sym, addr,
2666 static struct funcinfo *
2667 reverse_funcinfo_list (struct funcinfo *head)
2669 struct funcinfo *rhead;
2670 struct funcinfo *temp;
2672 for (rhead = NULL; head; head = temp)
2674 temp = head->prev_func;
2675 head->prev_func = rhead;
2681 static struct varinfo *
2682 reverse_varinfo_list (struct varinfo *head)
2684 struct varinfo *rhead;
2685 struct varinfo *temp;
2687 for (rhead = NULL; head; head = temp)
2689 temp = head->prev_var;
2690 head->prev_var = rhead;
2696 /* Extract all interesting funcinfos and varinfos of a compilation
2697 unit into hash tables for faster lookup. Returns TRUE if no
2698 errors were enountered; FALSE otherwise. */
2701 comp_unit_hash_info (struct dwarf2_debug *stash,
2702 struct comp_unit *unit,
2703 struct info_hash_table *funcinfo_hash_table,
2704 struct info_hash_table *varinfo_hash_table)
2706 struct funcinfo* each_func;
2707 struct varinfo* each_var;
2708 bfd_boolean okay = TRUE;
2710 BFD_ASSERT (stash->info_hash_status != STASH_INFO_HASH_DISABLED);
2712 if (!comp_unit_maybe_decode_line_info (unit, stash))
2715 BFD_ASSERT (!unit->cached);
2717 /* To preserve the original search order, we went to visit the function
2718 infos in the reversed order of the list. However, making the list
2719 bi-directional use quite a bit of extra memory. So we reverse
2720 the list first, traverse the list in the now reversed order and
2721 finally reverse the list again to get back the original order. */
2722 unit->function_table = reverse_funcinfo_list (unit->function_table);
2723 for (each_func = unit->function_table;
2725 each_func = each_func->prev_func)
2727 /* Skip nameless functions. */
2728 if (each_func->name)
2729 /* There is no need to copy name string into hash table as
2730 name string is either in the dwarf string buffer or
2731 info in the stash. */
2732 okay = insert_info_hash_table (funcinfo_hash_table, each_func->name,
2733 (void*) each_func, FALSE);
2735 unit->function_table = reverse_funcinfo_list (unit->function_table);
2739 /* We do the same for variable infos. */
2740 unit->variable_table = reverse_varinfo_list (unit->variable_table);
2741 for (each_var = unit->variable_table;
2743 each_var = each_var->prev_var)
2745 /* Skip stack vars and vars with no files or names. */
2746 if (each_var->stack == 0
2747 && each_var->file != NULL
2748 && each_var->name != NULL)
2749 /* There is no need to copy name string into hash table as
2750 name string is either in the dwarf string buffer or
2751 info in the stash. */
2752 okay = insert_info_hash_table (varinfo_hash_table, each_var->name,
2753 (void*) each_var, FALSE);
2756 unit->variable_table = reverse_varinfo_list (unit->variable_table);
2757 unit->cached = TRUE;
2761 /* Locate a section in a BFD containing debugging info. The search starts
2762 from the section after AFTER_SEC, or from the first section in the BFD if
2763 AFTER_SEC is NULL. The search works by examining the names of the
2764 sections. There are three permissiable names. The first two are given
2765 by DEBUG_SECTIONS[debug_info] (whose standard DWARF2 names are .debug_info
2766 and .zdebug_info). The third is a prefix .gnu.linkonce.wi.
2767 This is a variation on the .debug_info section which has a checksum
2768 describing the contents appended onto the name. This allows the linker to
2769 identify and discard duplicate debugging sections for different
2770 compilation units. */
2771 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
2774 find_debug_info (bfd *abfd, const struct dwarf_debug_section *debug_sections,
2775 asection *after_sec)
2780 if (after_sec == NULL)
2782 look = debug_sections[debug_info].uncompressed_name;
2783 msec = bfd_get_section_by_name (abfd, look);
2787 look = debug_sections[debug_info].compressed_name;
2790 msec = bfd_get_section_by_name (abfd, look);
2795 for (msec = abfd->sections; msec != NULL; msec = msec->next)
2796 if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
2802 for (msec = after_sec->next; msec != NULL; msec = msec->next)
2804 look = debug_sections[debug_info].uncompressed_name;
2805 if (strcmp (msec->name, look) == 0)
2808 look = debug_sections[debug_info].compressed_name;
2809 if (look != NULL && strcmp (msec->name, look) == 0)
2812 if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
2819 /* Unset vmas for adjusted sections in STASH. */
2822 unset_sections (struct dwarf2_debug *stash)
2825 struct adjusted_section *p;
2827 i = stash->adjusted_section_count;
2828 p = stash->adjusted_sections;
2829 for (; i > 0; i--, p++)
2830 p->section->vma = 0;
2833 /* Set unique VMAs for loadable and DWARF sections in ABFD and save
2834 VMAs in STASH for unset_sections. */
2837 place_sections (bfd *abfd, struct dwarf2_debug *stash)
2839 struct adjusted_section *p;
2842 if (stash->adjusted_section_count != 0)
2844 i = stash->adjusted_section_count;
2845 p = stash->adjusted_sections;
2846 for (; i > 0; i--, p++)
2847 p->section->vma = p->adj_vma;
2852 bfd_vma last_vma = 0, last_dwarf = 0;
2854 const char *debug_info_name;
2856 debug_info_name = stash->debug_sections[debug_info].uncompressed_name;
2858 for (sect = abfd->sections; sect != NULL; sect = sect->next)
2866 /* We need to adjust the VMAs of any .debug_info sections.
2867 Skip compressed ones, since no relocations could target
2868 them - they should not appear in object files anyway. */
2869 if (strcmp (sect->name, debug_info_name) == 0)
2871 else if (CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO))
2876 if (!is_debug_info && (sect->flags & SEC_LOAD) == 0)
2879 sz = sect->rawsize ? sect->rawsize : sect->size;
2886 amt = i * sizeof (struct adjusted_section);
2887 p = (struct adjusted_section *) bfd_alloc (abfd, amt);
2891 stash->adjusted_sections = p;
2892 stash->adjusted_section_count = i;
2894 for (sect = abfd->sections; sect != NULL; sect = sect->next)
2902 /* We need to adjust the VMAs of any .debug_info sections.
2903 Skip compressed ones, since no relocations could target
2904 them - they should not appear in object files anyway. */
2905 if (strcmp (sect->name, debug_info_name) == 0)
2907 else if (CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO))
2912 if (!is_debug_info && (sect->flags & SEC_LOAD) == 0)
2915 sz = sect->rawsize ? sect->rawsize : sect->size;
2922 BFD_ASSERT (sect->alignment_power == 0);
2923 sect->vma = last_dwarf;
2926 else if (last_vma != 0)
2928 /* Align the new address to the current section
2930 last_vma = ((last_vma
2931 + ~((bfd_vma) -1 << sect->alignment_power))
2932 & ((bfd_vma) -1 << sect->alignment_power));
2933 sect->vma = last_vma;
2934 last_vma += sect->vma + sz;
2937 last_vma += sect->vma + sz;
2939 p->adj_vma = sect->vma;
2948 /* Look up a funcinfo by name using the given info hash table. If found,
2949 also update the locations pointed to by filename_ptr and linenumber_ptr.
2951 This function returns TRUE if a funcinfo that matches the given symbol
2952 and address is found with any error; otherwise it returns FALSE. */
2955 info_hash_lookup_funcinfo (struct info_hash_table *hash_table,
2958 const char **filename_ptr,
2959 unsigned int *linenumber_ptr)
2961 struct funcinfo* each_func;
2962 struct funcinfo* best_fit = NULL;
2963 struct info_list_node *node;
2964 struct arange *arange;
2965 const char *name = bfd_asymbol_name (sym);
2966 asection *sec = bfd_get_section (sym);
2968 for (node = lookup_info_hash_table (hash_table, name);
2972 each_func = (struct funcinfo *) node->info;
2973 for (arange = &each_func->arange;
2975 arange = arange->next)
2977 if ((!each_func->sec || each_func->sec == sec)
2978 && addr >= arange->low
2979 && addr < arange->high
2981 || (arange->high - arange->low
2982 < best_fit->arange.high - best_fit->arange.low)))
2983 best_fit = each_func;
2989 best_fit->sec = sec;
2990 *filename_ptr = best_fit->file;
2991 *linenumber_ptr = best_fit->line;
2998 /* Look up a varinfo by name using the given info hash table. If found,
2999 also update the locations pointed to by filename_ptr and linenumber_ptr.
3001 This function returns TRUE if a varinfo that matches the given symbol
3002 and address is found with any error; otherwise it returns FALSE. */
3005 info_hash_lookup_varinfo (struct info_hash_table *hash_table,
3008 const char **filename_ptr,
3009 unsigned int *linenumber_ptr)
3011 const char *name = bfd_asymbol_name (sym);
3012 asection *sec = bfd_get_section (sym);
3013 struct varinfo* each;
3014 struct info_list_node *node;
3016 for (node = lookup_info_hash_table (hash_table, name);
3020 each = (struct varinfo *) node->info;
3021 if (each->addr == addr
3022 && (!each->sec || each->sec == sec))
3025 *filename_ptr = each->file;
3026 *linenumber_ptr = each->line;
3034 /* Update the funcinfo and varinfo info hash tables if they are
3035 not up to date. Returns TRUE if there is no error; otherwise
3036 returns FALSE and disable the info hash tables. */
3039 stash_maybe_update_info_hash_tables (struct dwarf2_debug *stash)
3041 struct comp_unit *each;
3043 /* Exit if hash tables are up-to-date. */
3044 if (stash->all_comp_units == stash->hash_units_head)
3047 if (stash->hash_units_head)
3048 each = stash->hash_units_head->prev_unit;
3050 each = stash->last_comp_unit;
3054 if (!comp_unit_hash_info (stash, each, stash->funcinfo_hash_table,
3055 stash->varinfo_hash_table))
3057 stash->info_hash_status = STASH_INFO_HASH_DISABLED;
3060 each = each->prev_unit;
3063 stash->hash_units_head = stash->all_comp_units;
3067 /* Check consistency of info hash tables. This is for debugging only. */
3069 static void ATTRIBUTE_UNUSED
3070 stash_verify_info_hash_table (struct dwarf2_debug *stash)
3072 struct comp_unit *each_unit;
3073 struct funcinfo *each_func;
3074 struct varinfo *each_var;
3075 struct info_list_node *node;
3078 for (each_unit = stash->all_comp_units;
3080 each_unit = each_unit->next_unit)
3082 for (each_func = each_unit->function_table;
3084 each_func = each_func->prev_func)
3086 if (!each_func->name)
3088 node = lookup_info_hash_table (stash->funcinfo_hash_table,
3092 while (node && !found)
3094 found = node->info == each_func;
3100 for (each_var = each_unit->variable_table;
3102 each_var = each_var->prev_var)
3104 if (!each_var->name || !each_var->file || each_var->stack)
3106 node = lookup_info_hash_table (stash->varinfo_hash_table,
3110 while (node && !found)
3112 found = node->info == each_var;
3120 /* Check to see if we want to enable the info hash tables, which consume
3121 quite a bit of memory. Currently we only check the number times
3122 bfd_dwarf2_find_line is called. In the future, we may also want to
3123 take the number of symbols into account. */
3126 stash_maybe_enable_info_hash_tables (bfd *abfd, struct dwarf2_debug *stash)
3128 BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_OFF);
3130 if (stash->info_hash_count++ < STASH_INFO_HASH_TRIGGER)
3133 /* FIXME: Maybe we should check the reduce_memory_overheads
3134 and optimize fields in the bfd_link_info structure ? */
3136 /* Create hash tables. */
3137 stash->funcinfo_hash_table = create_info_hash_table (abfd);
3138 stash->varinfo_hash_table = create_info_hash_table (abfd);
3139 if (!stash->funcinfo_hash_table || !stash->varinfo_hash_table)
3141 /* Turn off info hashes if any allocation above fails. */
3142 stash->info_hash_status = STASH_INFO_HASH_DISABLED;
3145 /* We need a forced update so that the info hash tables will
3146 be created even though there is no compilation unit. That
3147 happens if STASH_INFO_HASH_TRIGGER is 0. */
3148 stash_maybe_update_info_hash_tables (stash);
3149 stash->info_hash_status = STASH_INFO_HASH_ON;
3152 /* Find the file and line associated with a symbol and address using the
3153 info hash tables of a stash. If there is a match, the function returns
3154 TRUE and update the locations pointed to by filename_ptr and linenumber_ptr;
3155 otherwise it returns FALSE. */
3158 stash_find_line_fast (struct dwarf2_debug *stash,
3161 const char **filename_ptr,
3162 unsigned int *linenumber_ptr)
3164 BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_ON);
3166 if (sym->flags & BSF_FUNCTION)
3167 return info_hash_lookup_funcinfo (stash->funcinfo_hash_table, sym, addr,
3168 filename_ptr, linenumber_ptr);
3169 return info_hash_lookup_varinfo (stash->varinfo_hash_table, sym, addr,
3170 filename_ptr, linenumber_ptr);
3173 /* Read debug information from DEBUG_BFD when DEBUG_BFD is specified.
3174 If DEBUG_BFD is not specified, we read debug information from ABFD
3175 or its gnu_debuglink. The results will be stored in PINFO.
3176 The function returns TRUE iff debug information is ready. */
3179 _bfd_dwarf2_slurp_debug_info (bfd *abfd, bfd *debug_bfd,
3180 const struct dwarf_debug_section *debug_sections,
3184 bfd_size_type amt = sizeof (struct dwarf2_debug);
3185 bfd_size_type total_size;
3187 struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
3192 stash = (struct dwarf2_debug *) bfd_zalloc (abfd, amt);
3195 stash->debug_sections = debug_sections;
3199 if (debug_bfd == NULL)
3202 msec = find_debug_info (debug_bfd, debug_sections, NULL);
3203 if (msec == NULL && abfd == debug_bfd)
3205 char * debug_filename = bfd_follow_gnu_debuglink (abfd, DEBUGDIR);
3207 if (debug_filename == NULL)
3208 /* No dwarf2 info, and no gnu_debuglink to follow.
3209 Note that at this point the stash has been allocated, but
3210 contains zeros. This lets future calls to this function
3211 fail more quickly. */
3214 if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL
3215 || ! bfd_check_format (debug_bfd, bfd_object)
3216 || (msec = find_debug_info (debug_bfd,
3217 debug_sections, NULL)) == NULL)
3220 bfd_close (debug_bfd);
3221 /* FIXME: Should we report our failure to follow the debuglink ? */
3222 free (debug_filename);
3227 /* There can be more than one DWARF2 info section in a BFD these
3228 days. First handle the easy case when there's only one. If
3229 there's more than one, try case two: none of the sections is
3230 compressed. In that case, read them all in and produce one
3231 large stash. We do this in two passes - in the first pass we
3232 just accumulate the section sizes, and in the second pass we
3233 read in the section's contents. (The allows us to avoid
3234 reallocing the data as we add sections to the stash.) If
3235 some or all sections are compressed, then do things the slow
3236 way, with a bunch of reallocs. */
3238 if (! find_debug_info (debug_bfd, debug_sections, msec))
3240 /* Case 1: only one info section. */
3241 total_size = msec->size;
3242 if (! read_section (debug_bfd, &stash->debug_sections[debug_info],
3244 &stash->info_ptr_memory, &total_size))
3249 /* Case 2: multiple sections. */
3250 for (total_size = 0;
3252 msec = find_debug_info (debug_bfd, debug_sections, msec))
3253 total_size += msec->size;
3255 stash->info_ptr_memory = (bfd_byte *) bfd_malloc (total_size);
3256 if (stash->info_ptr_memory == NULL)
3260 for (msec = find_debug_info (debug_bfd, debug_sections, NULL);
3262 msec = find_debug_info (debug_bfd, debug_sections, msec))
3270 if (!(bfd_simple_get_relocated_section_contents
3271 (debug_bfd, msec, stash->info_ptr_memory + total_size,
3279 stash->info_ptr = stash->info_ptr_memory;
3280 stash->info_ptr_end = stash->info_ptr + total_size;
3281 stash->sec = find_debug_info (debug_bfd, debug_sections, NULL);
3282 stash->sec_info_ptr = stash->info_ptr;
3283 stash->syms = symbols;
3284 stash->bfd_ptr = debug_bfd;
3289 /* Find the source code location of SYMBOL. If SYMBOL is NULL
3290 then find the nearest source code location corresponding to
3291 the address SECTION + OFFSET.
3292 Returns TRUE if the line is found without error and fills in
3293 FILENAME_PTR and LINENUMBER_PTR. In the case where SYMBOL was
3294 NULL the FUNCTIONNAME_PTR is also filled in.
3295 SYMBOLS contains the symbol table for ABFD.
3296 DEBUG_SECTIONS contains the name of the dwarf debug sections.
3297 ADDR_SIZE is the number of bytes in the initial .debug_info length
3298 field and in the abbreviation offset, or zero to indicate that the
3299 default value should be used. */
3302 find_line (bfd *abfd,
3303 const struct dwarf_debug_section *debug_sections,
3308 const char **filename_ptr,
3309 const char **functionname_ptr,
3310 unsigned int *linenumber_ptr,
3311 unsigned int addr_size,
3314 /* Read each compilation unit from the section .debug_info, and check
3315 to see if it contains the address we are searching for. If yes,
3316 lookup the address, and return the line number info. If no, go
3317 on to the next compilation unit.
3319 We keep a list of all the previously read compilation units, and
3320 a pointer to the next un-read compilation unit. Check the
3321 previously read units before reading more. */
3322 struct dwarf2_debug *stash;
3323 /* What address are we looking for? */
3325 struct comp_unit* each;
3326 bfd_vma found = FALSE;
3327 bfd_boolean do_line;
3329 *filename_ptr = NULL;
3330 if (functionname_ptr != NULL)
3331 *functionname_ptr = NULL;
3332 *linenumber_ptr = 0;
3334 if (! _bfd_dwarf2_slurp_debug_info (abfd, NULL,
3335 debug_sections, symbols, pinfo))
3338 stash = (struct dwarf2_debug *) *pinfo;
3340 /* In a relocatable file, 2 functions may have the same address.
3341 We change the section vma so that they won't overlap. */
3342 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
3344 if (! place_sections (abfd, stash))
3348 do_line = (section == NULL
3350 && functionname_ptr == NULL
3354 addr = symbol->value;
3355 section = bfd_get_section (symbol);
3357 else if (section != NULL
3358 && functionname_ptr != NULL
3364 if (section->output_section)
3365 addr += section->output_section->vma + section->output_offset;
3367 addr += section->vma;
3369 /* A null info_ptr indicates that there is no dwarf2 info
3370 (or that an error occured while setting up the stash). */
3371 if (! stash->info_ptr)
3374 stash->inliner_chain = NULL;
3376 /* Check the previously read comp. units first. */
3379 /* The info hash tables use quite a bit of memory. We may not want to
3380 always use them. We use some heuristics to decide if and when to
3382 if (stash->info_hash_status == STASH_INFO_HASH_OFF)
3383 stash_maybe_enable_info_hash_tables (abfd, stash);
3385 /* Keep info hash table up to date if they are available. Note that we
3386 may disable the hash tables if there is any error duing update. */
3387 if (stash->info_hash_status == STASH_INFO_HASH_ON)
3388 stash_maybe_update_info_hash_tables (stash);
3390 if (stash->info_hash_status == STASH_INFO_HASH_ON)
3392 found = stash_find_line_fast (stash, symbol, addr, filename_ptr,
3399 /* Check the previously read comp. units first. */
3400 for (each = stash->all_comp_units; each; each = each->next_unit)
3401 if ((symbol->flags & BSF_FUNCTION) == 0
3402 || each->arange.high == 0
3403 || comp_unit_contains_address (each, addr))
3405 found = comp_unit_find_line (each, symbol, addr, filename_ptr,
3406 linenumber_ptr, stash);
3414 for (each = stash->all_comp_units; each; each = each->next_unit)
3416 found = ((each->arange.high == 0
3417 || comp_unit_contains_address (each, addr))
3418 && comp_unit_find_nearest_line (each, addr,
3428 /* The DWARF2 spec says that the initial length field, and the
3429 offset of the abbreviation table, should both be 4-byte values.
3430 However, some compilers do things differently. */
3433 BFD_ASSERT (addr_size == 4 || addr_size == 8);
3435 /* Read each remaining comp. units checking each as they are read. */
3436 while (stash->info_ptr < stash->info_ptr_end)
3439 unsigned int offset_size = addr_size;
3440 bfd_byte *info_ptr_unit = stash->info_ptr;
3442 length = read_4_bytes (stash->bfd_ptr, stash->info_ptr);
3443 /* A 0xffffff length is the DWARF3 way of indicating
3444 we use 64-bit offsets, instead of 32-bit offsets. */
3445 if (length == 0xffffffff)
3448 length = read_8_bytes (stash->bfd_ptr, stash->info_ptr + 4);
3449 stash->info_ptr += 12;
3451 /* A zero length is the IRIX way of indicating 64-bit offsets,
3452 mostly because the 64-bit length will generally fit in 32
3453 bits, and the endianness helps. */
3454 else if (length == 0)
3457 length = read_4_bytes (stash->bfd_ptr, stash->info_ptr + 4);
3458 stash->info_ptr += 8;
3460 /* In the absence of the hints above, we assume 32-bit DWARF2
3461 offsets even for targets with 64-bit addresses, because:
3462 a) most of the time these targets will not have generated
3463 more than 2Gb of debug info and so will not need 64-bit
3466 b) if they do use 64-bit offsets but they are not using
3467 the size hints that are tested for above then they are
3468 not conforming to the DWARF3 standard anyway. */
3469 else if (addr_size == 8)
3472 stash->info_ptr += 4;
3475 stash->info_ptr += 4;
3479 each = parse_comp_unit (stash, length, info_ptr_unit,
3482 /* The dwarf information is damaged, don't trust it any
3485 stash->info_ptr += length;
3487 if (stash->all_comp_units)
3488 stash->all_comp_units->prev_unit = each;
3490 stash->last_comp_unit = each;
3492 each->next_unit = stash->all_comp_units;
3493 stash->all_comp_units = each;
3495 /* DW_AT_low_pc and DW_AT_high_pc are optional for
3496 compilation units. If we don't have them (i.e.,
3497 unit->high == 0), we need to consult the line info table
3498 to see if a compilation unit contains the given
3501 found = (((symbol->flags & BSF_FUNCTION) == 0
3502 || each->arange.high == 0
3503 || comp_unit_contains_address (each, addr))
3504 && comp_unit_find_line (each, symbol, addr,
3509 found = ((each->arange.high == 0
3510 || comp_unit_contains_address (each, addr))
3511 && comp_unit_find_nearest_line (each, addr,
3517 if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr)
3518 == stash->sec->size)
3520 stash->sec = find_debug_info (stash->bfd_ptr, debug_sections,
3522 stash->sec_info_ptr = stash->info_ptr;
3531 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
3532 unset_sections (stash);
3537 /* The DWARF2 version of find_nearest_line.
3538 Return TRUE if the line is found without error. */
3541 _bfd_dwarf2_find_nearest_line (bfd *abfd,
3542 const struct dwarf_debug_section *debug_sections,
3546 const char **filename_ptr,
3547 const char **functionname_ptr,
3548 unsigned int *linenumber_ptr,
3549 unsigned int addr_size,
3552 return find_line (abfd, debug_sections, section, offset, NULL, symbols,
3553 filename_ptr, functionname_ptr, linenumber_ptr, addr_size,
3557 /* The DWARF2 version of find_line.
3558 Return TRUE if the line is found without error. */
3561 _bfd_dwarf2_find_line (bfd *abfd,
3564 const char **filename_ptr,
3565 unsigned int *linenumber_ptr,
3566 unsigned int addr_size,
3569 return find_line (abfd, dwarf_debug_sections, NULL, 0, symbol, symbols,
3570 filename_ptr, NULL, linenumber_ptr, addr_size, pinfo);
3574 _bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
3575 const char **filename_ptr,
3576 const char **functionname_ptr,
3577 unsigned int *linenumber_ptr,
3580 struct dwarf2_debug *stash;
3582 stash = (struct dwarf2_debug *) *pinfo;
3585 struct funcinfo *func = stash->inliner_chain;
3587 if (func && func->caller_func)
3589 *filename_ptr = func->caller_file;
3590 *functionname_ptr = func->caller_func->name;
3591 *linenumber_ptr = func->caller_line;
3592 stash->inliner_chain = func->caller_func;
3601 _bfd_dwarf2_cleanup_debug_info (bfd *abfd, void **pinfo)
3603 struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;;
3604 struct comp_unit *each;
3606 if (abfd == NULL || stash == NULL)
3609 for (each = stash->all_comp_units; each; each = each->next_unit)
3611 struct abbrev_info **abbrevs = each->abbrevs;
3612 struct funcinfo *function_table = each->function_table;
3613 struct varinfo *variable_table = each->variable_table;
3616 for (i = 0; i < ABBREV_HASH_SIZE; i++)
3618 struct abbrev_info *abbrev = abbrevs[i];
3622 free (abbrev->attrs);
3623 abbrev = abbrev->next;
3627 if (each->line_table)
3629 free (each->line_table->dirs);
3630 free (each->line_table->files);
3633 while (function_table)
3635 if (function_table->file)
3637 free (function_table->file);
3638 function_table->file = NULL;
3641 if (function_table->caller_file)
3643 free (function_table->caller_file);
3644 function_table->caller_file = NULL;
3646 function_table = function_table->prev_func;
3649 while (variable_table)
3651 if (variable_table->file)
3653 free (variable_table->file);
3654 variable_table->file = NULL;
3657 variable_table = variable_table->prev_var;
3661 if (stash->dwarf_abbrev_buffer)
3662 free (stash->dwarf_abbrev_buffer);
3663 if (stash->dwarf_line_buffer)
3664 free (stash->dwarf_line_buffer);
3665 if (stash->dwarf_str_buffer)
3666 free (stash->dwarf_str_buffer);
3667 if (stash->dwarf_ranges_buffer)
3668 free (stash->dwarf_ranges_buffer);
3669 if (stash->info_ptr_memory)
3670 free (stash->info_ptr_memory);