xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/block.c (revision a45db23f655e22f0c2354600d3b3c2cb98abf2dc)
1 /* Block-related functions for the GNU debugger, GDB.
2 
3    Copyright (C) 2003-2020 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
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.
11 
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.
16 
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/>.  */
19 
20 #include "defs.h"
21 #include "block.h"
22 #include "symtab.h"
23 #include "symfile.h"
24 #include "gdb_obstack.h"
25 #include "cp-support.h"
26 #include "addrmap.h"
27 #include "gdbtypes.h"
28 #include "objfiles.h"
29 
30 /* This is used by struct block to store namespace-related info for
31    C++ files, namely using declarations and the current namespace in
32    scope.  */
33 
34 struct block_namespace_info : public allocate_on_obstack
35 {
36   const char *scope = nullptr;
37   struct using_direct *using_decl = nullptr;
38 };
39 
40 static void block_initialize_namespace (struct block *block,
41 					struct obstack *obstack);
42 
43 /* See block.h.  */
44 
45 struct objfile *
46 block_objfile (const struct block *block)
47 {
48   const struct global_block *global_block;
49 
50   if (BLOCK_FUNCTION (block) != NULL)
51     return symbol_objfile (BLOCK_FUNCTION (block));
52 
53   global_block = (struct global_block *) block_global_block (block);
54   return COMPUNIT_OBJFILE (global_block->compunit_symtab);
55 }
56 
57 /* See block.  */
58 
59 struct gdbarch *
60 block_gdbarch (const struct block *block)
61 {
62   if (BLOCK_FUNCTION (block) != NULL)
63     return symbol_arch (BLOCK_FUNCTION (block));
64 
65   return block_objfile (block)->arch ();
66 }
67 
68 /* See block.h.  */
69 
70 bool
71 contained_in (const struct block *a, const struct block *b,
72 	      bool allow_nested)
73 {
74   if (!a || !b)
75     return false;
76 
77   do
78     {
79       if (a == b)
80 	return true;
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))
84         return false;
85       a = BLOCK_SUPERBLOCK (a);
86     }
87   while (a != NULL);
88 
89   return false;
90 }
91 
92 
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
96    returned instead.  */
97 
98 struct symbol *
99 block_linkage_function (const struct block *bl)
100 {
101   while ((BLOCK_FUNCTION (bl) == NULL || block_inlined_p (bl))
102 	 && BLOCK_SUPERBLOCK (bl) != NULL)
103     bl = BLOCK_SUPERBLOCK (bl);
104 
105   return BLOCK_FUNCTION (bl);
106 }
107 
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
111    function.  */
112 
113 struct symbol *
114 block_containing_function (const struct block *bl)
115 {
116   while (BLOCK_FUNCTION (bl) == NULL && BLOCK_SUPERBLOCK (bl) != NULL)
117     bl = BLOCK_SUPERBLOCK (bl);
118 
119   return BLOCK_FUNCTION (bl);
120 }
121 
122 /* Return one if BL represents an inlined function.  */
123 
124 int
125 block_inlined_p (const struct block *bl)
126 {
127   return BLOCK_FUNCTION (bl) != NULL && SYMBOL_INLINED (BLOCK_FUNCTION (bl));
128 }
129 
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.  */
132 
133 static const struct block *
134 find_block_in_blockvector (const struct blockvector *bl, CORE_ADDR pc)
135 {
136   const struct block *b;
137   int bot, top, half;
138 
139   /* If we have an addrmap mapping code addresses to blocks, then use
140      that.  */
141   if (BLOCKVECTOR_MAP (bl))
142     return (const struct block *) addrmap_find (BLOCKVECTOR_MAP (bl), pc);
143 
144   /* Otherwise, use binary search to find the last block that starts
145      before PC.
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);
151   bot = STATIC_BLOCK;
152   top = BLOCKVECTOR_NBLOCKS (bl);
153 
154   while (top - bot > 1)
155     {
156       half = (top - bot + 1) >> 1;
157       b = BLOCKVECTOR_BLOCK (bl, bot + half);
158       if (BLOCK_START (b) <= pc)
159 	bot += half;
160       else
161 	top = bot + half;
162     }
163 
164   /* Now search backward for a block that ends after PC.  */
165 
166   while (bot >= STATIC_BLOCK)
167     {
168       b = BLOCKVECTOR_BLOCK (bl, bot);
169       if (BLOCK_END (b) > pc)
170 	return b;
171       bot--;
172     }
173 
174   return NULL;
175 }
176 
177 /* Return the blockvector immediately containing the innermost lexical
178    block containing the specified pc value and section, or 0 if there
179    is none.  PBLOCK is a pointer to the block.  If PBLOCK is NULL, we
180    don't pass this information back to the caller.  */
181 
182 const struct blockvector *
183 blockvector_for_pc_sect (CORE_ADDR pc, struct obj_section *section,
184 			 const struct block **pblock,
185 			 struct compunit_symtab *cust)
186 {
187   const struct blockvector *bl;
188   const struct block *b;
189 
190   if (cust == NULL)
191     {
192       /* First search all symtabs for one whose file contains our pc */
193       cust = find_pc_sect_compunit_symtab (pc, section);
194       if (cust == NULL)
195 	return 0;
196     }
197 
198   bl = COMPUNIT_BLOCKVECTOR (cust);
199 
200   /* Then search that symtab for the smallest block that wins.  */
201   b = find_block_in_blockvector (bl, pc);
202   if (b == NULL)
203     return NULL;
204 
205   if (pblock)
206     *pblock = b;
207   return bl;
208 }
209 
210 /* Return true if the blockvector BV contains PC, false otherwise.  */
211 
212 int
213 blockvector_contains_pc (const struct blockvector *bv, CORE_ADDR pc)
214 {
215   return find_block_in_blockvector (bv, pc) != NULL;
216 }
217 
218 /* Return call_site for specified PC in GDBARCH.  PC must match exactly, it
219    must be the next instruction after call (or after tail call jump).  Throw
220    NO_ENTRY_VALUE_ERROR otherwise.  This function never returns NULL.  */
221 
222 struct call_site *
223 call_site_for_pc (struct gdbarch *gdbarch, CORE_ADDR pc)
224 {
225   struct compunit_symtab *cust;
226   void **slot = NULL;
227 
228   /* -1 as tail call PC can be already after the compilation unit range.  */
229   cust = find_pc_compunit_symtab (pc - 1);
230 
231   if (cust != NULL && COMPUNIT_CALL_SITE_HTAB (cust) != NULL)
232     slot = htab_find_slot (COMPUNIT_CALL_SITE_HTAB (cust), &pc, NO_INSERT);
233 
234   if (slot == NULL)
235     {
236       struct bound_minimal_symbol msym = lookup_minimal_symbol_by_pc (pc);
237 
238       /* DW_TAG_gnu_call_site will be missing just if GCC could not determine
239 	 the call target.  */
240       throw_error (NO_ENTRY_VALUE_ERROR,
241 		   _("DW_OP_entry_value resolving cannot find "
242 		     "DW_TAG_call_site %s in %s"),
243 		   paddress (gdbarch, pc),
244 		   (msym.minsym == NULL ? "???"
245 		    : msym.minsym->print_name ()));
246     }
247 
248   return (struct call_site *) *slot;
249 }
250 
251 /* Return the blockvector immediately containing the innermost lexical block
252    containing the specified pc value, or 0 if there is none.
253    Backward compatibility, no section.  */
254 
255 const struct blockvector *
256 blockvector_for_pc (CORE_ADDR pc, const struct block **pblock)
257 {
258   return blockvector_for_pc_sect (pc, find_pc_mapped_section (pc),
259 				  pblock, NULL);
260 }
261 
262 /* Return the innermost lexical block containing the specified pc value
263    in the specified section, or 0 if there is none.  */
264 
265 const struct block *
266 block_for_pc_sect (CORE_ADDR pc, struct obj_section *section)
267 {
268   const struct blockvector *bl;
269   const struct block *b;
270 
271   bl = blockvector_for_pc_sect (pc, section, &b, NULL);
272   if (bl)
273     return b;
274   return 0;
275 }
276 
277 /* Return the innermost lexical block containing the specified pc value,
278    or 0 if there is none.  Backward compatibility, no section.  */
279 
280 const struct block *
281 block_for_pc (CORE_ADDR pc)
282 {
283   return block_for_pc_sect (pc, find_pc_mapped_section (pc));
284 }
285 
286 /* Now come some functions designed to deal with C++ namespace issues.
287    The accessors are safe to use even in the non-C++ case.  */
288 
289 /* This returns the namespace that BLOCK is enclosed in, or "" if it
290    isn't enclosed in a namespace at all.  This travels the chain of
291    superblocks looking for a scope, if necessary.  */
292 
293 const char *
294 block_scope (const struct block *block)
295 {
296   for (; block != NULL; block = BLOCK_SUPERBLOCK (block))
297     {
298       if (BLOCK_NAMESPACE (block) != NULL
299 	  && BLOCK_NAMESPACE (block)->scope != NULL)
300 	return BLOCK_NAMESPACE (block)->scope;
301     }
302 
303   return "";
304 }
305 
306 /* Set BLOCK's scope member to SCOPE; if needed, allocate memory via
307    OBSTACK.  (It won't make a copy of SCOPE, however, so that already
308    has to be allocated correctly.)  */
309 
310 void
311 block_set_scope (struct block *block, const char *scope,
312 		 struct obstack *obstack)
313 {
314   block_initialize_namespace (block, obstack);
315 
316   BLOCK_NAMESPACE (block)->scope = scope;
317 }
318 
319 /* This returns the using directives list associated with BLOCK, if
320    any.  */
321 
322 struct using_direct *
323 block_using (const struct block *block)
324 {
325   if (block == NULL || BLOCK_NAMESPACE (block) == NULL)
326     return NULL;
327   else
328     return BLOCK_NAMESPACE (block)->using_decl;
329 }
330 
331 /* Set BLOCK's using member to USING; if needed, allocate memory via
332    OBSTACK.  (It won't make a copy of USING, however, so that already
333    has to be allocated correctly.)  */
334 
335 void
336 block_set_using (struct block *block,
337 		 struct using_direct *using_decl,
338 		 struct obstack *obstack)
339 {
340   block_initialize_namespace (block, obstack);
341 
342   BLOCK_NAMESPACE (block)->using_decl = using_decl;
343 }
344 
345 /* If BLOCK_NAMESPACE (block) is NULL, allocate it via OBSTACK and
346    initialize its members to zero.  */
347 
348 static void
349 block_initialize_namespace (struct block *block, struct obstack *obstack)
350 {
351   if (BLOCK_NAMESPACE (block) == NULL)
352     BLOCK_NAMESPACE (block) = new (obstack) struct block_namespace_info ();
353 }
354 
355 /* Return the static block associated to BLOCK.  Return NULL if block
356    is NULL or if block is a global block.  */
357 
358 const struct block *
359 block_static_block (const struct block *block)
360 {
361   if (block == NULL || BLOCK_SUPERBLOCK (block) == NULL)
362     return NULL;
363 
364   while (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) != NULL)
365     block = BLOCK_SUPERBLOCK (block);
366 
367   return block;
368 }
369 
370 /* Return the static block associated to BLOCK.  Return NULL if block
371    is NULL.  */
372 
373 const struct block *
374 block_global_block (const struct block *block)
375 {
376   if (block == NULL)
377     return NULL;
378 
379   while (BLOCK_SUPERBLOCK (block) != NULL)
380     block = BLOCK_SUPERBLOCK (block);
381 
382   return block;
383 }
384 
385 /* Allocate a block on OBSTACK, and initialize its elements to
386    zero/NULL.  This is useful for creating "dummy" blocks that don't
387    correspond to actual source files.
388 
389    Warning: it sets the block's BLOCK_MULTIDICT to NULL, which isn't a
390    valid value.  If you really don't want the block to have a
391    dictionary, then you should subsequently set its BLOCK_MULTIDICT to
392    dict_create_linear (obstack, NULL).  */
393 
394 struct block *
395 allocate_block (struct obstack *obstack)
396 {
397   struct block *bl = OBSTACK_ZALLOC (obstack, struct block);
398 
399   return bl;
400 }
401 
402 /* Allocate a global block.  */
403 
404 struct block *
405 allocate_global_block (struct obstack *obstack)
406 {
407   struct global_block *bl = OBSTACK_ZALLOC (obstack, struct global_block);
408 
409   return &bl->block;
410 }
411 
412 /* Set the compunit of the global block.  */
413 
414 void
415 set_block_compunit_symtab (struct block *block, struct compunit_symtab *cu)
416 {
417   struct global_block *gb;
418 
419   gdb_assert (BLOCK_SUPERBLOCK (block) == NULL);
420   gb = (struct global_block *) block;
421   gdb_assert (gb->compunit_symtab == NULL);
422   gb->compunit_symtab = cu;
423 }
424 
425 /* See block.h.  */
426 
427 struct dynamic_prop *
428 block_static_link (const struct block *block)
429 {
430   struct objfile *objfile = block_objfile (block);
431 
432   /* Only objfile-owned blocks that materialize top function scopes can have
433      static links.  */
434   if (objfile == NULL || BLOCK_FUNCTION (block) == NULL)
435     return NULL;
436 
437   return (struct dynamic_prop *) objfile_lookup_static_link (objfile, block);
438 }
439 
440 /* Return the compunit of the global block.  */
441 
442 static struct compunit_symtab *
443 get_block_compunit_symtab (const struct block *block)
444 {
445   struct global_block *gb;
446 
447   gdb_assert (BLOCK_SUPERBLOCK (block) == NULL);
448   gb = (struct global_block *) block;
449   gdb_assert (gb->compunit_symtab != NULL);
450   return gb->compunit_symtab;
451 }
452 
453 
454 
455 /* Initialize a block iterator, either to iterate over a single block,
456    or, for static and global blocks, all the included symtabs as
457    well.  */
458 
459 static void
460 initialize_block_iterator (const struct block *block,
461 			   struct block_iterator *iter)
462 {
463   enum block_enum which;
464   struct compunit_symtab *cu;
465 
466   iter->idx = -1;
467 
468   if (BLOCK_SUPERBLOCK (block) == NULL)
469     {
470       which = GLOBAL_BLOCK;
471       cu = get_block_compunit_symtab (block);
472     }
473   else if (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) == NULL)
474     {
475       which = STATIC_BLOCK;
476       cu = get_block_compunit_symtab (BLOCK_SUPERBLOCK (block));
477     }
478   else
479     {
480       iter->d.block = block;
481       /* A signal value meaning that we're iterating over a single
482 	 block.  */
483       iter->which = FIRST_LOCAL_BLOCK;
484       return;
485     }
486 
487   /* If this is an included symtab, find the canonical includer and
488      use it instead.  */
489   while (cu->user != NULL)
490     cu = cu->user;
491 
492   /* Putting this check here simplifies the logic of the iterator
493      functions.  If there are no included symtabs, we only need to
494      search a single block, so we might as well just do that
495      directly.  */
496   if (cu->includes == NULL)
497     {
498       iter->d.block = block;
499       /* A signal value meaning that we're iterating over a single
500 	 block.  */
501       iter->which = FIRST_LOCAL_BLOCK;
502     }
503   else
504     {
505       iter->d.compunit_symtab = cu;
506       iter->which = which;
507     }
508 }
509 
510 /* A helper function that finds the current compunit over whose static
511    or global block we should iterate.  */
512 
513 static struct compunit_symtab *
514 find_iterator_compunit_symtab (struct block_iterator *iterator)
515 {
516   if (iterator->idx == -1)
517     return iterator->d.compunit_symtab;
518   return iterator->d.compunit_symtab->includes[iterator->idx];
519 }
520 
521 /* Perform a single step for a plain block iterator, iterating across
522    symbol tables as needed.  Returns the next symbol, or NULL when
523    iteration is complete.  */
524 
525 static struct symbol *
526 block_iterator_step (struct block_iterator *iterator, int first)
527 {
528   struct symbol *sym;
529 
530   gdb_assert (iterator->which != FIRST_LOCAL_BLOCK);
531 
532   while (1)
533     {
534       if (first)
535 	{
536 	  struct compunit_symtab *cust
537 	    = find_iterator_compunit_symtab (iterator);
538 	  const struct block *block;
539 
540 	  /* Iteration is complete.  */
541 	  if (cust == NULL)
542 	    return  NULL;
543 
544 	  block = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust),
545 				     iterator->which);
546 	  sym = mdict_iterator_first (BLOCK_MULTIDICT (block),
547 				      &iterator->mdict_iter);
548 	}
549       else
550 	sym = mdict_iterator_next (&iterator->mdict_iter);
551 
552       if (sym != NULL)
553 	return sym;
554 
555       /* We have finished iterating the appropriate block of one
556 	 symtab.  Now advance to the next symtab and begin iteration
557 	 there.  */
558       ++iterator->idx;
559       first = 1;
560     }
561 }
562 
563 /* See block.h.  */
564 
565 struct symbol *
566 block_iterator_first (const struct block *block,
567 		      struct block_iterator *iterator)
568 {
569   initialize_block_iterator (block, iterator);
570 
571   if (iterator->which == FIRST_LOCAL_BLOCK)
572     return mdict_iterator_first (block->multidict, &iterator->mdict_iter);
573 
574   return block_iterator_step (iterator, 1);
575 }
576 
577 /* See block.h.  */
578 
579 struct symbol *
580 block_iterator_next (struct block_iterator *iterator)
581 {
582   if (iterator->which == FIRST_LOCAL_BLOCK)
583     return mdict_iterator_next (&iterator->mdict_iter);
584 
585   return block_iterator_step (iterator, 0);
586 }
587 
588 /* Perform a single step for a "match" block iterator, iterating
589    across symbol tables as needed.  Returns the next symbol, or NULL
590    when iteration is complete.  */
591 
592 static struct symbol *
593 block_iter_match_step (struct block_iterator *iterator,
594 		       const lookup_name_info &name,
595 		       int first)
596 {
597   struct symbol *sym;
598 
599   gdb_assert (iterator->which != FIRST_LOCAL_BLOCK);
600 
601   while (1)
602     {
603       if (first)
604 	{
605 	  struct compunit_symtab *cust
606 	    = find_iterator_compunit_symtab (iterator);
607 	  const struct block *block;
608 
609 	  /* Iteration is complete.  */
610 	  if (cust == NULL)
611 	    return  NULL;
612 
613 	  block = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust),
614 				     iterator->which);
615 	  sym = mdict_iter_match_first (BLOCK_MULTIDICT (block), name,
616 					&iterator->mdict_iter);
617 	}
618       else
619 	sym = mdict_iter_match_next (name, &iterator->mdict_iter);
620 
621       if (sym != NULL)
622 	return sym;
623 
624       /* We have finished iterating the appropriate block of one
625 	 symtab.  Now advance to the next symtab and begin iteration
626 	 there.  */
627       ++iterator->idx;
628       first = 1;
629     }
630 }
631 
632 /* See block.h.  */
633 
634 struct symbol *
635 block_iter_match_first (const struct block *block,
636 			const lookup_name_info &name,
637 			struct block_iterator *iterator)
638 {
639   initialize_block_iterator (block, iterator);
640 
641   if (iterator->which == FIRST_LOCAL_BLOCK)
642     return mdict_iter_match_first (block->multidict, name,
643 				   &iterator->mdict_iter);
644 
645   return block_iter_match_step (iterator, name, 1);
646 }
647 
648 /* See block.h.  */
649 
650 struct symbol *
651 block_iter_match_next (const lookup_name_info &name,
652 		       struct block_iterator *iterator)
653 {
654   if (iterator->which == FIRST_LOCAL_BLOCK)
655     return mdict_iter_match_next (name, &iterator->mdict_iter);
656 
657   return block_iter_match_step (iterator, name, 0);
658 }
659 
660 /* See block.h.  */
661 
662 bool
663 best_symbol (struct symbol *a, const domain_enum domain)
664 {
665   return (SYMBOL_DOMAIN (a) == domain
666 	  && SYMBOL_CLASS (a) != LOC_UNRESOLVED);
667 }
668 
669 /* See block.h.  */
670 
671 struct symbol *
672 better_symbol (struct symbol *a, struct symbol *b, const domain_enum domain)
673 {
674   if (a == NULL)
675     return b;
676   if (b == NULL)
677     return a;
678 
679   if (SYMBOL_DOMAIN (a) == domain
680       && SYMBOL_DOMAIN (b) != domain)
681     return a;
682   if (SYMBOL_DOMAIN (b) == domain
683       && SYMBOL_DOMAIN (a) != domain)
684     return b;
685 
686   if (SYMBOL_CLASS (a) != LOC_UNRESOLVED
687       && SYMBOL_CLASS (b) == LOC_UNRESOLVED)
688     return a;
689   if (SYMBOL_CLASS (b) != LOC_UNRESOLVED
690       && SYMBOL_CLASS (a) == LOC_UNRESOLVED)
691     return b;
692 
693   return a;
694 }
695 
696 /* See block.h.
697 
698    Note that if NAME is the demangled form of a C++ symbol, we will fail
699    to find a match during the binary search of the non-encoded names, but
700    for now we don't worry about the slight inefficiency of looking for
701    a match we'll never find, since it will go pretty quick.  Once the
702    binary search terminates, we drop through and do a straight linear
703    search on the symbols.  Each symbol which is marked as being a ObjC/C++
704    symbol (language_cplus or language_objc set) has both the encoded and
705    non-encoded names tested for a match.  */
706 
707 struct symbol *
708 block_lookup_symbol (const struct block *block, const char *name,
709 		     symbol_name_match_type match_type,
710 		     const domain_enum domain)
711 {
712   struct block_iterator iter;
713   struct symbol *sym;
714 
715   lookup_name_info lookup_name (name, match_type);
716 
717   if (!BLOCK_FUNCTION (block))
718     {
719       struct symbol *other = NULL;
720 
721       ALL_BLOCK_SYMBOLS_WITH_NAME (block, lookup_name, iter, sym)
722 	{
723 	  /* See comment related to PR gcc/debug/91507 in
724 	     block_lookup_symbol_primary.  */
725 	  if (best_symbol (sym, domain))
726 	    return sym;
727 	  /* This is a bit of a hack, but symbol_matches_domain might ignore
728 	     STRUCT vs VAR domain symbols.  So if a matching symbol is found,
729 	     make sure there is no "better" matching symbol, i.e., one with
730 	     exactly the same domain.  PR 16253.  */
731 	  if (symbol_matches_domain (sym->language (),
732 				     SYMBOL_DOMAIN (sym), domain))
733 	    other = better_symbol (other, sym, domain);
734 	}
735       return other;
736     }
737   else
738     {
739       /* Note that parameter symbols do not always show up last in the
740 	 list; this loop makes sure to take anything else other than
741 	 parameter symbols first; it only uses parameter symbols as a
742 	 last resort.  Note that this only takes up extra computation
743 	 time on a match.
744 	 It's hard to define types in the parameter list (at least in
745 	 C/C++) so we don't do the same PR 16253 hack here that is done
746 	 for the !BLOCK_FUNCTION case.  */
747 
748       struct symbol *sym_found = NULL;
749 
750       ALL_BLOCK_SYMBOLS_WITH_NAME (block, lookup_name, iter, sym)
751 	{
752 	  if (symbol_matches_domain (sym->language (),
753 				     SYMBOL_DOMAIN (sym), domain))
754 	    {
755 	      sym_found = sym;
756 	      if (!SYMBOL_IS_ARGUMENT (sym))
757 		{
758 		  break;
759 		}
760 	    }
761 	}
762       return (sym_found);	/* Will be NULL if not found.  */
763     }
764 }
765 
766 /* See block.h.  */
767 
768 struct symbol *
769 block_lookup_symbol_primary (const struct block *block, const char *name,
770 			     const domain_enum domain)
771 {
772   struct symbol *sym, *other;
773   struct mdict_iterator mdict_iter;
774 
775   lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
776 
777   /* Verify BLOCK is STATIC_BLOCK or GLOBAL_BLOCK.  */
778   gdb_assert (BLOCK_SUPERBLOCK (block) == NULL
779 	      || BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) == NULL);
780 
781   other = NULL;
782   for (sym
783 	 = mdict_iter_match_first (block->multidict, lookup_name, &mdict_iter);
784        sym != NULL;
785        sym = mdict_iter_match_next (lookup_name, &mdict_iter))
786     {
787       /* With the fix for PR gcc/debug/91507, we get for:
788 	 ...
789 	 extern char *zzz[];
790 	 char *zzz[ ] = {
791 	   "abc",
792 	   "cde"
793 	 };
794 	 ...
795 	 DWARF which will result in two entries in the symbol table, a decl
796 	 with type char *[] and a def with type char *[2].
797 
798 	 If we return the decl here, we don't get the value of zzz:
799 	 ...
800 	 $ gdb a.spec.out -batch -ex "p zzz"
801 	 $1 = 0x601030 <zzz>
802 	 ...
803 	 because we're returning the symbol without location information, and
804 	 because the fallback that uses the address from the minimal symbols
805 	 doesn't work either because the type of the decl does not specify a
806 	 size.
807 
808 	 To fix this, we prefer def over decl in best_symbol and
809 	 better_symbol.
810 
811 	 In absence of the gcc fix, both def and decl have type char *[], so
812 	 the only option to make this work is improve the fallback to use the
813 	 size of the minimal symbol.  Filed as PR exp/24989.  */
814       if (best_symbol (sym, domain))
815 	return sym;
816 
817       /* This is a bit of a hack, but symbol_matches_domain might ignore
818 	 STRUCT vs VAR domain symbols.  So if a matching symbol is found,
819 	 make sure there is no "better" matching symbol, i.e., one with
820 	 exactly the same domain.  PR 16253.  */
821       if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain))
822 	other = better_symbol (other, sym, domain);
823     }
824 
825   return other;
826 }
827 
828 /* See block.h.  */
829 
830 struct symbol *
831 block_find_symbol (const struct block *block, const char *name,
832 		   const domain_enum domain,
833 		   block_symbol_matcher_ftype *matcher, void *data)
834 {
835   struct block_iterator iter;
836   struct symbol *sym;
837 
838   lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
839 
840   /* Verify BLOCK is STATIC_BLOCK or GLOBAL_BLOCK.  */
841   gdb_assert (BLOCK_SUPERBLOCK (block) == NULL
842 	      || BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) == NULL);
843 
844   ALL_BLOCK_SYMBOLS_WITH_NAME (block, lookup_name, iter, sym)
845     {
846       /* MATCHER is deliberately called second here so that it never sees
847 	 a non-domain-matching symbol.  */
848       if (symbol_matches_domain (sym->language (), SYMBOL_DOMAIN (sym), domain)
849 	  && matcher (sym, data))
850 	return sym;
851     }
852   return NULL;
853 }
854 
855 /* See block.h.  */
856 
857 int
858 block_find_non_opaque_type (struct symbol *sym, void *data)
859 {
860   return !TYPE_IS_OPAQUE (SYMBOL_TYPE (sym));
861 }
862 
863 /* See block.h.  */
864 
865 int
866 block_find_non_opaque_type_preferred (struct symbol *sym, void *data)
867 {
868   struct symbol **best = (struct symbol **) data;
869 
870   if (!TYPE_IS_OPAQUE (SYMBOL_TYPE (sym)))
871     return 1;
872   *best = sym;
873   return 0;
874 }
875 
876 /* See block.h.  */
877 
878 struct blockranges *
879 make_blockranges (struct objfile *objfile,
880                   const std::vector<blockrange> &rangevec)
881 {
882   struct blockranges *blr;
883   size_t n = rangevec.size();
884 
885   blr = (struct blockranges *)
886     obstack_alloc (&objfile->objfile_obstack,
887                    sizeof (struct blockranges)
888 		   + (n - 1) * sizeof (struct blockrange));
889 
890   blr->nranges = n;
891   for (int i = 0; i < n; i++)
892     blr->range[i] = rangevec[i];
893   return blr;
894 }
895 
896