1 /* Block-related functions for the GNU debugger, GDB.
3 Copyright (C) 2003-2021 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
24 #include "gdb_obstack.h"
25 #include "cp-support.h"
30 /* This is used by struct block to store namespace-related info for
31 C++ files, namely using declarations and the current namespace in
34 struct block_namespace_info
: public allocate_on_obstack
36 const char *scope
= nullptr;
37 struct using_direct
*using_decl
= nullptr;
40 static void block_initialize_namespace (struct block
*block
,
41 struct obstack
*obstack
);
46 block_objfile (const struct block
*block
)
48 const struct global_block
*global_block
;
50 if (BLOCK_FUNCTION (block
) != NULL
)
51 return symbol_objfile (BLOCK_FUNCTION (block
));
53 global_block
= (struct global_block
*) block_global_block (block
);
54 return COMPUNIT_OBJFILE (global_block
->compunit_symtab
);
60 block_gdbarch (const struct block
*block
)
62 if (BLOCK_FUNCTION (block
) != NULL
)
63 return symbol_arch (BLOCK_FUNCTION (block
));
65 return block_objfile (block
)->arch ();
71 contained_in (const struct block
*a
, const struct block
*b
,
81 /* If A is a function block, then A cannot be contained in B,
82 except if A was inlined. */
83 if (!allow_nested
&& BLOCK_FUNCTION (a
) != NULL
&& !block_inlined_p (a
))
85 a
= BLOCK_SUPERBLOCK (a
);
93 /* Return the symbol for the function which contains a specified
94 lexical block, described by a struct block BL. The return value
95 will not be an inlined function; the containing function will be
99 block_linkage_function (const struct block
*bl
)
101 while ((BLOCK_FUNCTION (bl
) == NULL
|| block_inlined_p (bl
))
102 && BLOCK_SUPERBLOCK (bl
) != NULL
)
103 bl
= BLOCK_SUPERBLOCK (bl
);
105 return BLOCK_FUNCTION (bl
);
108 /* Return the symbol for the function which contains a specified
109 block, described by a struct block BL. The return value will be
110 the closest enclosing function, which might be an inline
114 block_containing_function (const struct block
*bl
)
116 while (BLOCK_FUNCTION (bl
) == NULL
&& BLOCK_SUPERBLOCK (bl
) != NULL
)
117 bl
= BLOCK_SUPERBLOCK (bl
);
119 return BLOCK_FUNCTION (bl
);
122 /* Return one if BL represents an inlined function. */
125 block_inlined_p (const struct block
*bl
)
127 return BLOCK_FUNCTION (bl
) != NULL
&& SYMBOL_INLINED (BLOCK_FUNCTION (bl
));
130 /* A helper function that checks whether PC is in the blockvector BL.
131 It returns the containing block if there is one, or else NULL. */
133 static const struct block
*
134 find_block_in_blockvector (const struct blockvector
*bl
, CORE_ADDR pc
)
136 const struct block
*b
;
139 /* If we have an addrmap mapping code addresses to blocks, then use
141 if (BLOCKVECTOR_MAP (bl
))
142 return (const struct block
*) addrmap_find (BLOCKVECTOR_MAP (bl
), pc
);
144 /* Otherwise, use binary search to find the last block that starts
146 Note: GLOBAL_BLOCK is block 0, STATIC_BLOCK is block 1.
147 They both have the same START,END values.
148 Historically this code would choose STATIC_BLOCK over GLOBAL_BLOCK but the
149 fact that this choice was made was subtle, now we make it explicit. */
150 gdb_assert (BLOCKVECTOR_NBLOCKS (bl
) >= 2);
152 top
= BLOCKVECTOR_NBLOCKS (bl
);
154 while (top
- bot
> 1)
156 half
= (top
- bot
+ 1) >> 1;
157 b
= BLOCKVECTOR_BLOCK (bl
, bot
+ half
);
158 if (BLOCK_START (b
) <= pc
)
164 /* Now search backward for a block that ends after PC. */
166 while (bot
>= STATIC_BLOCK
)
168 b
= BLOCKVECTOR_BLOCK (bl
, bot
);
169 if (!(BLOCK_START (b
) <= pc
))
171 if (BLOCK_END (b
) > pc
)
179 /* Return the blockvector immediately containing the innermost lexical
180 block containing the specified pc value and section, or 0 if there
181 is none. PBLOCK is a pointer to the block. If PBLOCK is NULL, we
182 don't pass this information back to the caller. */
184 const struct blockvector
*
185 blockvector_for_pc_sect (CORE_ADDR pc
, struct obj_section
*section
,
186 const struct block
**pblock
,
187 struct compunit_symtab
*cust
)
189 const struct blockvector
*bl
;
190 const struct block
*b
;
194 /* First search all symtabs for one whose file contains our pc */
195 cust
= find_pc_sect_compunit_symtab (pc
, section
);
200 bl
= COMPUNIT_BLOCKVECTOR (cust
);
202 /* Then search that symtab for the smallest block that wins. */
203 b
= find_block_in_blockvector (bl
, pc
);
212 /* Return true if the blockvector BV contains PC, false otherwise. */
215 blockvector_contains_pc (const struct blockvector
*bv
, CORE_ADDR pc
)
217 return find_block_in_blockvector (bv
, pc
) != NULL
;
220 /* Return call_site for specified PC in GDBARCH. PC must match exactly, it
221 must be the next instruction after call (or after tail call jump). Throw
222 NO_ENTRY_VALUE_ERROR otherwise. This function never returns NULL. */
225 call_site_for_pc (struct gdbarch
*gdbarch
, CORE_ADDR pc
)
227 struct compunit_symtab
*cust
;
230 /* -1 as tail call PC can be already after the compilation unit range. */
231 cust
= find_pc_compunit_symtab (pc
- 1);
233 if (cust
!= NULL
&& COMPUNIT_CALL_SITE_HTAB (cust
) != NULL
)
234 slot
= htab_find_slot (COMPUNIT_CALL_SITE_HTAB (cust
), &pc
, NO_INSERT
);
238 struct bound_minimal_symbol msym
= lookup_minimal_symbol_by_pc (pc
);
240 /* DW_TAG_gnu_call_site will be missing just if GCC could not determine
242 throw_error (NO_ENTRY_VALUE_ERROR
,
243 _("DW_OP_entry_value resolving cannot find "
244 "DW_TAG_call_site %s in %s"),
245 paddress (gdbarch
, pc
),
246 (msym
.minsym
== NULL
? "???"
247 : msym
.minsym
->print_name ()));
250 return (struct call_site
*) *slot
;
253 /* Return the blockvector immediately containing the innermost lexical block
254 containing the specified pc value, or 0 if there is none.
255 Backward compatibility, no section. */
257 const struct blockvector
*
258 blockvector_for_pc (CORE_ADDR pc
, const struct block
**pblock
)
260 return blockvector_for_pc_sect (pc
, find_pc_mapped_section (pc
),
264 /* Return the innermost lexical block containing the specified pc value
265 in the specified section, or 0 if there is none. */
268 block_for_pc_sect (CORE_ADDR pc
, struct obj_section
*section
)
270 const struct blockvector
*bl
;
271 const struct block
*b
;
273 bl
= blockvector_for_pc_sect (pc
, section
, &b
, NULL
);
279 /* Return the innermost lexical block containing the specified pc value,
280 or 0 if there is none. Backward compatibility, no section. */
283 block_for_pc (CORE_ADDR pc
)
285 return block_for_pc_sect (pc
, find_pc_mapped_section (pc
));
288 /* Now come some functions designed to deal with C++ namespace issues.
289 The accessors are safe to use even in the non-C++ case. */
291 /* This returns the namespace that BLOCK is enclosed in, or "" if it
292 isn't enclosed in a namespace at all. This travels the chain of
293 superblocks looking for a scope, if necessary. */
296 block_scope (const struct block
*block
)
298 for (; block
!= NULL
; block
= BLOCK_SUPERBLOCK (block
))
300 if (BLOCK_NAMESPACE (block
) != NULL
301 && BLOCK_NAMESPACE (block
)->scope
!= NULL
)
302 return BLOCK_NAMESPACE (block
)->scope
;
308 /* Set BLOCK's scope member to SCOPE; if needed, allocate memory via
309 OBSTACK. (It won't make a copy of SCOPE, however, so that already
310 has to be allocated correctly.) */
313 block_set_scope (struct block
*block
, const char *scope
,
314 struct obstack
*obstack
)
316 block_initialize_namespace (block
, obstack
);
318 BLOCK_NAMESPACE (block
)->scope
= scope
;
321 /* This returns the using directives list associated with BLOCK, if
324 struct using_direct
*
325 block_using (const struct block
*block
)
327 if (block
== NULL
|| BLOCK_NAMESPACE (block
) == NULL
)
330 return BLOCK_NAMESPACE (block
)->using_decl
;
333 /* Set BLOCK's using member to USING; if needed, allocate memory via
334 OBSTACK. (It won't make a copy of USING, however, so that already
335 has to be allocated correctly.) */
338 block_set_using (struct block
*block
,
339 struct using_direct
*using_decl
,
340 struct obstack
*obstack
)
342 block_initialize_namespace (block
, obstack
);
344 BLOCK_NAMESPACE (block
)->using_decl
= using_decl
;
347 /* If BLOCK_NAMESPACE (block) is NULL, allocate it via OBSTACK and
348 initialize its members to zero. */
351 block_initialize_namespace (struct block
*block
, struct obstack
*obstack
)
353 if (BLOCK_NAMESPACE (block
) == NULL
)
354 BLOCK_NAMESPACE (block
) = new (obstack
) struct block_namespace_info ();
357 /* Return the static block associated to BLOCK. Return NULL if block
358 is NULL or if block is a global block. */
361 block_static_block (const struct block
*block
)
363 if (block
== NULL
|| BLOCK_SUPERBLOCK (block
) == NULL
)
366 while (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block
)) != NULL
)
367 block
= BLOCK_SUPERBLOCK (block
);
372 /* Return the static block associated to BLOCK. Return NULL if block
376 block_global_block (const struct block
*block
)
381 while (BLOCK_SUPERBLOCK (block
) != NULL
)
382 block
= BLOCK_SUPERBLOCK (block
);
387 /* Allocate a block on OBSTACK, and initialize its elements to
388 zero/NULL. This is useful for creating "dummy" blocks that don't
389 correspond to actual source files.
391 Warning: it sets the block's BLOCK_MULTIDICT to NULL, which isn't a
392 valid value. If you really don't want the block to have a
393 dictionary, then you should subsequently set its BLOCK_MULTIDICT to
394 dict_create_linear (obstack, NULL). */
397 allocate_block (struct obstack
*obstack
)
399 struct block
*bl
= OBSTACK_ZALLOC (obstack
, struct block
);
404 /* Allocate a global block. */
407 allocate_global_block (struct obstack
*obstack
)
409 struct global_block
*bl
= OBSTACK_ZALLOC (obstack
, struct global_block
);
414 /* Set the compunit of the global block. */
417 set_block_compunit_symtab (struct block
*block
, struct compunit_symtab
*cu
)
419 struct global_block
*gb
;
421 gdb_assert (BLOCK_SUPERBLOCK (block
) == NULL
);
422 gb
= (struct global_block
*) block
;
423 gdb_assert (gb
->compunit_symtab
== NULL
);
424 gb
->compunit_symtab
= cu
;
429 struct dynamic_prop
*
430 block_static_link (const struct block
*block
)
432 struct objfile
*objfile
= block_objfile (block
);
434 /* Only objfile-owned blocks that materialize top function scopes can have
436 if (objfile
== NULL
|| BLOCK_FUNCTION (block
) == NULL
)
439 return (struct dynamic_prop
*) objfile_lookup_static_link (objfile
, block
);
442 /* Return the compunit of the global block. */
444 static struct compunit_symtab
*
445 get_block_compunit_symtab (const struct block
*block
)
447 struct global_block
*gb
;
449 gdb_assert (BLOCK_SUPERBLOCK (block
) == NULL
);
450 gb
= (struct global_block
*) block
;
451 gdb_assert (gb
->compunit_symtab
!= NULL
);
452 return gb
->compunit_symtab
;
457 /* Initialize a block iterator, either to iterate over a single block,
458 or, for static and global blocks, all the included symtabs as
462 initialize_block_iterator (const struct block
*block
,
463 struct block_iterator
*iter
)
465 enum block_enum which
;
466 struct compunit_symtab
*cu
;
470 if (BLOCK_SUPERBLOCK (block
) == NULL
)
472 which
= GLOBAL_BLOCK
;
473 cu
= get_block_compunit_symtab (block
);
475 else if (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block
)) == NULL
)
477 which
= STATIC_BLOCK
;
478 cu
= get_block_compunit_symtab (BLOCK_SUPERBLOCK (block
));
482 iter
->d
.block
= block
;
483 /* A signal value meaning that we're iterating over a single
485 iter
->which
= FIRST_LOCAL_BLOCK
;
489 /* If this is an included symtab, find the canonical includer and
491 while (cu
->user
!= NULL
)
494 /* Putting this check here simplifies the logic of the iterator
495 functions. If there are no included symtabs, we only need to
496 search a single block, so we might as well just do that
498 if (cu
->includes
== NULL
)
500 iter
->d
.block
= block
;
501 /* A signal value meaning that we're iterating over a single
503 iter
->which
= FIRST_LOCAL_BLOCK
;
507 iter
->d
.compunit_symtab
= cu
;
512 /* A helper function that finds the current compunit over whose static
513 or global block we should iterate. */
515 static struct compunit_symtab
*
516 find_iterator_compunit_symtab (struct block_iterator
*iterator
)
518 if (iterator
->idx
== -1)
519 return iterator
->d
.compunit_symtab
;
520 return iterator
->d
.compunit_symtab
->includes
[iterator
->idx
];
523 /* Perform a single step for a plain block iterator, iterating across
524 symbol tables as needed. Returns the next symbol, or NULL when
525 iteration is complete. */
527 static struct symbol
*
528 block_iterator_step (struct block_iterator
*iterator
, int first
)
532 gdb_assert (iterator
->which
!= FIRST_LOCAL_BLOCK
);
538 struct compunit_symtab
*cust
539 = find_iterator_compunit_symtab (iterator
);
540 const struct block
*block
;
542 /* Iteration is complete. */
546 block
= BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust
),
548 sym
= mdict_iterator_first (BLOCK_MULTIDICT (block
),
549 &iterator
->mdict_iter
);
552 sym
= mdict_iterator_next (&iterator
->mdict_iter
);
557 /* We have finished iterating the appropriate block of one
558 symtab. Now advance to the next symtab and begin iteration
568 block_iterator_first (const struct block
*block
,
569 struct block_iterator
*iterator
)
571 initialize_block_iterator (block
, iterator
);
573 if (iterator
->which
== FIRST_LOCAL_BLOCK
)
574 return mdict_iterator_first (block
->multidict
, &iterator
->mdict_iter
);
576 return block_iterator_step (iterator
, 1);
582 block_iterator_next (struct block_iterator
*iterator
)
584 if (iterator
->which
== FIRST_LOCAL_BLOCK
)
585 return mdict_iterator_next (&iterator
->mdict_iter
);
587 return block_iterator_step (iterator
, 0);
590 /* Perform a single step for a "match" block iterator, iterating
591 across symbol tables as needed. Returns the next symbol, or NULL
592 when iteration is complete. */
594 static struct symbol
*
595 block_iter_match_step (struct block_iterator
*iterator
,
596 const lookup_name_info
&name
,
601 gdb_assert (iterator
->which
!= FIRST_LOCAL_BLOCK
);
607 struct compunit_symtab
*cust
608 = find_iterator_compunit_symtab (iterator
);
609 const struct block
*block
;
611 /* Iteration is complete. */
615 block
= BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust
),
617 sym
= mdict_iter_match_first (BLOCK_MULTIDICT (block
), name
,
618 &iterator
->mdict_iter
);
621 sym
= mdict_iter_match_next (name
, &iterator
->mdict_iter
);
626 /* We have finished iterating the appropriate block of one
627 symtab. Now advance to the next symtab and begin iteration
637 block_iter_match_first (const struct block
*block
,
638 const lookup_name_info
&name
,
639 struct block_iterator
*iterator
)
641 initialize_block_iterator (block
, iterator
);
643 if (iterator
->which
== FIRST_LOCAL_BLOCK
)
644 return mdict_iter_match_first (block
->multidict
, name
,
645 &iterator
->mdict_iter
);
647 return block_iter_match_step (iterator
, name
, 1);
653 block_iter_match_next (const lookup_name_info
&name
,
654 struct block_iterator
*iterator
)
656 if (iterator
->which
== FIRST_LOCAL_BLOCK
)
657 return mdict_iter_match_next (name
, &iterator
->mdict_iter
);
659 return block_iter_match_step (iterator
, name
, 0);
665 best_symbol (struct symbol
*a
, const domain_enum domain
)
667 return (SYMBOL_DOMAIN (a
) == domain
668 && SYMBOL_CLASS (a
) != LOC_UNRESOLVED
);
674 better_symbol (struct symbol
*a
, struct symbol
*b
, const domain_enum domain
)
681 if (SYMBOL_DOMAIN (a
) == domain
682 && SYMBOL_DOMAIN (b
) != domain
)
684 if (SYMBOL_DOMAIN (b
) == domain
685 && SYMBOL_DOMAIN (a
) != domain
)
688 if (SYMBOL_CLASS (a
) != LOC_UNRESOLVED
689 && SYMBOL_CLASS (b
) == LOC_UNRESOLVED
)
691 if (SYMBOL_CLASS (b
) != LOC_UNRESOLVED
692 && SYMBOL_CLASS (a
) == LOC_UNRESOLVED
)
700 Note that if NAME is the demangled form of a C++ symbol, we will fail
701 to find a match during the binary search of the non-encoded names, but
702 for now we don't worry about the slight inefficiency of looking for
703 a match we'll never find, since it will go pretty quick. Once the
704 binary search terminates, we drop through and do a straight linear
705 search on the symbols. Each symbol which is marked as being a ObjC/C++
706 symbol (language_cplus or language_objc set) has both the encoded and
707 non-encoded names tested for a match. */
710 block_lookup_symbol (const struct block
*block
, const char *name
,
711 symbol_name_match_type match_type
,
712 const domain_enum domain
)
714 struct block_iterator iter
;
717 lookup_name_info
lookup_name (name
, match_type
);
719 if (!BLOCK_FUNCTION (block
))
721 struct symbol
*other
= NULL
;
723 ALL_BLOCK_SYMBOLS_WITH_NAME (block
, lookup_name
, iter
, sym
)
725 /* See comment related to PR gcc/debug/91507 in
726 block_lookup_symbol_primary. */
727 if (best_symbol (sym
, domain
))
729 /* This is a bit of a hack, but symbol_matches_domain might ignore
730 STRUCT vs VAR domain symbols. So if a matching symbol is found,
731 make sure there is no "better" matching symbol, i.e., one with
732 exactly the same domain. PR 16253. */
733 if (symbol_matches_domain (sym
->language (),
734 SYMBOL_DOMAIN (sym
), domain
))
735 other
= better_symbol (other
, sym
, domain
);
741 /* Note that parameter symbols do not always show up last in the
742 list; this loop makes sure to take anything else other than
743 parameter symbols first; it only uses parameter symbols as a
744 last resort. Note that this only takes up extra computation
746 It's hard to define types in the parameter list (at least in
747 C/C++) so we don't do the same PR 16253 hack here that is done
748 for the !BLOCK_FUNCTION case. */
750 struct symbol
*sym_found
= NULL
;
752 ALL_BLOCK_SYMBOLS_WITH_NAME (block
, lookup_name
, iter
, sym
)
754 if (symbol_matches_domain (sym
->language (),
755 SYMBOL_DOMAIN (sym
), domain
))
758 if (!SYMBOL_IS_ARGUMENT (sym
))
764 return (sym_found
); /* Will be NULL if not found. */
771 block_lookup_symbol_primary (const struct block
*block
, const char *name
,
772 const domain_enum domain
)
774 struct symbol
*sym
, *other
;
775 struct mdict_iterator mdict_iter
;
777 lookup_name_info
lookup_name (name
, symbol_name_match_type::FULL
);
779 /* Verify BLOCK is STATIC_BLOCK or GLOBAL_BLOCK. */
780 gdb_assert (BLOCK_SUPERBLOCK (block
) == NULL
781 || BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block
)) == NULL
);
785 = mdict_iter_match_first (block
->multidict
, lookup_name
, &mdict_iter
);
787 sym
= mdict_iter_match_next (lookup_name
, &mdict_iter
))
789 /* With the fix for PR gcc/debug/91507, we get for:
797 DWARF which will result in two entries in the symbol table, a decl
798 with type char *[] and a def with type char *[2].
800 If we return the decl here, we don't get the value of zzz:
802 $ gdb a.spec.out -batch -ex "p zzz"
805 because we're returning the symbol without location information, and
806 because the fallback that uses the address from the minimal symbols
807 doesn't work either because the type of the decl does not specify a
810 To fix this, we prefer def over decl in best_symbol and
813 In absence of the gcc fix, both def and decl have type char *[], so
814 the only option to make this work is improve the fallback to use the
815 size of the minimal symbol. Filed as PR exp/24989. */
816 if (best_symbol (sym
, domain
))
819 /* This is a bit of a hack, but symbol_matches_domain might ignore
820 STRUCT vs VAR domain symbols. So if a matching symbol is found,
821 make sure there is no "better" matching symbol, i.e., one with
822 exactly the same domain. PR 16253. */
823 if (symbol_matches_domain (sym
->language (), SYMBOL_DOMAIN (sym
), domain
))
824 other
= better_symbol (other
, sym
, domain
);
833 block_find_symbol (const struct block
*block
, const char *name
,
834 const domain_enum domain
,
835 block_symbol_matcher_ftype
*matcher
, void *data
)
837 struct block_iterator iter
;
840 lookup_name_info
lookup_name (name
, symbol_name_match_type::FULL
);
842 /* Verify BLOCK is STATIC_BLOCK or GLOBAL_BLOCK. */
843 gdb_assert (BLOCK_SUPERBLOCK (block
) == NULL
844 || BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block
)) == NULL
);
846 ALL_BLOCK_SYMBOLS_WITH_NAME (block
, lookup_name
, iter
, sym
)
848 /* MATCHER is deliberately called second here so that it never sees
849 a non-domain-matching symbol. */
850 if (symbol_matches_domain (sym
->language (), SYMBOL_DOMAIN (sym
), domain
)
851 && matcher (sym
, data
))
860 block_find_non_opaque_type (struct symbol
*sym
, void *data
)
862 return !TYPE_IS_OPAQUE (SYMBOL_TYPE (sym
));
868 block_find_non_opaque_type_preferred (struct symbol
*sym
, void *data
)
870 struct symbol
**best
= (struct symbol
**) data
;
872 if (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym
)))
881 make_blockranges (struct objfile
*objfile
,
882 const std::vector
<blockrange
> &rangevec
)
884 struct blockranges
*blr
;
885 size_t n
= rangevec
.size();
887 blr
= (struct blockranges
*)
888 obstack_alloc (&objfile
->objfile_obstack
,
889 sizeof (struct blockranges
)
890 + (n
- 1) * sizeof (struct blockrange
));
893 for (int i
= 0; i
< n
; i
++)
894 blr
->range
[i
] = rangevec
[i
];