2 Copyright (C) 1994-2022 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
87 /* A trie to map quickly from address range to compilation unit.
89 This is a fairly standard radix-256 trie, used to quickly locate which
90 compilation unit any given address belongs to. Given that each compilation
91 unit may register hundreds of very small and unaligned ranges (which may
92 potentially overlap, due to inlining and other concerns), and a large
93 program may end up containing hundreds of thousands of such ranges, we cannot
94 scan through them linearly without undue slowdown.
96 We use a hybrid trie to avoid memory explosion: There are two types of trie
97 nodes, leaves and interior nodes. (Almost all nodes are leaves, so they
98 take up the bulk of the memory usage.) Leaves contain a simple array of
99 ranges (high/low address) and which compilation unit contains those ranges,
100 and when we get to a leaf, we scan through it linearly. Interior nodes
101 contain pointers to 256 other nodes, keyed by the next byte of the address.
102 So for a 64-bit address like 0x1234567abcd, we would start at the root and go
103 down child[0x00]->child[0x00]->child[0x01]->child[0x23]->child[0x45] etc.,
104 until we hit a leaf. (Nodes are, in general, leaves until they exceed the
105 default allocation of 16 elements, at which point they are converted to
106 interior node if possible.) This gives us near-constant lookup times;
107 the only thing that can be costly is if there are lots of overlapping ranges
108 within a single 256-byte segment of the binary, in which case we have to
109 scan through them all to find the best match.
111 For a binary with few ranges, we will in practice only have a single leaf
112 node at the root, containing a simple array. Thus, the scheme is efficient
113 for both small and large binaries.
116 /* Experiments have shown 16 to be a memory-efficient default leaf size.
117 The only case where a leaf will hold more memory than this, is at the
118 bottomost level (covering 256 bytes in the binary), where we'll expand
119 the leaf to be able to hold more ranges if needed.
121 #define TRIE_LEAF_SIZE 16
123 /* All trie_node pointers will really be trie_leaf or trie_interior,
124 but they have this common head. */
127 /* If zero, we are an interior node.
128 Otherwise, how many ranges we have room for in this leaf. */
129 unsigned int num_room_in_leaf
;
134 struct trie_node head
;
135 unsigned int num_stored_in_leaf
;
137 struct comp_unit
*unit
;
138 bfd_vma low_pc
, high_pc
;
139 } ranges
[TRIE_LEAF_SIZE
];
144 struct trie_node head
;
145 struct trie_node
*children
[256];
148 static struct trie_node
*alloc_trie_leaf (bfd
*abfd
)
150 struct trie_leaf
*leaf
= bfd_zalloc (abfd
, sizeof (struct trie_leaf
));
153 leaf
->head
.num_room_in_leaf
= TRIE_LEAF_SIZE
;
163 /* Return true if address range do intersect. */
166 addr_range_intersects (struct addr_range
*r1
, struct addr_range
*r2
)
168 return (r1
->start
<= r2
->start
&& r2
->start
< r1
->end
)
169 || (r1
->start
<= (r2
->end
- 1) && (r2
->end
- 1) < r1
->end
);
172 /* Compare function for splay tree of addr_ranges. */
175 splay_tree_compare_addr_range (splay_tree_key xa
, splay_tree_key xb
)
177 struct addr_range
*r1
= (struct addr_range
*) xa
;
178 struct addr_range
*r2
= (struct addr_range
*) xb
;
180 if (addr_range_intersects (r1
, r2
) || addr_range_intersects (r2
, r1
))
182 else if (r1
->end
<= r2
->start
)
188 /* Splay tree release function for keys (addr_range). */
191 splay_tree_free_addr_range (splay_tree_key key
)
193 free ((struct addr_range
*)key
);
196 struct dwarf2_debug_file
198 /* The actual bfd from which debug info was loaded. Might be
199 different to orig_bfd because of gnu_debuglink sections. */
202 /* Pointer to the symbol table. */
205 /* The current info pointer for the .debug_info section being parsed. */
208 /* A pointer to the memory block allocated for .debug_info sections. */
209 bfd_byte
*dwarf_info_buffer
;
211 /* Length of the loaded .debug_info sections. */
212 bfd_size_type dwarf_info_size
;
214 /* Pointer to the .debug_abbrev section loaded into memory. */
215 bfd_byte
*dwarf_abbrev_buffer
;
217 /* Length of the loaded .debug_abbrev section. */
218 bfd_size_type dwarf_abbrev_size
;
220 /* Buffer for decode_line_info. */
221 bfd_byte
*dwarf_line_buffer
;
223 /* Length of the loaded .debug_line section. */
224 bfd_size_type dwarf_line_size
;
226 /* Pointer to the .debug_str section loaded into memory. */
227 bfd_byte
*dwarf_str_buffer
;
229 /* Length of the loaded .debug_str section. */
230 bfd_size_type dwarf_str_size
;
232 /* Pointer to the .debug_str_offsets section loaded into memory. */
233 bfd_byte
*dwarf_str_offsets_buffer
;
235 /* Length of the loaded .debug_str_offsets section. */
236 bfd_size_type dwarf_str_offsets_size
;
238 /* Pointer to the .debug_addr section loaded into memory. */
239 bfd_byte
*dwarf_addr_buffer
;
241 /* Length of the loaded .debug_addr section. */
242 bfd_size_type dwarf_addr_size
;
244 /* Pointer to the .debug_line_str section loaded into memory. */
245 bfd_byte
*dwarf_line_str_buffer
;
247 /* Length of the loaded .debug_line_str section. */
248 bfd_size_type dwarf_line_str_size
;
250 /* Pointer to the .debug_ranges section loaded into memory. */
251 bfd_byte
*dwarf_ranges_buffer
;
253 /* Length of the loaded .debug_ranges section. */
254 bfd_size_type dwarf_ranges_size
;
256 /* Pointer to the .debug_rnglists section loaded into memory. */
257 bfd_byte
*dwarf_rnglists_buffer
;
259 /* Length of the loaded .debug_rnglists section. */
260 bfd_size_type dwarf_rnglists_size
;
262 /* A list of all previously read comp_units. */
263 struct comp_unit
*all_comp_units
;
265 /* A list of all previously read comp_units with no ranges (yet). */
266 struct comp_unit
*all_comp_units_without_ranges
;
268 /* Last comp unit in list above. */
269 struct comp_unit
*last_comp_unit
;
271 /* Line table at line_offset zero. */
272 struct line_info_table
*line_table
;
274 /* Hash table to map offsets to decoded abbrevs. */
275 htab_t abbrev_offsets
;
277 /* Root of a trie to map addresses to compilation units. */
278 struct trie_node
*trie_root
;
280 /* Splay tree to map info_ptr address to compilation units. */
281 splay_tree comp_unit_tree
;
286 /* Names of the debug sections. */
287 const struct dwarf_debug_section
*debug_sections
;
289 /* Per-file stuff. */
290 struct dwarf2_debug_file f
, alt
;
292 /* Pointer to the original bfd for which debug was loaded. This is what
293 we use to compare and so check that the cached debug data is still
294 valid - it saves having to possibly dereference the gnu_debuglink each
298 /* If the most recent call to bfd_find_nearest_line was given an
299 address in an inlined function, preserve a pointer into the
300 calling chain for subsequent calls to bfd_find_inliner_info to
302 struct funcinfo
*inliner_chain
;
304 /* Section VMAs at the time the stash was built. */
306 /* Number of sections in the SEC_VMA table. */
307 unsigned int sec_vma_count
;
309 /* Number of sections whose VMA we must adjust. */
310 int adjusted_section_count
;
312 /* Array of sections with adjusted VMA. */
313 struct adjusted_section
*adjusted_sections
;
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
)
695 msec
= bfd_get_section_by_name (abfd
, section_name
);
698 section_name
= sec
->compressed_name
;
699 msec
= bfd_get_section_by_name (abfd
, section_name
);
703 _bfd_error_handler (_("DWARF error: can't find %s section."),
704 sec
->uncompressed_name
);
705 bfd_set_error (bfd_error_bad_value
);
709 amt
= bfd_get_section_limit_octets (abfd
, msec
);
710 filesize
= bfd_get_file_size (abfd
);
711 /* PR 28834: A compressed debug section could well decompress to a size
712 larger than the file, so we choose an arbitrary modifier of 10x in
713 the test below. If this ever turns out to be insufficient, it can
714 be changed by a future update. */
715 if (amt
>= filesize
* 10)
718 _bfd_error_handler (_("DWARF error: section %s is larger than 10x its filesize! (0x%lx vs 0x%lx)"),
719 section_name
, (long) amt
, (long) filesize
);
720 bfd_set_error (bfd_error_bad_value
);
724 /* Paranoia - alloc one extra so that we can make sure a string
725 section is NUL terminated. */
729 /* Paranoia - this should never happen. */
730 bfd_set_error (bfd_error_no_memory
);
733 contents
= (bfd_byte
*) bfd_malloc (amt
);
734 if (contents
== NULL
)
737 ? !bfd_simple_get_relocated_section_contents (abfd
, msec
, contents
,
739 : !bfd_get_section_contents (abfd
, msec
, contents
, 0, *section_size
))
744 contents
[*section_size
] = 0;
745 *section_buffer
= contents
;
748 /* It is possible to get a bad value for the offset into the section
749 that the client wants. Validate it here to avoid trouble later. */
750 if (offset
!= 0 && offset
>= *section_size
)
752 /* xgettext: c-format */
753 _bfd_error_handler (_("DWARF error: offset (%" PRIu64
")"
754 " greater than or equal to %s size (%" PRIu64
")"),
755 (uint64_t) offset
, section_name
,
756 (uint64_t) *section_size
);
757 bfd_set_error (bfd_error_bad_value
);
764 /* Read dwarf information from a buffer. */
766 static inline uint64_t
767 read_n_bytes (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
, int n
)
769 bfd_byte
*buf
= *ptr
;
776 return bfd_get (n
* 8, abfd
, buf
);
780 read_1_byte (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
)
782 return read_n_bytes (abfd
, ptr
, end
, 1);
786 read_1_signed_byte (bfd
*abfd ATTRIBUTE_UNUSED
, bfd_byte
**ptr
, bfd_byte
*end
)
788 bfd_byte
*buf
= *ptr
;
795 return bfd_get_signed_8 (abfd
, buf
);
799 read_2_bytes (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
)
801 return read_n_bytes (abfd
, ptr
, end
, 2);
805 read_3_bytes (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
)
807 unsigned int val
= read_1_byte (abfd
, ptr
, end
);
809 val
|= read_1_byte (abfd
, ptr
, end
);
811 val
|= read_1_byte (abfd
, ptr
, end
);
812 if (bfd_little_endian (abfd
))
813 val
= (((val
>> 16) & 0xff)
815 | ((val
& 0xff) << 16));
820 read_4_bytes (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
)
822 return read_n_bytes (abfd
, ptr
, end
, 4);
826 read_8_bytes (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
)
828 return read_n_bytes (abfd
, ptr
, end
, 8);
831 static struct dwarf_block
*
832 read_blk (bfd
*abfd
, bfd_byte
**ptr
, bfd_byte
*end
, size_t size
)
834 bfd_byte
*buf
= *ptr
;
835 struct dwarf_block
*block
;
837 block
= (struct dwarf_block
*) bfd_alloc (abfd
, sizeof (*block
));
841 if (size
> (size_t) (end
- buf
))
856 /* Scans a NUL terminated string starting at *PTR, returning a pointer to it.
857 Bytes at or beyond BUF_END will not be read. Returns NULL if the
858 terminator is not found or if the string is empty. *PTR is
859 incremented over the bytes scanned, including the terminator. */
862 read_string (bfd_byte
**ptr
,
865 bfd_byte
*buf
= *ptr
;
868 while (buf
< buf_end
)
881 /* Reads an offset from *PTR and then locates the string at this offset
882 inside the debug string section. Returns a pointer to the string.
883 Increments *PTR by the number of bytes read for the offset. This
884 value is set even if the function fails. Bytes at or beyond
885 BUF_END will not be read. Returns NULL if there was a problem, or
886 if the string is empty. Does not check for NUL termination of the
890 read_indirect_string (struct comp_unit
*unit
,
895 struct dwarf2_debug
*stash
= unit
->stash
;
896 struct dwarf2_debug_file
*file
= unit
->file
;
899 if (unit
->offset_size
> (size_t) (buf_end
- *ptr
))
905 if (unit
->offset_size
== 4)
906 offset
= read_4_bytes (unit
->abfd
, ptr
, buf_end
);
908 offset
= read_8_bytes (unit
->abfd
, ptr
, buf_end
);
910 if (! read_section (unit
->abfd
, &stash
->debug_sections
[debug_str
],
912 &file
->dwarf_str_buffer
, &file
->dwarf_str_size
))
915 str
= (char *) file
->dwarf_str_buffer
+ offset
;
921 /* Like read_indirect_string but from .debug_line_str section. */
924 read_indirect_line_string (struct comp_unit
*unit
,
929 struct dwarf2_debug
*stash
= unit
->stash
;
930 struct dwarf2_debug_file
*file
= unit
->file
;
933 if (unit
->offset_size
> (size_t) (buf_end
- *ptr
))
939 if (unit
->offset_size
== 4)
940 offset
= read_4_bytes (unit
->abfd
, ptr
, buf_end
);
942 offset
= read_8_bytes (unit
->abfd
, ptr
, buf_end
);
944 if (! read_section (unit
->abfd
, &stash
->debug_sections
[debug_line_str
],
946 &file
->dwarf_line_str_buffer
,
947 &file
->dwarf_line_str_size
))
950 str
= (char *) file
->dwarf_line_str_buffer
+ offset
;
956 /* Like read_indirect_string but uses a .debug_str located in
957 an alternate file pointed to by the .gnu_debugaltlink section.
958 Used to impement DW_FORM_GNU_strp_alt. */
961 read_alt_indirect_string (struct comp_unit
*unit
,
966 struct dwarf2_debug
*stash
= unit
->stash
;
969 if (unit
->offset_size
> (size_t) (buf_end
- *ptr
))
975 if (unit
->offset_size
== 4)
976 offset
= read_4_bytes (unit
->abfd
, ptr
, buf_end
);
978 offset
= read_8_bytes (unit
->abfd
, ptr
, buf_end
);
980 if (stash
->alt
.bfd_ptr
== NULL
)
983 char *debug_filename
= bfd_follow_gnu_debugaltlink (unit
->abfd
, DEBUGDIR
);
985 if (debug_filename
== NULL
)
988 debug_bfd
= bfd_openr (debug_filename
, NULL
);
989 free (debug_filename
);
990 if (debug_bfd
== NULL
)
991 /* FIXME: Should we report our failure to follow the debuglink ? */
994 if (!bfd_check_format (debug_bfd
, bfd_object
))
996 bfd_close (debug_bfd
);
999 stash
->alt
.bfd_ptr
= debug_bfd
;
1002 if (! read_section (unit
->stash
->alt
.bfd_ptr
,
1003 stash
->debug_sections
+ debug_str_alt
,
1004 stash
->alt
.syms
, offset
,
1005 &stash
->alt
.dwarf_str_buffer
,
1006 &stash
->alt
.dwarf_str_size
))
1009 str
= (char *) stash
->alt
.dwarf_str_buffer
+ offset
;
1016 /* Resolve an alternate reference from UNIT at OFFSET.
1017 Returns a pointer into the loaded alternate CU upon success
1018 or NULL upon failure. */
1021 read_alt_indirect_ref (struct comp_unit
*unit
, uint64_t offset
)
1023 struct dwarf2_debug
*stash
= unit
->stash
;
1025 if (stash
->alt
.bfd_ptr
== NULL
)
1028 char *debug_filename
= bfd_follow_gnu_debugaltlink (unit
->abfd
, DEBUGDIR
);
1030 if (debug_filename
== NULL
)
1033 debug_bfd
= bfd_openr (debug_filename
, NULL
);
1034 free (debug_filename
);
1035 if (debug_bfd
== NULL
)
1036 /* FIXME: Should we report our failure to follow the debuglink ? */
1039 if (!bfd_check_format (debug_bfd
, bfd_object
))
1041 bfd_close (debug_bfd
);
1044 stash
->alt
.bfd_ptr
= debug_bfd
;
1047 if (! read_section (unit
->stash
->alt
.bfd_ptr
,
1048 stash
->debug_sections
+ debug_info_alt
,
1049 stash
->alt
.syms
, offset
,
1050 &stash
->alt
.dwarf_info_buffer
,
1051 &stash
->alt
.dwarf_info_size
))
1054 return stash
->alt
.dwarf_info_buffer
+ offset
;
1058 read_address (struct comp_unit
*unit
, bfd_byte
**ptr
, bfd_byte
*buf_end
)
1060 bfd_byte
*buf
= *ptr
;
1063 if (bfd_get_flavour (unit
->abfd
) == bfd_target_elf_flavour
)
1064 signed_vma
= get_elf_backend_data (unit
->abfd
)->sign_extend_vma
;
1066 if (unit
->addr_size
> (size_t) (buf_end
- buf
))
1072 *ptr
= buf
+ unit
->addr_size
;
1075 switch (unit
->addr_size
)
1078 return bfd_get_signed_64 (unit
->abfd
, buf
);
1080 return bfd_get_signed_32 (unit
->abfd
, buf
);
1082 return bfd_get_signed_16 (unit
->abfd
, buf
);
1089 switch (unit
->addr_size
)
1092 return bfd_get_64 (unit
->abfd
, buf
);
1094 return bfd_get_32 (unit
->abfd
, buf
);
1096 return bfd_get_16 (unit
->abfd
, buf
);
1103 /* Lookup an abbrev_info structure in the abbrev hash table. */
1105 static struct abbrev_info
*
1106 lookup_abbrev (unsigned int number
, struct abbrev_info
**abbrevs
)
1108 unsigned int hash_number
;
1109 struct abbrev_info
*abbrev
;
1111 hash_number
= number
% ABBREV_HASH_SIZE
;
1112 abbrev
= abbrevs
[hash_number
];
1116 if (abbrev
->number
== number
)
1119 abbrev
= abbrev
->next
;
1125 /* We keep a hash table to map .debug_abbrev section offsets to the
1126 array of abbrevs, so that compilation units using the same set of
1127 abbrevs do not waste memory. */
1129 struct abbrev_offset_entry
1132 struct abbrev_info
**abbrevs
;
1136 hash_abbrev (const void *p
)
1138 const struct abbrev_offset_entry
*ent
= p
;
1139 return htab_hash_pointer ((void *) ent
->offset
);
1143 eq_abbrev (const void *pa
, const void *pb
)
1145 const struct abbrev_offset_entry
*a
= pa
;
1146 const struct abbrev_offset_entry
*b
= pb
;
1147 return a
->offset
== b
->offset
;
1151 del_abbrev (void *p
)
1153 struct abbrev_offset_entry
*ent
= p
;
1154 struct abbrev_info
**abbrevs
= ent
->abbrevs
;
1157 for (i
= 0; i
< ABBREV_HASH_SIZE
; i
++)
1159 struct abbrev_info
*abbrev
= abbrevs
[i
];
1163 free (abbrev
->attrs
);
1164 abbrev
= abbrev
->next
;
1170 /* In DWARF version 2, the description of the debugging information is
1171 stored in a separate .debug_abbrev section. Before we read any
1172 dies from a section we read in all abbreviations and install them
1175 static struct abbrev_info
**
1176 read_abbrevs (bfd
*abfd
, uint64_t offset
, struct dwarf2_debug
*stash
,
1177 struct dwarf2_debug_file
*file
)
1179 struct abbrev_info
**abbrevs
;
1180 bfd_byte
*abbrev_ptr
;
1181 bfd_byte
*abbrev_end
;
1182 struct abbrev_info
*cur_abbrev
;
1183 unsigned int abbrev_number
, abbrev_name
;
1184 unsigned int abbrev_form
, hash_number
;
1187 struct abbrev_offset_entry ent
= { offset
, NULL
};
1189 if (ent
.offset
!= offset
)
1192 slot
= htab_find_slot (file
->abbrev_offsets
, &ent
, INSERT
);
1196 return ((struct abbrev_offset_entry
*) (*slot
))->abbrevs
;
1198 if (! read_section (abfd
, &stash
->debug_sections
[debug_abbrev
],
1200 &file
->dwarf_abbrev_buffer
,
1201 &file
->dwarf_abbrev_size
))
1204 amt
= sizeof (struct abbrev_info
*) * ABBREV_HASH_SIZE
;
1205 abbrevs
= (struct abbrev_info
**) bfd_zalloc (abfd
, amt
);
1206 if (abbrevs
== NULL
)
1209 abbrev_ptr
= file
->dwarf_abbrev_buffer
+ offset
;
1210 abbrev_end
= file
->dwarf_abbrev_buffer
+ file
->dwarf_abbrev_size
;
1211 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1214 /* Loop until we reach an abbrev number of 0. */
1215 while (abbrev_number
)
1217 amt
= sizeof (struct abbrev_info
);
1218 cur_abbrev
= (struct abbrev_info
*) bfd_zalloc (abfd
, amt
);
1219 if (cur_abbrev
== NULL
)
1222 /* Read in abbrev header. */
1223 cur_abbrev
->number
= abbrev_number
;
1224 cur_abbrev
->tag
= (enum dwarf_tag
)
1225 _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1227 cur_abbrev
->has_children
= read_1_byte (abfd
, &abbrev_ptr
, abbrev_end
);
1229 /* Now read in declarations. */
1232 /* Initialize it just to avoid a GCC false warning. */
1233 bfd_vma implicit_const
= -1;
1235 abbrev_name
= _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1237 abbrev_form
= _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1239 if (abbrev_form
== DW_FORM_implicit_const
)
1240 implicit_const
= _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1242 if (abbrev_name
== 0)
1245 if ((cur_abbrev
->num_attrs
% ATTR_ALLOC_CHUNK
) == 0)
1247 struct attr_abbrev
*tmp
;
1249 amt
= cur_abbrev
->num_attrs
+ ATTR_ALLOC_CHUNK
;
1250 amt
*= sizeof (struct attr_abbrev
);
1251 tmp
= (struct attr_abbrev
*) bfd_realloc (cur_abbrev
->attrs
, amt
);
1254 cur_abbrev
->attrs
= tmp
;
1257 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].name
1258 = (enum dwarf_attribute
) abbrev_name
;
1259 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].form
1260 = (enum dwarf_form
) abbrev_form
;
1261 cur_abbrev
->attrs
[cur_abbrev
->num_attrs
].implicit_const
1263 ++cur_abbrev
->num_attrs
;
1266 hash_number
= abbrev_number
% ABBREV_HASH_SIZE
;
1267 cur_abbrev
->next
= abbrevs
[hash_number
];
1268 abbrevs
[hash_number
] = cur_abbrev
;
1270 /* Get next abbreviation.
1271 Under Irix6 the abbreviations for a compilation unit are not
1272 always properly terminated with an abbrev number of 0.
1273 Exit loop if we encounter an abbreviation which we have
1274 already read (which means we are about to read the abbreviations
1275 for the next compile unit) or if the end of the abbreviation
1276 table is reached. */
1277 if ((size_t) (abbrev_ptr
- file
->dwarf_abbrev_buffer
)
1278 >= file
->dwarf_abbrev_size
)
1280 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &abbrev_ptr
,
1282 if (lookup_abbrev (abbrev_number
, abbrevs
) != NULL
)
1286 *slot
= bfd_malloc (sizeof ent
);
1289 ent
.abbrevs
= abbrevs
;
1290 memcpy (*slot
, &ent
, sizeof ent
);
1294 if (abbrevs
!= NULL
)
1298 for (i
= 0; i
< ABBREV_HASH_SIZE
; i
++)
1300 struct abbrev_info
*abbrev
= abbrevs
[i
];
1304 free (abbrev
->attrs
);
1305 abbrev
= abbrev
->next
;
1313 /* Returns true if the form is one which has a string value. */
1316 is_str_form (const struct attribute
*attr
)
1320 case DW_FORM_string
:
1327 case DW_FORM_line_strp
:
1328 case DW_FORM_GNU_strp_alt
:
1336 /* Returns true if the form is one which has an integer value. */
1339 is_int_form (const struct attribute
*attr
)
1351 case DW_FORM_ref_addr
:
1356 case DW_FORM_ref_udata
:
1357 case DW_FORM_sec_offset
:
1358 case DW_FORM_flag_present
:
1359 case DW_FORM_ref_sig8
:
1361 case DW_FORM_implicit_const
:
1362 case DW_FORM_addrx1
:
1363 case DW_FORM_addrx2
:
1364 case DW_FORM_addrx3
:
1365 case DW_FORM_addrx4
:
1366 case DW_FORM_GNU_ref_alt
:
1374 /* Returns true if the form is strx[1-4]. */
1377 is_strx_form (enum dwarf_form form
)
1379 return (form
== DW_FORM_strx
1380 || form
== DW_FORM_strx1
1381 || form
== DW_FORM_strx2
1382 || form
== DW_FORM_strx3
1383 || form
== DW_FORM_strx4
);
1386 /* Return true if the form is addrx[1-4]. */
1389 is_addrx_form (enum dwarf_form form
)
1391 return (form
== DW_FORM_addrx
1392 || form
== DW_FORM_addrx1
1393 || form
== DW_FORM_addrx2
1394 || form
== DW_FORM_addrx3
1395 || form
== DW_FORM_addrx4
);
1398 /* Returns the address in .debug_addr section using DW_AT_addr_base.
1399 Used to implement DW_FORM_addrx*. */
1401 read_indexed_address (uint64_t idx
, struct comp_unit
*unit
)
1403 struct dwarf2_debug
*stash
= unit
->stash
;
1404 struct dwarf2_debug_file
*file
= unit
->file
;
1411 if (!read_section (unit
->abfd
, &stash
->debug_sections
[debug_addr
],
1413 &file
->dwarf_addr_buffer
, &file
->dwarf_addr_size
))
1416 if (_bfd_mul_overflow (idx
, unit
->addr_size
, &offset
))
1419 offset
+= unit
->dwarf_addr_offset
;
1420 if (offset
< unit
->dwarf_addr_offset
1421 || offset
> file
->dwarf_addr_size
1422 || file
->dwarf_addr_size
- offset
< unit
->offset_size
)
1425 info_ptr
= file
->dwarf_addr_buffer
+ offset
;
1427 if (unit
->addr_size
== 4)
1428 return bfd_get_32 (unit
->abfd
, info_ptr
);
1429 else if (unit
->addr_size
== 8)
1430 return bfd_get_64 (unit
->abfd
, info_ptr
);
1435 /* Returns the string using DW_AT_str_offsets_base.
1436 Used to implement DW_FORM_strx*. */
1438 read_indexed_string (uint64_t idx
, struct comp_unit
*unit
)
1440 struct dwarf2_debug
*stash
= unit
->stash
;
1441 struct dwarf2_debug_file
*file
= unit
->file
;
1443 uint64_t str_offset
;
1449 if (!read_section (unit
->abfd
, &stash
->debug_sections
[debug_str
],
1451 &file
->dwarf_str_buffer
, &file
->dwarf_str_size
))
1454 if (!read_section (unit
->abfd
, &stash
->debug_sections
[debug_str_offsets
],
1456 &file
->dwarf_str_offsets_buffer
,
1457 &file
->dwarf_str_offsets_size
))
1460 if (_bfd_mul_overflow (idx
, unit
->offset_size
, &offset
))
1463 offset
+= unit
->dwarf_str_offset
;
1464 if (offset
< unit
->dwarf_str_offset
1465 || offset
> file
->dwarf_str_offsets_size
1466 || file
->dwarf_str_offsets_size
- offset
< unit
->offset_size
)
1469 info_ptr
= file
->dwarf_str_offsets_buffer
+ offset
;
1471 if (unit
->offset_size
== 4)
1472 str_offset
= bfd_get_32 (unit
->abfd
, info_ptr
);
1473 else if (unit
->offset_size
== 8)
1474 str_offset
= bfd_get_64 (unit
->abfd
, info_ptr
);
1478 if (str_offset
>= file
->dwarf_str_size
)
1480 return (const char *) file
->dwarf_str_buffer
+ str_offset
;
1483 /* Read and fill in the value of attribute ATTR as described by FORM.
1484 Read data starting from INFO_PTR, but never at or beyond INFO_PTR_END.
1485 Returns an updated INFO_PTR taking into account the amount of data read. */
1488 read_attribute_value (struct attribute
* attr
,
1490 bfd_vma implicit_const
,
1491 struct comp_unit
* unit
,
1492 bfd_byte
* info_ptr
,
1493 bfd_byte
* info_ptr_end
)
1495 bfd
*abfd
= unit
->abfd
;
1498 if (info_ptr
>= info_ptr_end
&& form
!= DW_FORM_flag_present
)
1500 _bfd_error_handler (_("DWARF error: info pointer extends beyond end of attributes"));
1501 bfd_set_error (bfd_error_bad_value
);
1505 attr
->form
= (enum dwarf_form
) form
;
1509 case DW_FORM_flag_present
:
1512 case DW_FORM_ref_addr
:
1513 /* DW_FORM_ref_addr is an address in DWARF2, and an offset in
1515 if (unit
->version
>= 3)
1517 if (unit
->offset_size
== 4)
1518 attr
->u
.val
= read_4_bytes (unit
->abfd
, &info_ptr
, info_ptr_end
);
1520 attr
->u
.val
= read_8_bytes (unit
->abfd
, &info_ptr
, info_ptr_end
);
1525 attr
->u
.val
= read_address (unit
, &info_ptr
, info_ptr_end
);
1527 case DW_FORM_GNU_ref_alt
:
1528 case DW_FORM_sec_offset
:
1529 if (unit
->offset_size
== 4)
1530 attr
->u
.val
= read_4_bytes (unit
->abfd
, &info_ptr
, info_ptr_end
);
1532 attr
->u
.val
= read_8_bytes (unit
->abfd
, &info_ptr
, info_ptr_end
);
1534 case DW_FORM_block2
:
1535 amt
= read_2_bytes (abfd
, &info_ptr
, info_ptr_end
);
1536 attr
->u
.blk
= read_blk (abfd
, &info_ptr
, info_ptr_end
, amt
);
1537 if (attr
->u
.blk
== NULL
)
1540 case DW_FORM_block4
:
1541 amt
= read_4_bytes (abfd
, &info_ptr
, info_ptr_end
);
1542 attr
->u
.blk
= read_blk (abfd
, &info_ptr
, info_ptr_end
, amt
);
1543 if (attr
->u
.blk
== NULL
)
1549 attr
->u
.val
= read_1_byte (abfd
, &info_ptr
, info_ptr_end
);
1551 case DW_FORM_addrx1
:
1552 attr
->u
.val
= read_1_byte (abfd
, &info_ptr
, info_ptr_end
);
1553 /* dwarf_addr_offset value 0 indicates the attribute DW_AT_addr_base
1555 if (unit
->dwarf_addr_offset
!= 0)
1556 attr
->u
.val
= read_indexed_address (attr
->u
.val
, unit
);
1560 attr
->u
.val
= read_2_bytes (abfd
, &info_ptr
, info_ptr_end
);
1562 case DW_FORM_addrx2
:
1563 attr
->u
.val
= read_2_bytes (abfd
, &info_ptr
, info_ptr_end
);
1564 if (unit
->dwarf_addr_offset
!= 0)
1565 attr
->u
.val
= read_indexed_address (attr
->u
.val
, unit
);
1567 case DW_FORM_addrx3
:
1568 attr
->u
.val
= read_3_bytes (abfd
, &info_ptr
, info_ptr_end
);
1569 if (unit
->dwarf_addr_offset
!= 0)
1570 attr
->u
.val
= read_indexed_address(attr
->u
.val
, unit
);
1574 attr
->u
.val
= read_4_bytes (abfd
, &info_ptr
, info_ptr_end
);
1576 case DW_FORM_addrx4
:
1577 attr
->u
.val
= read_4_bytes (abfd
, &info_ptr
, info_ptr_end
);
1578 if (unit
->dwarf_addr_offset
!= 0)
1579 attr
->u
.val
= read_indexed_address (attr
->u
.val
, unit
);
1583 case DW_FORM_ref_sig8
:
1584 attr
->u
.val
= read_8_bytes (abfd
, &info_ptr
, info_ptr_end
);
1586 case DW_FORM_string
:
1587 attr
->u
.str
= read_string (&info_ptr
, info_ptr_end
);
1590 attr
->u
.str
= read_indirect_string (unit
, &info_ptr
, info_ptr_end
);
1592 case DW_FORM_line_strp
:
1593 attr
->u
.str
= read_indirect_line_string (unit
, &info_ptr
, info_ptr_end
);
1595 case DW_FORM_GNU_strp_alt
:
1596 attr
->u
.str
= read_alt_indirect_string (unit
, &info_ptr
, info_ptr_end
);
1599 attr
->u
.val
= read_1_byte (abfd
, &info_ptr
, info_ptr_end
);
1600 /* dwarf_str_offset value 0 indicates the attribute DW_AT_str_offsets_base
1602 if (unit
->dwarf_str_offset
!= 0)
1603 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
1608 attr
->u
.val
= read_2_bytes (abfd
, &info_ptr
, info_ptr_end
);
1609 if (unit
->dwarf_str_offset
!= 0)
1610 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
1615 attr
->u
.val
= read_3_bytes (abfd
, &info_ptr
, info_ptr_end
);
1616 if (unit
->dwarf_str_offset
!= 0)
1617 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
1622 attr
->u
.val
= read_4_bytes (abfd
, &info_ptr
, info_ptr_end
);
1623 if (unit
->dwarf_str_offset
!= 0)
1624 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
1629 attr
->u
.val
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1630 false, info_ptr_end
);
1631 if (unit
->dwarf_str_offset
!= 0)
1632 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
1636 case DW_FORM_exprloc
:
1638 amt
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1639 false, info_ptr_end
);
1640 attr
->u
.blk
= read_blk (abfd
, &info_ptr
, info_ptr_end
, amt
);
1641 if (attr
->u
.blk
== NULL
)
1644 case DW_FORM_block1
:
1645 amt
= read_1_byte (abfd
, &info_ptr
, info_ptr_end
);
1646 attr
->u
.blk
= read_blk (abfd
, &info_ptr
, info_ptr_end
, amt
);
1647 if (attr
->u
.blk
== NULL
)
1651 attr
->u
.sval
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1652 true, info_ptr_end
);
1655 case DW_FORM_rnglistx
:
1656 case DW_FORM_loclistx
:
1657 /* FIXME: Add support for these forms! */
1659 case DW_FORM_ref_udata
:
1661 attr
->u
.val
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1662 false, info_ptr_end
);
1665 attr
->u
.val
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1666 false, info_ptr_end
);
1667 if (unit
->dwarf_addr_offset
!= 0)
1668 attr
->u
.val
= read_indexed_address (attr
->u
.val
, unit
);
1670 case DW_FORM_indirect
:
1671 form
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1672 false, info_ptr_end
);
1673 if (form
== DW_FORM_implicit_const
)
1674 implicit_const
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
1675 true, info_ptr_end
);
1676 info_ptr
= read_attribute_value (attr
, form
, implicit_const
, unit
,
1677 info_ptr
, info_ptr_end
);
1679 case DW_FORM_implicit_const
:
1680 attr
->form
= DW_FORM_sdata
;
1681 attr
->u
.sval
= implicit_const
;
1683 case DW_FORM_data16
:
1684 /* This is really a "constant", but there is no way to store that
1685 so pretend it is a 16 byte block instead. */
1686 attr
->u
.blk
= read_blk (abfd
, &info_ptr
, info_ptr_end
, 16);
1687 if (attr
->u
.blk
== NULL
)
1692 _bfd_error_handler (_("DWARF error: invalid or unhandled FORM value: %#x"),
1694 bfd_set_error (bfd_error_bad_value
);
1700 /* Read an attribute described by an abbreviated attribute. */
1703 read_attribute (struct attribute
* attr
,
1704 struct attr_abbrev
* abbrev
,
1705 struct comp_unit
* unit
,
1706 bfd_byte
* info_ptr
,
1707 bfd_byte
* info_ptr_end
)
1709 attr
->name
= abbrev
->name
;
1710 info_ptr
= read_attribute_value (attr
, abbrev
->form
, abbrev
->implicit_const
,
1711 unit
, info_ptr
, info_ptr_end
);
1715 /* Return mangling style given LANG. */
1718 mangle_style (int lang
)
1726 case DW_LANG_C_plus_plus
:
1727 case DW_LANG_C_plus_plus_03
:
1728 case DW_LANG_C_plus_plus_11
:
1729 case DW_LANG_C_plus_plus_14
:
1739 case DW_LANG_Rust_old
:
1747 case DW_LANG_Cobol74
:
1748 case DW_LANG_Cobol85
:
1749 case DW_LANG_Fortran77
:
1750 case DW_LANG_Pascal83
:
1755 case DW_LANG_Mips_Assembler
:
1757 case DW_LANG_HP_Basic91
:
1758 case DW_LANG_HP_IMacro
:
1759 case DW_LANG_HP_Assembler
:
1764 /* Source line information table routines. */
1766 #define FILE_ALLOC_CHUNK 5
1767 #define DIR_ALLOC_CHUNK 5
1771 struct line_info
* prev_line
;
1775 unsigned int column
;
1776 unsigned int discriminator
;
1777 unsigned char op_index
;
1778 unsigned char end_sequence
; /* End of (sequential) code sequence. */
1789 struct line_sequence
1792 struct line_sequence
* prev_sequence
;
1793 struct line_info
* last_line
; /* Largest VMA. */
1794 struct line_info
** line_info_lookup
;
1795 bfd_size_type num_lines
;
1798 struct line_info_table
1801 unsigned int num_files
;
1802 unsigned int num_dirs
;
1803 unsigned int num_sequences
;
1804 bool use_dir_and_file_0
;
1807 struct fileinfo
* files
;
1808 struct line_sequence
* sequences
;
1809 struct line_info
* lcl_head
; /* Local head; used in 'add_line_info'. */
1812 /* Remember some information about each function. If the function is
1813 inlined (DW_TAG_inlined_subroutine) it may have two additional
1814 attributes, DW_AT_call_file and DW_AT_call_line, which specify the
1815 source code location where this function was inlined. */
1819 /* Pointer to previous function in list of all functions. */
1820 struct funcinfo
*prev_func
;
1821 /* Pointer to function one scope higher. */
1822 struct funcinfo
*caller_func
;
1823 /* Source location file name where caller_func inlines this func. */
1825 /* Source location file name. */
1827 /* Source location line number where caller_func inlines this func. */
1829 /* Source location line number. */
1834 struct arange arange
;
1835 /* The offset of the funcinfo from the start of the unit. */
1836 uint64_t unit_offset
;
1839 struct lookup_funcinfo
1841 /* Function information corresponding to this lookup table entry. */
1842 struct funcinfo
*funcinfo
;
1844 /* The lowest address for this specific function. */
1847 /* The highest address of this function before the lookup table is sorted.
1848 The highest address of all prior functions after the lookup table is
1849 sorted, which is used for binary search. */
1851 /* Index of this function, used to ensure qsort is stable. */
1857 /* Pointer to previous variable in list of all variables. */
1858 struct varinfo
*prev_var
;
1859 /* The offset of the varinfo from the start of the unit. */
1860 uint64_t unit_offset
;
1861 /* Source location file name. */
1863 /* Source location line number. */
1865 /* The type of this variable. */
1867 /* The name of the variable, if it has one. */
1869 /* The address of the variable. */
1871 /* Is this a stack variable? */
1875 /* Return TRUE if NEW_LINE should sort after LINE. */
1878 new_line_sorts_after (struct line_info
*new_line
, struct line_info
*line
)
1880 return (new_line
->address
> line
->address
1881 || (new_line
->address
== line
->address
1882 && new_line
->op_index
> line
->op_index
));
1886 /* Adds a new entry to the line_info list in the line_info_table, ensuring
1887 that the list is sorted. Note that the line_info list is sorted from
1888 highest to lowest VMA (with possible duplicates); that is,
1889 line_info->prev_line always accesses an equal or smaller VMA. */
1892 add_line_info (struct line_info_table
*table
,
1894 unsigned char op_index
,
1897 unsigned int column
,
1898 unsigned int discriminator
,
1901 size_t amt
= sizeof (struct line_info
);
1902 struct line_sequence
* seq
= table
->sequences
;
1903 struct line_info
* info
= (struct line_info
*) bfd_alloc (table
->abfd
, amt
);
1908 /* Set member data of 'info'. */
1909 info
->prev_line
= NULL
;
1910 info
->address
= address
;
1911 info
->op_index
= op_index
;
1913 info
->column
= column
;
1914 info
->discriminator
= discriminator
;
1915 info
->end_sequence
= end_sequence
;
1917 if (filename
&& filename
[0])
1919 info
->filename
= (char *) bfd_alloc (table
->abfd
, strlen (filename
) + 1);
1920 if (info
->filename
== NULL
)
1922 strcpy (info
->filename
, filename
);
1925 info
->filename
= NULL
;
1927 /* Find the correct location for 'info'. Normally we will receive
1928 new line_info data 1) in order and 2) with increasing VMAs.
1929 However some compilers break the rules (cf. decode_line_info) and
1930 so we include some heuristics for quickly finding the correct
1931 location for 'info'. In particular, these heuristics optimize for
1932 the common case in which the VMA sequence that we receive is a
1933 list of locally sorted VMAs such as
1934 p...z a...j (where a < j < p < z)
1936 Note: table->lcl_head is used to head an *actual* or *possible*
1937 sub-sequence within the list (such as a...j) that is not directly
1938 headed by table->last_line
1940 Note: we may receive duplicate entries from 'decode_line_info'. */
1943 && seq
->last_line
->address
== address
1944 && seq
->last_line
->op_index
== op_index
1945 && seq
->last_line
->end_sequence
== end_sequence
)
1947 /* We only keep the last entry with the same address and end
1948 sequence. See PR ld/4986. */
1949 if (table
->lcl_head
== seq
->last_line
)
1950 table
->lcl_head
= info
;
1951 info
->prev_line
= seq
->last_line
->prev_line
;
1952 seq
->last_line
= info
;
1954 else if (!seq
|| seq
->last_line
->end_sequence
)
1956 /* Start a new line sequence. */
1957 amt
= sizeof (struct line_sequence
);
1958 seq
= (struct line_sequence
*) bfd_malloc (amt
);
1961 seq
->low_pc
= address
;
1962 seq
->prev_sequence
= table
->sequences
;
1963 seq
->last_line
= info
;
1964 table
->lcl_head
= info
;
1965 table
->sequences
= seq
;
1966 table
->num_sequences
++;
1968 else if (info
->end_sequence
1969 || new_line_sorts_after (info
, seq
->last_line
))
1971 /* Normal case: add 'info' to the beginning of the current sequence. */
1972 info
->prev_line
= seq
->last_line
;
1973 seq
->last_line
= info
;
1975 /* lcl_head: initialize to head a *possible* sequence at the end. */
1976 if (!table
->lcl_head
)
1977 table
->lcl_head
= info
;
1979 else if (!new_line_sorts_after (info
, table
->lcl_head
)
1980 && (!table
->lcl_head
->prev_line
1981 || new_line_sorts_after (info
, table
->lcl_head
->prev_line
)))
1983 /* Abnormal but easy: lcl_head is the head of 'info'. */
1984 info
->prev_line
= table
->lcl_head
->prev_line
;
1985 table
->lcl_head
->prev_line
= info
;
1989 /* Abnormal and hard: Neither 'last_line' nor 'lcl_head'
1990 are valid heads for 'info'. Reset 'lcl_head'. */
1991 struct line_info
* li2
= seq
->last_line
; /* Always non-NULL. */
1992 struct line_info
* li1
= li2
->prev_line
;
1996 if (!new_line_sorts_after (info
, li2
)
1997 && new_line_sorts_after (info
, li1
))
2000 li2
= li1
; /* always non-NULL */
2001 li1
= li1
->prev_line
;
2003 table
->lcl_head
= li2
;
2004 info
->prev_line
= table
->lcl_head
->prev_line
;
2005 table
->lcl_head
->prev_line
= info
;
2006 if (address
< seq
->low_pc
)
2007 seq
->low_pc
= address
;
2012 /* Extract a fully qualified filename from a line info table.
2013 The returned string has been malloc'ed and it is the caller's
2014 responsibility to free it. */
2017 concat_filename (struct line_info_table
*table
, unsigned int file
)
2021 /* Pre DWARF-5 entry 0 in the directory and filename tables was not used.
2022 So in order to save space in the tables used here the info for, eg
2023 directory 1 is stored in slot 0 of the directory table, directory 2
2024 in slot 1 and so on.
2026 Starting with DWARF-5 the 0'th entry is used so there is a one to one
2027 mapping between DWARF slots and internal table entries. */
2028 if (! table
->use_dir_and_file_0
)
2030 /* Pre DWARF-5, FILE == 0 means unknown. */
2032 return strdup ("<unknown>");
2036 if (table
== NULL
|| file
>= table
->num_files
)
2039 (_("DWARF error: mangled line number section (bad file number)"));
2040 return strdup ("<unknown>");
2043 filename
= table
->files
[file
].name
;
2045 if (filename
== NULL
)
2046 return strdup ("<unknown>");
2048 if (!IS_ABSOLUTE_PATH (filename
))
2050 char *dir_name
= NULL
;
2051 char *subdir_name
= NULL
;
2055 if (table
->files
[file
].dir
2056 /* PR 17512: file: 0317e960. */
2057 && table
->files
[file
].dir
<= table
->num_dirs
2058 /* PR 17512: file: 7f3d2e4b. */
2059 && table
->dirs
!= NULL
)
2061 if (table
->use_dir_and_file_0
)
2062 subdir_name
= table
->dirs
[table
->files
[file
].dir
];
2064 subdir_name
= table
->dirs
[table
->files
[file
].dir
- 1];
2067 if (!subdir_name
|| !IS_ABSOLUTE_PATH (subdir_name
))
2068 dir_name
= table
->comp_dir
;
2072 dir_name
= subdir_name
;
2077 return strdup (filename
);
2079 len
= strlen (dir_name
) + strlen (filename
) + 2;
2083 len
+= strlen (subdir_name
) + 1;
2084 name
= (char *) bfd_malloc (len
);
2086 sprintf (name
, "%s/%s/%s", dir_name
, subdir_name
, filename
);
2090 name
= (char *) bfd_malloc (len
);
2092 sprintf (name
, "%s/%s", dir_name
, filename
);
2098 return strdup (filename
);
2101 /* Number of bits in a bfd_vma. */
2102 #define VMA_BITS (8 * sizeof (bfd_vma))
2104 /* Check whether [low1, high1) can be combined with [low2, high2),
2105 i.e., they touch or overlap. */
2108 ranges_overlap (bfd_vma low1
,
2113 if (low1
== low2
|| high1
== high2
)
2116 /* Sort so that low1 is below low2. */
2130 /* We touch iff low2 == high1.
2131 We overlap iff low2 is within [low1, high1). */
2132 return low2
<= high1
;
2135 /* Insert an address range in the trie mapping addresses to compilation units.
2136 Will return the new trie node (usually the same as is being sent in, but
2137 in case of a leaf-to-interior conversion, or expansion of a leaf, it may be
2138 different), or NULL on failure. */
2140 static struct trie_node
*
2141 insert_arange_in_trie (bfd
*abfd
,
2142 struct trie_node
*trie
,
2144 unsigned int trie_pc_bits
,
2145 struct comp_unit
*unit
,
2149 bfd_vma clamped_low_pc
, clamped_high_pc
;
2150 int ch
, from_ch
, to_ch
;
2151 bool is_full_leaf
= false;
2153 /* See if we can extend any of the existing ranges. This merging
2154 isn't perfect (if merging opens up the possibility of merging two existing
2155 ranges, we won't find them), but it takes the majority of the cases. */
2156 if (trie
->num_room_in_leaf
> 0)
2158 struct trie_leaf
*leaf
= (struct trie_leaf
*) trie
;
2161 for (i
= 0; i
< leaf
->num_stored_in_leaf
; ++i
)
2163 if (leaf
->ranges
[i
].unit
== unit
2164 && ranges_overlap (low_pc
, high_pc
,
2165 leaf
->ranges
[i
].low_pc
,
2166 leaf
->ranges
[i
].high_pc
))
2168 if (low_pc
< leaf
->ranges
[i
].low_pc
)
2169 leaf
->ranges
[i
].low_pc
= low_pc
;
2170 if (high_pc
> leaf
->ranges
[i
].high_pc
)
2171 leaf
->ranges
[i
].high_pc
= high_pc
;
2176 is_full_leaf
= leaf
->num_stored_in_leaf
== trie
->num_room_in_leaf
;
2179 /* If we're a leaf with no more room and we're _not_ at the bottom,
2180 convert to an interior node. */
2181 if (is_full_leaf
&& trie_pc_bits
< VMA_BITS
)
2183 const struct trie_leaf
*leaf
= (struct trie_leaf
*) trie
;
2186 trie
= bfd_zalloc (abfd
, sizeof (struct trie_interior
));
2189 is_full_leaf
= false;
2191 /* TODO: If we wanted to save a little more memory at the cost of
2192 complexity, we could have reused the old leaf node as one of the
2193 children of the new interior node, instead of throwing it away. */
2194 for (i
= 0; i
< leaf
->num_stored_in_leaf
; ++i
)
2196 if (!insert_arange_in_trie (abfd
, trie
, trie_pc
, trie_pc_bits
,
2197 leaf
->ranges
[i
].unit
, leaf
->ranges
[i
].low_pc
,
2198 leaf
->ranges
[i
].high_pc
))
2203 /* If we're a leaf with no more room and we _are_ at the bottom,
2204 we have no choice but to just make it larger. */
2207 const struct trie_leaf
*leaf
= (struct trie_leaf
*) trie
;
2208 unsigned int new_room_in_leaf
= trie
->num_room_in_leaf
* 2;
2209 struct trie_leaf
*new_leaf
;
2210 size_t amt
= (sizeof (struct trie_leaf
)
2211 + ((new_room_in_leaf
- TRIE_LEAF_SIZE
)
2212 * sizeof (leaf
->ranges
[0])));
2213 new_leaf
= bfd_zalloc (abfd
, amt
);
2214 new_leaf
->head
.num_room_in_leaf
= new_room_in_leaf
;
2215 new_leaf
->num_stored_in_leaf
= leaf
->num_stored_in_leaf
;
2217 memcpy (new_leaf
->ranges
,
2219 leaf
->num_stored_in_leaf
* sizeof (leaf
->ranges
[0]));
2220 trie
= &new_leaf
->head
;
2221 is_full_leaf
= false;
2223 /* Now the insert below will go through. */
2226 /* If we're a leaf (now with room), we can just insert at the end. */
2227 if (trie
->num_room_in_leaf
> 0)
2229 struct trie_leaf
*leaf
= (struct trie_leaf
*) trie
;
2231 unsigned int i
= leaf
->num_stored_in_leaf
++;
2232 leaf
->ranges
[i
].unit
= unit
;
2233 leaf
->ranges
[i
].low_pc
= low_pc
;
2234 leaf
->ranges
[i
].high_pc
= high_pc
;
2238 /* Now we are definitely an interior node, so recurse into all
2239 the relevant buckets. */
2241 /* Clamp the range to the current trie bucket. */
2242 clamped_low_pc
= low_pc
;
2243 clamped_high_pc
= high_pc
;
2244 if (trie_pc_bits
> 0)
2246 bfd_vma bucket_high_pc
=
2247 trie_pc
+ ((bfd_vma
) -1 >> trie_pc_bits
); /* Inclusive. */
2248 if (clamped_low_pc
< trie_pc
)
2249 clamped_low_pc
= trie_pc
;
2250 if (clamped_high_pc
> bucket_high_pc
)
2251 clamped_high_pc
= bucket_high_pc
;
2254 /* Insert the ranges in all buckets that it spans. */
2255 from_ch
= (clamped_low_pc
>> (VMA_BITS
- trie_pc_bits
- 8)) & 0xff;
2256 to_ch
= ((clamped_high_pc
- 1) >> (VMA_BITS
- trie_pc_bits
- 8)) & 0xff;
2257 for (ch
= from_ch
; ch
<= to_ch
; ++ch
)
2259 struct trie_interior
*interior
= (struct trie_interior
*) trie
;
2260 struct trie_node
*child
= interior
->children
[ch
];
2264 child
= alloc_trie_leaf (abfd
);
2268 bfd_vma bucket
= (bfd_vma
) ch
<< (VMA_BITS
- trie_pc_bits
- 8);
2269 child
= insert_arange_in_trie (abfd
,
2279 interior
->children
[ch
] = child
;
2286 arange_add (struct comp_unit
*unit
, struct arange
*first_arange
,
2287 struct trie_node
**trie_root
, bfd_vma low_pc
, bfd_vma high_pc
)
2289 struct arange
*arange
;
2291 /* Ignore empty ranges. */
2292 if (low_pc
== high_pc
)
2295 if (trie_root
!= NULL
)
2297 *trie_root
= insert_arange_in_trie (unit
->file
->bfd_ptr
,
2304 if (*trie_root
== NULL
)
2308 /* If the first arange is empty, use it. */
2309 if (first_arange
->high
== 0)
2311 first_arange
->low
= low_pc
;
2312 first_arange
->high
= high_pc
;
2316 /* Next see if we can cheaply extend an existing range. */
2317 arange
= first_arange
;
2320 if (low_pc
== arange
->high
)
2322 arange
->high
= high_pc
;
2325 if (high_pc
== arange
->low
)
2327 arange
->low
= low_pc
;
2330 arange
= arange
->next
;
2334 /* Need to allocate a new arange and insert it into the arange list.
2335 Order isn't significant, so just insert after the first arange. */
2336 arange
= (struct arange
*) bfd_alloc (unit
->abfd
, sizeof (*arange
));
2339 arange
->low
= low_pc
;
2340 arange
->high
= high_pc
;
2341 arange
->next
= first_arange
->next
;
2342 first_arange
->next
= arange
;
2346 /* Compare function for line sequences. */
2349 compare_sequences (const void* a
, const void* b
)
2351 const struct line_sequence
* seq1
= a
;
2352 const struct line_sequence
* seq2
= b
;
2354 /* Sort by low_pc as the primary key. */
2355 if (seq1
->low_pc
< seq2
->low_pc
)
2357 if (seq1
->low_pc
> seq2
->low_pc
)
2360 /* If low_pc values are equal, sort in reverse order of
2361 high_pc, so that the largest region comes first. */
2362 if (seq1
->last_line
->address
< seq2
->last_line
->address
)
2364 if (seq1
->last_line
->address
> seq2
->last_line
->address
)
2367 if (seq1
->last_line
->op_index
< seq2
->last_line
->op_index
)
2369 if (seq1
->last_line
->op_index
> seq2
->last_line
->op_index
)
2372 /* num_lines is initially an index, to make the sort stable. */
2373 if (seq1
->num_lines
< seq2
->num_lines
)
2375 if (seq1
->num_lines
> seq2
->num_lines
)
2380 /* Construct the line information table for quick lookup. */
2383 build_line_info_table (struct line_info_table
* table
,
2384 struct line_sequence
* seq
)
2387 struct line_info
**line_info_lookup
;
2388 struct line_info
*each_line
;
2389 unsigned int num_lines
;
2390 unsigned int line_index
;
2392 if (seq
->line_info_lookup
!= NULL
)
2395 /* Count the number of line information entries. We could do this while
2396 scanning the debug information, but some entries may be added via
2397 lcl_head without having a sequence handy to increment the number of
2400 for (each_line
= seq
->last_line
; each_line
; each_line
= each_line
->prev_line
)
2403 seq
->num_lines
= num_lines
;
2407 /* Allocate space for the line information lookup table. */
2408 amt
= sizeof (struct line_info
*) * num_lines
;
2409 line_info_lookup
= (struct line_info
**) bfd_alloc (table
->abfd
, amt
);
2410 seq
->line_info_lookup
= line_info_lookup
;
2411 if (line_info_lookup
== NULL
)
2414 /* Create the line information lookup table. */
2415 line_index
= num_lines
;
2416 for (each_line
= seq
->last_line
; each_line
; each_line
= each_line
->prev_line
)
2417 line_info_lookup
[--line_index
] = each_line
;
2419 BFD_ASSERT (line_index
== 0);
2423 /* Sort the line sequences for quick lookup. */
2426 sort_line_sequences (struct line_info_table
* table
)
2429 struct line_sequence
*sequences
;
2430 struct line_sequence
*seq
;
2432 unsigned int num_sequences
= table
->num_sequences
;
2433 bfd_vma last_high_pc
;
2435 if (num_sequences
== 0)
2438 /* Allocate space for an array of sequences. */
2439 amt
= sizeof (struct line_sequence
) * num_sequences
;
2440 sequences
= (struct line_sequence
*) bfd_alloc (table
->abfd
, amt
);
2441 if (sequences
== NULL
)
2444 /* Copy the linked list into the array, freeing the original nodes. */
2445 seq
= table
->sequences
;
2446 for (n
= 0; n
< num_sequences
; n
++)
2448 struct line_sequence
* last_seq
= seq
;
2451 sequences
[n
].low_pc
= seq
->low_pc
;
2452 sequences
[n
].prev_sequence
= NULL
;
2453 sequences
[n
].last_line
= seq
->last_line
;
2454 sequences
[n
].line_info_lookup
= NULL
;
2455 sequences
[n
].num_lines
= n
;
2456 seq
= seq
->prev_sequence
;
2459 BFD_ASSERT (seq
== NULL
);
2461 qsort (sequences
, n
, sizeof (struct line_sequence
), compare_sequences
);
2463 /* Make the list binary-searchable by trimming overlapping entries
2464 and removing nested entries. */
2466 last_high_pc
= sequences
[0].last_line
->address
;
2467 for (n
= 1; n
< table
->num_sequences
; n
++)
2469 if (sequences
[n
].low_pc
< last_high_pc
)
2471 if (sequences
[n
].last_line
->address
<= last_high_pc
)
2472 /* Skip nested entries. */
2475 /* Trim overlapping entries. */
2476 sequences
[n
].low_pc
= last_high_pc
;
2478 last_high_pc
= sequences
[n
].last_line
->address
;
2479 if (n
> num_sequences
)
2481 /* Close up the gap. */
2482 sequences
[num_sequences
].low_pc
= sequences
[n
].low_pc
;
2483 sequences
[num_sequences
].last_line
= sequences
[n
].last_line
;
2488 table
->sequences
= sequences
;
2489 table
->num_sequences
= num_sequences
;
2493 /* Add directory to TABLE. CUR_DIR memory ownership is taken by TABLE. */
2496 line_info_add_include_dir (struct line_info_table
*table
, char *cur_dir
)
2498 if ((table
->num_dirs
% DIR_ALLOC_CHUNK
) == 0)
2503 amt
= table
->num_dirs
+ DIR_ALLOC_CHUNK
;
2504 amt
*= sizeof (char *);
2506 tmp
= (char **) bfd_realloc (table
->dirs
, amt
);
2512 table
->dirs
[table
->num_dirs
++] = cur_dir
;
2517 line_info_add_include_dir_stub (struct line_info_table
*table
, char *cur_dir
,
2518 unsigned int dir ATTRIBUTE_UNUSED
,
2519 unsigned int xtime ATTRIBUTE_UNUSED
,
2520 unsigned int size ATTRIBUTE_UNUSED
)
2522 return line_info_add_include_dir (table
, cur_dir
);
2525 /* Add file to TABLE. CUR_FILE memory ownership is taken by TABLE. */
2528 line_info_add_file_name (struct line_info_table
*table
, char *cur_file
,
2529 unsigned int dir
, unsigned int xtime
,
2532 if ((table
->num_files
% FILE_ALLOC_CHUNK
) == 0)
2534 struct fileinfo
*tmp
;
2537 amt
= table
->num_files
+ FILE_ALLOC_CHUNK
;
2538 amt
*= sizeof (struct fileinfo
);
2540 tmp
= (struct fileinfo
*) bfd_realloc (table
->files
, amt
);
2546 table
->files
[table
->num_files
].name
= cur_file
;
2547 table
->files
[table
->num_files
].dir
= dir
;
2548 table
->files
[table
->num_files
].time
= xtime
;
2549 table
->files
[table
->num_files
].size
= size
;
2554 /* Read directory or file name entry format, starting with byte of
2555 format count entries, ULEB128 pairs of entry formats, ULEB128 of
2556 entries count and the entries themselves in the described entry
2560 read_formatted_entries (struct comp_unit
*unit
, bfd_byte
**bufp
,
2561 bfd_byte
*buf_end
, struct line_info_table
*table
,
2562 bool (*callback
) (struct line_info_table
*table
,
2568 bfd
*abfd
= unit
->abfd
;
2569 bfd_byte format_count
, formati
;
2570 bfd_vma data_count
, datai
;
2571 bfd_byte
*buf
= *bufp
;
2572 bfd_byte
*format_header_data
;
2574 format_count
= read_1_byte (abfd
, &buf
, buf_end
);
2575 format_header_data
= buf
;
2576 for (formati
= 0; formati
< format_count
; formati
++)
2578 _bfd_safe_read_leb128 (abfd
, &buf
, false, buf_end
);
2579 _bfd_safe_read_leb128 (abfd
, &buf
, false, buf_end
);
2582 data_count
= _bfd_safe_read_leb128 (abfd
, &buf
, false, buf_end
);
2583 if (format_count
== 0 && data_count
!= 0)
2585 _bfd_error_handler (_("DWARF error: zero format count"));
2586 bfd_set_error (bfd_error_bad_value
);
2590 /* PR 22210. Paranoia check. Don't bother running the loop
2591 if we know that we are going to run out of buffer. */
2592 if (data_count
> (bfd_vma
) (buf_end
- buf
))
2595 (_("DWARF error: data count (%" PRIx64
") larger than buffer size"),
2596 (uint64_t) data_count
);
2597 bfd_set_error (bfd_error_bad_value
);
2601 for (datai
= 0; datai
< data_count
; datai
++)
2603 bfd_byte
*format
= format_header_data
;
2606 memset (&fe
, 0, sizeof fe
);
2607 for (formati
= 0; formati
< format_count
; formati
++)
2609 bfd_vma content_type
, form
;
2611 char **stringp
= &string_trash
;
2612 unsigned int uint_trash
, *uintp
= &uint_trash
;
2613 struct attribute attr
;
2615 content_type
= _bfd_safe_read_leb128 (abfd
, &format
, false, buf_end
);
2616 switch (content_type
)
2621 case DW_LNCT_directory_index
:
2624 case DW_LNCT_timestamp
:
2634 (_("DWARF error: unknown format content type %" PRIu64
),
2635 (uint64_t) content_type
);
2636 bfd_set_error (bfd_error_bad_value
);
2640 form
= _bfd_safe_read_leb128 (abfd
, &format
, false, buf_end
);
2641 buf
= read_attribute_value (&attr
, form
, 0, unit
, buf
, buf_end
);
2646 case DW_FORM_string
:
2647 case DW_FORM_line_strp
:
2653 *stringp
= attr
.u
.str
;
2661 *uintp
= attr
.u
.val
;
2664 case DW_FORM_data16
:
2665 /* MD5 data is in the attr.blk, but we are ignoring those. */
2670 if (!callback (table
, fe
.name
, fe
.dir
, fe
.time
, fe
.size
))
2678 /* Decode the line number information for UNIT. */
2680 static struct line_info_table
*
2681 decode_line_info (struct comp_unit
*unit
)
2683 bfd
*abfd
= unit
->abfd
;
2684 struct dwarf2_debug
*stash
= unit
->stash
;
2685 struct dwarf2_debug_file
*file
= unit
->file
;
2686 struct line_info_table
* table
;
2689 struct line_head lh
;
2690 unsigned int i
, offset_size
;
2691 char *cur_file
, *cur_dir
;
2692 unsigned char op_code
, extended_op
, adj_opcode
;
2693 unsigned int exop_len
;
2696 if (unit
->line_offset
== 0 && file
->line_table
)
2697 return file
->line_table
;
2699 if (! read_section (abfd
, &stash
->debug_sections
[debug_line
],
2700 file
->syms
, unit
->line_offset
,
2701 &file
->dwarf_line_buffer
, &file
->dwarf_line_size
))
2704 if (file
->dwarf_line_size
< 16)
2707 (_("DWARF error: line info section is too small (%" PRId64
")"),
2708 (int64_t) file
->dwarf_line_size
);
2709 bfd_set_error (bfd_error_bad_value
);
2712 line_ptr
= file
->dwarf_line_buffer
+ unit
->line_offset
;
2713 line_end
= file
->dwarf_line_buffer
+ file
->dwarf_line_size
;
2715 /* Read in the prologue. */
2716 lh
.total_length
= read_4_bytes (abfd
, &line_ptr
, line_end
);
2718 if (lh
.total_length
== 0xffffffff)
2720 lh
.total_length
= read_8_bytes (abfd
, &line_ptr
, line_end
);
2723 else if (lh
.total_length
== 0 && unit
->addr_size
== 8)
2725 /* Handle (non-standard) 64-bit DWARF2 formats. */
2726 lh
.total_length
= read_4_bytes (abfd
, &line_ptr
, line_end
);
2730 if (lh
.total_length
> (size_t) (line_end
- line_ptr
))
2733 /* xgettext: c-format */
2734 (_("DWARF error: line info data is bigger (%#" PRIx64
")"
2735 " than the space remaining in the section (%#lx)"),
2736 (uint64_t) lh
.total_length
, (unsigned long) (line_end
- line_ptr
));
2737 bfd_set_error (bfd_error_bad_value
);
2741 line_end
= line_ptr
+ lh
.total_length
;
2743 lh
.version
= read_2_bytes (abfd
, &line_ptr
, line_end
);
2744 if (lh
.version
< 2 || lh
.version
> 5)
2747 (_("DWARF error: unhandled .debug_line version %d"), lh
.version
);
2748 bfd_set_error (bfd_error_bad_value
);
2752 if (line_ptr
+ offset_size
+ (lh
.version
>= 5 ? 8 : (lh
.version
>= 4 ? 6 : 5))
2756 (_("DWARF error: ran out of room reading prologue"));
2757 bfd_set_error (bfd_error_bad_value
);
2761 if (lh
.version
>= 5)
2763 unsigned int segment_selector_size
;
2765 /* Skip address size. */
2766 read_1_byte (abfd
, &line_ptr
, line_end
);
2768 segment_selector_size
= read_1_byte (abfd
, &line_ptr
, line_end
);
2769 if (segment_selector_size
!= 0)
2772 (_("DWARF error: line info unsupported segment selector size %u"),
2773 segment_selector_size
);
2774 bfd_set_error (bfd_error_bad_value
);
2779 if (offset_size
== 4)
2780 lh
.prologue_length
= read_4_bytes (abfd
, &line_ptr
, line_end
);
2782 lh
.prologue_length
= read_8_bytes (abfd
, &line_ptr
, line_end
);
2784 lh
.minimum_instruction_length
= read_1_byte (abfd
, &line_ptr
, line_end
);
2786 if (lh
.version
>= 4)
2787 lh
.maximum_ops_per_insn
= read_1_byte (abfd
, &line_ptr
, line_end
);
2789 lh
.maximum_ops_per_insn
= 1;
2791 if (lh
.maximum_ops_per_insn
== 0)
2794 (_("DWARF error: invalid maximum operations per instruction"));
2795 bfd_set_error (bfd_error_bad_value
);
2799 lh
.default_is_stmt
= read_1_byte (abfd
, &line_ptr
, line_end
);
2800 lh
.line_base
= read_1_signed_byte (abfd
, &line_ptr
, line_end
);
2801 lh
.line_range
= read_1_byte (abfd
, &line_ptr
, line_end
);
2802 lh
.opcode_base
= read_1_byte (abfd
, &line_ptr
, line_end
);
2804 if (line_ptr
+ (lh
.opcode_base
- 1) >= line_end
)
2806 _bfd_error_handler (_("DWARF error: ran out of room reading opcodes"));
2807 bfd_set_error (bfd_error_bad_value
);
2811 amt
= lh
.opcode_base
* sizeof (unsigned char);
2812 lh
.standard_opcode_lengths
= (unsigned char *) bfd_alloc (abfd
, amt
);
2814 lh
.standard_opcode_lengths
[0] = 1;
2816 for (i
= 1; i
< lh
.opcode_base
; ++i
)
2817 lh
.standard_opcode_lengths
[i
] = read_1_byte (abfd
, &line_ptr
, line_end
);
2819 amt
= sizeof (struct line_info_table
);
2820 table
= (struct line_info_table
*) bfd_alloc (abfd
, amt
);
2824 table
->comp_dir
= unit
->comp_dir
;
2826 table
->num_files
= 0;
2827 table
->files
= NULL
;
2829 table
->num_dirs
= 0;
2832 table
->num_sequences
= 0;
2833 table
->sequences
= NULL
;
2835 table
->lcl_head
= NULL
;
2837 if (lh
.version
>= 5)
2839 /* Read directory table. */
2840 if (!read_formatted_entries (unit
, &line_ptr
, line_end
, table
,
2841 line_info_add_include_dir_stub
))
2844 /* Read file name table. */
2845 if (!read_formatted_entries (unit
, &line_ptr
, line_end
, table
,
2846 line_info_add_file_name
))
2848 table
->use_dir_and_file_0
= true;
2852 /* Read directory table. */
2853 while ((cur_dir
= read_string (&line_ptr
, line_end
)) != NULL
)
2855 if (!line_info_add_include_dir (table
, cur_dir
))
2859 /* Read file name table. */
2860 while ((cur_file
= read_string (&line_ptr
, line_end
)) != NULL
)
2862 unsigned int dir
, xtime
, size
;
2864 dir
= _bfd_safe_read_leb128 (abfd
, &line_ptr
, false, line_end
);
2865 xtime
= _bfd_safe_read_leb128 (abfd
, &line_ptr
, false, line_end
);
2866 size
= _bfd_safe_read_leb128 (abfd
, &line_ptr
, false, line_end
);
2868 if (!line_info_add_file_name (table
, cur_file
, dir
, xtime
, size
))
2871 table
->use_dir_and_file_0
= false;
2874 /* Read the statement sequences until there's nothing left. */
2875 while (line_ptr
< line_end
)
2877 /* State machine registers. */
2878 bfd_vma address
= 0;
2879 unsigned char op_index
= 0;
2880 char * filename
= NULL
;
2881 unsigned int line
= 1;
2882 unsigned int column
= 0;
2883 unsigned int discriminator
= 0;
2884 int is_stmt
= lh
.default_is_stmt
;
2885 int end_sequence
= 0;
2886 unsigned int dir
, xtime
, size
;
2887 /* eraxxon@alumni.rice.edu: Against the DWARF2 specs, some
2888 compilers generate address sequences that are wildly out of
2889 order using DW_LNE_set_address (e.g. Intel C++ 6.0 compiler
2890 for ia64-Linux). Thus, to determine the low and high
2891 address, we must compare on every DW_LNS_copy, etc. */
2892 bfd_vma low_pc
= (bfd_vma
) -1;
2893 bfd_vma high_pc
= 0;
2895 if (table
->num_files
)
2897 if (table
->use_dir_and_file_0
)
2898 filename
= concat_filename (table
, 0);
2900 filename
= concat_filename (table
, 1);
2903 /* Decode the table. */
2904 while (!end_sequence
&& line_ptr
< line_end
)
2906 op_code
= read_1_byte (abfd
, &line_ptr
, line_end
);
2908 if (op_code
>= lh
.opcode_base
)
2910 /* Special operand. */
2911 adj_opcode
= op_code
- lh
.opcode_base
;
2912 if (lh
.line_range
== 0)
2914 if (lh
.maximum_ops_per_insn
== 1)
2915 address
+= (adj_opcode
/ lh
.line_range
2916 * lh
.minimum_instruction_length
);
2919 address
+= ((op_index
+ adj_opcode
/ lh
.line_range
)
2920 / lh
.maximum_ops_per_insn
2921 * lh
.minimum_instruction_length
);
2922 op_index
= ((op_index
+ adj_opcode
/ lh
.line_range
)
2923 % lh
.maximum_ops_per_insn
);
2925 line
+= lh
.line_base
+ (adj_opcode
% lh
.line_range
);
2926 /* Append row to matrix using current values. */
2927 if (!add_line_info (table
, address
, op_index
, filename
,
2928 line
, column
, discriminator
, 0))
2931 if (address
< low_pc
)
2933 if (address
> high_pc
)
2936 else switch (op_code
)
2938 case DW_LNS_extended_op
:
2939 exop_len
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
2941 extended_op
= read_1_byte (abfd
, &line_ptr
, line_end
);
2943 switch (extended_op
)
2945 case DW_LNE_end_sequence
:
2947 if (!add_line_info (table
, address
, op_index
, filename
, line
,
2948 column
, discriminator
, end_sequence
))
2951 if (address
< low_pc
)
2953 if (address
> high_pc
)
2955 if (!arange_add (unit
, &unit
->arange
, &unit
->file
->trie_root
,
2959 case DW_LNE_set_address
:
2960 address
= read_address (unit
, &line_ptr
, line_end
);
2963 case DW_LNE_define_file
:
2964 cur_file
= read_string (&line_ptr
, line_end
);
2965 dir
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
2967 xtime
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
2969 size
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
2971 if (!line_info_add_file_name (table
, cur_file
, dir
,
2975 case DW_LNE_set_discriminator
:
2976 discriminator
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
2979 case DW_LNE_HP_source_file_correlation
:
2980 line_ptr
+= exop_len
- 1;
2984 (_("DWARF error: mangled line number section"));
2985 bfd_set_error (bfd_error_bad_value
);
2992 if (!add_line_info (table
, address
, op_index
,
2993 filename
, line
, column
, discriminator
, 0))
2996 if (address
< low_pc
)
2998 if (address
> high_pc
)
3001 case DW_LNS_advance_pc
:
3002 if (lh
.maximum_ops_per_insn
== 1)
3003 address
+= (lh
.minimum_instruction_length
3004 * _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3008 bfd_vma adjust
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3010 address
= ((op_index
+ adjust
) / lh
.maximum_ops_per_insn
3011 * lh
.minimum_instruction_length
);
3012 op_index
= (op_index
+ adjust
) % lh
.maximum_ops_per_insn
;
3015 case DW_LNS_advance_line
:
3016 line
+= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3019 case DW_LNS_set_file
:
3021 unsigned int filenum
;
3023 /* The file and directory tables are 0
3024 based, the references are 1 based. */
3025 filenum
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3028 filename
= concat_filename (table
, filenum
);
3031 case DW_LNS_set_column
:
3032 column
= _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3035 case DW_LNS_negate_stmt
:
3036 is_stmt
= (!is_stmt
);
3038 case DW_LNS_set_basic_block
:
3040 case DW_LNS_const_add_pc
:
3041 if (lh
.line_range
== 0)
3043 if (lh
.maximum_ops_per_insn
== 1)
3044 address
+= (lh
.minimum_instruction_length
3045 * ((255 - lh
.opcode_base
) / lh
.line_range
));
3048 bfd_vma adjust
= ((255 - lh
.opcode_base
) / lh
.line_range
);
3049 address
+= (lh
.minimum_instruction_length
3050 * ((op_index
+ adjust
)
3051 / lh
.maximum_ops_per_insn
));
3052 op_index
= (op_index
+ adjust
) % lh
.maximum_ops_per_insn
;
3055 case DW_LNS_fixed_advance_pc
:
3056 address
+= read_2_bytes (abfd
, &line_ptr
, line_end
);
3060 /* Unknown standard opcode, ignore it. */
3061 for (i
= 0; i
< lh
.standard_opcode_lengths
[op_code
]; i
++)
3062 (void) _bfd_safe_read_leb128 (abfd
, &line_ptr
,
3071 if (unit
->line_offset
== 0)
3072 file
->line_table
= table
;
3073 if (sort_line_sequences (table
))
3077 while (table
->sequences
!= NULL
)
3079 struct line_sequence
* seq
= table
->sequences
;
3080 table
->sequences
= table
->sequences
->prev_sequence
;
3083 free (table
->files
);
3088 /* If ADDR is within TABLE set the output parameters and return TRUE,
3089 otherwise set *FILENAME_PTR to NULL and return FALSE.
3090 The parameters FILENAME_PTR, LINENUMBER_PTR and DISCRIMINATOR_PTR
3091 are pointers to the objects to be filled in. */
3094 lookup_address_in_line_info_table (struct line_info_table
*table
,
3096 const char **filename_ptr
,
3097 unsigned int *linenumber_ptr
,
3098 unsigned int *discriminator_ptr
)
3100 struct line_sequence
*seq
= NULL
;
3101 struct line_info
*info
;
3104 /* Binary search the array of sequences. */
3106 high
= table
->num_sequences
;
3109 mid
= (low
+ high
) / 2;
3110 seq
= &table
->sequences
[mid
];
3111 if (addr
< seq
->low_pc
)
3113 else if (addr
>= seq
->last_line
->address
)
3119 /* Check for a valid sequence. */
3120 if (!seq
|| addr
< seq
->low_pc
|| addr
>= seq
->last_line
->address
)
3123 if (!build_line_info_table (table
, seq
))
3126 /* Binary search the array of line information. */
3128 high
= seq
->num_lines
;
3132 mid
= (low
+ high
) / 2;
3133 info
= seq
->line_info_lookup
[mid
];
3134 if (addr
< info
->address
)
3136 else if (addr
>= seq
->line_info_lookup
[mid
+ 1]->address
)
3142 /* Check for a valid line information entry. */
3144 && addr
>= info
->address
3145 && addr
< seq
->line_info_lookup
[mid
+ 1]->address
3146 && !(info
->end_sequence
|| info
== seq
->last_line
))
3148 *filename_ptr
= info
->filename
;
3149 *linenumber_ptr
= info
->line
;
3150 if (discriminator_ptr
)
3151 *discriminator_ptr
= info
->discriminator
;
3156 *filename_ptr
= NULL
;
3160 /* Read in the .debug_ranges section for future reference. */
3163 read_debug_ranges (struct comp_unit
* unit
)
3165 struct dwarf2_debug
*stash
= unit
->stash
;
3166 struct dwarf2_debug_file
*file
= unit
->file
;
3168 return read_section (unit
->abfd
, &stash
->debug_sections
[debug_ranges
],
3170 &file
->dwarf_ranges_buffer
, &file
->dwarf_ranges_size
);
3173 /* Read in the .debug_rnglists section for future reference. */
3176 read_debug_rnglists (struct comp_unit
* unit
)
3178 struct dwarf2_debug
*stash
= unit
->stash
;
3179 struct dwarf2_debug_file
*file
= unit
->file
;
3181 return read_section (unit
->abfd
, &stash
->debug_sections
[debug_rnglists
],
3183 &file
->dwarf_rnglists_buffer
, &file
->dwarf_rnglists_size
);
3186 /* Function table functions. */
3189 compare_lookup_funcinfos (const void * a
, const void * b
)
3191 const struct lookup_funcinfo
* lookup1
= a
;
3192 const struct lookup_funcinfo
* lookup2
= b
;
3194 if (lookup1
->low_addr
< lookup2
->low_addr
)
3196 if (lookup1
->low_addr
> lookup2
->low_addr
)
3198 if (lookup1
->high_addr
< lookup2
->high_addr
)
3200 if (lookup1
->high_addr
> lookup2
->high_addr
)
3203 if (lookup1
->idx
< lookup2
->idx
)
3205 if (lookup1
->idx
> lookup2
->idx
)
3211 build_lookup_funcinfo_table (struct comp_unit
* unit
)
3213 struct lookup_funcinfo
*lookup_funcinfo_table
= unit
->lookup_funcinfo_table
;
3214 unsigned int number_of_functions
= unit
->number_of_functions
;
3215 struct funcinfo
*each
;
3216 struct lookup_funcinfo
*entry
;
3218 struct arange
*range
;
3219 bfd_vma low_addr
, high_addr
;
3221 if (lookup_funcinfo_table
|| number_of_functions
== 0)
3224 /* Create the function info lookup table. */
3225 lookup_funcinfo_table
= (struct lookup_funcinfo
*)
3226 bfd_malloc (number_of_functions
* sizeof (struct lookup_funcinfo
));
3227 if (lookup_funcinfo_table
== NULL
)
3230 /* Populate the function info lookup table. */
3231 func_index
= number_of_functions
;
3232 for (each
= unit
->function_table
; each
; each
= each
->prev_func
)
3234 entry
= &lookup_funcinfo_table
[--func_index
];
3235 entry
->funcinfo
= each
;
3236 entry
->idx
= func_index
;
3238 /* Calculate the lowest and highest address for this function entry. */
3239 low_addr
= entry
->funcinfo
->arange
.low
;
3240 high_addr
= entry
->funcinfo
->arange
.high
;
3242 for (range
= entry
->funcinfo
->arange
.next
; range
; range
= range
->next
)
3244 if (range
->low
< low_addr
)
3245 low_addr
= range
->low
;
3246 if (range
->high
> high_addr
)
3247 high_addr
= range
->high
;
3250 entry
->low_addr
= low_addr
;
3251 entry
->high_addr
= high_addr
;
3254 BFD_ASSERT (func_index
== 0);
3256 /* Sort the function by address. */
3257 qsort (lookup_funcinfo_table
,
3258 number_of_functions
,
3259 sizeof (struct lookup_funcinfo
),
3260 compare_lookup_funcinfos
);
3262 /* Calculate the high watermark for each function in the lookup table. */
3263 high_addr
= lookup_funcinfo_table
[0].high_addr
;
3264 for (func_index
= 1; func_index
< number_of_functions
; func_index
++)
3266 entry
= &lookup_funcinfo_table
[func_index
];
3267 if (entry
->high_addr
> high_addr
)
3268 high_addr
= entry
->high_addr
;
3270 entry
->high_addr
= high_addr
;
3273 unit
->lookup_funcinfo_table
= lookup_funcinfo_table
;
3277 /* If ADDR is within UNIT's function tables, set FUNCTION_PTR, and return
3278 TRUE. Note that we need to find the function that has the smallest range
3279 that contains ADDR, to handle inlined functions without depending upon
3280 them being ordered in TABLE by increasing range. */
3283 lookup_address_in_function_table (struct comp_unit
*unit
,
3285 struct funcinfo
**function_ptr
)
3287 unsigned int number_of_functions
= unit
->number_of_functions
;
3288 struct lookup_funcinfo
* lookup_funcinfo
= NULL
;
3289 struct funcinfo
* funcinfo
= NULL
;
3290 struct funcinfo
* best_fit
= NULL
;
3291 bfd_vma best_fit_len
= (bfd_vma
) -1;
3292 bfd_size_type low
, high
, mid
, first
;
3293 struct arange
*arange
;
3295 if (number_of_functions
== 0)
3298 if (!build_lookup_funcinfo_table (unit
))
3301 if (unit
->lookup_funcinfo_table
[number_of_functions
- 1].high_addr
< addr
)
3304 /* Find the first function in the lookup table which may contain the
3305 specified address. */
3307 high
= number_of_functions
;
3311 mid
= (low
+ high
) / 2;
3312 lookup_funcinfo
= &unit
->lookup_funcinfo_table
[mid
];
3313 if (addr
< lookup_funcinfo
->low_addr
)
3315 else if (addr
>= lookup_funcinfo
->high_addr
)
3321 /* Find the 'best' match for the address. The prior algorithm defined the
3322 best match as the function with the smallest address range containing
3323 the specified address. This definition should probably be changed to the
3324 innermost inline routine containing the address, but right now we want
3325 to get the same results we did before. */
3326 while (first
< number_of_functions
)
3328 if (addr
< unit
->lookup_funcinfo_table
[first
].low_addr
)
3330 funcinfo
= unit
->lookup_funcinfo_table
[first
].funcinfo
;
3332 for (arange
= &funcinfo
->arange
; arange
; arange
= arange
->next
)
3334 if (addr
< arange
->low
|| addr
>= arange
->high
)
3337 if (arange
->high
- arange
->low
< best_fit_len
3338 /* The following comparison is designed to return the same
3339 match as the previous algorithm for routines which have the
3340 same best fit length. */
3341 || (arange
->high
- arange
->low
== best_fit_len
3342 && funcinfo
> best_fit
))
3344 best_fit
= funcinfo
;
3345 best_fit_len
= arange
->high
- arange
->low
;
3355 *function_ptr
= best_fit
;
3359 /* If SYM at ADDR is within function table of UNIT, set FILENAME_PTR
3360 and LINENUMBER_PTR, and return TRUE. */
3363 lookup_symbol_in_function_table (struct comp_unit
*unit
,
3366 const char **filename_ptr
,
3367 unsigned int *linenumber_ptr
)
3369 struct funcinfo
* each
;
3370 struct funcinfo
* best_fit
= NULL
;
3371 bfd_vma best_fit_len
= (bfd_vma
) -1;
3372 struct arange
*arange
;
3373 const char *name
= bfd_asymbol_name (sym
);
3375 for (each
= unit
->function_table
; each
; each
= each
->prev_func
)
3376 for (arange
= &each
->arange
; arange
; arange
= arange
->next
)
3377 if (addr
>= arange
->low
3378 && addr
< arange
->high
3379 && arange
->high
- arange
->low
< best_fit_len
3382 && strstr (name
, each
->name
) != NULL
)
3385 best_fit_len
= arange
->high
- arange
->low
;
3390 *filename_ptr
= best_fit
->file
;
3391 *linenumber_ptr
= best_fit
->line
;
3398 /* Variable table functions. */
3400 /* If SYM is within variable table of UNIT, set FILENAME_PTR and
3401 LINENUMBER_PTR, and return TRUE. */
3404 lookup_symbol_in_variable_table (struct comp_unit
*unit
,
3407 const char **filename_ptr
,
3408 unsigned int *linenumber_ptr
)
3410 struct varinfo
* each
;
3411 const char *name
= bfd_asymbol_name (sym
);
3413 for (each
= unit
->variable_table
; each
; each
= each
->prev_var
)
3414 if (each
->addr
== addr
3416 && each
->file
!= NULL
3417 && each
->name
!= NULL
3418 && strstr (name
, each
->name
) != NULL
)
3423 *filename_ptr
= each
->file
;
3424 *linenumber_ptr
= each
->line
;
3431 static struct comp_unit
*stash_comp_unit (struct dwarf2_debug
*,
3432 struct dwarf2_debug_file
*);
3433 static bool comp_unit_maybe_decode_line_info (struct comp_unit
*);
3436 find_abstract_instance (struct comp_unit
*unit
,
3437 struct attribute
*attr_ptr
,
3438 unsigned int recur_count
,
3441 char **filename_ptr
,
3442 int *linenumber_ptr
)
3444 bfd
*abfd
= unit
->abfd
;
3445 bfd_byte
*info_ptr
= NULL
;
3446 bfd_byte
*info_ptr_end
;
3447 unsigned int abbrev_number
, i
;
3448 struct abbrev_info
*abbrev
;
3449 uint64_t die_ref
= attr_ptr
->u
.val
;
3450 struct attribute attr
;
3451 const char *name
= NULL
;
3453 if (recur_count
== 100)
3456 (_("DWARF error: abstract instance recursion detected"));
3457 bfd_set_error (bfd_error_bad_value
);
3461 /* DW_FORM_ref_addr can reference an entry in a different CU. It
3462 is an offset from the .debug_info section, not the current CU. */
3463 if (attr_ptr
->form
== DW_FORM_ref_addr
)
3465 /* We only support DW_FORM_ref_addr within the same file, so
3466 any relocations should be resolved already. Check this by
3467 testing for a zero die_ref; There can't be a valid reference
3468 to the header of a .debug_info section.
3469 DW_FORM_ref_addr is an offset relative to .debug_info.
3470 Normally when using the GNU linker this is accomplished by
3471 emitting a symbolic reference to a label, because .debug_info
3472 sections are linked at zero. When there are multiple section
3473 groups containing .debug_info, as there might be in a
3474 relocatable object file, it would be reasonable to assume that
3475 a symbolic reference to a label in any .debug_info section
3476 might be used. Since we lay out multiple .debug_info
3477 sections at non-zero VMAs (see place_sections), and read
3478 them contiguously into dwarf_info_buffer, that means the
3479 reference is relative to dwarf_info_buffer. */
3482 info_ptr
= unit
->file
->dwarf_info_buffer
;
3483 info_ptr_end
= info_ptr
+ unit
->file
->dwarf_info_size
;
3484 total
= info_ptr_end
- info_ptr
;
3487 else if (die_ref
>= total
)
3490 (_("DWARF error: invalid abstract instance DIE ref"));
3491 bfd_set_error (bfd_error_bad_value
);
3494 info_ptr
+= die_ref
;
3496 else if (attr_ptr
->form
== DW_FORM_GNU_ref_alt
)
3498 bool first_time
= unit
->stash
->alt
.dwarf_info_buffer
== NULL
;
3500 info_ptr
= read_alt_indirect_ref (unit
, die_ref
);
3502 unit
->stash
->alt
.info_ptr
= unit
->stash
->alt
.dwarf_info_buffer
;
3503 if (info_ptr
== NULL
)
3506 (_("DWARF error: unable to read alt ref %" PRIu64
),
3507 (uint64_t) die_ref
);
3508 bfd_set_error (bfd_error_bad_value
);
3511 info_ptr_end
= (unit
->stash
->alt
.dwarf_info_buffer
3512 + unit
->stash
->alt
.dwarf_info_size
);
3513 if (unit
->stash
->alt
.all_comp_units
)
3514 unit
= unit
->stash
->alt
.all_comp_units
;
3517 if (attr_ptr
->form
== DW_FORM_ref_addr
3518 || attr_ptr
->form
== DW_FORM_GNU_ref_alt
)
3520 /* Now find the CU containing this pointer. */
3521 if (info_ptr
>= unit
->info_ptr_unit
&& info_ptr
< unit
->end_ptr
)
3522 info_ptr_end
= unit
->end_ptr
;
3525 /* Check other CUs to see if they contain the abbrev. */
3526 struct comp_unit
*u
= NULL
;
3527 struct addr_range range
= { info_ptr
, info_ptr
};
3528 splay_tree_node v
= splay_tree_lookup (unit
->file
->comp_unit_tree
,
3529 (splay_tree_key
)&range
);
3531 u
= (struct comp_unit
*)v
->value
;
3533 if (attr_ptr
->form
== DW_FORM_ref_addr
)
3536 u
= stash_comp_unit (unit
->stash
, &unit
->stash
->f
);
3539 if (info_ptr
>= u
->info_ptr_unit
&& info_ptr
< u
->end_ptr
)
3544 if (attr_ptr
->form
== DW_FORM_GNU_ref_alt
)
3547 u
= stash_comp_unit (unit
->stash
, &unit
->stash
->alt
);
3550 if (info_ptr
>= u
->info_ptr_unit
&& info_ptr
< u
->end_ptr
)
3558 (_("DWARF error: unable to locate abstract instance DIE ref %"
3559 PRIu64
), (uint64_t) die_ref
);
3560 bfd_set_error (bfd_error_bad_value
);
3564 info_ptr_end
= unit
->end_ptr
;
3569 /* DW_FORM_ref1, DW_FORM_ref2, DW_FORM_ref4, DW_FORM_ref8 or
3570 DW_FORM_ref_udata. These are all references relative to the
3571 start of the current CU. */
3574 info_ptr
= unit
->info_ptr_unit
;
3575 info_ptr_end
= unit
->end_ptr
;
3576 total
= info_ptr_end
- info_ptr
;
3577 if (!die_ref
|| die_ref
>= total
)
3580 (_("DWARF error: invalid abstract instance DIE ref"));
3581 bfd_set_error (bfd_error_bad_value
);
3584 info_ptr
+= die_ref
;
3587 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
3588 false, info_ptr_end
);
3591 abbrev
= lookup_abbrev (abbrev_number
, unit
->abbrevs
);
3595 (_("DWARF error: could not find abbrev number %u"), abbrev_number
);
3596 bfd_set_error (bfd_error_bad_value
);
3601 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
3603 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
,
3604 info_ptr
, info_ptr_end
);
3605 if (info_ptr
== NULL
)
3610 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
3612 if (name
== NULL
&& is_str_form (&attr
))
3615 if (mangle_style (unit
->lang
) == 0)
3619 case DW_AT_specification
:
3620 if (is_int_form (&attr
)
3621 && !find_abstract_instance (unit
, &attr
, recur_count
+ 1,
3623 filename_ptr
, linenumber_ptr
))
3626 case DW_AT_linkage_name
:
3627 case DW_AT_MIPS_linkage_name
:
3628 /* PR 16949: Corrupt debug info can place
3629 non-string forms into these attributes. */
3630 if (is_str_form (&attr
))
3636 case DW_AT_decl_file
:
3637 if (!comp_unit_maybe_decode_line_info (unit
))
3639 if (is_int_form (&attr
))
3640 *filename_ptr
= concat_filename (unit
->line_table
,
3643 case DW_AT_decl_line
:
3644 if (is_int_form (&attr
))
3645 *linenumber_ptr
= attr
.u
.val
;
3658 read_ranges (struct comp_unit
*unit
, struct arange
*arange
,
3659 struct trie_node
**trie_root
, uint64_t offset
)
3661 bfd_byte
*ranges_ptr
;
3662 bfd_byte
*ranges_end
;
3663 bfd_vma base_address
= unit
->base_address
;
3665 if (! unit
->file
->dwarf_ranges_buffer
)
3667 if (! read_debug_ranges (unit
))
3671 if (offset
> unit
->file
->dwarf_ranges_size
)
3673 ranges_ptr
= unit
->file
->dwarf_ranges_buffer
+ offset
;
3674 ranges_end
= unit
->file
->dwarf_ranges_buffer
+ unit
->file
->dwarf_ranges_size
;
3681 /* PR 17512: file: 62cada7d. */
3682 if (2u * unit
->addr_size
> (size_t) (ranges_end
- ranges_ptr
))
3685 low_pc
= read_address (unit
, &ranges_ptr
, ranges_end
);
3686 high_pc
= read_address (unit
, &ranges_ptr
, ranges_end
);
3688 if (low_pc
== 0 && high_pc
== 0)
3690 if (low_pc
== -1UL && high_pc
!= -1UL)
3691 base_address
= high_pc
;
3694 if (!arange_add (unit
, arange
, trie_root
,
3695 base_address
+ low_pc
, base_address
+ high_pc
))
3703 read_rnglists (struct comp_unit
*unit
, struct arange
*arange
,
3704 struct trie_node
**trie_root
, uint64_t offset
)
3708 bfd_vma base_address
= unit
->base_address
;
3711 bfd
*abfd
= unit
->abfd
;
3713 if (! unit
->file
->dwarf_rnglists_buffer
)
3715 if (! read_debug_rnglists (unit
))
3719 rngs_ptr
= unit
->file
->dwarf_rnglists_buffer
+ offset
;
3720 if (rngs_ptr
< unit
->file
->dwarf_rnglists_buffer
)
3722 rngs_end
= unit
->file
->dwarf_rnglists_buffer
;
3723 rngs_end
+= unit
->file
->dwarf_rnglists_size
;
3727 enum dwarf_range_list_entry rlet
;
3729 if (rngs_ptr
>= rngs_end
)
3732 rlet
= read_1_byte (abfd
, &rngs_ptr
, rngs_end
);
3736 case DW_RLE_end_of_list
:
3739 case DW_RLE_base_address
:
3740 if (unit
->addr_size
> (size_t) (rngs_end
- rngs_ptr
))
3742 base_address
= read_address (unit
, &rngs_ptr
, rngs_end
);
3745 case DW_RLE_start_length
:
3746 if (unit
->addr_size
> (size_t) (rngs_end
- rngs_ptr
))
3748 low_pc
= read_address (unit
, &rngs_ptr
, rngs_end
);
3750 high_pc
+= _bfd_safe_read_leb128 (abfd
, &rngs_ptr
,
3754 case DW_RLE_offset_pair
:
3755 low_pc
= base_address
;
3756 low_pc
+= _bfd_safe_read_leb128 (abfd
, &rngs_ptr
,
3758 high_pc
= base_address
;
3759 high_pc
+= _bfd_safe_read_leb128 (abfd
, &rngs_ptr
,
3763 case DW_RLE_start_end
:
3764 if (2u * unit
->addr_size
> (size_t) (rngs_end
- rngs_ptr
))
3766 low_pc
= read_address (unit
, &rngs_ptr
, rngs_end
);
3767 high_pc
= read_address (unit
, &rngs_ptr
, rngs_end
);
3770 /* TODO x-variants need .debug_addr support used for split-dwarf. */
3771 case DW_RLE_base_addressx
:
3772 case DW_RLE_startx_endx
:
3773 case DW_RLE_startx_length
:
3778 if (!arange_add (unit
, arange
, trie_root
, low_pc
, high_pc
))
3784 read_rangelist (struct comp_unit
*unit
, struct arange
*arange
,
3785 struct trie_node
**trie_root
, uint64_t offset
)
3787 if (unit
->version
<= 4)
3788 return read_ranges (unit
, arange
, trie_root
, offset
);
3790 return read_rnglists (unit
, arange
, trie_root
, offset
);
3793 static struct funcinfo
*
3794 lookup_func_by_offset (uint64_t offset
, struct funcinfo
* table
)
3796 for (; table
!= NULL
; table
= table
->prev_func
)
3797 if (table
->unit_offset
== offset
)
3802 static struct varinfo
*
3803 lookup_var_by_offset (uint64_t offset
, struct varinfo
* table
)
3807 if (table
->unit_offset
== offset
)
3809 table
= table
->prev_var
;
3816 /* DWARF2 Compilation unit functions. */
3818 static struct funcinfo
*
3819 reverse_funcinfo_list (struct funcinfo
*head
)
3821 struct funcinfo
*rhead
;
3822 struct funcinfo
*temp
;
3824 for (rhead
= NULL
; head
; head
= temp
)
3826 temp
= head
->prev_func
;
3827 head
->prev_func
= rhead
;
3833 static struct varinfo
*
3834 reverse_varinfo_list (struct varinfo
*head
)
3836 struct varinfo
*rhead
;
3837 struct varinfo
*temp
;
3839 for (rhead
= NULL
; head
; head
= temp
)
3841 temp
= head
->prev_var
;
3842 head
->prev_var
= rhead
;
3848 /* Scan over each die in a comp. unit looking for functions to add
3849 to the function table and variables to the variable table. */
3852 scan_unit_for_symbols (struct comp_unit
*unit
)
3854 bfd
*abfd
= unit
->abfd
;
3855 bfd_byte
*info_ptr
= unit
->first_child_die_ptr
;
3856 bfd_byte
*info_ptr_end
= unit
->end_ptr
;
3857 int nesting_level
= 0;
3858 struct nest_funcinfo
3860 struct funcinfo
*func
;
3862 int nested_funcs_size
;
3863 struct funcinfo
*last_func
;
3864 struct varinfo
*last_var
;
3866 /* Maintain a stack of in-scope functions and inlined functions, which we
3867 can use to set the caller_func field. */
3868 nested_funcs_size
= 32;
3869 nested_funcs
= (struct nest_funcinfo
*)
3870 bfd_malloc (nested_funcs_size
* sizeof (*nested_funcs
));
3871 if (nested_funcs
== NULL
)
3873 nested_funcs
[nesting_level
].func
= 0;
3875 /* PR 27484: We must scan the DIEs twice. The first time we look for
3876 function and variable tags and accumulate them into their respective
3877 tables. The second time through we process the attributes of the
3878 functions/variables and augment the table entries. */
3879 while (nesting_level
>= 0)
3881 unsigned int abbrev_number
, i
;
3882 struct abbrev_info
*abbrev
;
3883 struct funcinfo
*func
;
3884 struct varinfo
*var
;
3885 uint64_t current_offset
;
3887 /* PR 17512: file: 9f405d9d. */
3888 if (info_ptr
>= info_ptr_end
)
3891 current_offset
= info_ptr
- unit
->info_ptr_unit
;
3892 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
3893 false, info_ptr_end
);
3894 if (abbrev_number
== 0)
3900 abbrev
= lookup_abbrev (abbrev_number
, unit
->abbrevs
);
3903 static unsigned int previous_failed_abbrev
= -1U;
3905 /* Avoid multiple reports of the same missing abbrev. */
3906 if (abbrev_number
!= previous_failed_abbrev
)
3909 (_("DWARF error: could not find abbrev number %u"),
3911 previous_failed_abbrev
= abbrev_number
;
3913 bfd_set_error (bfd_error_bad_value
);
3917 if (abbrev
->tag
== DW_TAG_subprogram
3918 || abbrev
->tag
== DW_TAG_entry_point
3919 || abbrev
->tag
== DW_TAG_inlined_subroutine
)
3921 size_t amt
= sizeof (struct funcinfo
);
3924 func
= (struct funcinfo
*) bfd_zalloc (abfd
, amt
);
3927 func
->tag
= abbrev
->tag
;
3928 func
->prev_func
= unit
->function_table
;
3929 func
->unit_offset
= current_offset
;
3930 unit
->function_table
= func
;
3931 unit
->number_of_functions
++;
3932 BFD_ASSERT (!unit
->cached
);
3934 if (func
->tag
== DW_TAG_inlined_subroutine
)
3935 for (i
= nesting_level
; i
-- != 0; )
3936 if (nested_funcs
[i
].func
)
3938 func
->caller_func
= nested_funcs
[i
].func
;
3941 nested_funcs
[nesting_level
].func
= func
;
3946 if (abbrev
->tag
== DW_TAG_variable
3947 || abbrev
->tag
== DW_TAG_member
)
3949 size_t amt
= sizeof (struct varinfo
);
3951 var
= (struct varinfo
*) bfd_zalloc (abfd
, amt
);
3954 var
->tag
= abbrev
->tag
;
3956 var
->prev_var
= unit
->variable_table
;
3957 unit
->variable_table
= var
;
3958 var
->unit_offset
= current_offset
;
3959 /* PR 18205: Missing debug information can cause this
3960 var to be attached to an already cached unit. */
3965 /* No inline function in scope at this nesting level. */
3966 nested_funcs
[nesting_level
].func
= 0;
3969 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
3971 struct attribute attr
;
3973 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
],
3974 unit
, info_ptr
, info_ptr_end
);
3975 if (info_ptr
== NULL
)
3979 if (abbrev
->has_children
)
3983 if (nesting_level
>= nested_funcs_size
)
3985 struct nest_funcinfo
*tmp
;
3987 nested_funcs_size
*= 2;
3988 tmp
= (struct nest_funcinfo
*)
3989 bfd_realloc (nested_funcs
,
3990 nested_funcs_size
* sizeof (*nested_funcs
));
3995 nested_funcs
[nesting_level
].func
= 0;
3999 unit
->function_table
= reverse_funcinfo_list (unit
->function_table
);
4000 unit
->variable_table
= reverse_varinfo_list (unit
->variable_table
);
4002 /* This is the second pass over the abbrevs. */
4003 info_ptr
= unit
->first_child_die_ptr
;
4009 while (nesting_level
>= 0)
4011 unsigned int abbrev_number
, i
;
4012 struct abbrev_info
*abbrev
;
4013 struct attribute attr
;
4014 struct funcinfo
*func
;
4015 struct varinfo
*var
;
4017 bfd_vma high_pc
= 0;
4018 bool high_pc_relative
= false;
4019 uint64_t current_offset
;
4021 /* PR 17512: file: 9f405d9d. */
4022 if (info_ptr
>= info_ptr_end
)
4025 current_offset
= info_ptr
- unit
->info_ptr_unit
;
4026 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
4027 false, info_ptr_end
);
4028 if (! abbrev_number
)
4034 abbrev
= lookup_abbrev (abbrev_number
, unit
->abbrevs
);
4035 /* This should have been handled above. */
4036 BFD_ASSERT (abbrev
!= NULL
);
4040 if (abbrev
->tag
== DW_TAG_subprogram
4041 || abbrev
->tag
== DW_TAG_entry_point
4042 || abbrev
->tag
== DW_TAG_inlined_subroutine
)
4045 && last_func
->prev_func
4046 && last_func
->prev_func
->unit_offset
== current_offset
)
4047 func
= last_func
->prev_func
;
4049 func
= lookup_func_by_offset (current_offset
, unit
->function_table
);
4056 else if (abbrev
->tag
== DW_TAG_variable
4057 || abbrev
->tag
== DW_TAG_member
)
4060 && last_var
->prev_var
4061 && last_var
->prev_var
->unit_offset
== current_offset
)
4062 var
= last_var
->prev_var
;
4064 var
= lookup_var_by_offset (current_offset
, unit
->variable_table
);
4072 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
4074 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
],
4075 unit
, info_ptr
, info_ptr_end
);
4076 if (info_ptr
== NULL
)
4083 case DW_AT_call_file
:
4084 if (is_int_form (&attr
))
4085 func
->caller_file
= concat_filename (unit
->line_table
,
4089 case DW_AT_call_line
:
4090 if (is_int_form (&attr
))
4091 func
->caller_line
= attr
.u
.val
;
4094 case DW_AT_abstract_origin
:
4095 case DW_AT_specification
:
4096 if (is_int_form (&attr
)
4097 && !find_abstract_instance (unit
, &attr
, 0,
4106 /* Prefer DW_AT_MIPS_linkage_name or DW_AT_linkage_name
4108 if (func
->name
== NULL
&& is_str_form (&attr
))
4110 func
->name
= attr
.u
.str
;
4111 if (mangle_style (unit
->lang
) == 0)
4112 func
->is_linkage
= true;
4116 case DW_AT_linkage_name
:
4117 case DW_AT_MIPS_linkage_name
:
4118 /* PR 16949: Corrupt debug info can place
4119 non-string forms into these attributes. */
4120 if (is_str_form (&attr
))
4122 func
->name
= attr
.u
.str
;
4123 func
->is_linkage
= true;
4128 if (is_int_form (&attr
))
4129 low_pc
= attr
.u
.val
;
4133 if (is_int_form (&attr
))
4135 high_pc
= attr
.u
.val
;
4136 high_pc_relative
= attr
.form
!= DW_FORM_addr
;
4141 if (is_int_form (&attr
)
4142 && !read_rangelist (unit
, &func
->arange
,
4143 &unit
->file
->trie_root
, attr
.u
.val
))
4147 case DW_AT_decl_file
:
4148 if (is_int_form (&attr
))
4149 func
->file
= concat_filename (unit
->line_table
,
4153 case DW_AT_decl_line
:
4154 if (is_int_form (&attr
))
4155 func
->line
= attr
.u
.val
;
4166 case DW_AT_specification
:
4167 if (is_int_form (&attr
) && attr
.u
.val
)
4170 if (!find_abstract_instance (unit
, &attr
, 0,
4176 _bfd_error_handler (_("DWARF error: could not find "
4177 "variable specification "
4179 (unsigned long) attr
.u
.val
);
4186 if (is_str_form (&attr
))
4187 var
->name
= attr
.u
.str
;
4190 case DW_AT_decl_file
:
4191 if (is_int_form (&attr
))
4192 var
->file
= concat_filename (unit
->line_table
,
4196 case DW_AT_decl_line
:
4197 if (is_int_form (&attr
))
4198 var
->line
= attr
.u
.val
;
4201 case DW_AT_external
:
4202 if (is_int_form (&attr
) && attr
.u
.val
!= 0)
4206 case DW_AT_location
:
4210 case DW_FORM_block1
:
4211 case DW_FORM_block2
:
4212 case DW_FORM_block4
:
4213 case DW_FORM_exprloc
:
4214 if (attr
.u
.blk
->data
!= NULL
4215 && *attr
.u
.blk
->data
== DW_OP_addr
)
4219 /* Verify that DW_OP_addr is the only opcode in the
4220 location, in which case the block size will be 1
4221 plus the address size. */
4222 /* ??? For TLS variables, gcc can emit
4223 DW_OP_addr <addr> DW_OP_GNU_push_tls_address
4224 which we don't handle here yet. */
4225 if (attr
.u
.blk
->size
== unit
->addr_size
+ 1U)
4226 var
->addr
= bfd_get (unit
->addr_size
* 8,
4228 attr
.u
.blk
->data
+ 1);
4243 if (abbrev
->has_children
)
4246 if (high_pc_relative
)
4249 if (func
&& high_pc
!= 0)
4251 if (!arange_add (unit
, &func
->arange
, &unit
->file
->trie_root
,
4257 unit
->function_table
= reverse_funcinfo_list (unit
->function_table
);
4258 unit
->variable_table
= reverse_varinfo_list (unit
->variable_table
);
4260 free (nested_funcs
);
4264 free (nested_funcs
);
4268 /* Read the attributes of the form strx and addrx. */
4271 reread_attribute (struct comp_unit
*unit
,
4272 struct attribute
*attr
,
4275 bool *high_pc_relative
,
4278 if (is_strx_form (attr
->form
))
4279 attr
->u
.str
= (char *) read_indexed_string (attr
->u
.val
, unit
);
4280 if (is_addrx_form (attr
->form
))
4281 attr
->u
.val
= read_indexed_address (attr
->u
.val
, unit
);
4285 case DW_AT_stmt_list
:
4287 unit
->line_offset
= attr
->u
.val
;
4291 if (is_str_form (attr
))
4292 unit
->name
= attr
->u
.str
;
4296 *low_pc
= attr
->u
.val
;
4298 unit
->base_address
= *low_pc
;
4302 *high_pc
= attr
->u
.val
;
4303 *high_pc_relative
= attr
->form
!= DW_FORM_addr
;
4307 if (!read_rangelist (unit
, &unit
->arange
,
4308 &unit
->file
->trie_root
, attr
->u
.val
))
4312 case DW_AT_comp_dir
:
4314 char *comp_dir
= attr
->u
.str
;
4316 if (!is_str_form (attr
))
4319 (_("DWARF error: DW_AT_comp_dir attribute encountered "
4320 "with a non-string form"));
4326 char *cp
= strchr (comp_dir
, ':');
4328 if (cp
&& cp
!= comp_dir
&& cp
[-1] == '.' && cp
[1] == '/')
4331 unit
->comp_dir
= comp_dir
;
4335 case DW_AT_language
:
4336 unit
->lang
= attr
->u
.val
;
4342 /* Parse a DWARF2 compilation unit starting at INFO_PTR. UNIT_LENGTH
4343 includes the compilation unit header that proceeds the DIE's, but
4344 does not include the length field that precedes each compilation
4345 unit header. END_PTR points one past the end of this comp unit.
4346 OFFSET_SIZE is the size of DWARF2 offsets (either 4 or 8 bytes).
4348 This routine does not read the whole compilation unit; only enough
4349 to get to the line number information for the compilation unit. */
4351 static struct comp_unit
*
4352 parse_comp_unit (struct dwarf2_debug
*stash
,
4353 struct dwarf2_debug_file
*file
,
4355 bfd_vma unit_length
,
4356 bfd_byte
*info_ptr_unit
,
4357 unsigned int offset_size
)
4359 struct comp_unit
* unit
;
4360 unsigned int version
;
4361 uint64_t abbrev_offset
= 0;
4362 /* Initialize it just to avoid a GCC false warning. */
4363 unsigned int addr_size
= -1;
4364 struct abbrev_info
** abbrevs
;
4365 unsigned int abbrev_number
, i
;
4366 struct abbrev_info
*abbrev
;
4367 struct attribute attr
;
4368 bfd_byte
*end_ptr
= info_ptr
+ unit_length
;
4371 bfd_vma high_pc
= 0;
4372 bfd
*abfd
= file
->bfd_ptr
;
4373 bool high_pc_relative
= false;
4374 enum dwarf_unit_type unit_type
;
4375 struct attribute
*str_addrp
= NULL
;
4376 size_t str_count
= 0;
4377 size_t str_alloc
= 0;
4378 bool compunit_flag
= false;
4380 version
= read_2_bytes (abfd
, &info_ptr
, end_ptr
);
4381 if (version
< 2 || version
> 5)
4383 /* PR 19872: A version number of 0 probably means that there is padding
4384 at the end of the .debug_info section. Gold puts it there when
4385 performing an incremental link, for example. So do not generate
4386 an error, just return a NULL. */
4390 (_("DWARF error: found dwarf version '%u', this reader"
4391 " only handles version 2, 3, 4 and 5 information"), version
);
4392 bfd_set_error (bfd_error_bad_value
);
4398 unit_type
= DW_UT_compile
;
4401 unit_type
= read_1_byte (abfd
, &info_ptr
, end_ptr
);
4402 addr_size
= read_1_byte (abfd
, &info_ptr
, end_ptr
);
4405 BFD_ASSERT (offset_size
== 4 || offset_size
== 8);
4406 if (offset_size
== 4)
4407 abbrev_offset
= read_4_bytes (abfd
, &info_ptr
, end_ptr
);
4409 abbrev_offset
= read_8_bytes (abfd
, &info_ptr
, end_ptr
);
4412 addr_size
= read_1_byte (abfd
, &info_ptr
, end_ptr
);
4417 /* Skip type signature. */
4420 /* Skip type offset. */
4421 info_ptr
+= offset_size
;
4424 case DW_UT_skeleton
:
4425 /* Skip DWO_id field. */
4433 if (addr_size
> sizeof (bfd_vma
))
4436 /* xgettext: c-format */
4437 (_("DWARF error: found address size '%u', this reader"
4438 " can not handle sizes greater than '%u'"),
4440 (unsigned int) sizeof (bfd_vma
));
4441 bfd_set_error (bfd_error_bad_value
);
4445 if (addr_size
!= 2 && addr_size
!= 4 && addr_size
!= 8)
4448 ("DWARF error: found address size '%u', this reader"
4449 " can only handle address sizes '2', '4' and '8'", addr_size
);
4450 bfd_set_error (bfd_error_bad_value
);
4454 /* Read the abbrevs for this compilation unit into a table. */
4455 abbrevs
= read_abbrevs (abfd
, abbrev_offset
, stash
, file
);
4459 abbrev_number
= _bfd_safe_read_leb128 (abfd
, &info_ptr
,
4461 if (! abbrev_number
)
4463 /* PR 19872: An abbrev number of 0 probably means that there is padding
4464 at the end of the .debug_abbrev section. Gold puts it there when
4465 performing an incremental link, for example. So do not generate
4466 an error, just return a NULL. */
4470 abbrev
= lookup_abbrev (abbrev_number
, abbrevs
);
4473 _bfd_error_handler (_("DWARF error: could not find abbrev number %u"),
4475 bfd_set_error (bfd_error_bad_value
);
4479 amt
= sizeof (struct comp_unit
);
4480 unit
= (struct comp_unit
*) bfd_zalloc (abfd
, amt
);
4484 unit
->version
= version
;
4485 unit
->addr_size
= addr_size
;
4486 unit
->offset_size
= offset_size
;
4487 unit
->abbrevs
= abbrevs
;
4488 unit
->end_ptr
= end_ptr
;
4489 unit
->stash
= stash
;
4491 unit
->info_ptr_unit
= info_ptr_unit
;
4493 if (abbrev
->tag
== DW_TAG_compile_unit
)
4494 compunit_flag
= true;
4496 for (i
= 0; i
< abbrev
->num_attrs
; ++i
)
4498 info_ptr
= read_attribute (&attr
, &abbrev
->attrs
[i
], unit
, info_ptr
, end_ptr
);
4499 if (info_ptr
== NULL
)
4502 /* Identify attributes of the form strx* and addrx* which come before
4503 DW_AT_str_offsets_base and DW_AT_addr_base respectively in the CU.
4504 Store the attributes in an array and process them later. */
4505 if ((unit
->dwarf_str_offset
== 0 && is_strx_form (attr
.form
))
4506 || (unit
->dwarf_addr_offset
== 0 && is_addrx_form (attr
.form
)))
4508 if (str_count
<= str_alloc
)
4510 str_alloc
= 2 * str_alloc
+ 200;
4511 str_addrp
= bfd_realloc (str_addrp
,
4512 str_alloc
* sizeof (*str_addrp
));
4513 if (str_addrp
== NULL
)
4516 str_addrp
[str_count
] = attr
;
4521 /* Store the data if it is of an attribute we want to keep in a
4522 partial symbol table. */
4525 case DW_AT_stmt_list
:
4526 if (is_int_form (&attr
))
4529 unit
->line_offset
= attr
.u
.val
;
4534 if (is_str_form (&attr
))
4535 unit
->name
= attr
.u
.str
;
4539 if (is_int_form (&attr
))
4541 low_pc
= attr
.u
.val
;
4542 /* If the compilation unit DIE has a DW_AT_low_pc attribute,
4543 this is the base address to use when reading location
4544 lists or range lists. */
4546 unit
->base_address
= low_pc
;
4551 if (is_int_form (&attr
))
4553 high_pc
= attr
.u
.val
;
4554 high_pc_relative
= attr
.form
!= DW_FORM_addr
;
4559 if (is_int_form (&attr
)
4560 && !read_rangelist (unit
, &unit
->arange
,
4561 &unit
->file
->trie_root
, attr
.u
.val
))
4565 case DW_AT_comp_dir
:
4567 char *comp_dir
= attr
.u
.str
;
4569 /* PR 17512: file: 1fe726be. */
4570 if (!is_str_form (&attr
))
4573 (_("DWARF error: DW_AT_comp_dir attribute encountered with a non-string form"));
4579 /* Irix 6.2 native cc prepends <machine>.: to the compilation
4580 directory, get rid of it. */
4581 char *cp
= strchr (comp_dir
, ':');
4583 if (cp
&& cp
!= comp_dir
&& cp
[-1] == '.' && cp
[1] == '/')
4586 unit
->comp_dir
= comp_dir
;
4590 case DW_AT_language
:
4591 if (is_int_form (&attr
))
4592 unit
->lang
= attr
.u
.val
;
4595 case DW_AT_addr_base
:
4596 unit
->dwarf_addr_offset
= attr
.u
.val
;
4599 case DW_AT_str_offsets_base
:
4600 unit
->dwarf_str_offset
= attr
.u
.val
;
4608 for (i
= 0; i
< str_count
; ++i
)
4609 reread_attribute (unit
, &str_addrp
[i
], &low_pc
, &high_pc
,
4610 &high_pc_relative
, compunit_flag
);
4612 if (high_pc_relative
)
4616 if (!arange_add (unit
, &unit
->arange
, &unit
->file
->trie_root
,
4621 unit
->first_child_die_ptr
= info_ptr
;
4632 /* Return TRUE if UNIT may contain the address given by ADDR. When
4633 there are functions written entirely with inline asm statements, the
4634 range info in the compilation unit header may not be correct. We
4635 need to consult the line info table to see if a compilation unit
4636 really contains the given address. */
4639 comp_unit_contains_address (struct comp_unit
*unit
, bfd_vma addr
)
4641 struct arange
*arange
;
4646 arange
= &unit
->arange
;
4649 if (addr
>= arange
->low
&& addr
< arange
->high
)
4651 arange
= arange
->next
;
4658 /* If UNIT contains ADDR, set the output parameters to the values for
4659 the line containing ADDR and return TRUE. Otherwise return FALSE.
4660 The output parameters, FILENAME_PTR, FUNCTION_PTR, and
4661 LINENUMBER_PTR, are pointers to the objects to be filled in. */
4664 comp_unit_find_nearest_line (struct comp_unit
*unit
,
4666 const char **filename_ptr
,
4667 struct funcinfo
**function_ptr
,
4668 unsigned int *linenumber_ptr
,
4669 unsigned int *discriminator_ptr
)
4671 bool line_p
, func_p
;
4673 if (!comp_unit_maybe_decode_line_info (unit
))
4676 *function_ptr
= NULL
;
4677 func_p
= lookup_address_in_function_table (unit
, addr
, function_ptr
);
4678 if (func_p
&& (*function_ptr
)->tag
== DW_TAG_inlined_subroutine
)
4679 unit
->stash
->inliner_chain
= *function_ptr
;
4681 line_p
= lookup_address_in_line_info_table (unit
->line_table
, addr
,
4685 return line_p
|| func_p
;
4688 /* Check to see if line info is already decoded in a comp_unit.
4689 If not, decode it. Returns TRUE if no errors were encountered;
4693 comp_unit_maybe_decode_line_info (struct comp_unit
*unit
)
4698 if (! unit
->line_table
)
4700 if (! unit
->stmtlist
)
4706 unit
->line_table
= decode_line_info (unit
);
4708 if (! unit
->line_table
)
4714 if (unit
->first_child_die_ptr
< unit
->end_ptr
4715 && ! scan_unit_for_symbols (unit
))
4725 /* If UNIT contains SYM at ADDR, set the output parameters to the
4726 values for the line containing SYM. The output parameters,
4727 FILENAME_PTR, and LINENUMBER_PTR, are pointers to the objects to be
4730 Return TRUE if UNIT contains SYM, and no errors were encountered;
4734 comp_unit_find_line (struct comp_unit
*unit
,
4737 const char **filename_ptr
,
4738 unsigned int *linenumber_ptr
)
4740 if (!comp_unit_maybe_decode_line_info (unit
))
4743 if (sym
->flags
& BSF_FUNCTION
)
4744 return lookup_symbol_in_function_table (unit
, sym
, addr
,
4748 return lookup_symbol_in_variable_table (unit
, sym
, addr
,
4753 /* Extract all interesting funcinfos and varinfos of a compilation
4754 unit into hash tables for faster lookup. Returns TRUE if no
4755 errors were enountered; FALSE otherwise. */
4758 comp_unit_hash_info (struct dwarf2_debug
*stash
,
4759 struct comp_unit
*unit
,
4760 struct info_hash_table
*funcinfo_hash_table
,
4761 struct info_hash_table
*varinfo_hash_table
)
4763 struct funcinfo
* each_func
;
4764 struct varinfo
* each_var
;
4767 BFD_ASSERT (stash
->info_hash_status
!= STASH_INFO_HASH_DISABLED
);
4769 if (!comp_unit_maybe_decode_line_info (unit
))
4772 BFD_ASSERT (!unit
->cached
);
4774 /* To preserve the original search order, we went to visit the function
4775 infos in the reversed order of the list. However, making the list
4776 bi-directional use quite a bit of extra memory. So we reverse
4777 the list first, traverse the list in the now reversed order and
4778 finally reverse the list again to get back the original order. */
4779 unit
->function_table
= reverse_funcinfo_list (unit
->function_table
);
4780 for (each_func
= unit
->function_table
;
4782 each_func
= each_func
->prev_func
)
4784 /* Skip nameless functions. */
4785 if (each_func
->name
)
4786 /* There is no need to copy name string into hash table as
4787 name string is either in the dwarf string buffer or
4788 info in the stash. */
4789 okay
= insert_info_hash_table (funcinfo_hash_table
, each_func
->name
,
4790 (void*) each_func
, false);
4792 unit
->function_table
= reverse_funcinfo_list (unit
->function_table
);
4796 /* We do the same for variable infos. */
4797 unit
->variable_table
= reverse_varinfo_list (unit
->variable_table
);
4798 for (each_var
= unit
->variable_table
;
4800 each_var
= each_var
->prev_var
)
4802 /* Skip stack vars and vars with no files or names. */
4803 if (! each_var
->stack
4804 && each_var
->file
!= NULL
4805 && each_var
->name
!= NULL
)
4806 /* There is no need to copy name string into hash table as
4807 name string is either in the dwarf string buffer or
4808 info in the stash. */
4809 okay
= insert_info_hash_table (varinfo_hash_table
, each_var
->name
,
4810 (void*) each_var
, false);
4813 unit
->variable_table
= reverse_varinfo_list (unit
->variable_table
);
4814 unit
->cached
= true;
4818 /* Locate a section in a BFD containing debugging info. The search starts
4819 from the section after AFTER_SEC, or from the first section in the BFD if
4820 AFTER_SEC is NULL. The search works by examining the names of the
4821 sections. There are three permissiable names. The first two are given
4822 by DEBUG_SECTIONS[debug_info] (whose standard DWARF2 names are .debug_info
4823 and .zdebug_info). The third is a prefix .gnu.linkonce.wi.
4824 This is a variation on the .debug_info section which has a checksum
4825 describing the contents appended onto the name. This allows the linker to
4826 identify and discard duplicate debugging sections for different
4827 compilation units. */
4828 #define GNU_LINKONCE_INFO ".gnu.linkonce.wi."
4831 find_debug_info (bfd
*abfd
, const struct dwarf_debug_section
*debug_sections
,
4832 asection
*after_sec
)
4837 if (after_sec
== NULL
)
4839 look
= debug_sections
[debug_info
].uncompressed_name
;
4840 msec
= bfd_get_section_by_name (abfd
, look
);
4844 look
= debug_sections
[debug_info
].compressed_name
;
4845 msec
= bfd_get_section_by_name (abfd
, look
);
4849 for (msec
= abfd
->sections
; msec
!= NULL
; msec
= msec
->next
)
4850 if (startswith (msec
->name
, GNU_LINKONCE_INFO
))
4856 for (msec
= after_sec
->next
; msec
!= NULL
; msec
= msec
->next
)
4858 look
= debug_sections
[debug_info
].uncompressed_name
;
4859 if (strcmp (msec
->name
, look
) == 0)
4862 look
= debug_sections
[debug_info
].compressed_name
;
4863 if (look
!= NULL
&& strcmp (msec
->name
, look
) == 0)
4866 if (startswith (msec
->name
, GNU_LINKONCE_INFO
))
4873 /* Transfer VMAs from object file to separate debug file. */
4876 set_debug_vma (bfd
*orig_bfd
, bfd
*debug_bfd
)
4880 for (s
= orig_bfd
->sections
, d
= debug_bfd
->sections
;
4881 s
!= NULL
&& d
!= NULL
;
4882 s
= s
->next
, d
= d
->next
)
4884 if ((d
->flags
& SEC_DEBUGGING
) != 0)
4886 /* ??? Assumes 1-1 correspondence between sections in the
4888 if (strcmp (s
->name
, d
->name
) == 0)
4890 d
->output_section
= s
->output_section
;
4891 d
->output_offset
= s
->output_offset
;
4897 /* If the dwarf2 info was found in a separate debug file, return the
4898 debug file section corresponding to the section in the original file
4899 and the debug file symbols. */
4902 _bfd_dwarf2_stash_syms (struct dwarf2_debug
*stash
, bfd
*abfd
,
4903 asection
**sec
, asymbol
***syms
)
4905 if (stash
->f
.bfd_ptr
!= abfd
)
4911 *syms
= stash
->f
.syms
;
4915 for (s
= abfd
->sections
, d
= stash
->f
.bfd_ptr
->sections
;
4916 s
!= NULL
&& d
!= NULL
;
4917 s
= s
->next
, d
= d
->next
)
4919 if ((d
->flags
& SEC_DEBUGGING
) != 0)
4922 && strcmp (s
->name
, d
->name
) == 0)
4925 *syms
= stash
->f
.syms
;
4932 /* Unset vmas for adjusted sections in STASH. */
4935 unset_sections (struct dwarf2_debug
*stash
)
4938 struct adjusted_section
*p
;
4940 i
= stash
->adjusted_section_count
;
4941 p
= stash
->adjusted_sections
;
4942 for (; i
> 0; i
--, p
++)
4943 p
->section
->vma
= 0;
4946 /* Set VMAs for allocated and .debug_info sections in ORIG_BFD, a
4947 relocatable object file. VMAs are normally all zero in relocatable
4948 object files, so if we want to distinguish locations in sections by
4949 address we need to set VMAs so the sections do not overlap. We
4950 also set VMA on .debug_info so that when we have multiple
4951 .debug_info sections (or the linkonce variant) they also do not
4952 overlap. The multiple .debug_info sections make up a single
4953 logical section. ??? We should probably do the same for other
4957 place_sections (bfd
*orig_bfd
, struct dwarf2_debug
*stash
)
4960 struct adjusted_section
*p
;
4962 const char *debug_info_name
;
4964 if (stash
->adjusted_section_count
!= 0)
4966 i
= stash
->adjusted_section_count
;
4967 p
= stash
->adjusted_sections
;
4968 for (; i
> 0; i
--, p
++)
4969 p
->section
->vma
= p
->adj_vma
;
4973 debug_info_name
= stash
->debug_sections
[debug_info
].uncompressed_name
;
4980 for (sect
= abfd
->sections
; sect
!= NULL
; sect
= sect
->next
)
4984 if ((sect
->output_section
!= NULL
4985 && sect
->output_section
!= sect
4986 && (sect
->flags
& SEC_DEBUGGING
) == 0)
4990 is_debug_info
= (strcmp (sect
->name
, debug_info_name
) == 0
4991 || startswith (sect
->name
, GNU_LINKONCE_INFO
));
4993 if (!((sect
->flags
& SEC_ALLOC
) != 0 && abfd
== orig_bfd
)
4999 if (abfd
== stash
->f
.bfd_ptr
)
5001 abfd
= stash
->f
.bfd_ptr
;
5005 stash
->adjusted_section_count
= -1;
5008 bfd_vma last_vma
= 0, last_dwarf
= 0;
5009 size_t amt
= i
* sizeof (struct adjusted_section
);
5011 p
= (struct adjusted_section
*) bfd_malloc (amt
);
5015 stash
->adjusted_sections
= p
;
5016 stash
->adjusted_section_count
= i
;
5023 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)
5034 is_debug_info
= (strcmp (sect
->name
, debug_info_name
) == 0
5035 || startswith (sect
->name
, GNU_LINKONCE_INFO
));
5037 if (!((sect
->flags
& SEC_ALLOC
) != 0 && abfd
== orig_bfd
)
5041 sz
= sect
->rawsize
? sect
->rawsize
: sect
->size
;
5045 BFD_ASSERT (sect
->alignment_power
== 0);
5046 sect
->vma
= last_dwarf
;
5051 /* Align the new address to the current section
5053 last_vma
= ((last_vma
5054 + ~(-((bfd_vma
) 1 << sect
->alignment_power
)))
5055 & (-((bfd_vma
) 1 << sect
->alignment_power
)));
5056 sect
->vma
= last_vma
;
5061 p
->adj_vma
= sect
->vma
;
5064 if (abfd
== stash
->f
.bfd_ptr
)
5066 abfd
= stash
->f
.bfd_ptr
;
5070 if (orig_bfd
!= stash
->f
.bfd_ptr
)
5071 set_debug_vma (orig_bfd
, stash
->f
.bfd_ptr
);
5076 /* Look up a funcinfo by name using the given info hash table. If found,
5077 also update the locations pointed to by filename_ptr and linenumber_ptr.
5079 This function returns TRUE if a funcinfo that matches the given symbol
5080 and address is found with any error; otherwise it returns FALSE. */
5083 info_hash_lookup_funcinfo (struct info_hash_table
*hash_table
,
5086 const char **filename_ptr
,
5087 unsigned int *linenumber_ptr
)
5089 struct funcinfo
* each_func
;
5090 struct funcinfo
* best_fit
= NULL
;
5091 bfd_vma best_fit_len
= (bfd_vma
) -1;
5092 struct info_list_node
*node
;
5093 struct arange
*arange
;
5094 const char *name
= bfd_asymbol_name (sym
);
5096 for (node
= lookup_info_hash_table (hash_table
, name
);
5100 each_func
= (struct funcinfo
*) node
->info
;
5101 for (arange
= &each_func
->arange
;
5103 arange
= arange
->next
)
5105 if (addr
>= arange
->low
5106 && addr
< arange
->high
5107 && arange
->high
- arange
->low
< best_fit_len
)
5109 best_fit
= each_func
;
5110 best_fit_len
= arange
->high
- arange
->low
;
5117 *filename_ptr
= best_fit
->file
;
5118 *linenumber_ptr
= best_fit
->line
;
5125 /* Look up a varinfo by name using the given info hash table. If found,
5126 also update the locations pointed to by filename_ptr and linenumber_ptr.
5128 This function returns TRUE if a varinfo that matches the given symbol
5129 and address is found with any error; otherwise it returns FALSE. */
5132 info_hash_lookup_varinfo (struct info_hash_table
*hash_table
,
5135 const char **filename_ptr
,
5136 unsigned int *linenumber_ptr
)
5138 struct varinfo
* each
;
5139 struct info_list_node
*node
;
5140 const char *name
= bfd_asymbol_name (sym
);
5142 for (node
= lookup_info_hash_table (hash_table
, name
);
5146 each
= (struct varinfo
*) node
->info
;
5147 if (each
->addr
== addr
)
5149 *filename_ptr
= each
->file
;
5150 *linenumber_ptr
= each
->line
;
5158 /* Update the funcinfo and varinfo info hash tables if they are
5159 not up to date. Returns TRUE if there is no error; otherwise
5160 returns FALSE and disable the info hash tables. */
5163 stash_maybe_update_info_hash_tables (struct dwarf2_debug
*stash
)
5165 struct comp_unit
*each
;
5167 /* Exit if hash tables are up-to-date. */
5168 if (stash
->f
.all_comp_units
== stash
->hash_units_head
)
5171 if (stash
->hash_units_head
)
5172 each
= stash
->hash_units_head
->prev_unit
;
5174 each
= stash
->f
.last_comp_unit
;
5178 if (!comp_unit_hash_info (stash
, each
, stash
->funcinfo_hash_table
,
5179 stash
->varinfo_hash_table
))
5181 stash
->info_hash_status
= STASH_INFO_HASH_DISABLED
;
5184 each
= each
->prev_unit
;
5187 stash
->hash_units_head
= stash
->f
.all_comp_units
;
5191 /* Check consistency of info hash tables. This is for debugging only. */
5193 static void ATTRIBUTE_UNUSED
5194 stash_verify_info_hash_table (struct dwarf2_debug
*stash
)
5196 struct comp_unit
*each_unit
;
5197 struct funcinfo
*each_func
;
5198 struct varinfo
*each_var
;
5199 struct info_list_node
*node
;
5202 for (each_unit
= stash
->f
.all_comp_units
;
5204 each_unit
= each_unit
->next_unit
)
5206 for (each_func
= each_unit
->function_table
;
5208 each_func
= each_func
->prev_func
)
5210 if (!each_func
->name
)
5212 node
= lookup_info_hash_table (stash
->funcinfo_hash_table
,
5216 while (node
&& !found
)
5218 found
= node
->info
== each_func
;
5224 for (each_var
= each_unit
->variable_table
;
5226 each_var
= each_var
->prev_var
)
5228 if (!each_var
->name
|| !each_var
->file
|| each_var
->stack
)
5230 node
= lookup_info_hash_table (stash
->varinfo_hash_table
,
5234 while (node
&& !found
)
5236 found
= node
->info
== each_var
;
5244 /* Check to see if we want to enable the info hash tables, which consume
5245 quite a bit of memory. Currently we only check the number times
5246 bfd_dwarf2_find_line is called. In the future, we may also want to
5247 take the number of symbols into account. */
5250 stash_maybe_enable_info_hash_tables (bfd
*abfd
, struct dwarf2_debug
*stash
)
5252 BFD_ASSERT (stash
->info_hash_status
== STASH_INFO_HASH_OFF
);
5254 if (stash
->info_hash_count
++ < STASH_INFO_HASH_TRIGGER
)
5257 /* FIXME: Maybe we should check the reduce_memory_overheads
5258 and optimize fields in the bfd_link_info structure ? */
5260 /* Create hash tables. */
5261 stash
->funcinfo_hash_table
= create_info_hash_table (abfd
);
5262 stash
->varinfo_hash_table
= create_info_hash_table (abfd
);
5263 if (!stash
->funcinfo_hash_table
|| !stash
->varinfo_hash_table
)
5265 /* Turn off info hashes if any allocation above fails. */
5266 stash
->info_hash_status
= STASH_INFO_HASH_DISABLED
;
5269 /* We need a forced update so that the info hash tables will
5270 be created even though there is no compilation unit. That
5271 happens if STASH_INFO_HASH_TRIGGER is 0. */
5272 if (stash_maybe_update_info_hash_tables (stash
))
5273 stash
->info_hash_status
= STASH_INFO_HASH_ON
;
5276 /* Find the file and line associated with a symbol and address using the
5277 info hash tables of a stash. If there is a match, the function returns
5278 TRUE and update the locations pointed to by filename_ptr and linenumber_ptr;
5279 otherwise it returns FALSE. */
5282 stash_find_line_fast (struct dwarf2_debug
*stash
,
5285 const char **filename_ptr
,
5286 unsigned int *linenumber_ptr
)
5288 BFD_ASSERT (stash
->info_hash_status
== STASH_INFO_HASH_ON
);
5290 if (sym
->flags
& BSF_FUNCTION
)
5291 return info_hash_lookup_funcinfo (stash
->funcinfo_hash_table
, sym
, addr
,
5292 filename_ptr
, linenumber_ptr
);
5293 return info_hash_lookup_varinfo (stash
->varinfo_hash_table
, sym
, addr
,
5294 filename_ptr
, linenumber_ptr
);
5297 /* Save current section VMAs. */
5300 save_section_vma (const bfd
*abfd
, struct dwarf2_debug
*stash
)
5305 if (abfd
->section_count
== 0)
5307 stash
->sec_vma
= bfd_malloc (sizeof (*stash
->sec_vma
) * abfd
->section_count
);
5308 if (stash
->sec_vma
== NULL
)
5310 stash
->sec_vma_count
= abfd
->section_count
;
5311 for (i
= 0, s
= abfd
->sections
;
5312 s
!= NULL
&& i
< abfd
->section_count
;
5315 if (s
->output_section
!= NULL
)
5316 stash
->sec_vma
[i
] = s
->output_section
->vma
+ s
->output_offset
;
5318 stash
->sec_vma
[i
] = s
->vma
;
5323 /* Compare current section VMAs against those at the time the stash
5324 was created. If find_nearest_line is used in linker warnings or
5325 errors early in the link process, the debug info stash will be
5326 invalid for later calls. This is because we relocate debug info
5327 sections, so the stashed section contents depend on symbol values,
5328 which in turn depend on section VMAs. */
5331 section_vma_same (const bfd
*abfd
, const struct dwarf2_debug
*stash
)
5336 /* PR 24334: If the number of sections in ABFD has changed between
5337 when the stash was created and now, then we cannot trust the
5338 stashed vma information. */
5339 if (abfd
->section_count
!= stash
->sec_vma_count
)
5342 for (i
= 0, s
= abfd
->sections
;
5343 s
!= NULL
&& i
< abfd
->section_count
;
5348 if (s
->output_section
!= NULL
)
5349 vma
= s
->output_section
->vma
+ s
->output_offset
;
5352 if (vma
!= stash
->sec_vma
[i
])
5358 /* Read debug information from DEBUG_BFD when DEBUG_BFD is specified.
5359 If DEBUG_BFD is not specified, we read debug information from ABFD
5360 or its gnu_debuglink. The results will be stored in PINFO.
5361 The function returns TRUE iff debug information is ready. */
5364 _bfd_dwarf2_slurp_debug_info (bfd
*abfd
, bfd
*debug_bfd
,
5365 const struct dwarf_debug_section
*debug_sections
,
5370 size_t amt
= sizeof (struct dwarf2_debug
);
5371 bfd_size_type total_size
;
5373 struct dwarf2_debug
*stash
= (struct dwarf2_debug
*) *pinfo
;
5377 if (stash
->orig_bfd
== abfd
5378 && section_vma_same (abfd
, stash
))
5380 /* Check that we did previously find some debug information
5381 before attempting to make use of it. */
5382 if (stash
->f
.bfd_ptr
!= NULL
)
5384 if (do_place
&& !place_sections (abfd
, stash
))
5391 _bfd_dwarf2_cleanup_debug_info (abfd
, pinfo
);
5392 memset (stash
, 0, amt
);
5396 stash
= (struct dwarf2_debug
*) bfd_zalloc (abfd
, amt
);
5400 stash
->orig_bfd
= abfd
;
5401 stash
->debug_sections
= debug_sections
;
5402 stash
->f
.syms
= symbols
;
5403 if (!save_section_vma (abfd
, stash
))
5406 stash
->f
.abbrev_offsets
= htab_create_alloc (10, hash_abbrev
, eq_abbrev
,
5407 del_abbrev
, calloc
, free
);
5408 if (!stash
->f
.abbrev_offsets
)
5411 stash
->alt
.abbrev_offsets
= htab_create_alloc (10, hash_abbrev
, eq_abbrev
,
5412 del_abbrev
, calloc
, free
);
5413 if (!stash
->alt
.abbrev_offsets
)
5416 stash
->f
.trie_root
= alloc_trie_leaf (abfd
);
5417 if (!stash
->f
.trie_root
)
5420 stash
->alt
.trie_root
= alloc_trie_leaf (abfd
);
5421 if (!stash
->alt
.trie_root
)
5426 if (debug_bfd
== NULL
)
5429 msec
= find_debug_info (debug_bfd
, debug_sections
, NULL
);
5430 if (msec
== NULL
&& abfd
== debug_bfd
)
5432 char * debug_filename
;
5434 debug_filename
= bfd_follow_build_id_debuglink (abfd
, DEBUGDIR
);
5435 if (debug_filename
== NULL
)
5436 debug_filename
= bfd_follow_gnu_debuglink (abfd
, DEBUGDIR
);
5438 if (debug_filename
== NULL
)
5439 /* No dwarf2 info, and no gnu_debuglink to follow.
5440 Note that at this point the stash has been allocated, but
5441 contains zeros. This lets future calls to this function
5442 fail more quickly. */
5445 debug_bfd
= bfd_openr (debug_filename
, NULL
);
5446 free (debug_filename
);
5447 if (debug_bfd
== NULL
)
5448 /* FIXME: Should we report our failure to follow the debuglink ? */
5451 /* Set BFD_DECOMPRESS to decompress debug sections. */
5452 debug_bfd
->flags
|= BFD_DECOMPRESS
;
5453 if (!bfd_check_format (debug_bfd
, bfd_object
)
5454 || (msec
= find_debug_info (debug_bfd
,
5455 debug_sections
, NULL
)) == NULL
5456 || !bfd_generic_link_read_symbols (debug_bfd
))
5458 bfd_close (debug_bfd
);
5462 symbols
= bfd_get_outsymbols (debug_bfd
);
5463 stash
->f
.syms
= symbols
;
5464 stash
->close_on_cleanup
= true;
5466 stash
->f
.bfd_ptr
= debug_bfd
;
5469 && !place_sections (abfd
, stash
))
5472 /* There can be more than one DWARF2 info section in a BFD these
5473 days. First handle the easy case when there's only one. If
5474 there's more than one, try case two: none of the sections is
5475 compressed. In that case, read them all in and produce one
5476 large stash. We do this in two passes - in the first pass we
5477 just accumulate the section sizes, and in the second pass we
5478 read in the section's contents. (The allows us to avoid
5479 reallocing the data as we add sections to the stash.) If
5480 some or all sections are compressed, then do things the slow
5481 way, with a bunch of reallocs. */
5483 if (! find_debug_info (debug_bfd
, debug_sections
, msec
))
5485 /* Case 1: only one info section. */
5486 total_size
= msec
->size
;
5487 if (! read_section (debug_bfd
, &stash
->debug_sections
[debug_info
],
5489 &stash
->f
.dwarf_info_buffer
, &total_size
))
5494 /* Case 2: multiple sections. */
5495 for (total_size
= 0;
5497 msec
= find_debug_info (debug_bfd
, debug_sections
, msec
))
5499 /* Catch PR25070 testcase overflowing size calculation here. */
5500 if (total_size
+ msec
->size
< total_size
5501 || total_size
+ msec
->size
< msec
->size
)
5503 bfd_set_error (bfd_error_no_memory
);
5506 total_size
+= msec
->size
;
5509 stash
->f
.dwarf_info_buffer
= (bfd_byte
*) bfd_malloc (total_size
);
5510 if (stash
->f
.dwarf_info_buffer
== NULL
)
5514 for (msec
= find_debug_info (debug_bfd
, debug_sections
, NULL
);
5516 msec
= find_debug_info (debug_bfd
, debug_sections
, msec
))
5524 if (!(bfd_simple_get_relocated_section_contents
5525 (debug_bfd
, msec
, stash
->f
.dwarf_info_buffer
+ total_size
,
5533 stash
->f
.info_ptr
= stash
->f
.dwarf_info_buffer
;
5534 stash
->f
.dwarf_info_size
= total_size
;
5538 /* Parse the next DWARF2 compilation unit at FILE->INFO_PTR. */
5540 static struct comp_unit
*
5541 stash_comp_unit (struct dwarf2_debug
*stash
, struct dwarf2_debug_file
*file
)
5543 bfd_size_type length
;
5544 unsigned int offset_size
;
5545 bfd_byte
*info_ptr_unit
= file
->info_ptr
;
5546 bfd_byte
*info_ptr_end
= file
->dwarf_info_buffer
+ file
->dwarf_info_size
;
5548 if (file
->info_ptr
>= info_ptr_end
)
5551 length
= read_4_bytes (file
->bfd_ptr
, &file
->info_ptr
, info_ptr_end
);
5552 /* A 0xffffff length is the DWARF3 way of indicating
5553 we use 64-bit offsets, instead of 32-bit offsets. */
5554 if (length
== 0xffffffff)
5557 length
= read_8_bytes (file
->bfd_ptr
, &file
->info_ptr
, info_ptr_end
);
5559 /* A zero length is the IRIX way of indicating 64-bit offsets,
5560 mostly because the 64-bit length will generally fit in 32
5561 bits, and the endianness helps. */
5562 else if (length
== 0)
5565 length
= read_4_bytes (file
->bfd_ptr
, &file
->info_ptr
, info_ptr_end
);
5567 /* In the absence of the hints above, we assume 32-bit DWARF2
5568 offsets even for targets with 64-bit addresses, because:
5569 a) most of the time these targets will not have generated
5570 more than 2Gb of debug info and so will not need 64-bit
5573 b) if they do use 64-bit offsets but they are not using
5574 the size hints that are tested for above then they are
5575 not conforming to the DWARF3 standard anyway. */
5580 && length
<= (size_t) (info_ptr_end
- file
->info_ptr
))
5582 struct comp_unit
*each
= parse_comp_unit (stash
, file
,
5583 file
->info_ptr
, length
,
5584 info_ptr_unit
, offset_size
);
5587 if (file
->comp_unit_tree
== NULL
)
5588 file
->comp_unit_tree
5589 = splay_tree_new (splay_tree_compare_addr_range
,
5590 splay_tree_free_addr_range
, NULL
);
5592 struct addr_range
*r
5593 = (struct addr_range
*)bfd_malloc (sizeof (struct addr_range
));
5594 r
->start
= each
->info_ptr_unit
;
5595 r
->end
= each
->end_ptr
;
5596 splay_tree_node v
= splay_tree_lookup (file
->comp_unit_tree
,
5598 if (v
!= NULL
|| r
->end
<= r
->start
)
5600 splay_tree_insert (file
->comp_unit_tree
, (splay_tree_key
)r
,
5601 (splay_tree_value
)each
);
5603 if (file
->all_comp_units
)
5604 file
->all_comp_units
->prev_unit
= each
;
5606 file
->last_comp_unit
= each
;
5608 each
->next_unit
= file
->all_comp_units
;
5609 file
->all_comp_units
= each
;
5611 if (each
->arange
.high
== 0)
5613 each
->next_unit_without_ranges
= file
->all_comp_units_without_ranges
;
5614 file
->all_comp_units_without_ranges
= each
->next_unit_without_ranges
;
5617 file
->info_ptr
+= length
;
5622 /* Don't trust any of the DWARF info after a corrupted length or
5624 file
->info_ptr
= info_ptr_end
;
5628 /* Hash function for an asymbol. */
5631 hash_asymbol (const void *sym
)
5633 const asymbol
*asym
= sym
;
5634 return htab_hash_string (asym
->name
);
5637 /* Equality function for asymbols. */
5640 eq_asymbol (const void *a
, const void *b
)
5642 const asymbol
*sa
= a
;
5643 const asymbol
*sb
= b
;
5644 return strcmp (sa
->name
, sb
->name
) == 0;
5647 /* Scan the debug information in PINFO looking for a DW_TAG_subprogram
5648 abbrev with a DW_AT_low_pc attached to it. Then lookup that same
5649 symbol in SYMBOLS and return the difference between the low_pc and
5650 the symbol's address. Returns 0 if no suitable symbol could be found. */
5653 _bfd_dwarf2_find_symbol_bias (asymbol
** symbols
, void ** pinfo
)
5655 struct dwarf2_debug
*stash
;
5656 struct comp_unit
* unit
;
5658 bfd_signed_vma result
= 0;
5661 stash
= (struct dwarf2_debug
*) *pinfo
;
5663 if (stash
== NULL
|| symbols
== NULL
)
5666 sym_hash
= htab_create_alloc (10, hash_asymbol
, eq_asymbol
,
5667 NULL
, xcalloc
, free
);
5668 for (psym
= symbols
; * psym
!= NULL
; psym
++)
5670 asymbol
* sym
= * psym
;
5672 if (sym
->flags
& BSF_FUNCTION
&& sym
->section
!= NULL
)
5674 void **slot
= htab_find_slot (sym_hash
, sym
, INSERT
);
5679 for (unit
= stash
->f
.all_comp_units
; unit
; unit
= unit
->next_unit
)
5681 struct funcinfo
* func
;
5683 comp_unit_maybe_decode_line_info (unit
);
5685 for (func
= unit
->function_table
; func
!= NULL
; func
= func
->prev_func
)
5686 if (func
->name
&& func
->arange
.low
)
5688 asymbol search
, *sym
;
5690 /* FIXME: Do we need to scan the aranges looking for the
5693 search
.name
= func
->name
;
5694 sym
= htab_find (sym_hash
, &search
);
5697 result
= func
->arange
.low
- (sym
->value
+ sym
->section
->vma
);
5704 htab_delete (sym_hash
);
5708 /* See _bfd_dwarf2_find_nearest_line_with_alt. */
5711 _bfd_dwarf2_find_nearest_line (bfd
*abfd
,
5716 const char **filename_ptr
,
5717 const char **functionname_ptr
,
5718 unsigned int *linenumber_ptr
,
5719 unsigned int *discriminator_ptr
,
5720 const struct dwarf_debug_section
*debug_sections
,
5723 return _bfd_dwarf2_find_nearest_line_with_alt
5724 (abfd
, NULL
, symbols
, symbol
, section
, offset
, filename_ptr
,
5725 functionname_ptr
, linenumber_ptr
, discriminator_ptr
, debug_sections
,
5729 /* Find the source code location of SYMBOL. If SYMBOL is NULL
5730 then find the nearest source code location corresponding to
5731 the address SECTION + OFFSET.
5732 Returns 1 if the line is found without error and fills in
5733 FILENAME_PTR and LINENUMBER_PTR. In the case where SYMBOL was
5734 NULL the FUNCTIONNAME_PTR is also filled in.
5735 Returns 2 if partial information from _bfd_elf_find_function is
5736 returned (function and maybe file) by looking at symbols. DWARF2
5737 info is present but not regarding the requested code location.
5738 Returns 0 otherwise.
5739 SYMBOLS contains the symbol table for ABFD.
5740 DEBUG_SECTIONS contains the name of the dwarf debug sections.
5741 If ALT_FILENAME is given, attempt to open the file and use it
5742 as the .gnu_debugaltlink file. Otherwise this file will be
5743 searched for when needed. */
5746 _bfd_dwarf2_find_nearest_line_with_alt
5748 const char *alt_filename
,
5753 const char **filename_ptr
,
5754 const char **functionname_ptr
,
5755 unsigned int *linenumber_ptr
,
5756 unsigned int *discriminator_ptr
,
5757 const struct dwarf_debug_section
*debug_sections
,
5760 /* Read each compilation unit from the section .debug_info, and check
5761 to see if it contains the address we are searching for. If yes,
5762 lookup the address, and return the line number info. If no, go
5763 on to the next compilation unit.
5765 We keep a list of all the previously read compilation units, and
5766 a pointer to the next un-read compilation unit. Check the
5767 previously read units before reading more. */
5768 struct dwarf2_debug
*stash
;
5769 /* What address are we looking for? */
5771 struct comp_unit
* each
;
5772 struct funcinfo
*function
= NULL
;
5776 *filename_ptr
= NULL
;
5777 if (functionname_ptr
!= NULL
)
5778 *functionname_ptr
= NULL
;
5779 *linenumber_ptr
= 0;
5780 if (discriminator_ptr
)
5781 *discriminator_ptr
= 0;
5783 if (! _bfd_dwarf2_slurp_debug_info (abfd
, NULL
, debug_sections
,
5785 (abfd
->flags
& (EXEC_P
| DYNAMIC
)) == 0))
5788 stash
= (struct dwarf2_debug
*) *pinfo
;
5790 if (stash
->alt
.bfd_ptr
== NULL
&& alt_filename
!= NULL
)
5792 bfd
*alt_bfd
= bfd_openr (alt_filename
, NULL
);
5794 if (alt_bfd
== NULL
)
5795 /* bfd_openr will have set the bfd_error. */
5797 if (!bfd_check_format (alt_bfd
, bfd_object
))
5799 bfd_set_error (bfd_error_wrong_format
);
5800 bfd_close (alt_bfd
);
5804 stash
->alt
.bfd_ptr
= alt_bfd
;
5807 do_line
= symbol
!= NULL
;
5810 BFD_ASSERT (section
== NULL
&& offset
== 0 && functionname_ptr
== NULL
);
5811 section
= bfd_asymbol_section (symbol
);
5812 addr
= symbol
->value
;
5816 BFD_ASSERT (section
!= NULL
&& functionname_ptr
!= NULL
);
5819 /* If we have no SYMBOL but the section we're looking at is not a
5820 code section, then take a look through the list of symbols to see
5821 if we have a symbol at the address we're looking for. If we do
5822 then use this to look up line information. This will allow us to
5823 give file and line results for data symbols. We exclude code
5824 symbols here, if we look up a function symbol and then look up the
5825 line information we'll actually return the line number for the
5826 opening '{' rather than the function definition line. This is
5827 because looking up by symbol uses the line table, in which the
5828 first line for a function is usually the opening '{', while
5829 looking up the function by section + offset uses the
5830 DW_AT_decl_line from the function DW_TAG_subprogram for the line,
5831 which will be the line of the function name. */
5832 if (symbols
!= NULL
&& (section
->flags
& SEC_CODE
) == 0)
5836 for (tmp
= symbols
; (*tmp
) != NULL
; ++tmp
)
5837 if ((*tmp
)->the_bfd
== abfd
5838 && (*tmp
)->section
== section
5839 && (*tmp
)->value
== offset
5840 && ((*tmp
)->flags
& BSF_SECTION_SYM
) == 0)
5844 /* For local symbols, keep going in the hope we find a
5846 if ((symbol
->flags
& BSF_GLOBAL
) != 0)
5852 if (section
->output_section
)
5853 addr
+= section
->output_section
->vma
+ section
->output_offset
;
5855 addr
+= section
->vma
;
5857 /* A null info_ptr indicates that there is no dwarf2 info
5858 (or that an error occured while setting up the stash). */
5859 if (! stash
->f
.info_ptr
)
5862 stash
->inliner_chain
= NULL
;
5864 /* Check the previously read comp. units first. */
5867 /* The info hash tables use quite a bit of memory. We may not want to
5868 always use them. We use some heuristics to decide if and when to
5870 if (stash
->info_hash_status
== STASH_INFO_HASH_OFF
)
5871 stash_maybe_enable_info_hash_tables (abfd
, stash
);
5873 /* Keep info hash table up to date if they are available. Note that we
5874 may disable the hash tables if there is any error duing update. */
5875 if (stash
->info_hash_status
== STASH_INFO_HASH_ON
)
5876 stash_maybe_update_info_hash_tables (stash
);
5878 if (stash
->info_hash_status
== STASH_INFO_HASH_ON
)
5880 found
= stash_find_line_fast (stash
, symbol
, addr
,
5881 filename_ptr
, linenumber_ptr
);
5886 /* Check the previously read comp. units first. */
5887 for (each
= stash
->f
.all_comp_units
; each
; each
= each
->next_unit
)
5888 if ((symbol
->flags
& BSF_FUNCTION
) == 0
5889 || each
->arange
.high
== 0
5890 || comp_unit_contains_address (each
, addr
))
5892 found
= comp_unit_find_line (each
, symbol
, addr
, filename_ptr
,
5900 struct trie_node
*trie
= stash
->f
.trie_root
;
5901 unsigned int bits
= VMA_BITS
- 8;
5902 struct comp_unit
**prev_each
;
5904 /* Traverse interior nodes until we get to a leaf. */
5905 while (trie
&& trie
->num_room_in_leaf
== 0)
5907 int ch
= (addr
>> bits
) & 0xff;
5908 trie
= ((struct trie_interior
*) trie
)->children
[ch
];
5914 const struct trie_leaf
*leaf
= (struct trie_leaf
*) trie
;
5917 for (i
= 0; i
< leaf
->num_stored_in_leaf
; ++i
)
5918 leaf
->ranges
[i
].unit
->mark
= false;
5920 for (i
= 0; i
< leaf
->num_stored_in_leaf
; ++i
)
5922 struct comp_unit
*unit
= leaf
->ranges
[i
].unit
;
5924 || addr
< leaf
->ranges
[i
].low_pc
5925 || addr
>= leaf
->ranges
[i
].high_pc
)
5929 found
= comp_unit_find_nearest_line (unit
, addr
,
5939 /* Also scan through all compilation units without any ranges,
5940 taking them out of the list if they have acquired any since
5942 prev_each
= &stash
->f
.all_comp_units_without_ranges
;
5943 for (each
= *prev_each
; each
; each
= each
->next_unit_without_ranges
)
5945 if (each
->arange
.high
!= 0)
5947 *prev_each
= each
->next_unit_without_ranges
;
5951 found
= comp_unit_find_nearest_line (each
, addr
,
5958 prev_each
= &each
->next_unit_without_ranges
;
5962 /* Read each remaining comp. units checking each as they are read. */
5963 while ((each
= stash_comp_unit (stash
, &stash
->f
)) != NULL
)
5965 /* DW_AT_low_pc and DW_AT_high_pc are optional for
5966 compilation units. If we don't have them (i.e.,
5967 unit->high == 0), we need to consult the line info table
5968 to see if a compilation unit contains the given
5971 found
= (((symbol
->flags
& BSF_FUNCTION
) == 0
5972 || each
->arange
.high
== 0
5973 || comp_unit_contains_address (each
, addr
))
5974 && comp_unit_find_line (each
, symbol
, addr
,
5975 filename_ptr
, linenumber_ptr
));
5977 found
= ((each
->arange
.high
== 0
5978 || comp_unit_contains_address (each
, addr
))
5979 && comp_unit_find_nearest_line (each
, addr
,
5983 discriminator_ptr
));
5990 if (functionname_ptr
&& function
&& function
->is_linkage
)
5992 *functionname_ptr
= function
->name
;
5996 else if (functionname_ptr
5997 && (!*functionname_ptr
5998 || (function
&& !function
->is_linkage
)))
6001 asymbol
**syms
= symbols
;
6002 asection
*sec
= section
;
6004 _bfd_dwarf2_stash_syms (stash
, abfd
, &sec
, &syms
);
6005 fun
= _bfd_elf_find_function (abfd
, syms
, sec
, offset
,
6006 *filename_ptr
? NULL
: filename_ptr
,
6009 if (!found
&& fun
!= NULL
)
6012 if (function
&& !function
->is_linkage
)
6016 sec_vma
= section
->vma
;
6017 if (section
->output_section
!= NULL
)
6018 sec_vma
= section
->output_section
->vma
+ section
->output_offset
;
6020 *functionname_ptr
= function
->name
;
6021 else if (fun
->value
+ sec_vma
== function
->arange
.low
)
6022 function
->name
= *functionname_ptr
;
6023 /* Even if we didn't find a linkage name, say that we have
6024 to stop a repeated search of symbols. */
6025 function
->is_linkage
= true;
6029 if ((abfd
->flags
& (EXEC_P
| DYNAMIC
)) == 0)
6030 unset_sections (stash
);
6036 _bfd_dwarf2_find_inliner_info (bfd
*abfd ATTRIBUTE_UNUSED
,
6037 const char **filename_ptr
,
6038 const char **functionname_ptr
,
6039 unsigned int *linenumber_ptr
,
6042 struct dwarf2_debug
*stash
;
6044 stash
= (struct dwarf2_debug
*) *pinfo
;
6047 struct funcinfo
*func
= stash
->inliner_chain
;
6049 if (func
&& func
->caller_func
)
6051 *filename_ptr
= func
->caller_file
;
6052 *functionname_ptr
= func
->caller_func
->name
;
6053 *linenumber_ptr
= func
->caller_line
;
6054 stash
->inliner_chain
= func
->caller_func
;
6063 _bfd_dwarf2_cleanup_debug_info (bfd
*abfd
, void **pinfo
)
6065 struct dwarf2_debug
*stash
= (struct dwarf2_debug
*) *pinfo
;
6066 struct comp_unit
*each
;
6067 struct dwarf2_debug_file
*file
;
6069 if (abfd
== NULL
|| stash
== NULL
)
6072 if (stash
->varinfo_hash_table
)
6073 bfd_hash_table_free (&stash
->varinfo_hash_table
->base
);
6074 if (stash
->funcinfo_hash_table
)
6075 bfd_hash_table_free (&stash
->funcinfo_hash_table
->base
);
6080 for (each
= file
->all_comp_units
; each
; each
= each
->next_unit
)
6082 struct funcinfo
*function_table
= each
->function_table
;
6083 struct varinfo
*variable_table
= each
->variable_table
;
6085 if (each
->line_table
&& each
->line_table
!= file
->line_table
)
6087 free (each
->line_table
->files
);
6088 free (each
->line_table
->dirs
);
6091 free (each
->lookup_funcinfo_table
);
6092 each
->lookup_funcinfo_table
= NULL
;
6094 while (function_table
)
6096 free (function_table
->file
);
6097 function_table
->file
= NULL
;
6098 free (function_table
->caller_file
);
6099 function_table
->caller_file
= NULL
;
6100 function_table
= function_table
->prev_func
;
6103 while (variable_table
)
6105 free (variable_table
->file
);
6106 variable_table
->file
= NULL
;
6107 variable_table
= variable_table
->prev_var
;
6111 if (file
->line_table
)
6113 free (file
->line_table
->files
);
6114 free (file
->line_table
->dirs
);
6116 htab_delete (file
->abbrev_offsets
);
6117 if (file
->comp_unit_tree
!= NULL
)
6118 splay_tree_delete (file
->comp_unit_tree
);
6120 free (file
->dwarf_line_str_buffer
);
6121 free (file
->dwarf_str_buffer
);
6122 free (file
->dwarf_ranges_buffer
);
6123 free (file
->dwarf_line_buffer
);
6124 free (file
->dwarf_abbrev_buffer
);
6125 free (file
->dwarf_info_buffer
);
6126 if (file
== &stash
->alt
)
6130 free (stash
->sec_vma
);
6131 free (stash
->adjusted_sections
);
6132 if (stash
->close_on_cleanup
)
6133 bfd_close (stash
->f
.bfd_ptr
);
6134 if (stash
->alt
.bfd_ptr
)
6135 bfd_close (stash
->alt
.bfd_ptr
);
6138 /* Find the function to a particular section and offset,
6139 for error reporting. */
6142 _bfd_elf_find_function (bfd
*abfd
,
6146 const char **filename_ptr
,
6147 const char **functionname_ptr
)
6149 struct elf_find_function_cache
6151 asection
*last_section
;
6153 const char *filename
;
6154 bfd_size_type func_size
;
6157 if (symbols
== NULL
)
6160 if (bfd_get_flavour (abfd
) != bfd_target_elf_flavour
)
6163 cache
= elf_tdata (abfd
)->elf_find_function_cache
;
6166 cache
= bfd_zalloc (abfd
, sizeof (*cache
));
6167 elf_tdata (abfd
)->elf_find_function_cache
= cache
;
6171 if (cache
->last_section
!= section
6172 || cache
->func
== NULL
6173 || offset
< cache
->func
->value
6174 || offset
>= cache
->func
->value
+ cache
->func_size
)
6179 /* ??? Given multiple file symbols, it is impossible to reliably
6180 choose the right file name for global symbols. File symbols are
6181 local symbols, and thus all file symbols must sort before any
6182 global symbols. The ELF spec may be interpreted to say that a
6183 file symbol must sort before other local symbols, but currently
6184 ld -r doesn't do this. So, for ld -r output, it is possible to
6185 make a better choice of file name for local symbols by ignoring
6186 file symbols appearing after a given local symbol. */
6187 enum { nothing_seen
, symbol_seen
, file_after_symbol_seen
} state
;
6188 const struct elf_backend_data
*bed
= get_elf_backend_data (abfd
);
6192 state
= nothing_seen
;
6193 cache
->filename
= NULL
;
6195 cache
->func_size
= 0;
6196 cache
->last_section
= section
;
6198 for (p
= symbols
; *p
!= NULL
; p
++)
6204 if ((sym
->flags
& BSF_FILE
) != 0)
6207 if (state
== symbol_seen
)
6208 state
= file_after_symbol_seen
;
6212 size
= bed
->maybe_function_sym (sym
, section
, &code_off
);
6214 && code_off
<= offset
6215 && (code_off
> low_func
6216 || (code_off
== low_func
6217 && size
> cache
->func_size
)))
6220 cache
->func_size
= size
;
6221 cache
->filename
= NULL
;
6222 low_func
= code_off
;
6224 && ((sym
->flags
& BSF_LOCAL
) != 0
6225 || state
!= file_after_symbol_seen
))
6226 cache
->filename
= bfd_asymbol_name (file
);
6228 if (state
== nothing_seen
)
6229 state
= symbol_seen
;
6233 if (cache
->func
== NULL
)
6237 *filename_ptr
= cache
->filename
;
6238 if (functionname_ptr
)
6239 *functionname_ptr
= bfd_asymbol_name (cache
->func
);