2 Copyright (C) 1994-2025 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 /* If the most recent call to bfd_find_nearest_line was given an
296 address in an inlined function, preserve a pointer into the
297 calling chain for subsequent calls to bfd_find_inliner_info to
299 struct funcinfo
*inliner_chain
;
301 /* Section VMAs at the time the stash was built. */
303 /* Number of sections in the SEC_VMA table. */
304 unsigned int sec_vma_count
;
306 /* Number of sections whose VMA we must adjust. */
307 int adjusted_section_count
;
309 /* Array of sections with adjusted VMA. */
310 struct adjusted_section
*adjusted_sections
;
312 /* Used to validate the cached debug data. */
313 unsigned int orig_bfd_id
;
315 /* Number of times find_line is called. This is used in
316 the heuristic for enabling the info hash tables. */
319 #define STASH_INFO_HASH_TRIGGER 100
321 /* Hash table mapping symbol names to function infos. */
322 struct info_hash_table
*funcinfo_hash_table
;
324 /* Hash table mapping symbol names to variable infos. */
325 struct info_hash_table
*varinfo_hash_table
;
327 /* Head of comp_unit list in the last hash table update. */
328 struct comp_unit
*hash_units_head
;
330 /* Status of info hash. */
331 int info_hash_status
;
332 #define STASH_INFO_HASH_OFF 0
333 #define STASH_INFO_HASH_ON 1
334 #define STASH_INFO_HASH_DISABLED 2
336 /* True if we opened bfd_ptr. */
337 bool close_on_cleanup
;
347 /* A minimal decoding of DWARF2 compilation units. We only decode
348 what's needed to get to the line number information. */
352 /* Chain the previously read compilation units. */
353 struct comp_unit
*next_unit
;
355 /* Chain the previously read compilation units that have no ranges yet.
356 We scan these separately when we have a trie over the ranges.
357 Unused if arange.high != 0. */
358 struct comp_unit
*next_unit_without_ranges
;
360 /* Likewise, chain the compilation unit read after this one.
361 The comp units are stored in reversed reading order. */
362 struct comp_unit
*prev_unit
;
364 /* Keep the bfd convenient (for memory allocation). */
367 /* The lowest and highest addresses contained in this compilation
368 unit as specified in the compilation unit header. */
369 struct arange arange
;
371 /* The DW_AT_name attribute (for error messages). */
374 /* The abbrev hash table. */
375 struct abbrev_info
**abbrevs
;
377 /* DW_AT_language. */
380 /* Note that an error was found by comp_unit_find_nearest_line. */
383 /* The DW_AT_comp_dir attribute. */
386 /* TRUE if there is a line number table associated with this comp. unit. */
389 /* Pointer to the current comp_unit so that we can find a given entry
391 bfd_byte
*info_ptr_unit
;
393 /* The offset into .debug_line of the line number table. */
394 unsigned long line_offset
;
396 /* Pointer to the first child die for the comp unit. */
397 bfd_byte
*first_child_die_ptr
;
399 /* The end of the comp unit. */
402 /* The decoded line number, NULL if not yet decoded. */
403 struct line_info_table
*line_table
;
405 /* A list of the functions found in this comp. unit. */
406 struct funcinfo
*function_table
;
408 /* A table of function information references searchable by address. */
409 struct lookup_funcinfo
*lookup_funcinfo_table
;
411 /* Number of functions in the function_table and sorted_function_table. */
412 bfd_size_type number_of_functions
;
414 /* A list of the variables found in this comp. unit. */
415 struct varinfo
*variable_table
;
417 /* Pointers to dwarf2_debug structures. */
418 struct dwarf2_debug
*stash
;
419 struct dwarf2_debug_file
*file
;
421 /* DWARF format version for this unit - from unit header. */
424 /* Address size for this unit - from unit header. */
425 unsigned char addr_size
;
427 /* Offset size for this unit - from unit header. */
428 unsigned char offset_size
;
430 /* Base address for this unit - from DW_AT_low_pc attribute of
431 DW_TAG_compile_unit DIE */
432 bfd_vma base_address
;
434 /* TRUE if symbols are cached in hash table for faster lookup by name. */
437 /* Used when iterating over trie leaves to know which units we have
438 already seen in this iteration. */
441 /* Base address of debug_addr section. */
442 size_t dwarf_addr_offset
;
444 /* Base address of string offset table. */
445 size_t dwarf_str_offset
;
448 /* This data structure holds the information of an abbrev. */
451 unsigned int number
; /* Number identifying abbrev. */
452 enum dwarf_tag tag
; /* DWARF tag. */
453 bool has_children
; /* TRUE if the abbrev has children. */
454 unsigned int num_attrs
; /* Number of attributes. */
455 struct attr_abbrev
* attrs
; /* An array of attribute descriptions. */
456 struct abbrev_info
* next
; /* Next in chain. */
461 enum dwarf_attribute name
;
462 enum dwarf_form form
;
463 bfd_vma implicit_const
;
466 /* Map of uncompressed DWARF debug section name to compressed one. It
467 is terminated by NULL uncompressed_name. */
469 const struct dwarf_debug_section dwarf_debug_sections
[] =
471 { ".debug_abbrev", ".zdebug_abbrev" },
472 { ".debug_aranges", ".zdebug_aranges" },
473 { ".debug_frame", ".zdebug_frame" },
474 { ".debug_info", ".zdebug_info" },
475 { ".debug_info", ".zdebug_info" },
476 { ".debug_line", ".zdebug_line" },
477 { ".debug_loc", ".zdebug_loc" },
478 { ".debug_macinfo", ".zdebug_macinfo" },
479 { ".debug_macro", ".zdebug_macro" },
480 { ".debug_pubnames", ".zdebug_pubnames" },
481 { ".debug_pubtypes", ".zdebug_pubtypes" },
482 { ".debug_ranges", ".zdebug_ranges" },
483 { ".debug_rnglists", ".zdebug_rnglist" },
484 { ".debug_static_func", ".zdebug_static_func" },
485 { ".debug_static_vars", ".zdebug_static_vars" },
486 { ".debug_str", ".zdebug_str", },
487 { ".debug_str", ".zdebug_str", },
488 { ".debug_str_offsets", ".zdebug_str_offsets", },
489 { ".debug_addr", ".zdebug_addr", },
490 { ".debug_line_str", ".zdebug_line_str", },
491 { ".debug_types", ".zdebug_types" },
492 /* GNU DWARF 1 extensions */
493 { ".debug_sfnames", ".zdebug_sfnames" },
494 { ".debug_srcinfo", ".zebug_srcinfo" },
495 /* SGI/MIPS DWARF 2 extensions */
496 { ".debug_funcnames", ".zdebug_funcnames" },
497 { ".debug_typenames", ".zdebug_typenames" },
498 { ".debug_varnames", ".zdebug_varnames" },
499 { ".debug_weaknames", ".zdebug_weaknames" },
503 /* NB/ Numbers in this enum must match up with indices
504 into the dwarf_debug_sections[] array above. */
505 enum dwarf_debug_section_enum
537 /* A static assertion. */
538 extern int dwarf_debug_section_assert
[ARRAY_SIZE (dwarf_debug_sections
)
539 == debug_max
+ 1 ? 1 : -1];
541 #ifndef ABBREV_HASH_SIZE
542 #define ABBREV_HASH_SIZE 121
544 #ifndef ATTR_ALLOC_CHUNK
545 #define ATTR_ALLOC_CHUNK 4
548 /* Variable and function hash tables. This is used to speed up look-up
549 in lookup_symbol_in_var_table() and lookup_symbol_in_function_table().
550 In order to share code between variable and function infos, we use
551 a list of untyped pointer for all variable/function info associated with
552 a symbol. We waste a bit of memory for list with one node but that
553 simplifies the code. */
555 struct info_list_node
557 struct info_list_node
*next
;
561 /* Info hash entry. */
562 struct info_hash_entry
564 struct bfd_hash_entry root
;
565 struct info_list_node
*head
;
568 struct info_hash_table
570 struct bfd_hash_table base
;
573 /* Function to create a new entry in info hash table. */
575 static struct bfd_hash_entry
*
576 info_hash_table_newfunc (struct bfd_hash_entry
*entry
,
577 struct bfd_hash_table
*table
,
580 struct info_hash_entry
*ret
= (struct info_hash_entry
*) entry
;
582 /* Allocate the structure if it has not already been allocated by a
586 ret
= (struct info_hash_entry
*) bfd_hash_allocate (table
,
592 /* Call the allocation method of the base class. */
593 ret
= ((struct info_hash_entry
*)
594 bfd_hash_newfunc ((struct bfd_hash_entry
*) ret
, table
, string
));
596 /* Initialize the local fields here. */
600 return (struct bfd_hash_entry
*) ret
;
603 /* Function to create a new info hash table. It returns a pointer to the
604 newly created table or NULL if there is any error. We need abfd
605 solely for memory allocation. */
607 static struct info_hash_table
*
608 create_info_hash_table (bfd
*abfd
)
610 struct info_hash_table
*hash_table
;
612 hash_table
= ((struct info_hash_table
*)
613 bfd_alloc (abfd
, sizeof (struct info_hash_table
)));
617 if (!bfd_hash_table_init (&hash_table
->base
, info_hash_table_newfunc
,
618 sizeof (struct info_hash_entry
)))
620 bfd_release (abfd
, hash_table
);
627 /* Insert an info entry into an info hash table. We do not check of
628 duplicate entries. Also, the caller need to guarantee that the
629 right type of info in inserted as info is passed as a void* pointer.
630 This function returns true if there is no error. */
633 insert_info_hash_table (struct info_hash_table
*hash_table
,
638 struct info_hash_entry
*entry
;
639 struct info_list_node
*node
;
641 entry
= (struct info_hash_entry
*) bfd_hash_lookup (&hash_table
->base
,
646 node
= (struct info_list_node
*) bfd_hash_allocate (&hash_table
->base
,
652 node
->next
= entry
->head
;
658 /* Look up an info entry list from an info hash table. Return NULL
661 static struct info_list_node
*
662 lookup_info_hash_table (struct info_hash_table
*hash_table
, const char *key
)
664 struct info_hash_entry
*entry
;
666 entry
= (struct info_hash_entry
*) bfd_hash_lookup (&hash_table
->base
, key
,
668 return entry
? entry
->head
: NULL
;
671 /* Read a section into its appropriate place in the dwarf2_debug
672 struct (indicated by SECTION_BUFFER and SECTION_SIZE). If SYMS is
673 not NULL, use bfd_simple_get_relocated_section_contents to read the
674 section contents, otherwise use bfd_get_section_contents. Fail if
675 the located section does not contain at least OFFSET bytes. */
678 read_section (bfd
*abfd
,
679 const struct dwarf_debug_section
*sec
,
682 bfd_byte
**section_buffer
,
683 bfd_size_type
*section_size
)
685 const char *section_name
= sec
->uncompressed_name
;
686 bfd_byte
*contents
= *section_buffer
;
688 /* The section may have already been read. */
689 if (contents
== NULL
)
694 msec
= bfd_get_section_by_name (abfd
, section_name
);
697 section_name
= sec
->compressed_name
;
698 msec
= bfd_get_section_by_name (abfd
, section_name
);
702 _bfd_error_handler (_("DWARF error: can't find %s section."),
703 sec
->uncompressed_name
);
704 bfd_set_error (bfd_error_bad_value
);
708 if ((msec
->flags
& SEC_HAS_CONTENTS
) == 0)
710 _bfd_error_handler (_("DWARF error: section %s has no contents"),
712 bfd_set_error (bfd_error_no_contents
);
716 if (bfd_section_size_insane (abfd
, msec
))
719 _bfd_error_handler (_("DWARF error: section %s is too big"),
723 amt
= bfd_get_section_limit_octets (abfd
, msec
);
725 /* Paranoia - alloc one extra so that we can make sure a string
726 section is NUL terminated. */
730 /* Paranoia - this should never happen. */
731 bfd_set_error (bfd_error_no_memory
);
734 contents
= (bfd_byte
*) bfd_malloc (amt
);
735 if (contents
== NULL
)
738 ? !bfd_simple_get_relocated_section_contents (abfd
, msec
, contents
,
740 : !bfd_get_section_contents (abfd
, msec
, contents
, 0, *section_size
))
745 contents
[*section_size
] = 0;
746 *section_buffer
= contents
;
749 /* It is possible to get a bad value for the offset into the section
750 that the client wants. Validate it here to avoid trouble later. */
751 if (offset
!= 0 && offset
>= *section_size
)
753 /* xgettext: c-format */
754 _bfd_error_handler (_("DWARF error: offset (%" PRIu64
")"
755 " greater than or equal to %s size (%" PRIu64
")"),
756 (uint64_t) offset
, section_name
,
757 (uint64_t) *section_size
);
758 bfd_set_error (bfd_error_bad_value
);
765 /* Read dwarf information from a buffer. */
767 static inline uint64_t
768 read_n_bytes (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
, int n
)
770 bfd_byte
*buf
= *ptr
;
777 return bfd_get (n
* 8, abfd
, buf
);
781 read_1_byte (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
)
783 return read_n_bytes (abfd
, ptr
, end
, 1);
787 read_1_signed_byte (bfd
*abfd ATTRIBUTE_UNUSED
, bfd_byte
**ptr
, bfd_byte
*end
)
789 bfd_byte
*buf
= *ptr
;
796 return bfd_get_signed_8 (abfd
, buf
);
800 read_2_bytes (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
)
802 return read_n_bytes (abfd
, ptr
, end
, 2);
806 read_3_bytes (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
)
808 unsigned int val
= read_1_byte (abfd
, ptr
, end
);
810 val
|= read_1_byte (abfd
, ptr
, end
);
812 val
|= read_1_byte (abfd
, ptr
, end
);
813 if (bfd_little_endian (abfd
))
814 val
= (((val
>> 16) & 0xff)
816 | ((val
& 0xff) << 16));
821 read_4_bytes (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
)
823 return read_n_bytes (abfd
, ptr
, end
, 4);
827 read_8_bytes (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
)
829 return read_n_bytes (abfd
, ptr
, end
, 8);
832 static struct dwarf_block
*
833 read_blk (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
, size_t size
)
835 bfd_byte
*buf
= *ptr
;
836 struct dwarf_block
*block
;
838 block
= (struct dwarf_block
*) bfd_alloc (abfd
, sizeof (*block
));
842 if (size
> (size_t) (end
- buf
))
857 /* Scans a NUL terminated string starting at *PTR, returning a pointer to it.
858 Bytes at or beyond BUF_END will not be read. Returns NULL if the
859 terminator is not found or if the string is empty. *PTR is
860 incremented over the bytes scanned, including the terminator. */
863 read_string (bfd_byte
**ptr
,
866 bfd_byte
*buf
= *ptr
;
869 while (buf
< buf_end
)
882 /* Reads an offset from *PTR and then locates the string at this offset
883 inside the debug string section. Returns a pointer to the string.
884 Increments *PTR by the number of bytes read for the offset. This
885 value is set even if the function fails. Bytes at or beyond
886 BUF_END will not be read. Returns NULL if there was a problem, or
887 if the string is empty. Does not check for NUL termination of the
891 read_indirect_string (struct comp_unit
*unit
,
896 struct dwarf2_debug
*stash
= unit
->stash
;
897 struct dwarf2_debug_file
*file
= unit
->file
;
900 if (unit
->offset_size
> (size_t) (buf_end
- *ptr
))
906 if (unit
->offset_size
== 4)
907 offset
= read_4_bytes (unit
->abfd
, ptr
, buf_end
);
909 offset
= read_8_bytes (unit
->abfd
, ptr
, buf_end
);
911 if (! read_section (unit
->abfd
, &stash
->debug_sections
[debug_str
],
913 &file
->dwarf_str_buffer
, &file
->dwarf_str_size
))
916 str
= (char *) file
->dwarf_str_buffer
+ offset
;
922 /* Like read_indirect_string but from .debug_line_str section. */
925 read_indirect_line_string (struct comp_unit
*unit
,
930 struct dwarf2_debug
*stash
= unit
->stash
;
931 struct dwarf2_debug_file
*file
= unit
->file
;
934 if (unit
->offset_size
> (size_t) (buf_end
- *ptr
))
940 if (unit
->offset_size
== 4)
941 offset
= read_4_bytes (unit
->abfd
, ptr
, buf_end
);
943 offset
= read_8_bytes (unit
->abfd
, ptr
, buf_end
);
945 if (! read_section (unit
->abfd
, &stash
->debug_sections
[debug_line_str
],
947 &file
->dwarf_line_str_buffer
,
948 &file
->dwarf_line_str_size
))
951 str
= (char *) file
->dwarf_line_str_buffer
+ offset
;
957 /* Like read_indirect_string but uses a .debug_str located in
958 an alternate file pointed to by the .gnu_debugaltlink section.
959 Used to impement DW_FORM_GNU_strp_alt. */
962 read_alt_indirect_string (struct comp_unit
*unit
,
967 struct dwarf2_debug
*stash
= unit
->stash
;
970 if (unit
->offset_size
> (size_t) (buf_end
- *ptr
))
976 if (unit
->offset_size
== 4)
977 offset
= read_4_bytes (unit
->abfd
, ptr
, buf_end
);
979 offset
= read_8_bytes (unit
->abfd
, ptr
, buf_end
);
981 if (stash
->alt
.bfd_ptr
== NULL
)
984 char *debug_filename
= bfd_follow_gnu_debugaltlink (unit
->abfd
, DEBUGDIR
);
986 if (debug_filename
== NULL
)
989 debug_bfd
= bfd_openr (debug_filename
, NULL
);
990 free (debug_filename
);
991 if (debug_bfd
== NULL
)
992 /* FIXME: Should we report our failure to follow the debuglink ? */
995 if (!bfd_check_format (debug_bfd
, bfd_object
))
997 bfd_close (debug_bfd
);
1000 stash
->alt
.bfd_ptr
= debug_bfd
;
1003 if (! read_section (unit
->stash
->alt
.bfd_ptr
,
1004 stash
->debug_sections
+ debug_str_alt
,
1005 stash
->alt
.syms
, offset
,
1006 &stash
->alt
.dwarf_str_buffer
,
1007 &stash
->alt
.dwarf_str_size
))
1010 str
= (char *) stash
->alt
.dwarf_str_buffer
+ offset
;
1017 /* Resolve an alternate reference from UNIT at OFFSET.
1018 Returns a pointer into the loaded alternate CU upon success
1019 or NULL upon failure. */
1022 read_alt_indirect_ref (struct comp_unit
*unit
, uint64_t offset
)
1024 struct dwarf2_debug
*stash
= unit
->stash
;
1026 if (stash
->alt
.bfd_ptr
== NULL
)
1029 char *debug_filename
= bfd_follow_gnu_debugaltlink (unit
->abfd
, DEBUGDIR
);
1031 if (debug_filename
== NULL
)
1034 debug_bfd
= bfd_openr (debug_filename
, NULL
);
1035 free (debug_filename
);
1036 if (debug_bfd
== NULL
)
1037 /* FIXME: Should we report our failure to follow the debuglink ? */
1040 if (!bfd_check_format (debug_bfd
, bfd_object
))
1042 bfd_close (debug_bfd
);
1045 stash
->alt
.bfd_ptr
= debug_bfd
;
1048 if (! read_section (unit
->stash
->alt
.bfd_ptr
,
1049 stash
->debug_sections
+ debug_info_alt
,
1050 stash
->alt
.syms
, offset
,
1051 &stash
->alt
.dwarf_info_buffer
,
1052 &stash
->alt
.dwarf_info_size
))
1055 return stash
->alt
.dwarf_info_buffer
+ offset
;
1059 read_address (struct comp_unit
*unit
, bfd_byte
**ptr
, bfd_byte
*buf_end
)
1061 bfd_byte
*buf
= *ptr
;
1064 if (bfd_get_flavour (unit
->abfd
) == bfd_target_elf_flavour
)
1065 signed_vma
= get_elf_backend_data (unit
->abfd
)->sign_extend_vma
;
1067 if (unit
->addr_size
> (size_t) (buf_end
- buf
))
1073 *ptr
= buf
+ unit
->addr_size
;
1076 switch (unit
->addr_size
)
1079 return bfd_get_signed_64 (unit
->abfd
, buf
);
1081 return bfd_get_signed_32 (unit
->abfd
, buf
);
1083 return bfd_get_signed_16 (unit
->abfd
, buf
);
1090 switch (unit
->addr_size
)
1093 return bfd_get_64 (unit
->abfd
, buf
);
1095 return bfd_get_32 (unit
->abfd
, buf
);
1097 return bfd_get_16 (unit
->abfd
, buf
);
1104 /* Lookup an abbrev_info structure in the abbrev hash table. */
1106 static struct abbrev_info
*
1107 lookup_abbrev (unsigned int number
, struct abbrev_info
**abbrevs
)
1109 unsigned int hash_number
;
1110 struct abbrev_info
*abbrev
;
1112 hash_number
= number
% ABBREV_HASH_SIZE
;
1113 abbrev
= abbrevs
[hash_number
];
1117 if (abbrev
->number
== number
)
1120 abbrev
= abbrev
->next
;
1126 /* We keep a hash table to map .debug_abbrev section offsets to the
1127 array of abbrevs, so that compilation units using the same set of
1128 abbrevs do not waste memory. */
1130 struct abbrev_offset_entry
1133 struct abbrev_info
**abbrevs
;
1137 hash_abbrev (const void *p
)
1139 const struct abbrev_offset_entry
*ent
= p
;
1140 return htab_hash_pointer ((void *) ent
->offset
);
1144 eq_abbrev (const void *pa
, const void *pb
)
1146 const struct abbrev_offset_entry
*a
= pa
;
1147 const struct abbrev_offset_entry
*b
= pb
;
1148 return a
->offset
== b
->offset
;
1152 del_abbrev (void *p
)
1154 struct abbrev_offset_entry
*ent
= p
;
1155 struct abbrev_info
**abbrevs
= ent
->abbrevs
;
1158 for (i
= 0; i
< ABBREV_HASH_SIZE
; i
++)
1160 struct abbrev_info
*abbrev
= abbrevs
[i
];
1164 free (abbrev
->attrs
);
1165 abbrev
= abbrev
->next
;
1171 /* In DWARF version 2, the description of the debugging information is
1172 stored in a separate .debug_abbrev section. Before we read any
1173 dies from a section we read in all abbreviations and install them
1176 static struct abbrev_info
**
1177 read_abbrevs (bfd
*abfd
, uint64_t offset
, struct dwarf2_debug
*stash
,
1178 struct dwarf2_debug_file
*file
)
1180 struct abbrev_info
**abbrevs
;
1181 bfd_byte
*abbrev_ptr
;
1182 bfd_byte
*abbrev_end
;
1183 struct abbrev_info
*cur_abbrev
;
1184 unsigned int abbrev_number
, abbrev_name
;
1185 unsigned int abbrev_form
, hash_number
;
1188 struct abbrev_offset_entry ent
= { offset
, NULL
};
1190 if (ent
.offset
!= offset
)
1193 slot
= htab_find_slot (file
->abbrev_offsets
, &ent
, INSERT
);
1197 return ((struct abbrev_offset_entry
*) (*slot
))->abbrevs
;
1199 if (! read_section (abfd
, &stash
->debug_sections
[debug_abbrev
],
1201 &file
->dwarf_abbrev_buffer
,
1202 &file
->dwarf_abbrev_size
))
1205 amt
= sizeof (struct abbrev_info
*) * ABBREV_HASH_SIZE
;
1206 abbrevs
= (struct abbrev_info
**) bfd_zalloc (abfd
, amt
);
1207 if (abbrevs
== NULL
)
1210 abbrev_ptr
= file
->dwarf_abbrev_buffer
+ offset
;
1211 abbrev_end
= file
->dwarf_abbrev_buffer
+ file
->dwarf_abbrev_size
;
1212 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1215 /* Loop until we reach an abbrev number of 0. */
1216 while (abbrev_number
)
1218 amt
= sizeof (struct abbrev_info
);
1219 cur_abbrev
= (struct abbrev_info
*) bfd_zalloc (abfd
, amt
);
1220 if (cur_abbrev
== NULL
)
1223 /* Read in abbrev header. */
1224 cur_abbrev
->number
= abbrev_number
;
1225 cur_abbrev
->tag
= (enum dwarf_tag
)
1226 _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1228 cur_abbrev
->has_children
= read_1_byte (abfd
, &abbrev_ptr
, abbrev_end
);
1230 /* Now read in declarations. */
1233 /* Initialize it just to avoid a GCC false warning. */
1234 bfd_vma implicit_const
= -1;
1236 abbrev_name
= _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1238 abbrev_form
= _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1240 if (abbrev_form
== DW_FORM_implicit_const
)
1241 implicit_const
= _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1243 if (abbrev_name
== 0)
1246 if ((cur_abbrev
->num_attrs
% ATTR_ALLOC_CHUNK
) == 0)
1248 struct attr_abbrev
*tmp
;
1250 amt
= cur_abbrev
->num_attrs
+ ATTR_ALLOC_CHUNK
;
1251 amt
*= sizeof (struct attr_abbrev
);
1252 tmp
= (struct attr_abbrev
*) bfd_realloc (cur_abbrev
->attrs
, amt
);
1255 cur_abbrev
->attrs
= tmp
;
1258 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].name
1259 = (enum dwarf_attribute
) abbrev_name
;
1260 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].form
1261 = (enum dwarf_form
) abbrev_form
;
1262 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].implicit_const
1264 ++cur_abbrev
->num_attrs
;
1267 hash_number
= abbrev_number
% ABBREV_HASH_SIZE
;
1268 cur_abbrev
->next
= abbrevs
[hash_number
];
1269 abbrevs
[hash_number
] = cur_abbrev
;
1271 /* Get next abbreviation.
1272 Under Irix6 the abbreviations for a compilation unit are not
1273 always properly terminated with an abbrev number of 0.
1274 Exit loop if we encounter an abbreviation which we have
1275 already read (which means we are about to read the abbreviations
1276 for the next compile unit) or if the end of the abbreviation
1277 table is reached. */
1278 if ((size_t) (abbrev_ptr
- file
->dwarf_abbrev_buffer
)
1279 >= file
->dwarf_abbrev_size
)
1281 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1283 if (lookup_abbrev (abbrev_number
, abbrevs
) != NULL
)
1287 *slot
= bfd_malloc (sizeof ent
);
1290 ent
.abbrevs
= abbrevs
;
1291 memcpy (*slot
, &ent
, sizeof ent
);
1295 if (abbrevs
!= NULL
)
1299 for (i
= 0; i
< ABBREV_HASH_SIZE
; i
++)
1301 struct abbrev_info
*abbrev
= abbrevs
[i
];
1305 free (abbrev
->attrs
);
1306 abbrev
= abbrev
->next
;
1314 /* Returns true if the form is one which has a string value. */
1317 is_str_form (const struct attribute
*attr
)
1321 case DW_FORM_string
:
1328 case DW_FORM_line_strp
:
1329 case DW_FORM_GNU_strp_alt
:
1337 /* Returns true if the form is one which has an integer value. */
1340 is_int_form (const struct attribute
*attr
)
1352 case DW_FORM_ref_addr
:
1357 case DW_FORM_ref_udata
:
1358 case DW_FORM_sec_offset
:
1359 case DW_FORM_flag_present
:
1360 case DW_FORM_ref_sig8
:
1362 case DW_FORM_implicit_const
:
1363 case DW_FORM_addrx1
:
1364 case DW_FORM_addrx2
:
1365 case DW_FORM_addrx3
:
1366 case DW_FORM_addrx4
:
1367 case DW_FORM_GNU_ref_alt
:
1375 /* Returns true if the form is strx[1-4]. */
1378 is_strx_form (enum dwarf_form form
)
1380 return (form
== DW_FORM_strx
1381 || form
== DW_FORM_strx1
1382 || form
== DW_FORM_strx2
1383 || form
== DW_FORM_strx3
1384 || form
== DW_FORM_strx4
);
1387 /* Return true if the form is addrx[1-4]. */
1390 is_addrx_form (enum dwarf_form form
)
1392 return (form
== DW_FORM_addrx
1393 || form
== DW_FORM_addrx1
1394 || form
== DW_FORM_addrx2
1395 || form
== DW_FORM_addrx3
1396 || form
== DW_FORM_addrx4
);
1399 /* Returns the address in .debug_addr section using DW_AT_addr_base.
1400 Used to implement DW_FORM_addrx*. */
1402 read_indexed_address (uint64_t idx
, struct comp_unit
*unit
)
1404 struct dwarf2_debug
*stash
= unit
->stash
;
1405 struct dwarf2_debug_file
*file
= unit
->file
;
1412 if (!read_section (unit
->abfd
, &stash
->debug_sections
[debug_addr
],
1414 &file
->dwarf_addr_buffer
, &file
->dwarf_addr_size
))
1417 if (_bfd_mul_overflow (idx
, unit
->addr_size
, &offset
))
1420 offset
+= unit
->dwarf_addr_offset
;
1421 if (offset
< unit
->dwarf_addr_offset
1422 || offset
> file
->dwarf_addr_size
1423 || file
->dwarf_addr_size
- offset
< unit
->addr_size
)
1426 info_ptr
= file
->dwarf_addr_buffer
+ offset
;
1428 if (unit
->addr_size
== 4)
1429 return bfd_get_32 (unit
->abfd
, info_ptr
);
1430 else if (unit
->addr_size
== 8)
1431 return bfd_get_64 (unit
->abfd
, info_ptr
);
1436 /* Returns the string using DW_AT_str_offsets_base.
1437 Used to implement DW_FORM_strx*. */
1439 read_indexed_string (uint64_t idx
, struct comp_unit
*unit
)
1441 struct dwarf2_debug
*stash
= unit
->stash
;
1442 struct dwarf2_debug_file
*file
= unit
->file
;
1444 uint64_t str_offset
;
1450 if (!read_section (unit
->abfd
, &stash
->debug_sections
[debug_str
],
1452 &file
->dwarf_str_buffer
, &file
->dwarf_str_size
))
1455 if (!read_section (unit
->abfd
, &stash
->debug_sections
[debug_str_offsets
],
1457 &file
->dwarf_str_offsets_buffer
,
1458 &file
->dwarf_str_offsets_size
))
1461 if (_bfd_mul_overflow (idx
, unit
->offset_size
, &offset
))
1464 offset
+= unit
->dwarf_str_offset
;
1465 if (offset
< unit
->dwarf_str_offset
1466 || offset
> file
->dwarf_str_offsets_size
1467 || file
->dwarf_str_offsets_size
- offset
< unit
->offset_size
)
1470 info_ptr
= file
->dwarf_str_offsets_buffer
+ offset
;
1472 if (unit
->offset_size
== 4)
1473 str_offset
= bfd_get_32 (unit
->abfd
, info_ptr
);
1474 else if (unit
->offset_size
== 8)
1475 str_offset
= bfd_get_64 (unit
->abfd
, info_ptr
);
1479 if (str_offset
>= file
->dwarf_str_size
)
1481 return (const char *) file
->dwarf_str_buffer
+ str_offset
;
1484 /* Read and fill in the value of attribute ATTR as described by FORM.
1485 Read data starting from INFO_PTR, but never at or beyond INFO_PTR_END.
1486 Returns an updated INFO_PTR taking into account the amount of data read. */
1489 read_attribute_value (struct attribute
* attr
,
1491 bfd_vma implicit_const
,
1492 struct comp_unit
* unit
,
1493 bfd_byte
* info_ptr
,
1494 bfd_byte
* info_ptr_end
)
1496 bfd
*abfd
= unit
->abfd
;
1499 if (info_ptr
>= info_ptr_end
&& form
!= DW_FORM_flag_present
)
1501 _bfd_error_handler (_("DWARF error: info pointer extends beyond end of attributes"));
1502 bfd_set_error (bfd_error_bad_value
);
1506 attr
->form
= (enum dwarf_form
) form
;
1510 case DW_FORM_flag_present
:
1513 case DW_FORM_ref_addr
:
1514 /* DW_FORM_ref_addr is an address in DWARF2, and an offset in
1516 if (unit
->version
>= 3)
1518 if (unit
->offset_size
== 4)
1519 attr
->u
.val
= read_4_bytes (unit
->abfd
, &info_ptr
, info_ptr_end
);
1521 attr
->u
.val
= read_8_bytes (unit
->abfd
, &info_ptr
, info_ptr_end
);
1526 attr
->u
.val
= read_address (unit
, &info_ptr
, info_ptr_end
);
1528 case DW_FORM_GNU_ref_alt
:
1529 case DW_FORM_sec_offset
:
1530 if (unit
->offset_size
== 4)
1531 attr
->u
.val
= read_4_bytes (unit
->abfd
, &info_ptr
, info_ptr_end
);
1533 attr
->u
.val
= read_8_bytes (unit
->abfd
, &info_ptr
, info_ptr_end
);
1535 case DW_FORM_block2
:
1536 amt
= read_2_bytes (abfd
, &info_ptr
, info_ptr_end
);
1537 attr
->u
.blk
= read_blk (abfd
, &info_ptr
, info_ptr_end
, amt
);
1538 if (attr
->u
.blk
== NULL
)
1541 case DW_FORM_block4
:
1542 amt
= read_4_bytes (abfd
, &info_ptr
, info_ptr_end
);
1543 attr
->u
.blk
= read_blk (abfd
, &info_ptr
, info_ptr_end
, amt
);
1544 if (attr
->u
.blk
== NULL
)
1550 attr
->u
.val
= read_1_byte (abfd
, &info_ptr
, info_ptr_end
);
1552 case DW_FORM_addrx1
:
1553 attr
->u
.val
= read_1_byte (abfd
, &info_ptr
, info_ptr_end
);
1554 /* dwarf_addr_offset value 0 indicates the attribute DW_AT_addr_base
1556 if (unit
->dwarf_addr_offset
!= 0)
1557 attr
->u
.val
= read_indexed_address (attr
->u
.val
, unit
);
1561 attr
->u
.val
= read_2_bytes (abfd
, &info_ptr
, info_ptr_end
);
1563 case DW_FORM_addrx2
:
1564 attr
->u
.val
= read_2_bytes (abfd
, &info_ptr
, info_ptr_end
);
1565 if (unit
->dwarf_addr_offset
!= 0)
1566 attr
->u
.val
= read_indexed_address (attr
->u
.val
, unit
);
1568 case DW_FORM_addrx3
:
1569 attr
->u
.val
= read_3_bytes (abfd
, &info_ptr
, info_ptr_end
);
1570 if (unit
->dwarf_addr_offset
!= 0)
1571 attr
->u
.val
= read_indexed_address(attr
->u
.val
, unit
);
1575 attr
->u
.val
= read_4_bytes (abfd
, &info_ptr
, info_ptr_end
);
1577 case DW_FORM_addrx4
:
1578 attr
->u
.val
= read_4_bytes (abfd
, &info_ptr
, info_ptr_end
);
1579 if (unit
->dwarf_addr_offset
!= 0)
1580 attr
->u
.val
= read_indexed_address (attr
->u
.val
, unit
);
1584 case DW_FORM_ref_sig8
:
1585 attr
->u
.val
= read_8_bytes (abfd
, &info_ptr
, info_ptr_end
);
1587 case DW_FORM_string
:
1588 attr
->u
.str
= read_string (&info_ptr
, info_ptr_end
);
1591 attr
->u
.str
= read_indirect_string (unit
, &info_ptr
, info_ptr_end
);
1593 case DW_FORM_line_strp
:
1594 attr
->u
.str
= read_indirect_line_string (unit
, &info_ptr
, info_ptr_end
);
1596 case DW_FORM_GNU_strp_alt
:
1597 attr
->u
.str
= read_alt_indirect_string (unit
, &info_ptr
, info_ptr_end
);
1600 attr
->u
.val
= read_1_byte (abfd
, &info_ptr
, info_ptr_end
);
1601 /* dwarf_str_offset value 0 indicates the attribute DW_AT_str_offsets_base
1603 if (unit
->dwarf_str_offset
!= 0)
1604 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
1609 attr
->u
.val
= read_2_bytes (abfd
, &info_ptr
, info_ptr_end
);
1610 if (unit
->dwarf_str_offset
!= 0)
1611 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
1616 attr
->u
.val
= read_3_bytes (abfd
, &info_ptr
, info_ptr_end
);
1617 if (unit
->dwarf_str_offset
!= 0)
1618 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
1623 attr
->u
.val
= read_4_bytes (abfd
, &info_ptr
, info_ptr_end
);
1624 if (unit
->dwarf_str_offset
!= 0)
1625 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
1630 attr
->u
.val
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1631 false, info_ptr_end
);
1632 if (unit
->dwarf_str_offset
!= 0)
1633 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
1637 case DW_FORM_exprloc
:
1639 amt
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1640 false, info_ptr_end
);
1641 attr
->u
.blk
= read_blk (abfd
, &info_ptr
, info_ptr_end
, amt
);
1642 if (attr
->u
.blk
== NULL
)
1645 case DW_FORM_block1
:
1646 amt
= read_1_byte (abfd
, &info_ptr
, info_ptr_end
);
1647 attr
->u
.blk
= read_blk (abfd
, &info_ptr
, info_ptr_end
, amt
);
1648 if (attr
->u
.blk
== NULL
)
1652 attr
->u
.sval
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1653 true, info_ptr_end
);
1656 case DW_FORM_rnglistx
:
1657 case DW_FORM_loclistx
:
1658 /* FIXME: Add support for these forms! */
1660 case DW_FORM_ref_udata
:
1662 attr
->u
.val
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1663 false, info_ptr_end
);
1666 attr
->u
.val
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1667 false, info_ptr_end
);
1668 if (unit
->dwarf_addr_offset
!= 0)
1669 attr
->u
.val
= read_indexed_address (attr
->u
.val
, unit
);
1671 case DW_FORM_indirect
:
1672 form
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1673 false, info_ptr_end
);
1674 if (form
== DW_FORM_implicit_const
)
1675 implicit_const
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1676 true, info_ptr_end
);
1677 info_ptr
= read_attribute_value (attr
, form
, implicit_const
, unit
,
1678 info_ptr
, info_ptr_end
);
1680 case DW_FORM_implicit_const
:
1681 attr
->form
= DW_FORM_sdata
;
1682 attr
->u
.sval
= implicit_const
;
1684 case DW_FORM_data16
:
1685 /* This is really a "constant", but there is no way to store that
1686 so pretend it is a 16 byte block instead. */
1687 attr
->u
.blk
= read_blk (abfd
, &info_ptr
, info_ptr_end
, 16);
1688 if (attr
->u
.blk
== NULL
)
1693 _bfd_error_handler (_("DWARF error: invalid or unhandled FORM value: %#x"),
1695 bfd_set_error (bfd_error_bad_value
);
1701 /* Read an attribute described by an abbreviated attribute. */
1704 read_attribute (struct attribute
* attr
,
1705 struct attr_abbrev
* abbrev
,
1706 struct comp_unit
* unit
,
1707 bfd_byte
* info_ptr
,
1708 bfd_byte
* info_ptr_end
)
1710 attr
->name
= abbrev
->name
;
1711 info_ptr
= read_attribute_value (attr
, abbrev
->form
, abbrev
->implicit_const
,
1712 unit
, info_ptr
, info_ptr_end
);
1716 /* Return mangling style given LANG. */
1719 mangle_style (int lang
)
1725 case DW_LANG_Ada2005
:
1726 case DW_LANG_Ada2012
:
1729 case DW_LANG_C_plus_plus
:
1730 case DW_LANG_C_plus_plus_03
:
1731 case DW_LANG_C_plus_plus_11
:
1732 case DW_LANG_C_plus_plus_14
:
1733 case DW_LANG_C_plus_plus_17
:
1734 case DW_LANG_C_plus_plus_20
:
1735 case DW_LANG_C_plus_plus_23
:
1745 case DW_LANG_Rust_old
:
1753 case DW_LANG_Cobol74
:
1754 case DW_LANG_Cobol85
:
1755 case DW_LANG_Fortran77
:
1756 case DW_LANG_Fortran18
:
1757 case DW_LANG_Fortran23
:
1758 case DW_LANG_Pascal83
:
1765 case DW_LANG_Mips_Assembler
:
1766 case DW_LANG_Assembly
:
1768 case DW_LANG_HP_Basic91
:
1769 case DW_LANG_HP_IMacro
:
1770 case DW_LANG_HP_Assembler
:
1775 /* Source line information table routines. */
1777 #define FILE_ALLOC_CHUNK 5
1778 #define DIR_ALLOC_CHUNK 5
1782 struct line_info
* prev_line
;
1786 unsigned int column
;
1787 unsigned int discriminator
;
1788 unsigned char op_index
;
1789 unsigned char end_sequence
; /* End of (sequential) code sequence. */
1800 struct line_sequence
1803 struct line_sequence
* prev_sequence
;
1804 struct line_info
* last_line
; /* Largest VMA. */
1805 struct line_info
** line_info_lookup
;
1806 bfd_size_type num_lines
;
1809 struct line_info_table
1812 unsigned int num_files
;
1813 unsigned int num_dirs
;
1814 unsigned int num_sequences
;
1815 bool use_dir_and_file_0
;
1818 struct fileinfo
* files
;
1819 struct line_sequence
* sequences
;
1820 struct line_info
* lcl_head
; /* Local head; used in 'add_line_info'. */
1823 /* Remember some information about each function. If the function is
1824 inlined (DW_TAG_inlined_subroutine) it may have two additional
1825 attributes, DW_AT_call_file and DW_AT_call_line, which specify the
1826 source code location where this function was inlined. */
1830 /* Pointer to previous function in list of all functions. */
1831 struct funcinfo
*prev_func
;
1832 /* Pointer to function one scope higher. */
1833 struct funcinfo
*caller_func
;
1834 /* Source location file name where caller_func inlines this func. */
1836 /* Source location file name. */
1838 /* Source location line number where caller_func inlines this func. */
1840 /* Source location line number. */
1845 struct arange arange
;
1846 /* The offset of the funcinfo from the start of the unit. */
1847 uint64_t unit_offset
;
1850 struct lookup_funcinfo
1852 /* Function information corresponding to this lookup table entry. */
1853 struct funcinfo
*funcinfo
;
1855 /* The lowest address for this specific function. */
1858 /* The highest address of this function before the lookup table is sorted.
1859 The highest address of all prior functions after the lookup table is
1860 sorted, which is used for binary search. */
1862 /* Index of this function, used to ensure qsort is stable. */
1868 /* Pointer to previous variable in list of all variables. */
1869 struct varinfo
*prev_var
;
1870 /* The offset of the varinfo from the start of the unit. */
1871 uint64_t unit_offset
;
1872 /* Source location file name. */
1874 /* Source location line number. */
1876 /* The type of this variable. */
1878 /* The name of the variable, if it has one. */
1880 /* The address of the variable. */
1882 /* Is this a stack variable? */
1886 /* Return TRUE if NEW_LINE should sort after LINE. */
1889 new_line_sorts_after (struct line_info
*new_line
, struct line_info
*line
)
1891 return (new_line
->address
> line
->address
1892 || (new_line
->address
== line
->address
1893 && new_line
->op_index
> line
->op_index
));
1897 /* Adds a new entry to the line_info list in the line_info_table, ensuring
1898 that the list is sorted. Note that the line_info list is sorted from
1899 highest to lowest VMA (with possible duplicates); that is,
1900 line_info->prev_line always accesses an equal or smaller VMA. */
1903 add_line_info (struct line_info_table
*table
,
1905 unsigned char op_index
,
1908 unsigned int column
,
1909 unsigned int discriminator
,
1912 size_t amt
= sizeof (struct line_info
);
1913 struct line_sequence
* seq
= table
->sequences
;
1914 struct line_info
* info
= (struct line_info
*) bfd_alloc (table
->abfd
, amt
);
1919 /* Set member data of 'info'. */
1920 info
->prev_line
= NULL
;
1921 info
->address
= address
;
1922 info
->op_index
= op_index
;
1924 info
->column
= column
;
1925 info
->discriminator
= discriminator
;
1926 info
->end_sequence
= end_sequence
;
1928 if (filename
&& filename
[0])
1930 info
->filename
= (char *) bfd_alloc (table
->abfd
, strlen (filename
) + 1);
1931 if (info
->filename
== NULL
)
1933 strcpy (info
->filename
, filename
);
1936 info
->filename
= NULL
;
1938 /* Find the correct location for 'info'. Normally we will receive
1939 new line_info data 1) in order and 2) with increasing VMAs.
1940 However some compilers break the rules (cf. decode_line_info) and
1941 so we include some heuristics for quickly finding the correct
1942 location for 'info'. In particular, these heuristics optimize for
1943 the common case in which the VMA sequence that we receive is a
1944 list of locally sorted VMAs such as
1945 p...z a...j (where a < j < p < z)
1947 Note: table->lcl_head is used to head an *actual* or *possible*
1948 sub-sequence within the list (such as a...j) that is not directly
1949 headed by table->last_line
1951 Note: we may receive duplicate entries from 'decode_line_info'. */
1954 && seq
->last_line
->address
== address
1955 && seq
->last_line
->op_index
== op_index
1956 && seq
->last_line
->end_sequence
== end_sequence
)
1958 /* We only keep the last entry with the same address and end
1959 sequence. See PR ld/4986. */
1960 if (table
->lcl_head
== seq
->last_line
)
1961 table
->lcl_head
= info
;
1962 info
->prev_line
= seq
->last_line
->prev_line
;
1963 seq
->last_line
= info
;
1965 else if (!seq
|| seq
->last_line
->end_sequence
)
1967 /* Start a new line sequence. */
1968 amt
= sizeof (struct line_sequence
);
1969 seq
= (struct line_sequence
*) bfd_malloc (amt
);
1972 seq
->low_pc
= address
;
1973 seq
->prev_sequence
= table
->sequences
;
1974 seq
->last_line
= info
;
1975 table
->lcl_head
= info
;
1976 table
->sequences
= seq
;
1977 table
->num_sequences
++;
1979 else if (info
->end_sequence
1980 || new_line_sorts_after (info
, seq
->last_line
))
1982 /* Normal case: add 'info' to the beginning of the current sequence. */
1983 info
->prev_line
= seq
->last_line
;
1984 seq
->last_line
= info
;
1986 /* lcl_head: initialize to head a *possible* sequence at the end. */
1987 if (!table
->lcl_head
)
1988 table
->lcl_head
= info
;
1990 else if (!new_line_sorts_after (info
, table
->lcl_head
)
1991 && (!table
->lcl_head
->prev_line
1992 || new_line_sorts_after (info
, table
->lcl_head
->prev_line
)))
1994 /* Abnormal but easy: lcl_head is the head of 'info'. */
1995 info
->prev_line
= table
->lcl_head
->prev_line
;
1996 table
->lcl_head
->prev_line
= info
;
2000 /* Abnormal and hard: Neither 'last_line' nor 'lcl_head'
2001 are valid heads for 'info'. Reset 'lcl_head'. */
2002 struct line_info
* li2
= seq
->last_line
; /* Always non-NULL. */
2003 struct line_info
* li1
= li2
->prev_line
;
2007 if (!new_line_sorts_after (info
, li2
)
2008 && new_line_sorts_after (info
, li1
))
2011 li2
= li1
; /* always non-NULL */
2012 li1
= li1
->prev_line
;
2014 table
->lcl_head
= li2
;
2015 info
->prev_line
= table
->lcl_head
->prev_line
;
2016 table
->lcl_head
->prev_line
= info
;
2017 if (address
< seq
->low_pc
)
2018 seq
->low_pc
= address
;
2023 /* Extract a fully qualified filename from a line info table.
2024 The returned string has been malloc'ed and it is the caller's
2025 responsibility to free it. */
2028 concat_filename (struct line_info_table
*table
, unsigned int file
)
2032 /* Pre DWARF-5 entry 0 in the directory and filename tables was not used.
2033 So in order to save space in the tables used here the info for, eg
2034 directory 1 is stored in slot 0 of the directory table, directory 2
2035 in slot 1 and so on.
2037 Starting with DWARF-5 the 0'th entry is used so there is a one to one
2038 mapping between DWARF slots and internal table entries. */
2039 if (! table
->use_dir_and_file_0
)
2041 /* Pre DWARF-5, FILE == 0 means unknown. */
2043 return strdup ("<unknown>");
2047 if (table
== NULL
|| file
>= table
->num_files
)
2050 (_("DWARF error: mangled line number section (bad file number)"));
2051 return strdup ("<unknown>");
2054 filename
= table
->files
[file
].name
;
2056 if (filename
== NULL
)
2057 return strdup ("<unknown>");
2059 if (!IS_ABSOLUTE_PATH (filename
))
2061 char *dir_name
= NULL
;
2062 char *subdir_name
= NULL
;
2065 unsigned int dir
= table
->files
[file
].dir
;
2067 if (!table
->use_dir_and_file_0
)
2069 /* Wrapping from 0 to -1u above gives the intended result with
2070 the test below of leaving subdir_name NULL for pre-DWARF5 dir
2072 /* PR 17512: file: 0317e960, file: 7f3d2e4b. */
2073 if (dir
< table
->num_dirs
)
2074 subdir_name
= table
->dirs
[dir
];
2076 if (!subdir_name
|| !IS_ABSOLUTE_PATH (subdir_name
))
2077 dir_name
= table
->comp_dir
;
2081 dir_name
= subdir_name
;
2086 return strdup (filename
);
2088 len
= strlen (dir_name
) + strlen (filename
) + 2;
2092 len
+= strlen (subdir_name
) + 1;
2093 name
= (char *) bfd_malloc (len
);
2095 sprintf (name
, "%s/%s/%s", dir_name
, subdir_name
, filename
);
2099 name
= (char *) bfd_malloc (len
);
2101 sprintf (name
, "%s/%s", dir_name
, filename
);
2107 return strdup (filename
);
2110 /* Number of bits in a bfd_vma. */
2111 #define VMA_BITS (8 * sizeof (bfd_vma))
2113 /* Check whether [low1, high1) can be combined with [low2, high2),
2114 i.e., they touch or overlap. */
2117 ranges_overlap (bfd_vma low1
,
2122 if (low1
== low2
|| high1
== high2
)
2125 /* Sort so that low1 is below low2. */
2139 /* We touch iff low2 == high1.
2140 We overlap iff low2 is within [low1, high1). */
2141 return low2
<= high1
;
2144 /* Insert an address range in the trie mapping addresses to compilation units.
2145 Will return the new trie node (usually the same as is being sent in, but
2146 in case of a leaf-to-interior conversion, or expansion of a leaf, it may be
2147 different), or NULL on failure. */
2149 static struct trie_node
*
2150 insert_arange_in_trie (bfd
*abfd
,
2151 struct trie_node
*trie
,
2153 unsigned int trie_pc_bits
,
2154 struct comp_unit
*unit
,
2158 bfd_vma clamped_low_pc
, clamped_high_pc
;
2159 int ch
, from_ch
, to_ch
;
2160 bool is_full_leaf
= false;
2161 bool splitting_leaf_will_help
= false;
2163 /* See if we can extend any of the existing ranges. This merging
2164 isn't perfect (if merging opens up the possibility of merging two existing
2165 ranges, we won't find them), but it takes the majority of the cases. */
2166 if (trie
->num_room_in_leaf
> 0)
2168 struct trie_leaf
*leaf
= (struct trie_leaf
*) trie
;
2171 for (i
= 0; i
< leaf
->num_stored_in_leaf
; ++i
)
2173 if (leaf
->ranges
[i
].unit
== unit
2174 && ranges_overlap (low_pc
, high_pc
,
2175 leaf
->ranges
[i
].low_pc
,
2176 leaf
->ranges
[i
].high_pc
))
2178 if (low_pc
< leaf
->ranges
[i
].low_pc
)
2179 leaf
->ranges
[i
].low_pc
= low_pc
;
2180 if (high_pc
> leaf
->ranges
[i
].high_pc
)
2181 leaf
->ranges
[i
].high_pc
= high_pc
;
2186 is_full_leaf
= leaf
->num_stored_in_leaf
== trie
->num_room_in_leaf
;
2188 if (is_full_leaf
&& trie_pc_bits
< VMA_BITS
)
2190 /* See if we have at least one leaf that does _not_ cover the
2191 entire bucket, so that splitting will actually reduce the number
2192 of elements in at least one of the child nodes. (For simplicity,
2193 we don't test the range we're inserting, but it will be counted
2194 on the next insertion where we're full, if any.) */
2195 bfd_vma bucket_high_pc
=
2196 trie_pc
+ ((bfd_vma
) -1 >> trie_pc_bits
); /* Inclusive. */
2197 for (i
= 0; i
< leaf
->num_stored_in_leaf
; ++i
)
2199 if (leaf
->ranges
[i
].low_pc
> trie_pc
2200 || leaf
->ranges
[i
].high_pc
<= bucket_high_pc
)
2202 splitting_leaf_will_help
= true;
2209 /* If we're a leaf with no more room and we're _not_ at the bottom,
2210 convert to an interior node. */
2211 if (is_full_leaf
&& splitting_leaf_will_help
)
2213 const struct trie_leaf
*leaf
= (struct trie_leaf
*) trie
;
2216 trie
= bfd_zalloc (abfd
, sizeof (struct trie_interior
));
2219 is_full_leaf
= false;
2221 /* TODO: If we wanted to save a little more memory at the cost of
2222 complexity, we could have reused the old leaf node as one of the
2223 children of the new interior node, instead of throwing it away. */
2224 for (i
= 0; i
< leaf
->num_stored_in_leaf
; ++i
)
2226 if (!insert_arange_in_trie (abfd
, trie
, trie_pc
, trie_pc_bits
,
2227 leaf
->ranges
[i
].unit
, leaf
->ranges
[i
].low_pc
,
2228 leaf
->ranges
[i
].high_pc
))
2233 /* If we're a leaf with no more room and we _are_ at the bottom
2234 (or splitting it won't help), we have no choice but to just
2238 const struct trie_leaf
*leaf
= (struct trie_leaf
*) trie
;
2239 unsigned int new_room_in_leaf
= trie
->num_room_in_leaf
* 2;
2240 struct trie_leaf
*new_leaf
;
2241 size_t amt
= sizeof (*leaf
) + new_room_in_leaf
* sizeof (leaf
->ranges
[0]);
2242 new_leaf
= bfd_zalloc (abfd
, amt
);
2243 new_leaf
->head
.num_room_in_leaf
= new_room_in_leaf
;
2244 new_leaf
->num_stored_in_leaf
= leaf
->num_stored_in_leaf
;
2246 memcpy (new_leaf
->ranges
,
2248 leaf
->num_stored_in_leaf
* sizeof (leaf
->ranges
[0]));
2249 trie
= &new_leaf
->head
;
2250 is_full_leaf
= false;
2252 /* Now the insert below will go through. */
2255 /* If we're a leaf (now with room), we can just insert at the end. */
2256 if (trie
->num_room_in_leaf
> 0)
2258 struct trie_leaf
*leaf
= (struct trie_leaf
*) trie
;
2260 unsigned int i
= leaf
->num_stored_in_leaf
++;
2261 leaf
->ranges
[i
].unit
= unit
;
2262 leaf
->ranges
[i
].low_pc
= low_pc
;
2263 leaf
->ranges
[i
].high_pc
= high_pc
;
2267 /* Now we are definitely an interior node, so recurse into all
2268 the relevant buckets. */
2270 /* Clamp the range to the current trie bucket. */
2271 clamped_low_pc
= low_pc
;
2272 clamped_high_pc
= high_pc
;
2273 if (trie_pc_bits
> 0)
2275 bfd_vma bucket_high_pc
=
2276 trie_pc
+ ((bfd_vma
) -1 >> trie_pc_bits
); /* Inclusive. */
2277 if (clamped_low_pc
< trie_pc
)
2278 clamped_low_pc
= trie_pc
;
2279 if (clamped_high_pc
> bucket_high_pc
)
2280 clamped_high_pc
= bucket_high_pc
;
2283 /* Insert the ranges in all buckets that it spans. */
2284 from_ch
= (clamped_low_pc
>> (VMA_BITS
- trie_pc_bits
- 8)) & 0xff;
2285 to_ch
= ((clamped_high_pc
- 1) >> (VMA_BITS
- trie_pc_bits
- 8)) & 0xff;
2286 for (ch
= from_ch
; ch
<= to_ch
; ++ch
)
2288 struct trie_interior
*interior
= (struct trie_interior
*) trie
;
2289 struct trie_node
*child
= interior
->children
[ch
];
2293 child
= alloc_trie_leaf (abfd
);
2297 bfd_vma bucket
= (bfd_vma
) ch
<< (VMA_BITS
- trie_pc_bits
- 8);
2298 child
= insert_arange_in_trie (abfd
,
2308 interior
->children
[ch
] = child
;
2315 arange_add (struct comp_unit
*unit
, struct arange
*first_arange
,
2316 struct trie_node
**trie_root
, bfd_vma low_pc
, bfd_vma high_pc
)
2318 struct arange
*arange
;
2320 /* Ignore empty ranges. */
2321 if (low_pc
== high_pc
)
2324 if (trie_root
!= NULL
)
2326 *trie_root
= insert_arange_in_trie (unit
->file
->bfd_ptr
,
2333 if (*trie_root
== NULL
)
2337 /* If the first arange is empty, use it. */
2338 if (first_arange
->high
== 0)
2340 first_arange
->low
= low_pc
;
2341 first_arange
->high
= high_pc
;
2345 /* Next see if we can cheaply extend an existing range. */
2346 arange
= first_arange
;
2349 if (low_pc
== arange
->high
)
2351 arange
->high
= high_pc
;
2354 if (high_pc
== arange
->low
)
2356 arange
->low
= low_pc
;
2359 arange
= arange
->next
;
2363 /* Need to allocate a new arange and insert it into the arange list.
2364 Order isn't significant, so just insert after the first arange. */
2365 arange
= (struct arange
*) bfd_alloc (unit
->abfd
, sizeof (*arange
));
2368 arange
->low
= low_pc
;
2369 arange
->high
= high_pc
;
2370 arange
->next
= first_arange
->next
;
2371 first_arange
->next
= arange
;
2375 /* Compare function for line sequences. */
2378 compare_sequences (const void* a
, const void* b
)
2380 const struct line_sequence
* seq1
= a
;
2381 const struct line_sequence
* seq2
= b
;
2383 /* Sort by low_pc as the primary key. */
2384 if (seq1
->low_pc
< seq2
->low_pc
)
2386 if (seq1
->low_pc
> seq2
->low_pc
)
2389 /* If low_pc values are equal, sort in reverse order of
2390 high_pc, so that the largest region comes first. */
2391 if (seq1
->last_line
->address
< seq2
->last_line
->address
)
2393 if (seq1
->last_line
->address
> seq2
->last_line
->address
)
2396 if (seq1
->last_line
->op_index
< seq2
->last_line
->op_index
)
2398 if (seq1
->last_line
->op_index
> seq2
->last_line
->op_index
)
2401 /* num_lines is initially an index, to make the sort stable. */
2402 if (seq1
->num_lines
< seq2
->num_lines
)
2404 if (seq1
->num_lines
> seq2
->num_lines
)
2409 /* Construct the line information table for quick lookup. */
2412 build_line_info_table (struct line_info_table
* table
,
2413 struct line_sequence
* seq
)
2416 struct line_info
**line_info_lookup
;
2417 struct line_info
*each_line
;
2418 unsigned int num_lines
;
2419 unsigned int line_index
;
2421 if (seq
->line_info_lookup
!= NULL
)
2424 /* Count the number of line information entries. We could do this while
2425 scanning the debug information, but some entries may be added via
2426 lcl_head without having a sequence handy to increment the number of
2429 for (each_line
= seq
->last_line
; each_line
; each_line
= each_line
->prev_line
)
2432 seq
->num_lines
= num_lines
;
2436 /* Allocate space for the line information lookup table. */
2437 amt
= sizeof (struct line_info
*) * num_lines
;
2438 line_info_lookup
= (struct line_info
**) bfd_alloc (table
->abfd
, amt
);
2439 seq
->line_info_lookup
= line_info_lookup
;
2440 if (line_info_lookup
== NULL
)
2443 /* Create the line information lookup table. */
2444 line_index
= num_lines
;
2445 for (each_line
= seq
->last_line
; each_line
; each_line
= each_line
->prev_line
)
2446 line_info_lookup
[--line_index
] = each_line
;
2448 BFD_ASSERT (line_index
== 0);
2452 /* Sort the line sequences for quick lookup. */
2455 sort_line_sequences (struct line_info_table
* table
)
2458 struct line_sequence
*sequences
;
2459 struct line_sequence
*seq
;
2461 unsigned int num_sequences
= table
->num_sequences
;
2462 bfd_vma last_high_pc
;
2464 if (num_sequences
== 0)
2467 /* Allocate space for an array of sequences. */
2468 amt
= sizeof (struct line_sequence
) * num_sequences
;
2469 sequences
= (struct line_sequence
*) bfd_alloc (table
->abfd
, amt
);
2470 if (sequences
== NULL
)
2473 /* Copy the linked list into the array, freeing the original nodes. */
2474 seq
= table
->sequences
;
2475 for (n
= 0; n
< num_sequences
; n
++)
2477 struct line_sequence
* last_seq
= seq
;
2480 sequences
[n
].low_pc
= seq
->low_pc
;
2481 sequences
[n
].prev_sequence
= NULL
;
2482 sequences
[n
].last_line
= seq
->last_line
;
2483 sequences
[n
].line_info_lookup
= NULL
;
2484 sequences
[n
].num_lines
= n
;
2485 seq
= seq
->prev_sequence
;
2488 BFD_ASSERT (seq
== NULL
);
2490 qsort (sequences
, n
, sizeof (struct line_sequence
), compare_sequences
);
2492 /* Make the list binary-searchable by trimming overlapping entries
2493 and removing nested entries. */
2495 last_high_pc
= sequences
[0].last_line
->address
;
2496 for (n
= 1; n
< table
->num_sequences
; n
++)
2498 if (sequences
[n
].low_pc
< last_high_pc
)
2500 if (sequences
[n
].last_line
->address
<= last_high_pc
)
2501 /* Skip nested entries. */
2504 /* Trim overlapping entries. */
2505 sequences
[n
].low_pc
= last_high_pc
;
2507 last_high_pc
= sequences
[n
].last_line
->address
;
2508 if (n
> num_sequences
)
2510 /* Close up the gap. */
2511 sequences
[num_sequences
].low_pc
= sequences
[n
].low_pc
;
2512 sequences
[num_sequences
].last_line
= sequences
[n
].last_line
;
2517 table
->sequences
= sequences
;
2518 table
->num_sequences
= num_sequences
;
2522 /* Add directory to TABLE. CUR_DIR memory ownership is taken by TABLE. */
2525 line_info_add_include_dir (struct line_info_table
*table
, char *cur_dir
)
2527 if ((table
->num_dirs
% DIR_ALLOC_CHUNK
) == 0)
2532 amt
= table
->num_dirs
+ DIR_ALLOC_CHUNK
;
2533 amt
*= sizeof (char *);
2535 tmp
= (char **) bfd_realloc (table
->dirs
, amt
);
2541 table
->dirs
[table
->num_dirs
++] = cur_dir
;
2546 line_info_add_include_dir_stub (struct line_info_table
*table
, char *cur_dir
,
2547 unsigned int dir ATTRIBUTE_UNUSED
,
2548 unsigned int xtime ATTRIBUTE_UNUSED
,
2549 unsigned int size ATTRIBUTE_UNUSED
)
2551 return line_info_add_include_dir (table
, cur_dir
);
2554 /* Add file to TABLE. CUR_FILE memory ownership is taken by TABLE. */
2557 line_info_add_file_name (struct line_info_table
*table
, char *cur_file
,
2558 unsigned int dir
, unsigned int xtime
,
2561 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
2563 struct fileinfo
*tmp
;
2566 amt
= table
->num_files
+ FILE_ALLOC_CHUNK
;
2567 amt
*= sizeof (struct fileinfo
);
2569 tmp
= (struct fileinfo
*) bfd_realloc (table
->files
, amt
);
2575 table
->files
[table
->num_files
].name
= cur_file
;
2576 table
->files
[table
->num_files
].dir
= dir
;
2577 table
->files
[table
->num_files
].time
= xtime
;
2578 table
->files
[table
->num_files
].size
= size
;
2583 /* Read directory or file name entry format, starting with byte of
2584 format count entries, ULEB128 pairs of entry formats, ULEB128 of
2585 entries count and the entries themselves in the described entry
2589 read_formatted_entries (struct comp_unit
*unit
, bfd_byte
**bufp
,
2590 bfd_byte
*buf_end
, struct line_info_table
*table
,
2591 bool (*callback
) (struct line_info_table
*table
,
2597 bfd
*abfd
= unit
->abfd
;
2598 bfd_byte format_count
, formati
;
2599 bfd_vma data_count
, datai
;
2600 bfd_byte
*buf
= *bufp
;
2601 bfd_byte
*format_header_data
;
2603 format_count
= read_1_byte (abfd
, &buf
, buf_end
);
2604 format_header_data
= buf
;
2605 for (formati
= 0; formati
< format_count
; formati
++)
2607 _bfd_safe_read_leb128 (abfd
, &buf
, false, buf_end
);
2608 _bfd_safe_read_leb128 (abfd
, &buf
, false, buf_end
);
2611 data_count
= _bfd_safe_read_leb128 (abfd
, &buf
, false, buf_end
);
2612 if (format_count
== 0 && data_count
!= 0)
2614 _bfd_error_handler (_("DWARF error: zero format count"));
2615 bfd_set_error (bfd_error_bad_value
);
2619 /* PR 22210. Paranoia check. Don't bother running the loop
2620 if we know that we are going to run out of buffer. */
2621 if (data_count
> (bfd_vma
) (buf_end
- buf
))
2624 (_("DWARF error: data count (%" PRIx64
") larger than buffer size"),
2625 (uint64_t) data_count
);
2626 bfd_set_error (bfd_error_bad_value
);
2630 for (datai
= 0; datai
< data_count
; datai
++)
2632 bfd_byte
*format
= format_header_data
;
2635 memset (&fe
, 0, sizeof fe
);
2636 for (formati
= 0; formati
< format_count
; formati
++)
2638 bfd_vma content_type
, form
;
2640 char **stringp
= &string_trash
;
2641 unsigned int uint_trash
, *uintp
= &uint_trash
;
2642 struct attribute attr
;
2644 content_type
= _bfd_safe_read_leb128 (abfd
, &format
, false, buf_end
);
2645 switch (content_type
)
2650 case DW_LNCT_directory_index
:
2653 case DW_LNCT_timestamp
:
2663 (_("DWARF error: unknown format content type %" PRIu64
),
2664 (uint64_t) content_type
);
2665 bfd_set_error (bfd_error_bad_value
);
2669 form
= _bfd_safe_read_leb128 (abfd
, &format
, false, buf_end
);
2670 buf
= read_attribute_value (&attr
, form
, 0, unit
, buf
, buf_end
);
2675 case DW_FORM_string
:
2676 case DW_FORM_line_strp
:
2682 *stringp
= attr
.u
.str
;
2690 *uintp
= attr
.u
.val
;
2693 case DW_FORM_data16
:
2694 /* MD5 data is in the attr.blk, but we are ignoring those. */
2699 if (!callback (table
, fe
.name
, fe
.dir
, fe
.time
, fe
.size
))
2707 /* Decode the line number information for UNIT. */
2709 static struct line_info_table
*
2710 decode_line_info (struct comp_unit
*unit
)
2712 bfd
*abfd
= unit
->abfd
;
2713 struct dwarf2_debug
*stash
= unit
->stash
;
2714 struct dwarf2_debug_file
*file
= unit
->file
;
2715 struct line_info_table
* table
;
2718 struct line_head lh
;
2719 unsigned int i
, offset_size
;
2720 char *cur_file
, *cur_dir
;
2721 unsigned char op_code
, extended_op
, adj_opcode
;
2722 unsigned int exop_len
;
2725 if (unit
->line_offset
== 0 && file
->line_table
)
2726 return file
->line_table
;
2728 if (! read_section (abfd
, &stash
->debug_sections
[debug_line
],
2729 file
->syms
, unit
->line_offset
,
2730 &file
->dwarf_line_buffer
, &file
->dwarf_line_size
))
2733 if (file
->dwarf_line_size
< 16)
2736 (_("DWARF error: line info section is too small (%" PRId64
")"),
2737 (int64_t) file
->dwarf_line_size
);
2738 bfd_set_error (bfd_error_bad_value
);
2741 line_ptr
= file
->dwarf_line_buffer
+ unit
->line_offset
;
2742 line_end
= file
->dwarf_line_buffer
+ file
->dwarf_line_size
;
2744 /* Read in the prologue. */
2745 lh
.total_length
= read_4_bytes (abfd
, &line_ptr
, line_end
);
2747 if (lh
.total_length
== 0xffffffff)
2749 lh
.total_length
= read_8_bytes (abfd
, &line_ptr
, line_end
);
2752 else if (lh
.total_length
== 0 && unit
->addr_size
== 8)
2754 /* Handle (non-standard) 64-bit DWARF2 formats. */
2755 lh
.total_length
= read_4_bytes (abfd
, &line_ptr
, line_end
);
2759 if (lh
.total_length
> (size_t) (line_end
- line_ptr
))
2762 /* xgettext: c-format */
2763 (_("DWARF error: line info data is bigger (%#" PRIx64
")"
2764 " than the space remaining in the section (%#lx)"),
2765 (uint64_t) lh
.total_length
, (unsigned long) (line_end
- line_ptr
));
2766 bfd_set_error (bfd_error_bad_value
);
2770 line_end
= line_ptr
+ lh
.total_length
;
2772 lh
.version
= read_2_bytes (abfd
, &line_ptr
, line_end
);
2773 if (lh
.version
< 2 || lh
.version
> 5)
2776 (_("DWARF error: unhandled .debug_line version %d"), lh
.version
);
2777 bfd_set_error (bfd_error_bad_value
);
2781 if (line_ptr
+ offset_size
+ (lh
.version
>= 5 ? 8 : (lh
.version
>= 4 ? 6 : 5))
2785 (_("DWARF error: ran out of room reading prologue"));
2786 bfd_set_error (bfd_error_bad_value
);
2790 if (lh
.version
>= 5)
2792 unsigned int segment_selector_size
;
2794 /* Skip address size. */
2795 read_1_byte (abfd
, &line_ptr
, line_end
);
2797 segment_selector_size
= read_1_byte (abfd
, &line_ptr
, line_end
);
2798 if (segment_selector_size
!= 0)
2801 (_("DWARF error: line info unsupported segment selector size %u"),
2802 segment_selector_size
);
2803 bfd_set_error (bfd_error_bad_value
);
2808 if (offset_size
== 4)
2809 lh
.prologue_length
= read_4_bytes (abfd
, &line_ptr
, line_end
);
2811 lh
.prologue_length
= read_8_bytes (abfd
, &line_ptr
, line_end
);
2813 lh
.minimum_instruction_length
= read_1_byte (abfd
, &line_ptr
, line_end
);
2815 if (lh
.version
>= 4)
2816 lh
.maximum_ops_per_insn
= read_1_byte (abfd
, &line_ptr
, line_end
);
2818 lh
.maximum_ops_per_insn
= 1;
2820 if (lh
.maximum_ops_per_insn
== 0)
2823 (_("DWARF error: invalid maximum operations per instruction"));
2824 bfd_set_error (bfd_error_bad_value
);
2828 lh
.default_is_stmt
= read_1_byte (abfd
, &line_ptr
, line_end
);
2829 lh
.line_base
= read_1_signed_byte (abfd
, &line_ptr
, line_end
);
2830 lh
.line_range
= read_1_byte (abfd
, &line_ptr
, line_end
);
2831 lh
.opcode_base
= read_1_byte (abfd
, &line_ptr
, line_end
);
2833 if (line_ptr
+ (lh
.opcode_base
- 1) >= line_end
)
2835 _bfd_error_handler (_("DWARF error: ran out of room reading opcodes"));
2836 bfd_set_error (bfd_error_bad_value
);
2840 amt
= lh
.opcode_base
* sizeof (unsigned char);
2841 lh
.standard_opcode_lengths
= (unsigned char *) bfd_alloc (abfd
, amt
);
2843 lh
.standard_opcode_lengths
[0] = 1;
2845 for (i
= 1; i
< lh
.opcode_base
; ++i
)
2846 lh
.standard_opcode_lengths
[i
] = read_1_byte (abfd
, &line_ptr
, line_end
);
2848 amt
= sizeof (struct line_info_table
);
2849 table
= (struct line_info_table
*) bfd_alloc (abfd
, amt
);
2853 table
->comp_dir
= unit
->comp_dir
;
2855 table
->num_files
= 0;
2856 table
->files
= NULL
;
2858 table
->num_dirs
= 0;
2861 table
->num_sequences
= 0;
2862 table
->sequences
= NULL
;
2864 table
->lcl_head
= NULL
;
2866 if (lh
.version
>= 5)
2868 /* Read directory table. */
2869 if (!read_formatted_entries (unit
, &line_ptr
, line_end
, table
,
2870 line_info_add_include_dir_stub
))
2873 /* Read file name table. */
2874 if (!read_formatted_entries (unit
, &line_ptr
, line_end
, table
,
2875 line_info_add_file_name
))
2877 table
->use_dir_and_file_0
= true;
2881 /* Read directory table. */
2882 while ((cur_dir
= read_string (&line_ptr
, line_end
)) != NULL
)
2884 if (!line_info_add_include_dir (table
, cur_dir
))
2888 /* Read file name table. */
2889 while ((cur_file
= read_string (&line_ptr
, line_end
)) != NULL
)
2891 unsigned int dir
, xtime
, size
;
2893 dir
= _bfd_safe_read_leb128 (abfd
, &line_ptr
, false, line_end
);
2894 xtime
= _bfd_safe_read_leb128 (abfd
, &line_ptr
, false, line_end
);
2895 size
= _bfd_safe_read_leb128 (abfd
, &line_ptr
, false, line_end
);
2897 if (!line_info_add_file_name (table
, cur_file
, dir
, xtime
, size
))
2900 table
->use_dir_and_file_0
= false;
2903 /* Read the statement sequences until there's nothing left. */
2904 while (line_ptr
< line_end
)
2906 /* State machine registers. */
2907 bfd_vma address
= 0;
2908 unsigned char op_index
= 0;
2909 char * filename
= NULL
;
2910 unsigned int line
= 1;
2911 unsigned int column
= 0;
2912 unsigned int discriminator
= 0;
2913 int is_stmt
= lh
.default_is_stmt
;
2914 int end_sequence
= 0;
2915 unsigned int dir
, xtime
, size
;
2916 /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
2917 compilers generate address sequences that are wildly out of
2918 order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
2919 for ia64-Linux). Thus, to determine the low and high
2920 address, we must compare on every DW_LNS_copy, etc. */
2921 bfd_vma low_pc
= (bfd_vma
) -1;
2922 bfd_vma high_pc
= 0;
2924 if (table
->num_files
)
2926 /* PR 30783: Always start with a file index of 1, even
2928 filename
= concat_filename (table
, 1);
2931 /* Decode the table. */
2932 while (!end_sequence
&& line_ptr
< line_end
)
2934 op_code
= read_1_byte (abfd
, &line_ptr
, line_end
);
2936 if (op_code
>= lh
.opcode_base
)
2938 /* Special operand. */
2939 adj_opcode
= op_code
- lh
.opcode_base
;
2940 if (lh
.line_range
== 0)
2942 if (lh
.maximum_ops_per_insn
== 1)
2943 address
+= (adj_opcode
/ lh
.line_range
2944 * lh
.minimum_instruction_length
);
2947 address
+= ((op_index
+ adj_opcode
/ lh
.line_range
)
2948 / lh
.maximum_ops_per_insn
2949 * lh
.minimum_instruction_length
);
2950 op_index
= ((op_index
+ adj_opcode
/ lh
.line_range
)
2951 % lh
.maximum_ops_per_insn
);
2953 line
+= lh
.line_base
+ (adj_opcode
% lh
.line_range
);
2954 /* Append row to matrix using current values. */
2955 if (!add_line_info (table
, address
, op_index
, filename
,
2956 line
, column
, discriminator
, 0))
2959 if (address
< low_pc
)
2961 if (address
> high_pc
)
2964 else switch (op_code
)
2966 case DW_LNS_extended_op
:
2967 exop_len
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
2969 extended_op
= read_1_byte (abfd
, &line_ptr
, line_end
);
2971 switch (extended_op
)
2973 case DW_LNE_end_sequence
:
2975 if (!add_line_info (table
, address
, op_index
, filename
, line
,
2976 column
, discriminator
, end_sequence
))
2979 if (address
< low_pc
)
2981 if (address
> high_pc
)
2983 if (!arange_add (unit
, &unit
->arange
, &unit
->file
->trie_root
,
2987 case DW_LNE_set_address
:
2988 address
= read_address (unit
, &line_ptr
, line_end
);
2991 case DW_LNE_define_file
:
2992 cur_file
= read_string (&line_ptr
, line_end
);
2993 dir
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
2995 xtime
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
2997 size
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
2999 if (!line_info_add_file_name (table
, cur_file
, dir
,
3003 case DW_LNE_set_discriminator
:
3004 discriminator
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3007 case DW_LNE_HP_source_file_correlation
:
3008 line_ptr
+= exop_len
- 1;
3012 (_("DWARF error: mangled line number section"));
3013 bfd_set_error (bfd_error_bad_value
);
3020 if (!add_line_info (table
, address
, op_index
,
3021 filename
, line
, column
, discriminator
, 0))
3024 if (address
< low_pc
)
3026 if (address
> high_pc
)
3029 case DW_LNS_advance_pc
:
3030 if (lh
.maximum_ops_per_insn
== 1)
3031 address
+= (lh
.minimum_instruction_length
3032 * _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3036 bfd_vma adjust
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3038 address
= ((op_index
+ adjust
) / lh
.maximum_ops_per_insn
3039 * lh
.minimum_instruction_length
);
3040 op_index
= (op_index
+ adjust
) % lh
.maximum_ops_per_insn
;
3043 case DW_LNS_advance_line
:
3044 line
+= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3047 case DW_LNS_set_file
:
3049 unsigned int filenum
;
3051 /* The file and directory tables are 0
3052 based, the references are 1 based. */
3053 filenum
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3056 filename
= concat_filename (table
, filenum
);
3059 case DW_LNS_set_column
:
3060 column
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3063 case DW_LNS_negate_stmt
:
3064 is_stmt
= (!is_stmt
);
3066 case DW_LNS_set_basic_block
:
3068 case DW_LNS_const_add_pc
:
3069 if (lh
.line_range
== 0)
3071 if (lh
.maximum_ops_per_insn
== 1)
3072 address
+= (lh
.minimum_instruction_length
3073 * ((255 - lh
.opcode_base
) / lh
.line_range
));
3076 bfd_vma adjust
= ((255 - lh
.opcode_base
) / lh
.line_range
);
3077 address
+= (lh
.minimum_instruction_length
3078 * ((op_index
+ adjust
)
3079 / lh
.maximum_ops_per_insn
));
3080 op_index
= (op_index
+ adjust
) % lh
.maximum_ops_per_insn
;
3083 case DW_LNS_fixed_advance_pc
:
3084 address
+= read_2_bytes (abfd
, &line_ptr
, line_end
);
3088 /* Unknown standard opcode, ignore it. */
3089 for (i
= 0; i
< lh
.standard_opcode_lengths
[op_code
]; i
++)
3090 (void) _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3099 if (unit
->line_offset
== 0)
3100 file
->line_table
= table
;
3101 if (sort_line_sequences (table
))
3105 while (table
->sequences
!= NULL
)
3107 struct line_sequence
* seq
= table
->sequences
;
3108 table
->sequences
= table
->sequences
->prev_sequence
;
3111 free (table
->files
);
3116 /* If ADDR is within TABLE set the output parameters and return TRUE,
3117 otherwise set *FILENAME_PTR to NULL and return FALSE.
3118 The parameters FILENAME_PTR, LINENUMBER_PTR and DISCRIMINATOR_PTR
3119 are pointers to the objects to be filled in. */
3122 lookup_address_in_line_info_table (struct line_info_table
*table
,
3124 const char **filename_ptr
,
3125 unsigned int *linenumber_ptr
,
3126 unsigned int *discriminator_ptr
)
3128 struct line_sequence
*seq
= NULL
;
3129 struct line_info
*info
;
3132 /* Binary search the array of sequences. */
3134 high
= table
->num_sequences
;
3137 mid
= (low
+ high
) / 2;
3138 seq
= &table
->sequences
[mid
];
3139 if (addr
< seq
->low_pc
)
3141 else if (addr
>= seq
->last_line
->address
)
3147 /* Check for a valid sequence. */
3148 if (!seq
|| addr
< seq
->low_pc
|| addr
>= seq
->last_line
->address
)
3151 if (!build_line_info_table (table
, seq
))
3154 /* Binary search the array of line information. */
3156 high
= seq
->num_lines
;
3160 mid
= (low
+ high
) / 2;
3161 info
= seq
->line_info_lookup
[mid
];
3162 if (addr
< info
->address
)
3164 else if (addr
>= seq
->line_info_lookup
[mid
+ 1]->address
)
3170 /* Check for a valid line information entry. */
3172 && addr
>= info
->address
3173 && addr
< seq
->line_info_lookup
[mid
+ 1]->address
3174 && !(info
->end_sequence
|| info
== seq
->last_line
))
3176 *filename_ptr
= info
->filename
;
3177 *linenumber_ptr
= info
->line
;
3178 if (discriminator_ptr
)
3179 *discriminator_ptr
= info
->discriminator
;
3184 *filename_ptr
= NULL
;
3188 /* Read in the .debug_ranges section for future reference. */
3191 read_debug_ranges (struct comp_unit
* unit
)
3193 struct dwarf2_debug
*stash
= unit
->stash
;
3194 struct dwarf2_debug_file
*file
= unit
->file
;
3196 return read_section (unit
->abfd
, &stash
->debug_sections
[debug_ranges
],
3198 &file
->dwarf_ranges_buffer
, &file
->dwarf_ranges_size
);
3201 /* Read in the .debug_rnglists section for future reference. */
3204 read_debug_rnglists (struct comp_unit
* unit
)
3206 struct dwarf2_debug
*stash
= unit
->stash
;
3207 struct dwarf2_debug_file
*file
= unit
->file
;
3209 return read_section (unit
->abfd
, &stash
->debug_sections
[debug_rnglists
],
3211 &file
->dwarf_rnglists_buffer
, &file
->dwarf_rnglists_size
);
3214 /* Function table functions. */
3217 compare_lookup_funcinfos (const void * a
, const void * b
)
3219 const struct lookup_funcinfo
* lookup1
= a
;
3220 const struct lookup_funcinfo
* lookup2
= b
;
3222 if (lookup1
->low_addr
< lookup2
->low_addr
)
3224 if (lookup1
->low_addr
> lookup2
->low_addr
)
3226 if (lookup1
->high_addr
< lookup2
->high_addr
)
3228 if (lookup1
->high_addr
> lookup2
->high_addr
)
3231 if (lookup1
->idx
< lookup2
->idx
)
3233 if (lookup1
->idx
> lookup2
->idx
)
3239 build_lookup_funcinfo_table (struct comp_unit
* unit
)
3241 struct lookup_funcinfo
*lookup_funcinfo_table
= unit
->lookup_funcinfo_table
;
3242 unsigned int number_of_functions
= unit
->number_of_functions
;
3243 struct funcinfo
*each
;
3244 struct lookup_funcinfo
*entry
;
3246 struct arange
*range
;
3247 bfd_vma low_addr
, high_addr
;
3249 if (lookup_funcinfo_table
|| number_of_functions
== 0)
3252 /* Create the function info lookup table. */
3253 lookup_funcinfo_table
= (struct lookup_funcinfo
*)
3254 bfd_malloc (number_of_functions
* sizeof (struct lookup_funcinfo
));
3255 if (lookup_funcinfo_table
== NULL
)
3258 /* Populate the function info lookup table. */
3259 func_index
= number_of_functions
;
3260 for (each
= unit
->function_table
; each
; each
= each
->prev_func
)
3262 entry
= &lookup_funcinfo_table
[--func_index
];
3263 entry
->funcinfo
= each
;
3264 entry
->idx
= func_index
;
3266 /* Calculate the lowest and highest address for this function entry. */
3267 low_addr
= entry
->funcinfo
->arange
.low
;
3268 high_addr
= entry
->funcinfo
->arange
.high
;
3270 for (range
= entry
->funcinfo
->arange
.next
; range
; range
= range
->next
)
3272 if (range
->low
< low_addr
)
3273 low_addr
= range
->low
;
3274 if (range
->high
> high_addr
)
3275 high_addr
= range
->high
;
3278 entry
->low_addr
= low_addr
;
3279 entry
->high_addr
= high_addr
;
3282 BFD_ASSERT (func_index
== 0);
3284 /* Sort the function by address. */
3285 qsort (lookup_funcinfo_table
,
3286 number_of_functions
,
3287 sizeof (struct lookup_funcinfo
),
3288 compare_lookup_funcinfos
);
3290 /* Calculate the high watermark for each function in the lookup table. */
3291 high_addr
= lookup_funcinfo_table
[0].high_addr
;
3292 for (func_index
= 1; func_index
< number_of_functions
; func_index
++)
3294 entry
= &lookup_funcinfo_table
[func_index
];
3295 if (entry
->high_addr
> high_addr
)
3296 high_addr
= entry
->high_addr
;
3298 entry
->high_addr
= high_addr
;
3301 unit
->lookup_funcinfo_table
= lookup_funcinfo_table
;
3305 /* If ADDR is within UNIT's function tables, set FUNCTION_PTR, and return
3306 TRUE. Note that we need to find the function that has the smallest range
3307 that contains ADDR, to handle inlined functions without depending upon
3308 them being ordered in TABLE by increasing range. */
3311 lookup_address_in_function_table (struct comp_unit
*unit
,
3313 struct funcinfo
**function_ptr
)
3315 unsigned int number_of_functions
= unit
->number_of_functions
;
3316 struct lookup_funcinfo
* lookup_funcinfo
= NULL
;
3317 struct funcinfo
* funcinfo
= NULL
;
3318 struct funcinfo
* best_fit
= NULL
;
3319 bfd_vma best_fit_len
= (bfd_vma
) -1;
3320 bfd_size_type low
, high
, mid
, first
;
3321 struct arange
*arange
;
3323 if (number_of_functions
== 0)
3326 if (!build_lookup_funcinfo_table (unit
))
3329 if (unit
->lookup_funcinfo_table
[number_of_functions
- 1].high_addr
< addr
)
3332 /* Find the first function in the lookup table which may contain the
3333 specified address. */
3335 high
= number_of_functions
;
3339 mid
= (low
+ high
) / 2;
3340 lookup_funcinfo
= &unit
->lookup_funcinfo_table
[mid
];
3341 if (addr
< lookup_funcinfo
->low_addr
)
3343 else if (addr
>= lookup_funcinfo
->high_addr
)
3349 /* Find the 'best' match for the address. The prior algorithm defined the
3350 best match as the function with the smallest address range containing
3351 the specified address. This definition should probably be changed to the
3352 innermost inline routine containing the address, but right now we want
3353 to get the same results we did before. */
3354 while (first
< number_of_functions
)
3356 if (addr
< unit
->lookup_funcinfo_table
[first
].low_addr
)
3358 funcinfo
= unit
->lookup_funcinfo_table
[first
].funcinfo
;
3360 for (arange
= &funcinfo
->arange
; arange
; arange
= arange
->next
)
3362 if (addr
< arange
->low
|| addr
>= arange
->high
)
3365 if (arange
->high
- arange
->low
< best_fit_len
3366 /* The following comparison is designed to return the same
3367 match as the previous algorithm for routines which have the
3368 same best fit length. */
3369 || (arange
->high
- arange
->low
== best_fit_len
3370 && funcinfo
> best_fit
))
3372 best_fit
= funcinfo
;
3373 best_fit_len
= arange
->high
- arange
->low
;
3383 *function_ptr
= best_fit
;
3387 /* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR
3388 and LINENUMBER_PTR, and return TRUE. */
3391 lookup_symbol_in_function_table (struct comp_unit
*unit
,
3394 const char **filename_ptr
,
3395 unsigned int *linenumber_ptr
)
3397 struct funcinfo
* each
;
3398 struct funcinfo
* best_fit
= NULL
;
3399 bfd_vma best_fit_len
= (bfd_vma
) -1;
3400 struct arange
*arange
;
3401 const char *name
= bfd_asymbol_name (sym
);
3403 for (each
= unit
->function_table
; each
; each
= each
->prev_func
)
3404 for (arange
= &each
->arange
; arange
; arange
= arange
->next
)
3405 if (addr
>= arange
->low
3406 && addr
< arange
->high
3407 && arange
->high
- arange
->low
< best_fit_len
3410 && strstr (name
, each
->name
) != NULL
)
3413 best_fit_len
= arange
->high
- arange
->low
;
3418 *filename_ptr
= best_fit
->file
;
3419 *linenumber_ptr
= best_fit
->line
;
3426 /* Variable table functions. */
3428 /* If SYM is within variable table of UNIT, set FILENAME_PTR and
3429 LINENUMBER_PTR, and return TRUE. */
3432 lookup_symbol_in_variable_table (struct comp_unit
*unit
,
3435 const char **filename_ptr
,
3436 unsigned int *linenumber_ptr
)
3438 struct varinfo
* each
;
3439 const char *name
= bfd_asymbol_name (sym
);
3441 for (each
= unit
->variable_table
; each
; each
= each
->prev_var
)
3442 if (each
->addr
== addr
3444 && each
->file
!= NULL
3445 && each
->name
!= NULL
3446 && strstr (name
, each
->name
) != NULL
)
3451 *filename_ptr
= each
->file
;
3452 *linenumber_ptr
= each
->line
;
3459 static struct comp_unit
*stash_comp_unit (struct dwarf2_debug
*,
3460 struct dwarf2_debug_file
*);
3461 static bool comp_unit_maybe_decode_line_info (struct comp_unit
*);
3464 find_abstract_instance (struct comp_unit
*unit
,
3465 struct attribute
*attr_ptr
,
3466 unsigned int recur_count
,
3469 char **filename_ptr
,
3470 int *linenumber_ptr
)
3472 bfd
*abfd
= unit
->abfd
;
3473 bfd_byte
*info_ptr
= NULL
;
3474 bfd_byte
*info_ptr_end
;
3475 unsigned int abbrev_number
, i
;
3476 struct abbrev_info
*abbrev
;
3477 uint64_t die_ref
= attr_ptr
->u
.val
;
3478 struct attribute attr
;
3480 if (recur_count
== 100)
3483 (_("DWARF error: abstract instance recursion detected"));
3484 bfd_set_error (bfd_error_bad_value
);
3488 /* DW_FORM_ref_addr can reference an entry in a different CU. It
3489 is an offset from the .debug_info section, not the current CU. */
3490 if (attr_ptr
->form
== DW_FORM_ref_addr
)
3492 /* We only support DW_FORM_ref_addr within the same file, so
3493 any relocations should be resolved already. Check this by
3494 testing for a zero die_ref; There can't be a valid reference
3495 to the header of a .debug_info section.
3496 DW_FORM_ref_addr is an offset relative to .debug_info.
3497 Normally when using the GNU linker this is accomplished by
3498 emitting a symbolic reference to a label, because .debug_info
3499 sections are linked at zero. When there are multiple section
3500 groups containing .debug_info, as there might be in a
3501 relocatable object file, it would be reasonable to assume that
3502 a symbolic reference to a label in any .debug_info section
3503 might be used. Since we lay out multiple .debug_info
3504 sections at non-zero VMAs (see place_sections), and read
3505 them contiguously into dwarf_info_buffer, that means the
3506 reference is relative to dwarf_info_buffer. */
3509 info_ptr
= unit
->file
->dwarf_info_buffer
;
3510 info_ptr_end
= info_ptr
+ unit
->file
->dwarf_info_size
;
3511 total
= info_ptr_end
- info_ptr
;
3514 else if (die_ref
>= total
)
3517 (_("DWARF error: invalid abstract instance DIE ref"));
3518 bfd_set_error (bfd_error_bad_value
);
3521 info_ptr
+= die_ref
;
3523 else if (attr_ptr
->form
== DW_FORM_GNU_ref_alt
)
3525 bool first_time
= unit
->stash
->alt
.dwarf_info_buffer
== NULL
;
3527 info_ptr
= read_alt_indirect_ref (unit
, die_ref
);
3529 unit
->stash
->alt
.info_ptr
= unit
->stash
->alt
.dwarf_info_buffer
;
3530 if (info_ptr
== NULL
)
3533 (_("DWARF error: unable to read alt ref %" PRIu64
),
3534 (uint64_t) die_ref
);
3535 bfd_set_error (bfd_error_bad_value
);
3538 info_ptr_end
= (unit
->stash
->alt
.dwarf_info_buffer
3539 + unit
->stash
->alt
.dwarf_info_size
);
3540 if (unit
->stash
->alt
.all_comp_units
)
3541 unit
= unit
->stash
->alt
.all_comp_units
;
3544 if (attr_ptr
->form
== DW_FORM_ref_addr
3545 || attr_ptr
->form
== DW_FORM_GNU_ref_alt
)
3547 /* Now find the CU containing this pointer. */
3548 if (info_ptr
>= unit
->info_ptr_unit
&& info_ptr
< unit
->end_ptr
)
3549 info_ptr_end
= unit
->end_ptr
;
3552 /* Check other CUs to see if they contain the abbrev. */
3553 struct comp_unit
*u
= NULL
;
3554 struct addr_range range
= { info_ptr
, info_ptr
};
3555 splay_tree_node v
= splay_tree_lookup (unit
->file
->comp_unit_tree
,
3556 (splay_tree_key
)&range
);
3558 u
= (struct comp_unit
*)v
->value
;
3560 if (attr_ptr
->form
== DW_FORM_ref_addr
)
3563 u
= stash_comp_unit (unit
->stash
, &unit
->stash
->f
);
3566 if (info_ptr
>= u
->info_ptr_unit
&& info_ptr
< u
->end_ptr
)
3571 if (attr_ptr
->form
== DW_FORM_GNU_ref_alt
)
3574 u
= stash_comp_unit (unit
->stash
, &unit
->stash
->alt
);
3577 if (info_ptr
>= u
->info_ptr_unit
&& info_ptr
< u
->end_ptr
)
3585 (_("DWARF error: unable to locate abstract instance DIE ref %"
3586 PRIu64
), (uint64_t) die_ref
);
3587 bfd_set_error (bfd_error_bad_value
);
3591 info_ptr_end
= unit
->end_ptr
;
3596 /* DW_FORM_ref1, DW_FORM_ref2, DW_FORM_ref4, DW_FORM_ref8 or
3597 DW_FORM_ref_udata. These are all references relative to the
3598 start of the current CU. */
3601 info_ptr
= unit
->info_ptr_unit
;
3602 info_ptr_end
= unit
->end_ptr
;
3603 total
= info_ptr_end
- info_ptr
;
3604 if (!die_ref
|| die_ref
>= total
)
3607 (_("DWARF error: invalid abstract instance DIE ref"));
3608 bfd_set_error (bfd_error_bad_value
);
3611 info_ptr
+= die_ref
;
3614 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
3615 false, info_ptr_end
);
3618 abbrev
= lookup_abbrev (abbrev_number
, unit
->abbrevs
);
3622 (_("DWARF error: could not find abbrev number %u"), abbrev_number
);
3623 bfd_set_error (bfd_error_bad_value
);
3628 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
3630 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
,
3631 info_ptr
, info_ptr_end
);
3632 if (info_ptr
== NULL
)
3637 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
3639 if (*pname
== NULL
&& is_str_form (&attr
))
3641 *pname
= attr
.u
.str
;
3642 if (mangle_style (unit
->lang
) == 0)
3646 case DW_AT_specification
:
3647 if (is_int_form (&attr
)
3648 && !find_abstract_instance (unit
, &attr
, recur_count
+ 1,
3650 filename_ptr
, linenumber_ptr
))
3653 case DW_AT_linkage_name
:
3654 case DW_AT_MIPS_linkage_name
:
3655 /* PR 16949: Corrupt debug info can place
3656 non-string forms into these attributes. */
3657 if (is_str_form (&attr
))
3659 *pname
= attr
.u
.str
;
3663 case DW_AT_decl_file
:
3664 if (!comp_unit_maybe_decode_line_info (unit
))
3666 if (is_int_form (&attr
))
3668 free (*filename_ptr
);
3669 *filename_ptr
= concat_filename (unit
->line_table
,
3673 case DW_AT_decl_line
:
3674 if (is_int_form (&attr
))
3675 *linenumber_ptr
= attr
.u
.val
;
3687 read_ranges (struct comp_unit
*unit
, struct arange
*arange
,
3688 struct trie_node
**trie_root
, uint64_t offset
)
3690 bfd_byte
*ranges_ptr
;
3691 bfd_byte
*ranges_end
;
3692 bfd_vma base_address
= unit
->base_address
;
3694 if (! unit
->file
->dwarf_ranges_buffer
)
3696 if (! read_debug_ranges (unit
))
3700 if (offset
> unit
->file
->dwarf_ranges_size
)
3702 ranges_ptr
= unit
->file
->dwarf_ranges_buffer
+ offset
;
3703 ranges_end
= unit
->file
->dwarf_ranges_buffer
+ unit
->file
->dwarf_ranges_size
;
3710 /* PR 17512: file: 62cada7d. */
3711 if (2u * unit
->addr_size
> (size_t) (ranges_end
- ranges_ptr
))
3714 low_pc
= read_address (unit
, &ranges_ptr
, ranges_end
);
3715 high_pc
= read_address (unit
, &ranges_ptr
, ranges_end
);
3717 if (low_pc
== 0 && high_pc
== 0)
3719 if (low_pc
== (bfd_vma
) -1 && high_pc
!= (bfd_vma
) -1)
3720 base_address
= high_pc
;
3723 if (!arange_add (unit
, arange
, trie_root
,
3724 base_address
+ low_pc
, base_address
+ high_pc
))
3732 read_rnglists (struct comp_unit
*unit
, struct arange
*arange
,
3733 struct trie_node
**trie_root
, uint64_t offset
)
3737 bfd_vma base_address
= unit
->base_address
;
3740 bfd
*abfd
= unit
->abfd
;
3742 if (! unit
->file
->dwarf_rnglists_buffer
)
3744 if (! read_debug_rnglists (unit
))
3748 rngs_ptr
= unit
->file
->dwarf_rnglists_buffer
+ offset
;
3749 if (rngs_ptr
< unit
->file
->dwarf_rnglists_buffer
)
3751 rngs_end
= unit
->file
->dwarf_rnglists_buffer
;
3752 rngs_end
+= unit
->file
->dwarf_rnglists_size
;
3756 enum dwarf_range_list_entry rlet
;
3758 if (rngs_ptr
>= rngs_end
)
3761 rlet
= read_1_byte (abfd
, &rngs_ptr
, rngs_end
);
3765 case DW_RLE_end_of_list
:
3768 case DW_RLE_base_address
:
3769 if (unit
->addr_size
> (size_t) (rngs_end
- rngs_ptr
))
3771 base_address
= read_address (unit
, &rngs_ptr
, rngs_end
);
3774 case DW_RLE_start_length
:
3775 if (unit
->addr_size
> (size_t) (rngs_end
- rngs_ptr
))
3777 low_pc
= read_address (unit
, &rngs_ptr
, rngs_end
);
3779 high_pc
+= _bfd_safe_read_leb128 (abfd
, &rngs_ptr
,
3783 case DW_RLE_offset_pair
:
3784 low_pc
= base_address
;
3785 low_pc
+= _bfd_safe_read_leb128 (abfd
, &rngs_ptr
,
3787 high_pc
= base_address
;
3788 high_pc
+= _bfd_safe_read_leb128 (abfd
, &rngs_ptr
,
3792 case DW_RLE_start_end
:
3793 if (2u * unit
->addr_size
> (size_t) (rngs_end
- rngs_ptr
))
3795 low_pc
= read_address (unit
, &rngs_ptr
, rngs_end
);
3796 high_pc
= read_address (unit
, &rngs_ptr
, rngs_end
);
3799 /* TODO x-variants need .debug_addr support used for split-dwarf. */
3800 case DW_RLE_base_addressx
:
3801 case DW_RLE_startx_endx
:
3802 case DW_RLE_startx_length
:
3807 if (!arange_add (unit
, arange
, trie_root
, low_pc
, high_pc
))
3813 read_rangelist (struct comp_unit
*unit
, struct arange
*arange
,
3814 struct trie_node
**trie_root
, uint64_t offset
)
3816 if (unit
->version
<= 4)
3817 return read_ranges (unit
, arange
, trie_root
, offset
);
3819 return read_rnglists (unit
, arange
, trie_root
, offset
);
3822 static struct funcinfo
*
3823 lookup_func_by_offset (uint64_t offset
, struct funcinfo
* table
)
3825 for (; table
!= NULL
; table
= table
->prev_func
)
3826 if (table
->unit_offset
== offset
)
3831 static struct varinfo
*
3832 lookup_var_by_offset (uint64_t offset
, struct varinfo
* table
)
3836 if (table
->unit_offset
== offset
)
3838 table
= table
->prev_var
;
3845 /* DWARF2 Compilation unit functions. */
3847 static struct funcinfo
*
3848 reverse_funcinfo_list (struct funcinfo
*head
)
3850 struct funcinfo
*rhead
;
3851 struct funcinfo
*temp
;
3853 for (rhead
= NULL
; head
; head
= temp
)
3855 temp
= head
->prev_func
;
3856 head
->prev_func
= rhead
;
3862 static struct varinfo
*
3863 reverse_varinfo_list (struct varinfo
*head
)
3865 struct varinfo
*rhead
;
3866 struct varinfo
*temp
;
3868 for (rhead
= NULL
; head
; head
= temp
)
3870 temp
= head
->prev_var
;
3871 head
->prev_var
= rhead
;
3877 /* Scan over each die in a comp. unit looking for functions to add
3878 to the function table and variables to the variable table. */
3881 scan_unit_for_symbols (struct comp_unit
*unit
)
3883 bfd
*abfd
= unit
->abfd
;
3884 bfd_byte
*info_ptr
= unit
->first_child_die_ptr
;
3885 bfd_byte
*info_ptr_end
= unit
->end_ptr
;
3886 int nesting_level
= 0;
3887 struct nest_funcinfo
3889 struct funcinfo
*func
;
3891 int nested_funcs_size
;
3892 struct funcinfo
*last_func
;
3893 struct varinfo
*last_var
;
3895 /* Maintain a stack of in-scope functions and inlined functions, which we
3896 can use to set the caller_func field. */
3897 nested_funcs_size
= 32;
3898 nested_funcs
= (struct nest_funcinfo
*)
3899 bfd_malloc (nested_funcs_size
* sizeof (*nested_funcs
));
3900 if (nested_funcs
== NULL
)
3902 nested_funcs
[nesting_level
].func
= 0;
3904 /* PR 27484: We must scan the DIEs twice. The first time we look for
3905 function and variable tags and accumulate them into their respective
3906 tables. The second time through we process the attributes of the
3907 functions/variables and augment the table entries. */
3908 while (nesting_level
>= 0)
3910 unsigned int abbrev_number
, i
;
3911 struct abbrev_info
*abbrev
;
3912 struct funcinfo
*func
;
3913 struct varinfo
*var
;
3914 uint64_t current_offset
;
3916 /* PR 17512: file: 9f405d9d. */
3917 if (info_ptr
>= info_ptr_end
)
3920 current_offset
= info_ptr
- unit
->info_ptr_unit
;
3921 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
3922 false, info_ptr_end
);
3923 if (abbrev_number
== 0)
3929 abbrev
= lookup_abbrev (abbrev_number
, unit
->abbrevs
);
3932 static unsigned int previous_failed_abbrev
= -1U;
3934 /* Avoid multiple reports of the same missing abbrev. */
3935 if (abbrev_number
!= previous_failed_abbrev
)
3938 (_("DWARF error: could not find abbrev number %u"),
3940 previous_failed_abbrev
= abbrev_number
;
3942 bfd_set_error (bfd_error_bad_value
);
3946 if (abbrev
->tag
== DW_TAG_subprogram
3947 || abbrev
->tag
== DW_TAG_entry_point
3948 || abbrev
->tag
== DW_TAG_inlined_subroutine
)
3950 size_t amt
= sizeof (struct funcinfo
);
3953 func
= (struct funcinfo
*) bfd_zalloc (abfd
, amt
);
3956 func
->tag
= abbrev
->tag
;
3957 func
->prev_func
= unit
->function_table
;
3958 func
->unit_offset
= current_offset
;
3959 unit
->function_table
= func
;
3960 unit
->number_of_functions
++;
3961 BFD_ASSERT (!unit
->cached
);
3963 if (func
->tag
== DW_TAG_inlined_subroutine
)
3964 for (i
= nesting_level
; i
-- != 0; )
3965 if (nested_funcs
[i
].func
)
3967 func
->caller_func
= nested_funcs
[i
].func
;
3970 nested_funcs
[nesting_level
].func
= func
;
3975 if (abbrev
->tag
== DW_TAG_variable
3976 || abbrev
->tag
== DW_TAG_member
)
3978 size_t amt
= sizeof (struct varinfo
);
3980 var
= (struct varinfo
*) bfd_zalloc (abfd
, amt
);
3983 var
->tag
= abbrev
->tag
;
3985 var
->prev_var
= unit
->variable_table
;
3986 unit
->variable_table
= var
;
3987 var
->unit_offset
= current_offset
;
3988 /* PR 18205: Missing debug information can cause this
3989 var to be attached to an already cached unit. */
3994 /* No inline function in scope at this nesting level. */
3995 nested_funcs
[nesting_level
].func
= 0;
3998 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
4000 struct attribute attr
;
4002 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
],
4003 unit
, info_ptr
, info_ptr_end
);
4004 if (info_ptr
== NULL
)
4008 if (abbrev
->has_children
)
4012 if (nesting_level
>= nested_funcs_size
)
4014 struct nest_funcinfo
*tmp
;
4016 nested_funcs_size
*= 2;
4017 tmp
= (struct nest_funcinfo
*)
4018 bfd_realloc (nested_funcs
,
4019 nested_funcs_size
* sizeof (*nested_funcs
));
4024 nested_funcs
[nesting_level
].func
= 0;
4028 unit
->function_table
= reverse_funcinfo_list (unit
->function_table
);
4029 unit
->variable_table
= reverse_varinfo_list (unit
->variable_table
);
4031 /* This is the second pass over the abbrevs. */
4032 info_ptr
= unit
->first_child_die_ptr
;
4038 while (nesting_level
>= 0)
4040 unsigned int abbrev_number
, i
;
4041 struct abbrev_info
*abbrev
;
4042 struct attribute attr
;
4043 struct funcinfo
*func
;
4044 struct varinfo
*var
;
4046 bfd_vma high_pc
= 0;
4047 bool high_pc_relative
= false;
4048 uint64_t current_offset
;
4050 /* PR 17512: file: 9f405d9d. */
4051 if (info_ptr
>= info_ptr_end
)
4054 current_offset
= info_ptr
- unit
->info_ptr_unit
;
4055 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
4056 false, info_ptr_end
);
4057 if (! abbrev_number
)
4063 abbrev
= lookup_abbrev (abbrev_number
, unit
->abbrevs
);
4064 /* This should have been handled above. */
4065 BFD_ASSERT (abbrev
!= NULL
);
4069 if (abbrev
->tag
== DW_TAG_subprogram
4070 || abbrev
->tag
== DW_TAG_entry_point
4071 || abbrev
->tag
== DW_TAG_inlined_subroutine
)
4074 && last_func
->prev_func
4075 && last_func
->prev_func
->unit_offset
== current_offset
)
4076 func
= last_func
->prev_func
;
4078 func
= lookup_func_by_offset (current_offset
, unit
->function_table
);
4085 else if (abbrev
->tag
== DW_TAG_variable
4086 || abbrev
->tag
== DW_TAG_member
)
4089 && last_var
->prev_var
4090 && last_var
->prev_var
->unit_offset
== current_offset
)
4091 var
= last_var
->prev_var
;
4093 var
= lookup_var_by_offset (current_offset
, unit
->variable_table
);
4101 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
4103 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
],
4104 unit
, info_ptr
, info_ptr_end
);
4105 if (info_ptr
== NULL
)
4112 case DW_AT_call_file
:
4113 if (is_int_form (&attr
))
4115 free (func
->caller_file
);
4116 func
->caller_file
= concat_filename (unit
->line_table
,
4121 case DW_AT_call_line
:
4122 if (is_int_form (&attr
))
4123 func
->caller_line
= attr
.u
.val
;
4126 case DW_AT_abstract_origin
:
4127 case DW_AT_specification
:
4128 if (is_int_form (&attr
)
4129 && !find_abstract_instance (unit
, &attr
, 0,
4138 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
4140 if (func
->name
== NULL
&& is_str_form (&attr
))
4142 func
->name
= attr
.u
.str
;
4143 if (mangle_style (unit
->lang
) == 0)
4144 func
->is_linkage
= true;
4148 case DW_AT_linkage_name
:
4149 case DW_AT_MIPS_linkage_name
:
4150 /* PR 16949: Corrupt debug info can place
4151 non-string forms into these attributes. */
4152 if (is_str_form (&attr
))
4154 func
->name
= attr
.u
.str
;
4155 func
->is_linkage
= true;
4160 if (is_int_form (&attr
))
4161 low_pc
= attr
.u
.val
;
4165 if (is_int_form (&attr
))
4167 high_pc
= attr
.u
.val
;
4168 high_pc_relative
= attr
.form
!= DW_FORM_addr
;
4173 if (is_int_form (&attr
)
4174 && !read_rangelist (unit
, &func
->arange
,
4175 &unit
->file
->trie_root
, attr
.u
.val
))
4179 case DW_AT_decl_file
:
4180 if (is_int_form (&attr
))
4183 func
->file
= concat_filename (unit
->line_table
,
4188 case DW_AT_decl_line
:
4189 if (is_int_form (&attr
))
4190 func
->line
= attr
.u
.val
;
4201 case DW_AT_specification
:
4202 if (is_int_form (&attr
) && attr
.u
.val
)
4205 if (!find_abstract_instance (unit
, &attr
, 0,
4211 _bfd_error_handler (_("DWARF error: could not find "
4212 "variable specification "
4214 (unsigned long) attr
.u
.val
);
4221 if (is_str_form (&attr
))
4222 var
->name
= attr
.u
.str
;
4225 case DW_AT_decl_file
:
4226 if (is_int_form (&attr
))
4229 var
->file
= concat_filename (unit
->line_table
,
4234 case DW_AT_decl_line
:
4235 if (is_int_form (&attr
))
4236 var
->line
= attr
.u
.val
;
4239 case DW_AT_external
:
4240 if (is_int_form (&attr
) && attr
.u
.val
!= 0)
4244 case DW_AT_location
:
4248 case DW_FORM_block1
:
4249 case DW_FORM_block2
:
4250 case DW_FORM_block4
:
4251 case DW_FORM_exprloc
:
4252 if (attr
.u
.blk
->data
!= NULL
4253 && *attr
.u
.blk
->data
== DW_OP_addr
)
4257 /* Verify that DW_OP_addr is the only opcode in the
4258 location, in which case the block size will be 1
4259 plus the address size. */
4260 /* ??? For TLS variables, gcc can emit
4261 DW_OP_addr <addr> DW_OP_GNU_push_tls_address
4262 which we don't handle here yet. */
4263 if (attr
.u
.blk
->size
== unit
->addr_size
+ 1U)
4264 var
->addr
= bfd_get (unit
->addr_size
* 8,
4266 attr
.u
.blk
->data
+ 1);
4281 if (abbrev
->has_children
)
4284 if (high_pc_relative
)
4287 if (func
&& high_pc
!= 0)
4289 if (!arange_add (unit
, &func
->arange
, &unit
->file
->trie_root
,
4295 unit
->function_table
= reverse_funcinfo_list (unit
->function_table
);
4296 unit
->variable_table
= reverse_varinfo_list (unit
->variable_table
);
4298 free (nested_funcs
);
4302 free (nested_funcs
);
4306 /* Read the attributes of the form strx and addrx. */
4309 reread_attribute (struct comp_unit
*unit
,
4310 struct attribute
*attr
,
4313 bool *high_pc_relative
,
4316 if (is_strx_form (attr
->form
))
4317 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
4318 if (is_addrx_form (attr
->form
))
4319 attr
->u
.val
= read_indexed_address (attr
->u
.val
, unit
);
4323 case DW_AT_stmt_list
:
4325 unit
->line_offset
= attr
->u
.val
;
4329 if (is_str_form (attr
))
4330 unit
->name
= attr
->u
.str
;
4334 *low_pc
= attr
->u
.val
;
4336 unit
->base_address
= *low_pc
;
4340 *high_pc
= attr
->u
.val
;
4341 *high_pc_relative
= attr
->form
!= DW_FORM_addr
;
4345 if (!read_rangelist (unit
, &unit
->arange
,
4346 &unit
->file
->trie_root
, attr
->u
.val
))
4350 case DW_AT_comp_dir
:
4352 char *comp_dir
= attr
->u
.str
;
4354 if (!is_str_form (attr
))
4357 (_("DWARF error: DW_AT_comp_dir attribute encountered "
4358 "with a non-string form"));
4364 char *cp
= strchr (comp_dir
, ':');
4366 if (cp
&& cp
!= comp_dir
&& cp
[-1] == '.' && cp
[1] == '/')
4369 unit
->comp_dir
= comp_dir
;
4373 case DW_AT_language
:
4374 unit
->lang
= attr
->u
.val
;
4380 /* Parse a DWARF2 compilation unit starting at INFO_PTR. UNIT_LENGTH
4381 includes the compilation unit header that proceeds the DIE's, but
4382 does not include the length field that precedes each compilation
4383 unit header. END_PTR points one past the end of this comp unit.
4384 OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
4386 This routine does not read the whole compilation unit; only enough
4387 to get to the line number information for the compilation unit. */
4389 static struct comp_unit
*
4390 parse_comp_unit (struct dwarf2_debug
*stash
,
4391 struct dwarf2_debug_file
*file
,
4393 bfd_vma unit_length
,
4394 bfd_byte
*info_ptr_unit
,
4395 unsigned int offset_size
)
4397 struct comp_unit
* unit
;
4398 unsigned int version
;
4399 uint64_t abbrev_offset
= 0;
4400 /* Initialize it just to avoid a GCC false warning. */
4401 unsigned int addr_size
= -1;
4402 struct abbrev_info
** abbrevs
;
4403 unsigned int abbrev_number
, i
;
4404 struct abbrev_info
*abbrev
;
4405 struct attribute attr
;
4406 bfd_byte
*end_ptr
= info_ptr
+ unit_length
;
4409 bfd_vma high_pc
= 0;
4410 bfd
*abfd
= file
->bfd_ptr
;
4411 bool high_pc_relative
= false;
4412 enum dwarf_unit_type unit_type
;
4413 struct attribute
*str_addrp
= NULL
;
4414 size_t str_count
= 0;
4415 size_t str_alloc
= 0;
4416 bool compunit_flag
= false;
4418 version
= read_2_bytes (abfd
, &info_ptr
, end_ptr
);
4419 if (version
< 2 || version
> 5)
4421 /* PR 19872: A version number of 0 probably means that there is padding
4422 at the end of the .debug_info section. Gold puts it there when
4423 performing an incremental link, for example. So do not generate
4424 an error, just return a NULL. */
4428 (_("DWARF error: found dwarf version '%u', this reader"
4429 " only handles version 2, 3, 4 and 5 information"), version
);
4430 bfd_set_error (bfd_error_bad_value
);
4436 unit_type
= DW_UT_compile
;
4439 unit_type
= read_1_byte (abfd
, &info_ptr
, end_ptr
);
4440 addr_size
= read_1_byte (abfd
, &info_ptr
, end_ptr
);
4443 BFD_ASSERT (offset_size
== 4 || offset_size
== 8);
4444 if (offset_size
== 4)
4445 abbrev_offset
= read_4_bytes (abfd
, &info_ptr
, end_ptr
);
4447 abbrev_offset
= read_8_bytes (abfd
, &info_ptr
, end_ptr
);
4450 addr_size
= read_1_byte (abfd
, &info_ptr
, end_ptr
);
4455 /* Skip type signature. */
4458 /* Skip type offset. */
4459 info_ptr
+= offset_size
;
4462 case DW_UT_skeleton
:
4463 /* Skip DWO_id field. */
4471 if (addr_size
> sizeof (bfd_vma
))
4474 /* xgettext: c-format */
4475 (_("DWARF error: found address size '%u', this reader"
4476 " can not handle sizes greater than '%u'"),
4478 (unsigned int) sizeof (bfd_vma
));
4479 bfd_set_error (bfd_error_bad_value
);
4483 if (addr_size
!= 2 && addr_size
!= 4 && addr_size
!= 8)
4486 ("DWARF error: found address size '%u', this reader"
4487 " can only handle address sizes '2', '4' and '8'", addr_size
);
4488 bfd_set_error (bfd_error_bad_value
);
4492 /* Read the abbrevs for this compilation unit into a table. */
4493 abbrevs
= read_abbrevs (abfd
, abbrev_offset
, stash
, file
);
4497 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
4499 if (! abbrev_number
)
4501 /* PR 19872: An abbrev number of 0 probably means that there is padding
4502 at the end of the .debug_abbrev section. Gold puts it there when
4503 performing an incremental link, for example. So do not generate
4504 an error, just return a NULL. */
4508 abbrev
= lookup_abbrev (abbrev_number
, abbrevs
);
4511 _bfd_error_handler (_("DWARF error: could not find abbrev number %u"),
4513 bfd_set_error (bfd_error_bad_value
);
4517 amt
= sizeof (struct comp_unit
);
4518 unit
= (struct comp_unit
*) bfd_zalloc (abfd
, amt
);
4522 unit
->version
= version
;
4523 unit
->addr_size
= addr_size
;
4524 unit
->offset_size
= offset_size
;
4525 unit
->abbrevs
= abbrevs
;
4526 unit
->end_ptr
= end_ptr
;
4527 unit
->stash
= stash
;
4529 unit
->info_ptr_unit
= info_ptr_unit
;
4531 if (abbrev
->tag
== DW_TAG_compile_unit
)
4532 compunit_flag
= true;
4534 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
4536 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
, end_ptr
);
4537 if (info_ptr
== NULL
)
4540 /* Identify attributes of the form strx* and addrx* which come before
4541 DW_AT_str_offsets_base and DW_AT_addr_base respectively in the CU.
4542 Store the attributes in an array and process them later. */
4543 if ((unit
->dwarf_str_offset
== 0 && is_strx_form (attr
.form
))
4544 || (unit
->dwarf_addr_offset
== 0 && is_addrx_form (attr
.form
)))
4546 if (str_count
<= str_alloc
)
4548 str_alloc
= 2 * str_alloc
+ 200;
4549 str_addrp
= bfd_realloc (str_addrp
,
4550 str_alloc
* sizeof (*str_addrp
));
4551 if (str_addrp
== NULL
)
4554 str_addrp
[str_count
] = attr
;
4559 /* Store the data if it is of an attribute we want to keep in a
4560 partial symbol table. */
4563 case DW_AT_stmt_list
:
4564 if (is_int_form (&attr
))
4567 unit
->line_offset
= attr
.u
.val
;
4572 if (is_str_form (&attr
))
4573 unit
->name
= attr
.u
.str
;
4577 if (is_int_form (&attr
))
4579 low_pc
= attr
.u
.val
;
4580 /* If the compilation unit DIE has a DW_AT_low_pc attribute,
4581 this is the base address to use when reading location
4582 lists or range lists. */
4584 unit
->base_address
= low_pc
;
4589 if (is_int_form (&attr
))
4591 high_pc
= attr
.u
.val
;
4592 high_pc_relative
= attr
.form
!= DW_FORM_addr
;
4597 if (is_int_form (&attr
)
4598 && !read_rangelist (unit
, &unit
->arange
,
4599 &unit
->file
->trie_root
, attr
.u
.val
))
4603 case DW_AT_comp_dir
:
4605 char *comp_dir
= attr
.u
.str
;
4607 /* PR 17512: file: 1fe726be. */
4608 if (!is_str_form (&attr
))
4611 (_("DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"));
4617 /* Irix 6.2 native cc prepends <machine>.: to the compilation
4618 directory, get rid of it. */
4619 char *cp
= strchr (comp_dir
, ':');
4621 if (cp
&& cp
!= comp_dir
&& cp
[-1] == '.' && cp
[1] == '/')
4624 unit
->comp_dir
= comp_dir
;
4628 case DW_AT_language
:
4629 if (is_int_form (&attr
))
4630 unit
->lang
= attr
.u
.val
;
4633 case DW_AT_addr_base
:
4634 unit
->dwarf_addr_offset
= attr
.u
.val
;
4637 case DW_AT_str_offsets_base
:
4638 unit
->dwarf_str_offset
= attr
.u
.val
;
4646 for (i
= 0; i
< str_count
; ++i
)
4647 reread_attribute (unit
, &str_addrp
[i
], &low_pc
, &high_pc
,
4648 &high_pc_relative
, compunit_flag
);
4650 if (high_pc_relative
)
4654 if (!arange_add (unit
, &unit
->arange
, &unit
->file
->trie_root
,
4659 unit
->first_child_die_ptr
= info_ptr
;
4670 /* Return TRUE if UNIT may contain the address given by ADDR. When
4671 there are functions written entirely with inline asm statements, the
4672 range info in the compilation unit header may not be correct. We
4673 need to consult the line info table to see if a compilation unit
4674 really contains the given address. */
4677 comp_unit_may_contain_address (struct comp_unit
*unit
, bfd_vma addr
)
4679 struct arange
*arange
;
4684 if (unit
->arange
.high
== 0 /* No ranges have been computed yet. */
4685 || unit
->line_table
== NULL
) /* The line info table has not been loaded. */
4688 for (arange
= &unit
->arange
; arange
!= NULL
; arange
= arange
->next
)
4689 if (addr
>= arange
->low
&& addr
< arange
->high
)
4695 /* If UNIT contains ADDR, set the output parameters to the values for
4696 the line containing ADDR and return TRUE. Otherwise return FALSE.
4697 The output parameters, FILENAME_PTR, FUNCTION_PTR, and
4698 LINENUMBER_PTR, are pointers to the objects to be filled in. */
4701 comp_unit_find_nearest_line (struct comp_unit
*unit
,
4703 const char **filename_ptr
,
4704 struct funcinfo
**function_ptr
,
4705 unsigned int *linenumber_ptr
,
4706 unsigned int *discriminator_ptr
)
4708 bool line_p
, func_p
;
4710 if (!comp_unit_maybe_decode_line_info (unit
))
4713 *function_ptr
= NULL
;
4714 func_p
= lookup_address_in_function_table (unit
, addr
, function_ptr
);
4716 if (func_p
&& (*function_ptr
)->tag
== DW_TAG_inlined_subroutine
)
4717 unit
->stash
->inliner_chain
= *function_ptr
;
4719 line_p
= lookup_address_in_line_info_table (unit
->line_table
, addr
,
4723 return line_p
|| func_p
;
4726 /* Check to see if line info is already decoded in a comp_unit.
4727 If not, decode it. Returns TRUE if no errors were encountered;
4731 comp_unit_maybe_decode_line_info (struct comp_unit
*unit
)
4736 if (! unit
->line_table
)
4738 if (! unit
->stmtlist
)
4744 unit
->line_table
= decode_line_info (unit
);
4746 if (! unit
->line_table
)
4752 if (unit
->first_child_die_ptr
< unit
->end_ptr
4753 && ! scan_unit_for_symbols (unit
))
4763 /* If UNIT contains SYM at ADDR, set the output parameters to the
4764 values for the line containing SYM. The output parameters,
4765 FILENAME_PTR, and LINENUMBER_PTR, are pointers to the objects to be
4768 Return TRUE if UNIT contains SYM, and no errors were encountered;
4772 comp_unit_find_line (struct comp_unit
*unit
,
4775 const char **filename_ptr
,
4776 unsigned int *linenumber_ptr
)
4778 if (!comp_unit_maybe_decode_line_info (unit
))
4781 if (sym
->flags
& BSF_FUNCTION
)
4782 return lookup_symbol_in_function_table (unit
, sym
, addr
,
4786 return lookup_symbol_in_variable_table (unit
, sym
, addr
,
4791 /* Extract all interesting funcinfos and varinfos of a compilation
4792 unit into hash tables for faster lookup. Returns TRUE if no
4793 errors were enountered; FALSE otherwise. */
4796 comp_unit_hash_info (struct dwarf2_debug
*stash
,
4797 struct comp_unit
*unit
,
4798 struct info_hash_table
*funcinfo_hash_table
,
4799 struct info_hash_table
*varinfo_hash_table
)
4801 struct funcinfo
* each_func
;
4802 struct varinfo
* each_var
;
4805 BFD_ASSERT (stash
->info_hash_status
!= STASH_INFO_HASH_DISABLED
);
4807 if (!comp_unit_maybe_decode_line_info (unit
))
4810 BFD_ASSERT (!unit
->cached
);
4812 /* To preserve the original search order, we went to visit the function
4813 infos in the reversed order of the list. However, making the list
4814 bi-directional use quite a bit of extra memory. So we reverse
4815 the list first, traverse the list in the now reversed order and
4816 finally reverse the list again to get back the original order. */
4817 unit
->function_table
= reverse_funcinfo_list (unit
->function_table
);
4818 for (each_func
= unit
->function_table
;
4820 each_func
= each_func
->prev_func
)
4822 /* Skip nameless functions. */
4823 if (each_func
->name
)
4824 /* There is no need to copy name string into hash table as
4825 name string is either in the dwarf string buffer or
4826 info in the stash. */
4827 okay
= insert_info_hash_table (funcinfo_hash_table
, each_func
->name
,
4828 (void*) each_func
, false);
4830 unit
->function_table
= reverse_funcinfo_list (unit
->function_table
);
4834 /* We do the same for variable infos. */
4835 unit
->variable_table
= reverse_varinfo_list (unit
->variable_table
);
4836 for (each_var
= unit
->variable_table
;
4838 each_var
= each_var
->prev_var
)
4840 /* Skip stack vars and vars with no files or names. */
4841 if (! each_var
->stack
4842 && each_var
->file
!= NULL
4843 && each_var
->name
!= NULL
)
4844 /* There is no need to copy name string into hash table as
4845 name string is either in the dwarf string buffer or
4846 info in the stash. */
4847 okay
= insert_info_hash_table (varinfo_hash_table
, each_var
->name
,
4848 (void*) each_var
, false);
4851 unit
->variable_table
= reverse_varinfo_list (unit
->variable_table
);
4852 unit
->cached
= true;
4856 /* Locate a section in a BFD containing debugging info. The search starts
4857 from the section after AFTER_SEC, or from the first section in the BFD if
4858 AFTER_SEC is NULL. The search works by examining the names of the
4859 sections. There are three permissiable names. The first two are given
4860 by DEBUG_SECTIONS[debug_info] (whose standard DWARF2 names are .debug_info
4861 and .zdebug_info). The third is a prefix .gnu.linkonce.wi.
4862 This is a variation on the .debug_info section which has a checksum
4863 describing the contents appended onto the name. This allows the linker to
4864 identify and discard duplicate debugging sections for different
4865 compilation units. */
4866 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
4869 find_debug_info (bfd
*abfd
, const struct dwarf_debug_section
*debug_sections
,
4870 asection
*after_sec
)
4875 if (after_sec
== NULL
)
4877 look
= debug_sections
[debug_info
].uncompressed_name
;
4878 msec
= bfd_get_section_by_name (abfd
, look
);
4879 /* Testing SEC_HAS_CONTENTS is an anti-fuzzer measure. Of
4880 course debug sections always have contents. */
4881 if (msec
!= NULL
&& (msec
->flags
& SEC_HAS_CONTENTS
) != 0)
4884 look
= debug_sections
[debug_info
].compressed_name
;
4885 msec
= bfd_get_section_by_name (abfd
, look
);
4886 if (msec
!= NULL
&& (msec
->flags
& SEC_HAS_CONTENTS
) != 0)
4889 for (msec
= abfd
->sections
; msec
!= NULL
; msec
= msec
->next
)
4890 if ((msec
->flags
& SEC_HAS_CONTENTS
) != 0
4891 && startswith (msec
->name
, GNU_LINKONCE_INFO
))
4897 for (msec
= after_sec
->next
; msec
!= NULL
; msec
= msec
->next
)
4899 if ((msec
->flags
& SEC_HAS_CONTENTS
) == 0)
4902 look
= debug_sections
[debug_info
].uncompressed_name
;
4903 if (strcmp (msec
->name
, look
) == 0)
4906 look
= debug_sections
[debug_info
].compressed_name
;
4907 if (look
!= NULL
&& strcmp (msec
->name
, look
) == 0)
4910 if (startswith (msec
->name
, GNU_LINKONCE_INFO
))
4917 /* Transfer VMAs from object file to separate debug file. */
4920 set_debug_vma (bfd
*orig_bfd
, bfd
*debug_bfd
)
4924 for (s
= orig_bfd
->sections
, d
= debug_bfd
->sections
;
4925 s
!= NULL
&& d
!= NULL
;
4926 s
= s
->next
, d
= d
->next
)
4928 if ((d
->flags
& SEC_DEBUGGING
) != 0)
4930 /* ??? Assumes 1-1 correspondence between sections in the
4932 if (strcmp (s
->name
, d
->name
) == 0)
4934 d
->output_section
= s
->output_section
;
4935 d
->output_offset
= s
->output_offset
;
4941 /* If the dwarf2 info was found in a separate debug file, return the
4942 debug file section corresponding to the section in the original file
4943 and the debug file symbols. */
4946 _bfd_dwarf2_stash_syms (struct dwarf2_debug
*stash
, bfd
*abfd
,
4947 asection
**sec
, asymbol
***syms
)
4949 if (stash
->f
.bfd_ptr
!= abfd
)
4955 *syms
= stash
->f
.syms
;
4959 for (s
= abfd
->sections
, d
= stash
->f
.bfd_ptr
->sections
;
4960 s
!= NULL
&& d
!= NULL
;
4961 s
= s
->next
, d
= d
->next
)
4963 if ((d
->flags
& SEC_DEBUGGING
) != 0)
4966 && strcmp (s
->name
, d
->name
) == 0)
4969 *syms
= stash
->f
.syms
;
4976 /* Unset vmas for adjusted sections in STASH. */
4979 unset_sections (struct dwarf2_debug
*stash
)
4982 struct adjusted_section
*p
;
4984 i
= stash
->adjusted_section_count
;
4985 p
= stash
->adjusted_sections
;
4986 for (; i
> 0; i
--, p
++)
4987 p
->section
->vma
= p
->orig_vma
;
4990 /* Set VMAs for allocated and .debug_info sections in ORIG_BFD, a
4991 relocatable object file. VMAs are normally all zero in relocatable
4992 object files, so if we want to distinguish locations in sections by
4993 address we need to set VMAs so the sections do not overlap. We
4994 also set VMA on .debug_info so that when we have multiple
4995 .debug_info sections (or the linkonce variant) they also do not
4996 overlap. The multiple .debug_info sections make up a single
4997 logical section. ??? We should probably do the same for other
5001 place_sections (bfd
*orig_bfd
, struct dwarf2_debug
*stash
)
5004 struct adjusted_section
*p
;
5006 const char *debug_info_name
;
5008 if (stash
->adjusted_section_count
!= 0)
5010 i
= stash
->adjusted_section_count
;
5011 p
= stash
->adjusted_sections
;
5012 for (; i
> 0; i
--, p
++)
5013 p
->section
->vma
= p
->adj_vma
;
5017 debug_info_name
= stash
->debug_sections
[debug_info
].uncompressed_name
;
5024 for (sect
= abfd
->sections
; sect
!= NULL
; sect
= sect
->next
)
5028 if (sect
->output_section
!= NULL
5029 && sect
->output_section
!= sect
5030 && (sect
->flags
& SEC_DEBUGGING
) == 0)
5033 is_debug_info
= (strcmp (sect
->name
, debug_info_name
) == 0
5034 || startswith (sect
->name
, GNU_LINKONCE_INFO
));
5036 if (!((sect
->flags
& SEC_ALLOC
) != 0 && abfd
== orig_bfd
)
5042 if (abfd
== stash
->f
.bfd_ptr
)
5044 abfd
= stash
->f
.bfd_ptr
;
5048 stash
->adjusted_section_count
= -1;
5051 bfd_vma last_vma
= 0, last_dwarf
= 0;
5052 size_t amt
= i
* sizeof (struct adjusted_section
);
5054 p
= (struct adjusted_section
*) bfd_malloc (amt
);
5058 stash
->adjusted_sections
= p
;
5059 stash
->adjusted_section_count
= i
;
5066 for (sect
= abfd
->sections
; sect
!= NULL
; sect
= sect
->next
)
5071 if (sect
->output_section
!= NULL
5072 && sect
->output_section
!= sect
5073 && (sect
->flags
& SEC_DEBUGGING
) == 0)
5076 is_debug_info
= (strcmp (sect
->name
, debug_info_name
) == 0
5077 || startswith (sect
->name
, GNU_LINKONCE_INFO
));
5079 if (!((sect
->flags
& SEC_ALLOC
) != 0 && abfd
== orig_bfd
)
5083 sz
= sect
->rawsize
? sect
->rawsize
: sect
->size
;
5086 p
->orig_vma
= sect
->vma
;
5088 bfd_vma
*v
= is_debug_info
? &last_dwarf
: &last_vma
;
5089 /* Align the new address to the current section
5091 bfd_vma mask
= -(bfd_vma
) 1 << sect
->alignment_power
;
5092 *v
= (*v
+ ~mask
) & mask
;
5096 p
->adj_vma
= sect
->vma
;
5099 if (abfd
== stash
->f
.bfd_ptr
)
5101 abfd
= stash
->f
.bfd_ptr
;
5105 if (orig_bfd
!= stash
->f
.bfd_ptr
)
5106 set_debug_vma (orig_bfd
, stash
->f
.bfd_ptr
);
5111 /* Look up a funcinfo by name using the given info hash table. If found,
5112 also update the locations pointed to by filename_ptr and linenumber_ptr.
5114 This function returns TRUE if a funcinfo that matches the given symbol
5115 and address is found with any error; otherwise it returns FALSE. */
5118 info_hash_lookup_funcinfo (struct info_hash_table
*hash_table
,
5121 const char **filename_ptr
,
5122 unsigned int *linenumber_ptr
)
5124 struct funcinfo
* each_func
;
5125 struct funcinfo
* best_fit
= NULL
;
5126 bfd_vma best_fit_len
= (bfd_vma
) -1;
5127 struct info_list_node
*node
;
5128 struct arange
*arange
;
5129 const char *name
= bfd_asymbol_name (sym
);
5131 for (node
= lookup_info_hash_table (hash_table
, name
);
5135 each_func
= (struct funcinfo
*) node
->info
;
5136 for (arange
= &each_func
->arange
;
5138 arange
= arange
->next
)
5140 if (addr
>= arange
->low
5141 && addr
< arange
->high
5142 && arange
->high
- arange
->low
< best_fit_len
)
5144 best_fit
= each_func
;
5145 best_fit_len
= arange
->high
- arange
->low
;
5152 *filename_ptr
= best_fit
->file
;
5153 *linenumber_ptr
= best_fit
->line
;
5160 /* Look up a varinfo by name using the given info hash table. If found,
5161 also update the locations pointed to by filename_ptr and linenumber_ptr.
5163 This function returns TRUE if a varinfo that matches the given symbol
5164 and address is found with any error; otherwise it returns FALSE. */
5167 info_hash_lookup_varinfo (struct info_hash_table
*hash_table
,
5170 const char **filename_ptr
,
5171 unsigned int *linenumber_ptr
)
5173 struct varinfo
* each
;
5174 struct info_list_node
*node
;
5175 const char *name
= bfd_asymbol_name (sym
);
5177 for (node
= lookup_info_hash_table (hash_table
, name
);
5181 each
= (struct varinfo
*) node
->info
;
5182 if (each
->addr
== addr
)
5184 *filename_ptr
= each
->file
;
5185 *linenumber_ptr
= each
->line
;
5193 /* Update the funcinfo and varinfo info hash tables if they are
5194 not up to date. Returns TRUE if there is no error; otherwise
5195 returns FALSE and disable the info hash tables. */
5198 stash_maybe_update_info_hash_tables (struct dwarf2_debug
*stash
)
5200 struct comp_unit
*each
;
5202 /* Exit if hash tables are up-to-date. */
5203 if (stash
->f
.all_comp_units
== stash
->hash_units_head
)
5206 if (stash
->hash_units_head
)
5207 each
= stash
->hash_units_head
->prev_unit
;
5209 each
= stash
->f
.last_comp_unit
;
5213 if (!comp_unit_hash_info (stash
, each
, stash
->funcinfo_hash_table
,
5214 stash
->varinfo_hash_table
))
5216 stash
->info_hash_status
= STASH_INFO_HASH_DISABLED
;
5219 each
= each
->prev_unit
;
5222 stash
->hash_units_head
= stash
->f
.all_comp_units
;
5226 /* Check consistency of info hash tables. This is for debugging only. */
5228 static void ATTRIBUTE_UNUSED
5229 stash_verify_info_hash_table (struct dwarf2_debug
*stash
)
5231 struct comp_unit
*each_unit
;
5232 struct funcinfo
*each_func
;
5233 struct varinfo
*each_var
;
5234 struct info_list_node
*node
;
5237 for (each_unit
= stash
->f
.all_comp_units
;
5239 each_unit
= each_unit
->next_unit
)
5241 for (each_func
= each_unit
->function_table
;
5243 each_func
= each_func
->prev_func
)
5245 if (!each_func
->name
)
5247 node
= lookup_info_hash_table (stash
->funcinfo_hash_table
,
5251 while (node
&& !found
)
5253 found
= node
->info
== each_func
;
5259 for (each_var
= each_unit
->variable_table
;
5261 each_var
= each_var
->prev_var
)
5263 if (!each_var
->name
|| !each_var
->file
|| each_var
->stack
)
5265 node
= lookup_info_hash_table (stash
->varinfo_hash_table
,
5269 while (node
&& !found
)
5271 found
= node
->info
== each_var
;
5279 /* Check to see if we want to enable the info hash tables, which consume
5280 quite a bit of memory. Currently we only check the number times
5281 bfd_dwarf2_find_line is called. In the future, we may also want to
5282 take the number of symbols into account. */
5285 stash_maybe_enable_info_hash_tables (bfd
*abfd
, struct dwarf2_debug
*stash
)
5287 BFD_ASSERT (stash
->info_hash_status
== STASH_INFO_HASH_OFF
);
5289 if (stash
->info_hash_count
++ < STASH_INFO_HASH_TRIGGER
)
5292 /* FIXME: Maybe we should check the reduce_memory_overheads
5293 and optimize fields in the bfd_link_info structure ? */
5295 /* Create hash tables. */
5296 stash
->funcinfo_hash_table
= create_info_hash_table (abfd
);
5297 stash
->varinfo_hash_table
= create_info_hash_table (abfd
);
5298 if (!stash
->funcinfo_hash_table
|| !stash
->varinfo_hash_table
)
5300 /* Turn off info hashes if any allocation above fails. */
5301 stash
->info_hash_status
= STASH_INFO_HASH_DISABLED
;
5304 /* We need a forced update so that the info hash tables will
5305 be created even though there is no compilation unit. That
5306 happens if STASH_INFO_HASH_TRIGGER is 0. */
5307 if (stash_maybe_update_info_hash_tables (stash
))
5308 stash
->info_hash_status
= STASH_INFO_HASH_ON
;
5311 /* Find the file and line associated with a symbol and address using the
5312 info hash tables of a stash. If there is a match, the function returns
5313 TRUE and update the locations pointed to by filename_ptr and linenumber_ptr;
5314 otherwise it returns FALSE. */
5317 stash_find_line_fast (struct dwarf2_debug
*stash
,
5320 const char **filename_ptr
,
5321 unsigned int *linenumber_ptr
)
5323 BFD_ASSERT (stash
->info_hash_status
== STASH_INFO_HASH_ON
);
5325 if (sym
->flags
& BSF_FUNCTION
)
5326 return info_hash_lookup_funcinfo (stash
->funcinfo_hash_table
, sym
, addr
,
5327 filename_ptr
, linenumber_ptr
);
5328 return info_hash_lookup_varinfo (stash
->varinfo_hash_table
, sym
, addr
,
5329 filename_ptr
, linenumber_ptr
);
5332 /* Save current section VMAs. */
5335 save_section_vma (const bfd
*abfd
, struct dwarf2_debug
*stash
)
5340 if (abfd
->section_count
== 0)
5342 stash
->sec_vma
= bfd_malloc (sizeof (*stash
->sec_vma
) * abfd
->section_count
);
5343 if (stash
->sec_vma
== NULL
)
5345 stash
->sec_vma_count
= abfd
->section_count
;
5346 for (i
= 0, s
= abfd
->sections
;
5347 s
!= NULL
&& i
< abfd
->section_count
;
5350 if (s
->output_section
!= NULL
)
5351 stash
->sec_vma
[i
] = s
->output_section
->vma
+ s
->output_offset
;
5353 stash
->sec_vma
[i
] = s
->vma
;
5358 /* Compare current section VMAs against those at the time the stash
5359 was created. If find_nearest_line is used in linker warnings or
5360 errors early in the link process, the debug info stash will be
5361 invalid for later calls. This is because we relocate debug info
5362 sections, so the stashed section contents depend on symbol values,
5363 which in turn depend on section VMAs. */
5366 section_vma_same (const bfd
*abfd
, const struct dwarf2_debug
*stash
)
5371 /* PR 24334: If the number of sections in ABFD has changed between
5372 when the stash was created and now, then we cannot trust the
5373 stashed vma information. */
5374 if (abfd
->section_count
!= stash
->sec_vma_count
)
5377 for (i
= 0, s
= abfd
->sections
;
5378 s
!= NULL
&& i
< abfd
->section_count
;
5383 if (s
->output_section
!= NULL
)
5384 vma
= s
->output_section
->vma
+ s
->output_offset
;
5387 if (vma
!= stash
->sec_vma
[i
])
5393 /* Read debug information from DEBUG_BFD when DEBUG_BFD is specified.
5394 If DEBUG_BFD is not specified, we read debug information from ABFD
5395 or its gnu_debuglink. The results will be stored in PINFO.
5396 The function returns TRUE iff debug information is ready. */
5399 _bfd_dwarf2_slurp_debug_info (bfd
*abfd
, bfd
*debug_bfd
,
5400 const struct dwarf_debug_section
*debug_sections
,
5405 bfd_size_type total_size
;
5407 struct dwarf2_debug
*stash
= (struct dwarf2_debug
*) *pinfo
;
5411 if (stash
->orig_bfd_id
== abfd
->id
5412 && section_vma_same (abfd
, stash
))
5414 /* Check that we did previously find some debug information
5415 before attempting to make use of it. */
5416 if (stash
->f
.dwarf_info_size
!= 0)
5418 if (do_place
&& !place_sections (abfd
, stash
))
5425 _bfd_dwarf2_cleanup_debug_info (abfd
, pinfo
);
5426 memset (stash
, 0, sizeof (*stash
));
5430 stash
= (struct dwarf2_debug
*) bfd_zalloc (abfd
, sizeof (*stash
));
5435 stash
->orig_bfd_id
= abfd
->id
;
5436 stash
->debug_sections
= debug_sections
;
5437 stash
->f
.syms
= symbols
;
5438 if (!save_section_vma (abfd
, stash
))
5441 stash
->f
.abbrev_offsets
= htab_create_alloc (10, hash_abbrev
, eq_abbrev
,
5442 del_abbrev
, calloc
, free
);
5443 if (!stash
->f
.abbrev_offsets
)
5446 stash
->alt
.abbrev_offsets
= htab_create_alloc (10, hash_abbrev
, eq_abbrev
,
5447 del_abbrev
, calloc
, free
);
5448 if (!stash
->alt
.abbrev_offsets
)
5451 stash
->f
.trie_root
= alloc_trie_leaf (abfd
);
5452 if (!stash
->f
.trie_root
)
5455 stash
->alt
.trie_root
= alloc_trie_leaf (abfd
);
5456 if (!stash
->alt
.trie_root
)
5459 if (debug_bfd
== NULL
)
5462 msec
= find_debug_info (debug_bfd
, debug_sections
, NULL
);
5463 if (msec
== NULL
&& abfd
== debug_bfd
)
5465 char * debug_filename
;
5467 debug_filename
= bfd_follow_build_id_debuglink (abfd
, DEBUGDIR
);
5468 if (debug_filename
== NULL
)
5469 debug_filename
= bfd_follow_gnu_debuglink (abfd
, DEBUGDIR
);
5471 if (debug_filename
== NULL
)
5472 /* No dwarf2 info, and no gnu_debuglink to follow.
5473 Note that at this point the stash has been allocated, but
5474 contains zeros. This lets future calls to this function
5475 fail more quickly. */
5478 debug_bfd
= bfd_openr (debug_filename
, NULL
);
5479 free (debug_filename
);
5480 if (debug_bfd
== NULL
)
5481 /* FIXME: Should we report our failure to follow the debuglink ? */
5484 /* Set BFD_DECOMPRESS to decompress debug sections. */
5485 debug_bfd
->flags
|= BFD_DECOMPRESS
;
5486 if (!bfd_check_format (debug_bfd
, bfd_object
)
5487 || (msec
= find_debug_info (debug_bfd
,
5488 debug_sections
, NULL
)) == NULL
5489 || !bfd_generic_link_read_symbols (debug_bfd
))
5491 bfd_close (debug_bfd
);
5495 symbols
= bfd_get_outsymbols (debug_bfd
);
5496 stash
->f
.syms
= symbols
;
5497 stash
->close_on_cleanup
= true;
5499 stash
->f
.bfd_ptr
= debug_bfd
;
5502 && !place_sections (abfd
, stash
))
5505 /* There can be more than one DWARF2 info section in a BFD these
5506 days. First handle the easy case when there's only one. If
5507 there's more than one, try case two: read them all in and produce
5508 one large stash. We do this in two passes - in the first pass we
5509 just accumulate the section sizes, and in the second pass we
5510 read in the section's contents. (The allows us to avoid
5511 reallocing the data as we add sections to the stash.) */
5513 if (! find_debug_info (debug_bfd
, debug_sections
, msec
))
5515 /* Case 1: only one info section. */
5516 total_size
= msec
->size
;
5517 if (! read_section (debug_bfd
, &stash
->debug_sections
[debug_info
],
5519 &stash
->f
.dwarf_info_buffer
, &total_size
))
5524 /* Case 2: multiple sections. */
5525 for (total_size
= 0;
5527 msec
= find_debug_info (debug_bfd
, debug_sections
, msec
))
5529 if (bfd_section_size_insane (debug_bfd
, msec
))
5531 /* Catch PR25070 testcase overflowing size calculation here. */
5532 if (total_size
+ msec
->size
< total_size
)
5534 bfd_set_error (bfd_error_no_memory
);
5537 total_size
+= msec
->size
;
5540 stash
->f
.dwarf_info_buffer
= (bfd_byte
*) bfd_malloc (total_size
);
5541 if (stash
->f
.dwarf_info_buffer
== NULL
)
5545 for (msec
= find_debug_info (debug_bfd
, debug_sections
, NULL
);
5547 msec
= find_debug_info (debug_bfd
, debug_sections
, msec
))
5555 if (!(bfd_simple_get_relocated_section_contents
5556 (debug_bfd
, msec
, stash
->f
.dwarf_info_buffer
+ total_size
,
5564 stash
->f
.info_ptr
= stash
->f
.dwarf_info_buffer
;
5565 stash
->f
.dwarf_info_size
= total_size
;
5569 unset_sections (stash
);
5573 /* Parse the next DWARF2 compilation unit at FILE->INFO_PTR. */
5575 static struct comp_unit
*
5576 stash_comp_unit (struct dwarf2_debug
*stash
, struct dwarf2_debug_file
*file
)
5578 bfd_size_type length
;
5579 unsigned int offset_size
;
5580 bfd_byte
*info_ptr_unit
= file
->info_ptr
;
5581 bfd_byte
*info_ptr_end
= file
->dwarf_info_buffer
+ file
->dwarf_info_size
;
5583 if (file
->info_ptr
>= info_ptr_end
)
5586 length
= read_4_bytes (file
->bfd_ptr
, &file
->info_ptr
, info_ptr_end
);
5587 /* A 0xffffff length is the DWARF3 way of indicating
5588 we use 64-bit offsets, instead of 32-bit offsets. */
5589 if (length
== 0xffffffff)
5592 length
= read_8_bytes (file
->bfd_ptr
, &file
->info_ptr
, info_ptr_end
);
5594 /* A zero length is the IRIX way of indicating 64-bit offsets,
5595 mostly because the 64-bit length will generally fit in 32
5596 bits, and the endianness helps. */
5597 else if (length
== 0)
5600 length
= read_4_bytes (file
->bfd_ptr
, &file
->info_ptr
, info_ptr_end
);
5602 /* In the absence of the hints above, we assume 32-bit DWARF2
5603 offsets even for targets with 64-bit addresses, because:
5604 a) most of the time these targets will not have generated
5605 more than 2Gb of debug info and so will not need 64-bit
5608 b) if they do use 64-bit offsets but they are not using
5609 the size hints that are tested for above then they are
5610 not conforming to the DWARF3 standard anyway. */
5615 && length
<= (size_t) (info_ptr_end
- file
->info_ptr
))
5617 struct comp_unit
*each
= parse_comp_unit (stash
, file
,
5618 file
->info_ptr
, length
,
5619 info_ptr_unit
, offset_size
);
5622 if (file
->comp_unit_tree
== NULL
)
5623 file
->comp_unit_tree
5624 = splay_tree_new (splay_tree_compare_addr_range
,
5625 splay_tree_free_addr_range
, NULL
);
5627 struct addr_range
*r
5628 = (struct addr_range
*)bfd_malloc (sizeof (struct addr_range
));
5629 r
->start
= each
->info_ptr_unit
;
5630 r
->end
= each
->end_ptr
;
5631 splay_tree_node v
= splay_tree_lookup (file
->comp_unit_tree
,
5633 if (v
!= NULL
|| r
->end
<= r
->start
)
5635 splay_tree_insert (file
->comp_unit_tree
, (splay_tree_key
)r
,
5636 (splay_tree_value
)each
);
5638 if (file
->all_comp_units
)
5639 file
->all_comp_units
->prev_unit
= each
;
5641 file
->last_comp_unit
= each
;
5643 each
->next_unit
= file
->all_comp_units
;
5644 file
->all_comp_units
= each
;
5646 if (each
->arange
.high
== 0)
5648 each
->next_unit_without_ranges
= file
->all_comp_units_without_ranges
;
5649 file
->all_comp_units_without_ranges
= each
->next_unit_without_ranges
;
5652 file
->info_ptr
+= length
;
5657 /* Don't trust any of the DWARF info after a corrupted length or
5659 file
->info_ptr
= info_ptr_end
;
5663 /* Hash function for an asymbol. */
5666 hash_asymbol (const void *sym
)
5668 const asymbol
*asym
= sym
;
5669 return htab_hash_string (asym
->name
);
5672 /* Equality function for asymbols. */
5675 eq_asymbol (const void *a
, const void *b
)
5677 const asymbol
*sa
= a
;
5678 const asymbol
*sb
= b
;
5679 return strcmp (sa
->name
, sb
->name
) == 0;
5682 /* Scan the debug information in PINFO looking for a DW_TAG_subprogram
5683 abbrev with a DW_AT_low_pc attached to it. Then lookup that same
5684 symbol in SYMBOLS and return the difference between the low_pc and
5685 the symbol's address. Returns 0 if no suitable symbol could be found. */
5688 _bfd_dwarf2_find_symbol_bias (asymbol
** symbols
, void ** pinfo
)
5690 struct dwarf2_debug
*stash
;
5691 struct comp_unit
* unit
;
5693 bfd_signed_vma result
= 0;
5696 stash
= (struct dwarf2_debug
*) *pinfo
;
5698 if (stash
== NULL
|| symbols
== NULL
)
5701 sym_hash
= htab_create_alloc (10, hash_asymbol
, eq_asymbol
,
5702 NULL
, xcalloc
, free
);
5703 for (psym
= symbols
; * psym
!= NULL
; psym
++)
5705 asymbol
* sym
= * psym
;
5707 if (sym
->flags
& BSF_FUNCTION
&& sym
->section
!= NULL
)
5709 void **slot
= htab_find_slot (sym_hash
, sym
, INSERT
);
5714 for (unit
= stash
->f
.all_comp_units
; unit
; unit
= unit
->next_unit
)
5716 struct funcinfo
* func
;
5718 comp_unit_maybe_decode_line_info (unit
);
5720 for (func
= unit
->function_table
; func
!= NULL
; func
= func
->prev_func
)
5721 if (func
->name
&& func
->arange
.low
)
5723 asymbol search
, *sym
;
5725 /* FIXME: Do we need to scan the aranges looking for the
5728 search
.name
= func
->name
;
5729 sym
= htab_find (sym_hash
, &search
);
5732 result
= func
->arange
.low
- (sym
->value
+ sym
->section
->vma
);
5739 htab_delete (sym_hash
);
5743 /* See _bfd_dwarf2_find_nearest_line_with_alt. */
5746 _bfd_dwarf2_find_nearest_line (bfd
*abfd
,
5751 const char **filename_ptr
,
5752 const char **functionname_ptr
,
5753 unsigned int *linenumber_ptr
,
5754 unsigned int *discriminator_ptr
,
5755 const struct dwarf_debug_section
*debug_sections
,
5758 return _bfd_dwarf2_find_nearest_line_with_alt
5759 (abfd
, NULL
, symbols
, symbol
, section
, offset
, filename_ptr
,
5760 functionname_ptr
, linenumber_ptr
, discriminator_ptr
, debug_sections
,
5764 /* Find the source code location of SYMBOL. If SYMBOL is NULL
5765 then find the nearest source code location corresponding to
5766 the address SECTION + OFFSET.
5767 Returns 1 if the line is found without error and fills in
5768 FILENAME_PTR and LINENUMBER_PTR. In the case where SYMBOL was
5769 NULL the FUNCTIONNAME_PTR is also filled in.
5770 Returns 2 if partial information from _bfd_elf_find_function is
5771 returned (function and maybe file) by looking at symbols. DWARF2
5772 info is present but not regarding the requested code location.
5773 Returns 0 otherwise.
5774 SYMBOLS contains the symbol table for ABFD.
5775 DEBUG_SECTIONS contains the name of the dwarf debug sections.
5776 If ALT_FILENAME is given, attempt to open the file and use it
5777 as the .gnu_debugaltlink file. Otherwise this file will be
5778 searched for when needed. */
5781 _bfd_dwarf2_find_nearest_line_with_alt
5783 const char *alt_filename
,
5788 const char **filename_ptr
,
5789 const char **functionname_ptr
,
5790 unsigned int *linenumber_ptr
,
5791 unsigned int *discriminator_ptr
,
5792 const struct dwarf_debug_section
*debug_sections
,
5795 /* Read each compilation unit from the section .debug_info, and check
5796 to see if it contains the address we are searching for. If yes,
5797 lookup the address, and return the line number info. If no, go
5798 on to the next compilation unit.
5800 We keep a list of all the previously read compilation units, and
5801 a pointer to the next un-read compilation unit. Check the
5802 previously read units before reading more. */
5803 struct dwarf2_debug
*stash
;
5804 /* What address are we looking for? */
5806 struct comp_unit
* each
;
5807 struct funcinfo
*function
= NULL
;
5811 *filename_ptr
= NULL
;
5812 if (functionname_ptr
!= NULL
)
5813 *functionname_ptr
= NULL
;
5814 *linenumber_ptr
= 0;
5815 if (discriminator_ptr
)
5816 *discriminator_ptr
= 0;
5818 if (! _bfd_dwarf2_slurp_debug_info (abfd
, NULL
, debug_sections
,
5820 (abfd
->flags
& (EXEC_P
| DYNAMIC
)) == 0))
5823 stash
= (struct dwarf2_debug
*) *pinfo
;
5825 if (stash
->alt
.bfd_ptr
== NULL
&& alt_filename
!= NULL
)
5827 bfd
*alt_bfd
= bfd_openr (alt_filename
, NULL
);
5829 if (alt_bfd
== NULL
)
5830 /* bfd_openr will have set the bfd_error. */
5832 if (!bfd_check_format (alt_bfd
, bfd_object
))
5834 bfd_set_error (bfd_error_wrong_format
);
5835 bfd_close (alt_bfd
);
5839 stash
->alt
.bfd_ptr
= alt_bfd
;
5842 do_line
= symbol
!= NULL
;
5845 BFD_ASSERT (section
== NULL
&& offset
== 0 && functionname_ptr
== NULL
);
5846 section
= bfd_asymbol_section (symbol
);
5847 addr
= symbol
->value
;
5851 BFD_ASSERT (section
!= NULL
&& functionname_ptr
!= NULL
);
5854 /* If we have no SYMBOL but the section we're looking at is not a
5855 code section, then take a look through the list of symbols to see
5856 if we have a symbol at the address we're looking for. If we do
5857 then use this to look up line information. This will allow us to
5858 give file and line results for data symbols. We exclude code
5859 symbols here, if we look up a function symbol and then look up the
5860 line information we'll actually return the line number for the
5861 opening '{' rather than the function definition line. This is
5862 because looking up by symbol uses the line table, in which the
5863 first line for a function is usually the opening '{', while
5864 looking up the function by section + offset uses the
5865 DW_AT_decl_line from the function DW_TAG_subprogram for the line,
5866 which will be the line of the function name. */
5867 if (symbols
!= NULL
&& (section
->flags
& SEC_CODE
) == 0)
5871 for (tmp
= symbols
; (*tmp
) != NULL
; ++tmp
)
5872 if ((*tmp
)->the_bfd
== abfd
5873 && (*tmp
)->section
== section
5874 && (*tmp
)->value
== offset
5875 && ((*tmp
)->flags
& BSF_SECTION_SYM
) == 0)
5879 /* For local symbols, keep going in the hope we find a
5881 if ((symbol
->flags
& BSF_GLOBAL
) != 0)
5887 if (section
->output_section
)
5888 addr
+= section
->output_section
->vma
+ section
->output_offset
;
5890 addr
+= section
->vma
;
5892 /* A null info_ptr indicates that there is no dwarf2 info
5893 (or that an error occured while setting up the stash). */
5894 if (! stash
->f
.info_ptr
)
5897 stash
->inliner_chain
= NULL
;
5899 /* Check the previously read comp. units first. */
5902 /* The info hash tables use quite a bit of memory. We may not want to
5903 always use them. We use some heuristics to decide if and when to
5905 if (stash
->info_hash_status
== STASH_INFO_HASH_OFF
)
5906 stash_maybe_enable_info_hash_tables (abfd
, stash
);
5908 /* Keep info hash table up to date if they are available. Note that we
5909 may disable the hash tables if there is any error duing update. */
5910 if (stash
->info_hash_status
== STASH_INFO_HASH_ON
)
5911 stash_maybe_update_info_hash_tables (stash
);
5913 if (stash
->info_hash_status
== STASH_INFO_HASH_ON
)
5915 found
= stash_find_line_fast (stash
, symbol
, addr
,
5916 filename_ptr
, linenumber_ptr
);
5921 /* Check the previously read comp. units first. */
5922 for (each
= stash
->f
.all_comp_units
; each
; each
= each
->next_unit
)
5923 if ((symbol
->flags
& BSF_FUNCTION
) == 0
5924 || comp_unit_may_contain_address (each
, addr
))
5926 found
= comp_unit_find_line (each
, symbol
, addr
, filename_ptr
,
5934 struct trie_node
*trie
= stash
->f
.trie_root
;
5935 unsigned int bits
= VMA_BITS
- 8;
5936 struct comp_unit
**prev_each
;
5938 /* Traverse interior nodes until we get to a leaf. */
5939 while (trie
&& trie
->num_room_in_leaf
== 0)
5941 int ch
= (addr
>> bits
) & 0xff;
5942 trie
= ((struct trie_interior
*) trie
)->children
[ch
];
5948 const struct trie_leaf
*leaf
= (struct trie_leaf
*) trie
;
5951 for (i
= 0; i
< leaf
->num_stored_in_leaf
; ++i
)
5952 leaf
->ranges
[i
].unit
->mark
= false;
5954 for (i
= 0; i
< leaf
->num_stored_in_leaf
; ++i
)
5956 struct comp_unit
*unit
= leaf
->ranges
[i
].unit
;
5958 || addr
< leaf
->ranges
[i
].low_pc
5959 || addr
>= leaf
->ranges
[i
].high_pc
)
5963 found
= comp_unit_find_nearest_line (unit
, addr
,
5973 /* Also scan through all compilation units without any ranges,
5974 taking them out of the list if they have acquired any since
5976 prev_each
= &stash
->f
.all_comp_units_without_ranges
;
5977 for (each
= *prev_each
; each
; each
= each
->next_unit_without_ranges
)
5979 if (each
->arange
.high
!= 0)
5981 *prev_each
= each
->next_unit_without_ranges
;
5985 found
= comp_unit_find_nearest_line (each
, addr
,
5992 prev_each
= &each
->next_unit_without_ranges
;
5996 /* Read each remaining comp. units checking each as they are read. */
5997 while ((each
= stash_comp_unit (stash
, &stash
->f
)) != NULL
)
5999 /* DW_AT_low_pc and DW_AT_high_pc are optional for
6000 compilation units. If we don't have them (i.e.,
6001 unit->high == 0), we need to consult the line info table
6002 to see if a compilation unit contains the given
6005 found
= (((symbol
->flags
& BSF_FUNCTION
) == 0
6006 || comp_unit_may_contain_address (each
, addr
))
6007 && comp_unit_find_line (each
, symbol
, addr
,
6008 filename_ptr
, linenumber_ptr
));
6010 found
= (comp_unit_may_contain_address (each
, addr
)
6011 && comp_unit_find_nearest_line (each
, addr
,
6015 discriminator_ptr
));
6022 if (functionname_ptr
&& function
&& function
->is_linkage
)
6024 *functionname_ptr
= function
->name
;
6028 else if (functionname_ptr
6029 && (!*functionname_ptr
6030 || (function
&& !function
->is_linkage
)))
6033 asymbol
**syms
= symbols
;
6034 asection
*sec
= section
;
6036 _bfd_dwarf2_stash_syms (stash
, abfd
, &sec
, &syms
);
6037 fun
= _bfd_elf_find_function (abfd
, syms
, sec
, offset
,
6038 *filename_ptr
? NULL
: filename_ptr
,
6041 if (!found
&& fun
!= NULL
)
6044 if (function
&& !function
->is_linkage
)
6048 sec_vma
= section
->vma
;
6049 if (section
->output_section
!= NULL
)
6050 sec_vma
= section
->output_section
->vma
+ section
->output_offset
;
6052 *functionname_ptr
= function
->name
;
6053 else if (fun
->value
+ sec_vma
== function
->arange
.low
)
6054 function
->name
= *functionname_ptr
;
6055 /* Even if we didn't find a linkage name, say that we have
6056 to stop a repeated search of symbols. */
6057 function
->is_linkage
= true;
6061 unset_sections (stash
);
6067 _bfd_dwarf2_find_inliner_info (bfd
*abfd ATTRIBUTE_UNUSED
,
6068 const char **filename_ptr
,
6069 const char **functionname_ptr
,
6070 unsigned int *linenumber_ptr
,
6073 struct dwarf2_debug
*stash
;
6075 stash
= (struct dwarf2_debug
*) *pinfo
;
6078 struct funcinfo
*func
= stash
->inliner_chain
;
6080 if (func
&& func
->caller_func
)
6082 *filename_ptr
= func
->caller_file
;
6083 *functionname_ptr
= func
->caller_func
->name
;
6084 *linenumber_ptr
= func
->caller_line
;
6085 stash
->inliner_chain
= func
->caller_func
;
6094 _bfd_dwarf2_cleanup_debug_info (bfd
*abfd
, void **pinfo
)
6096 struct dwarf2_debug
*stash
= (struct dwarf2_debug
*) *pinfo
;
6097 struct comp_unit
*each
;
6098 struct dwarf2_debug_file
*file
;
6100 if (abfd
== NULL
|| stash
== NULL
)
6103 if (stash
->varinfo_hash_table
)
6104 bfd_hash_table_free (&stash
->varinfo_hash_table
->base
);
6105 if (stash
->funcinfo_hash_table
)
6106 bfd_hash_table_free (&stash
->funcinfo_hash_table
->base
);
6111 for (each
= file
->all_comp_units
; each
; each
= each
->next_unit
)
6113 struct funcinfo
*function_table
= each
->function_table
;
6114 struct varinfo
*variable_table
= each
->variable_table
;
6116 if (each
->line_table
&& each
->line_table
!= file
->line_table
)
6118 free (each
->line_table
->files
);
6119 free (each
->line_table
->dirs
);
6122 free (each
->lookup_funcinfo_table
);
6123 each
->lookup_funcinfo_table
= NULL
;
6125 while (function_table
)
6127 free (function_table
->file
);
6128 function_table
->file
= NULL
;
6129 free (function_table
->caller_file
);
6130 function_table
->caller_file
= NULL
;
6131 function_table
= function_table
->prev_func
;
6134 while (variable_table
)
6136 free (variable_table
->file
);
6137 variable_table
->file
= NULL
;
6138 variable_table
= variable_table
->prev_var
;
6142 if (file
->line_table
)
6144 free (file
->line_table
->files
);
6145 free (file
->line_table
->dirs
);
6147 htab_delete (file
->abbrev_offsets
);
6148 if (file
->comp_unit_tree
!= NULL
)
6149 splay_tree_delete (file
->comp_unit_tree
);
6151 free (file
->dwarf_line_str_buffer
);
6152 free (file
->dwarf_str_buffer
);
6153 free (file
->dwarf_ranges_buffer
);
6154 free (file
->dwarf_rnglists_buffer
);
6155 free (file
->dwarf_line_buffer
);
6156 free (file
->dwarf_abbrev_buffer
);
6157 free (file
->dwarf_info_buffer
);
6158 free (file
->dwarf_addr_buffer
);
6159 free (file
->dwarf_str_offsets_buffer
);
6160 if (file
== &stash
->alt
)
6164 free (stash
->sec_vma
);
6165 free (stash
->adjusted_sections
);
6166 if (stash
->close_on_cleanup
)
6167 bfd_close (stash
->f
.bfd_ptr
);
6168 if (stash
->alt
.bfd_ptr
)
6169 bfd_close (stash
->alt
.bfd_ptr
);
6172 typedef struct elf_find_function_cache
6174 asection
* last_section
;
6176 const char * filename
;
6177 bfd_size_type code_size
;
6180 } elf_find_function_cache
;
6183 /* Returns TRUE if symbol SYM with address CODE_OFF and size CODE_SIZE
6184 is a better fit to match OFFSET than whatever is currenly stored in
6188 better_fit (elf_find_function_cache
* cache
,
6191 bfd_size_type code_size
,
6194 /* If the symbol is beyond the desired offset, ignore it. */
6195 if (code_off
> offset
)
6198 /* If the symbol is further away from the desired
6199 offset than our current best, then ignore it. */
6200 if (code_off
< cache
->code_off
)
6203 /* On the other hand, if it is closer, then use it. */
6204 if (code_off
> cache
->code_off
)
6207 /* assert (code_off == cache->code_off); */
6209 /* If our current best fit does not actually reach the desired
6211 if (cache
->code_off
+ cache
->code_size
<= offset
)
6212 /* ... then return whichever candidate covers
6213 more area and hence gets closer to OFFSET. */
6214 return code_size
> cache
->code_size
;
6216 /* The current cache'd symbol covers OFFSET. */
6218 /* If the new symbol does not cover the desired offset then skip it. */
6219 if (code_off
+ code_size
<= offset
)
6222 /* Both symbols cover OFFSET. */
6224 /* Prefer functions over non-functions. */
6225 flagword cache_flags
= cache
->func
->flags
;
6226 flagword sym_flags
= sym
->flags
;
6228 if ((cache_flags
& BSF_FUNCTION
) && ((sym_flags
& BSF_FUNCTION
) == 0))
6230 if ((sym_flags
& BSF_FUNCTION
) && ((cache_flags
& BSF_FUNCTION
) == 0))
6233 /* FIXME: Should we choose LOCAL over GLOBAL ? */
6235 /* Prefer typed symbols over notyped. */
6236 int cache_type
= ELF_ST_TYPE (((elf_symbol_type
*) cache
->func
)->internal_elf_sym
.st_info
);
6237 int sym_type
= ELF_ST_TYPE (((elf_symbol_type
*) sym
)->internal_elf_sym
.st_info
);
6239 if (cache_type
== STT_NOTYPE
&& sym_type
!= STT_NOTYPE
)
6241 if (cache_type
!= STT_NOTYPE
&& sym_type
== STT_NOTYPE
)
6244 /* Otherwise choose whichever symbol covers a smaller area. */
6245 return code_size
< cache
->code_size
;
6248 /* Find the function to a particular section and offset,
6249 for error reporting. */
6252 _bfd_elf_find_function (bfd
*abfd
,
6256 const char **filename_ptr
,
6257 const char **functionname_ptr
)
6259 if (symbols
== NULL
)
6262 if (bfd_get_flavour (abfd
) != bfd_target_elf_flavour
)
6265 elf_find_function_cache
* cache
= elf_tdata (abfd
)->elf_find_function_cache
;
6269 cache
= bfd_zalloc (abfd
, sizeof (*cache
));
6270 elf_tdata (abfd
)->elf_find_function_cache
= cache
;
6275 if (cache
->last_section
!= section
6276 || cache
->func
== NULL
6277 || offset
< cache
->func
->value
6278 || offset
>= cache
->func
->value
+ cache
->code_size
)
6282 /* ??? Given multiple file symbols, it is impossible to reliably
6283 choose the right file name for global symbols. File symbols are
6284 local symbols, and thus all file symbols must sort before any
6285 global symbols. The ELF spec may be interpreted to say that a
6286 file symbol must sort before other local symbols, but currently
6287 ld -r doesn't do this. So, for ld -r output, it is possible to
6288 make a better choice of file name for local symbols by ignoring
6289 file symbols appearing after a given local symbol. */
6290 enum { nothing_seen
, symbol_seen
, file_after_symbol_seen
} state
;
6291 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
6294 state
= nothing_seen
;
6295 cache
->filename
= NULL
;
6297 cache
->code_size
= 0;
6298 cache
->code_off
= 0;
6299 cache
->last_section
= section
;
6301 for (p
= symbols
; *p
!= NULL
; p
++)
6307 if ((sym
->flags
& BSF_FILE
) != 0)
6310 if (state
== symbol_seen
)
6311 state
= file_after_symbol_seen
;
6315 if (state
== nothing_seen
)
6316 state
= symbol_seen
;
6318 size
= bed
->maybe_function_sym (sym
, section
, &code_off
);
6323 if (better_fit (cache
, sym
, code_off
, size
, offset
))
6326 cache
->code_size
= size
;
6327 cache
->code_off
= code_off
;
6328 cache
->filename
= NULL
;
6331 && ((sym
->flags
& BSF_LOCAL
) != 0
6332 || state
!= file_after_symbol_seen
))
6333 cache
->filename
= bfd_asymbol_name (file
);
6335 /* Otherwise, if the symbol is beyond the desired offset but it
6336 lies within the bounds of the current best match then reduce
6337 the size of the current best match so that future searches
6338 will not not used the cached symbol by mistake. */
6339 else if (code_off
> offset
6340 && code_off
> cache
->code_off
6341 && code_off
< cache
->code_off
+ cache
->code_size
)
6343 cache
->code_size
= code_off
- cache
->code_off
;
6348 if (cache
->func
== NULL
)
6352 *filename_ptr
= cache
->filename
;
6353 if (functionname_ptr
)
6354 *functionname_ptr
= bfd_asymbol_name (cache
->func
);