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 int discriminator;
984 unsigned char op_index;
985 unsigned char end_sequence; /* End of (sequential) code sequence. */
999 struct line_sequence* prev_sequence;
1000 struct line_info* last_line; /* Largest VMA. */
1003 struct line_info_table
1006 unsigned int num_files;
1007 unsigned int num_dirs;
1008 unsigned int num_sequences;
1011 struct fileinfo* files;
1012 struct line_sequence* sequences;
1013 struct line_info* lcl_head; /* Local head; used in 'add_line_info'. */
1016 /* Remember some information about each function. If the function is
1017 inlined (DW_TAG_inlined_subroutine) it may have two additional
1018 attributes, DW_AT_call_file and DW_AT_call_line, which specify the
1019 source code location where this function was inlined. */
1023 /* Pointer to previous function in list of all functions. */
1024 struct funcinfo *prev_func;
1025 /* Pointer to function one scope higher. */
1026 struct funcinfo *caller_func;
1027 /* Source location file name where caller_func inlines this func. */
1029 /* Source location line number where caller_func inlines this func. */
1031 /* Source location file name. */
1033 /* Source location line number. */
1037 struct arange arange;
1038 /* Where the symbol is defined. */
1044 /* Pointer to previous variable in list of all variables */
1045 struct varinfo *prev_var;
1046 /* Source location file name */
1048 /* Source location line number */
1053 /* Where the symbol is defined */
1055 /* Is this a stack variable? */
1056 unsigned int stack: 1;
1059 /* Return TRUE if NEW_LINE should sort after LINE. */
1061 static inline bfd_boolean
1062 new_line_sorts_after (struct line_info *new_line, struct line_info *line)
1064 return (new_line->address > line->address
1065 || (new_line->address == line->address
1066 && (new_line->op_index > line->op_index
1067 || (new_line->op_index == line->op_index
1068 && new_line->end_sequence < line->end_sequence))));
1072 /* Adds a new entry to the line_info list in the line_info_table, ensuring
1073 that the list is sorted. Note that the line_info list is sorted from
1074 highest to lowest VMA (with possible duplicates); that is,
1075 line_info->prev_line always accesses an equal or smaller VMA. */
1078 add_line_info (struct line_info_table *table,
1080 unsigned char op_index,
1083 unsigned int column,
1084 unsigned int discriminator,
1087 bfd_size_type amt = sizeof (struct line_info);
1088 struct line_sequence* seq = table->sequences;
1089 struct line_info* info = (struct line_info *) bfd_alloc (table->abfd, amt);
1094 /* Set member data of 'info'. */
1095 info->prev_line = NULL;
1096 info->address = address;
1097 info->op_index = op_index;
1099 info->column = column;
1100 info->discriminator = discriminator;
1101 info->end_sequence = end_sequence;
1103 if (filename && filename[0])
1105 info->filename = (char *) bfd_alloc (table->abfd, strlen (filename) + 1);
1106 if (info->filename == NULL)
1108 strcpy (info->filename, filename);
1111 info->filename = NULL;
1113 /* Find the correct location for 'info'. Normally we will receive
1114 new line_info data 1) in order and 2) with increasing VMAs.
1115 However some compilers break the rules (cf. decode_line_info) and
1116 so we include some heuristics for quickly finding the correct
1117 location for 'info'. In particular, these heuristics optimize for
1118 the common case in which the VMA sequence that we receive is a
1119 list of locally sorted VMAs such as
1120 p...z a...j (where a < j < p < z)
1122 Note: table->lcl_head is used to head an *actual* or *possible*
1123 sub-sequence within the list (such as a...j) that is not directly
1124 headed by table->last_line
1126 Note: we may receive duplicate entries from 'decode_line_info'. */
1129 && seq->last_line->address == address
1130 && seq->last_line->op_index == op_index
1131 && seq->last_line->end_sequence == end_sequence)
1133 /* We only keep the last entry with the same address and end
1134 sequence. See PR ld/4986. */
1135 if (table->lcl_head == seq->last_line)
1136 table->lcl_head = info;
1137 info->prev_line = seq->last_line->prev_line;
1138 seq->last_line = info;
1140 else if (!seq || seq->last_line->end_sequence)
1142 /* Start a new line sequence. */
1143 amt = sizeof (struct line_sequence);
1144 seq = (struct line_sequence *) bfd_malloc (amt);
1147 seq->low_pc = address;
1148 seq->prev_sequence = table->sequences;
1149 seq->last_line = info;
1150 table->lcl_head = info;
1151 table->sequences = seq;
1152 table->num_sequences++;
1154 else if (new_line_sorts_after (info, seq->last_line))
1156 /* Normal case: add 'info' to the beginning of the current sequence. */
1157 info->prev_line = seq->last_line;
1158 seq->last_line = info;
1160 /* lcl_head: initialize to head a *possible* sequence at the end. */
1161 if (!table->lcl_head)
1162 table->lcl_head = info;
1164 else if (!new_line_sorts_after (info, table->lcl_head)
1165 && (!table->lcl_head->prev_line
1166 || new_line_sorts_after (info, table->lcl_head->prev_line)))
1168 /* Abnormal but easy: lcl_head is the head of 'info'. */
1169 info->prev_line = table->lcl_head->prev_line;
1170 table->lcl_head->prev_line = info;
1174 /* Abnormal and hard: Neither 'last_line' nor 'lcl_head'
1175 are valid heads for 'info'. Reset 'lcl_head'. */
1176 struct line_info* li2 = seq->last_line; /* Always non-NULL. */
1177 struct line_info* li1 = li2->prev_line;
1181 if (!new_line_sorts_after (info, li2)
1182 && new_line_sorts_after (info, li1))
1185 li2 = li1; /* always non-NULL */
1186 li1 = li1->prev_line;
1188 table->lcl_head = li2;
1189 info->prev_line = table->lcl_head->prev_line;
1190 table->lcl_head->prev_line = info;
1191 if (address < seq->low_pc)
1192 seq->low_pc = address;
1197 /* Extract a fully qualified filename from a line info table.
1198 The returned string has been malloc'ed and it is the caller's
1199 responsibility to free it. */
1202 concat_filename (struct line_info_table *table, unsigned int file)
1206 if (file - 1 >= table->num_files)
1208 /* FILE == 0 means unknown. */
1210 (*_bfd_error_handler)
1211 (_("Dwarf Error: mangled line number section (bad file number)."));
1212 return strdup ("<unknown>");
1215 filename = table->files[file - 1].name;
1217 if (!IS_ABSOLUTE_PATH (filename))
1219 char *dir_name = NULL;
1220 char *subdir_name = NULL;
1224 if (table->files[file - 1].dir)
1225 subdir_name = table->dirs[table->files[file - 1].dir - 1];
1227 if (!subdir_name || !IS_ABSOLUTE_PATH (subdir_name))
1228 dir_name = table->comp_dir;
1232 dir_name = subdir_name;
1237 return strdup (filename);
1239 len = strlen (dir_name) + strlen (filename) + 2;
1243 len += strlen (subdir_name) + 1;
1244 name = (char *) bfd_malloc (len);
1246 sprintf (name, "%s/%s/%s", dir_name, subdir_name, filename);
1250 name = (char *) bfd_malloc (len);
1252 sprintf (name, "%s/%s", dir_name, filename);
1258 return strdup (filename);
1262 arange_add (const struct comp_unit *unit, struct arange *first_arange,
1263 bfd_vma low_pc, bfd_vma high_pc)
1265 struct arange *arange;
1267 /* Ignore empty ranges. */
1268 if (low_pc == high_pc)
1271 /* If the first arange is empty, use it. */
1272 if (first_arange->high == 0)
1274 first_arange->low = low_pc;
1275 first_arange->high = high_pc;
1279 /* Next see if we can cheaply extend an existing range. */
1280 arange = first_arange;
1283 if (low_pc == arange->high)
1285 arange->high = high_pc;
1288 if (high_pc == arange->low)
1290 arange->low = low_pc;
1293 arange = arange->next;
1297 /* Need to allocate a new arange and insert it into the arange list.
1298 Order isn't significant, so just insert after the first arange. */
1299 arange = (struct arange *) bfd_alloc (unit->abfd, sizeof (*arange));
1302 arange->low = low_pc;
1303 arange->high = high_pc;
1304 arange->next = first_arange->next;
1305 first_arange->next = arange;
1309 /* Compare function for line sequences. */
1312 compare_sequences (const void* a, const void* b)
1314 const struct line_sequence* seq1 = a;
1315 const struct line_sequence* seq2 = b;
1317 /* Sort by low_pc as the primary key. */
1318 if (seq1->low_pc < seq2->low_pc)
1320 if (seq1->low_pc > seq2->low_pc)
1323 /* If low_pc values are equal, sort in reverse order of
1324 high_pc, so that the largest region comes first. */
1325 if (seq1->last_line->address < seq2->last_line->address)
1327 if (seq1->last_line->address > seq2->last_line->address)
1330 if (seq1->last_line->op_index < seq2->last_line->op_index)
1332 if (seq1->last_line->op_index > seq2->last_line->op_index)
1338 /* Sort the line sequences for quick lookup. */
1341 sort_line_sequences (struct line_info_table* table)
1344 struct line_sequence* sequences;
1345 struct line_sequence* seq;
1347 unsigned int num_sequences = table->num_sequences;
1348 bfd_vma last_high_pc;
1350 if (num_sequences == 0)
1353 /* Allocate space for an array of sequences. */
1354 amt = sizeof (struct line_sequence) * num_sequences;
1355 sequences = (struct line_sequence *) bfd_alloc (table->abfd, amt);
1356 if (sequences == NULL)
1359 /* Copy the linked list into the array, freeing the original nodes. */
1360 seq = table->sequences;
1361 for (n = 0; n < num_sequences; n++)
1363 struct line_sequence* last_seq = seq;
1366 sequences[n].low_pc = seq->low_pc;
1367 sequences[n].prev_sequence = NULL;
1368 sequences[n].last_line = seq->last_line;
1369 seq = seq->prev_sequence;
1372 BFD_ASSERT (seq == NULL);
1374 qsort (sequences, n, sizeof (struct line_sequence), compare_sequences);
1376 /* Make the list binary-searchable by trimming overlapping entries
1377 and removing nested entries. */
1379 last_high_pc = sequences[0].last_line->address;
1380 for (n = 1; n < table->num_sequences; n++)
1382 if (sequences[n].low_pc < last_high_pc)
1384 if (sequences[n].last_line->address <= last_high_pc)
1385 /* Skip nested entries. */
1388 /* Trim overlapping entries. */
1389 sequences[n].low_pc = last_high_pc;
1391 last_high_pc = sequences[n].last_line->address;
1392 if (n > num_sequences)
1394 /* Close up the gap. */
1395 sequences[num_sequences].low_pc = sequences[n].low_pc;
1396 sequences[num_sequences].last_line = sequences[n].last_line;
1401 table->sequences = sequences;
1402 table->num_sequences = num_sequences;
1406 /* Decode the line number information for UNIT. */
1408 static struct line_info_table*
1409 decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash)
1411 bfd *abfd = unit->abfd;
1412 struct line_info_table* table;
1415 struct line_head lh;
1416 unsigned int i, bytes_read, offset_size;
1417 char *cur_file, *cur_dir;
1418 unsigned char op_code, extended_op, adj_opcode;
1419 unsigned int exop_len;
1422 if (! read_section (abfd, &stash->debug_sections[debug_line],
1423 stash->syms, unit->line_offset,
1424 &stash->dwarf_line_buffer, &stash->dwarf_line_size))
1427 amt = sizeof (struct line_info_table);
1428 table = (struct line_info_table *) bfd_alloc (abfd, amt);
1432 table->comp_dir = unit->comp_dir;
1434 table->num_files = 0;
1435 table->files = NULL;
1437 table->num_dirs = 0;
1440 table->num_sequences = 0;
1441 table->sequences = NULL;
1443 table->lcl_head = NULL;
1445 line_ptr = stash->dwarf_line_buffer + unit->line_offset;
1447 /* Read in the prologue. */
1448 lh.total_length = read_4_bytes (abfd, line_ptr);
1451 if (lh.total_length == 0xffffffff)
1453 lh.total_length = read_8_bytes (abfd, line_ptr);
1457 else if (lh.total_length == 0 && unit->addr_size == 8)
1459 /* Handle (non-standard) 64-bit DWARF2 formats. */
1460 lh.total_length = read_4_bytes (abfd, line_ptr);
1464 line_end = line_ptr + lh.total_length;
1465 lh.version = read_2_bytes (abfd, line_ptr);
1466 if (lh.version < 2 || lh.version > 4)
1468 (*_bfd_error_handler)
1469 (_("Dwarf Error: Unhandled .debug_line version %d."), lh.version);
1470 bfd_set_error (bfd_error_bad_value);
1474 if (offset_size == 4)
1475 lh.prologue_length = read_4_bytes (abfd, line_ptr);
1477 lh.prologue_length = read_8_bytes (abfd, line_ptr);
1478 line_ptr += offset_size;
1479 lh.minimum_instruction_length = read_1_byte (abfd, line_ptr);
1481 if (lh.version >= 4)
1483 lh.maximum_ops_per_insn = read_1_byte (abfd, line_ptr);
1487 lh.maximum_ops_per_insn = 1;
1488 if (lh.maximum_ops_per_insn == 0)
1490 (*_bfd_error_handler)
1491 (_("Dwarf Error: Invalid maximum operations per instruction."));
1492 bfd_set_error (bfd_error_bad_value);
1495 lh.default_is_stmt = read_1_byte (abfd, line_ptr);
1497 lh.line_base = read_1_signed_byte (abfd, line_ptr);
1499 lh.line_range = read_1_byte (abfd, line_ptr);
1501 lh.opcode_base = read_1_byte (abfd, line_ptr);
1503 amt = lh.opcode_base * sizeof (unsigned char);
1504 lh.standard_opcode_lengths = (unsigned char *) bfd_alloc (abfd, amt);
1506 lh.standard_opcode_lengths[0] = 1;
1508 for (i = 1; i < lh.opcode_base; ++i)
1510 lh.standard_opcode_lengths[i] = read_1_byte (abfd, line_ptr);
1514 /* Read directory table. */
1515 while ((cur_dir = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1517 line_ptr += bytes_read;
1519 if ((table->num_dirs % DIR_ALLOC_CHUNK) == 0)
1523 amt = table->num_dirs + DIR_ALLOC_CHUNK;
1524 amt *= sizeof (char *);
1526 tmp = (char **) bfd_realloc (table->dirs, amt);
1532 table->dirs[table->num_dirs++] = cur_dir;
1535 line_ptr += bytes_read;
1537 /* Read file name table. */
1538 while ((cur_file = read_string (abfd, line_ptr, &bytes_read)) != NULL)
1540 line_ptr += bytes_read;
1542 if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1544 struct fileinfo *tmp;
1546 amt = table->num_files + FILE_ALLOC_CHUNK;
1547 amt *= sizeof (struct fileinfo);
1549 tmp = (struct fileinfo *) bfd_realloc (table->files, amt);
1555 table->files[table->num_files].name = cur_file;
1556 table->files[table->num_files].dir =
1557 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1558 line_ptr += bytes_read;
1559 table->files[table->num_files].time =
1560 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1561 line_ptr += bytes_read;
1562 table->files[table->num_files].size =
1563 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1564 line_ptr += bytes_read;
1568 line_ptr += bytes_read;
1570 /* Read the statement sequences until there's nothing left. */
1571 while (line_ptr < line_end)
1573 /* State machine registers. */
1574 bfd_vma address = 0;
1575 unsigned char op_index = 0;
1576 char * filename = table->num_files ? concat_filename (table, 1) : NULL;
1577 unsigned int line = 1;
1578 unsigned int column = 0;
1579 unsigned int discriminator = 0;
1580 int is_stmt = lh.default_is_stmt;
1581 int end_sequence = 0;
1582 /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
1583 compilers generate address sequences that are wildly out of
1584 order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
1585 for ia64-Linux). Thus, to determine the low and high
1586 address, we must compare on every DW_LNS_copy, etc. */
1587 bfd_vma low_pc = (bfd_vma) -1;
1588 bfd_vma high_pc = 0;
1590 /* Decode the table. */
1591 while (! end_sequence)
1593 op_code = read_1_byte (abfd, line_ptr);
1596 if (op_code >= lh.opcode_base)
1598 /* Special operand. */
1599 adj_opcode = op_code - lh.opcode_base;
1600 if (lh.maximum_ops_per_insn == 1)
1601 address += (adj_opcode / lh.line_range
1602 * lh.minimum_instruction_length);
1605 address += ((op_index + adj_opcode / lh.line_range)
1606 / lh.maximum_ops_per_insn
1607 * lh.minimum_instruction_length);
1608 op_index = ((op_index + adj_opcode / lh.line_range)
1609 % lh.maximum_ops_per_insn);
1611 line += lh.line_base + (adj_opcode % lh.line_range);
1612 /* Append row to matrix using current values. */
1613 if (!add_line_info (table, address, op_index, filename,
1614 line, column, discriminator, 0))
1617 if (address < low_pc)
1619 if (address > high_pc)
1622 else switch (op_code)
1624 case DW_LNS_extended_op:
1625 exop_len = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1626 line_ptr += bytes_read;
1627 extended_op = read_1_byte (abfd, line_ptr);
1630 switch (extended_op)
1632 case DW_LNE_end_sequence:
1634 if (!add_line_info (table, address, op_index, filename, line,
1635 column, discriminator, end_sequence))
1638 if (address < low_pc)
1640 if (address > high_pc)
1642 if (!arange_add (unit, &unit->arange, low_pc, high_pc))
1645 case DW_LNE_set_address:
1646 address = read_address (unit, line_ptr);
1648 line_ptr += unit->addr_size;
1650 case DW_LNE_define_file:
1651 cur_file = read_string (abfd, line_ptr, &bytes_read);
1652 line_ptr += bytes_read;
1653 if ((table->num_files % FILE_ALLOC_CHUNK) == 0)
1655 struct fileinfo *tmp;
1657 amt = table->num_files + FILE_ALLOC_CHUNK;
1658 amt *= sizeof (struct fileinfo);
1659 tmp = (struct fileinfo *) bfd_realloc (table->files, amt);
1664 table->files[table->num_files].name = cur_file;
1665 table->files[table->num_files].dir =
1666 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1667 line_ptr += bytes_read;
1668 table->files[table->num_files].time =
1669 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1670 line_ptr += bytes_read;
1671 table->files[table->num_files].size =
1672 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1673 line_ptr += bytes_read;
1676 case DW_LNE_set_discriminator:
1678 read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1679 line_ptr += bytes_read;
1681 case DW_LNE_HP_source_file_correlation:
1682 line_ptr += exop_len - 1;
1685 (*_bfd_error_handler)
1686 (_("Dwarf Error: mangled line number section."));
1687 bfd_set_error (bfd_error_bad_value);
1689 if (filename != NULL)
1695 if (!add_line_info (table, address, op_index,
1696 filename, line, column, discriminator, 0))
1699 if (address < low_pc)
1701 if (address > high_pc)
1704 case DW_LNS_advance_pc:
1705 if (lh.maximum_ops_per_insn == 1)
1706 address += (lh.minimum_instruction_length
1707 * read_unsigned_leb128 (abfd, line_ptr,
1711 bfd_vma adjust = read_unsigned_leb128 (abfd, line_ptr,
1713 address = ((op_index + adjust) / lh.maximum_ops_per_insn
1714 * lh.minimum_instruction_length);
1715 op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
1717 line_ptr += bytes_read;
1719 case DW_LNS_advance_line:
1720 line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
1721 line_ptr += bytes_read;
1723 case DW_LNS_set_file:
1727 /* The file and directory tables are 0
1728 based, the references are 1 based. */
1729 file = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1730 line_ptr += bytes_read;
1733 filename = concat_filename (table, file);
1736 case DW_LNS_set_column:
1737 column = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1738 line_ptr += bytes_read;
1740 case DW_LNS_negate_stmt:
1741 is_stmt = (!is_stmt);
1743 case DW_LNS_set_basic_block:
1745 case DW_LNS_const_add_pc:
1746 if (lh.maximum_ops_per_insn == 1)
1747 address += (lh.minimum_instruction_length
1748 * ((255 - lh.opcode_base) / lh.line_range));
1751 bfd_vma adjust = ((255 - lh.opcode_base) / lh.line_range);
1752 address += (lh.minimum_instruction_length
1753 * ((op_index + adjust)
1754 / lh.maximum_ops_per_insn));
1755 op_index = (op_index + adjust) % lh.maximum_ops_per_insn;
1758 case DW_LNS_fixed_advance_pc:
1759 address += read_2_bytes (abfd, line_ptr);
1764 /* Unknown standard opcode, ignore it. */
1765 for (i = 0; i < lh.standard_opcode_lengths[op_code]; i++)
1767 (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
1768 line_ptr += bytes_read;
1778 if (sort_line_sequences (table))
1782 if (table->sequences != NULL)
1783 free (table->sequences);
1784 if (table->files != NULL)
1785 free (table->files);
1786 if (table->dirs != NULL)
1791 /* If ADDR is within TABLE set the output parameters and return TRUE,
1792 otherwise return FALSE. The output parameters, FILENAME_PTR and
1793 LINENUMBER_PTR, are pointers to the objects to be filled in. */
1796 lookup_address_in_line_info_table (struct line_info_table *table,
1798 const char **filename_ptr,
1799 unsigned int *linenumber_ptr,
1800 unsigned int *discriminator_ptr)
1802 struct line_sequence *seq = NULL;
1803 struct line_info *each_line;
1806 /* Binary search the array of sequences. */
1808 high = table->num_sequences;
1811 mid = (low + high) / 2;
1812 seq = &table->sequences[mid];
1813 if (addr < seq->low_pc)
1815 else if (addr >= seq->last_line->address)
1821 if (seq && addr >= seq->low_pc && addr < seq->last_line->address)
1823 /* Note: seq->last_line should be a descendingly sorted list. */
1824 for (each_line = seq->last_line;
1826 each_line = each_line->prev_line)
1827 if (addr >= each_line->address)
1831 && !(each_line->end_sequence || each_line == seq->last_line))
1833 *filename_ptr = each_line->filename;
1834 *linenumber_ptr = each_line->line;
1835 if (discriminator_ptr)
1836 *discriminator_ptr = each_line->discriminator;
1841 *filename_ptr = NULL;
1845 /* Read in the .debug_ranges section for future reference. */
1848 read_debug_ranges (struct comp_unit *unit)
1850 struct dwarf2_debug *stash = unit->stash;
1851 return read_section (unit->abfd, &stash->debug_sections[debug_ranges],
1853 &stash->dwarf_ranges_buffer, &stash->dwarf_ranges_size);
1856 /* Function table functions. */
1858 /* If ADDR is within TABLE, set FUNCTIONNAME_PTR, and return TRUE.
1859 Note that we need to find the function that has the smallest
1860 range that contains ADDR, to handle inlined functions without
1861 depending upon them being ordered in TABLE by increasing range. */
1864 lookup_address_in_function_table (struct comp_unit *unit,
1866 struct funcinfo **function_ptr,
1867 const char **functionname_ptr)
1869 struct funcinfo* each_func;
1870 struct funcinfo* best_fit = NULL;
1871 struct arange *arange;
1873 for (each_func = unit->function_table;
1875 each_func = each_func->prev_func)
1877 for (arange = &each_func->arange;
1879 arange = arange->next)
1881 if (addr >= arange->low && addr < arange->high)
1884 || (arange->high - arange->low
1885 < best_fit->arange.high - best_fit->arange.low))
1886 best_fit = each_func;
1893 *functionname_ptr = best_fit->name;
1894 *function_ptr = best_fit;
1903 /* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR
1904 and LINENUMBER_PTR, and return TRUE. */
1907 lookup_symbol_in_function_table (struct comp_unit *unit,
1910 const char **filename_ptr,
1911 unsigned int *linenumber_ptr)
1913 struct funcinfo* each_func;
1914 struct funcinfo* best_fit = NULL;
1915 struct arange *arange;
1916 const char *name = bfd_asymbol_name (sym);
1917 asection *sec = bfd_get_section (sym);
1919 for (each_func = unit->function_table;
1921 each_func = each_func->prev_func)
1923 for (arange = &each_func->arange;
1925 arange = arange->next)
1927 if ((!each_func->sec || each_func->sec == sec)
1928 && addr >= arange->low
1929 && addr < arange->high
1931 && strcmp (name, each_func->name) == 0
1933 || (arange->high - arange->low
1934 < best_fit->arange.high - best_fit->arange.low)))
1935 best_fit = each_func;
1941 best_fit->sec = sec;
1942 *filename_ptr = best_fit->file;
1943 *linenumber_ptr = best_fit->line;
1950 /* Variable table functions. */
1952 /* If SYM is within variable table of UNIT, set FILENAME_PTR and
1953 LINENUMBER_PTR, and return TRUE. */
1956 lookup_symbol_in_variable_table (struct comp_unit *unit,
1959 const char **filename_ptr,
1960 unsigned int *linenumber_ptr)
1962 const char *name = bfd_asymbol_name (sym);
1963 asection *sec = bfd_get_section (sym);
1964 struct varinfo* each;
1966 for (each = unit->variable_table; each; each = each->prev_var)
1967 if (each->stack == 0
1968 && each->file != NULL
1969 && each->name != NULL
1970 && each->addr == addr
1971 && (!each->sec || each->sec == sec)
1972 && strcmp (name, each->name) == 0)
1978 *filename_ptr = each->file;
1979 *linenumber_ptr = each->line;
1987 find_abstract_instance_name (struct comp_unit *unit,
1988 struct attribute *attr_ptr)
1990 bfd *abfd = unit->abfd;
1992 unsigned int abbrev_number, bytes_read, i;
1993 struct abbrev_info *abbrev;
1994 bfd_uint64_t die_ref = attr_ptr->u.val;
1995 struct attribute attr;
1998 /* DW_FORM_ref_addr can reference an entry in a different CU. It
1999 is an offset from the .debug_info section, not the current CU. */
2000 if (attr_ptr->form == DW_FORM_ref_addr)
2002 /* We only support DW_FORM_ref_addr within the same file, so
2003 any relocations should be resolved already. */
2007 info_ptr = unit->sec_info_ptr + die_ref;
2010 info_ptr = unit->info_ptr_unit + die_ref;
2011 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2012 info_ptr += bytes_read;
2016 abbrev = lookup_abbrev (abbrev_number, unit->abbrevs);
2019 (*_bfd_error_handler)
2020 (_("Dwarf Error: Could not find abbrev number %u."), abbrev_number);
2021 bfd_set_error (bfd_error_bad_value);
2025 for (i = 0; i < abbrev->num_attrs; ++i)
2027 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit,
2029 if (info_ptr == NULL)
2034 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
2039 case DW_AT_specification:
2040 name = find_abstract_instance_name (unit, &attr);
2042 case DW_AT_linkage_name:
2043 case DW_AT_MIPS_linkage_name:
2056 read_rangelist (struct comp_unit *unit, struct arange *arange,
2057 bfd_uint64_t offset)
2059 bfd_byte *ranges_ptr;
2060 bfd_vma base_address = unit->base_address;
2062 if (! unit->stash->dwarf_ranges_buffer)
2064 if (! read_debug_ranges (unit))
2067 ranges_ptr = unit->stash->dwarf_ranges_buffer + offset;
2074 low_pc = read_address (unit, ranges_ptr);
2075 ranges_ptr += unit->addr_size;
2076 high_pc = read_address (unit, ranges_ptr);
2077 ranges_ptr += unit->addr_size;
2079 if (low_pc == 0 && high_pc == 0)
2081 if (low_pc == -1UL && high_pc != -1UL)
2082 base_address = high_pc;
2085 if (!arange_add (unit, arange,
2086 base_address + low_pc, base_address + high_pc))
2093 /* DWARF2 Compilation unit functions. */
2095 /* Scan over each die in a comp. unit looking for functions to add
2096 to the function table and variables to the variable table. */
2099 scan_unit_for_symbols (struct comp_unit *unit)
2101 bfd *abfd = unit->abfd;
2102 bfd_byte *info_ptr = unit->first_child_die_ptr;
2103 int nesting_level = 1;
2104 struct funcinfo **nested_funcs;
2105 int nested_funcs_size;
2107 /* Maintain a stack of in-scope functions and inlined functions, which we
2108 can use to set the caller_func field. */
2109 nested_funcs_size = 32;
2110 nested_funcs = (struct funcinfo **)
2111 bfd_malloc (nested_funcs_size * sizeof (struct funcinfo *));
2112 if (nested_funcs == NULL)
2114 nested_funcs[nesting_level] = 0;
2116 while (nesting_level)
2118 unsigned int abbrev_number, bytes_read, i;
2119 struct abbrev_info *abbrev;
2120 struct attribute attr;
2121 struct funcinfo *func;
2122 struct varinfo *var;
2124 bfd_vma high_pc = 0;
2125 bfd_boolean high_pc_relative = FALSE;
2127 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2128 info_ptr += bytes_read;
2130 if (! abbrev_number)
2136 abbrev = lookup_abbrev (abbrev_number,unit->abbrevs);
2139 (*_bfd_error_handler)
2140 (_("Dwarf Error: Could not find abbrev number %u."),
2142 bfd_set_error (bfd_error_bad_value);
2147 if (abbrev->tag == DW_TAG_subprogram
2148 || abbrev->tag == DW_TAG_entry_point
2149 || abbrev->tag == DW_TAG_inlined_subroutine)
2151 bfd_size_type amt = sizeof (struct funcinfo);
2152 func = (struct funcinfo *) bfd_zalloc (abfd, amt);
2155 func->tag = abbrev->tag;
2156 func->prev_func = unit->function_table;
2157 unit->function_table = func;
2158 BFD_ASSERT (!unit->cached);
2160 if (func->tag == DW_TAG_inlined_subroutine)
2161 for (i = nesting_level - 1; i >= 1; i--)
2162 if (nested_funcs[i])
2164 func->caller_func = nested_funcs[i];
2167 nested_funcs[nesting_level] = func;
2172 if (abbrev->tag == DW_TAG_variable)
2174 bfd_size_type amt = sizeof (struct varinfo);
2175 var = (struct varinfo *) bfd_zalloc (abfd, amt);
2178 var->tag = abbrev->tag;
2180 var->prev_var = unit->variable_table;
2181 unit->variable_table = var;
2182 BFD_ASSERT (!unit->cached);
2185 /* No inline function in scope at this nesting level. */
2186 nested_funcs[nesting_level] = 0;
2189 for (i = 0; i < abbrev->num_attrs; ++i)
2191 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
2192 if (info_ptr == NULL)
2199 case DW_AT_call_file:
2200 func->caller_file = concat_filename (unit->line_table,
2204 case DW_AT_call_line:
2205 func->caller_line = attr.u.val;
2208 case DW_AT_abstract_origin:
2209 case DW_AT_specification:
2210 func->name = find_abstract_instance_name (unit, &attr);
2214 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
2216 if (func->name == NULL)
2217 func->name = attr.u.str;
2220 case DW_AT_linkage_name:
2221 case DW_AT_MIPS_linkage_name:
2222 func->name = attr.u.str;
2226 low_pc = attr.u.val;
2230 high_pc = attr.u.val;
2231 high_pc_relative = attr.form != DW_FORM_addr;
2235 if (!read_rangelist (unit, &func->arange, attr.u.val))
2239 case DW_AT_decl_file:
2240 func->file = concat_filename (unit->line_table,
2244 case DW_AT_decl_line:
2245 func->line = attr.u.val;
2257 var->name = attr.u.str;
2260 case DW_AT_decl_file:
2261 var->file = concat_filename (unit->line_table,
2265 case DW_AT_decl_line:
2266 var->line = attr.u.val;
2269 case DW_AT_external:
2270 if (attr.u.val != 0)
2274 case DW_AT_location:
2278 case DW_FORM_block1:
2279 case DW_FORM_block2:
2280 case DW_FORM_block4:
2281 case DW_FORM_exprloc:
2282 if (*attr.u.blk->data == DW_OP_addr)
2286 /* Verify that DW_OP_addr is the only opcode in the
2287 location, in which case the block size will be 1
2288 plus the address size. */
2289 /* ??? For TLS variables, gcc can emit
2290 DW_OP_addr <addr> DW_OP_GNU_push_tls_address
2291 which we don't handle here yet. */
2292 if (attr.u.blk->size == unit->addr_size + 1U)
2293 var->addr = bfd_get (unit->addr_size * 8,
2295 attr.u.blk->data + 1);
2310 if (high_pc_relative)
2313 if (func && high_pc != 0)
2315 if (!arange_add (unit, &func->arange, low_pc, high_pc))
2319 if (abbrev->has_children)
2323 if (nesting_level >= nested_funcs_size)
2325 struct funcinfo **tmp;
2327 nested_funcs_size *= 2;
2328 tmp = (struct funcinfo **)
2329 bfd_realloc (nested_funcs,
2330 nested_funcs_size * sizeof (struct funcinfo *));
2335 nested_funcs[nesting_level] = 0;
2339 free (nested_funcs);
2343 free (nested_funcs);
2347 /* Parse a DWARF2 compilation unit starting at INFO_PTR. This
2348 includes the compilation unit header that proceeds the DIE's, but
2349 does not include the length field that precedes each compilation
2350 unit header. END_PTR points one past the end of this comp unit.
2351 OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
2353 This routine does not read the whole compilation unit; only enough
2354 to get to the line number information for the compilation unit. */
2356 static struct comp_unit *
2357 parse_comp_unit (struct dwarf2_debug *stash,
2358 bfd_vma unit_length,
2359 bfd_byte *info_ptr_unit,
2360 unsigned int offset_size)
2362 struct comp_unit* unit;
2363 unsigned int version;
2364 bfd_uint64_t abbrev_offset = 0;
2365 unsigned int addr_size;
2366 struct abbrev_info** abbrevs;
2367 unsigned int abbrev_number, bytes_read, i;
2368 struct abbrev_info *abbrev;
2369 struct attribute attr;
2370 bfd_byte *info_ptr = stash->info_ptr;
2371 bfd_byte *end_ptr = info_ptr + unit_length;
2374 bfd_vma high_pc = 0;
2375 bfd *abfd = stash->bfd_ptr;
2376 bfd_boolean high_pc_relative = FALSE;
2378 version = read_2_bytes (abfd, info_ptr);
2380 BFD_ASSERT (offset_size == 4 || offset_size == 8);
2381 if (offset_size == 4)
2382 abbrev_offset = read_4_bytes (abfd, info_ptr);
2384 abbrev_offset = read_8_bytes (abfd, info_ptr);
2385 info_ptr += offset_size;
2386 addr_size = read_1_byte (abfd, info_ptr);
2389 if (version != 2 && version != 3 && version != 4)
2391 (*_bfd_error_handler)
2392 (_("Dwarf Error: found dwarf version '%u', this reader"
2393 " only handles version 2, 3 and 4 information."), version);
2394 bfd_set_error (bfd_error_bad_value);
2398 if (addr_size > sizeof (bfd_vma))
2400 (*_bfd_error_handler)
2401 (_("Dwarf Error: found address size '%u', this reader"
2402 " can not handle sizes greater than '%u'."),
2404 (unsigned int) sizeof (bfd_vma));
2405 bfd_set_error (bfd_error_bad_value);
2409 if (addr_size != 2 && addr_size != 4 && addr_size != 8)
2411 (*_bfd_error_handler)
2412 ("Dwarf Error: found address size '%u', this reader"
2413 " can only handle address sizes '2', '4' and '8'.", addr_size);
2414 bfd_set_error (bfd_error_bad_value);
2418 /* Read the abbrevs for this compilation unit into a table. */
2419 abbrevs = read_abbrevs (abfd, abbrev_offset, stash);
2423 abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
2424 info_ptr += bytes_read;
2425 if (! abbrev_number)
2427 (*_bfd_error_handler) (_("Dwarf Error: Bad abbrev number: %u."),
2429 bfd_set_error (bfd_error_bad_value);
2433 abbrev = lookup_abbrev (abbrev_number, abbrevs);
2436 (*_bfd_error_handler) (_("Dwarf Error: Could not find abbrev number %u."),
2438 bfd_set_error (bfd_error_bad_value);
2442 amt = sizeof (struct comp_unit);
2443 unit = (struct comp_unit *) bfd_zalloc (abfd, amt);
2447 unit->version = version;
2448 unit->addr_size = addr_size;
2449 unit->offset_size = offset_size;
2450 unit->abbrevs = abbrevs;
2451 unit->end_ptr = end_ptr;
2452 unit->stash = stash;
2453 unit->info_ptr_unit = info_ptr_unit;
2454 unit->sec_info_ptr = stash->sec_info_ptr;
2456 for (i = 0; i < abbrev->num_attrs; ++i)
2458 info_ptr = read_attribute (&attr, &abbrev->attrs[i], unit, info_ptr);
2459 if (info_ptr == NULL)
2462 /* Store the data if it is of an attribute we want to keep in a
2463 partial symbol table. */
2466 case DW_AT_stmt_list:
2468 unit->line_offset = attr.u.val;
2472 unit->name = attr.u.str;
2476 low_pc = attr.u.val;
2477 /* If the compilation unit DIE has a DW_AT_low_pc attribute,
2478 this is the base address to use when reading location
2479 lists or range lists. */
2480 if (abbrev->tag == DW_TAG_compile_unit)
2481 unit->base_address = low_pc;
2485 high_pc = attr.u.val;
2486 high_pc_relative = attr.form != DW_FORM_addr;
2490 if (!read_rangelist (unit, &unit->arange, attr.u.val))
2494 case DW_AT_comp_dir:
2496 char *comp_dir = attr.u.str;
2499 /* Irix 6.2 native cc prepends <machine>.: to the compilation
2500 directory, get rid of it. */
2501 char *cp = strchr (comp_dir, ':');
2503 if (cp && cp != comp_dir && cp[-1] == '.' && cp[1] == '/')
2506 unit->comp_dir = comp_dir;
2514 if (high_pc_relative)
2518 if (!arange_add (unit, &unit->arange, low_pc, high_pc))
2522 unit->first_child_die_ptr = info_ptr;
2526 /* Return TRUE if UNIT may contain the address given by ADDR. When
2527 there are functions written entirely with inline asm statements, the
2528 range info in the compilation unit header may not be correct. We
2529 need to consult the line info table to see if a compilation unit
2530 really contains the given address. */
2533 comp_unit_contains_address (struct comp_unit *unit, bfd_vma addr)
2535 struct arange *arange;
2540 arange = &unit->arange;
2543 if (addr >= arange->low && addr < arange->high)
2545 arange = arange->next;
2552 /* If UNIT contains ADDR, set the output parameters to the values for
2553 the line containing ADDR. The output parameters, FILENAME_PTR,
2554 FUNCTIONNAME_PTR, and LINENUMBER_PTR, are pointers to the objects
2557 Return TRUE if UNIT contains ADDR, and no errors were encountered;
2561 comp_unit_find_nearest_line (struct comp_unit *unit,
2563 const char **filename_ptr,
2564 const char **functionname_ptr,
2565 unsigned int *linenumber_ptr,
2566 unsigned int *discriminator_ptr,
2567 struct dwarf2_debug *stash)
2571 struct funcinfo *function;
2576 if (! unit->line_table)
2578 if (! unit->stmtlist)
2584 unit->line_table = decode_line_info (unit, stash);
2586 if (! unit->line_table)
2592 if (unit->first_child_die_ptr < unit->end_ptr
2593 && ! scan_unit_for_symbols (unit))
2601 func_p = lookup_address_in_function_table (unit, addr,
2602 &function, functionname_ptr);
2603 if (func_p && (function->tag == DW_TAG_inlined_subroutine))
2604 stash->inliner_chain = function;
2605 line_p = lookup_address_in_line_info_table (unit->line_table, addr,
2609 return line_p || func_p;
2612 /* Check to see if line info is already decoded in a comp_unit.
2613 If not, decode it. Returns TRUE if no errors were encountered;
2617 comp_unit_maybe_decode_line_info (struct comp_unit *unit,
2618 struct dwarf2_debug *stash)
2623 if (! unit->line_table)
2625 if (! unit->stmtlist)
2631 unit->line_table = decode_line_info (unit, stash);
2633 if (! unit->line_table)
2639 if (unit->first_child_die_ptr < unit->end_ptr
2640 && ! scan_unit_for_symbols (unit))
2650 /* If UNIT contains SYM at ADDR, set the output parameters to the
2651 values for the line containing SYM. The output parameters,
2652 FILENAME_PTR, and LINENUMBER_PTR, are pointers to the objects to be
2655 Return TRUE if UNIT contains SYM, and no errors were encountered;
2659 comp_unit_find_line (struct comp_unit *unit,
2662 const char **filename_ptr,
2663 unsigned int *linenumber_ptr,
2664 struct dwarf2_debug *stash)
2666 if (!comp_unit_maybe_decode_line_info (unit, stash))
2669 if (sym->flags & BSF_FUNCTION)
2670 return lookup_symbol_in_function_table (unit, sym, addr,
2674 return lookup_symbol_in_variable_table (unit, sym, addr,
2679 static struct funcinfo *
2680 reverse_funcinfo_list (struct funcinfo *head)
2682 struct funcinfo *rhead;
2683 struct funcinfo *temp;
2685 for (rhead = NULL; head; head = temp)
2687 temp = head->prev_func;
2688 head->prev_func = rhead;
2694 static struct varinfo *
2695 reverse_varinfo_list (struct varinfo *head)
2697 struct varinfo *rhead;
2698 struct varinfo *temp;
2700 for (rhead = NULL; head; head = temp)
2702 temp = head->prev_var;
2703 head->prev_var = rhead;
2709 /* Extract all interesting funcinfos and varinfos of a compilation
2710 unit into hash tables for faster lookup. Returns TRUE if no
2711 errors were enountered; FALSE otherwise. */
2714 comp_unit_hash_info (struct dwarf2_debug *stash,
2715 struct comp_unit *unit,
2716 struct info_hash_table *funcinfo_hash_table,
2717 struct info_hash_table *varinfo_hash_table)
2719 struct funcinfo* each_func;
2720 struct varinfo* each_var;
2721 bfd_boolean okay = TRUE;
2723 BFD_ASSERT (stash->info_hash_status != STASH_INFO_HASH_DISABLED);
2725 if (!comp_unit_maybe_decode_line_info (unit, stash))
2728 BFD_ASSERT (!unit->cached);
2730 /* To preserve the original search order, we went to visit the function
2731 infos in the reversed order of the list. However, making the list
2732 bi-directional use quite a bit of extra memory. So we reverse
2733 the list first, traverse the list in the now reversed order and
2734 finally reverse the list again to get back the original order. */
2735 unit->function_table = reverse_funcinfo_list (unit->function_table);
2736 for (each_func = unit->function_table;
2738 each_func = each_func->prev_func)
2740 /* Skip nameless functions. */
2741 if (each_func->name)
2742 /* There is no need to copy name string into hash table as
2743 name string is either in the dwarf string buffer or
2744 info in the stash. */
2745 okay = insert_info_hash_table (funcinfo_hash_table, each_func->name,
2746 (void*) each_func, FALSE);
2748 unit->function_table = reverse_funcinfo_list (unit->function_table);
2752 /* We do the same for variable infos. */
2753 unit->variable_table = reverse_varinfo_list (unit->variable_table);
2754 for (each_var = unit->variable_table;
2756 each_var = each_var->prev_var)
2758 /* Skip stack vars and vars with no files or names. */
2759 if (each_var->stack == 0
2760 && each_var->file != NULL
2761 && each_var->name != NULL)
2762 /* There is no need to copy name string into hash table as
2763 name string is either in the dwarf string buffer or
2764 info in the stash. */
2765 okay = insert_info_hash_table (varinfo_hash_table, each_var->name,
2766 (void*) each_var, FALSE);
2769 unit->variable_table = reverse_varinfo_list (unit->variable_table);
2770 unit->cached = TRUE;
2774 /* Locate a section in a BFD containing debugging info. The search starts
2775 from the section after AFTER_SEC, or from the first section in the BFD if
2776 AFTER_SEC is NULL. The search works by examining the names of the
2777 sections. There are three permissiable names. The first two are given
2778 by DEBUG_SECTIONS[debug_info] (whose standard DWARF2 names are .debug_info
2779 and .zdebug_info). The third is a prefix .gnu.linkonce.wi.
2780 This is a variation on the .debug_info section which has a checksum
2781 describing the contents appended onto the name. This allows the linker to
2782 identify and discard duplicate debugging sections for different
2783 compilation units. */
2784 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
2787 find_debug_info (bfd *abfd, const struct dwarf_debug_section *debug_sections,
2788 asection *after_sec)
2793 if (after_sec == NULL)
2795 look = debug_sections[debug_info].uncompressed_name;
2796 msec = bfd_get_section_by_name (abfd, look);
2800 look = debug_sections[debug_info].compressed_name;
2803 msec = bfd_get_section_by_name (abfd, look);
2808 for (msec = abfd->sections; msec != NULL; msec = msec->next)
2809 if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
2815 for (msec = after_sec->next; msec != NULL; msec = msec->next)
2817 look = debug_sections[debug_info].uncompressed_name;
2818 if (strcmp (msec->name, look) == 0)
2821 look = debug_sections[debug_info].compressed_name;
2822 if (look != NULL && strcmp (msec->name, look) == 0)
2825 if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO))
2832 /* Unset vmas for adjusted sections in STASH. */
2835 unset_sections (struct dwarf2_debug *stash)
2838 struct adjusted_section *p;
2840 i = stash->adjusted_section_count;
2841 p = stash->adjusted_sections;
2842 for (; i > 0; i--, p++)
2843 p->section->vma = 0;
2846 /* Set unique VMAs for loadable and DWARF sections in ABFD and save
2847 VMAs in STASH for unset_sections. */
2850 place_sections (bfd *abfd, struct dwarf2_debug *stash)
2852 struct adjusted_section *p;
2855 if (stash->adjusted_section_count != 0)
2857 i = stash->adjusted_section_count;
2858 p = stash->adjusted_sections;
2859 for (; i > 0; i--, p++)
2860 p->section->vma = p->adj_vma;
2865 bfd_vma last_vma = 0, last_dwarf = 0;
2867 const char *debug_info_name;
2869 debug_info_name = stash->debug_sections[debug_info].uncompressed_name;
2871 for (sect = abfd->sections; sect != NULL; sect = sect->next)
2879 /* We need to adjust the VMAs of any .debug_info sections.
2880 Skip compressed ones, since no relocations could target
2881 them - they should not appear in object files anyway. */
2882 if (strcmp (sect->name, debug_info_name) == 0)
2884 else if (CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO))
2889 if (!is_debug_info && (sect->flags & SEC_LOAD) == 0)
2892 sz = sect->rawsize ? sect->rawsize : sect->size;
2899 amt = i * sizeof (struct adjusted_section);
2900 p = (struct adjusted_section *) bfd_alloc (abfd, amt);
2904 stash->adjusted_sections = p;
2905 stash->adjusted_section_count = i;
2907 for (sect = abfd->sections; sect != NULL; sect = sect->next)
2915 /* We need to adjust the VMAs of any .debug_info sections.
2916 Skip compressed ones, since no relocations could target
2917 them - they should not appear in object files anyway. */
2918 if (strcmp (sect->name, debug_info_name) == 0)
2920 else if (CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO))
2925 if (!is_debug_info && (sect->flags & SEC_LOAD) == 0)
2928 sz = sect->rawsize ? sect->rawsize : sect->size;
2935 BFD_ASSERT (sect->alignment_power == 0);
2936 sect->vma = last_dwarf;
2939 else if (last_vma != 0)
2941 /* Align the new address to the current section
2943 last_vma = ((last_vma
2944 + ~((bfd_vma) -1 << sect->alignment_power))
2945 & ((bfd_vma) -1 << sect->alignment_power));
2946 sect->vma = last_vma;
2947 last_vma += sect->vma + sz;
2950 last_vma += sect->vma + sz;
2952 p->adj_vma = sect->vma;
2961 /* Look up a funcinfo by name using the given info hash table. If found,
2962 also update the locations pointed to by filename_ptr and linenumber_ptr.
2964 This function returns TRUE if a funcinfo that matches the given symbol
2965 and address is found with any error; otherwise it returns FALSE. */
2968 info_hash_lookup_funcinfo (struct info_hash_table *hash_table,
2971 const char **filename_ptr,
2972 unsigned int *linenumber_ptr)
2974 struct funcinfo* each_func;
2975 struct funcinfo* best_fit = NULL;
2976 struct info_list_node *node;
2977 struct arange *arange;
2978 const char *name = bfd_asymbol_name (sym);
2979 asection *sec = bfd_get_section (sym);
2981 for (node = lookup_info_hash_table (hash_table, name);
2985 each_func = (struct funcinfo *) node->info;
2986 for (arange = &each_func->arange;
2988 arange = arange->next)
2990 if ((!each_func->sec || each_func->sec == sec)
2991 && addr >= arange->low
2992 && addr < arange->high
2994 || (arange->high - arange->low
2995 < best_fit->arange.high - best_fit->arange.low)))
2996 best_fit = each_func;
3002 best_fit->sec = sec;
3003 *filename_ptr = best_fit->file;
3004 *linenumber_ptr = best_fit->line;
3011 /* Look up a varinfo by name using the given info hash table. If found,
3012 also update the locations pointed to by filename_ptr and linenumber_ptr.
3014 This function returns TRUE if a varinfo that matches the given symbol
3015 and address is found with any error; otherwise it returns FALSE. */
3018 info_hash_lookup_varinfo (struct info_hash_table *hash_table,
3021 const char **filename_ptr,
3022 unsigned int *linenumber_ptr)
3024 const char *name = bfd_asymbol_name (sym);
3025 asection *sec = bfd_get_section (sym);
3026 struct varinfo* each;
3027 struct info_list_node *node;
3029 for (node = lookup_info_hash_table (hash_table, name);
3033 each = (struct varinfo *) node->info;
3034 if (each->addr == addr
3035 && (!each->sec || each->sec == sec))
3038 *filename_ptr = each->file;
3039 *linenumber_ptr = each->line;
3047 /* Update the funcinfo and varinfo info hash tables if they are
3048 not up to date. Returns TRUE if there is no error; otherwise
3049 returns FALSE and disable the info hash tables. */
3052 stash_maybe_update_info_hash_tables (struct dwarf2_debug *stash)
3054 struct comp_unit *each;
3056 /* Exit if hash tables are up-to-date. */
3057 if (stash->all_comp_units == stash->hash_units_head)
3060 if (stash->hash_units_head)
3061 each = stash->hash_units_head->prev_unit;
3063 each = stash->last_comp_unit;
3067 if (!comp_unit_hash_info (stash, each, stash->funcinfo_hash_table,
3068 stash->varinfo_hash_table))
3070 stash->info_hash_status = STASH_INFO_HASH_DISABLED;
3073 each = each->prev_unit;
3076 stash->hash_units_head = stash->all_comp_units;
3080 /* Check consistency of info hash tables. This is for debugging only. */
3082 static void ATTRIBUTE_UNUSED
3083 stash_verify_info_hash_table (struct dwarf2_debug *stash)
3085 struct comp_unit *each_unit;
3086 struct funcinfo *each_func;
3087 struct varinfo *each_var;
3088 struct info_list_node *node;
3091 for (each_unit = stash->all_comp_units;
3093 each_unit = each_unit->next_unit)
3095 for (each_func = each_unit->function_table;
3097 each_func = each_func->prev_func)
3099 if (!each_func->name)
3101 node = lookup_info_hash_table (stash->funcinfo_hash_table,
3105 while (node && !found)
3107 found = node->info == each_func;
3113 for (each_var = each_unit->variable_table;
3115 each_var = each_var->prev_var)
3117 if (!each_var->name || !each_var->file || each_var->stack)
3119 node = lookup_info_hash_table (stash->varinfo_hash_table,
3123 while (node && !found)
3125 found = node->info == each_var;
3133 /* Check to see if we want to enable the info hash tables, which consume
3134 quite a bit of memory. Currently we only check the number times
3135 bfd_dwarf2_find_line is called. In the future, we may also want to
3136 take the number of symbols into account. */
3139 stash_maybe_enable_info_hash_tables (bfd *abfd, struct dwarf2_debug *stash)
3141 BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_OFF);
3143 if (stash->info_hash_count++ < STASH_INFO_HASH_TRIGGER)
3146 /* FIXME: Maybe we should check the reduce_memory_overheads
3147 and optimize fields in the bfd_link_info structure ? */
3149 /* Create hash tables. */
3150 stash->funcinfo_hash_table = create_info_hash_table (abfd);
3151 stash->varinfo_hash_table = create_info_hash_table (abfd);
3152 if (!stash->funcinfo_hash_table || !stash->varinfo_hash_table)
3154 /* Turn off info hashes if any allocation above fails. */
3155 stash->info_hash_status = STASH_INFO_HASH_DISABLED;
3158 /* We need a forced update so that the info hash tables will
3159 be created even though there is no compilation unit. That
3160 happens if STASH_INFO_HASH_TRIGGER is 0. */
3161 stash_maybe_update_info_hash_tables (stash);
3162 stash->info_hash_status = STASH_INFO_HASH_ON;
3165 /* Find the file and line associated with a symbol and address using the
3166 info hash tables of a stash. If there is a match, the function returns
3167 TRUE and update the locations pointed to by filename_ptr and linenumber_ptr;
3168 otherwise it returns FALSE. */
3171 stash_find_line_fast (struct dwarf2_debug *stash,
3174 const char **filename_ptr,
3175 unsigned int *linenumber_ptr)
3177 BFD_ASSERT (stash->info_hash_status == STASH_INFO_HASH_ON);
3179 if (sym->flags & BSF_FUNCTION)
3180 return info_hash_lookup_funcinfo (stash->funcinfo_hash_table, sym, addr,
3181 filename_ptr, linenumber_ptr);
3182 return info_hash_lookup_varinfo (stash->varinfo_hash_table, sym, addr,
3183 filename_ptr, linenumber_ptr);
3186 /* Read debug information from DEBUG_BFD when DEBUG_BFD is specified.
3187 If DEBUG_BFD is not specified, we read debug information from ABFD
3188 or its gnu_debuglink. The results will be stored in PINFO.
3189 The function returns TRUE iff debug information is ready. */
3192 _bfd_dwarf2_slurp_debug_info (bfd *abfd, bfd *debug_bfd,
3193 const struct dwarf_debug_section *debug_sections,
3197 bfd_size_type amt = sizeof (struct dwarf2_debug);
3198 bfd_size_type total_size;
3200 struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;
3205 stash = (struct dwarf2_debug *) bfd_zalloc (abfd, amt);
3208 stash->debug_sections = debug_sections;
3212 if (debug_bfd == NULL)
3215 msec = find_debug_info (debug_bfd, debug_sections, NULL);
3216 if (msec == NULL && abfd == debug_bfd)
3218 char * debug_filename = bfd_follow_gnu_debuglink (abfd, DEBUGDIR);
3220 if (debug_filename == NULL)
3221 /* No dwarf2 info, and no gnu_debuglink to follow.
3222 Note that at this point the stash has been allocated, but
3223 contains zeros. This lets future calls to this function
3224 fail more quickly. */
3227 if ((debug_bfd = bfd_openr (debug_filename, NULL)) == NULL
3228 || ! bfd_check_format (debug_bfd, bfd_object)
3229 || (msec = find_debug_info (debug_bfd,
3230 debug_sections, NULL)) == NULL)
3233 bfd_close (debug_bfd);
3234 /* FIXME: Should we report our failure to follow the debuglink ? */
3235 free (debug_filename);
3240 /* There can be more than one DWARF2 info section in a BFD these
3241 days. First handle the easy case when there's only one. If
3242 there's more than one, try case two: none of the sections is
3243 compressed. In that case, read them all in and produce one
3244 large stash. We do this in two passes - in the first pass we
3245 just accumulate the section sizes, and in the second pass we
3246 read in the section's contents. (The allows us to avoid
3247 reallocing the data as we add sections to the stash.) If
3248 some or all sections are compressed, then do things the slow
3249 way, with a bunch of reallocs. */
3251 if (! find_debug_info (debug_bfd, debug_sections, msec))
3253 /* Case 1: only one info section. */
3254 total_size = msec->size;
3255 if (! read_section (debug_bfd, &stash->debug_sections[debug_info],
3257 &stash->info_ptr_memory, &total_size))
3262 /* Case 2: multiple sections. */
3263 for (total_size = 0;
3265 msec = find_debug_info (debug_bfd, debug_sections, msec))
3266 total_size += msec->size;
3268 stash->info_ptr_memory = (bfd_byte *) bfd_malloc (total_size);
3269 if (stash->info_ptr_memory == NULL)
3273 for (msec = find_debug_info (debug_bfd, debug_sections, NULL);
3275 msec = find_debug_info (debug_bfd, debug_sections, msec))
3283 if (!(bfd_simple_get_relocated_section_contents
3284 (debug_bfd, msec, stash->info_ptr_memory + total_size,
3292 stash->info_ptr = stash->info_ptr_memory;
3293 stash->info_ptr_end = stash->info_ptr + total_size;
3294 stash->sec = find_debug_info (debug_bfd, debug_sections, NULL);
3295 stash->sec_info_ptr = stash->info_ptr;
3296 stash->syms = symbols;
3297 stash->bfd_ptr = debug_bfd;
3302 /* Find the source code location of SYMBOL. If SYMBOL is NULL
3303 then find the nearest source code location corresponding to
3304 the address SECTION + OFFSET.
3305 Returns TRUE if the line is found without error and fills in
3306 FILENAME_PTR and LINENUMBER_PTR. In the case where SYMBOL was
3307 NULL the FUNCTIONNAME_PTR is also filled in.
3308 SYMBOLS contains the symbol table for ABFD.
3309 DEBUG_SECTIONS contains the name of the dwarf debug sections.
3310 ADDR_SIZE is the number of bytes in the initial .debug_info length
3311 field and in the abbreviation offset, or zero to indicate that the
3312 default value should be used. */
3315 find_line (bfd *abfd,
3316 const struct dwarf_debug_section *debug_sections,
3321 const char **filename_ptr,
3322 const char **functionname_ptr,
3323 unsigned int *linenumber_ptr,
3324 unsigned int *discriminator_ptr,
3325 unsigned int addr_size,
3328 /* Read each compilation unit from the section .debug_info, and check
3329 to see if it contains the address we are searching for. If yes,
3330 lookup the address, and return the line number info. If no, go
3331 on to the next compilation unit.
3333 We keep a list of all the previously read compilation units, and
3334 a pointer to the next un-read compilation unit. Check the
3335 previously read units before reading more. */
3336 struct dwarf2_debug *stash;
3337 /* What address are we looking for? */
3339 struct comp_unit* each;
3340 bfd_vma found = FALSE;
3341 bfd_boolean do_line;
3343 *filename_ptr = NULL;
3344 if (functionname_ptr != NULL)
3345 *functionname_ptr = NULL;
3346 *linenumber_ptr = 0;
3348 if (! _bfd_dwarf2_slurp_debug_info (abfd, NULL,
3349 debug_sections, symbols, pinfo))
3352 stash = (struct dwarf2_debug *) *pinfo;
3354 /* In a relocatable file, 2 functions may have the same address.
3355 We change the section vma so that they won't overlap. */
3356 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
3358 if (! place_sections (abfd, stash))
3362 do_line = (section == NULL
3364 && functionname_ptr == NULL
3368 addr = symbol->value;
3369 section = bfd_get_section (symbol);
3371 else if (section != NULL
3372 && functionname_ptr != NULL
3378 if (section->output_section)
3379 addr += section->output_section->vma + section->output_offset;
3381 addr += section->vma;
3383 /* A null info_ptr indicates that there is no dwarf2 info
3384 (or that an error occured while setting up the stash). */
3385 if (! stash->info_ptr)
3388 stash->inliner_chain = NULL;
3390 /* Check the previously read comp. units first. */
3393 /* The info hash tables use quite a bit of memory. We may not want to
3394 always use them. We use some heuristics to decide if and when to
3396 if (stash->info_hash_status == STASH_INFO_HASH_OFF)
3397 stash_maybe_enable_info_hash_tables (abfd, stash);
3399 /* Keep info hash table up to date if they are available. Note that we
3400 may disable the hash tables if there is any error duing update. */
3401 if (stash->info_hash_status == STASH_INFO_HASH_ON)
3402 stash_maybe_update_info_hash_tables (stash);
3404 if (stash->info_hash_status == STASH_INFO_HASH_ON)
3406 found = stash_find_line_fast (stash, symbol, addr, filename_ptr,
3413 /* Check the previously read comp. units first. */
3414 for (each = stash->all_comp_units; each; each = each->next_unit)
3415 if ((symbol->flags & BSF_FUNCTION) == 0
3416 || each->arange.high == 0
3417 || comp_unit_contains_address (each, addr))
3419 found = comp_unit_find_line (each, symbol, addr, filename_ptr,
3420 linenumber_ptr, stash);
3428 for (each = stash->all_comp_units; each; each = each->next_unit)
3430 found = ((each->arange.high == 0
3431 || comp_unit_contains_address (each, addr))
3432 && comp_unit_find_nearest_line (each, addr,
3443 /* The DWARF2 spec says that the initial length field, and the
3444 offset of the abbreviation table, should both be 4-byte values.
3445 However, some compilers do things differently. */
3448 BFD_ASSERT (addr_size == 4 || addr_size == 8);
3450 /* Read each remaining comp. units checking each as they are read. */
3451 while (stash->info_ptr < stash->info_ptr_end)
3454 unsigned int offset_size = addr_size;
3455 bfd_byte *info_ptr_unit = stash->info_ptr;
3457 length = read_4_bytes (stash->bfd_ptr, stash->info_ptr);
3458 /* A 0xffffff length is the DWARF3 way of indicating
3459 we use 64-bit offsets, instead of 32-bit offsets. */
3460 if (length == 0xffffffff)
3463 length = read_8_bytes (stash->bfd_ptr, stash->info_ptr + 4);
3464 stash->info_ptr += 12;
3466 /* A zero length is the IRIX way of indicating 64-bit offsets,
3467 mostly because the 64-bit length will generally fit in 32
3468 bits, and the endianness helps. */
3469 else if (length == 0)
3472 length = read_4_bytes (stash->bfd_ptr, stash->info_ptr + 4);
3473 stash->info_ptr += 8;
3475 /* In the absence of the hints above, we assume 32-bit DWARF2
3476 offsets even for targets with 64-bit addresses, because:
3477 a) most of the time these targets will not have generated
3478 more than 2Gb of debug info and so will not need 64-bit
3481 b) if they do use 64-bit offsets but they are not using
3482 the size hints that are tested for above then they are
3483 not conforming to the DWARF3 standard anyway. */
3484 else if (addr_size == 8)
3487 stash->info_ptr += 4;
3490 stash->info_ptr += 4;
3494 each = parse_comp_unit (stash, length, info_ptr_unit,
3497 /* The dwarf information is damaged, don't trust it any
3500 stash->info_ptr += length;
3502 if (stash->all_comp_units)
3503 stash->all_comp_units->prev_unit = each;
3505 stash->last_comp_unit = each;
3507 each->next_unit = stash->all_comp_units;
3508 stash->all_comp_units = each;
3510 /* DW_AT_low_pc and DW_AT_high_pc are optional for
3511 compilation units. If we don't have them (i.e.,
3512 unit->high == 0), we need to consult the line info table
3513 to see if a compilation unit contains the given
3516 found = (((symbol->flags & BSF_FUNCTION) == 0
3517 || each->arange.high == 0
3518 || comp_unit_contains_address (each, addr))
3519 && comp_unit_find_line (each, symbol, addr,
3524 found = ((each->arange.high == 0
3525 || comp_unit_contains_address (each, addr))
3526 && comp_unit_find_nearest_line (each, addr,
3533 if ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr)
3534 == stash->sec->size)
3536 stash->sec = find_debug_info (stash->bfd_ptr, debug_sections,
3538 stash->sec_info_ptr = stash->info_ptr;
3547 if ((abfd->flags & (EXEC_P | DYNAMIC)) == 0)
3548 unset_sections (stash);
3553 /* The DWARF2 version of find_nearest_line.
3554 Return TRUE if the line is found without error. */
3557 _bfd_dwarf2_find_nearest_line (bfd *abfd,
3558 const struct dwarf_debug_section *debug_sections,
3562 const char **filename_ptr,
3563 const char **functionname_ptr,
3564 unsigned int *linenumber_ptr,
3565 unsigned int *discriminator_ptr,
3566 unsigned int addr_size,
3569 return find_line (abfd, debug_sections, section, offset, NULL, symbols,
3570 filename_ptr, functionname_ptr, linenumber_ptr,
3571 discriminator_ptr, addr_size, pinfo);
3574 /* The DWARF2 version of find_line.
3575 Return TRUE if the line is found without error. */
3578 _bfd_dwarf2_find_line (bfd *abfd,
3581 const char **filename_ptr,
3582 unsigned int *linenumber_ptr,
3583 unsigned int *discriminator_ptr,
3584 unsigned int addr_size,
3587 return find_line (abfd, dwarf_debug_sections, NULL, 0, symbol, symbols,
3588 filename_ptr, NULL, linenumber_ptr, discriminator_ptr,
3593 _bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED,
3594 const char **filename_ptr,
3595 const char **functionname_ptr,
3596 unsigned int *linenumber_ptr,
3599 struct dwarf2_debug *stash;
3601 stash = (struct dwarf2_debug *) *pinfo;
3604 struct funcinfo *func = stash->inliner_chain;
3606 if (func && func->caller_func)
3608 *filename_ptr = func->caller_file;
3609 *functionname_ptr = func->caller_func->name;
3610 *linenumber_ptr = func->caller_line;
3611 stash->inliner_chain = func->caller_func;
3620 _bfd_dwarf2_cleanup_debug_info (bfd *abfd, void **pinfo)
3622 struct dwarf2_debug *stash = (struct dwarf2_debug *) *pinfo;;
3623 struct comp_unit *each;
3625 if (abfd == NULL || stash == NULL)
3628 for (each = stash->all_comp_units; each; each = each->next_unit)
3630 struct abbrev_info **abbrevs = each->abbrevs;
3631 struct funcinfo *function_table = each->function_table;
3632 struct varinfo *variable_table = each->variable_table;
3635 for (i = 0; i < ABBREV_HASH_SIZE; i++)
3637 struct abbrev_info *abbrev = abbrevs[i];
3641 free (abbrev->attrs);
3642 abbrev = abbrev->next;
3646 if (each->line_table)
3648 free (each->line_table->dirs);
3649 free (each->line_table->files);
3652 while (function_table)
3654 if (function_table->file)
3656 free (function_table->file);
3657 function_table->file = NULL;
3660 if (function_table->caller_file)
3662 free (function_table->caller_file);
3663 function_table->caller_file = NULL;
3665 function_table = function_table->prev_func;
3668 while (variable_table)
3670 if (variable_table->file)
3672 free (variable_table->file);
3673 variable_table->file = NULL;
3676 variable_table = variable_table->prev_var;
3680 if (stash->dwarf_abbrev_buffer)
3681 free (stash->dwarf_abbrev_buffer);
3682 if (stash->dwarf_line_buffer)
3683 free (stash->dwarf_line_buffer);
3684 if (stash->dwarf_str_buffer)
3685 free (stash->dwarf_str_buffer);
3686 if (stash->dwarf_ranges_buffer)
3687 free (stash->dwarf_ranges_buffer);
3688 if (stash->info_ptr_memory)
3689 free (stash->info_ptr_memory);