2 Copyright (C) 1994-2024 Free Software Foundation, Inc.
4 Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions
7 From the dwarf2read.c header:
8 Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
9 Inc. with support from Florida State University (under contract
10 with the Ada Joint Program Office), and Silicon Graphics, Inc.
11 Initial contribution by Brent Benson, Harris Computer Systems, Inc.,
12 based on Fred Fish's (Cygnus Support) implementation of DWARF 1
13 support in dwarfread.c
15 This file is part of BFD.
17 This program is free software; you can redistribute it and/or modify
18 it under the terms of the GNU General Public License as published by
19 the Free Software Foundation; either version 3 of the License, or (at
20 your option) any later version.
22 This program is distributed in the hope that it will be useful, but
23 WITHOUT ANY WARRANTY; without even the implied warranty of
24 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
25 General Public License for more details.
27 You should have received a copy of the GNU General Public License
28 along with this program; if not, write to the Free Software
29 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
30 MA 02110-1301, USA. */
34 #include "libiberty.h"
40 #include "splay-tree.h"
42 /* The data in the .debug_line statement prologue looks like this. */
47 unsigned short version
;
48 bfd_vma prologue_length
;
49 unsigned char minimum_instruction_length
;
50 unsigned char maximum_ops_per_insn
;
51 unsigned char default_is_stmt
;
53 unsigned char line_range
;
54 unsigned char opcode_base
;
55 unsigned char *standard_opcode_lengths
;
58 /* Attributes have a name and a value. */
62 enum dwarf_attribute name
;
67 struct dwarf_block
*blk
;
74 /* Blocks are a bunch of untyped bytes. */
81 struct adjusted_section
88 /* A trie to map quickly from address range to compilation unit.
90 This is a fairly standard radix-256 trie, used to quickly locate which
91 compilation unit any given address belongs to. Given that each compilation
92 unit may register hundreds of very small and unaligned ranges (which may
93 potentially overlap, due to inlining and other concerns), and a large
94 program may end up containing hundreds of thousands of such ranges, we cannot
95 scan through them linearly without undue slowdown.
97 We use a hybrid trie to avoid memory explosion: There are two types of trie
98 nodes, leaves and interior nodes. (Almost all nodes are leaves, so they
99 take up the bulk of the memory usage.) Leaves contain a simple array of
100 ranges (high/low address) and which compilation unit contains those ranges,
101 and when we get to a leaf, we scan through it linearly. Interior nodes
102 contain pointers to 256 other nodes, keyed by the next byte of the address.
103 So for a 64-bit address like 0x1234567abcd, we would start at the root and go
104 down child[0x00]->child[0x00]->child[0x01]->child[0x23]->child[0x45] etc.,
105 until we hit a leaf. (Nodes are, in general, leaves until they exceed the
106 default allocation of 16 elements, at which point they are converted to
107 interior node if possible.) This gives us near-constant lookup times;
108 the only thing that can be costly is if there are lots of overlapping ranges
109 within a single 256-byte segment of the binary, in which case we have to
110 scan through them all to find the best match.
112 For a binary with few ranges, we will in practice only have a single leaf
113 node at the root, containing a simple array. Thus, the scheme is efficient
114 for both small and large binaries.
117 /* Experiments have shown 16 to be a memory-efficient default leaf size.
118 The only case where a leaf will hold more memory than this, is at the
119 bottomost level (covering 256 bytes in the binary), where we'll expand
120 the leaf to be able to hold more ranges if needed.
122 #define TRIE_LEAF_SIZE 16
124 /* All trie_node pointers will really be trie_leaf or trie_interior,
125 but they have this common head. */
128 /* If zero, we are an interior node.
129 Otherwise, how many ranges we have room for in this leaf. */
130 unsigned int num_room_in_leaf
;
135 struct trie_node head
;
136 unsigned int num_stored_in_leaf
;
138 struct comp_unit
*unit
;
139 bfd_vma low_pc
, high_pc
;
145 struct trie_node head
;
146 struct trie_node
*children
[256];
149 static struct trie_node
*alloc_trie_leaf (bfd
*abfd
)
151 struct trie_leaf
*leaf
;
152 size_t amt
= sizeof (*leaf
) + TRIE_LEAF_SIZE
* sizeof (leaf
->ranges
[0]);
153 leaf
= bfd_zalloc (abfd
, amt
);
156 leaf
->head
.num_room_in_leaf
= TRIE_LEAF_SIZE
;
166 /* Return true if address range do intersect. */
169 addr_range_intersects (struct addr_range
*r1
, struct addr_range
*r2
)
171 return (r1
->start
<= r2
->start
&& r2
->start
< r1
->end
)
172 || (r1
->start
<= (r2
->end
- 1) && (r2
->end
- 1) < r1
->end
);
175 /* Compare function for splay tree of addr_ranges. */
178 splay_tree_compare_addr_range (splay_tree_key xa
, splay_tree_key xb
)
180 struct addr_range
*r1
= (struct addr_range
*) xa
;
181 struct addr_range
*r2
= (struct addr_range
*) xb
;
183 if (addr_range_intersects (r1
, r2
) || addr_range_intersects (r2
, r1
))
185 else if (r1
->end
<= r2
->start
)
191 /* Splay tree release function for keys (addr_range). */
194 splay_tree_free_addr_range (splay_tree_key key
)
196 free ((struct addr_range
*)key
);
199 struct dwarf2_debug_file
201 /* The actual bfd from which debug info was loaded. Might be
202 different to orig_bfd because of gnu_debuglink sections. */
205 /* Pointer to the symbol table. */
208 /* The current info pointer for the .debug_info section being parsed. */
211 /* A pointer to the memory block allocated for .debug_info sections. */
212 bfd_byte
*dwarf_info_buffer
;
214 /* Length of the loaded .debug_info sections. */
215 bfd_size_type dwarf_info_size
;
217 /* Pointer to the .debug_abbrev section loaded into memory. */
218 bfd_byte
*dwarf_abbrev_buffer
;
220 /* Length of the loaded .debug_abbrev section. */
221 bfd_size_type dwarf_abbrev_size
;
223 /* Buffer for decode_line_info. */
224 bfd_byte
*dwarf_line_buffer
;
226 /* Length of the loaded .debug_line section. */
227 bfd_size_type dwarf_line_size
;
229 /* Pointer to the .debug_str section loaded into memory. */
230 bfd_byte
*dwarf_str_buffer
;
232 /* Length of the loaded .debug_str section. */
233 bfd_size_type dwarf_str_size
;
235 /* Pointer to the .debug_str_offsets section loaded into memory. */
236 bfd_byte
*dwarf_str_offsets_buffer
;
238 /* Length of the loaded .debug_str_offsets section. */
239 bfd_size_type dwarf_str_offsets_size
;
241 /* Pointer to the .debug_addr section loaded into memory. */
242 bfd_byte
*dwarf_addr_buffer
;
244 /* Length of the loaded .debug_addr section. */
245 bfd_size_type dwarf_addr_size
;
247 /* Pointer to the .debug_line_str section loaded into memory. */
248 bfd_byte
*dwarf_line_str_buffer
;
250 /* Length of the loaded .debug_line_str section. */
251 bfd_size_type dwarf_line_str_size
;
253 /* Pointer to the .debug_ranges section loaded into memory. */
254 bfd_byte
*dwarf_ranges_buffer
;
256 /* Length of the loaded .debug_ranges section. */
257 bfd_size_type dwarf_ranges_size
;
259 /* Pointer to the .debug_rnglists section loaded into memory. */
260 bfd_byte
*dwarf_rnglists_buffer
;
262 /* Length of the loaded .debug_rnglists section. */
263 bfd_size_type dwarf_rnglists_size
;
265 /* A list of all previously read comp_units. */
266 struct comp_unit
*all_comp_units
;
268 /* A list of all previously read comp_units with no ranges (yet). */
269 struct comp_unit
*all_comp_units_without_ranges
;
271 /* Last comp unit in list above. */
272 struct comp_unit
*last_comp_unit
;
274 /* Line table at line_offset zero. */
275 struct line_info_table
*line_table
;
277 /* Hash table to map offsets to decoded abbrevs. */
278 htab_t abbrev_offsets
;
280 /* Root of a trie to map addresses to compilation units. */
281 struct trie_node
*trie_root
;
283 /* Splay tree to map info_ptr address to compilation units. */
284 splay_tree comp_unit_tree
;
289 /* Names of the debug sections. */
290 const struct dwarf_debug_section
*debug_sections
;
292 /* Per-file stuff. */
293 struct dwarf2_debug_file f
, alt
;
295 /* Pointer to the original bfd for which debug was loaded. This is what
296 we use to compare and so check that the cached debug data is still
297 valid - it saves having to possibly dereference the gnu_debuglink each
301 /* If the most recent call to bfd_find_nearest_line was given an
302 address in an inlined function, preserve a pointer into the
303 calling chain for subsequent calls to bfd_find_inliner_info to
305 struct funcinfo
*inliner_chain
;
307 /* Section VMAs at the time the stash was built. */
309 /* Number of sections in the SEC_VMA table. */
310 unsigned int sec_vma_count
;
312 /* Number of sections whose VMA we must adjust. */
313 int adjusted_section_count
;
315 /* Array of sections with adjusted VMA. */
316 struct adjusted_section
*adjusted_sections
;
318 /* Number of times find_line is called. This is used in
319 the heuristic for enabling the info hash tables. */
322 #define STASH_INFO_HASH_TRIGGER 100
324 /* Hash table mapping symbol names to function infos. */
325 struct info_hash_table
*funcinfo_hash_table
;
327 /* Hash table mapping symbol names to variable infos. */
328 struct info_hash_table
*varinfo_hash_table
;
330 /* Head of comp_unit list in the last hash table update. */
331 struct comp_unit
*hash_units_head
;
333 /* Status of info hash. */
334 int info_hash_status
;
335 #define STASH_INFO_HASH_OFF 0
336 #define STASH_INFO_HASH_ON 1
337 #define STASH_INFO_HASH_DISABLED 2
339 /* True if we opened bfd_ptr. */
340 bool close_on_cleanup
;
350 /* A minimal decoding of DWARF2 compilation units. We only decode
351 what's needed to get to the line number information. */
355 /* Chain the previously read compilation units. */
356 struct comp_unit
*next_unit
;
358 /* Chain the previously read compilation units that have no ranges yet.
359 We scan these separately when we have a trie over the ranges.
360 Unused if arange.high != 0. */
361 struct comp_unit
*next_unit_without_ranges
;
363 /* Likewise, chain the compilation unit read after this one.
364 The comp units are stored in reversed reading order. */
365 struct comp_unit
*prev_unit
;
367 /* Keep the bfd convenient (for memory allocation). */
370 /* The lowest and highest addresses contained in this compilation
371 unit as specified in the compilation unit header. */
372 struct arange arange
;
374 /* The DW_AT_name attribute (for error messages). */
377 /* The abbrev hash table. */
378 struct abbrev_info
**abbrevs
;
380 /* DW_AT_language. */
383 /* Note that an error was found by comp_unit_find_nearest_line. */
386 /* The DW_AT_comp_dir attribute. */
389 /* TRUE if there is a line number table associated with this comp. unit. */
392 /* Pointer to the current comp_unit so that we can find a given entry
394 bfd_byte
*info_ptr_unit
;
396 /* The offset into .debug_line of the line number table. */
397 unsigned long line_offset
;
399 /* Pointer to the first child die for the comp unit. */
400 bfd_byte
*first_child_die_ptr
;
402 /* The end of the comp unit. */
405 /* The decoded line number, NULL if not yet decoded. */
406 struct line_info_table
*line_table
;
408 /* A list of the functions found in this comp. unit. */
409 struct funcinfo
*function_table
;
411 /* A table of function information references searchable by address. */
412 struct lookup_funcinfo
*lookup_funcinfo_table
;
414 /* Number of functions in the function_table and sorted_function_table. */
415 bfd_size_type number_of_functions
;
417 /* A list of the variables found in this comp. unit. */
418 struct varinfo
*variable_table
;
420 /* Pointers to dwarf2_debug structures. */
421 struct dwarf2_debug
*stash
;
422 struct dwarf2_debug_file
*file
;
424 /* DWARF format version for this unit - from unit header. */
427 /* Address size for this unit - from unit header. */
428 unsigned char addr_size
;
430 /* Offset size for this unit - from unit header. */
431 unsigned char offset_size
;
433 /* Base address for this unit - from DW_AT_low_pc attribute of
434 DW_TAG_compile_unit DIE */
435 bfd_vma base_address
;
437 /* TRUE if symbols are cached in hash table for faster lookup by name. */
440 /* Used when iterating over trie leaves to know which units we have
441 already seen in this iteration. */
444 /* Base address of debug_addr section. */
445 size_t dwarf_addr_offset
;
447 /* Base address of string offset table. */
448 size_t dwarf_str_offset
;
451 /* This data structure holds the information of an abbrev. */
454 unsigned int number
; /* Number identifying abbrev. */
455 enum dwarf_tag tag
; /* DWARF tag. */
456 bool has_children
; /* TRUE if the abbrev has children. */
457 unsigned int num_attrs
; /* Number of attributes. */
458 struct attr_abbrev
* attrs
; /* An array of attribute descriptions. */
459 struct abbrev_info
* next
; /* Next in chain. */
464 enum dwarf_attribute name
;
465 enum dwarf_form form
;
466 bfd_vma implicit_const
;
469 /* Map of uncompressed DWARF debug section name to compressed one. It
470 is terminated by NULL uncompressed_name. */
472 const struct dwarf_debug_section dwarf_debug_sections
[] =
474 { ".debug_abbrev", ".zdebug_abbrev" },
475 { ".debug_aranges", ".zdebug_aranges" },
476 { ".debug_frame", ".zdebug_frame" },
477 { ".debug_info", ".zdebug_info" },
478 { ".debug_info", ".zdebug_info" },
479 { ".debug_line", ".zdebug_line" },
480 { ".debug_loc", ".zdebug_loc" },
481 { ".debug_macinfo", ".zdebug_macinfo" },
482 { ".debug_macro", ".zdebug_macro" },
483 { ".debug_pubnames", ".zdebug_pubnames" },
484 { ".debug_pubtypes", ".zdebug_pubtypes" },
485 { ".debug_ranges", ".zdebug_ranges" },
486 { ".debug_rnglists", ".zdebug_rnglist" },
487 { ".debug_static_func", ".zdebug_static_func" },
488 { ".debug_static_vars", ".zdebug_static_vars" },
489 { ".debug_str", ".zdebug_str", },
490 { ".debug_str", ".zdebug_str", },
491 { ".debug_str_offsets", ".zdebug_str_offsets", },
492 { ".debug_addr", ".zdebug_addr", },
493 { ".debug_line_str", ".zdebug_line_str", },
494 { ".debug_types", ".zdebug_types" },
495 /* GNU DWARF 1 extensions */
496 { ".debug_sfnames", ".zdebug_sfnames" },
497 { ".debug_srcinfo", ".zebug_srcinfo" },
498 /* SGI/MIPS DWARF 2 extensions */
499 { ".debug_funcnames", ".zdebug_funcnames" },
500 { ".debug_typenames", ".zdebug_typenames" },
501 { ".debug_varnames", ".zdebug_varnames" },
502 { ".debug_weaknames", ".zdebug_weaknames" },
506 /* NB/ Numbers in this enum must match up with indices
507 into the dwarf_debug_sections[] array above. */
508 enum dwarf_debug_section_enum
540 /* A static assertion. */
541 extern int dwarf_debug_section_assert
[ARRAY_SIZE (dwarf_debug_sections
)
542 == debug_max
+ 1 ? 1 : -1];
544 #ifndef ABBREV_HASH_SIZE
545 #define ABBREV_HASH_SIZE 121
547 #ifndef ATTR_ALLOC_CHUNK
548 #define ATTR_ALLOC_CHUNK 4
551 /* Variable and function hash tables. This is used to speed up look-up
552 in lookup_symbol_in_var_table() and lookup_symbol_in_function_table().
553 In order to share code between variable and function infos, we use
554 a list of untyped pointer for all variable/function info associated with
555 a symbol. We waste a bit of memory for list with one node but that
556 simplifies the code. */
558 struct info_list_node
560 struct info_list_node
*next
;
564 /* Info hash entry. */
565 struct info_hash_entry
567 struct bfd_hash_entry root
;
568 struct info_list_node
*head
;
571 struct info_hash_table
573 struct bfd_hash_table base
;
576 /* Function to create a new entry in info hash table. */
578 static struct bfd_hash_entry
*
579 info_hash_table_newfunc (struct bfd_hash_entry
*entry
,
580 struct bfd_hash_table
*table
,
583 struct info_hash_entry
*ret
= (struct info_hash_entry
*) entry
;
585 /* Allocate the structure if it has not already been allocated by a
589 ret
= (struct info_hash_entry
*) bfd_hash_allocate (table
,
595 /* Call the allocation method of the base class. */
596 ret
= ((struct info_hash_entry
*)
597 bfd_hash_newfunc ((struct bfd_hash_entry
*) ret
, table
, string
));
599 /* Initialize the local fields here. */
603 return (struct bfd_hash_entry
*) ret
;
606 /* Function to create a new info hash table. It returns a pointer to the
607 newly created table or NULL if there is any error. We need abfd
608 solely for memory allocation. */
610 static struct info_hash_table
*
611 create_info_hash_table (bfd
*abfd
)
613 struct info_hash_table
*hash_table
;
615 hash_table
= ((struct info_hash_table
*)
616 bfd_alloc (abfd
, sizeof (struct info_hash_table
)));
620 if (!bfd_hash_table_init (&hash_table
->base
, info_hash_table_newfunc
,
621 sizeof (struct info_hash_entry
)))
623 bfd_release (abfd
, hash_table
);
630 /* Insert an info entry into an info hash table. We do not check of
631 duplicate entries. Also, the caller need to guarantee that the
632 right type of info in inserted as info is passed as a void* pointer.
633 This function returns true if there is no error. */
636 insert_info_hash_table (struct info_hash_table
*hash_table
,
641 struct info_hash_entry
*entry
;
642 struct info_list_node
*node
;
644 entry
= (struct info_hash_entry
*) bfd_hash_lookup (&hash_table
->base
,
649 node
= (struct info_list_node
*) bfd_hash_allocate (&hash_table
->base
,
655 node
->next
= entry
->head
;
661 /* Look up an info entry list from an info hash table. Return NULL
664 static struct info_list_node
*
665 lookup_info_hash_table (struct info_hash_table
*hash_table
, const char *key
)
667 struct info_hash_entry
*entry
;
669 entry
= (struct info_hash_entry
*) bfd_hash_lookup (&hash_table
->base
, key
,
671 return entry
? entry
->head
: NULL
;
674 /* Read a section into its appropriate place in the dwarf2_debug
675 struct (indicated by SECTION_BUFFER and SECTION_SIZE). If SYMS is
676 not NULL, use bfd_simple_get_relocated_section_contents to read the
677 section contents, otherwise use bfd_get_section_contents. Fail if
678 the located section does not contain at least OFFSET bytes. */
681 read_section (bfd
*abfd
,
682 const struct dwarf_debug_section
*sec
,
685 bfd_byte
**section_buffer
,
686 bfd_size_type
*section_size
)
688 const char *section_name
= sec
->uncompressed_name
;
689 bfd_byte
*contents
= *section_buffer
;
691 /* The section may have already been read. */
692 if (contents
== NULL
)
697 msec
= bfd_get_section_by_name (abfd
, section_name
);
700 section_name
= sec
->compressed_name
;
701 msec
= bfd_get_section_by_name (abfd
, section_name
);
705 _bfd_error_handler (_("DWARF error: can't find %s section."),
706 sec
->uncompressed_name
);
707 bfd_set_error (bfd_error_bad_value
);
711 if ((msec
->flags
& SEC_HAS_CONTENTS
) == 0)
713 _bfd_error_handler (_("DWARF error: section %s has no contents"),
715 bfd_set_error (bfd_error_no_contents
);
719 if (_bfd_section_size_insane (abfd
, msec
))
722 _bfd_error_handler (_("DWARF error: section %s is too big"),
726 amt
= bfd_get_section_limit_octets (abfd
, msec
);
728 /* Paranoia - alloc one extra so that we can make sure a string
729 section is NUL terminated. */
733 /* Paranoia - this should never happen. */
734 bfd_set_error (bfd_error_no_memory
);
737 contents
= (bfd_byte
*) bfd_malloc (amt
);
738 if (contents
== NULL
)
741 ? !bfd_simple_get_relocated_section_contents (abfd
, msec
, contents
,
743 : !bfd_get_section_contents (abfd
, msec
, contents
, 0, *section_size
))
748 contents
[*section_size
] = 0;
749 *section_buffer
= contents
;
752 /* It is possible to get a bad value for the offset into the section
753 that the client wants. Validate it here to avoid trouble later. */
754 if (offset
!= 0 && offset
>= *section_size
)
756 /* xgettext: c-format */
757 _bfd_error_handler (_("DWARF error: offset (%" PRIu64
")"
758 " greater than or equal to %s size (%" PRIu64
")"),
759 (uint64_t) offset
, section_name
,
760 (uint64_t) *section_size
);
761 bfd_set_error (bfd_error_bad_value
);
768 /* Read dwarf information from a buffer. */
770 static inline uint64_t
771 read_n_bytes (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
, int n
)
773 bfd_byte
*buf
= *ptr
;
780 return bfd_get (n
* 8, abfd
, buf
);
784 read_1_byte (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
)
786 return read_n_bytes (abfd
, ptr
, end
, 1);
790 read_1_signed_byte (bfd
*abfd ATTRIBUTE_UNUSED
, bfd_byte
**ptr
, bfd_byte
*end
)
792 bfd_byte
*buf
= *ptr
;
799 return bfd_get_signed_8 (abfd
, buf
);
803 read_2_bytes (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
)
805 return read_n_bytes (abfd
, ptr
, end
, 2);
809 read_3_bytes (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
)
811 unsigned int val
= read_1_byte (abfd
, ptr
, end
);
813 val
|= read_1_byte (abfd
, ptr
, end
);
815 val
|= read_1_byte (abfd
, ptr
, end
);
816 if (bfd_little_endian (abfd
))
817 val
= (((val
>> 16) & 0xff)
819 | ((val
& 0xff) << 16));
824 read_4_bytes (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
)
826 return read_n_bytes (abfd
, ptr
, end
, 4);
830 read_8_bytes (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
)
832 return read_n_bytes (abfd
, ptr
, end
, 8);
835 static struct dwarf_block
*
836 read_blk (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
, size_t size
)
838 bfd_byte
*buf
= *ptr
;
839 struct dwarf_block
*block
;
841 block
= (struct dwarf_block
*) bfd_alloc (abfd
, sizeof (*block
));
845 if (size
> (size_t) (end
- buf
))
860 /* Scans a NUL terminated string starting at *PTR, returning a pointer to it.
861 Bytes at or beyond BUF_END will not be read. Returns NULL if the
862 terminator is not found or if the string is empty. *PTR is
863 incremented over the bytes scanned, including the terminator. */
866 read_string (bfd_byte
**ptr
,
869 bfd_byte
*buf
= *ptr
;
872 while (buf
< buf_end
)
885 /* Reads an offset from *PTR and then locates the string at this offset
886 inside the debug string section. Returns a pointer to the string.
887 Increments *PTR by the number of bytes read for the offset. This
888 value is set even if the function fails. Bytes at or beyond
889 BUF_END will not be read. Returns NULL if there was a problem, or
890 if the string is empty. Does not check for NUL termination of the
894 read_indirect_string (struct comp_unit
*unit
,
899 struct dwarf2_debug
*stash
= unit
->stash
;
900 struct dwarf2_debug_file
*file
= unit
->file
;
903 if (unit
->offset_size
> (size_t) (buf_end
- *ptr
))
909 if (unit
->offset_size
== 4)
910 offset
= read_4_bytes (unit
->abfd
, ptr
, buf_end
);
912 offset
= read_8_bytes (unit
->abfd
, ptr
, buf_end
);
914 if (! read_section (unit
->abfd
, &stash
->debug_sections
[debug_str
],
916 &file
->dwarf_str_buffer
, &file
->dwarf_str_size
))
919 str
= (char *) file
->dwarf_str_buffer
+ offset
;
925 /* Like read_indirect_string but from .debug_line_str section. */
928 read_indirect_line_string (struct comp_unit
*unit
,
933 struct dwarf2_debug
*stash
= unit
->stash
;
934 struct dwarf2_debug_file
*file
= unit
->file
;
937 if (unit
->offset_size
> (size_t) (buf_end
- *ptr
))
943 if (unit
->offset_size
== 4)
944 offset
= read_4_bytes (unit
->abfd
, ptr
, buf_end
);
946 offset
= read_8_bytes (unit
->abfd
, ptr
, buf_end
);
948 if (! read_section (unit
->abfd
, &stash
->debug_sections
[debug_line_str
],
950 &file
->dwarf_line_str_buffer
,
951 &file
->dwarf_line_str_size
))
954 str
= (char *) file
->dwarf_line_str_buffer
+ offset
;
960 /* Like read_indirect_string but uses a .debug_str located in
961 an alternate file pointed to by the .gnu_debugaltlink section.
962 Used to impement DW_FORM_GNU_strp_alt. */
965 read_alt_indirect_string (struct comp_unit
*unit
,
970 struct dwarf2_debug
*stash
= unit
->stash
;
973 if (unit
->offset_size
> (size_t) (buf_end
- *ptr
))
979 if (unit
->offset_size
== 4)
980 offset
= read_4_bytes (unit
->abfd
, ptr
, buf_end
);
982 offset
= read_8_bytes (unit
->abfd
, ptr
, buf_end
);
984 if (stash
->alt
.bfd_ptr
== NULL
)
987 char *debug_filename
= bfd_follow_gnu_debugaltlink (unit
->abfd
, DEBUGDIR
);
989 if (debug_filename
== NULL
)
992 debug_bfd
= bfd_openr (debug_filename
, NULL
);
993 free (debug_filename
);
994 if (debug_bfd
== NULL
)
995 /* FIXME: Should we report our failure to follow the debuglink ? */
998 if (!bfd_check_format (debug_bfd
, bfd_object
))
1000 bfd_close (debug_bfd
);
1003 stash
->alt
.bfd_ptr
= debug_bfd
;
1006 if (! read_section (unit
->stash
->alt
.bfd_ptr
,
1007 stash
->debug_sections
+ debug_str_alt
,
1008 stash
->alt
.syms
, offset
,
1009 &stash
->alt
.dwarf_str_buffer
,
1010 &stash
->alt
.dwarf_str_size
))
1013 str
= (char *) stash
->alt
.dwarf_str_buffer
+ offset
;
1020 /* Resolve an alternate reference from UNIT at OFFSET.
1021 Returns a pointer into the loaded alternate CU upon success
1022 or NULL upon failure. */
1025 read_alt_indirect_ref (struct comp_unit
*unit
, uint64_t offset
)
1027 struct dwarf2_debug
*stash
= unit
->stash
;
1029 if (stash
->alt
.bfd_ptr
== NULL
)
1032 char *debug_filename
= bfd_follow_gnu_debugaltlink (unit
->abfd
, DEBUGDIR
);
1034 if (debug_filename
== NULL
)
1037 debug_bfd
= bfd_openr (debug_filename
, NULL
);
1038 free (debug_filename
);
1039 if (debug_bfd
== NULL
)
1040 /* FIXME: Should we report our failure to follow the debuglink ? */
1043 if (!bfd_check_format (debug_bfd
, bfd_object
))
1045 bfd_close (debug_bfd
);
1048 stash
->alt
.bfd_ptr
= debug_bfd
;
1051 if (! read_section (unit
->stash
->alt
.bfd_ptr
,
1052 stash
->debug_sections
+ debug_info_alt
,
1053 stash
->alt
.syms
, offset
,
1054 &stash
->alt
.dwarf_info_buffer
,
1055 &stash
->alt
.dwarf_info_size
))
1058 return stash
->alt
.dwarf_info_buffer
+ offset
;
1062 read_address (struct comp_unit
*unit
, bfd_byte
**ptr
, bfd_byte
*buf_end
)
1064 bfd_byte
*buf
= *ptr
;
1067 if (bfd_get_flavour (unit
->abfd
) == bfd_target_elf_flavour
)
1068 signed_vma
= get_elf_backend_data (unit
->abfd
)->sign_extend_vma
;
1070 if (unit
->addr_size
> (size_t) (buf_end
- buf
))
1076 *ptr
= buf
+ unit
->addr_size
;
1079 switch (unit
->addr_size
)
1082 return bfd_get_signed_64 (unit
->abfd
, buf
);
1084 return bfd_get_signed_32 (unit
->abfd
, buf
);
1086 return bfd_get_signed_16 (unit
->abfd
, buf
);
1093 switch (unit
->addr_size
)
1096 return bfd_get_64 (unit
->abfd
, buf
);
1098 return bfd_get_32 (unit
->abfd
, buf
);
1100 return bfd_get_16 (unit
->abfd
, buf
);
1107 /* Lookup an abbrev_info structure in the abbrev hash table. */
1109 static struct abbrev_info
*
1110 lookup_abbrev (unsigned int number
, struct abbrev_info
**abbrevs
)
1112 unsigned int hash_number
;
1113 struct abbrev_info
*abbrev
;
1115 hash_number
= number
% ABBREV_HASH_SIZE
;
1116 abbrev
= abbrevs
[hash_number
];
1120 if (abbrev
->number
== number
)
1123 abbrev
= abbrev
->next
;
1129 /* We keep a hash table to map .debug_abbrev section offsets to the
1130 array of abbrevs, so that compilation units using the same set of
1131 abbrevs do not waste memory. */
1133 struct abbrev_offset_entry
1136 struct abbrev_info
**abbrevs
;
1140 hash_abbrev (const void *p
)
1142 const struct abbrev_offset_entry
*ent
= p
;
1143 return htab_hash_pointer ((void *) ent
->offset
);
1147 eq_abbrev (const void *pa
, const void *pb
)
1149 const struct abbrev_offset_entry
*a
= pa
;
1150 const struct abbrev_offset_entry
*b
= pb
;
1151 return a
->offset
== b
->offset
;
1155 del_abbrev (void *p
)
1157 struct abbrev_offset_entry
*ent
= p
;
1158 struct abbrev_info
**abbrevs
= ent
->abbrevs
;
1161 for (i
= 0; i
< ABBREV_HASH_SIZE
; i
++)
1163 struct abbrev_info
*abbrev
= abbrevs
[i
];
1167 free (abbrev
->attrs
);
1168 abbrev
= abbrev
->next
;
1174 /* In DWARF version 2, the description of the debugging information is
1175 stored in a separate .debug_abbrev section. Before we read any
1176 dies from a section we read in all abbreviations and install them
1179 static struct abbrev_info
**
1180 read_abbrevs (bfd
*abfd
, uint64_t offset
, struct dwarf2_debug
*stash
,
1181 struct dwarf2_debug_file
*file
)
1183 struct abbrev_info
**abbrevs
;
1184 bfd_byte
*abbrev_ptr
;
1185 bfd_byte
*abbrev_end
;
1186 struct abbrev_info
*cur_abbrev
;
1187 unsigned int abbrev_number
, abbrev_name
;
1188 unsigned int abbrev_form
, hash_number
;
1191 struct abbrev_offset_entry ent
= { offset
, NULL
};
1193 if (ent
.offset
!= offset
)
1196 slot
= htab_find_slot (file
->abbrev_offsets
, &ent
, INSERT
);
1200 return ((struct abbrev_offset_entry
*) (*slot
))->abbrevs
;
1202 if (! read_section (abfd
, &stash
->debug_sections
[debug_abbrev
],
1204 &file
->dwarf_abbrev_buffer
,
1205 &file
->dwarf_abbrev_size
))
1208 amt
= sizeof (struct abbrev_info
*) * ABBREV_HASH_SIZE
;
1209 abbrevs
= (struct abbrev_info
**) bfd_zalloc (abfd
, amt
);
1210 if (abbrevs
== NULL
)
1213 abbrev_ptr
= file
->dwarf_abbrev_buffer
+ offset
;
1214 abbrev_end
= file
->dwarf_abbrev_buffer
+ file
->dwarf_abbrev_size
;
1215 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1218 /* Loop until we reach an abbrev number of 0. */
1219 while (abbrev_number
)
1221 amt
= sizeof (struct abbrev_info
);
1222 cur_abbrev
= (struct abbrev_info
*) bfd_zalloc (abfd
, amt
);
1223 if (cur_abbrev
== NULL
)
1226 /* Read in abbrev header. */
1227 cur_abbrev
->number
= abbrev_number
;
1228 cur_abbrev
->tag
= (enum dwarf_tag
)
1229 _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1231 cur_abbrev
->has_children
= read_1_byte (abfd
, &abbrev_ptr
, abbrev_end
);
1233 /* Now read in declarations. */
1236 /* Initialize it just to avoid a GCC false warning. */
1237 bfd_vma implicit_const
= -1;
1239 abbrev_name
= _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1241 abbrev_form
= _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1243 if (abbrev_form
== DW_FORM_implicit_const
)
1244 implicit_const
= _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1246 if (abbrev_name
== 0)
1249 if ((cur_abbrev
->num_attrs
% ATTR_ALLOC_CHUNK
) == 0)
1251 struct attr_abbrev
*tmp
;
1253 amt
= cur_abbrev
->num_attrs
+ ATTR_ALLOC_CHUNK
;
1254 amt
*= sizeof (struct attr_abbrev
);
1255 tmp
= (struct attr_abbrev
*) bfd_realloc (cur_abbrev
->attrs
, amt
);
1258 cur_abbrev
->attrs
= tmp
;
1261 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].name
1262 = (enum dwarf_attribute
) abbrev_name
;
1263 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].form
1264 = (enum dwarf_form
) abbrev_form
;
1265 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].implicit_const
1267 ++cur_abbrev
->num_attrs
;
1270 hash_number
= abbrev_number
% ABBREV_HASH_SIZE
;
1271 cur_abbrev
->next
= abbrevs
[hash_number
];
1272 abbrevs
[hash_number
] = cur_abbrev
;
1274 /* Get next abbreviation.
1275 Under Irix6 the abbreviations for a compilation unit are not
1276 always properly terminated with an abbrev number of 0.
1277 Exit loop if we encounter an abbreviation which we have
1278 already read (which means we are about to read the abbreviations
1279 for the next compile unit) or if the end of the abbreviation
1280 table is reached. */
1281 if ((size_t) (abbrev_ptr
- file
->dwarf_abbrev_buffer
)
1282 >= file
->dwarf_abbrev_size
)
1284 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1286 if (lookup_abbrev (abbrev_number
, abbrevs
) != NULL
)
1290 *slot
= bfd_malloc (sizeof ent
);
1293 ent
.abbrevs
= abbrevs
;
1294 memcpy (*slot
, &ent
, sizeof ent
);
1298 if (abbrevs
!= NULL
)
1302 for (i
= 0; i
< ABBREV_HASH_SIZE
; i
++)
1304 struct abbrev_info
*abbrev
= abbrevs
[i
];
1308 free (abbrev
->attrs
);
1309 abbrev
= abbrev
->next
;
1317 /* Returns true if the form is one which has a string value. */
1320 is_str_form (const struct attribute
*attr
)
1324 case DW_FORM_string
:
1331 case DW_FORM_line_strp
:
1332 case DW_FORM_GNU_strp_alt
:
1340 /* Returns true if the form is one which has an integer value. */
1343 is_int_form (const struct attribute
*attr
)
1355 case DW_FORM_ref_addr
:
1360 case DW_FORM_ref_udata
:
1361 case DW_FORM_sec_offset
:
1362 case DW_FORM_flag_present
:
1363 case DW_FORM_ref_sig8
:
1365 case DW_FORM_implicit_const
:
1366 case DW_FORM_addrx1
:
1367 case DW_FORM_addrx2
:
1368 case DW_FORM_addrx3
:
1369 case DW_FORM_addrx4
:
1370 case DW_FORM_GNU_ref_alt
:
1378 /* Returns true if the form is strx[1-4]. */
1381 is_strx_form (enum dwarf_form form
)
1383 return (form
== DW_FORM_strx
1384 || form
== DW_FORM_strx1
1385 || form
== DW_FORM_strx2
1386 || form
== DW_FORM_strx3
1387 || form
== DW_FORM_strx4
);
1390 /* Return true if the form is addrx[1-4]. */
1393 is_addrx_form (enum dwarf_form form
)
1395 return (form
== DW_FORM_addrx
1396 || form
== DW_FORM_addrx1
1397 || form
== DW_FORM_addrx2
1398 || form
== DW_FORM_addrx3
1399 || form
== DW_FORM_addrx4
);
1402 /* Returns the address in .debug_addr section using DW_AT_addr_base.
1403 Used to implement DW_FORM_addrx*. */
1405 read_indexed_address (uint64_t idx
, struct comp_unit
*unit
)
1407 struct dwarf2_debug
*stash
= unit
->stash
;
1408 struct dwarf2_debug_file
*file
= unit
->file
;
1415 if (!read_section (unit
->abfd
, &stash
->debug_sections
[debug_addr
],
1417 &file
->dwarf_addr_buffer
, &file
->dwarf_addr_size
))
1420 if (_bfd_mul_overflow (idx
, unit
->addr_size
, &offset
))
1423 offset
+= unit
->dwarf_addr_offset
;
1424 if (offset
< unit
->dwarf_addr_offset
1425 || offset
> file
->dwarf_addr_size
1426 || file
->dwarf_addr_size
- offset
< unit
->addr_size
)
1429 info_ptr
= file
->dwarf_addr_buffer
+ offset
;
1431 if (unit
->addr_size
== 4)
1432 return bfd_get_32 (unit
->abfd
, info_ptr
);
1433 else if (unit
->addr_size
== 8)
1434 return bfd_get_64 (unit
->abfd
, info_ptr
);
1439 /* Returns the string using DW_AT_str_offsets_base.
1440 Used to implement DW_FORM_strx*. */
1442 read_indexed_string (uint64_t idx
, struct comp_unit
*unit
)
1444 struct dwarf2_debug
*stash
= unit
->stash
;
1445 struct dwarf2_debug_file
*file
= unit
->file
;
1447 uint64_t str_offset
;
1453 if (!read_section (unit
->abfd
, &stash
->debug_sections
[debug_str
],
1455 &file
->dwarf_str_buffer
, &file
->dwarf_str_size
))
1458 if (!read_section (unit
->abfd
, &stash
->debug_sections
[debug_str_offsets
],
1460 &file
->dwarf_str_offsets_buffer
,
1461 &file
->dwarf_str_offsets_size
))
1464 if (_bfd_mul_overflow (idx
, unit
->offset_size
, &offset
))
1467 offset
+= unit
->dwarf_str_offset
;
1468 if (offset
< unit
->dwarf_str_offset
1469 || offset
> file
->dwarf_str_offsets_size
1470 || file
->dwarf_str_offsets_size
- offset
< unit
->offset_size
)
1473 info_ptr
= file
->dwarf_str_offsets_buffer
+ offset
;
1475 if (unit
->offset_size
== 4)
1476 str_offset
= bfd_get_32 (unit
->abfd
, info_ptr
);
1477 else if (unit
->offset_size
== 8)
1478 str_offset
= bfd_get_64 (unit
->abfd
, info_ptr
);
1482 if (str_offset
>= file
->dwarf_str_size
)
1484 return (const char *) file
->dwarf_str_buffer
+ str_offset
;
1487 /* Read and fill in the value of attribute ATTR as described by FORM.
1488 Read data starting from INFO_PTR, but never at or beyond INFO_PTR_END.
1489 Returns an updated INFO_PTR taking into account the amount of data read. */
1492 read_attribute_value (struct attribute
* attr
,
1494 bfd_vma implicit_const
,
1495 struct comp_unit
* unit
,
1496 bfd_byte
* info_ptr
,
1497 bfd_byte
* info_ptr_end
)
1499 bfd
*abfd
= unit
->abfd
;
1502 if (info_ptr
>= info_ptr_end
&& form
!= DW_FORM_flag_present
)
1504 _bfd_error_handler (_("DWARF error: info pointer extends beyond end of attributes"));
1505 bfd_set_error (bfd_error_bad_value
);
1509 attr
->form
= (enum dwarf_form
) form
;
1513 case DW_FORM_flag_present
:
1516 case DW_FORM_ref_addr
:
1517 /* DW_FORM_ref_addr is an address in DWARF2, and an offset in
1519 if (unit
->version
>= 3)
1521 if (unit
->offset_size
== 4)
1522 attr
->u
.val
= read_4_bytes (unit
->abfd
, &info_ptr
, info_ptr_end
);
1524 attr
->u
.val
= read_8_bytes (unit
->abfd
, &info_ptr
, info_ptr_end
);
1529 attr
->u
.val
= read_address (unit
, &info_ptr
, info_ptr_end
);
1531 case DW_FORM_GNU_ref_alt
:
1532 case DW_FORM_sec_offset
:
1533 if (unit
->offset_size
== 4)
1534 attr
->u
.val
= read_4_bytes (unit
->abfd
, &info_ptr
, info_ptr_end
);
1536 attr
->u
.val
= read_8_bytes (unit
->abfd
, &info_ptr
, info_ptr_end
);
1538 case DW_FORM_block2
:
1539 amt
= read_2_bytes (abfd
, &info_ptr
, info_ptr_end
);
1540 attr
->u
.blk
= read_blk (abfd
, &info_ptr
, info_ptr_end
, amt
);
1541 if (attr
->u
.blk
== NULL
)
1544 case DW_FORM_block4
:
1545 amt
= read_4_bytes (abfd
, &info_ptr
, info_ptr_end
);
1546 attr
->u
.blk
= read_blk (abfd
, &info_ptr
, info_ptr_end
, amt
);
1547 if (attr
->u
.blk
== NULL
)
1553 attr
->u
.val
= read_1_byte (abfd
, &info_ptr
, info_ptr_end
);
1555 case DW_FORM_addrx1
:
1556 attr
->u
.val
= read_1_byte (abfd
, &info_ptr
, info_ptr_end
);
1557 /* dwarf_addr_offset value 0 indicates the attribute DW_AT_addr_base
1559 if (unit
->dwarf_addr_offset
!= 0)
1560 attr
->u
.val
= read_indexed_address (attr
->u
.val
, unit
);
1564 attr
->u
.val
= read_2_bytes (abfd
, &info_ptr
, info_ptr_end
);
1566 case DW_FORM_addrx2
:
1567 attr
->u
.val
= read_2_bytes (abfd
, &info_ptr
, info_ptr_end
);
1568 if (unit
->dwarf_addr_offset
!= 0)
1569 attr
->u
.val
= read_indexed_address (attr
->u
.val
, unit
);
1571 case DW_FORM_addrx3
:
1572 attr
->u
.val
= read_3_bytes (abfd
, &info_ptr
, info_ptr_end
);
1573 if (unit
->dwarf_addr_offset
!= 0)
1574 attr
->u
.val
= read_indexed_address(attr
->u
.val
, unit
);
1578 attr
->u
.val
= read_4_bytes (abfd
, &info_ptr
, info_ptr_end
);
1580 case DW_FORM_addrx4
:
1581 attr
->u
.val
= read_4_bytes (abfd
, &info_ptr
, info_ptr_end
);
1582 if (unit
->dwarf_addr_offset
!= 0)
1583 attr
->u
.val
= read_indexed_address (attr
->u
.val
, unit
);
1587 case DW_FORM_ref_sig8
:
1588 attr
->u
.val
= read_8_bytes (abfd
, &info_ptr
, info_ptr_end
);
1590 case DW_FORM_string
:
1591 attr
->u
.str
= read_string (&info_ptr
, info_ptr_end
);
1594 attr
->u
.str
= read_indirect_string (unit
, &info_ptr
, info_ptr_end
);
1596 case DW_FORM_line_strp
:
1597 attr
->u
.str
= read_indirect_line_string (unit
, &info_ptr
, info_ptr_end
);
1599 case DW_FORM_GNU_strp_alt
:
1600 attr
->u
.str
= read_alt_indirect_string (unit
, &info_ptr
, info_ptr_end
);
1603 attr
->u
.val
= read_1_byte (abfd
, &info_ptr
, info_ptr_end
);
1604 /* dwarf_str_offset value 0 indicates the attribute DW_AT_str_offsets_base
1606 if (unit
->dwarf_str_offset
!= 0)
1607 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
1612 attr
->u
.val
= read_2_bytes (abfd
, &info_ptr
, info_ptr_end
);
1613 if (unit
->dwarf_str_offset
!= 0)
1614 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
1619 attr
->u
.val
= read_3_bytes (abfd
, &info_ptr
, info_ptr_end
);
1620 if (unit
->dwarf_str_offset
!= 0)
1621 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
1626 attr
->u
.val
= read_4_bytes (abfd
, &info_ptr
, info_ptr_end
);
1627 if (unit
->dwarf_str_offset
!= 0)
1628 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
1633 attr
->u
.val
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1634 false, info_ptr_end
);
1635 if (unit
->dwarf_str_offset
!= 0)
1636 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
1640 case DW_FORM_exprloc
:
1642 amt
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1643 false, info_ptr_end
);
1644 attr
->u
.blk
= read_blk (abfd
, &info_ptr
, info_ptr_end
, amt
);
1645 if (attr
->u
.blk
== NULL
)
1648 case DW_FORM_block1
:
1649 amt
= read_1_byte (abfd
, &info_ptr
, info_ptr_end
);
1650 attr
->u
.blk
= read_blk (abfd
, &info_ptr
, info_ptr_end
, amt
);
1651 if (attr
->u
.blk
== NULL
)
1655 attr
->u
.sval
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1656 true, info_ptr_end
);
1659 case DW_FORM_rnglistx
:
1660 case DW_FORM_loclistx
:
1661 /* FIXME: Add support for these forms! */
1663 case DW_FORM_ref_udata
:
1665 attr
->u
.val
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1666 false, info_ptr_end
);
1669 attr
->u
.val
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1670 false, info_ptr_end
);
1671 if (unit
->dwarf_addr_offset
!= 0)
1672 attr
->u
.val
= read_indexed_address (attr
->u
.val
, unit
);
1674 case DW_FORM_indirect
:
1675 form
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1676 false, info_ptr_end
);
1677 if (form
== DW_FORM_implicit_const
)
1678 implicit_const
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1679 true, info_ptr_end
);
1680 info_ptr
= read_attribute_value (attr
, form
, implicit_const
, unit
,
1681 info_ptr
, info_ptr_end
);
1683 case DW_FORM_implicit_const
:
1684 attr
->form
= DW_FORM_sdata
;
1685 attr
->u
.sval
= implicit_const
;
1687 case DW_FORM_data16
:
1688 /* This is really a "constant", but there is no way to store that
1689 so pretend it is a 16 byte block instead. */
1690 attr
->u
.blk
= read_blk (abfd
, &info_ptr
, info_ptr_end
, 16);
1691 if (attr
->u
.blk
== NULL
)
1696 _bfd_error_handler (_("DWARF error: invalid or unhandled FORM value: %#x"),
1698 bfd_set_error (bfd_error_bad_value
);
1704 /* Read an attribute described by an abbreviated attribute. */
1707 read_attribute (struct attribute
* attr
,
1708 struct attr_abbrev
* abbrev
,
1709 struct comp_unit
* unit
,
1710 bfd_byte
* info_ptr
,
1711 bfd_byte
* info_ptr_end
)
1713 attr
->name
= abbrev
->name
;
1714 info_ptr
= read_attribute_value (attr
, abbrev
->form
, abbrev
->implicit_const
,
1715 unit
, info_ptr
, info_ptr_end
);
1719 /* Return mangling style given LANG. */
1722 mangle_style (int lang
)
1730 case DW_LANG_C_plus_plus
:
1731 case DW_LANG_C_plus_plus_03
:
1732 case DW_LANG_C_plus_plus_11
:
1733 case DW_LANG_C_plus_plus_14
:
1743 case DW_LANG_Rust_old
:
1751 case DW_LANG_Cobol74
:
1752 case DW_LANG_Cobol85
:
1753 case DW_LANG_Fortran77
:
1754 case DW_LANG_Pascal83
:
1759 case DW_LANG_Mips_Assembler
:
1761 case DW_LANG_HP_Basic91
:
1762 case DW_LANG_HP_IMacro
:
1763 case DW_LANG_HP_Assembler
:
1768 /* Source line information table routines. */
1770 #define FILE_ALLOC_CHUNK 5
1771 #define DIR_ALLOC_CHUNK 5
1775 struct line_info
* prev_line
;
1779 unsigned int column
;
1780 unsigned int discriminator
;
1781 unsigned char op_index
;
1782 unsigned char end_sequence
; /* End of (sequential) code sequence. */
1793 struct line_sequence
1796 struct line_sequence
* prev_sequence
;
1797 struct line_info
* last_line
; /* Largest VMA. */
1798 struct line_info
** line_info_lookup
;
1799 bfd_size_type num_lines
;
1802 struct line_info_table
1805 unsigned int num_files
;
1806 unsigned int num_dirs
;
1807 unsigned int num_sequences
;
1808 bool use_dir_and_file_0
;
1811 struct fileinfo
* files
;
1812 struct line_sequence
* sequences
;
1813 struct line_info
* lcl_head
; /* Local head; used in 'add_line_info'. */
1816 /* Remember some information about each function. If the function is
1817 inlined (DW_TAG_inlined_subroutine) it may have two additional
1818 attributes, DW_AT_call_file and DW_AT_call_line, which specify the
1819 source code location where this function was inlined. */
1823 /* Pointer to previous function in list of all functions. */
1824 struct funcinfo
*prev_func
;
1825 /* Pointer to function one scope higher. */
1826 struct funcinfo
*caller_func
;
1827 /* Source location file name where caller_func inlines this func. */
1829 /* Source location file name. */
1831 /* Source location line number where caller_func inlines this func. */
1833 /* Source location line number. */
1838 struct arange arange
;
1839 /* The offset of the funcinfo from the start of the unit. */
1840 uint64_t unit_offset
;
1843 struct lookup_funcinfo
1845 /* Function information corresponding to this lookup table entry. */
1846 struct funcinfo
*funcinfo
;
1848 /* The lowest address for this specific function. */
1851 /* The highest address of this function before the lookup table is sorted.
1852 The highest address of all prior functions after the lookup table is
1853 sorted, which is used for binary search. */
1855 /* Index of this function, used to ensure qsort is stable. */
1861 /* Pointer to previous variable in list of all variables. */
1862 struct varinfo
*prev_var
;
1863 /* The offset of the varinfo from the start of the unit. */
1864 uint64_t unit_offset
;
1865 /* Source location file name. */
1867 /* Source location line number. */
1869 /* The type of this variable. */
1871 /* The name of the variable, if it has one. */
1873 /* The address of the variable. */
1875 /* Is this a stack variable? */
1879 /* Return TRUE if NEW_LINE should sort after LINE. */
1882 new_line_sorts_after (struct line_info
*new_line
, struct line_info
*line
)
1884 return (new_line
->address
> line
->address
1885 || (new_line
->address
== line
->address
1886 && new_line
->op_index
> line
->op_index
));
1890 /* Adds a new entry to the line_info list in the line_info_table, ensuring
1891 that the list is sorted. Note that the line_info list is sorted from
1892 highest to lowest VMA (with possible duplicates); that is,
1893 line_info->prev_line always accesses an equal or smaller VMA. */
1896 add_line_info (struct line_info_table
*table
,
1898 unsigned char op_index
,
1901 unsigned int column
,
1902 unsigned int discriminator
,
1905 size_t amt
= sizeof (struct line_info
);
1906 struct line_sequence
* seq
= table
->sequences
;
1907 struct line_info
* info
= (struct line_info
*) bfd_alloc (table
->abfd
, amt
);
1912 /* Set member data of 'info'. */
1913 info
->prev_line
= NULL
;
1914 info
->address
= address
;
1915 info
->op_index
= op_index
;
1917 info
->column
= column
;
1918 info
->discriminator
= discriminator
;
1919 info
->end_sequence
= end_sequence
;
1921 if (filename
&& filename
[0])
1923 info
->filename
= (char *) bfd_alloc (table
->abfd
, strlen (filename
) + 1);
1924 if (info
->filename
== NULL
)
1926 strcpy (info
->filename
, filename
);
1929 info
->filename
= NULL
;
1931 /* Find the correct location for 'info'. Normally we will receive
1932 new line_info data 1) in order and 2) with increasing VMAs.
1933 However some compilers break the rules (cf. decode_line_info) and
1934 so we include some heuristics for quickly finding the correct
1935 location for 'info'. In particular, these heuristics optimize for
1936 the common case in which the VMA sequence that we receive is a
1937 list of locally sorted VMAs such as
1938 p...z a...j (where a < j < p < z)
1940 Note: table->lcl_head is used to head an *actual* or *possible*
1941 sub-sequence within the list (such as a...j) that is not directly
1942 headed by table->last_line
1944 Note: we may receive duplicate entries from 'decode_line_info'. */
1947 && seq
->last_line
->address
== address
1948 && seq
->last_line
->op_index
== op_index
1949 && seq
->last_line
->end_sequence
== end_sequence
)
1951 /* We only keep the last entry with the same address and end
1952 sequence. See PR ld/4986. */
1953 if (table
->lcl_head
== seq
->last_line
)
1954 table
->lcl_head
= info
;
1955 info
->prev_line
= seq
->last_line
->prev_line
;
1956 seq
->last_line
= info
;
1958 else if (!seq
|| seq
->last_line
->end_sequence
)
1960 /* Start a new line sequence. */
1961 amt
= sizeof (struct line_sequence
);
1962 seq
= (struct line_sequence
*) bfd_malloc (amt
);
1965 seq
->low_pc
= address
;
1966 seq
->prev_sequence
= table
->sequences
;
1967 seq
->last_line
= info
;
1968 table
->lcl_head
= info
;
1969 table
->sequences
= seq
;
1970 table
->num_sequences
++;
1972 else if (info
->end_sequence
1973 || new_line_sorts_after (info
, seq
->last_line
))
1975 /* Normal case: add 'info' to the beginning of the current sequence. */
1976 info
->prev_line
= seq
->last_line
;
1977 seq
->last_line
= info
;
1979 /* lcl_head: initialize to head a *possible* sequence at the end. */
1980 if (!table
->lcl_head
)
1981 table
->lcl_head
= info
;
1983 else if (!new_line_sorts_after (info
, table
->lcl_head
)
1984 && (!table
->lcl_head
->prev_line
1985 || new_line_sorts_after (info
, table
->lcl_head
->prev_line
)))
1987 /* Abnormal but easy: lcl_head is the head of 'info'. */
1988 info
->prev_line
= table
->lcl_head
->prev_line
;
1989 table
->lcl_head
->prev_line
= info
;
1993 /* Abnormal and hard: Neither 'last_line' nor 'lcl_head'
1994 are valid heads for 'info'. Reset 'lcl_head'. */
1995 struct line_info
* li2
= seq
->last_line
; /* Always non-NULL. */
1996 struct line_info
* li1
= li2
->prev_line
;
2000 if (!new_line_sorts_after (info
, li2
)
2001 && new_line_sorts_after (info
, li1
))
2004 li2
= li1
; /* always non-NULL */
2005 li1
= li1
->prev_line
;
2007 table
->lcl_head
= li2
;
2008 info
->prev_line
= table
->lcl_head
->prev_line
;
2009 table
->lcl_head
->prev_line
= info
;
2010 if (address
< seq
->low_pc
)
2011 seq
->low_pc
= address
;
2016 /* Extract a fully qualified filename from a line info table.
2017 The returned string has been malloc'ed and it is the caller's
2018 responsibility to free it. */
2021 concat_filename (struct line_info_table
*table
, unsigned int file
)
2025 /* Pre DWARF-5 entry 0 in the directory and filename tables was not used.
2026 So in order to save space in the tables used here the info for, eg
2027 directory 1 is stored in slot 0 of the directory table, directory 2
2028 in slot 1 and so on.
2030 Starting with DWARF-5 the 0'th entry is used so there is a one to one
2031 mapping between DWARF slots and internal table entries. */
2032 if (! table
->use_dir_and_file_0
)
2034 /* Pre DWARF-5, FILE == 0 means unknown. */
2036 return strdup ("<unknown>");
2040 if (table
== NULL
|| file
>= table
->num_files
)
2043 (_("DWARF error: mangled line number section (bad file number)"));
2044 return strdup ("<unknown>");
2047 filename
= table
->files
[file
].name
;
2049 if (filename
== NULL
)
2050 return strdup ("<unknown>");
2052 if (!IS_ABSOLUTE_PATH (filename
))
2054 char *dir_name
= NULL
;
2055 char *subdir_name
= NULL
;
2058 unsigned int dir
= table
->files
[file
].dir
;
2060 if (!table
->use_dir_and_file_0
)
2062 /* Wrapping from 0 to -1u above gives the intended result with
2063 the test below of leaving subdir_name NULL for pre-DWARF5 dir
2065 /* PR 17512: file: 0317e960, file: 7f3d2e4b. */
2066 if (dir
< table
->num_dirs
)
2067 subdir_name
= table
->dirs
[dir
];
2069 if (!subdir_name
|| !IS_ABSOLUTE_PATH (subdir_name
))
2070 dir_name
= table
->comp_dir
;
2074 dir_name
= subdir_name
;
2079 return strdup (filename
);
2081 len
= strlen (dir_name
) + strlen (filename
) + 2;
2085 len
+= strlen (subdir_name
) + 1;
2086 name
= (char *) bfd_malloc (len
);
2088 sprintf (name
, "%s/%s/%s", dir_name
, subdir_name
, filename
);
2092 name
= (char *) bfd_malloc (len
);
2094 sprintf (name
, "%s/%s", dir_name
, filename
);
2100 return strdup (filename
);
2103 /* Number of bits in a bfd_vma. */
2104 #define VMA_BITS (8 * sizeof (bfd_vma))
2106 /* Check whether [low1, high1) can be combined with [low2, high2),
2107 i.e., they touch or overlap. */
2110 ranges_overlap (bfd_vma low1
,
2115 if (low1
== low2
|| high1
== high2
)
2118 /* Sort so that low1 is below low2. */
2132 /* We touch iff low2 == high1.
2133 We overlap iff low2 is within [low1, high1). */
2134 return low2
<= high1
;
2137 /* Insert an address range in the trie mapping addresses to compilation units.
2138 Will return the new trie node (usually the same as is being sent in, but
2139 in case of a leaf-to-interior conversion, or expansion of a leaf, it may be
2140 different), or NULL on failure. */
2142 static struct trie_node
*
2143 insert_arange_in_trie (bfd
*abfd
,
2144 struct trie_node
*trie
,
2146 unsigned int trie_pc_bits
,
2147 struct comp_unit
*unit
,
2151 bfd_vma clamped_low_pc
, clamped_high_pc
;
2152 int ch
, from_ch
, to_ch
;
2153 bool is_full_leaf
= false;
2154 bool splitting_leaf_will_help
= false;
2156 /* See if we can extend any of the existing ranges. This merging
2157 isn't perfect (if merging opens up the possibility of merging two existing
2158 ranges, we won't find them), but it takes the majority of the cases. */
2159 if (trie
->num_room_in_leaf
> 0)
2161 struct trie_leaf
*leaf
= (struct trie_leaf
*) trie
;
2164 for (i
= 0; i
< leaf
->num_stored_in_leaf
; ++i
)
2166 if (leaf
->ranges
[i
].unit
== unit
2167 && ranges_overlap (low_pc
, high_pc
,
2168 leaf
->ranges
[i
].low_pc
,
2169 leaf
->ranges
[i
].high_pc
))
2171 if (low_pc
< leaf
->ranges
[i
].low_pc
)
2172 leaf
->ranges
[i
].low_pc
= low_pc
;
2173 if (high_pc
> leaf
->ranges
[i
].high_pc
)
2174 leaf
->ranges
[i
].high_pc
= high_pc
;
2179 is_full_leaf
= leaf
->num_stored_in_leaf
== trie
->num_room_in_leaf
;
2181 if (is_full_leaf
&& trie_pc_bits
< VMA_BITS
)
2183 /* See if we have at least one leaf that does _not_ cover the
2184 entire bucket, so that splitting will actually reduce the number
2185 of elements in at least one of the child nodes. (For simplicity,
2186 we don't test the range we're inserting, but it will be counted
2187 on the next insertion where we're full, if any.) */
2188 bfd_vma bucket_high_pc
=
2189 trie_pc
+ ((bfd_vma
) -1 >> trie_pc_bits
); /* Inclusive. */
2190 for (i
= 0; i
< leaf
->num_stored_in_leaf
; ++i
)
2192 if (leaf
->ranges
[i
].low_pc
> trie_pc
2193 || leaf
->ranges
[i
].high_pc
<= bucket_high_pc
)
2195 splitting_leaf_will_help
= true;
2202 /* If we're a leaf with no more room and we're _not_ at the bottom,
2203 convert to an interior node. */
2204 if (is_full_leaf
&& splitting_leaf_will_help
)
2206 const struct trie_leaf
*leaf
= (struct trie_leaf
*) trie
;
2209 trie
= bfd_zalloc (abfd
, sizeof (struct trie_interior
));
2212 is_full_leaf
= false;
2214 /* TODO: If we wanted to save a little more memory at the cost of
2215 complexity, we could have reused the old leaf node as one of the
2216 children of the new interior node, instead of throwing it away. */
2217 for (i
= 0; i
< leaf
->num_stored_in_leaf
; ++i
)
2219 if (!insert_arange_in_trie (abfd
, trie
, trie_pc
, trie_pc_bits
,
2220 leaf
->ranges
[i
].unit
, leaf
->ranges
[i
].low_pc
,
2221 leaf
->ranges
[i
].high_pc
))
2226 /* If we're a leaf with no more room and we _are_ at the bottom
2227 (or splitting it won't help), we have no choice but to just
2231 const struct trie_leaf
*leaf
= (struct trie_leaf
*) trie
;
2232 unsigned int new_room_in_leaf
= trie
->num_room_in_leaf
* 2;
2233 struct trie_leaf
*new_leaf
;
2234 size_t amt
= sizeof (*leaf
) + new_room_in_leaf
* sizeof (leaf
->ranges
[0]);
2235 new_leaf
= bfd_zalloc (abfd
, amt
);
2236 new_leaf
->head
.num_room_in_leaf
= new_room_in_leaf
;
2237 new_leaf
->num_stored_in_leaf
= leaf
->num_stored_in_leaf
;
2239 memcpy (new_leaf
->ranges
,
2241 leaf
->num_stored_in_leaf
* sizeof (leaf
->ranges
[0]));
2242 trie
= &new_leaf
->head
;
2243 is_full_leaf
= false;
2245 /* Now the insert below will go through. */
2248 /* If we're a leaf (now with room), we can just insert at the end. */
2249 if (trie
->num_room_in_leaf
> 0)
2251 struct trie_leaf
*leaf
= (struct trie_leaf
*) trie
;
2253 unsigned int i
= leaf
->num_stored_in_leaf
++;
2254 leaf
->ranges
[i
].unit
= unit
;
2255 leaf
->ranges
[i
].low_pc
= low_pc
;
2256 leaf
->ranges
[i
].high_pc
= high_pc
;
2260 /* Now we are definitely an interior node, so recurse into all
2261 the relevant buckets. */
2263 /* Clamp the range to the current trie bucket. */
2264 clamped_low_pc
= low_pc
;
2265 clamped_high_pc
= high_pc
;
2266 if (trie_pc_bits
> 0)
2268 bfd_vma bucket_high_pc
=
2269 trie_pc
+ ((bfd_vma
) -1 >> trie_pc_bits
); /* Inclusive. */
2270 if (clamped_low_pc
< trie_pc
)
2271 clamped_low_pc
= trie_pc
;
2272 if (clamped_high_pc
> bucket_high_pc
)
2273 clamped_high_pc
= bucket_high_pc
;
2276 /* Insert the ranges in all buckets that it spans. */
2277 from_ch
= (clamped_low_pc
>> (VMA_BITS
- trie_pc_bits
- 8)) & 0xff;
2278 to_ch
= ((clamped_high_pc
- 1) >> (VMA_BITS
- trie_pc_bits
- 8)) & 0xff;
2279 for (ch
= from_ch
; ch
<= to_ch
; ++ch
)
2281 struct trie_interior
*interior
= (struct trie_interior
*) trie
;
2282 struct trie_node
*child
= interior
->children
[ch
];
2286 child
= alloc_trie_leaf (abfd
);
2290 bfd_vma bucket
= (bfd_vma
) ch
<< (VMA_BITS
- trie_pc_bits
- 8);
2291 child
= insert_arange_in_trie (abfd
,
2301 interior
->children
[ch
] = child
;
2308 arange_add (struct comp_unit
*unit
, struct arange
*first_arange
,
2309 struct trie_node
**trie_root
, bfd_vma low_pc
, bfd_vma high_pc
)
2311 struct arange
*arange
;
2313 /* Ignore empty ranges. */
2314 if (low_pc
== high_pc
)
2317 if (trie_root
!= NULL
)
2319 *trie_root
= insert_arange_in_trie (unit
->file
->bfd_ptr
,
2326 if (*trie_root
== NULL
)
2330 /* If the first arange is empty, use it. */
2331 if (first_arange
->high
== 0)
2333 first_arange
->low
= low_pc
;
2334 first_arange
->high
= high_pc
;
2338 /* Next see if we can cheaply extend an existing range. */
2339 arange
= first_arange
;
2342 if (low_pc
== arange
->high
)
2344 arange
->high
= high_pc
;
2347 if (high_pc
== arange
->low
)
2349 arange
->low
= low_pc
;
2352 arange
= arange
->next
;
2356 /* Need to allocate a new arange and insert it into the arange list.
2357 Order isn't significant, so just insert after the first arange. */
2358 arange
= (struct arange
*) bfd_alloc (unit
->abfd
, sizeof (*arange
));
2361 arange
->low
= low_pc
;
2362 arange
->high
= high_pc
;
2363 arange
->next
= first_arange
->next
;
2364 first_arange
->next
= arange
;
2368 /* Compare function for line sequences. */
2371 compare_sequences (const void* a
, const void* b
)
2373 const struct line_sequence
* seq1
= a
;
2374 const struct line_sequence
* seq2
= b
;
2376 /* Sort by low_pc as the primary key. */
2377 if (seq1
->low_pc
< seq2
->low_pc
)
2379 if (seq1
->low_pc
> seq2
->low_pc
)
2382 /* If low_pc values are equal, sort in reverse order of
2383 high_pc, so that the largest region comes first. */
2384 if (seq1
->last_line
->address
< seq2
->last_line
->address
)
2386 if (seq1
->last_line
->address
> seq2
->last_line
->address
)
2389 if (seq1
->last_line
->op_index
< seq2
->last_line
->op_index
)
2391 if (seq1
->last_line
->op_index
> seq2
->last_line
->op_index
)
2394 /* num_lines is initially an index, to make the sort stable. */
2395 if (seq1
->num_lines
< seq2
->num_lines
)
2397 if (seq1
->num_lines
> seq2
->num_lines
)
2402 /* Construct the line information table for quick lookup. */
2405 build_line_info_table (struct line_info_table
* table
,
2406 struct line_sequence
* seq
)
2409 struct line_info
**line_info_lookup
;
2410 struct line_info
*each_line
;
2411 unsigned int num_lines
;
2412 unsigned int line_index
;
2414 if (seq
->line_info_lookup
!= NULL
)
2417 /* Count the number of line information entries. We could do this while
2418 scanning the debug information, but some entries may be added via
2419 lcl_head without having a sequence handy to increment the number of
2422 for (each_line
= seq
->last_line
; each_line
; each_line
= each_line
->prev_line
)
2425 seq
->num_lines
= num_lines
;
2429 /* Allocate space for the line information lookup table. */
2430 amt
= sizeof (struct line_info
*) * num_lines
;
2431 line_info_lookup
= (struct line_info
**) bfd_alloc (table
->abfd
, amt
);
2432 seq
->line_info_lookup
= line_info_lookup
;
2433 if (line_info_lookup
== NULL
)
2436 /* Create the line information lookup table. */
2437 line_index
= num_lines
;
2438 for (each_line
= seq
->last_line
; each_line
; each_line
= each_line
->prev_line
)
2439 line_info_lookup
[--line_index
] = each_line
;
2441 BFD_ASSERT (line_index
== 0);
2445 /* Sort the line sequences for quick lookup. */
2448 sort_line_sequences (struct line_info_table
* table
)
2451 struct line_sequence
*sequences
;
2452 struct line_sequence
*seq
;
2454 unsigned int num_sequences
= table
->num_sequences
;
2455 bfd_vma last_high_pc
;
2457 if (num_sequences
== 0)
2460 /* Allocate space for an array of sequences. */
2461 amt
= sizeof (struct line_sequence
) * num_sequences
;
2462 sequences
= (struct line_sequence
*) bfd_alloc (table
->abfd
, amt
);
2463 if (sequences
== NULL
)
2466 /* Copy the linked list into the array, freeing the original nodes. */
2467 seq
= table
->sequences
;
2468 for (n
= 0; n
< num_sequences
; n
++)
2470 struct line_sequence
* last_seq
= seq
;
2473 sequences
[n
].low_pc
= seq
->low_pc
;
2474 sequences
[n
].prev_sequence
= NULL
;
2475 sequences
[n
].last_line
= seq
->last_line
;
2476 sequences
[n
].line_info_lookup
= NULL
;
2477 sequences
[n
].num_lines
= n
;
2478 seq
= seq
->prev_sequence
;
2481 BFD_ASSERT (seq
== NULL
);
2483 qsort (sequences
, n
, sizeof (struct line_sequence
), compare_sequences
);
2485 /* Make the list binary-searchable by trimming overlapping entries
2486 and removing nested entries. */
2488 last_high_pc
= sequences
[0].last_line
->address
;
2489 for (n
= 1; n
< table
->num_sequences
; n
++)
2491 if (sequences
[n
].low_pc
< last_high_pc
)
2493 if (sequences
[n
].last_line
->address
<= last_high_pc
)
2494 /* Skip nested entries. */
2497 /* Trim overlapping entries. */
2498 sequences
[n
].low_pc
= last_high_pc
;
2500 last_high_pc
= sequences
[n
].last_line
->address
;
2501 if (n
> num_sequences
)
2503 /* Close up the gap. */
2504 sequences
[num_sequences
].low_pc
= sequences
[n
].low_pc
;
2505 sequences
[num_sequences
].last_line
= sequences
[n
].last_line
;
2510 table
->sequences
= sequences
;
2511 table
->num_sequences
= num_sequences
;
2515 /* Add directory to TABLE. CUR_DIR memory ownership is taken by TABLE. */
2518 line_info_add_include_dir (struct line_info_table
*table
, char *cur_dir
)
2520 if ((table
->num_dirs
% DIR_ALLOC_CHUNK
) == 0)
2525 amt
= table
->num_dirs
+ DIR_ALLOC_CHUNK
;
2526 amt
*= sizeof (char *);
2528 tmp
= (char **) bfd_realloc (table
->dirs
, amt
);
2534 table
->dirs
[table
->num_dirs
++] = cur_dir
;
2539 line_info_add_include_dir_stub (struct line_info_table
*table
, char *cur_dir
,
2540 unsigned int dir ATTRIBUTE_UNUSED
,
2541 unsigned int xtime ATTRIBUTE_UNUSED
,
2542 unsigned int size ATTRIBUTE_UNUSED
)
2544 return line_info_add_include_dir (table
, cur_dir
);
2547 /* Add file to TABLE. CUR_FILE memory ownership is taken by TABLE. */
2550 line_info_add_file_name (struct line_info_table
*table
, char *cur_file
,
2551 unsigned int dir
, unsigned int xtime
,
2554 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
2556 struct fileinfo
*tmp
;
2559 amt
= table
->num_files
+ FILE_ALLOC_CHUNK
;
2560 amt
*= sizeof (struct fileinfo
);
2562 tmp
= (struct fileinfo
*) bfd_realloc (table
->files
, amt
);
2568 table
->files
[table
->num_files
].name
= cur_file
;
2569 table
->files
[table
->num_files
].dir
= dir
;
2570 table
->files
[table
->num_files
].time
= xtime
;
2571 table
->files
[table
->num_files
].size
= size
;
2576 /* Read directory or file name entry format, starting with byte of
2577 format count entries, ULEB128 pairs of entry formats, ULEB128 of
2578 entries count and the entries themselves in the described entry
2582 read_formatted_entries (struct comp_unit
*unit
, bfd_byte
**bufp
,
2583 bfd_byte
*buf_end
, struct line_info_table
*table
,
2584 bool (*callback
) (struct line_info_table
*table
,
2590 bfd
*abfd
= unit
->abfd
;
2591 bfd_byte format_count
, formati
;
2592 bfd_vma data_count
, datai
;
2593 bfd_byte
*buf
= *bufp
;
2594 bfd_byte
*format_header_data
;
2596 format_count
= read_1_byte (abfd
, &buf
, buf_end
);
2597 format_header_data
= buf
;
2598 for (formati
= 0; formati
< format_count
; formati
++)
2600 _bfd_safe_read_leb128 (abfd
, &buf
, false, buf_end
);
2601 _bfd_safe_read_leb128 (abfd
, &buf
, false, buf_end
);
2604 data_count
= _bfd_safe_read_leb128 (abfd
, &buf
, false, buf_end
);
2605 if (format_count
== 0 && data_count
!= 0)
2607 _bfd_error_handler (_("DWARF error: zero format count"));
2608 bfd_set_error (bfd_error_bad_value
);
2612 /* PR 22210. Paranoia check. Don't bother running the loop
2613 if we know that we are going to run out of buffer. */
2614 if (data_count
> (bfd_vma
) (buf_end
- buf
))
2617 (_("DWARF error: data count (%" PRIx64
") larger than buffer size"),
2618 (uint64_t) data_count
);
2619 bfd_set_error (bfd_error_bad_value
);
2623 for (datai
= 0; datai
< data_count
; datai
++)
2625 bfd_byte
*format
= format_header_data
;
2628 memset (&fe
, 0, sizeof fe
);
2629 for (formati
= 0; formati
< format_count
; formati
++)
2631 bfd_vma content_type
, form
;
2633 char **stringp
= &string_trash
;
2634 unsigned int uint_trash
, *uintp
= &uint_trash
;
2635 struct attribute attr
;
2637 content_type
= _bfd_safe_read_leb128 (abfd
, &format
, false, buf_end
);
2638 switch (content_type
)
2643 case DW_LNCT_directory_index
:
2646 case DW_LNCT_timestamp
:
2656 (_("DWARF error: unknown format content type %" PRIu64
),
2657 (uint64_t) content_type
);
2658 bfd_set_error (bfd_error_bad_value
);
2662 form
= _bfd_safe_read_leb128 (abfd
, &format
, false, buf_end
);
2663 buf
= read_attribute_value (&attr
, form
, 0, unit
, buf
, buf_end
);
2668 case DW_FORM_string
:
2669 case DW_FORM_line_strp
:
2675 *stringp
= attr
.u
.str
;
2683 *uintp
= attr
.u
.val
;
2686 case DW_FORM_data16
:
2687 /* MD5 data is in the attr.blk, but we are ignoring those. */
2692 if (!callback (table
, fe
.name
, fe
.dir
, fe
.time
, fe
.size
))
2700 /* Decode the line number information for UNIT. */
2702 static struct line_info_table
*
2703 decode_line_info (struct comp_unit
*unit
)
2705 bfd
*abfd
= unit
->abfd
;
2706 struct dwarf2_debug
*stash
= unit
->stash
;
2707 struct dwarf2_debug_file
*file
= unit
->file
;
2708 struct line_info_table
* table
;
2711 struct line_head lh
;
2712 unsigned int i
, offset_size
;
2713 char *cur_file
, *cur_dir
;
2714 unsigned char op_code
, extended_op
, adj_opcode
;
2715 unsigned int exop_len
;
2718 if (unit
->line_offset
== 0 && file
->line_table
)
2719 return file
->line_table
;
2721 if (! read_section (abfd
, &stash
->debug_sections
[debug_line
],
2722 file
->syms
, unit
->line_offset
,
2723 &file
->dwarf_line_buffer
, &file
->dwarf_line_size
))
2726 if (file
->dwarf_line_size
< 16)
2729 (_("DWARF error: line info section is too small (%" PRId64
")"),
2730 (int64_t) file
->dwarf_line_size
);
2731 bfd_set_error (bfd_error_bad_value
);
2734 line_ptr
= file
->dwarf_line_buffer
+ unit
->line_offset
;
2735 line_end
= file
->dwarf_line_buffer
+ file
->dwarf_line_size
;
2737 /* Read in the prologue. */
2738 lh
.total_length
= read_4_bytes (abfd
, &line_ptr
, line_end
);
2740 if (lh
.total_length
== 0xffffffff)
2742 lh
.total_length
= read_8_bytes (abfd
, &line_ptr
, line_end
);
2745 else if (lh
.total_length
== 0 && unit
->addr_size
== 8)
2747 /* Handle (non-standard) 64-bit DWARF2 formats. */
2748 lh
.total_length
= read_4_bytes (abfd
, &line_ptr
, line_end
);
2752 if (lh
.total_length
> (size_t) (line_end
- line_ptr
))
2755 /* xgettext: c-format */
2756 (_("DWARF error: line info data is bigger (%#" PRIx64
")"
2757 " than the space remaining in the section (%#lx)"),
2758 (uint64_t) lh
.total_length
, (unsigned long) (line_end
- line_ptr
));
2759 bfd_set_error (bfd_error_bad_value
);
2763 line_end
= line_ptr
+ lh
.total_length
;
2765 lh
.version
= read_2_bytes (abfd
, &line_ptr
, line_end
);
2766 if (lh
.version
< 2 || lh
.version
> 5)
2769 (_("DWARF error: unhandled .debug_line version %d"), lh
.version
);
2770 bfd_set_error (bfd_error_bad_value
);
2774 if (line_ptr
+ offset_size
+ (lh
.version
>= 5 ? 8 : (lh
.version
>= 4 ? 6 : 5))
2778 (_("DWARF error: ran out of room reading prologue"));
2779 bfd_set_error (bfd_error_bad_value
);
2783 if (lh
.version
>= 5)
2785 unsigned int segment_selector_size
;
2787 /* Skip address size. */
2788 read_1_byte (abfd
, &line_ptr
, line_end
);
2790 segment_selector_size
= read_1_byte (abfd
, &line_ptr
, line_end
);
2791 if (segment_selector_size
!= 0)
2794 (_("DWARF error: line info unsupported segment selector size %u"),
2795 segment_selector_size
);
2796 bfd_set_error (bfd_error_bad_value
);
2801 if (offset_size
== 4)
2802 lh
.prologue_length
= read_4_bytes (abfd
, &line_ptr
, line_end
);
2804 lh
.prologue_length
= read_8_bytes (abfd
, &line_ptr
, line_end
);
2806 lh
.minimum_instruction_length
= read_1_byte (abfd
, &line_ptr
, line_end
);
2808 if (lh
.version
>= 4)
2809 lh
.maximum_ops_per_insn
= read_1_byte (abfd
, &line_ptr
, line_end
);
2811 lh
.maximum_ops_per_insn
= 1;
2813 if (lh
.maximum_ops_per_insn
== 0)
2816 (_("DWARF error: invalid maximum operations per instruction"));
2817 bfd_set_error (bfd_error_bad_value
);
2821 lh
.default_is_stmt
= read_1_byte (abfd
, &line_ptr
, line_end
);
2822 lh
.line_base
= read_1_signed_byte (abfd
, &line_ptr
, line_end
);
2823 lh
.line_range
= read_1_byte (abfd
, &line_ptr
, line_end
);
2824 lh
.opcode_base
= read_1_byte (abfd
, &line_ptr
, line_end
);
2826 if (line_ptr
+ (lh
.opcode_base
- 1) >= line_end
)
2828 _bfd_error_handler (_("DWARF error: ran out of room reading opcodes"));
2829 bfd_set_error (bfd_error_bad_value
);
2833 amt
= lh
.opcode_base
* sizeof (unsigned char);
2834 lh
.standard_opcode_lengths
= (unsigned char *) bfd_alloc (abfd
, amt
);
2836 lh
.standard_opcode_lengths
[0] = 1;
2838 for (i
= 1; i
< lh
.opcode_base
; ++i
)
2839 lh
.standard_opcode_lengths
[i
] = read_1_byte (abfd
, &line_ptr
, line_end
);
2841 amt
= sizeof (struct line_info_table
);
2842 table
= (struct line_info_table
*) bfd_alloc (abfd
, amt
);
2846 table
->comp_dir
= unit
->comp_dir
;
2848 table
->num_files
= 0;
2849 table
->files
= NULL
;
2851 table
->num_dirs
= 0;
2854 table
->num_sequences
= 0;
2855 table
->sequences
= NULL
;
2857 table
->lcl_head
= NULL
;
2859 if (lh
.version
>= 5)
2861 /* Read directory table. */
2862 if (!read_formatted_entries (unit
, &line_ptr
, line_end
, table
,
2863 line_info_add_include_dir_stub
))
2866 /* Read file name table. */
2867 if (!read_formatted_entries (unit
, &line_ptr
, line_end
, table
,
2868 line_info_add_file_name
))
2870 table
->use_dir_and_file_0
= true;
2874 /* Read directory table. */
2875 while ((cur_dir
= read_string (&line_ptr
, line_end
)) != NULL
)
2877 if (!line_info_add_include_dir (table
, cur_dir
))
2881 /* Read file name table. */
2882 while ((cur_file
= read_string (&line_ptr
, line_end
)) != NULL
)
2884 unsigned int dir
, xtime
, size
;
2886 dir
= _bfd_safe_read_leb128 (abfd
, &line_ptr
, false, line_end
);
2887 xtime
= _bfd_safe_read_leb128 (abfd
, &line_ptr
, false, line_end
);
2888 size
= _bfd_safe_read_leb128 (abfd
, &line_ptr
, false, line_end
);
2890 if (!line_info_add_file_name (table
, cur_file
, dir
, xtime
, size
))
2893 table
->use_dir_and_file_0
= false;
2896 /* Read the statement sequences until there's nothing left. */
2897 while (line_ptr
< line_end
)
2899 /* State machine registers. */
2900 bfd_vma address
= 0;
2901 unsigned char op_index
= 0;
2902 char * filename
= NULL
;
2903 unsigned int line
= 1;
2904 unsigned int column
= 0;
2905 unsigned int discriminator
= 0;
2906 int is_stmt
= lh
.default_is_stmt
;
2907 int end_sequence
= 0;
2908 unsigned int dir
, xtime
, size
;
2909 /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
2910 compilers generate address sequences that are wildly out of
2911 order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
2912 for ia64-Linux). Thus, to determine the low and high
2913 address, we must compare on every DW_LNS_copy, etc. */
2914 bfd_vma low_pc
= (bfd_vma
) -1;
2915 bfd_vma high_pc
= 0;
2917 if (table
->num_files
)
2919 if (table
->use_dir_and_file_0
)
2920 filename
= concat_filename (table
, 0);
2922 filename
= concat_filename (table
, 1);
2925 /* Decode the table. */
2926 while (!end_sequence
&& line_ptr
< line_end
)
2928 op_code
= read_1_byte (abfd
, &line_ptr
, line_end
);
2930 if (op_code
>= lh
.opcode_base
)
2932 /* Special operand. */
2933 adj_opcode
= op_code
- lh
.opcode_base
;
2934 if (lh
.line_range
== 0)
2936 if (lh
.maximum_ops_per_insn
== 1)
2937 address
+= (adj_opcode
/ lh
.line_range
2938 * lh
.minimum_instruction_length
);
2941 address
+= ((op_index
+ adj_opcode
/ lh
.line_range
)
2942 / lh
.maximum_ops_per_insn
2943 * lh
.minimum_instruction_length
);
2944 op_index
= ((op_index
+ adj_opcode
/ lh
.line_range
)
2945 % lh
.maximum_ops_per_insn
);
2947 line
+= lh
.line_base
+ (adj_opcode
% lh
.line_range
);
2948 /* Append row to matrix using current values. */
2949 if (!add_line_info (table
, address
, op_index
, filename
,
2950 line
, column
, discriminator
, 0))
2953 if (address
< low_pc
)
2955 if (address
> high_pc
)
2958 else switch (op_code
)
2960 case DW_LNS_extended_op
:
2961 exop_len
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
2963 extended_op
= read_1_byte (abfd
, &line_ptr
, line_end
);
2965 switch (extended_op
)
2967 case DW_LNE_end_sequence
:
2969 if (!add_line_info (table
, address
, op_index
, filename
, line
,
2970 column
, discriminator
, end_sequence
))
2973 if (address
< low_pc
)
2975 if (address
> high_pc
)
2977 if (!arange_add (unit
, &unit
->arange
, &unit
->file
->trie_root
,
2981 case DW_LNE_set_address
:
2982 address
= read_address (unit
, &line_ptr
, line_end
);
2985 case DW_LNE_define_file
:
2986 cur_file
= read_string (&line_ptr
, line_end
);
2987 dir
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
2989 xtime
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
2991 size
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
2993 if (!line_info_add_file_name (table
, cur_file
, dir
,
2997 case DW_LNE_set_discriminator
:
2998 discriminator
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3001 case DW_LNE_HP_source_file_correlation
:
3002 line_ptr
+= exop_len
- 1;
3006 (_("DWARF error: mangled line number section"));
3007 bfd_set_error (bfd_error_bad_value
);
3014 if (!add_line_info (table
, address
, op_index
,
3015 filename
, line
, column
, discriminator
, 0))
3018 if (address
< low_pc
)
3020 if (address
> high_pc
)
3023 case DW_LNS_advance_pc
:
3024 if (lh
.maximum_ops_per_insn
== 1)
3025 address
+= (lh
.minimum_instruction_length
3026 * _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3030 bfd_vma adjust
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3032 address
= ((op_index
+ adjust
) / lh
.maximum_ops_per_insn
3033 * lh
.minimum_instruction_length
);
3034 op_index
= (op_index
+ adjust
) % lh
.maximum_ops_per_insn
;
3037 case DW_LNS_advance_line
:
3038 line
+= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3041 case DW_LNS_set_file
:
3043 unsigned int filenum
;
3045 /* The file and directory tables are 0
3046 based, the references are 1 based. */
3047 filenum
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3050 filename
= concat_filename (table
, filenum
);
3053 case DW_LNS_set_column
:
3054 column
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3057 case DW_LNS_negate_stmt
:
3058 is_stmt
= (!is_stmt
);
3060 case DW_LNS_set_basic_block
:
3062 case DW_LNS_const_add_pc
:
3063 if (lh
.line_range
== 0)
3065 if (lh
.maximum_ops_per_insn
== 1)
3066 address
+= (lh
.minimum_instruction_length
3067 * ((255 - lh
.opcode_base
) / lh
.line_range
));
3070 bfd_vma adjust
= ((255 - lh
.opcode_base
) / lh
.line_range
);
3071 address
+= (lh
.minimum_instruction_length
3072 * ((op_index
+ adjust
)
3073 / lh
.maximum_ops_per_insn
));
3074 op_index
= (op_index
+ adjust
) % lh
.maximum_ops_per_insn
;
3077 case DW_LNS_fixed_advance_pc
:
3078 address
+= read_2_bytes (abfd
, &line_ptr
, line_end
);
3082 /* Unknown standard opcode, ignore it. */
3083 for (i
= 0; i
< lh
.standard_opcode_lengths
[op_code
]; i
++)
3084 (void) _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3093 if (unit
->line_offset
== 0)
3094 file
->line_table
= table
;
3095 if (sort_line_sequences (table
))
3099 while (table
->sequences
!= NULL
)
3101 struct line_sequence
* seq
= table
->sequences
;
3102 table
->sequences
= table
->sequences
->prev_sequence
;
3105 free (table
->files
);
3110 /* If ADDR is within TABLE set the output parameters and return TRUE,
3111 otherwise set *FILENAME_PTR to NULL and return FALSE.
3112 The parameters FILENAME_PTR, LINENUMBER_PTR and DISCRIMINATOR_PTR
3113 are pointers to the objects to be filled in. */
3116 lookup_address_in_line_info_table (struct line_info_table
*table
,
3118 const char **filename_ptr
,
3119 unsigned int *linenumber_ptr
,
3120 unsigned int *discriminator_ptr
)
3122 struct line_sequence
*seq
= NULL
;
3123 struct line_info
*info
;
3126 /* Binary search the array of sequences. */
3128 high
= table
->num_sequences
;
3131 mid
= (low
+ high
) / 2;
3132 seq
= &table
->sequences
[mid
];
3133 if (addr
< seq
->low_pc
)
3135 else if (addr
>= seq
->last_line
->address
)
3141 /* Check for a valid sequence. */
3142 if (!seq
|| addr
< seq
->low_pc
|| addr
>= seq
->last_line
->address
)
3145 if (!build_line_info_table (table
, seq
))
3148 /* Binary search the array of line information. */
3150 high
= seq
->num_lines
;
3154 mid
= (low
+ high
) / 2;
3155 info
= seq
->line_info_lookup
[mid
];
3156 if (addr
< info
->address
)
3158 else if (addr
>= seq
->line_info_lookup
[mid
+ 1]->address
)
3164 /* Check for a valid line information entry. */
3166 && addr
>= info
->address
3167 && addr
< seq
->line_info_lookup
[mid
+ 1]->address
3168 && !(info
->end_sequence
|| info
== seq
->last_line
))
3170 *filename_ptr
= info
->filename
;
3171 *linenumber_ptr
= info
->line
;
3172 if (discriminator_ptr
)
3173 *discriminator_ptr
= info
->discriminator
;
3178 *filename_ptr
= NULL
;
3182 /* Read in the .debug_ranges section for future reference. */
3185 read_debug_ranges (struct comp_unit
* unit
)
3187 struct dwarf2_debug
*stash
= unit
->stash
;
3188 struct dwarf2_debug_file
*file
= unit
->file
;
3190 return read_section (unit
->abfd
, &stash
->debug_sections
[debug_ranges
],
3192 &file
->dwarf_ranges_buffer
, &file
->dwarf_ranges_size
);
3195 /* Read in the .debug_rnglists section for future reference. */
3198 read_debug_rnglists (struct comp_unit
* unit
)
3200 struct dwarf2_debug
*stash
= unit
->stash
;
3201 struct dwarf2_debug_file
*file
= unit
->file
;
3203 return read_section (unit
->abfd
, &stash
->debug_sections
[debug_rnglists
],
3205 &file
->dwarf_rnglists_buffer
, &file
->dwarf_rnglists_size
);
3208 /* Function table functions. */
3211 compare_lookup_funcinfos (const void * a
, const void * b
)
3213 const struct lookup_funcinfo
* lookup1
= a
;
3214 const struct lookup_funcinfo
* lookup2
= b
;
3216 if (lookup1
->low_addr
< lookup2
->low_addr
)
3218 if (lookup1
->low_addr
> lookup2
->low_addr
)
3220 if (lookup1
->high_addr
< lookup2
->high_addr
)
3222 if (lookup1
->high_addr
> lookup2
->high_addr
)
3225 if (lookup1
->idx
< lookup2
->idx
)
3227 if (lookup1
->idx
> lookup2
->idx
)
3233 build_lookup_funcinfo_table (struct comp_unit
* unit
)
3235 struct lookup_funcinfo
*lookup_funcinfo_table
= unit
->lookup_funcinfo_table
;
3236 unsigned int number_of_functions
= unit
->number_of_functions
;
3237 struct funcinfo
*each
;
3238 struct lookup_funcinfo
*entry
;
3240 struct arange
*range
;
3241 bfd_vma low_addr
, high_addr
;
3243 if (lookup_funcinfo_table
|| number_of_functions
== 0)
3246 /* Create the function info lookup table. */
3247 lookup_funcinfo_table
= (struct lookup_funcinfo
*)
3248 bfd_malloc (number_of_functions
* sizeof (struct lookup_funcinfo
));
3249 if (lookup_funcinfo_table
== NULL
)
3252 /* Populate the function info lookup table. */
3253 func_index
= number_of_functions
;
3254 for (each
= unit
->function_table
; each
; each
= each
->prev_func
)
3256 entry
= &lookup_funcinfo_table
[--func_index
];
3257 entry
->funcinfo
= each
;
3258 entry
->idx
= func_index
;
3260 /* Calculate the lowest and highest address for this function entry. */
3261 low_addr
= entry
->funcinfo
->arange
.low
;
3262 high_addr
= entry
->funcinfo
->arange
.high
;
3264 for (range
= entry
->funcinfo
->arange
.next
; range
; range
= range
->next
)
3266 if (range
->low
< low_addr
)
3267 low_addr
= range
->low
;
3268 if (range
->high
> high_addr
)
3269 high_addr
= range
->high
;
3272 entry
->low_addr
= low_addr
;
3273 entry
->high_addr
= high_addr
;
3276 BFD_ASSERT (func_index
== 0);
3278 /* Sort the function by address. */
3279 qsort (lookup_funcinfo_table
,
3280 number_of_functions
,
3281 sizeof (struct lookup_funcinfo
),
3282 compare_lookup_funcinfos
);
3284 /* Calculate the high watermark for each function in the lookup table. */
3285 high_addr
= lookup_funcinfo_table
[0].high_addr
;
3286 for (func_index
= 1; func_index
< number_of_functions
; func_index
++)
3288 entry
= &lookup_funcinfo_table
[func_index
];
3289 if (entry
->high_addr
> high_addr
)
3290 high_addr
= entry
->high_addr
;
3292 entry
->high_addr
= high_addr
;
3295 unit
->lookup_funcinfo_table
= lookup_funcinfo_table
;
3299 /* If ADDR is within UNIT's function tables, set FUNCTION_PTR, and return
3300 TRUE. Note that we need to find the function that has the smallest range
3301 that contains ADDR, to handle inlined functions without depending upon
3302 them being ordered in TABLE by increasing range. */
3305 lookup_address_in_function_table (struct comp_unit
*unit
,
3307 struct funcinfo
**function_ptr
)
3309 unsigned int number_of_functions
= unit
->number_of_functions
;
3310 struct lookup_funcinfo
* lookup_funcinfo
= NULL
;
3311 struct funcinfo
* funcinfo
= NULL
;
3312 struct funcinfo
* best_fit
= NULL
;
3313 bfd_vma best_fit_len
= (bfd_vma
) -1;
3314 bfd_size_type low
, high
, mid
, first
;
3315 struct arange
*arange
;
3317 if (number_of_functions
== 0)
3320 if (!build_lookup_funcinfo_table (unit
))
3323 if (unit
->lookup_funcinfo_table
[number_of_functions
- 1].high_addr
< addr
)
3326 /* Find the first function in the lookup table which may contain the
3327 specified address. */
3329 high
= number_of_functions
;
3333 mid
= (low
+ high
) / 2;
3334 lookup_funcinfo
= &unit
->lookup_funcinfo_table
[mid
];
3335 if (addr
< lookup_funcinfo
->low_addr
)
3337 else if (addr
>= lookup_funcinfo
->high_addr
)
3343 /* Find the 'best' match for the address. The prior algorithm defined the
3344 best match as the function with the smallest address range containing
3345 the specified address. This definition should probably be changed to the
3346 innermost inline routine containing the address, but right now we want
3347 to get the same results we did before. */
3348 while (first
< number_of_functions
)
3350 if (addr
< unit
->lookup_funcinfo_table
[first
].low_addr
)
3352 funcinfo
= unit
->lookup_funcinfo_table
[first
].funcinfo
;
3354 for (arange
= &funcinfo
->arange
; arange
; arange
= arange
->next
)
3356 if (addr
< arange
->low
|| addr
>= arange
->high
)
3359 if (arange
->high
- arange
->low
< best_fit_len
3360 /* The following comparison is designed to return the same
3361 match as the previous algorithm for routines which have the
3362 same best fit length. */
3363 || (arange
->high
- arange
->low
== best_fit_len
3364 && funcinfo
> best_fit
))
3366 best_fit
= funcinfo
;
3367 best_fit_len
= arange
->high
- arange
->low
;
3377 *function_ptr
= best_fit
;
3381 /* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR
3382 and LINENUMBER_PTR, and return TRUE. */
3385 lookup_symbol_in_function_table (struct comp_unit
*unit
,
3388 const char **filename_ptr
,
3389 unsigned int *linenumber_ptr
)
3391 struct funcinfo
* each
;
3392 struct funcinfo
* best_fit
= NULL
;
3393 bfd_vma best_fit_len
= (bfd_vma
) -1;
3394 struct arange
*arange
;
3395 const char *name
= bfd_asymbol_name (sym
);
3397 for (each
= unit
->function_table
; each
; each
= each
->prev_func
)
3398 for (arange
= &each
->arange
; arange
; arange
= arange
->next
)
3399 if (addr
>= arange
->low
3400 && addr
< arange
->high
3401 && arange
->high
- arange
->low
< best_fit_len
3404 && strstr (name
, each
->name
) != NULL
)
3407 best_fit_len
= arange
->high
- arange
->low
;
3412 *filename_ptr
= best_fit
->file
;
3413 *linenumber_ptr
= best_fit
->line
;
3420 /* Variable table functions. */
3422 /* If SYM is within variable table of UNIT, set FILENAME_PTR and
3423 LINENUMBER_PTR, and return TRUE. */
3426 lookup_symbol_in_variable_table (struct comp_unit
*unit
,
3429 const char **filename_ptr
,
3430 unsigned int *linenumber_ptr
)
3432 struct varinfo
* each
;
3433 const char *name
= bfd_asymbol_name (sym
);
3435 for (each
= unit
->variable_table
; each
; each
= each
->prev_var
)
3436 if (each
->addr
== addr
3438 && each
->file
!= NULL
3439 && each
->name
!= NULL
3440 && strstr (name
, each
->name
) != NULL
)
3445 *filename_ptr
= each
->file
;
3446 *linenumber_ptr
= each
->line
;
3453 static struct comp_unit
*stash_comp_unit (struct dwarf2_debug
*,
3454 struct dwarf2_debug_file
*);
3455 static bool comp_unit_maybe_decode_line_info (struct comp_unit
*);
3458 find_abstract_instance (struct comp_unit
*unit
,
3459 struct attribute
*attr_ptr
,
3460 unsigned int recur_count
,
3463 char **filename_ptr
,
3464 int *linenumber_ptr
)
3466 bfd
*abfd
= unit
->abfd
;
3467 bfd_byte
*info_ptr
= NULL
;
3468 bfd_byte
*info_ptr_end
;
3469 unsigned int abbrev_number
, i
;
3470 struct abbrev_info
*abbrev
;
3471 uint64_t die_ref
= attr_ptr
->u
.val
;
3472 struct attribute attr
;
3474 if (recur_count
== 100)
3477 (_("DWARF error: abstract instance recursion detected"));
3478 bfd_set_error (bfd_error_bad_value
);
3482 /* DW_FORM_ref_addr can reference an entry in a different CU. It
3483 is an offset from the .debug_info section, not the current CU. */
3484 if (attr_ptr
->form
== DW_FORM_ref_addr
)
3486 /* We only support DW_FORM_ref_addr within the same file, so
3487 any relocations should be resolved already. Check this by
3488 testing for a zero die_ref; There can't be a valid reference
3489 to the header of a .debug_info section.
3490 DW_FORM_ref_addr is an offset relative to .debug_info.
3491 Normally when using the GNU linker this is accomplished by
3492 emitting a symbolic reference to a label, because .debug_info
3493 sections are linked at zero. When there are multiple section
3494 groups containing .debug_info, as there might be in a
3495 relocatable object file, it would be reasonable to assume that
3496 a symbolic reference to a label in any .debug_info section
3497 might be used. Since we lay out multiple .debug_info
3498 sections at non-zero VMAs (see place_sections), and read
3499 them contiguously into dwarf_info_buffer, that means the
3500 reference is relative to dwarf_info_buffer. */
3503 info_ptr
= unit
->file
->dwarf_info_buffer
;
3504 info_ptr_end
= info_ptr
+ unit
->file
->dwarf_info_size
;
3505 total
= info_ptr_end
- info_ptr
;
3508 else if (die_ref
>= total
)
3511 (_("DWARF error: invalid abstract instance DIE ref"));
3512 bfd_set_error (bfd_error_bad_value
);
3515 info_ptr
+= die_ref
;
3517 else if (attr_ptr
->form
== DW_FORM_GNU_ref_alt
)
3519 bool first_time
= unit
->stash
->alt
.dwarf_info_buffer
== NULL
;
3521 info_ptr
= read_alt_indirect_ref (unit
, die_ref
);
3523 unit
->stash
->alt
.info_ptr
= unit
->stash
->alt
.dwarf_info_buffer
;
3524 if (info_ptr
== NULL
)
3527 (_("DWARF error: unable to read alt ref %" PRIu64
),
3528 (uint64_t) die_ref
);
3529 bfd_set_error (bfd_error_bad_value
);
3532 info_ptr_end
= (unit
->stash
->alt
.dwarf_info_buffer
3533 + unit
->stash
->alt
.dwarf_info_size
);
3534 if (unit
->stash
->alt
.all_comp_units
)
3535 unit
= unit
->stash
->alt
.all_comp_units
;
3538 if (attr_ptr
->form
== DW_FORM_ref_addr
3539 || attr_ptr
->form
== DW_FORM_GNU_ref_alt
)
3541 /* Now find the CU containing this pointer. */
3542 if (info_ptr
>= unit
->info_ptr_unit
&& info_ptr
< unit
->end_ptr
)
3543 info_ptr_end
= unit
->end_ptr
;
3546 /* Check other CUs to see if they contain the abbrev. */
3547 struct comp_unit
*u
= NULL
;
3548 struct addr_range range
= { info_ptr
, info_ptr
};
3549 splay_tree_node v
= splay_tree_lookup (unit
->file
->comp_unit_tree
,
3550 (splay_tree_key
)&range
);
3552 u
= (struct comp_unit
*)v
->value
;
3554 if (attr_ptr
->form
== DW_FORM_ref_addr
)
3557 u
= stash_comp_unit (unit
->stash
, &unit
->stash
->f
);
3560 if (info_ptr
>= u
->info_ptr_unit
&& info_ptr
< u
->end_ptr
)
3565 if (attr_ptr
->form
== DW_FORM_GNU_ref_alt
)
3568 u
= stash_comp_unit (unit
->stash
, &unit
->stash
->alt
);
3571 if (info_ptr
>= u
->info_ptr_unit
&& info_ptr
< u
->end_ptr
)
3579 (_("DWARF error: unable to locate abstract instance DIE ref %"
3580 PRIu64
), (uint64_t) die_ref
);
3581 bfd_set_error (bfd_error_bad_value
);
3585 info_ptr_end
= unit
->end_ptr
;
3590 /* DW_FORM_ref1, DW_FORM_ref2, DW_FORM_ref4, DW_FORM_ref8 or
3591 DW_FORM_ref_udata. These are all references relative to the
3592 start of the current CU. */
3595 info_ptr
= unit
->info_ptr_unit
;
3596 info_ptr_end
= unit
->end_ptr
;
3597 total
= info_ptr_end
- info_ptr
;
3598 if (!die_ref
|| die_ref
>= total
)
3601 (_("DWARF error: invalid abstract instance DIE ref"));
3602 bfd_set_error (bfd_error_bad_value
);
3605 info_ptr
+= die_ref
;
3608 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
3609 false, info_ptr_end
);
3612 abbrev
= lookup_abbrev (abbrev_number
, unit
->abbrevs
);
3616 (_("DWARF error: could not find abbrev number %u"), abbrev_number
);
3617 bfd_set_error (bfd_error_bad_value
);
3622 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
3624 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
,
3625 info_ptr
, info_ptr_end
);
3626 if (info_ptr
== NULL
)
3631 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
3633 if (*pname
== NULL
&& is_str_form (&attr
))
3635 *pname
= attr
.u
.str
;
3636 if (mangle_style (unit
->lang
) == 0)
3640 case DW_AT_specification
:
3641 if (is_int_form (&attr
)
3642 && !find_abstract_instance (unit
, &attr
, recur_count
+ 1,
3644 filename_ptr
, linenumber_ptr
))
3647 case DW_AT_linkage_name
:
3648 case DW_AT_MIPS_linkage_name
:
3649 /* PR 16949: Corrupt debug info can place
3650 non-string forms into these attributes. */
3651 if (is_str_form (&attr
))
3653 *pname
= attr
.u
.str
;
3657 case DW_AT_decl_file
:
3658 if (!comp_unit_maybe_decode_line_info (unit
))
3660 if (is_int_form (&attr
))
3662 free (*filename_ptr
);
3663 *filename_ptr
= concat_filename (unit
->line_table
,
3667 case DW_AT_decl_line
:
3668 if (is_int_form (&attr
))
3669 *linenumber_ptr
= attr
.u
.val
;
3681 read_ranges (struct comp_unit
*unit
, struct arange
*arange
,
3682 struct trie_node
**trie_root
, uint64_t offset
)
3684 bfd_byte
*ranges_ptr
;
3685 bfd_byte
*ranges_end
;
3686 bfd_vma base_address
= unit
->base_address
;
3688 if (! unit
->file
->dwarf_ranges_buffer
)
3690 if (! read_debug_ranges (unit
))
3694 if (offset
> unit
->file
->dwarf_ranges_size
)
3696 ranges_ptr
= unit
->file
->dwarf_ranges_buffer
+ offset
;
3697 ranges_end
= unit
->file
->dwarf_ranges_buffer
+ unit
->file
->dwarf_ranges_size
;
3704 /* PR 17512: file: 62cada7d. */
3705 if (2u * unit
->addr_size
> (size_t) (ranges_end
- ranges_ptr
))
3708 low_pc
= read_address (unit
, &ranges_ptr
, ranges_end
);
3709 high_pc
= read_address (unit
, &ranges_ptr
, ranges_end
);
3711 if (low_pc
== 0 && high_pc
== 0)
3713 if (low_pc
== (bfd_vma
) -1 && high_pc
!= (bfd_vma
) -1)
3714 base_address
= high_pc
;
3717 if (!arange_add (unit
, arange
, trie_root
,
3718 base_address
+ low_pc
, base_address
+ high_pc
))
3726 read_rnglists (struct comp_unit
*unit
, struct arange
*arange
,
3727 struct trie_node
**trie_root
, uint64_t offset
)
3731 bfd_vma base_address
= unit
->base_address
;
3734 bfd
*abfd
= unit
->abfd
;
3736 if (! unit
->file
->dwarf_rnglists_buffer
)
3738 if (! read_debug_rnglists (unit
))
3742 rngs_ptr
= unit
->file
->dwarf_rnglists_buffer
+ offset
;
3743 if (rngs_ptr
< unit
->file
->dwarf_rnglists_buffer
)
3745 rngs_end
= unit
->file
->dwarf_rnglists_buffer
;
3746 rngs_end
+= unit
->file
->dwarf_rnglists_size
;
3750 enum dwarf_range_list_entry rlet
;
3752 if (rngs_ptr
>= rngs_end
)
3755 rlet
= read_1_byte (abfd
, &rngs_ptr
, rngs_end
);
3759 case DW_RLE_end_of_list
:
3762 case DW_RLE_base_address
:
3763 if (unit
->addr_size
> (size_t) (rngs_end
- rngs_ptr
))
3765 base_address
= read_address (unit
, &rngs_ptr
, rngs_end
);
3768 case DW_RLE_start_length
:
3769 if (unit
->addr_size
> (size_t) (rngs_end
- rngs_ptr
))
3771 low_pc
= read_address (unit
, &rngs_ptr
, rngs_end
);
3773 high_pc
+= _bfd_safe_read_leb128 (abfd
, &rngs_ptr
,
3777 case DW_RLE_offset_pair
:
3778 low_pc
= base_address
;
3779 low_pc
+= _bfd_safe_read_leb128 (abfd
, &rngs_ptr
,
3781 high_pc
= base_address
;
3782 high_pc
+= _bfd_safe_read_leb128 (abfd
, &rngs_ptr
,
3786 case DW_RLE_start_end
:
3787 if (2u * unit
->addr_size
> (size_t) (rngs_end
- rngs_ptr
))
3789 low_pc
= read_address (unit
, &rngs_ptr
, rngs_end
);
3790 high_pc
= read_address (unit
, &rngs_ptr
, rngs_end
);
3793 /* TODO x-variants need .debug_addr support used for split-dwarf. */
3794 case DW_RLE_base_addressx
:
3795 case DW_RLE_startx_endx
:
3796 case DW_RLE_startx_length
:
3801 if (!arange_add (unit
, arange
, trie_root
, low_pc
, high_pc
))
3807 read_rangelist (struct comp_unit
*unit
, struct arange
*arange
,
3808 struct trie_node
**trie_root
, uint64_t offset
)
3810 if (unit
->version
<= 4)
3811 return read_ranges (unit
, arange
, trie_root
, offset
);
3813 return read_rnglists (unit
, arange
, trie_root
, offset
);
3816 static struct funcinfo
*
3817 lookup_func_by_offset (uint64_t offset
, struct funcinfo
* table
)
3819 for (; table
!= NULL
; table
= table
->prev_func
)
3820 if (table
->unit_offset
== offset
)
3825 static struct varinfo
*
3826 lookup_var_by_offset (uint64_t offset
, struct varinfo
* table
)
3830 if (table
->unit_offset
== offset
)
3832 table
= table
->prev_var
;
3839 /* DWARF2 Compilation unit functions. */
3841 static struct funcinfo
*
3842 reverse_funcinfo_list (struct funcinfo
*head
)
3844 struct funcinfo
*rhead
;
3845 struct funcinfo
*temp
;
3847 for (rhead
= NULL
; head
; head
= temp
)
3849 temp
= head
->prev_func
;
3850 head
->prev_func
= rhead
;
3856 static struct varinfo
*
3857 reverse_varinfo_list (struct varinfo
*head
)
3859 struct varinfo
*rhead
;
3860 struct varinfo
*temp
;
3862 for (rhead
= NULL
; head
; head
= temp
)
3864 temp
= head
->prev_var
;
3865 head
->prev_var
= rhead
;
3871 /* Scan over each die in a comp. unit looking for functions to add
3872 to the function table and variables to the variable table. */
3875 scan_unit_for_symbols (struct comp_unit
*unit
)
3877 bfd
*abfd
= unit
->abfd
;
3878 bfd_byte
*info_ptr
= unit
->first_child_die_ptr
;
3879 bfd_byte
*info_ptr_end
= unit
->end_ptr
;
3880 int nesting_level
= 0;
3881 struct nest_funcinfo
3883 struct funcinfo
*func
;
3885 int nested_funcs_size
;
3886 struct funcinfo
*last_func
;
3887 struct varinfo
*last_var
;
3889 /* Maintain a stack of in-scope functions and inlined functions, which we
3890 can use to set the caller_func field. */
3891 nested_funcs_size
= 32;
3892 nested_funcs
= (struct nest_funcinfo
*)
3893 bfd_malloc (nested_funcs_size
* sizeof (*nested_funcs
));
3894 if (nested_funcs
== NULL
)
3896 nested_funcs
[nesting_level
].func
= 0;
3898 /* PR 27484: We must scan the DIEs twice. The first time we look for
3899 function and variable tags and accumulate them into their respective
3900 tables. The second time through we process the attributes of the
3901 functions/variables and augment the table entries. */
3902 while (nesting_level
>= 0)
3904 unsigned int abbrev_number
, i
;
3905 struct abbrev_info
*abbrev
;
3906 struct funcinfo
*func
;
3907 struct varinfo
*var
;
3908 uint64_t current_offset
;
3910 /* PR 17512: file: 9f405d9d. */
3911 if (info_ptr
>= info_ptr_end
)
3914 current_offset
= info_ptr
- unit
->info_ptr_unit
;
3915 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
3916 false, info_ptr_end
);
3917 if (abbrev_number
== 0)
3923 abbrev
= lookup_abbrev (abbrev_number
, unit
->abbrevs
);
3926 static unsigned int previous_failed_abbrev
= -1U;
3928 /* Avoid multiple reports of the same missing abbrev. */
3929 if (abbrev_number
!= previous_failed_abbrev
)
3932 (_("DWARF error: could not find abbrev number %u"),
3934 previous_failed_abbrev
= abbrev_number
;
3936 bfd_set_error (bfd_error_bad_value
);
3940 if (abbrev
->tag
== DW_TAG_subprogram
3941 || abbrev
->tag
== DW_TAG_entry_point
3942 || abbrev
->tag
== DW_TAG_inlined_subroutine
)
3944 size_t amt
= sizeof (struct funcinfo
);
3947 func
= (struct funcinfo
*) bfd_zalloc (abfd
, amt
);
3950 func
->tag
= abbrev
->tag
;
3951 func
->prev_func
= unit
->function_table
;
3952 func
->unit_offset
= current_offset
;
3953 unit
->function_table
= func
;
3954 unit
->number_of_functions
++;
3955 BFD_ASSERT (!unit
->cached
);
3957 if (func
->tag
== DW_TAG_inlined_subroutine
)
3958 for (i
= nesting_level
; i
-- != 0; )
3959 if (nested_funcs
[i
].func
)
3961 func
->caller_func
= nested_funcs
[i
].func
;
3964 nested_funcs
[nesting_level
].func
= func
;
3969 if (abbrev
->tag
== DW_TAG_variable
3970 || abbrev
->tag
== DW_TAG_member
)
3972 size_t amt
= sizeof (struct varinfo
);
3974 var
= (struct varinfo
*) bfd_zalloc (abfd
, amt
);
3977 var
->tag
= abbrev
->tag
;
3979 var
->prev_var
= unit
->variable_table
;
3980 unit
->variable_table
= var
;
3981 var
->unit_offset
= current_offset
;
3982 /* PR 18205: Missing debug information can cause this
3983 var to be attached to an already cached unit. */
3988 /* No inline function in scope at this nesting level. */
3989 nested_funcs
[nesting_level
].func
= 0;
3992 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
3994 struct attribute attr
;
3996 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
],
3997 unit
, info_ptr
, info_ptr_end
);
3998 if (info_ptr
== NULL
)
4002 if (abbrev
->has_children
)
4006 if (nesting_level
>= nested_funcs_size
)
4008 struct nest_funcinfo
*tmp
;
4010 nested_funcs_size
*= 2;
4011 tmp
= (struct nest_funcinfo
*)
4012 bfd_realloc (nested_funcs
,
4013 nested_funcs_size
* sizeof (*nested_funcs
));
4018 nested_funcs
[nesting_level
].func
= 0;
4022 unit
->function_table
= reverse_funcinfo_list (unit
->function_table
);
4023 unit
->variable_table
= reverse_varinfo_list (unit
->variable_table
);
4025 /* This is the second pass over the abbrevs. */
4026 info_ptr
= unit
->first_child_die_ptr
;
4032 while (nesting_level
>= 0)
4034 unsigned int abbrev_number
, i
;
4035 struct abbrev_info
*abbrev
;
4036 struct attribute attr
;
4037 struct funcinfo
*func
;
4038 struct varinfo
*var
;
4040 bfd_vma high_pc
= 0;
4041 bool high_pc_relative
= false;
4042 uint64_t current_offset
;
4044 /* PR 17512: file: 9f405d9d. */
4045 if (info_ptr
>= info_ptr_end
)
4048 current_offset
= info_ptr
- unit
->info_ptr_unit
;
4049 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
4050 false, info_ptr_end
);
4051 if (! abbrev_number
)
4057 abbrev
= lookup_abbrev (abbrev_number
, unit
->abbrevs
);
4058 /* This should have been handled above. */
4059 BFD_ASSERT (abbrev
!= NULL
);
4063 if (abbrev
->tag
== DW_TAG_subprogram
4064 || abbrev
->tag
== DW_TAG_entry_point
4065 || abbrev
->tag
== DW_TAG_inlined_subroutine
)
4068 && last_func
->prev_func
4069 && last_func
->prev_func
->unit_offset
== current_offset
)
4070 func
= last_func
->prev_func
;
4072 func
= lookup_func_by_offset (current_offset
, unit
->function_table
);
4079 else if (abbrev
->tag
== DW_TAG_variable
4080 || abbrev
->tag
== DW_TAG_member
)
4083 && last_var
->prev_var
4084 && last_var
->prev_var
->unit_offset
== current_offset
)
4085 var
= last_var
->prev_var
;
4087 var
= lookup_var_by_offset (current_offset
, unit
->variable_table
);
4095 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
4097 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
],
4098 unit
, info_ptr
, info_ptr_end
);
4099 if (info_ptr
== NULL
)
4106 case DW_AT_call_file
:
4107 if (is_int_form (&attr
))
4109 free (func
->caller_file
);
4110 func
->caller_file
= concat_filename (unit
->line_table
,
4115 case DW_AT_call_line
:
4116 if (is_int_form (&attr
))
4117 func
->caller_line
= attr
.u
.val
;
4120 case DW_AT_abstract_origin
:
4121 case DW_AT_specification
:
4122 if (is_int_form (&attr
)
4123 && !find_abstract_instance (unit
, &attr
, 0,
4132 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
4134 if (func
->name
== NULL
&& is_str_form (&attr
))
4136 func
->name
= attr
.u
.str
;
4137 if (mangle_style (unit
->lang
) == 0)
4138 func
->is_linkage
= true;
4142 case DW_AT_linkage_name
:
4143 case DW_AT_MIPS_linkage_name
:
4144 /* PR 16949: Corrupt debug info can place
4145 non-string forms into these attributes. */
4146 if (is_str_form (&attr
))
4148 func
->name
= attr
.u
.str
;
4149 func
->is_linkage
= true;
4154 if (is_int_form (&attr
))
4155 low_pc
= attr
.u
.val
;
4159 if (is_int_form (&attr
))
4161 high_pc
= attr
.u
.val
;
4162 high_pc_relative
= attr
.form
!= DW_FORM_addr
;
4167 if (is_int_form (&attr
)
4168 && !read_rangelist (unit
, &func
->arange
,
4169 &unit
->file
->trie_root
, attr
.u
.val
))
4173 case DW_AT_decl_file
:
4174 if (is_int_form (&attr
))
4177 func
->file
= concat_filename (unit
->line_table
,
4182 case DW_AT_decl_line
:
4183 if (is_int_form (&attr
))
4184 func
->line
= attr
.u
.val
;
4195 case DW_AT_specification
:
4196 if (is_int_form (&attr
) && attr
.u
.val
)
4199 if (!find_abstract_instance (unit
, &attr
, 0,
4205 _bfd_error_handler (_("DWARF error: could not find "
4206 "variable specification "
4208 (unsigned long) attr
.u
.val
);
4215 if (is_str_form (&attr
))
4216 var
->name
= attr
.u
.str
;
4219 case DW_AT_decl_file
:
4220 if (is_int_form (&attr
))
4223 var
->file
= concat_filename (unit
->line_table
,
4228 case DW_AT_decl_line
:
4229 if (is_int_form (&attr
))
4230 var
->line
= attr
.u
.val
;
4233 case DW_AT_external
:
4234 if (is_int_form (&attr
) && attr
.u
.val
!= 0)
4238 case DW_AT_location
:
4242 case DW_FORM_block1
:
4243 case DW_FORM_block2
:
4244 case DW_FORM_block4
:
4245 case DW_FORM_exprloc
:
4246 if (attr
.u
.blk
->data
!= NULL
4247 && *attr
.u
.blk
->data
== DW_OP_addr
)
4251 /* Verify that DW_OP_addr is the only opcode in the
4252 location, in which case the block size will be 1
4253 plus the address size. */
4254 /* ??? For TLS variables, gcc can emit
4255 DW_OP_addr <addr> DW_OP_GNU_push_tls_address
4256 which we don't handle here yet. */
4257 if (attr
.u
.blk
->size
== unit
->addr_size
+ 1U)
4258 var
->addr
= bfd_get (unit
->addr_size
* 8,
4260 attr
.u
.blk
->data
+ 1);
4275 if (abbrev
->has_children
)
4278 if (high_pc_relative
)
4281 if (func
&& high_pc
!= 0)
4283 if (!arange_add (unit
, &func
->arange
, &unit
->file
->trie_root
,
4289 unit
->function_table
= reverse_funcinfo_list (unit
->function_table
);
4290 unit
->variable_table
= reverse_varinfo_list (unit
->variable_table
);
4292 free (nested_funcs
);
4296 free (nested_funcs
);
4300 /* Read the attributes of the form strx and addrx. */
4303 reread_attribute (struct comp_unit
*unit
,
4304 struct attribute
*attr
,
4307 bool *high_pc_relative
,
4310 if (is_strx_form (attr
->form
))
4311 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
4312 if (is_addrx_form (attr
->form
))
4313 attr
->u
.val
= read_indexed_address (attr
->u
.val
, unit
);
4317 case DW_AT_stmt_list
:
4319 unit
->line_offset
= attr
->u
.val
;
4323 if (is_str_form (attr
))
4324 unit
->name
= attr
->u
.str
;
4328 *low_pc
= attr
->u
.val
;
4330 unit
->base_address
= *low_pc
;
4334 *high_pc
= attr
->u
.val
;
4335 *high_pc_relative
= attr
->form
!= DW_FORM_addr
;
4339 if (!read_rangelist (unit
, &unit
->arange
,
4340 &unit
->file
->trie_root
, attr
->u
.val
))
4344 case DW_AT_comp_dir
:
4346 char *comp_dir
= attr
->u
.str
;
4348 if (!is_str_form (attr
))
4351 (_("DWARF error: DW_AT_comp_dir attribute encountered "
4352 "with a non-string form"));
4358 char *cp
= strchr (comp_dir
, ':');
4360 if (cp
&& cp
!= comp_dir
&& cp
[-1] == '.' && cp
[1] == '/')
4363 unit
->comp_dir
= comp_dir
;
4367 case DW_AT_language
:
4368 unit
->lang
= attr
->u
.val
;
4374 /* Parse a DWARF2 compilation unit starting at INFO_PTR. UNIT_LENGTH
4375 includes the compilation unit header that proceeds the DIE's, but
4376 does not include the length field that precedes each compilation
4377 unit header. END_PTR points one past the end of this comp unit.
4378 OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
4380 This routine does not read the whole compilation unit; only enough
4381 to get to the line number information for the compilation unit. */
4383 static struct comp_unit
*
4384 parse_comp_unit (struct dwarf2_debug
*stash
,
4385 struct dwarf2_debug_file
*file
,
4387 bfd_vma unit_length
,
4388 bfd_byte
*info_ptr_unit
,
4389 unsigned int offset_size
)
4391 struct comp_unit
* unit
;
4392 unsigned int version
;
4393 uint64_t abbrev_offset
= 0;
4394 /* Initialize it just to avoid a GCC false warning. */
4395 unsigned int addr_size
= -1;
4396 struct abbrev_info
** abbrevs
;
4397 unsigned int abbrev_number
, i
;
4398 struct abbrev_info
*abbrev
;
4399 struct attribute attr
;
4400 bfd_byte
*end_ptr
= info_ptr
+ unit_length
;
4403 bfd_vma high_pc
= 0;
4404 bfd
*abfd
= file
->bfd_ptr
;
4405 bool high_pc_relative
= false;
4406 enum dwarf_unit_type unit_type
;
4407 struct attribute
*str_addrp
= NULL
;
4408 size_t str_count
= 0;
4409 size_t str_alloc
= 0;
4410 bool compunit_flag
= false;
4412 version
= read_2_bytes (abfd
, &info_ptr
, end_ptr
);
4413 if (version
< 2 || version
> 5)
4415 /* PR 19872: A version number of 0 probably means that there is padding
4416 at the end of the .debug_info section. Gold puts it there when
4417 performing an incremental link, for example. So do not generate
4418 an error, just return a NULL. */
4422 (_("DWARF error: found dwarf version '%u', this reader"
4423 " only handles version 2, 3, 4 and 5 information"), version
);
4424 bfd_set_error (bfd_error_bad_value
);
4430 unit_type
= DW_UT_compile
;
4433 unit_type
= read_1_byte (abfd
, &info_ptr
, end_ptr
);
4434 addr_size
= read_1_byte (abfd
, &info_ptr
, end_ptr
);
4437 BFD_ASSERT (offset_size
== 4 || offset_size
== 8);
4438 if (offset_size
== 4)
4439 abbrev_offset
= read_4_bytes (abfd
, &info_ptr
, end_ptr
);
4441 abbrev_offset
= read_8_bytes (abfd
, &info_ptr
, end_ptr
);
4444 addr_size
= read_1_byte (abfd
, &info_ptr
, end_ptr
);
4449 /* Skip type signature. */
4452 /* Skip type offset. */
4453 info_ptr
+= offset_size
;
4456 case DW_UT_skeleton
:
4457 /* Skip DWO_id field. */
4465 if (addr_size
> sizeof (bfd_vma
))
4468 /* xgettext: c-format */
4469 (_("DWARF error: found address size '%u', this reader"
4470 " can not handle sizes greater than '%u'"),
4472 (unsigned int) sizeof (bfd_vma
));
4473 bfd_set_error (bfd_error_bad_value
);
4477 if (addr_size
!= 2 && addr_size
!= 4 && addr_size
!= 8)
4480 ("DWARF error: found address size '%u', this reader"
4481 " can only handle address sizes '2', '4' and '8'", addr_size
);
4482 bfd_set_error (bfd_error_bad_value
);
4486 /* Read the abbrevs for this compilation unit into a table. */
4487 abbrevs
= read_abbrevs (abfd
, abbrev_offset
, stash
, file
);
4491 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
4493 if (! abbrev_number
)
4495 /* PR 19872: An abbrev number of 0 probably means that there is padding
4496 at the end of the .debug_abbrev section. Gold puts it there when
4497 performing an incremental link, for example. So do not generate
4498 an error, just return a NULL. */
4502 abbrev
= lookup_abbrev (abbrev_number
, abbrevs
);
4505 _bfd_error_handler (_("DWARF error: could not find abbrev number %u"),
4507 bfd_set_error (bfd_error_bad_value
);
4511 amt
= sizeof (struct comp_unit
);
4512 unit
= (struct comp_unit
*) bfd_zalloc (abfd
, amt
);
4516 unit
->version
= version
;
4517 unit
->addr_size
= addr_size
;
4518 unit
->offset_size
= offset_size
;
4519 unit
->abbrevs
= abbrevs
;
4520 unit
->end_ptr
= end_ptr
;
4521 unit
->stash
= stash
;
4523 unit
->info_ptr_unit
= info_ptr_unit
;
4525 if (abbrev
->tag
== DW_TAG_compile_unit
)
4526 compunit_flag
= true;
4528 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
4530 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
, end_ptr
);
4531 if (info_ptr
== NULL
)
4534 /* Identify attributes of the form strx* and addrx* which come before
4535 DW_AT_str_offsets_base and DW_AT_addr_base respectively in the CU.
4536 Store the attributes in an array and process them later. */
4537 if ((unit
->dwarf_str_offset
== 0 && is_strx_form (attr
.form
))
4538 || (unit
->dwarf_addr_offset
== 0 && is_addrx_form (attr
.form
)))
4540 if (str_count
<= str_alloc
)
4542 str_alloc
= 2 * str_alloc
+ 200;
4543 str_addrp
= bfd_realloc (str_addrp
,
4544 str_alloc
* sizeof (*str_addrp
));
4545 if (str_addrp
== NULL
)
4548 str_addrp
[str_count
] = attr
;
4553 /* Store the data if it is of an attribute we want to keep in a
4554 partial symbol table. */
4557 case DW_AT_stmt_list
:
4558 if (is_int_form (&attr
))
4561 unit
->line_offset
= attr
.u
.val
;
4566 if (is_str_form (&attr
))
4567 unit
->name
= attr
.u
.str
;
4571 if (is_int_form (&attr
))
4573 low_pc
= attr
.u
.val
;
4574 /* If the compilation unit DIE has a DW_AT_low_pc attribute,
4575 this is the base address to use when reading location
4576 lists or range lists. */
4578 unit
->base_address
= low_pc
;
4583 if (is_int_form (&attr
))
4585 high_pc
= attr
.u
.val
;
4586 high_pc_relative
= attr
.form
!= DW_FORM_addr
;
4591 if (is_int_form (&attr
)
4592 && !read_rangelist (unit
, &unit
->arange
,
4593 &unit
->file
->trie_root
, attr
.u
.val
))
4597 case DW_AT_comp_dir
:
4599 char *comp_dir
= attr
.u
.str
;
4601 /* PR 17512: file: 1fe726be. */
4602 if (!is_str_form (&attr
))
4605 (_("DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"));
4611 /* Irix 6.2 native cc prepends <machine>.: to the compilation
4612 directory, get rid of it. */
4613 char *cp
= strchr (comp_dir
, ':');
4615 if (cp
&& cp
!= comp_dir
&& cp
[-1] == '.' && cp
[1] == '/')
4618 unit
->comp_dir
= comp_dir
;
4622 case DW_AT_language
:
4623 if (is_int_form (&attr
))
4624 unit
->lang
= attr
.u
.val
;
4627 case DW_AT_addr_base
:
4628 unit
->dwarf_addr_offset
= attr
.u
.val
;
4631 case DW_AT_str_offsets_base
:
4632 unit
->dwarf_str_offset
= attr
.u
.val
;
4640 for (i
= 0; i
< str_count
; ++i
)
4641 reread_attribute (unit
, &str_addrp
[i
], &low_pc
, &high_pc
,
4642 &high_pc_relative
, compunit_flag
);
4644 if (high_pc_relative
)
4648 if (!arange_add (unit
, &unit
->arange
, &unit
->file
->trie_root
,
4653 unit
->first_child_die_ptr
= info_ptr
;
4664 /* Return TRUE if UNIT may contain the address given by ADDR. When
4665 there are functions written entirely with inline asm statements, the
4666 range info in the compilation unit header may not be correct. We
4667 need to consult the line info table to see if a compilation unit
4668 really contains the given address. */
4671 comp_unit_may_contain_address (struct comp_unit
*unit
, bfd_vma addr
)
4673 struct arange
*arange
;
4678 if (unit
->arange
.high
== 0 /* No ranges have been computed yet. */
4679 || unit
->line_table
== NULL
) /* The line info table has not been loaded. */
4682 for (arange
= &unit
->arange
; arange
!= NULL
; arange
= arange
->next
)
4683 if (addr
>= arange
->low
&& addr
< arange
->high
)
4689 /* If UNIT contains ADDR, set the output parameters to the values for
4690 the line containing ADDR and return TRUE. Otherwise return FALSE.
4691 The output parameters, FILENAME_PTR, FUNCTION_PTR, and
4692 LINENUMBER_PTR, are pointers to the objects to be filled in. */
4695 comp_unit_find_nearest_line (struct comp_unit
*unit
,
4697 const char **filename_ptr
,
4698 struct funcinfo
**function_ptr
,
4699 unsigned int *linenumber_ptr
,
4700 unsigned int *discriminator_ptr
)
4702 bool line_p
, func_p
;
4704 if (!comp_unit_maybe_decode_line_info (unit
))
4707 *function_ptr
= NULL
;
4708 func_p
= lookup_address_in_function_table (unit
, addr
, function_ptr
);
4710 if (func_p
&& (*function_ptr
)->tag
== DW_TAG_inlined_subroutine
)
4711 unit
->stash
->inliner_chain
= *function_ptr
;
4713 line_p
= lookup_address_in_line_info_table (unit
->line_table
, addr
,
4717 return line_p
|| func_p
;
4720 /* Check to see if line info is already decoded in a comp_unit.
4721 If not, decode it. Returns TRUE if no errors were encountered;
4725 comp_unit_maybe_decode_line_info (struct comp_unit
*unit
)
4730 if (! unit
->line_table
)
4732 if (! unit
->stmtlist
)
4738 unit
->line_table
= decode_line_info (unit
);
4740 if (! unit
->line_table
)
4746 if (unit
->first_child_die_ptr
< unit
->end_ptr
4747 && ! scan_unit_for_symbols (unit
))
4757 /* If UNIT contains SYM at ADDR, set the output parameters to the
4758 values for the line containing SYM. The output parameters,
4759 FILENAME_PTR, and LINENUMBER_PTR, are pointers to the objects to be
4762 Return TRUE if UNIT contains SYM, and no errors were encountered;
4766 comp_unit_find_line (struct comp_unit
*unit
,
4769 const char **filename_ptr
,
4770 unsigned int *linenumber_ptr
)
4772 if (!comp_unit_maybe_decode_line_info (unit
))
4775 if (sym
->flags
& BSF_FUNCTION
)
4776 return lookup_symbol_in_function_table (unit
, sym
, addr
,
4780 return lookup_symbol_in_variable_table (unit
, sym
, addr
,
4785 /* Extract all interesting funcinfos and varinfos of a compilation
4786 unit into hash tables for faster lookup. Returns TRUE if no
4787 errors were enountered; FALSE otherwise. */
4790 comp_unit_hash_info (struct dwarf2_debug
*stash
,
4791 struct comp_unit
*unit
,
4792 struct info_hash_table
*funcinfo_hash_table
,
4793 struct info_hash_table
*varinfo_hash_table
)
4795 struct funcinfo
* each_func
;
4796 struct varinfo
* each_var
;
4799 BFD_ASSERT (stash
->info_hash_status
!= STASH_INFO_HASH_DISABLED
);
4801 if (!comp_unit_maybe_decode_line_info (unit
))
4804 BFD_ASSERT (!unit
->cached
);
4806 /* To preserve the original search order, we went to visit the function
4807 infos in the reversed order of the list. However, making the list
4808 bi-directional use quite a bit of extra memory. So we reverse
4809 the list first, traverse the list in the now reversed order and
4810 finally reverse the list again to get back the original order. */
4811 unit
->function_table
= reverse_funcinfo_list (unit
->function_table
);
4812 for (each_func
= unit
->function_table
;
4814 each_func
= each_func
->prev_func
)
4816 /* Skip nameless functions. */
4817 if (each_func
->name
)
4818 /* There is no need to copy name string into hash table as
4819 name string is either in the dwarf string buffer or
4820 info in the stash. */
4821 okay
= insert_info_hash_table (funcinfo_hash_table
, each_func
->name
,
4822 (void*) each_func
, false);
4824 unit
->function_table
= reverse_funcinfo_list (unit
->function_table
);
4828 /* We do the same for variable infos. */
4829 unit
->variable_table
= reverse_varinfo_list (unit
->variable_table
);
4830 for (each_var
= unit
->variable_table
;
4832 each_var
= each_var
->prev_var
)
4834 /* Skip stack vars and vars with no files or names. */
4835 if (! each_var
->stack
4836 && each_var
->file
!= NULL
4837 && each_var
->name
!= NULL
)
4838 /* There is no need to copy name string into hash table as
4839 name string is either in the dwarf string buffer or
4840 info in the stash. */
4841 okay
= insert_info_hash_table (varinfo_hash_table
, each_var
->name
,
4842 (void*) each_var
, false);
4845 unit
->variable_table
= reverse_varinfo_list (unit
->variable_table
);
4846 unit
->cached
= true;
4850 /* Locate a section in a BFD containing debugging info. The search starts
4851 from the section after AFTER_SEC, or from the first section in the BFD if
4852 AFTER_SEC is NULL. The search works by examining the names of the
4853 sections. There are three permissiable names. The first two are given
4854 by DEBUG_SECTIONS[debug_info] (whose standard DWARF2 names are .debug_info
4855 and .zdebug_info). The third is a prefix .gnu.linkonce.wi.
4856 This is a variation on the .debug_info section which has a checksum
4857 describing the contents appended onto the name. This allows the linker to
4858 identify and discard duplicate debugging sections for different
4859 compilation units. */
4860 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
4863 find_debug_info (bfd
*abfd
, const struct dwarf_debug_section
*debug_sections
,
4864 asection
*after_sec
)
4869 if (after_sec
== NULL
)
4871 look
= debug_sections
[debug_info
].uncompressed_name
;
4872 msec
= bfd_get_section_by_name (abfd
, look
);
4873 /* Testing SEC_HAS_CONTENTS is an anti-fuzzer measure. Of
4874 course debug sections always have contents. */
4875 if (msec
!= NULL
&& (msec
->flags
& SEC_HAS_CONTENTS
) != 0)
4878 look
= debug_sections
[debug_info
].compressed_name
;
4879 msec
= bfd_get_section_by_name (abfd
, look
);
4880 if (msec
!= NULL
&& (msec
->flags
& SEC_HAS_CONTENTS
) != 0)
4883 for (msec
= abfd
->sections
; msec
!= NULL
; msec
= msec
->next
)
4884 if ((msec
->flags
& SEC_HAS_CONTENTS
) != 0
4885 && startswith (msec
->name
, GNU_LINKONCE_INFO
))
4891 for (msec
= after_sec
->next
; msec
!= NULL
; msec
= msec
->next
)
4893 if ((msec
->flags
& SEC_HAS_CONTENTS
) == 0)
4896 look
= debug_sections
[debug_info
].uncompressed_name
;
4897 if (strcmp (msec
->name
, look
) == 0)
4900 look
= debug_sections
[debug_info
].compressed_name
;
4901 if (look
!= NULL
&& strcmp (msec
->name
, look
) == 0)
4904 if (startswith (msec
->name
, GNU_LINKONCE_INFO
))
4911 /* Transfer VMAs from object file to separate debug file. */
4914 set_debug_vma (bfd
*orig_bfd
, bfd
*debug_bfd
)
4918 for (s
= orig_bfd
->sections
, d
= debug_bfd
->sections
;
4919 s
!= NULL
&& d
!= NULL
;
4920 s
= s
->next
, d
= d
->next
)
4922 if ((d
->flags
& SEC_DEBUGGING
) != 0)
4924 /* ??? Assumes 1-1 correspondence between sections in the
4926 if (strcmp (s
->name
, d
->name
) == 0)
4928 d
->output_section
= s
->output_section
;
4929 d
->output_offset
= s
->output_offset
;
4935 /* If the dwarf2 info was found in a separate debug file, return the
4936 debug file section corresponding to the section in the original file
4937 and the debug file symbols. */
4940 _bfd_dwarf2_stash_syms (struct dwarf2_debug
*stash
, bfd
*abfd
,
4941 asection
**sec
, asymbol
***syms
)
4943 if (stash
->f
.bfd_ptr
!= abfd
)
4949 *syms
= stash
->f
.syms
;
4953 for (s
= abfd
->sections
, d
= stash
->f
.bfd_ptr
->sections
;
4954 s
!= NULL
&& d
!= NULL
;
4955 s
= s
->next
, d
= d
->next
)
4957 if ((d
->flags
& SEC_DEBUGGING
) != 0)
4960 && strcmp (s
->name
, d
->name
) == 0)
4963 *syms
= stash
->f
.syms
;
4970 /* Unset vmas for adjusted sections in STASH. */
4973 unset_sections (struct dwarf2_debug
*stash
)
4976 struct adjusted_section
*p
;
4978 i
= stash
->adjusted_section_count
;
4979 p
= stash
->adjusted_sections
;
4980 for (; i
> 0; i
--, p
++)
4981 p
->section
->vma
= p
->orig_vma
;
4984 /* Set VMAs for allocated and .debug_info sections in ORIG_BFD, a
4985 relocatable object file. VMAs are normally all zero in relocatable
4986 object files, so if we want to distinguish locations in sections by
4987 address we need to set VMAs so the sections do not overlap. We
4988 also set VMA on .debug_info so that when we have multiple
4989 .debug_info sections (or the linkonce variant) they also do not
4990 overlap. The multiple .debug_info sections make up a single
4991 logical section. ??? We should probably do the same for other
4995 place_sections (bfd
*orig_bfd
, struct dwarf2_debug
*stash
)
4998 struct adjusted_section
*p
;
5000 const char *debug_info_name
;
5002 if (stash
->adjusted_section_count
!= 0)
5004 i
= stash
->adjusted_section_count
;
5005 p
= stash
->adjusted_sections
;
5006 for (; i
> 0; i
--, p
++)
5007 p
->section
->vma
= p
->adj_vma
;
5011 debug_info_name
= stash
->debug_sections
[debug_info
].uncompressed_name
;
5018 for (sect
= abfd
->sections
; sect
!= NULL
; sect
= sect
->next
)
5022 if (sect
->output_section
!= NULL
5023 && sect
->output_section
!= sect
5024 && (sect
->flags
& SEC_DEBUGGING
) == 0)
5027 is_debug_info
= (strcmp (sect
->name
, debug_info_name
) == 0
5028 || startswith (sect
->name
, GNU_LINKONCE_INFO
));
5030 if (!((sect
->flags
& SEC_ALLOC
) != 0 && abfd
== orig_bfd
)
5036 if (abfd
== stash
->f
.bfd_ptr
)
5038 abfd
= stash
->f
.bfd_ptr
;
5042 stash
->adjusted_section_count
= -1;
5045 bfd_vma last_vma
= 0, last_dwarf
= 0;
5046 size_t amt
= i
* sizeof (struct adjusted_section
);
5048 p
= (struct adjusted_section
*) bfd_malloc (amt
);
5052 stash
->adjusted_sections
= p
;
5053 stash
->adjusted_section_count
= i
;
5060 for (sect
= abfd
->sections
; sect
!= NULL
; sect
= sect
->next
)
5065 if (sect
->output_section
!= NULL
5066 && sect
->output_section
!= sect
5067 && (sect
->flags
& SEC_DEBUGGING
) == 0)
5070 is_debug_info
= (strcmp (sect
->name
, debug_info_name
) == 0
5071 || startswith (sect
->name
, GNU_LINKONCE_INFO
));
5073 if (!((sect
->flags
& SEC_ALLOC
) != 0 && abfd
== orig_bfd
)
5077 sz
= sect
->rawsize
? sect
->rawsize
: sect
->size
;
5080 p
->orig_vma
= sect
->vma
;
5082 bfd_vma
*v
= is_debug_info
? &last_dwarf
: &last_vma
;
5083 /* Align the new address to the current section
5085 bfd_vma mask
= -(bfd_vma
) 1 << sect
->alignment_power
;
5086 *v
= (*v
+ ~mask
) & mask
;
5090 p
->adj_vma
= sect
->vma
;
5093 if (abfd
== stash
->f
.bfd_ptr
)
5095 abfd
= stash
->f
.bfd_ptr
;
5099 if (orig_bfd
!= stash
->f
.bfd_ptr
)
5100 set_debug_vma (orig_bfd
, stash
->f
.bfd_ptr
);
5105 /* Look up a funcinfo by name using the given info hash table. If found,
5106 also update the locations pointed to by filename_ptr and linenumber_ptr.
5108 This function returns TRUE if a funcinfo that matches the given symbol
5109 and address is found with any error; otherwise it returns FALSE. */
5112 info_hash_lookup_funcinfo (struct info_hash_table
*hash_table
,
5115 const char **filename_ptr
,
5116 unsigned int *linenumber_ptr
)
5118 struct funcinfo
* each_func
;
5119 struct funcinfo
* best_fit
= NULL
;
5120 bfd_vma best_fit_len
= (bfd_vma
) -1;
5121 struct info_list_node
*node
;
5122 struct arange
*arange
;
5123 const char *name
= bfd_asymbol_name (sym
);
5125 for (node
= lookup_info_hash_table (hash_table
, name
);
5129 each_func
= (struct funcinfo
*) node
->info
;
5130 for (arange
= &each_func
->arange
;
5132 arange
= arange
->next
)
5134 if (addr
>= arange
->low
5135 && addr
< arange
->high
5136 && arange
->high
- arange
->low
< best_fit_len
)
5138 best_fit
= each_func
;
5139 best_fit_len
= arange
->high
- arange
->low
;
5146 *filename_ptr
= best_fit
->file
;
5147 *linenumber_ptr
= best_fit
->line
;
5154 /* Look up a varinfo by name using the given info hash table. If found,
5155 also update the locations pointed to by filename_ptr and linenumber_ptr.
5157 This function returns TRUE if a varinfo that matches the given symbol
5158 and address is found with any error; otherwise it returns FALSE. */
5161 info_hash_lookup_varinfo (struct info_hash_table
*hash_table
,
5164 const char **filename_ptr
,
5165 unsigned int *linenumber_ptr
)
5167 struct varinfo
* each
;
5168 struct info_list_node
*node
;
5169 const char *name
= bfd_asymbol_name (sym
);
5171 for (node
= lookup_info_hash_table (hash_table
, name
);
5175 each
= (struct varinfo
*) node
->info
;
5176 if (each
->addr
== addr
)
5178 *filename_ptr
= each
->file
;
5179 *linenumber_ptr
= each
->line
;
5187 /* Update the funcinfo and varinfo info hash tables if they are
5188 not up to date. Returns TRUE if there is no error; otherwise
5189 returns FALSE and disable the info hash tables. */
5192 stash_maybe_update_info_hash_tables (struct dwarf2_debug
*stash
)
5194 struct comp_unit
*each
;
5196 /* Exit if hash tables are up-to-date. */
5197 if (stash
->f
.all_comp_units
== stash
->hash_units_head
)
5200 if (stash
->hash_units_head
)
5201 each
= stash
->hash_units_head
->prev_unit
;
5203 each
= stash
->f
.last_comp_unit
;
5207 if (!comp_unit_hash_info (stash
, each
, stash
->funcinfo_hash_table
,
5208 stash
->varinfo_hash_table
))
5210 stash
->info_hash_status
= STASH_INFO_HASH_DISABLED
;
5213 each
= each
->prev_unit
;
5216 stash
->hash_units_head
= stash
->f
.all_comp_units
;
5220 /* Check consistency of info hash tables. This is for debugging only. */
5222 static void ATTRIBUTE_UNUSED
5223 stash_verify_info_hash_table (struct dwarf2_debug
*stash
)
5225 struct comp_unit
*each_unit
;
5226 struct funcinfo
*each_func
;
5227 struct varinfo
*each_var
;
5228 struct info_list_node
*node
;
5231 for (each_unit
= stash
->f
.all_comp_units
;
5233 each_unit
= each_unit
->next_unit
)
5235 for (each_func
= each_unit
->function_table
;
5237 each_func
= each_func
->prev_func
)
5239 if (!each_func
->name
)
5241 node
= lookup_info_hash_table (stash
->funcinfo_hash_table
,
5245 while (node
&& !found
)
5247 found
= node
->info
== each_func
;
5253 for (each_var
= each_unit
->variable_table
;
5255 each_var
= each_var
->prev_var
)
5257 if (!each_var
->name
|| !each_var
->file
|| each_var
->stack
)
5259 node
= lookup_info_hash_table (stash
->varinfo_hash_table
,
5263 while (node
&& !found
)
5265 found
= node
->info
== each_var
;
5273 /* Check to see if we want to enable the info hash tables, which consume
5274 quite a bit of memory. Currently we only check the number times
5275 bfd_dwarf2_find_line is called. In the future, we may also want to
5276 take the number of symbols into account. */
5279 stash_maybe_enable_info_hash_tables (bfd
*abfd
, struct dwarf2_debug
*stash
)
5281 BFD_ASSERT (stash
->info_hash_status
== STASH_INFO_HASH_OFF
);
5283 if (stash
->info_hash_count
++ < STASH_INFO_HASH_TRIGGER
)
5286 /* FIXME: Maybe we should check the reduce_memory_overheads
5287 and optimize fields in the bfd_link_info structure ? */
5289 /* Create hash tables. */
5290 stash
->funcinfo_hash_table
= create_info_hash_table (abfd
);
5291 stash
->varinfo_hash_table
= create_info_hash_table (abfd
);
5292 if (!stash
->funcinfo_hash_table
|| !stash
->varinfo_hash_table
)
5294 /* Turn off info hashes if any allocation above fails. */
5295 stash
->info_hash_status
= STASH_INFO_HASH_DISABLED
;
5298 /* We need a forced update so that the info hash tables will
5299 be created even though there is no compilation unit. That
5300 happens if STASH_INFO_HASH_TRIGGER is 0. */
5301 if (stash_maybe_update_info_hash_tables (stash
))
5302 stash
->info_hash_status
= STASH_INFO_HASH_ON
;
5305 /* Find the file and line associated with a symbol and address using the
5306 info hash tables of a stash. If there is a match, the function returns
5307 TRUE and update the locations pointed to by filename_ptr and linenumber_ptr;
5308 otherwise it returns FALSE. */
5311 stash_find_line_fast (struct dwarf2_debug
*stash
,
5314 const char **filename_ptr
,
5315 unsigned int *linenumber_ptr
)
5317 BFD_ASSERT (stash
->info_hash_status
== STASH_INFO_HASH_ON
);
5319 if (sym
->flags
& BSF_FUNCTION
)
5320 return info_hash_lookup_funcinfo (stash
->funcinfo_hash_table
, sym
, addr
,
5321 filename_ptr
, linenumber_ptr
);
5322 return info_hash_lookup_varinfo (stash
->varinfo_hash_table
, sym
, addr
,
5323 filename_ptr
, linenumber_ptr
);
5326 /* Save current section VMAs. */
5329 save_section_vma (const bfd
*abfd
, struct dwarf2_debug
*stash
)
5334 if (abfd
->section_count
== 0)
5336 stash
->sec_vma
= bfd_malloc (sizeof (*stash
->sec_vma
) * abfd
->section_count
);
5337 if (stash
->sec_vma
== NULL
)
5339 stash
->sec_vma_count
= abfd
->section_count
;
5340 for (i
= 0, s
= abfd
->sections
;
5341 s
!= NULL
&& i
< abfd
->section_count
;
5344 if (s
->output_section
!= NULL
)
5345 stash
->sec_vma
[i
] = s
->output_section
->vma
+ s
->output_offset
;
5347 stash
->sec_vma
[i
] = s
->vma
;
5352 /* Compare current section VMAs against those at the time the stash
5353 was created. If find_nearest_line is used in linker warnings or
5354 errors early in the link process, the debug info stash will be
5355 invalid for later calls. This is because we relocate debug info
5356 sections, so the stashed section contents depend on symbol values,
5357 which in turn depend on section VMAs. */
5360 section_vma_same (const bfd
*abfd
, const struct dwarf2_debug
*stash
)
5365 /* PR 24334: If the number of sections in ABFD has changed between
5366 when the stash was created and now, then we cannot trust the
5367 stashed vma information. */
5368 if (abfd
->section_count
!= stash
->sec_vma_count
)
5371 for (i
= 0, s
= abfd
->sections
;
5372 s
!= NULL
&& i
< abfd
->section_count
;
5377 if (s
->output_section
!= NULL
)
5378 vma
= s
->output_section
->vma
+ s
->output_offset
;
5381 if (vma
!= stash
->sec_vma
[i
])
5387 /* Read debug information from DEBUG_BFD when DEBUG_BFD is specified.
5388 If DEBUG_BFD is not specified, we read debug information from ABFD
5389 or its gnu_debuglink. The results will be stored in PINFO.
5390 The function returns TRUE iff debug information is ready. */
5393 _bfd_dwarf2_slurp_debug_info (bfd
*abfd
, bfd
*debug_bfd
,
5394 const struct dwarf_debug_section
*debug_sections
,
5399 bfd_size_type total_size
;
5401 struct dwarf2_debug
*stash
= (struct dwarf2_debug
*) *pinfo
;
5405 if (stash
->orig_bfd
== abfd
5406 && section_vma_same (abfd
, stash
))
5408 /* Check that we did previously find some debug information
5409 before attempting to make use of it. */
5410 if (stash
->f
.dwarf_info_size
!= 0)
5412 if (do_place
&& !place_sections (abfd
, stash
))
5419 _bfd_dwarf2_cleanup_debug_info (abfd
, pinfo
);
5420 memset (stash
, 0, sizeof (*stash
));
5424 stash
= (struct dwarf2_debug
*) bfd_zalloc (abfd
, sizeof (*stash
));
5429 stash
->orig_bfd
= abfd
;
5430 stash
->debug_sections
= debug_sections
;
5431 stash
->f
.syms
= symbols
;
5432 if (!save_section_vma (abfd
, stash
))
5435 stash
->f
.abbrev_offsets
= htab_create_alloc (10, hash_abbrev
, eq_abbrev
,
5436 del_abbrev
, calloc
, free
);
5437 if (!stash
->f
.abbrev_offsets
)
5440 stash
->alt
.abbrev_offsets
= htab_create_alloc (10, hash_abbrev
, eq_abbrev
,
5441 del_abbrev
, calloc
, free
);
5442 if (!stash
->alt
.abbrev_offsets
)
5445 stash
->f
.trie_root
= alloc_trie_leaf (abfd
);
5446 if (!stash
->f
.trie_root
)
5449 stash
->alt
.trie_root
= alloc_trie_leaf (abfd
);
5450 if (!stash
->alt
.trie_root
)
5453 if (debug_bfd
== NULL
)
5456 msec
= find_debug_info (debug_bfd
, debug_sections
, NULL
);
5457 if (msec
== NULL
&& abfd
== debug_bfd
)
5459 char * debug_filename
;
5461 debug_filename
= bfd_follow_build_id_debuglink (abfd
, DEBUGDIR
);
5462 if (debug_filename
== NULL
)
5463 debug_filename
= bfd_follow_gnu_debuglink (abfd
, DEBUGDIR
);
5465 if (debug_filename
== NULL
)
5466 /* No dwarf2 info, and no gnu_debuglink to follow.
5467 Note that at this point the stash has been allocated, but
5468 contains zeros. This lets future calls to this function
5469 fail more quickly. */
5472 debug_bfd
= bfd_openr (debug_filename
, NULL
);
5473 free (debug_filename
);
5474 if (debug_bfd
== NULL
)
5475 /* FIXME: Should we report our failure to follow the debuglink ? */
5478 /* Set BFD_DECOMPRESS to decompress debug sections. */
5479 debug_bfd
->flags
|= BFD_DECOMPRESS
;
5480 if (!bfd_check_format (debug_bfd
, bfd_object
)
5481 || (msec
= find_debug_info (debug_bfd
,
5482 debug_sections
, NULL
)) == NULL
5483 || !bfd_generic_link_read_symbols (debug_bfd
))
5485 bfd_close (debug_bfd
);
5489 symbols
= bfd_get_outsymbols (debug_bfd
);
5490 stash
->f
.syms
= symbols
;
5491 stash
->close_on_cleanup
= true;
5493 stash
->f
.bfd_ptr
= debug_bfd
;
5496 && !place_sections (abfd
, stash
))
5499 /* There can be more than one DWARF2 info section in a BFD these
5500 days. First handle the easy case when there's only one. If
5501 there's more than one, try case two: read them all in and produce
5502 one large stash. We do this in two passes - in the first pass we
5503 just accumulate the section sizes, and in the second pass we
5504 read in the section's contents. (The allows us to avoid
5505 reallocing the data as we add sections to the stash.) */
5507 if (! find_debug_info (debug_bfd
, debug_sections
, msec
))
5509 /* Case 1: only one info section. */
5510 total_size
= msec
->size
;
5511 if (! read_section (debug_bfd
, &stash
->debug_sections
[debug_info
],
5513 &stash
->f
.dwarf_info_buffer
, &total_size
))
5518 /* Case 2: multiple sections. */
5519 for (total_size
= 0;
5521 msec
= find_debug_info (debug_bfd
, debug_sections
, msec
))
5523 if (_bfd_section_size_insane (debug_bfd
, msec
))
5525 /* Catch PR25070 testcase overflowing size calculation here. */
5526 if (total_size
+ msec
->size
< total_size
)
5528 bfd_set_error (bfd_error_no_memory
);
5531 total_size
+= msec
->size
;
5534 stash
->f
.dwarf_info_buffer
= (bfd_byte
*) bfd_malloc (total_size
);
5535 if (stash
->f
.dwarf_info_buffer
== NULL
)
5539 for (msec
= find_debug_info (debug_bfd
, debug_sections
, NULL
);
5541 msec
= find_debug_info (debug_bfd
, debug_sections
, msec
))
5549 if (!(bfd_simple_get_relocated_section_contents
5550 (debug_bfd
, msec
, stash
->f
.dwarf_info_buffer
+ total_size
,
5558 stash
->f
.info_ptr
= stash
->f
.dwarf_info_buffer
;
5559 stash
->f
.dwarf_info_size
= total_size
;
5563 unset_sections (stash
);
5567 /* Parse the next DWARF2 compilation unit at FILE->INFO_PTR. */
5569 static struct comp_unit
*
5570 stash_comp_unit (struct dwarf2_debug
*stash
, struct dwarf2_debug_file
*file
)
5572 bfd_size_type length
;
5573 unsigned int offset_size
;
5574 bfd_byte
*info_ptr_unit
= file
->info_ptr
;
5575 bfd_byte
*info_ptr_end
= file
->dwarf_info_buffer
+ file
->dwarf_info_size
;
5577 if (file
->info_ptr
>= info_ptr_end
)
5580 length
= read_4_bytes (file
->bfd_ptr
, &file
->info_ptr
, info_ptr_end
);
5581 /* A 0xffffff length is the DWARF3 way of indicating
5582 we use 64-bit offsets, instead of 32-bit offsets. */
5583 if (length
== 0xffffffff)
5586 length
= read_8_bytes (file
->bfd_ptr
, &file
->info_ptr
, info_ptr_end
);
5588 /* A zero length is the IRIX way of indicating 64-bit offsets,
5589 mostly because the 64-bit length will generally fit in 32
5590 bits, and the endianness helps. */
5591 else if (length
== 0)
5594 length
= read_4_bytes (file
->bfd_ptr
, &file
->info_ptr
, info_ptr_end
);
5596 /* In the absence of the hints above, we assume 32-bit DWARF2
5597 offsets even for targets with 64-bit addresses, because:
5598 a) most of the time these targets will not have generated
5599 more than 2Gb of debug info and so will not need 64-bit
5602 b) if they do use 64-bit offsets but they are not using
5603 the size hints that are tested for above then they are
5604 not conforming to the DWARF3 standard anyway. */
5609 && length
<= (size_t) (info_ptr_end
- file
->info_ptr
))
5611 struct comp_unit
*each
= parse_comp_unit (stash
, file
,
5612 file
->info_ptr
, length
,
5613 info_ptr_unit
, offset_size
);
5616 if (file
->comp_unit_tree
== NULL
)
5617 file
->comp_unit_tree
5618 = splay_tree_new (splay_tree_compare_addr_range
,
5619 splay_tree_free_addr_range
, NULL
);
5621 struct addr_range
*r
5622 = (struct addr_range
*)bfd_malloc (sizeof (struct addr_range
));
5623 r
->start
= each
->info_ptr_unit
;
5624 r
->end
= each
->end_ptr
;
5625 splay_tree_node v
= splay_tree_lookup (file
->comp_unit_tree
,
5627 if (v
!= NULL
|| r
->end
<= r
->start
)
5629 splay_tree_insert (file
->comp_unit_tree
, (splay_tree_key
)r
,
5630 (splay_tree_value
)each
);
5632 if (file
->all_comp_units
)
5633 file
->all_comp_units
->prev_unit
= each
;
5635 file
->last_comp_unit
= each
;
5637 each
->next_unit
= file
->all_comp_units
;
5638 file
->all_comp_units
= each
;
5640 if (each
->arange
.high
== 0)
5642 each
->next_unit_without_ranges
= file
->all_comp_units_without_ranges
;
5643 file
->all_comp_units_without_ranges
= each
->next_unit_without_ranges
;
5646 file
->info_ptr
+= length
;
5651 /* Don't trust any of the DWARF info after a corrupted length or
5653 file
->info_ptr
= info_ptr_end
;
5657 /* Hash function for an asymbol. */
5660 hash_asymbol (const void *sym
)
5662 const asymbol
*asym
= sym
;
5663 return htab_hash_string (asym
->name
);
5666 /* Equality function for asymbols. */
5669 eq_asymbol (const void *a
, const void *b
)
5671 const asymbol
*sa
= a
;
5672 const asymbol
*sb
= b
;
5673 return strcmp (sa
->name
, sb
->name
) == 0;
5676 /* Scan the debug information in PINFO looking for a DW_TAG_subprogram
5677 abbrev with a DW_AT_low_pc attached to it. Then lookup that same
5678 symbol in SYMBOLS and return the difference between the low_pc and
5679 the symbol's address. Returns 0 if no suitable symbol could be found. */
5682 _bfd_dwarf2_find_symbol_bias (asymbol
** symbols
, void ** pinfo
)
5684 struct dwarf2_debug
*stash
;
5685 struct comp_unit
* unit
;
5687 bfd_signed_vma result
= 0;
5690 stash
= (struct dwarf2_debug
*) *pinfo
;
5692 if (stash
== NULL
|| symbols
== NULL
)
5695 sym_hash
= htab_create_alloc (10, hash_asymbol
, eq_asymbol
,
5696 NULL
, xcalloc
, free
);
5697 for (psym
= symbols
; * psym
!= NULL
; psym
++)
5699 asymbol
* sym
= * psym
;
5701 if (sym
->flags
& BSF_FUNCTION
&& sym
->section
!= NULL
)
5703 void **slot
= htab_find_slot (sym_hash
, sym
, INSERT
);
5708 for (unit
= stash
->f
.all_comp_units
; unit
; unit
= unit
->next_unit
)
5710 struct funcinfo
* func
;
5712 comp_unit_maybe_decode_line_info (unit
);
5714 for (func
= unit
->function_table
; func
!= NULL
; func
= func
->prev_func
)
5715 if (func
->name
&& func
->arange
.low
)
5717 asymbol search
, *sym
;
5719 /* FIXME: Do we need to scan the aranges looking for the
5722 search
.name
= func
->name
;
5723 sym
= htab_find (sym_hash
, &search
);
5726 result
= func
->arange
.low
- (sym
->value
+ sym
->section
->vma
);
5733 htab_delete (sym_hash
);
5737 /* See _bfd_dwarf2_find_nearest_line_with_alt. */
5740 _bfd_dwarf2_find_nearest_line (bfd
*abfd
,
5745 const char **filename_ptr
,
5746 const char **functionname_ptr
,
5747 unsigned int *linenumber_ptr
,
5748 unsigned int *discriminator_ptr
,
5749 const struct dwarf_debug_section
*debug_sections
,
5752 return _bfd_dwarf2_find_nearest_line_with_alt
5753 (abfd
, NULL
, symbols
, symbol
, section
, offset
, filename_ptr
,
5754 functionname_ptr
, linenumber_ptr
, discriminator_ptr
, debug_sections
,
5758 /* Find the source code location of SYMBOL. If SYMBOL is NULL
5759 then find the nearest source code location corresponding to
5760 the address SECTION + OFFSET.
5761 Returns 1 if the line is found without error and fills in
5762 FILENAME_PTR and LINENUMBER_PTR. In the case where SYMBOL was
5763 NULL the FUNCTIONNAME_PTR is also filled in.
5764 Returns 2 if partial information from _bfd_elf_find_function is
5765 returned (function and maybe file) by looking at symbols. DWARF2
5766 info is present but not regarding the requested code location.
5767 Returns 0 otherwise.
5768 SYMBOLS contains the symbol table for ABFD.
5769 DEBUG_SECTIONS contains the name of the dwarf debug sections.
5770 If ALT_FILENAME is given, attempt to open the file and use it
5771 as the .gnu_debugaltlink file. Otherwise this file will be
5772 searched for when needed. */
5775 _bfd_dwarf2_find_nearest_line_with_alt
5777 const char *alt_filename
,
5782 const char **filename_ptr
,
5783 const char **functionname_ptr
,
5784 unsigned int *linenumber_ptr
,
5785 unsigned int *discriminator_ptr
,
5786 const struct dwarf_debug_section
*debug_sections
,
5789 /* Read each compilation unit from the section .debug_info, and check
5790 to see if it contains the address we are searching for. If yes,
5791 lookup the address, and return the line number info. If no, go
5792 on to the next compilation unit.
5794 We keep a list of all the previously read compilation units, and
5795 a pointer to the next un-read compilation unit. Check the
5796 previously read units before reading more. */
5797 struct dwarf2_debug
*stash
;
5798 /* What address are we looking for? */
5800 struct comp_unit
* each
;
5801 struct funcinfo
*function
= NULL
;
5805 *filename_ptr
= NULL
;
5806 if (functionname_ptr
!= NULL
)
5807 *functionname_ptr
= NULL
;
5808 *linenumber_ptr
= 0;
5809 if (discriminator_ptr
)
5810 *discriminator_ptr
= 0;
5812 if (! _bfd_dwarf2_slurp_debug_info (abfd
, NULL
, debug_sections
,
5814 (abfd
->flags
& (EXEC_P
| DYNAMIC
)) == 0))
5817 stash
= (struct dwarf2_debug
*) *pinfo
;
5819 if (stash
->alt
.bfd_ptr
== NULL
&& alt_filename
!= NULL
)
5821 bfd
*alt_bfd
= bfd_openr (alt_filename
, NULL
);
5823 if (alt_bfd
== NULL
)
5824 /* bfd_openr will have set the bfd_error. */
5826 if (!bfd_check_format (alt_bfd
, bfd_object
))
5828 bfd_set_error (bfd_error_wrong_format
);
5829 bfd_close (alt_bfd
);
5833 stash
->alt
.bfd_ptr
= alt_bfd
;
5836 do_line
= symbol
!= NULL
;
5839 BFD_ASSERT (section
== NULL
&& offset
== 0 && functionname_ptr
== NULL
);
5840 section
= bfd_asymbol_section (symbol
);
5841 addr
= symbol
->value
;
5845 BFD_ASSERT (section
!= NULL
&& functionname_ptr
!= NULL
);
5848 /* If we have no SYMBOL but the section we're looking at is not a
5849 code section, then take a look through the list of symbols to see
5850 if we have a symbol at the address we're looking for. If we do
5851 then use this to look up line information. This will allow us to
5852 give file and line results for data symbols. We exclude code
5853 symbols here, if we look up a function symbol and then look up the
5854 line information we'll actually return the line number for the
5855 opening '{' rather than the function definition line. This is
5856 because looking up by symbol uses the line table, in which the
5857 first line for a function is usually the opening '{', while
5858 looking up the function by section + offset uses the
5859 DW_AT_decl_line from the function DW_TAG_subprogram for the line,
5860 which will be the line of the function name. */
5861 if (symbols
!= NULL
&& (section
->flags
& SEC_CODE
) == 0)
5865 for (tmp
= symbols
; (*tmp
) != NULL
; ++tmp
)
5866 if ((*tmp
)->the_bfd
== abfd
5867 && (*tmp
)->section
== section
5868 && (*tmp
)->value
== offset
5869 && ((*tmp
)->flags
& BSF_SECTION_SYM
) == 0)
5873 /* For local symbols, keep going in the hope we find a
5875 if ((symbol
->flags
& BSF_GLOBAL
) != 0)
5881 if (section
->output_section
)
5882 addr
+= section
->output_section
->vma
+ section
->output_offset
;
5884 addr
+= section
->vma
;
5886 /* A null info_ptr indicates that there is no dwarf2 info
5887 (or that an error occured while setting up the stash). */
5888 if (! stash
->f
.info_ptr
)
5891 stash
->inliner_chain
= NULL
;
5893 /* Check the previously read comp. units first. */
5896 /* The info hash tables use quite a bit of memory. We may not want to
5897 always use them. We use some heuristics to decide if and when to
5899 if (stash
->info_hash_status
== STASH_INFO_HASH_OFF
)
5900 stash_maybe_enable_info_hash_tables (abfd
, stash
);
5902 /* Keep info hash table up to date if they are available. Note that we
5903 may disable the hash tables if there is any error duing update. */
5904 if (stash
->info_hash_status
== STASH_INFO_HASH_ON
)
5905 stash_maybe_update_info_hash_tables (stash
);
5907 if (stash
->info_hash_status
== STASH_INFO_HASH_ON
)
5909 found
= stash_find_line_fast (stash
, symbol
, addr
,
5910 filename_ptr
, linenumber_ptr
);
5915 /* Check the previously read comp. units first. */
5916 for (each
= stash
->f
.all_comp_units
; each
; each
= each
->next_unit
)
5917 if ((symbol
->flags
& BSF_FUNCTION
) == 0
5918 || comp_unit_may_contain_address (each
, addr
))
5920 found
= comp_unit_find_line (each
, symbol
, addr
, filename_ptr
,
5928 struct trie_node
*trie
= stash
->f
.trie_root
;
5929 unsigned int bits
= VMA_BITS
- 8;
5930 struct comp_unit
**prev_each
;
5932 /* Traverse interior nodes until we get to a leaf. */
5933 while (trie
&& trie
->num_room_in_leaf
== 0)
5935 int ch
= (addr
>> bits
) & 0xff;
5936 trie
= ((struct trie_interior
*) trie
)->children
[ch
];
5942 const struct trie_leaf
*leaf
= (struct trie_leaf
*) trie
;
5945 for (i
= 0; i
< leaf
->num_stored_in_leaf
; ++i
)
5946 leaf
->ranges
[i
].unit
->mark
= false;
5948 for (i
= 0; i
< leaf
->num_stored_in_leaf
; ++i
)
5950 struct comp_unit
*unit
= leaf
->ranges
[i
].unit
;
5952 || addr
< leaf
->ranges
[i
].low_pc
5953 || addr
>= leaf
->ranges
[i
].high_pc
)
5957 found
= comp_unit_find_nearest_line (unit
, addr
,
5967 /* Also scan through all compilation units without any ranges,
5968 taking them out of the list if they have acquired any since
5970 prev_each
= &stash
->f
.all_comp_units_without_ranges
;
5971 for (each
= *prev_each
; each
; each
= each
->next_unit_without_ranges
)
5973 if (each
->arange
.high
!= 0)
5975 *prev_each
= each
->next_unit_without_ranges
;
5979 found
= comp_unit_find_nearest_line (each
, addr
,
5986 prev_each
= &each
->next_unit_without_ranges
;
5990 /* Read each remaining comp. units checking each as they are read. */
5991 while ((each
= stash_comp_unit (stash
, &stash
->f
)) != NULL
)
5993 /* DW_AT_low_pc and DW_AT_high_pc are optional for
5994 compilation units. If we don't have them (i.e.,
5995 unit->high == 0), we need to consult the line info table
5996 to see if a compilation unit contains the given
5999 found
= (((symbol
->flags
& BSF_FUNCTION
) == 0
6000 || comp_unit_may_contain_address (each
, addr
))
6001 && comp_unit_find_line (each
, symbol
, addr
,
6002 filename_ptr
, linenumber_ptr
));
6004 found
= (comp_unit_may_contain_address (each
, addr
)
6005 && comp_unit_find_nearest_line (each
, addr
,
6009 discriminator_ptr
));
6016 if (functionname_ptr
&& function
&& function
->is_linkage
)
6018 *functionname_ptr
= function
->name
;
6022 else if (functionname_ptr
6023 && (!*functionname_ptr
6024 || (function
&& !function
->is_linkage
)))
6027 asymbol
**syms
= symbols
;
6028 asection
*sec
= section
;
6030 _bfd_dwarf2_stash_syms (stash
, abfd
, &sec
, &syms
);
6031 fun
= _bfd_elf_find_function (abfd
, syms
, sec
, offset
,
6032 *filename_ptr
? NULL
: filename_ptr
,
6035 if (!found
&& fun
!= NULL
)
6038 if (function
&& !function
->is_linkage
)
6042 sec_vma
= section
->vma
;
6043 if (section
->output_section
!= NULL
)
6044 sec_vma
= section
->output_section
->vma
+ section
->output_offset
;
6046 *functionname_ptr
= function
->name
;
6047 else if (fun
->value
+ sec_vma
== function
->arange
.low
)
6048 function
->name
= *functionname_ptr
;
6049 /* Even if we didn't find a linkage name, say that we have
6050 to stop a repeated search of symbols. */
6051 function
->is_linkage
= true;
6055 unset_sections (stash
);
6061 _bfd_dwarf2_find_inliner_info (bfd
*abfd ATTRIBUTE_UNUSED
,
6062 const char **filename_ptr
,
6063 const char **functionname_ptr
,
6064 unsigned int *linenumber_ptr
,
6067 struct dwarf2_debug
*stash
;
6069 stash
= (struct dwarf2_debug
*) *pinfo
;
6072 struct funcinfo
*func
= stash
->inliner_chain
;
6074 if (func
&& func
->caller_func
)
6076 *filename_ptr
= func
->caller_file
;
6077 *functionname_ptr
= func
->caller_func
->name
;
6078 *linenumber_ptr
= func
->caller_line
;
6079 stash
->inliner_chain
= func
->caller_func
;
6088 _bfd_dwarf2_cleanup_debug_info (bfd
*abfd
, void **pinfo
)
6090 struct dwarf2_debug
*stash
= (struct dwarf2_debug
*) *pinfo
;
6091 struct comp_unit
*each
;
6092 struct dwarf2_debug_file
*file
;
6094 if (abfd
== NULL
|| stash
== NULL
)
6097 if (stash
->varinfo_hash_table
)
6098 bfd_hash_table_free (&stash
->varinfo_hash_table
->base
);
6099 if (stash
->funcinfo_hash_table
)
6100 bfd_hash_table_free (&stash
->funcinfo_hash_table
->base
);
6105 for (each
= file
->all_comp_units
; each
; each
= each
->next_unit
)
6107 struct funcinfo
*function_table
= each
->function_table
;
6108 struct varinfo
*variable_table
= each
->variable_table
;
6110 if (each
->line_table
&& each
->line_table
!= file
->line_table
)
6112 free (each
->line_table
->files
);
6113 free (each
->line_table
->dirs
);
6116 free (each
->lookup_funcinfo_table
);
6117 each
->lookup_funcinfo_table
= NULL
;
6119 while (function_table
)
6121 free (function_table
->file
);
6122 function_table
->file
= NULL
;
6123 free (function_table
->caller_file
);
6124 function_table
->caller_file
= NULL
;
6125 function_table
= function_table
->prev_func
;
6128 while (variable_table
)
6130 free (variable_table
->file
);
6131 variable_table
->file
= NULL
;
6132 variable_table
= variable_table
->prev_var
;
6136 if (file
->line_table
)
6138 free (file
->line_table
->files
);
6139 free (file
->line_table
->dirs
);
6141 htab_delete (file
->abbrev_offsets
);
6142 if (file
->comp_unit_tree
!= NULL
)
6143 splay_tree_delete (file
->comp_unit_tree
);
6145 free (file
->dwarf_line_str_buffer
);
6146 free (file
->dwarf_str_buffer
);
6147 free (file
->dwarf_ranges_buffer
);
6148 free (file
->dwarf_rnglists_buffer
);
6149 free (file
->dwarf_line_buffer
);
6150 free (file
->dwarf_abbrev_buffer
);
6151 free (file
->dwarf_info_buffer
);
6152 if (file
== &stash
->alt
)
6156 free (stash
->sec_vma
);
6157 free (stash
->adjusted_sections
);
6158 if (stash
->close_on_cleanup
)
6159 bfd_close (stash
->f
.bfd_ptr
);
6160 if (stash
->alt
.bfd_ptr
)
6161 bfd_close (stash
->alt
.bfd_ptr
);
6164 typedef struct elf_find_function_cache
6166 asection
* last_section
;
6168 const char * filename
;
6169 bfd_size_type code_size
;
6172 } elf_find_function_cache
;
6175 /* Returns TRUE if symbol SYM with address CODE_OFF and size CODE_SIZE
6176 is a better fit to match OFFSET than whatever is currenly stored in
6180 better_fit (elf_find_function_cache
* cache
,
6183 bfd_size_type code_size
,
6186 /* If the symbol is beyond the desired offset, ignore it. */
6187 if (code_off
> offset
)
6190 /* If the symbol is further away from the desired
6191 offset than our current best, then ignore it. */
6192 if (code_off
< cache
->code_off
)
6195 /* On the other hand, if it is closer, then use it. */
6196 if (code_off
> cache
->code_off
)
6199 /* assert (code_off == cache->code_off); */
6201 /* If our current best fit does not actually reach the desired
6203 if (cache
->code_off
+ cache
->code_size
<= offset
)
6204 /* ... then return whichever candidate covers
6205 more area and hence gets closer to OFFSET. */
6206 return code_size
> cache
->code_size
;
6208 /* The current cache'd symbol covers OFFSET. */
6210 /* If the new symbol does not cover the desired offset then skip it. */
6211 if (code_off
+ code_size
<= offset
)
6214 /* Both symbols cover OFFSET. */
6216 /* Prefer functions over non-functions. */
6217 flagword cache_flags
= cache
->func
->flags
;
6218 flagword sym_flags
= sym
->flags
;
6220 if ((cache_flags
& BSF_FUNCTION
) && ((sym_flags
& BSF_FUNCTION
) == 0))
6222 if ((sym_flags
& BSF_FUNCTION
) && ((cache_flags
& BSF_FUNCTION
) == 0))
6225 /* FIXME: Should we choose LOCAL over GLOBAL ? */
6227 /* Prefer typed symbols over notyped. */
6228 int cache_type
= ELF_ST_TYPE (((elf_symbol_type
*) cache
->func
)->internal_elf_sym
.st_info
);
6229 int sym_type
= ELF_ST_TYPE (((elf_symbol_type
*) sym
)->internal_elf_sym
.st_info
);
6231 if (cache_type
== STT_NOTYPE
&& sym_type
!= STT_NOTYPE
)
6233 if (cache_type
!= STT_NOTYPE
&& sym_type
== STT_NOTYPE
)
6236 /* Otherwise choose whichever symbol covers a smaller area. */
6237 return code_size
< cache
->code_size
;
6240 /* Find the function to a particular section and offset,
6241 for error reporting. */
6244 _bfd_elf_find_function (bfd
*abfd
,
6248 const char **filename_ptr
,
6249 const char **functionname_ptr
)
6251 if (symbols
== NULL
)
6254 if (bfd_get_flavour (abfd
) != bfd_target_elf_flavour
)
6257 elf_find_function_cache
* cache
= elf_tdata (abfd
)->elf_find_function_cache
;
6261 cache
= bfd_zalloc (abfd
, sizeof (*cache
));
6262 elf_tdata (abfd
)->elf_find_function_cache
= cache
;
6267 if (cache
->last_section
!= section
6268 || cache
->func
== NULL
6269 || offset
< cache
->func
->value
6270 || offset
>= cache
->func
->value
+ cache
->code_size
)
6274 /* ??? Given multiple file symbols, it is impossible to reliably
6275 choose the right file name for global symbols. File symbols are
6276 local symbols, and thus all file symbols must sort before any
6277 global symbols. The ELF spec may be interpreted to say that a
6278 file symbol must sort before other local symbols, but currently
6279 ld -r doesn't do this. So, for ld -r output, it is possible to
6280 make a better choice of file name for local symbols by ignoring
6281 file symbols appearing after a given local symbol. */
6282 enum { nothing_seen
, symbol_seen
, file_after_symbol_seen
} state
;
6283 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
6286 state
= nothing_seen
;
6287 cache
->filename
= NULL
;
6289 cache
->code_size
= 0;
6290 cache
->code_off
= 0;
6291 cache
->last_section
= section
;
6293 for (p
= symbols
; *p
!= NULL
; p
++)
6299 if ((sym
->flags
& BSF_FILE
) != 0)
6302 if (state
== symbol_seen
)
6303 state
= file_after_symbol_seen
;
6307 if (state
== nothing_seen
)
6308 state
= symbol_seen
;
6310 size
= bed
->maybe_function_sym (sym
, section
, &code_off
);
6315 if (better_fit (cache
, sym
, code_off
, size
, offset
))
6318 cache
->code_size
= size
;
6319 cache
->code_off
= code_off
;
6320 cache
->filename
= NULL
;
6323 && ((sym
->flags
& BSF_LOCAL
) != 0
6324 || state
!= file_after_symbol_seen
))
6325 cache
->filename
= bfd_asymbol_name (file
);
6327 /* Otherwise, if the symbol is beyond the desired offset but it
6328 lies within the bounds of the current best match then reduce
6329 the size of the current best match so that future searches
6330 will not not used the cached symbol by mistake. */
6331 else if (code_off
> offset
6332 && code_off
> cache
->code_off
6333 && code_off
< cache
->code_off
+ cache
->code_size
)
6335 cache
->code_size
= code_off
- cache
->code_off
;
6340 if (cache
->func
== NULL
)
6344 *filename_ptr
= cache
->filename
;
6345 if (functionname_ptr
)
6346 *functionname_ptr
= bfd_asymbol_name (cache
->func
);