xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/linespec.c (revision 8b657b0747480f8989760d71343d6dd33f8d4cf9)
1 /* Parser for linespec for the GNU debugger, GDB.
2 
3    Copyright (C) 1986-2023 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 "symtab.h"
22 #include "frame.h"
23 #include "command.h"
24 #include "symfile.h"
25 #include "objfiles.h"
26 #include "source.h"
27 #include "demangle.h"
28 #include "value.h"
29 #include "completer.h"
30 #include "cp-abi.h"
31 #include "cp-support.h"
32 #include "parser-defs.h"
33 #include "block.h"
34 #include "objc-lang.h"
35 #include "linespec.h"
36 #include "language.h"
37 #include "interps.h"
38 #include "mi/mi-cmds.h"
39 #include "target.h"
40 #include "arch-utils.h"
41 #include <ctype.h>
42 #include "cli/cli-utils.h"
43 #include "filenames.h"
44 #include "ada-lang.h"
45 #include "stack.h"
46 #include "location.h"
47 #include "gdbsupport/function-view.h"
48 #include "gdbsupport/def-vector.h"
49 #include <algorithm>
50 #include "inferior.h"
51 
52 /* An enumeration of the various things a user might attempt to
53    complete for a linespec location.  */
54 
55 enum class linespec_complete_what
56 {
57   /* Nothing, no possible completion.  */
58   NOTHING,
59 
60   /* A function/method name.  Due to ambiguity between
61 
62        (gdb) b source[TAB]
63        source_file.c
64        source_function
65 
66      this can also indicate a source filename, iff we haven't seen a
67      separate source filename component, as in "b source.c:function".  */
68   FUNCTION,
69 
70   /* A label symbol.  E.g., break file.c:function:LABEL.  */
71   LABEL,
72 
73   /* An expression.  E.g., "break foo if EXPR", or "break *EXPR".  */
74   EXPRESSION,
75 
76   /* A linespec keyword ("if"/"thread"/"task"/"-force-condition").
77      E.g., "break func threa<tab>".  */
78   KEYWORD,
79 };
80 
81 /* An address entry is used to ensure that any given location is only
82    added to the result a single time.  It holds an address and the
83    program space from which the address came.  */
84 
85 struct address_entry
86 {
87   struct program_space *pspace;
88   CORE_ADDR addr;
89 };
90 
91 /* A linespec.  Elements of this structure are filled in by a parser
92    (either parse_linespec or some other function).  The structure is
93    then converted into SALs by convert_linespec_to_sals.  */
94 
95 struct linespec
96 {
97   /* An explicit location spec describing the SaLs.  */
98   explicit_location_spec explicit_loc;
99 
100   /* The list of symtabs to search to which to limit the search.
101 
102      If explicit.SOURCE_FILENAME is NULL (no user-specified filename),
103      FILE_SYMTABS should contain one single NULL member.  This will cause the
104      code to use the default symtab.  */
105   std::vector<symtab *> file_symtabs;
106 
107   /* A list of matching function symbols and minimal symbols.  Both lists
108      may be empty if no matching symbols were found.  */
109   std::vector<block_symbol> function_symbols;
110   std::vector<bound_minimal_symbol> minimal_symbols;
111 
112   /* A structure of matching label symbols and the corresponding
113      function symbol in which the label was found.  Both may be empty
114      or both must be non-empty.  */
115   struct
116   {
117     std::vector<block_symbol> label_symbols;
118     std::vector<block_symbol> function_symbols;
119   } labels;
120 };
121 
122 /* A canonical linespec represented as a symtab-related string.
123 
124    Each entry represents the "SYMTAB:SUFFIX" linespec string.
125    SYMTAB can be converted for example by symtab_to_fullname or
126    symtab_to_filename_for_display as needed.  */
127 
128 struct linespec_canonical_name
129 {
130   /* Remaining text part of the linespec string.  */
131   char *suffix;
132 
133   /* If NULL then SUFFIX is the whole linespec string.  */
134   struct symtab *symtab;
135 };
136 
137 /* An instance of this is used to keep all state while linespec
138    operates.  This instance is passed around as a 'this' pointer to
139    the various implementation methods.  */
140 
141 struct linespec_state
142 {
143   /* The language in use during linespec processing.  */
144   const struct language_defn *language;
145 
146   /* The program space as seen when the module was entered.  */
147   struct program_space *program_space;
148 
149   /* If not NULL, the search is restricted to just this program
150      space.  */
151   struct program_space *search_pspace;
152 
153   /* The default symtab to use, if no other symtab is specified.  */
154   struct symtab *default_symtab;
155 
156   /* The default line to use.  */
157   int default_line;
158 
159   /* The 'funfirstline' value that was passed in to decode_line_1 or
160      decode_line_full.  */
161   int funfirstline;
162 
163   /* Nonzero if we are running in 'list' mode; see decode_line_list.  */
164   int list_mode;
165 
166   /* The 'canonical' value passed to decode_line_full, or NULL.  */
167   struct linespec_result *canonical;
168 
169   /* Canonical strings that mirror the std::vector<symtab_and_line> result.  */
170   struct linespec_canonical_name *canonical_names;
171 
172   /* This is a set of address_entry objects which is used to prevent
173      duplicate symbols from being entered into the result.  */
174   htab_t addr_set;
175 
176   /* Are we building a linespec?  */
177   int is_linespec;
178 };
179 
180 /* This is a helper object that is used when collecting symbols into a
181    result.  */
182 
183 struct collect_info
184 {
185   /* The linespec object in use.  */
186   struct linespec_state *state;
187 
188   /* A list of symtabs to which to restrict matches.  */
189   const std::vector<symtab *> *file_symtabs;
190 
191   /* The result being accumulated.  */
192   struct
193   {
194     std::vector<block_symbol> *symbols;
195     std::vector<bound_minimal_symbol> *minimal_symbols;
196   } result;
197 
198   /* Possibly add a symbol to the results.  */
199   virtual bool add_symbol (block_symbol *bsym);
200 };
201 
202 bool
203 collect_info::add_symbol (block_symbol *bsym)
204 {
205   /* In list mode, add all matching symbols, regardless of class.
206      This allows the user to type "list a_global_variable".  */
207   if (bsym->symbol->aclass () == LOC_BLOCK || this->state->list_mode)
208     this->result.symbols->push_back (*bsym);
209 
210   /* Continue iterating.  */
211   return true;
212 }
213 
214 /* Custom collect_info for symbol_searcher.  */
215 
216 struct symbol_searcher_collect_info
217   : collect_info
218 {
219   bool add_symbol (block_symbol *bsym) override
220   {
221     /* Add everything.  */
222     this->result.symbols->push_back (*bsym);
223 
224     /* Continue iterating.  */
225     return true;
226   }
227 };
228 
229 /* Token types  */
230 
231 enum linespec_token_type
232 {
233   /* A keyword  */
234   LSTOKEN_KEYWORD = 0,
235 
236   /* A colon "separator"  */
237   LSTOKEN_COLON,
238 
239   /* A string  */
240   LSTOKEN_STRING,
241 
242   /* A number  */
243   LSTOKEN_NUMBER,
244 
245   /* A comma  */
246   LSTOKEN_COMMA,
247 
248   /* EOI (end of input)  */
249   LSTOKEN_EOI,
250 
251   /* Consumed token  */
252   LSTOKEN_CONSUMED
253 };
254 
255 /* List of keywords.  This is NULL-terminated so that it can be used
256    as enum completer.  */
257 const char * const linespec_keywords[] = { "if", "thread", "task", "-force-condition", NULL };
258 #define IF_KEYWORD_INDEX 0
259 #define FORCE_KEYWORD_INDEX 3
260 
261 /* A token of the linespec lexer  */
262 
263 struct linespec_token
264 {
265   /* The type of the token  */
266   linespec_token_type type;
267 
268   /* Data for the token  */
269   union
270   {
271     /* A string, given as a stoken  */
272     struct stoken string;
273 
274     /* A keyword  */
275     const char *keyword;
276   } data;
277 };
278 
279 #define LS_TOKEN_STOKEN(TOK) (TOK).data.string
280 #define LS_TOKEN_KEYWORD(TOK) (TOK).data.keyword
281 
282 /* An instance of the linespec parser.  */
283 
284 struct linespec_parser
285 {
286   linespec_parser (int flags, const struct language_defn *language,
287 		   struct program_space *search_pspace,
288 		   struct symtab *default_symtab,
289 		   int default_line,
290 		   struct linespec_result *canonical);
291 
292   ~linespec_parser ();
293 
294   DISABLE_COPY_AND_ASSIGN (linespec_parser);
295 
296   /* Lexer internal data  */
297   struct
298   {
299     /* Save head of input stream.  */
300     const char *saved_arg;
301 
302     /* Head of the input stream.  */
303     const char *stream;
304 #define PARSER_STREAM(P) ((P)->lexer.stream)
305 
306     /* The current token.  */
307     linespec_token current;
308   } lexer {};
309 
310   /* Is the entire linespec quote-enclosed?  */
311   int is_quote_enclosed = 0;
312 
313   /* The state of the parse.  */
314   struct linespec_state state {};
315 #define PARSER_STATE(PPTR) (&(PPTR)->state)
316 
317   /* The result of the parse.  */
318   linespec result;
319 #define PARSER_RESULT(PPTR) (&(PPTR)->result)
320 
321   /* What the parser believes the current word point should complete
322      to.  */
323   linespec_complete_what complete_what = linespec_complete_what::NOTHING;
324 
325   /* The completion word point.  The parser advances this as it skips
326      tokens.  At some point the input string will end or parsing will
327      fail, and then we attempt completion at the captured completion
328      word point, interpreting the string at completion_word as
329      COMPLETE_WHAT.  */
330   const char *completion_word = nullptr;
331 
332   /* If the current token was a quoted string, then this is the
333      quoting character (either " or ').  */
334   int completion_quote_char = 0;
335 
336   /* If the current token was a quoted string, then this points at the
337      end of the quoted string.  */
338   const char *completion_quote_end = nullptr;
339 
340   /* If parsing for completion, then this points at the completion
341      tracker.  Otherwise, this is NULL.  */
342   struct completion_tracker *completion_tracker = nullptr;
343 };
344 
345 /* A convenience macro for accessing the explicit location spec result
346    of the parser.  */
347 #define PARSER_EXPLICIT(PPTR) (&PARSER_RESULT ((PPTR))->explicit_loc)
348 
349 /* Prototypes for local functions.  */
350 
351 static void iterate_over_file_blocks
352   (struct symtab *symtab, const lookup_name_info &name,
353    domain_enum domain,
354    gdb::function_view<symbol_found_callback_ftype> callback);
355 
356 static void initialize_defaults (struct symtab **default_symtab,
357 				 int *default_line);
358 
359 CORE_ADDR linespec_expression_to_pc (const char **exp_ptr);
360 
361 static std::vector<symtab_and_line> decode_objc (struct linespec_state *self,
362 						 linespec *ls,
363 						 const char *arg);
364 
365 static std::vector<symtab *> symtabs_from_filename
366   (const char *, struct program_space *pspace);
367 
368 static std::vector<block_symbol> find_label_symbols
369   (struct linespec_state *self,
370    const std::vector<block_symbol> &function_symbols,
371    std::vector<block_symbol> *label_funcs_ret,
372    const char *name, bool completion_mode = false);
373 
374 static void find_linespec_symbols (struct linespec_state *self,
375 				   const std::vector<symtab *> &file_symtabs,
376 				   const char *name,
377 				   symbol_name_match_type name_match_type,
378 				   std::vector<block_symbol> *symbols,
379 				   std::vector<bound_minimal_symbol> *minsyms);
380 
381 static struct line_offset
382      linespec_parse_variable (struct linespec_state *self,
383 			      const char *variable);
384 
385 static int symbol_to_sal (struct symtab_and_line *result,
386 			  int funfirstline, struct symbol *sym);
387 
388 static void add_matching_symbols_to_info (const char *name,
389 					  symbol_name_match_type name_match_type,
390 					  enum search_domain search_domain,
391 					  struct collect_info *info,
392 					  struct program_space *pspace);
393 
394 static void add_all_symbol_names_from_pspace
395     (struct collect_info *info, struct program_space *pspace,
396      const std::vector<const char *> &names, enum search_domain search_domain);
397 
398 static std::vector<symtab *>
399   collect_symtabs_from_filename (const char *file,
400 				 struct program_space *pspace);
401 
402 static std::vector<symtab_and_line> decode_digits_ordinary
403   (struct linespec_state *self,
404    linespec *ls,
405    int line,
406    linetable_entry **best_entry);
407 
408 static std::vector<symtab_and_line> decode_digits_list_mode
409   (struct linespec_state *self,
410    linespec *ls,
411    struct symtab_and_line val);
412 
413 static void minsym_found (struct linespec_state *self, struct objfile *objfile,
414 			  struct minimal_symbol *msymbol,
415 			  std::vector<symtab_and_line> *result);
416 
417 static bool compare_symbols (const block_symbol &a, const block_symbol &b);
418 
419 static bool compare_msymbols (const bound_minimal_symbol &a,
420 			      const bound_minimal_symbol &b);
421 
422 /* Permitted quote characters for the parser.  This is different from the
423    completer's quote characters to allow backward compatibility with the
424    previous parser.  */
425 static const char linespec_quote_characters[] = "\"\'";
426 
427 /* Lexer functions.  */
428 
429 /* Lex a number from the input in PARSER.  This only supports
430    decimal numbers.
431 
432    Return true if input is decimal numbers.  Return false if not.  */
433 
434 static int
435 linespec_lexer_lex_number (linespec_parser *parser, linespec_token *tokenp)
436 {
437   tokenp->type = LSTOKEN_NUMBER;
438   LS_TOKEN_STOKEN (*tokenp).length = 0;
439   LS_TOKEN_STOKEN (*tokenp).ptr = PARSER_STREAM (parser);
440 
441   /* Keep any sign at the start of the stream.  */
442   if (*PARSER_STREAM (parser) == '+' || *PARSER_STREAM (parser) == '-')
443     {
444       ++LS_TOKEN_STOKEN (*tokenp).length;
445       ++(PARSER_STREAM (parser));
446     }
447 
448   while (isdigit (*PARSER_STREAM (parser)))
449     {
450       ++LS_TOKEN_STOKEN (*tokenp).length;
451       ++(PARSER_STREAM (parser));
452     }
453 
454   /* If the next character in the input buffer is not a space, comma,
455      quote, or colon, this input does not represent a number.  */
456   if (*PARSER_STREAM (parser) != '\0'
457       && !isspace (*PARSER_STREAM (parser)) && *PARSER_STREAM (parser) != ','
458       && *PARSER_STREAM (parser) != ':'
459       && !strchr (linespec_quote_characters, *PARSER_STREAM (parser)))
460     {
461       PARSER_STREAM (parser) = LS_TOKEN_STOKEN (*tokenp).ptr;
462       return 0;
463     }
464 
465   return 1;
466 }
467 
468 /* See linespec.h.  */
469 
470 const char *
471 linespec_lexer_lex_keyword (const char *p)
472 {
473   int i;
474 
475   if (p != NULL)
476     {
477       for (i = 0; linespec_keywords[i] != NULL; ++i)
478 	{
479 	  int len = strlen (linespec_keywords[i]);
480 
481 	  /* If P begins with
482 
483 	     - "thread" or "task" and the next character is
484 	     whitespace, we may have found a keyword.  It is only a
485 	     keyword if it is not followed by another keyword.
486 
487 	     - "-force-condition", the next character may be EOF
488 	     since this keyword does not take any arguments.  Otherwise,
489 	     it should be followed by a keyword.
490 
491 	     - "if", ALWAYS stop the lexer, since it is not possible to
492 	     predict what is going to appear in the condition, which can
493 	     only be parsed after SaLs have been found.  */
494 	  if (strncmp (p, linespec_keywords[i], len) == 0)
495 	    {
496 	      int j;
497 
498 	      if (i == FORCE_KEYWORD_INDEX && p[len] == '\0')
499 		return linespec_keywords[i];
500 
501 	      if (!isspace (p[len]))
502 		continue;
503 
504 	      if (i == FORCE_KEYWORD_INDEX)
505 		{
506 		  p += len;
507 		  p = skip_spaces (p);
508 		  for (j = 0; linespec_keywords[j] != NULL; ++j)
509 		    {
510 		      int nextlen = strlen (linespec_keywords[j]);
511 
512 		      if (strncmp (p, linespec_keywords[j], nextlen) == 0
513 			  && isspace (p[nextlen]))
514 			return linespec_keywords[i];
515 		    }
516 		}
517 	      else if (i != IF_KEYWORD_INDEX)
518 		{
519 		  /* We matched a "thread" or "task".  */
520 		  p += len;
521 		  p = skip_spaces (p);
522 		  for (j = 0; linespec_keywords[j] != NULL; ++j)
523 		    {
524 		      int nextlen = strlen (linespec_keywords[j]);
525 
526 		      if (strncmp (p, linespec_keywords[j], nextlen) == 0
527 			  && isspace (p[nextlen]))
528 			return NULL;
529 		    }
530 		}
531 
532 	      return linespec_keywords[i];
533 	    }
534 	}
535     }
536 
537   return NULL;
538 }
539 
540 /*  See description in linespec.h.  */
541 
542 int
543 is_ada_operator (const char *string)
544 {
545   const struct ada_opname_map *mapping;
546 
547   for (mapping = ada_opname_table;
548        mapping->encoded != NULL
549 	 && !startswith (string, mapping->decoded); ++mapping)
550     ;
551 
552   return mapping->decoded == NULL ? 0 : strlen (mapping->decoded);
553 }
554 
555 /* Find QUOTE_CHAR in STRING, accounting for the ':' terminal.  Return
556    the location of QUOTE_CHAR, or NULL if not found.  */
557 
558 static const char *
559 skip_quote_char (const char *string, char quote_char)
560 {
561   const char *p, *last;
562 
563   p = last = find_toplevel_char (string, quote_char);
564   while (p && *p != '\0' && *p != ':')
565     {
566       p = find_toplevel_char (p, quote_char);
567       if (p != NULL)
568 	last = p++;
569     }
570 
571   return last;
572 }
573 
574 /* Make a writable copy of the string given in TOKEN, trimming
575    any trailing whitespace.  */
576 
577 static gdb::unique_xmalloc_ptr<char>
578 copy_token_string (linespec_token token)
579 {
580   const char *str, *s;
581 
582   if (token.type == LSTOKEN_KEYWORD)
583     return make_unique_xstrdup (LS_TOKEN_KEYWORD (token));
584 
585   str = LS_TOKEN_STOKEN (token).ptr;
586   s = remove_trailing_whitespace (str, str + LS_TOKEN_STOKEN (token).length);
587 
588   return gdb::unique_xmalloc_ptr<char> (savestring (str, s - str));
589 }
590 
591 /* Does P represent the end of a quote-enclosed linespec?  */
592 
593 static int
594 is_closing_quote_enclosed (const char *p)
595 {
596   if (strchr (linespec_quote_characters, *p))
597     ++p;
598   p = skip_spaces ((char *) p);
599   return (*p == '\0' || linespec_lexer_lex_keyword (p));
600 }
601 
602 /* Find the end of the parameter list that starts with *INPUT.
603    This helper function assists with lexing string segments
604    which might contain valid (non-terminating) commas.  */
605 
606 static const char *
607 find_parameter_list_end (const char *input)
608 {
609   char end_char, start_char;
610   int depth;
611   const char *p;
612 
613   start_char = *input;
614   if (start_char == '(')
615     end_char = ')';
616   else if (start_char == '<')
617     end_char = '>';
618   else
619     return NULL;
620 
621   p = input;
622   depth = 0;
623   while (*p)
624     {
625       if (*p == start_char)
626 	++depth;
627       else if (*p == end_char)
628 	{
629 	  if (--depth == 0)
630 	    {
631 	      ++p;
632 	      break;
633 	    }
634 	}
635       ++p;
636     }
637 
638   return p;
639 }
640 
641 /* If the [STRING, STRING_LEN) string ends with what looks like a
642    keyword, return the keyword start offset in STRING.  Return -1
643    otherwise.  */
644 
645 static size_t
646 string_find_incomplete_keyword_at_end (const char * const *keywords,
647 				       const char *string, size_t string_len)
648 {
649   const char *end = string + string_len;
650   const char *p = end;
651 
652   while (p > string && *p != ' ')
653     --p;
654   if (p > string)
655     {
656       p++;
657       size_t len = end - p;
658       for (size_t i = 0; keywords[i] != NULL; ++i)
659 	if (strncmp (keywords[i], p, len) == 0)
660 	  return p - string;
661     }
662 
663   return -1;
664 }
665 
666 /* Lex a string from the input in PARSER.  */
667 
668 static linespec_token
669 linespec_lexer_lex_string (linespec_parser *parser)
670 {
671   linespec_token token;
672   const char *start = PARSER_STREAM (parser);
673 
674   token.type = LSTOKEN_STRING;
675 
676   /* If the input stream starts with a quote character, skip to the next
677      quote character, regardless of the content.  */
678   if (strchr (linespec_quote_characters, *PARSER_STREAM (parser)))
679     {
680       const char *end;
681       char quote_char = *PARSER_STREAM (parser);
682 
683       /* Special case: Ada operators.  */
684       if (PARSER_STATE (parser)->language->la_language == language_ada
685 	  && quote_char == '\"')
686 	{
687 	  int len = is_ada_operator (PARSER_STREAM (parser));
688 
689 	  if (len != 0)
690 	    {
691 	      /* The input is an Ada operator.  Return the quoted string
692 		 as-is.  */
693 	      LS_TOKEN_STOKEN (token).ptr = PARSER_STREAM (parser);
694 	      LS_TOKEN_STOKEN (token).length = len;
695 	      PARSER_STREAM (parser) += len;
696 	      return token;
697 	    }
698 
699 	  /* The input does not represent an Ada operator -- fall through
700 	     to normal quoted string handling.  */
701 	}
702 
703       /* Skip past the beginning quote.  */
704       ++(PARSER_STREAM (parser));
705 
706       /* Mark the start of the string.  */
707       LS_TOKEN_STOKEN (token).ptr = PARSER_STREAM (parser);
708 
709       /* Skip to the ending quote.  */
710       end = skip_quote_char (PARSER_STREAM (parser), quote_char);
711 
712       /* This helps the completer mode decide whether we have a
713 	 complete string.  */
714       parser->completion_quote_char = quote_char;
715       parser->completion_quote_end = end;
716 
717       /* Error if the input did not terminate properly, unless in
718 	 completion mode.  */
719       if (end == NULL)
720 	{
721 	  if (parser->completion_tracker == NULL)
722 	    error (_("unmatched quote"));
723 
724 	  /* In completion mode, we'll try to complete the incomplete
725 	     token.  */
726 	  token.type = LSTOKEN_STRING;
727 	  while (*PARSER_STREAM (parser) != '\0')
728 	    PARSER_STREAM (parser)++;
729 	  LS_TOKEN_STOKEN (token).length = PARSER_STREAM (parser) - 1 - start;
730 	}
731       else
732 	{
733 	  /* Skip over the ending quote and mark the length of the string.  */
734 	  PARSER_STREAM (parser) = (char *) ++end;
735 	  LS_TOKEN_STOKEN (token).length = PARSER_STREAM (parser) - 2 - start;
736 	}
737     }
738   else
739     {
740       const char *p;
741 
742       /* Otherwise, only identifier characters are permitted.
743 	 Spaces are the exception.  In general, we keep spaces,
744 	 but only if the next characters in the input do not resolve
745 	 to one of the keywords.
746 
747 	 This allows users to forgo quoting CV-qualifiers, template arguments,
748 	 and similar common language constructs.  */
749 
750       while (1)
751 	{
752 	  if (isspace (*PARSER_STREAM (parser)))
753 	    {
754 	      p = skip_spaces (PARSER_STREAM (parser));
755 	      /* When we get here we know we've found something followed by
756 		 a space (we skip over parens and templates below).
757 		 So if we find a keyword now, we know it is a keyword and not,
758 		 say, a function name.  */
759 	      if (linespec_lexer_lex_keyword (p) != NULL)
760 		{
761 		  LS_TOKEN_STOKEN (token).ptr = start;
762 		  LS_TOKEN_STOKEN (token).length
763 		    = PARSER_STREAM (parser) - start;
764 		  return token;
765 		}
766 
767 	      /* Advance past the whitespace.  */
768 	      PARSER_STREAM (parser) = p;
769 	    }
770 
771 	  /* If the next character is EOI or (single) ':', the
772 	     string is complete;  return the token.  */
773 	  if (*PARSER_STREAM (parser) == 0)
774 	    {
775 	      LS_TOKEN_STOKEN (token).ptr = start;
776 	      LS_TOKEN_STOKEN (token).length = PARSER_STREAM (parser) - start;
777 	      return token;
778 	    }
779 	  else if (PARSER_STREAM (parser)[0] == ':')
780 	    {
781 	      /* Do not tokenize the C++ scope operator. */
782 	      if (PARSER_STREAM (parser)[1] == ':')
783 		++(PARSER_STREAM (parser));
784 
785 	      /* Do not tokenize ABI tags such as "[abi:cxx11]".  */
786 	      else if (PARSER_STREAM (parser) - start > 4
787 		       && startswith (PARSER_STREAM (parser) - 4, "[abi"))
788 		{
789 		  /* Nothing.  */
790 		}
791 
792 	      /* Do not tokenify if the input length so far is one
793 		 (i.e, a single-letter drive name) and the next character
794 		 is a directory separator.  This allows Windows-style
795 		 paths to be recognized as filenames without quoting it.  */
796 	      else if ((PARSER_STREAM (parser) - start) != 1
797 		       || !IS_DIR_SEPARATOR (PARSER_STREAM (parser)[1]))
798 		{
799 		  LS_TOKEN_STOKEN (token).ptr = start;
800 		  LS_TOKEN_STOKEN (token).length
801 		    = PARSER_STREAM (parser) - start;
802 		  return token;
803 		}
804 	    }
805 	  /* Special case: permit quote-enclosed linespecs.  */
806 	  else if (parser->is_quote_enclosed
807 		   && strchr (linespec_quote_characters,
808 			      *PARSER_STREAM (parser))
809 		   && is_closing_quote_enclosed (PARSER_STREAM (parser)))
810 	    {
811 	      LS_TOKEN_STOKEN (token).ptr = start;
812 	      LS_TOKEN_STOKEN (token).length = PARSER_STREAM (parser) - start;
813 	      return token;
814 	    }
815 	  /* Because commas may terminate a linespec and appear in
816 	     the middle of valid string input, special cases for
817 	     '<' and '(' are necessary.  */
818 	  else if (*PARSER_STREAM (parser) == '<'
819 		   || *PARSER_STREAM (parser) == '(')
820 	    {
821 	      /* Don't interpret 'operator<' / 'operator<<' as a
822 		 template parameter list though.  */
823 	      if (*PARSER_STREAM (parser) == '<'
824 		  && (PARSER_STATE (parser)->language->la_language
825 		      == language_cplus)
826 		  && (PARSER_STREAM (parser) - start) >= CP_OPERATOR_LEN)
827 		{
828 		  const char *op = PARSER_STREAM (parser);
829 
830 		  while (op > start && isspace (op[-1]))
831 		    op--;
832 		  if (op - start >= CP_OPERATOR_LEN)
833 		    {
834 		      op -= CP_OPERATOR_LEN;
835 		      if (strncmp (op, CP_OPERATOR_STR, CP_OPERATOR_LEN) == 0
836 			  && (op == start
837 			      || !(isalnum (op[-1]) || op[-1] == '_')))
838 			{
839 			  /* This is an operator name.  Keep going.  */
840 			  ++(PARSER_STREAM (parser));
841 			  if (*PARSER_STREAM (parser) == '<')
842 			    ++(PARSER_STREAM (parser));
843 			  continue;
844 			}
845 		    }
846 		}
847 
848 	      const char *end = find_parameter_list_end (PARSER_STREAM (parser));
849 	      PARSER_STREAM (parser) = end;
850 
851 	      /* Don't loop around to the normal \0 case above because
852 		 we don't want to misinterpret a potential keyword at
853 		 the end of the token when the string isn't
854 		 "()<>"-balanced.  This handles "b
855 		 function(thread<tab>" in completion mode.  */
856 	      if (*end == '\0')
857 		{
858 		  LS_TOKEN_STOKEN (token).ptr = start;
859 		  LS_TOKEN_STOKEN (token).length
860 		    = PARSER_STREAM (parser) - start;
861 		  return token;
862 		}
863 	      else
864 		continue;
865 	    }
866 	  /* Commas are terminators, but not if they are part of an
867 	     operator name.  */
868 	  else if (*PARSER_STREAM (parser) == ',')
869 	    {
870 	      if ((PARSER_STATE (parser)->language->la_language
871 		   == language_cplus)
872 		  && (PARSER_STREAM (parser) - start) > CP_OPERATOR_LEN)
873 		{
874 		  const char *op = strstr (start, CP_OPERATOR_STR);
875 
876 		  if (op != NULL && is_operator_name (op))
877 		    {
878 		      /* This is an operator name.  Keep going.  */
879 		      ++(PARSER_STREAM (parser));
880 		      continue;
881 		    }
882 		}
883 
884 	      /* Comma terminates the string.  */
885 	      LS_TOKEN_STOKEN (token).ptr = start;
886 	      LS_TOKEN_STOKEN (token).length = PARSER_STREAM (parser) - start;
887 	      return token;
888 	    }
889 
890 	  /* Advance the stream.  */
891 	  gdb_assert (*(PARSER_STREAM (parser)) != '\0');
892 	  ++(PARSER_STREAM (parser));
893 	}
894     }
895 
896   return token;
897 }
898 
899 /* Lex a single linespec token from PARSER.  */
900 
901 static linespec_token
902 linespec_lexer_lex_one (linespec_parser *parser)
903 {
904   const char *keyword;
905 
906   if (parser->lexer.current.type == LSTOKEN_CONSUMED)
907     {
908       /* Skip any whitespace.  */
909       PARSER_STREAM (parser) = skip_spaces (PARSER_STREAM (parser));
910 
911       /* Check for a keyword, they end the linespec.  */
912       keyword = linespec_lexer_lex_keyword (PARSER_STREAM (parser));
913       if (keyword != NULL)
914 	{
915 	  parser->lexer.current.type = LSTOKEN_KEYWORD;
916 	  LS_TOKEN_KEYWORD (parser->lexer.current) = keyword;
917 	  /* We do not advance the stream here intentionally:
918 	     we would like lexing to stop when a keyword is seen.
919 
920 	     PARSER_STREAM (parser) +=  strlen (keyword);  */
921 
922 	  return parser->lexer.current;
923 	}
924 
925       /* Handle other tokens.  */
926       switch (*PARSER_STREAM (parser))
927 	{
928 	case 0:
929 	  parser->lexer.current.type = LSTOKEN_EOI;
930 	  break;
931 
932 	case '+': case '-':
933 	case '0': case '1': case '2': case '3': case '4':
934 	case '5': case '6': case '7': case '8': case '9':
935 	   if (!linespec_lexer_lex_number (parser, &(parser->lexer.current)))
936 	     parser->lexer.current = linespec_lexer_lex_string (parser);
937 	  break;
938 
939 	case ':':
940 	  /* If we have a scope operator, lex the input as a string.
941 	     Otherwise, return LSTOKEN_COLON.  */
942 	  if (PARSER_STREAM (parser)[1] == ':')
943 	    parser->lexer.current = linespec_lexer_lex_string (parser);
944 	  else
945 	    {
946 	      parser->lexer.current.type = LSTOKEN_COLON;
947 	      ++(PARSER_STREAM (parser));
948 	    }
949 	  break;
950 
951 	case '\'': case '\"':
952 	  /* Special case: permit quote-enclosed linespecs.  */
953 	  if (parser->is_quote_enclosed
954 	      && is_closing_quote_enclosed (PARSER_STREAM (parser)))
955 	    {
956 	      ++(PARSER_STREAM (parser));
957 	      parser->lexer.current.type = LSTOKEN_EOI;
958 	    }
959 	  else
960 	    parser->lexer.current = linespec_lexer_lex_string (parser);
961 	  break;
962 
963 	case ',':
964 	  parser->lexer.current.type = LSTOKEN_COMMA;
965 	  LS_TOKEN_STOKEN (parser->lexer.current).ptr
966 	    = PARSER_STREAM (parser);
967 	  LS_TOKEN_STOKEN (parser->lexer.current).length = 1;
968 	  ++(PARSER_STREAM (parser));
969 	  break;
970 
971 	default:
972 	  /* If the input is not a number, it must be a string.
973 	     [Keywords were already considered above.]  */
974 	  parser->lexer.current = linespec_lexer_lex_string (parser);
975 	  break;
976 	}
977     }
978 
979   return parser->lexer.current;
980 }
981 
982 /* Consume the current token and return the next token in PARSER's
983    input stream.  Also advance the completion word for completion
984    mode.  */
985 
986 static linespec_token
987 linespec_lexer_consume_token (linespec_parser *parser)
988 {
989   gdb_assert (parser->lexer.current.type != LSTOKEN_EOI);
990 
991   bool advance_word = (parser->lexer.current.type != LSTOKEN_STRING
992 		       || *PARSER_STREAM (parser) != '\0');
993 
994   /* If we're moving past a string to some other token, it must be the
995      quote was terminated.  */
996   if (parser->completion_quote_char)
997     {
998       gdb_assert (parser->lexer.current.type == LSTOKEN_STRING);
999 
1000       /* If the string was the last (non-EOI) token, we're past the
1001 	 quote, but remember that for later.  */
1002       if (*PARSER_STREAM (parser) != '\0')
1003 	{
1004 	  parser->completion_quote_char = '\0';
1005 	  parser->completion_quote_end = NULL;;
1006 	}
1007     }
1008 
1009   parser->lexer.current.type = LSTOKEN_CONSUMED;
1010   linespec_lexer_lex_one (parser);
1011 
1012   if (parser->lexer.current.type == LSTOKEN_STRING)
1013     {
1014       /* Advance the completion word past a potential initial
1015 	 quote-char.  */
1016       parser->completion_word = LS_TOKEN_STOKEN (parser->lexer.current).ptr;
1017     }
1018   else if (advance_word)
1019     {
1020       /* Advance the completion word past any whitespace.  */
1021       parser->completion_word = PARSER_STREAM (parser);
1022     }
1023 
1024   return parser->lexer.current;
1025 }
1026 
1027 /* Return the next token without consuming the current token.  */
1028 
1029 static linespec_token
1030 linespec_lexer_peek_token (linespec_parser *parser)
1031 {
1032   linespec_token next;
1033   const char *saved_stream = PARSER_STREAM (parser);
1034   linespec_token saved_token = parser->lexer.current;
1035   int saved_completion_quote_char = parser->completion_quote_char;
1036   const char *saved_completion_quote_end = parser->completion_quote_end;
1037   const char *saved_completion_word = parser->completion_word;
1038 
1039   next = linespec_lexer_consume_token (parser);
1040   PARSER_STREAM (parser) = saved_stream;
1041   parser->lexer.current = saved_token;
1042   parser->completion_quote_char = saved_completion_quote_char;
1043   parser->completion_quote_end = saved_completion_quote_end;
1044   parser->completion_word = saved_completion_word;
1045   return next;
1046 }
1047 
1048 /* Helper functions.  */
1049 
1050 /* Add SAL to SALS, and also update SELF->CANONICAL_NAMES to reflect
1051    the new sal, if needed.  If not NULL, SYMNAME is the name of the
1052    symbol to use when constructing the new canonical name.
1053 
1054    If LITERAL_CANONICAL is non-zero, SYMNAME will be used as the
1055    canonical name for the SAL.  */
1056 
1057 static void
1058 add_sal_to_sals (struct linespec_state *self,
1059 		 std::vector<symtab_and_line> *sals,
1060 		 struct symtab_and_line *sal,
1061 		 const char *symname, int literal_canonical)
1062 {
1063   sals->push_back (*sal);
1064 
1065   if (self->canonical)
1066     {
1067       struct linespec_canonical_name *canonical;
1068 
1069       self->canonical_names = XRESIZEVEC (struct linespec_canonical_name,
1070 					  self->canonical_names,
1071 					  sals->size ());
1072       canonical = &self->canonical_names[sals->size () - 1];
1073       if (!literal_canonical && sal->symtab)
1074 	{
1075 	  symtab_to_fullname (sal->symtab);
1076 
1077 	  /* Note that the filter doesn't have to be a valid linespec
1078 	     input.  We only apply the ":LINE" treatment to Ada for
1079 	     the time being.  */
1080 	  if (symname != NULL && sal->line != 0
1081 	      && self->language->la_language == language_ada)
1082 	    canonical->suffix = xstrprintf ("%s:%d", symname,
1083 					    sal->line).release ();
1084 	  else if (symname != NULL)
1085 	    canonical->suffix = xstrdup (symname);
1086 	  else
1087 	    canonical->suffix = xstrprintf ("%d", sal->line).release ();
1088 	  canonical->symtab = sal->symtab;
1089 	}
1090       else
1091 	{
1092 	  if (symname != NULL)
1093 	    canonical->suffix = xstrdup (symname);
1094 	  else
1095 	    canonical->suffix = xstrdup ("<unknown>");
1096 	  canonical->symtab = NULL;
1097 	}
1098     }
1099 }
1100 
1101 /* A hash function for address_entry.  */
1102 
1103 static hashval_t
1104 hash_address_entry (const void *p)
1105 {
1106   const struct address_entry *aep = (const struct address_entry *) p;
1107   hashval_t hash;
1108 
1109   hash = iterative_hash_object (aep->pspace, 0);
1110   return iterative_hash_object (aep->addr, hash);
1111 }
1112 
1113 /* An equality function for address_entry.  */
1114 
1115 static int
1116 eq_address_entry (const void *a, const void *b)
1117 {
1118   const struct address_entry *aea = (const struct address_entry *) a;
1119   const struct address_entry *aeb = (const struct address_entry *) b;
1120 
1121   return aea->pspace == aeb->pspace && aea->addr == aeb->addr;
1122 }
1123 
1124 /* Check whether the address, represented by PSPACE and ADDR, is
1125    already in the set.  If so, return 0.  Otherwise, add it and return
1126    1.  */
1127 
1128 static int
1129 maybe_add_address (htab_t set, struct program_space *pspace, CORE_ADDR addr)
1130 {
1131   struct address_entry e, *p;
1132   void **slot;
1133 
1134   e.pspace = pspace;
1135   e.addr = addr;
1136   slot = htab_find_slot (set, &e, INSERT);
1137   if (*slot)
1138     return 0;
1139 
1140   p = XNEW (struct address_entry);
1141   memcpy (p, &e, sizeof (struct address_entry));
1142   *slot = p;
1143 
1144   return 1;
1145 }
1146 
1147 /* A helper that walks over all matching symtabs in all objfiles and
1148    calls CALLBACK for each symbol matching NAME.  If SEARCH_PSPACE is
1149    not NULL, then the search is restricted to just that program
1150    space.  If INCLUDE_INLINE is true then symbols representing
1151    inlined instances of functions will be included in the result.  */
1152 
1153 static void
1154 iterate_over_all_matching_symtabs
1155   (struct linespec_state *state,
1156    const lookup_name_info &lookup_name,
1157    const domain_enum name_domain,
1158    enum search_domain search_domain,
1159    struct program_space *search_pspace, bool include_inline,
1160    gdb::function_view<symbol_found_callback_ftype> callback)
1161 {
1162   for (struct program_space *pspace : program_spaces)
1163     {
1164       if (search_pspace != NULL && search_pspace != pspace)
1165 	continue;
1166       if (pspace->executing_startup)
1167 	continue;
1168 
1169       set_current_program_space (pspace);
1170 
1171       for (objfile *objfile : current_program_space->objfiles ())
1172 	{
1173 	  objfile->expand_symtabs_matching (NULL, &lookup_name, NULL, NULL,
1174 					    (SEARCH_GLOBAL_BLOCK
1175 					     | SEARCH_STATIC_BLOCK),
1176 					    UNDEF_DOMAIN,
1177 					    search_domain);
1178 
1179 	  for (compunit_symtab *cu : objfile->compunits ())
1180 	    {
1181 	      struct symtab *symtab = cu->primary_filetab ();
1182 
1183 	      iterate_over_file_blocks (symtab, lookup_name, name_domain,
1184 					callback);
1185 
1186 	      if (include_inline)
1187 		{
1188 		  const struct block *block;
1189 		  int i;
1190 		  const blockvector *bv = symtab->compunit ()->blockvector ();
1191 
1192 		  for (i = FIRST_LOCAL_BLOCK; i < bv->num_blocks (); i++)
1193 		    {
1194 		      block = bv->block (i);
1195 		      state->language->iterate_over_symbols
1196 			(block, lookup_name, name_domain,
1197 			 [&] (block_symbol *bsym)
1198 			 {
1199 			   /* Restrict calls to CALLBACK to symbols
1200 			      representing inline symbols only.  */
1201 			   if (bsym->symbol->is_inlined ())
1202 			     return callback (bsym);
1203 			   return true;
1204 			 });
1205 		    }
1206 		}
1207 	    }
1208 	}
1209     }
1210 }
1211 
1212 /* Returns the block to be used for symbol searches from
1213    the current location.  */
1214 
1215 static const struct block *
1216 get_current_search_block (void)
1217 {
1218   /* get_selected_block can change the current language when there is
1219      no selected frame yet.  */
1220   scoped_restore_current_language save_language;
1221   return get_selected_block (0);
1222 }
1223 
1224 /* Iterate over static and global blocks.  */
1225 
1226 static void
1227 iterate_over_file_blocks
1228   (struct symtab *symtab, const lookup_name_info &name,
1229    domain_enum domain, gdb::function_view<symbol_found_callback_ftype> callback)
1230 {
1231   const struct block *block;
1232 
1233   for (block = symtab->compunit ()->blockvector ()->static_block ();
1234        block != NULL;
1235        block = block->superblock ())
1236     current_language->iterate_over_symbols (block, name, domain, callback);
1237 }
1238 
1239 /* A helper for find_method.  This finds all methods in type T of
1240    language T_LANG which match NAME.  It adds matching symbol names to
1241    RESULT_NAMES, and adds T's direct superclasses to SUPERCLASSES.  */
1242 
1243 static void
1244 find_methods (struct type *t, enum language t_lang, const char *name,
1245 	      std::vector<const char *> *result_names,
1246 	      std::vector<struct type *> *superclasses)
1247 {
1248   int ibase;
1249   const char *class_name = t->name ();
1250 
1251   /* Ignore this class if it doesn't have a name.  This is ugly, but
1252      unless we figure out how to get the physname without the name of
1253      the class, then the loop can't do any good.  */
1254   if (class_name)
1255     {
1256       int method_counter;
1257       lookup_name_info lookup_name (name, symbol_name_match_type::FULL);
1258       symbol_name_matcher_ftype *symbol_name_compare
1259 	= language_def (t_lang)->get_symbol_name_matcher (lookup_name);
1260 
1261       t = check_typedef (t);
1262 
1263       /* Loop over each method name.  At this level, all overloads of a name
1264 	 are counted as a single name.  There is an inner loop which loops over
1265 	 each overload.  */
1266 
1267       for (method_counter = TYPE_NFN_FIELDS (t) - 1;
1268 	   method_counter >= 0;
1269 	   --method_counter)
1270 	{
1271 	  const char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
1272 
1273 	  if (symbol_name_compare (method_name, lookup_name, NULL))
1274 	    {
1275 	      int field_counter;
1276 
1277 	      for (field_counter = (TYPE_FN_FIELDLIST_LENGTH (t, method_counter)
1278 				    - 1);
1279 		   field_counter >= 0;
1280 		   --field_counter)
1281 		{
1282 		  struct fn_field *f;
1283 		  const char *phys_name;
1284 
1285 		  f = TYPE_FN_FIELDLIST1 (t, method_counter);
1286 		  if (TYPE_FN_FIELD_STUB (f, field_counter))
1287 		    continue;
1288 		  phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
1289 		  result_names->push_back (phys_name);
1290 		}
1291 	    }
1292 	}
1293     }
1294 
1295   for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
1296     superclasses->push_back (TYPE_BASECLASS (t, ibase));
1297 }
1298 
1299 /* The string equivalent of find_toplevel_char.  Returns a pointer
1300    to the location of NEEDLE in HAYSTACK, ignoring any occurrences
1301    inside "()" and "<>".  Returns NULL if NEEDLE was not found.  */
1302 
1303 static const char *
1304 find_toplevel_string (const char *haystack, const char *needle)
1305 {
1306   const char *s = haystack;
1307 
1308   do
1309     {
1310       s = find_toplevel_char (s, *needle);
1311 
1312       if (s != NULL)
1313 	{
1314 	  /* Found first char in HAYSTACK;  check rest of string.  */
1315 	  if (startswith (s, needle))
1316 	    return s;
1317 
1318 	  /* Didn't find it; loop over HAYSTACK, looking for the next
1319 	     instance of the first character of NEEDLE.  */
1320 	  ++s;
1321 	}
1322     }
1323   while (s != NULL && *s != '\0');
1324 
1325   /* NEEDLE was not found in HAYSTACK.  */
1326   return NULL;
1327 }
1328 
1329 /* Convert CANONICAL to its string representation using
1330    symtab_to_fullname for SYMTAB.  */
1331 
1332 static std::string
1333 canonical_to_fullform (const struct linespec_canonical_name *canonical)
1334 {
1335   if (canonical->symtab == NULL)
1336     return canonical->suffix;
1337   else
1338     return string_printf ("%s:%s", symtab_to_fullname (canonical->symtab),
1339 			  canonical->suffix);
1340 }
1341 
1342 /* Given FILTERS, a list of canonical names, filter the sals in RESULT
1343    and store the result in SELF->CANONICAL.  */
1344 
1345 static void
1346 filter_results (struct linespec_state *self,
1347 		std::vector<symtab_and_line> *result,
1348 		const std::vector<const char *> &filters)
1349 {
1350   for (const char *name : filters)
1351     {
1352       linespec_sals lsal;
1353 
1354       for (size_t j = 0; j < result->size (); ++j)
1355 	{
1356 	  const struct linespec_canonical_name *canonical;
1357 
1358 	  canonical = &self->canonical_names[j];
1359 	  std::string fullform = canonical_to_fullform (canonical);
1360 
1361 	  if (name == fullform)
1362 	    lsal.sals.push_back ((*result)[j]);
1363 	}
1364 
1365       if (!lsal.sals.empty ())
1366 	{
1367 	  lsal.canonical = xstrdup (name);
1368 	  self->canonical->lsals.push_back (std::move (lsal));
1369 	}
1370     }
1371 
1372   self->canonical->pre_expanded = 0;
1373 }
1374 
1375 /* Store RESULT into SELF->CANONICAL.  */
1376 
1377 static void
1378 convert_results_to_lsals (struct linespec_state *self,
1379 			  std::vector<symtab_and_line> *result)
1380 {
1381   struct linespec_sals lsal;
1382 
1383   lsal.canonical = NULL;
1384   lsal.sals = std::move (*result);
1385   self->canonical->lsals.push_back (std::move (lsal));
1386 }
1387 
1388 /* A structure that contains two string representations of a struct
1389    linespec_canonical_name:
1390      - one where the symtab's fullname is used;
1391      - one where the filename followed the "set filename-display"
1392        setting.  */
1393 
1394 struct decode_line_2_item
1395 {
1396   decode_line_2_item (std::string &&fullform_, std::string &&displayform_,
1397 		      bool selected_)
1398     : fullform (std::move (fullform_)),
1399       displayform (std::move (displayform_)),
1400       selected (selected_)
1401   {
1402   }
1403 
1404   /* The form using symtab_to_fullname.  */
1405   std::string fullform;
1406 
1407   /* The form using symtab_to_filename_for_display.  */
1408   std::string displayform;
1409 
1410   /* Field is initialized to zero and it is set to one if the user
1411      requested breakpoint for this entry.  */
1412   unsigned int selected : 1;
1413 };
1414 
1415 /* Helper for std::sort to sort decode_line_2_item entries by
1416    DISPLAYFORM and secondarily by FULLFORM.  */
1417 
1418 static bool
1419 decode_line_2_compare_items (const decode_line_2_item &a,
1420 			     const decode_line_2_item &b)
1421 {
1422   if (a.displayform != b.displayform)
1423     return a.displayform < b.displayform;
1424   return a.fullform < b.fullform;
1425 }
1426 
1427 /* Handle multiple results in RESULT depending on SELECT_MODE.  This
1428    will either return normally, throw an exception on multiple
1429    results, or present a menu to the user.  On return, the SALS vector
1430    in SELF->CANONICAL is set up properly.  */
1431 
1432 static void
1433 decode_line_2 (struct linespec_state *self,
1434 	       std::vector<symtab_and_line> *result,
1435 	       const char *select_mode)
1436 {
1437   const char *args;
1438   const char *prompt;
1439   int i;
1440   std::vector<const char *> filters;
1441   std::vector<struct decode_line_2_item> items;
1442 
1443   gdb_assert (select_mode != multiple_symbols_all);
1444   gdb_assert (self->canonical != NULL);
1445   gdb_assert (!result->empty ());
1446 
1447   /* Prepare ITEMS array.  */
1448   for (i = 0; i < result->size (); ++i)
1449     {
1450       const struct linespec_canonical_name *canonical;
1451       std::string displayform;
1452 
1453       canonical = &self->canonical_names[i];
1454       gdb_assert (canonical->suffix != NULL);
1455 
1456       std::string fullform = canonical_to_fullform (canonical);
1457 
1458       if (canonical->symtab == NULL)
1459 	displayform = canonical->suffix;
1460       else
1461 	{
1462 	  const char *fn_for_display;
1463 
1464 	  fn_for_display = symtab_to_filename_for_display (canonical->symtab);
1465 	  displayform = string_printf ("%s:%s", fn_for_display,
1466 				       canonical->suffix);
1467 	}
1468 
1469       items.emplace_back (std::move (fullform), std::move (displayform),
1470 			  false);
1471     }
1472 
1473   /* Sort the list of method names.  */
1474   std::sort (items.begin (), items.end (), decode_line_2_compare_items);
1475 
1476   /* Remove entries with the same FULLFORM.  */
1477   items.erase (std::unique (items.begin (), items.end (),
1478 			    [] (const struct decode_line_2_item &a,
1479 				const struct decode_line_2_item &b)
1480 			      {
1481 				return a.fullform == b.fullform;
1482 			      }),
1483 	       items.end ());
1484 
1485   if (select_mode == multiple_symbols_cancel && items.size () > 1)
1486     error (_("canceled because the command is ambiguous\n"
1487 	     "See set/show multiple-symbol."));
1488 
1489   if (select_mode == multiple_symbols_all || items.size () == 1)
1490     {
1491       convert_results_to_lsals (self, result);
1492       return;
1493     }
1494 
1495   printf_unfiltered (_("[0] cancel\n[1] all\n"));
1496   for (i = 0; i < items.size (); i++)
1497     printf_unfiltered ("[%d] %s\n", i + 2, items[i].displayform.c_str ());
1498 
1499   prompt = getenv ("PS2");
1500   if (prompt == NULL)
1501     {
1502       prompt = "> ";
1503     }
1504 
1505   std::string buffer;
1506   args = command_line_input (buffer, prompt, "overload-choice");
1507 
1508   if (args == 0 || *args == 0)
1509     error_no_arg (_("one or more choice numbers"));
1510 
1511   number_or_range_parser parser (args);
1512   while (!parser.finished ())
1513     {
1514       int num = parser.get_number ();
1515 
1516       if (num == 0)
1517 	error (_("canceled"));
1518       else if (num == 1)
1519 	{
1520 	  /* We intentionally make this result in a single breakpoint,
1521 	     contrary to what older versions of gdb did.  The
1522 	     rationale is that this lets a user get the
1523 	     multiple_symbols_all behavior even with the 'ask'
1524 	     setting; and he can get separate breakpoints by entering
1525 	     "2-57" at the query.  */
1526 	  convert_results_to_lsals (self, result);
1527 	  return;
1528 	}
1529 
1530       num -= 2;
1531       if (num >= items.size ())
1532 	printf_unfiltered (_("No choice number %d.\n"), num);
1533       else
1534 	{
1535 	  struct decode_line_2_item *item = &items[num];
1536 
1537 	  if (!item->selected)
1538 	    {
1539 	      filters.push_back (item->fullform.c_str ());
1540 	      item->selected = 1;
1541 	    }
1542 	  else
1543 	    {
1544 	      printf_unfiltered (_("duplicate request for %d ignored.\n"),
1545 				 num + 2);
1546 	    }
1547 	}
1548     }
1549 
1550   filter_results (self, result, filters);
1551 }
1552 
1553 
1554 
1555 /* The parser of linespec itself.  */
1556 
1557 /* Throw an appropriate error when SYMBOL is not found (optionally in
1558    FILENAME).  */
1559 
1560 static void ATTRIBUTE_NORETURN
1561 symbol_not_found_error (const char *symbol, const char *filename)
1562 {
1563   if (symbol == NULL)
1564     symbol = "";
1565 
1566   if (!have_full_symbols ()
1567       && !have_partial_symbols ()
1568       && !have_minimal_symbols ())
1569     throw_error (NOT_FOUND_ERROR,
1570 		 _("No symbol table is loaded.  Use the \"file\" command."));
1571 
1572   /* If SYMBOL starts with '$', the user attempted to either lookup
1573      a function/variable in his code starting with '$' or an internal
1574      variable of that name.  Since we do not know which, be concise and
1575      explain both possibilities.  */
1576   if (*symbol == '$')
1577     {
1578       if (filename)
1579 	throw_error (NOT_FOUND_ERROR,
1580 		     _("Undefined convenience variable or function \"%s\" "
1581 		       "not defined in \"%s\"."), symbol, filename);
1582       else
1583 	throw_error (NOT_FOUND_ERROR,
1584 		     _("Undefined convenience variable or function \"%s\" "
1585 		       "not defined."), symbol);
1586     }
1587   else
1588     {
1589       if (filename)
1590 	throw_error (NOT_FOUND_ERROR,
1591 		     _("Function \"%s\" not defined in \"%s\"."),
1592 		     symbol, filename);
1593       else
1594 	throw_error (NOT_FOUND_ERROR,
1595 		     _("Function \"%s\" not defined."), symbol);
1596     }
1597 }
1598 
1599 /* Throw an appropriate error when an unexpected token is encountered
1600    in the input.  */
1601 
1602 static void ATTRIBUTE_NORETURN
1603 unexpected_linespec_error (linespec_parser *parser)
1604 {
1605   linespec_token token;
1606   static const char * token_type_strings[]
1607     = {"keyword", "colon", "string", "number", "comma", "end of input"};
1608 
1609   /* Get the token that generated the error.  */
1610   token = linespec_lexer_lex_one (parser);
1611 
1612   /* Finally, throw the error.  */
1613   if (token.type == LSTOKEN_STRING || token.type == LSTOKEN_NUMBER
1614       || token.type == LSTOKEN_KEYWORD)
1615     {
1616       gdb::unique_xmalloc_ptr<char> string = copy_token_string (token);
1617       throw_error (GENERIC_ERROR,
1618 		   _("malformed linespec error: unexpected %s, \"%s\""),
1619 		   token_type_strings[token.type], string.get ());
1620     }
1621   else
1622     throw_error (GENERIC_ERROR,
1623 		 _("malformed linespec error: unexpected %s"),
1624 		 token_type_strings[token.type]);
1625 }
1626 
1627 /* Throw an undefined label error.  */
1628 
1629 static void ATTRIBUTE_NORETURN
1630 undefined_label_error (const char *function, const char *label)
1631 {
1632   if (function != NULL)
1633     throw_error (NOT_FOUND_ERROR,
1634 		_("No label \"%s\" defined in function \"%s\"."),
1635 		label, function);
1636   else
1637     throw_error (NOT_FOUND_ERROR,
1638 		_("No label \"%s\" defined in current function."),
1639 		label);
1640 }
1641 
1642 /* Throw a source file not found error.  */
1643 
1644 static void ATTRIBUTE_NORETURN
1645 source_file_not_found_error (const char *name)
1646 {
1647   throw_error (NOT_FOUND_ERROR, _("No source file named %s."), name);
1648 }
1649 
1650 /* Unless at EIO, save the current stream position as completion word
1651    point, and consume the next token.  */
1652 
1653 static linespec_token
1654 save_stream_and_consume_token (linespec_parser *parser)
1655 {
1656   if (linespec_lexer_peek_token (parser).type != LSTOKEN_EOI)
1657     parser->completion_word = PARSER_STREAM (parser);
1658   return linespec_lexer_consume_token (parser);
1659 }
1660 
1661 /* See description in linespec.h.  */
1662 
1663 struct line_offset
1664 linespec_parse_line_offset (const char *string)
1665 {
1666   const char *start = string;
1667   struct line_offset line_offset;
1668 
1669   if (*string == '+')
1670     {
1671       line_offset.sign = LINE_OFFSET_PLUS;
1672       ++string;
1673     }
1674   else if (*string == '-')
1675     {
1676       line_offset.sign = LINE_OFFSET_MINUS;
1677       ++string;
1678     }
1679   else
1680     line_offset.sign = LINE_OFFSET_NONE;
1681 
1682   if (*string != '\0' && !isdigit (*string))
1683     error (_("malformed line offset: \"%s\""), start);
1684 
1685   /* Right now, we only allow base 10 for offsets.  */
1686   line_offset.offset = atoi (string);
1687   return line_offset;
1688 }
1689 
1690 /* In completion mode, if the user is still typing the number, there's
1691    no possible completion to offer.  But if there's already input past
1692    the number, setup to expect NEXT.  */
1693 
1694 static void
1695 set_completion_after_number (linespec_parser *parser,
1696 			     linespec_complete_what next)
1697 {
1698   if (*PARSER_STREAM (parser) == ' ')
1699     {
1700       parser->completion_word = skip_spaces (PARSER_STREAM (parser) + 1);
1701       parser->complete_what = next;
1702     }
1703   else
1704     {
1705       parser->completion_word = PARSER_STREAM (parser);
1706       parser->complete_what = linespec_complete_what::NOTHING;
1707     }
1708 }
1709 
1710 /* Parse the basic_spec in PARSER's input.  */
1711 
1712 static void
1713 linespec_parse_basic (linespec_parser *parser)
1714 {
1715   gdb::unique_xmalloc_ptr<char> name;
1716   linespec_token token;
1717 
1718   /* Get the next token.  */
1719   token = linespec_lexer_lex_one (parser);
1720 
1721   /* If it is EOI or KEYWORD, issue an error.  */
1722   if (token.type == LSTOKEN_KEYWORD)
1723     {
1724       parser->complete_what = linespec_complete_what::NOTHING;
1725       unexpected_linespec_error (parser);
1726     }
1727   else if (token.type == LSTOKEN_EOI)
1728     {
1729       unexpected_linespec_error (parser);
1730     }
1731   /* If it is a LSTOKEN_NUMBER, we have an offset.  */
1732   else if (token.type == LSTOKEN_NUMBER)
1733     {
1734       set_completion_after_number (parser, linespec_complete_what::KEYWORD);
1735 
1736       /* Record the line offset and get the next token.  */
1737       name = copy_token_string (token);
1738       PARSER_EXPLICIT (parser)->line_offset
1739 	= linespec_parse_line_offset (name.get ());
1740 
1741       /* Get the next token.  */
1742       token = linespec_lexer_consume_token (parser);
1743 
1744       /* If the next token is a comma, stop parsing and return.  */
1745       if (token.type == LSTOKEN_COMMA)
1746 	{
1747 	  parser->complete_what = linespec_complete_what::NOTHING;
1748 	  return;
1749 	}
1750 
1751       /* If the next token is anything but EOI or KEYWORD, issue
1752 	 an error.  */
1753       if (token.type != LSTOKEN_KEYWORD && token.type != LSTOKEN_EOI)
1754 	unexpected_linespec_error (parser);
1755     }
1756 
1757   if (token.type == LSTOKEN_KEYWORD || token.type == LSTOKEN_EOI)
1758     return;
1759 
1760   /* Next token must be LSTOKEN_STRING.  */
1761   if (token.type != LSTOKEN_STRING)
1762     {
1763       parser->complete_what = linespec_complete_what::NOTHING;
1764       unexpected_linespec_error (parser);
1765     }
1766 
1767   /* The current token will contain the name of a function, method,
1768      or label.  */
1769   name = copy_token_string (token);
1770 
1771   if (parser->completion_tracker != NULL)
1772     {
1773       /* If the function name ends with a ":", then this may be an
1774 	 incomplete "::" scope operator instead of a label separator.
1775 	 E.g.,
1776 	   "b klass:<tab>"
1777 	 which should expand to:
1778 	   "b klass::method()"
1779 
1780 	 Do a tentative completion assuming the later.  If we find
1781 	 completions, advance the stream past the colon token and make
1782 	 it part of the function name/token.  */
1783 
1784       if (!parser->completion_quote_char
1785 	  && strcmp (PARSER_STREAM (parser), ":") == 0)
1786 	{
1787 	  completion_tracker tmp_tracker;
1788 	  const char *source_filename
1789 	    = PARSER_EXPLICIT (parser)->source_filename;
1790 	  symbol_name_match_type match_type
1791 	    = PARSER_EXPLICIT (parser)->func_name_match_type;
1792 
1793 	  linespec_complete_function (tmp_tracker,
1794 				      parser->completion_word,
1795 				      match_type,
1796 				      source_filename);
1797 
1798 	  if (tmp_tracker.have_completions ())
1799 	    {
1800 	      PARSER_STREAM (parser)++;
1801 	      LS_TOKEN_STOKEN (token).length++;
1802 
1803 	      name.reset (savestring (parser->completion_word,
1804 				      (PARSER_STREAM (parser)
1805 				       - parser->completion_word)));
1806 	    }
1807 	}
1808 
1809       PARSER_EXPLICIT (parser)->function_name = name.release ();
1810     }
1811   else
1812     {
1813       std::vector<block_symbol> symbols;
1814       std::vector<bound_minimal_symbol> minimal_symbols;
1815 
1816       /* Try looking it up as a function/method.  */
1817       find_linespec_symbols (PARSER_STATE (parser),
1818 			     PARSER_RESULT (parser)->file_symtabs, name.get (),
1819 			     PARSER_EXPLICIT (parser)->func_name_match_type,
1820 			     &symbols, &minimal_symbols);
1821 
1822       if (!symbols.empty () || !minimal_symbols.empty ())
1823 	{
1824 	  PARSER_RESULT (parser)->function_symbols = std::move (symbols);
1825 	  PARSER_RESULT (parser)->minimal_symbols = std::move (minimal_symbols);
1826 	  PARSER_EXPLICIT (parser)->function_name = name.release ();
1827 	}
1828       else
1829 	{
1830 	  /* NAME was not a function or a method.  So it must be a label
1831 	     name or user specified variable like "break foo.c:$zippo".  */
1832 	  std::vector<block_symbol> labels
1833 	    = find_label_symbols (PARSER_STATE (parser), {}, &symbols,
1834 				  name.get ());
1835 
1836 	  if (!labels.empty ())
1837 	    {
1838 	      PARSER_RESULT (parser)->labels.label_symbols = std::move (labels);
1839 	      PARSER_RESULT (parser)->labels.function_symbols
1840 		  = std::move (symbols);
1841 	      PARSER_EXPLICIT (parser)->label_name = name.release ();
1842 	    }
1843 	  else if (token.type == LSTOKEN_STRING
1844 		   && *LS_TOKEN_STOKEN (token).ptr == '$')
1845 	    {
1846 	      /* User specified a convenience variable or history value.  */
1847 	      PARSER_EXPLICIT (parser)->line_offset
1848 		= linespec_parse_variable (PARSER_STATE (parser), name.get ());
1849 
1850 	      if (PARSER_EXPLICIT (parser)->line_offset.sign == LINE_OFFSET_UNKNOWN)
1851 		{
1852 		  /* The user-specified variable was not valid.  Do not
1853 		     throw an error here.  parse_linespec will do it for us.  */
1854 		  PARSER_EXPLICIT (parser)->function_name = name.release ();
1855 		  return;
1856 		}
1857 	    }
1858 	  else
1859 	    {
1860 	      /* The name is also not a label.  Abort parsing.  Do not throw
1861 		 an error here.  parse_linespec will do it for us.  */
1862 
1863 	      /* Save a copy of the name we were trying to lookup.  */
1864 	      PARSER_EXPLICIT (parser)->function_name = name.release ();
1865 	      return;
1866 	    }
1867 	}
1868     }
1869 
1870   int previous_qc = parser->completion_quote_char;
1871 
1872   /* Get the next token.  */
1873   token = linespec_lexer_consume_token (parser);
1874 
1875   if (token.type == LSTOKEN_EOI)
1876     {
1877       if (previous_qc && !parser->completion_quote_char)
1878 	parser->complete_what = linespec_complete_what::KEYWORD;
1879     }
1880   else if (token.type == LSTOKEN_COLON)
1881     {
1882       /* User specified a label or a lineno.  */
1883       token = linespec_lexer_consume_token (parser);
1884 
1885       if (token.type == LSTOKEN_NUMBER)
1886 	{
1887 	  /* User specified an offset.  Record the line offset and
1888 	     get the next token.  */
1889 	  set_completion_after_number (parser, linespec_complete_what::KEYWORD);
1890 
1891 	  name = copy_token_string (token);
1892 	  PARSER_EXPLICIT (parser)->line_offset
1893 	    = linespec_parse_line_offset (name.get ());
1894 
1895 	  /* Get the next token.  */
1896 	  token = linespec_lexer_consume_token (parser);
1897 	}
1898       else if (token.type == LSTOKEN_EOI && parser->completion_tracker != NULL)
1899 	{
1900 	  parser->complete_what = linespec_complete_what::LABEL;
1901 	}
1902       else if (token.type == LSTOKEN_STRING)
1903 	{
1904 	  parser->complete_what = linespec_complete_what::LABEL;
1905 
1906 	  /* If we have text after the label separated by whitespace
1907 	     (e.g., "b func():lab i<tab>"), don't consider it part of
1908 	     the label.  In completion mode that should complete to
1909 	     "if", in normal mode, the 'i' should be treated as
1910 	     garbage.  */
1911 	  if (parser->completion_quote_char == '\0')
1912 	    {
1913 	      const char *ptr = LS_TOKEN_STOKEN (token).ptr;
1914 	      for (size_t i = 0; i < LS_TOKEN_STOKEN (token).length; i++)
1915 		{
1916 		  if (ptr[i] == ' ')
1917 		    {
1918 		      LS_TOKEN_STOKEN (token).length = i;
1919 		      PARSER_STREAM (parser) = skip_spaces (ptr + i + 1);
1920 		      break;
1921 		    }
1922 		}
1923 	    }
1924 
1925 	  if (parser->completion_tracker != NULL)
1926 	    {
1927 	      if (PARSER_STREAM (parser)[-1] == ' ')
1928 		{
1929 		  parser->completion_word = PARSER_STREAM (parser);
1930 		  parser->complete_what = linespec_complete_what::KEYWORD;
1931 		}
1932 	    }
1933 	  else
1934 	    {
1935 	      std::vector<block_symbol> symbols;
1936 
1937 	      /* Grab a copy of the label's name and look it up.  */
1938 	      name = copy_token_string (token);
1939 	      std::vector<block_symbol> labels
1940 		= find_label_symbols (PARSER_STATE (parser),
1941 				      PARSER_RESULT (parser)->function_symbols,
1942 				      &symbols, name.get ());
1943 
1944 	      if (!labels.empty ())
1945 		{
1946 		  PARSER_RESULT (parser)->labels.label_symbols
1947 		    = std::move (labels);
1948 		  PARSER_RESULT (parser)->labels.function_symbols
1949 		    = std::move (symbols);
1950 		  PARSER_EXPLICIT (parser)->label_name = name.release ();
1951 		}
1952 	      else
1953 		{
1954 		  /* We don't know what it was, but it isn't a label.  */
1955 		  undefined_label_error
1956 		    (PARSER_EXPLICIT (parser)->function_name, name.get ());
1957 		}
1958 
1959 	    }
1960 
1961 	  /* Check for a line offset.  */
1962 	  token = save_stream_and_consume_token (parser);
1963 	  if (token.type == LSTOKEN_COLON)
1964 	    {
1965 	      /* Get the next token.  */
1966 	      token = linespec_lexer_consume_token (parser);
1967 
1968 	      /* It must be a line offset.  */
1969 	      if (token.type != LSTOKEN_NUMBER)
1970 		unexpected_linespec_error (parser);
1971 
1972 	      /* Record the line offset and get the next token.  */
1973 	      name = copy_token_string (token);
1974 
1975 	      PARSER_EXPLICIT (parser)->line_offset
1976 		= linespec_parse_line_offset (name.get ());
1977 
1978 	      /* Get the next token.  */
1979 	      token = linespec_lexer_consume_token (parser);
1980 	    }
1981 	}
1982       else
1983 	{
1984 	  /* Trailing ':' in the input. Issue an error.  */
1985 	  unexpected_linespec_error (parser);
1986 	}
1987     }
1988 }
1989 
1990 /* Canonicalize the linespec contained in LS.  The result is saved into
1991    STATE->canonical.  This function handles both linespec and explicit
1992    locations.  */
1993 
1994 static void
1995 canonicalize_linespec (struct linespec_state *state, const linespec *ls)
1996 {
1997   /* If canonicalization was not requested, no need to do anything.  */
1998   if (!state->canonical)
1999     return;
2000 
2001   /* Save everything as an explicit location.  */
2002   state->canonical->locspec = ls->explicit_loc.clone ();
2003   explicit_location_spec *explicit_loc
2004     = as_explicit_location_spec (state->canonical->locspec.get ());
2005 
2006   if (explicit_loc->label_name != NULL)
2007     {
2008       state->canonical->special_display = 1;
2009 
2010       if (explicit_loc->function_name == NULL)
2011 	{
2012 	  /* No function was specified, so add the symbol name.  */
2013 	  gdb_assert (ls->labels.function_symbols.size () == 1);
2014 	  block_symbol s = ls->labels.function_symbols.front ();
2015 	  explicit_loc->function_name = xstrdup (s.symbol->natural_name ());
2016 	}
2017     }
2018 
2019   /* If this location originally came from a linespec, save a string
2020      representation of it for display and saving to file.  */
2021   if (state->is_linespec)
2022     explicit_loc->set_string (explicit_loc->to_linespec ());
2023 }
2024 
2025 /* Given a line offset in LS, construct the relevant SALs.  */
2026 
2027 static std::vector<symtab_and_line>
2028 create_sals_line_offset (struct linespec_state *self,
2029 			 linespec *ls)
2030 {
2031   int use_default = 0;
2032 
2033   /* This is where we need to make sure we have good defaults.
2034      We must guarantee that this section of code is never executed
2035      when we are called with just a function name, since
2036      set_default_source_symtab_and_line uses
2037      select_source_symtab that calls us with such an argument.  */
2038 
2039   if (ls->file_symtabs.size () == 1
2040       && ls->file_symtabs.front () == nullptr)
2041     {
2042       set_current_program_space (self->program_space);
2043 
2044       /* Make sure we have at least a default source line.  */
2045       set_default_source_symtab_and_line ();
2046       initialize_defaults (&self->default_symtab, &self->default_line);
2047       ls->file_symtabs
2048 	= collect_symtabs_from_filename (self->default_symtab->filename,
2049 					 self->search_pspace);
2050       use_default = 1;
2051     }
2052 
2053   symtab_and_line val;
2054   val.line = ls->explicit_loc.line_offset.offset;
2055   switch (ls->explicit_loc.line_offset.sign)
2056     {
2057     case LINE_OFFSET_PLUS:
2058       if (ls->explicit_loc.line_offset.offset == 0)
2059 	val.line = 5;
2060       if (use_default)
2061 	val.line = self->default_line + val.line;
2062       break;
2063 
2064     case LINE_OFFSET_MINUS:
2065       if (ls->explicit_loc.line_offset.offset == 0)
2066 	val.line = 15;
2067       if (use_default)
2068 	val.line = self->default_line - val.line;
2069       else
2070 	val.line = -val.line;
2071       break;
2072 
2073     case LINE_OFFSET_NONE:
2074       break;			/* No need to adjust val.line.  */
2075     }
2076 
2077   std::vector<symtab_and_line> values;
2078   if (self->list_mode)
2079     values = decode_digits_list_mode (self, ls, val);
2080   else
2081     {
2082       struct linetable_entry *best_entry = NULL;
2083       int i, j;
2084 
2085       std::vector<symtab_and_line> intermediate_results
2086 	= decode_digits_ordinary (self, ls, val.line, &best_entry);
2087       if (intermediate_results.empty () && best_entry != NULL)
2088 	intermediate_results = decode_digits_ordinary (self, ls,
2089 						       best_entry->line,
2090 						       &best_entry);
2091 
2092       /* For optimized code, the compiler can scatter one source line
2093 	 across disjoint ranges of PC values, even when no duplicate
2094 	 functions or inline functions are involved.  For example,
2095 	 'for (;;)' inside a non-template, non-inline, and non-ctor-or-dtor
2096 	 function can result in two PC ranges.  In this case, we don't
2097 	 want to set a breakpoint on the first PC of each range.  To filter
2098 	 such cases, we use containing blocks -- for each PC found
2099 	 above, we see if there are other PCs that are in the same
2100 	 block.  If yes, the other PCs are filtered out.  */
2101 
2102       gdb::def_vector<int> filter (intermediate_results.size ());
2103       gdb::def_vector<const block *> blocks (intermediate_results.size ());
2104 
2105       for (i = 0; i < intermediate_results.size (); ++i)
2106 	{
2107 	  set_current_program_space (intermediate_results[i].pspace);
2108 
2109 	  filter[i] = 1;
2110 	  blocks[i] = block_for_pc_sect (intermediate_results[i].pc,
2111 					 intermediate_results[i].section);
2112 	}
2113 
2114       for (i = 0; i < intermediate_results.size (); ++i)
2115 	{
2116 	  if (blocks[i] != NULL)
2117 	    for (j = i + 1; j < intermediate_results.size (); ++j)
2118 	      {
2119 		if (blocks[j] == blocks[i])
2120 		  {
2121 		    filter[j] = 0;
2122 		    break;
2123 		  }
2124 	      }
2125 	}
2126 
2127       for (i = 0; i < intermediate_results.size (); ++i)
2128 	if (filter[i])
2129 	  {
2130 	    struct symbol *sym = (blocks[i]
2131 				  ? block_containing_function (blocks[i])
2132 				  : NULL);
2133 
2134 	    if (self->funfirstline)
2135 	      skip_prologue_sal (&intermediate_results[i]);
2136 	    intermediate_results[i].symbol = sym;
2137 	    add_sal_to_sals (self, &values, &intermediate_results[i],
2138 			     sym ? sym->natural_name () : NULL, 0);
2139 	  }
2140     }
2141 
2142   if (values.empty ())
2143     {
2144       if (ls->explicit_loc.source_filename)
2145 	throw_error (NOT_FOUND_ERROR, _("No line %d in file \"%s\"."),
2146 		     val.line, ls->explicit_loc.source_filename);
2147       else
2148 	throw_error (NOT_FOUND_ERROR, _("No line %d in the current file."),
2149 		     val.line);
2150     }
2151 
2152   return values;
2153 }
2154 
2155 /* Convert the given ADDRESS into SaLs.  */
2156 
2157 static std::vector<symtab_and_line>
2158 convert_address_location_to_sals (struct linespec_state *self,
2159 				  CORE_ADDR address)
2160 {
2161   symtab_and_line sal = find_pc_line (address, 0);
2162   sal.pc = address;
2163   sal.section = find_pc_overlay (address);
2164   sal.explicit_pc = 1;
2165   sal.symbol = find_pc_sect_containing_function (sal.pc, sal.section);
2166 
2167   std::vector<symtab_and_line> sals;
2168   add_sal_to_sals (self, &sals, &sal, core_addr_to_string (address), 1);
2169 
2170   return sals;
2171 }
2172 
2173 /* Create and return SALs from the linespec LS.  */
2174 
2175 static std::vector<symtab_and_line>
2176 convert_linespec_to_sals (struct linespec_state *state, linespec *ls)
2177 {
2178   std::vector<symtab_and_line> sals;
2179 
2180   if (!ls->labels.label_symbols.empty ())
2181     {
2182       /* We have just a bunch of functions/methods or labels.  */
2183       struct symtab_and_line sal;
2184 
2185       for (const auto &sym : ls->labels.label_symbols)
2186 	{
2187 	  struct program_space *pspace
2188 	    = sym.symbol->symtab ()->compunit ()->objfile ()->pspace;
2189 
2190 	  if (symbol_to_sal (&sal, state->funfirstline, sym.symbol)
2191 	      && maybe_add_address (state->addr_set, pspace, sal.pc))
2192 	    add_sal_to_sals (state, &sals, &sal,
2193 			     sym.symbol->natural_name (), 0);
2194 	}
2195     }
2196   else if (!ls->function_symbols.empty () || !ls->minimal_symbols.empty ())
2197     {
2198       /* We have just a bunch of functions and/or methods.  */
2199       if (!ls->function_symbols.empty ())
2200 	{
2201 	  /* Sort symbols so that symbols with the same program space are next
2202 	     to each other.  */
2203 	  std::sort (ls->function_symbols.begin (),
2204 		     ls->function_symbols.end (),
2205 		     compare_symbols);
2206 
2207 	  for (const auto &sym : ls->function_symbols)
2208 	    {
2209 	      program_space *pspace
2210 		= sym.symbol->symtab ()->compunit ()->objfile ()->pspace;
2211 	      set_current_program_space (pspace);
2212 
2213 	      /* Don't skip to the first line of the function if we
2214 		 had found an ifunc minimal symbol for this function,
2215 		 because that means that this function is an ifunc
2216 		 resolver with the same name as the ifunc itself.  */
2217 	      bool found_ifunc = false;
2218 
2219 	      if (state->funfirstline
2220 		   && !ls->minimal_symbols.empty ()
2221 		   && sym.symbol->aclass () == LOC_BLOCK)
2222 		{
2223 		  const CORE_ADDR addr
2224 		    = sym.symbol->value_block ()->entry_pc ();
2225 
2226 		  for (const auto &elem : ls->minimal_symbols)
2227 		    {
2228 		      if (elem.minsym->type () == mst_text_gnu_ifunc
2229 			  || elem.minsym->type () == mst_data_gnu_ifunc)
2230 			{
2231 			  CORE_ADDR msym_addr = elem.value_address ();
2232 			  if (elem.minsym->type () == mst_data_gnu_ifunc)
2233 			    {
2234 			      struct gdbarch *gdbarch
2235 				= elem.objfile->arch ();
2236 			      msym_addr
2237 				= (gdbarch_convert_from_func_ptr_addr
2238 				   (gdbarch,
2239 				    msym_addr,
2240 				    current_inferior ()->top_target ()));
2241 			    }
2242 
2243 			  if (msym_addr == addr)
2244 			    {
2245 			      found_ifunc = true;
2246 			      break;
2247 			    }
2248 			}
2249 		    }
2250 		}
2251 
2252 	      if (!found_ifunc)
2253 		{
2254 		  symtab_and_line sal;
2255 		  if (symbol_to_sal (&sal, state->funfirstline, sym.symbol)
2256 		      && maybe_add_address (state->addr_set, pspace, sal.pc))
2257 		    add_sal_to_sals (state, &sals, &sal,
2258 				     sym.symbol->natural_name (), 0);
2259 		}
2260 	    }
2261 	}
2262 
2263       if (!ls->minimal_symbols.empty ())
2264 	{
2265 	  /* Sort minimal symbols by program space, too  */
2266 	  std::sort (ls->minimal_symbols.begin (),
2267 		     ls->minimal_symbols.end (),
2268 		     compare_msymbols);
2269 
2270 	  for (const auto &elem : ls->minimal_symbols)
2271 	    {
2272 	      program_space *pspace = elem.objfile->pspace;
2273 	      set_current_program_space (pspace);
2274 	      minsym_found (state, elem.objfile, elem.minsym, &sals);
2275 	    }
2276 	}
2277     }
2278   else if (ls->explicit_loc.line_offset.sign != LINE_OFFSET_UNKNOWN)
2279     {
2280       /* Only an offset was specified.  */
2281 	sals = create_sals_line_offset (state, ls);
2282 
2283 	/* Make sure we have a filename for canonicalization.  */
2284 	if (ls->explicit_loc.source_filename == NULL)
2285 	  {
2286 	    const char *fullname = symtab_to_fullname (state->default_symtab);
2287 
2288 	    /* It may be more appropriate to keep DEFAULT_SYMTAB in its symtab
2289 	       form so that displaying SOURCE_FILENAME can follow the current
2290 	       FILENAME_DISPLAY_STRING setting.  But as it is used only rarely
2291 	       it has been kept for code simplicity only in absolute form.  */
2292 	    ls->explicit_loc.source_filename = xstrdup (fullname);
2293 	  }
2294     }
2295   else
2296     {
2297       /* We haven't found any results...  */
2298       return sals;
2299     }
2300 
2301   canonicalize_linespec (state, ls);
2302 
2303   if (!sals.empty () && state->canonical != NULL)
2304     state->canonical->pre_expanded = 1;
2305 
2306   return sals;
2307 }
2308 
2309 /* Build RESULT from the explicit location spec components
2310    SOURCE_FILENAME, FUNCTION_NAME, LABEL_NAME and LINE_OFFSET.  */
2311 
2312 static void
2313 convert_explicit_location_spec_to_linespec
2314   (struct linespec_state *self,
2315    linespec *result,
2316    const char *source_filename,
2317    const char *function_name,
2318    symbol_name_match_type fname_match_type,
2319    const char *label_name,
2320    struct line_offset line_offset)
2321 {
2322   std::vector<bound_minimal_symbol> minimal_symbols;
2323 
2324   result->explicit_loc.func_name_match_type = fname_match_type;
2325 
2326   if (source_filename != NULL)
2327     {
2328       try
2329 	{
2330 	  result->file_symtabs
2331 	    = symtabs_from_filename (source_filename, self->search_pspace);
2332 	}
2333       catch (const gdb_exception_error &except)
2334 	{
2335 	  source_file_not_found_error (source_filename);
2336 	}
2337       result->explicit_loc.source_filename = xstrdup (source_filename);
2338     }
2339   else
2340     {
2341       /* A NULL entry means to use the default symtab.  */
2342       result->file_symtabs.push_back (nullptr);
2343     }
2344 
2345   if (function_name != NULL)
2346     {
2347       std::vector<block_symbol> symbols;
2348 
2349       find_linespec_symbols (self, result->file_symtabs,
2350 			     function_name, fname_match_type,
2351 			     &symbols, &minimal_symbols);
2352 
2353       if (symbols.empty () && minimal_symbols.empty ())
2354 	symbol_not_found_error (function_name,
2355 				result->explicit_loc.source_filename);
2356 
2357       result->explicit_loc.function_name = xstrdup (function_name);
2358       result->function_symbols = std::move (symbols);
2359       result->minimal_symbols = std::move (minimal_symbols);
2360     }
2361 
2362   if (label_name != NULL)
2363     {
2364       std::vector<block_symbol> symbols;
2365       std::vector<block_symbol> labels
2366 	= find_label_symbols (self, result->function_symbols,
2367 			      &symbols, label_name);
2368 
2369       if (labels.empty ())
2370 	undefined_label_error (result->explicit_loc.function_name,
2371 			       label_name);
2372 
2373       result->explicit_loc.label_name = xstrdup (label_name);
2374       result->labels.label_symbols = labels;
2375       result->labels.function_symbols = std::move (symbols);
2376     }
2377 
2378   if (line_offset.sign != LINE_OFFSET_UNKNOWN)
2379     result->explicit_loc.line_offset = line_offset;
2380 }
2381 
2382 /* Convert the explicit location EXPLICIT_LOC into SaLs.  */
2383 
2384 static std::vector<symtab_and_line>
2385 convert_explicit_location_spec_to_sals
2386   (struct linespec_state *self,
2387    linespec *result,
2388    const explicit_location_spec *explicit_spec)
2389 {
2390   convert_explicit_location_spec_to_linespec (self, result,
2391 					      explicit_spec->source_filename,
2392 					      explicit_spec->function_name,
2393 					      explicit_spec->func_name_match_type,
2394 					      explicit_spec->label_name,
2395 					      explicit_spec->line_offset);
2396   return convert_linespec_to_sals (self, result);
2397 }
2398 
2399 /* Parse a string that specifies a linespec.
2400 
2401    The basic grammar of linespecs:
2402 
2403    linespec -> var_spec | basic_spec
2404    var_spec -> '$' (STRING | NUMBER)
2405 
2406    basic_spec -> file_offset_spec | function_spec | label_spec
2407    file_offset_spec -> opt_file_spec offset_spec
2408    function_spec -> opt_file_spec function_name_spec opt_label_spec
2409    label_spec -> label_name_spec
2410 
2411    opt_file_spec -> "" | file_name_spec ':'
2412    opt_label_spec -> "" | ':' label_name_spec
2413 
2414    file_name_spec -> STRING
2415    function_name_spec -> STRING
2416    label_name_spec -> STRING
2417    function_name_spec -> STRING
2418    offset_spec -> NUMBER
2419 	       -> '+' NUMBER
2420 	       -> '-' NUMBER
2421 
2422    This may all be followed by several keywords such as "if EXPR",
2423    which we ignore.
2424 
2425    A comma will terminate parsing.
2426 
2427    The function may be an undebuggable function found in minimal symbol table.
2428 
2429    If the argument FUNFIRSTLINE is nonzero, we want the first line
2430    of real code inside a function when a function is specified, and it is
2431    not OK to specify a variable or type to get its line number.
2432 
2433    DEFAULT_SYMTAB specifies the file to use if none is specified.
2434    It defaults to current_source_symtab.
2435    DEFAULT_LINE specifies the line number to use for relative
2436    line numbers (that start with signs).  Defaults to current_source_line.
2437    If CANONICAL is non-NULL, store an array of strings containing the canonical
2438    line specs there if necessary.  Currently overloaded member functions and
2439    line numbers or static functions without a filename yield a canonical
2440    line spec.  The array and the line spec strings are allocated on the heap,
2441    it is the callers responsibility to free them.
2442 
2443    Note that it is possible to return zero for the symtab
2444    if no file is validly specified.  Callers must check that.
2445    Also, the line number returned may be invalid.  */
2446 
2447 /* Parse the linespec in ARG, which must not be nullptr.  MATCH_TYPE
2448    indicates how function names should be matched.  */
2449 
2450 static std::vector<symtab_and_line>
2451 parse_linespec (linespec_parser *parser, const char *arg,
2452 		symbol_name_match_type match_type)
2453 {
2454   gdb_assert (arg != nullptr);
2455 
2456   struct gdb_exception file_exception;
2457 
2458   /* A special case to start.  It has become quite popular for
2459      IDEs to work around bugs in the previous parser by quoting
2460      the entire linespec, so we attempt to deal with this nicely.  */
2461   parser->is_quote_enclosed = 0;
2462   if (parser->completion_tracker == NULL
2463       && !is_ada_operator (arg)
2464       && *arg != '\0'
2465       && strchr (linespec_quote_characters, *arg) != NULL)
2466     {
2467       const char *end = skip_quote_char (arg + 1, *arg);
2468       if (end != NULL && is_closing_quote_enclosed (end))
2469 	{
2470 	  /* Here's the special case.  Skip ARG past the initial
2471 	     quote.  */
2472 	  ++arg;
2473 	  parser->is_quote_enclosed = 1;
2474 	}
2475     }
2476 
2477   parser->lexer.saved_arg = arg;
2478   parser->lexer.stream = arg;
2479   parser->completion_word = arg;
2480   parser->complete_what = linespec_complete_what::FUNCTION;
2481   PARSER_EXPLICIT (parser)->func_name_match_type = match_type;
2482 
2483   /* Initialize the default symtab and line offset.  */
2484   initialize_defaults (&PARSER_STATE (parser)->default_symtab,
2485 		       &PARSER_STATE (parser)->default_line);
2486 
2487   /* Objective-C shortcut.  */
2488   if (parser->completion_tracker == NULL)
2489     {
2490       std::vector<symtab_and_line> values
2491 	= decode_objc (PARSER_STATE (parser), PARSER_RESULT (parser), arg);
2492       if (!values.empty ())
2493 	return values;
2494     }
2495   else
2496     {
2497       /* "-"/"+" is either an objc selector, or a number.  There's
2498 	 nothing to complete the latter to, so just let the caller
2499 	 complete on functions, which finds objc selectors, if there's
2500 	 any.  */
2501       if ((arg[0] == '-' || arg[0] == '+') && arg[1] == '\0')
2502 	return {};
2503     }
2504 
2505   /* Start parsing.  */
2506 
2507   /* Get the first token.  */
2508   linespec_token token = linespec_lexer_consume_token (parser);
2509 
2510   /* It must be either LSTOKEN_STRING or LSTOKEN_NUMBER.  */
2511   if (token.type == LSTOKEN_STRING && *LS_TOKEN_STOKEN (token).ptr == '$')
2512     {
2513       /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
2514       if (parser->completion_tracker == NULL)
2515 	PARSER_RESULT (parser)->file_symtabs.push_back (nullptr);
2516 
2517       /* User specified a convenience variable or history value.  */
2518       gdb::unique_xmalloc_ptr<char> var = copy_token_string (token);
2519       PARSER_EXPLICIT (parser)->line_offset
2520 	= linespec_parse_variable (PARSER_STATE (parser), var.get ());
2521 
2522       /* If a line_offset wasn't found (VAR is the name of a user
2523 	 variable/function), then skip to normal symbol processing.  */
2524       if (PARSER_EXPLICIT (parser)->line_offset.sign != LINE_OFFSET_UNKNOWN)
2525 	{
2526 	  /* Consume this token.  */
2527 	  linespec_lexer_consume_token (parser);
2528 
2529 	  goto convert_to_sals;
2530 	}
2531     }
2532   else if (token.type == LSTOKEN_EOI && parser->completion_tracker != NULL)
2533     {
2534       /* Let the default linespec_complete_what::FUNCTION kick in.  */
2535       unexpected_linespec_error (parser);
2536     }
2537   else if (token.type != LSTOKEN_STRING && token.type != LSTOKEN_NUMBER)
2538     {
2539       parser->complete_what = linespec_complete_what::NOTHING;
2540       unexpected_linespec_error (parser);
2541     }
2542 
2543   /* Shortcut: If the next token is not LSTOKEN_COLON, we know that
2544      this token cannot represent a filename.  */
2545   token = linespec_lexer_peek_token (parser);
2546 
2547   if (token.type == LSTOKEN_COLON)
2548     {
2549       /* Get the current token again and extract the filename.  */
2550       token = linespec_lexer_lex_one (parser);
2551       gdb::unique_xmalloc_ptr<char> user_filename = copy_token_string (token);
2552 
2553       /* Check if the input is a filename.  */
2554       try
2555 	{
2556 	  PARSER_RESULT (parser)->file_symtabs
2557 	    = symtabs_from_filename (user_filename.get (),
2558 				     PARSER_STATE (parser)->search_pspace);
2559 	}
2560       catch (gdb_exception_error &ex)
2561 	{
2562 	  file_exception = std::move (ex);
2563 	}
2564 
2565       if (file_exception.reason >= 0)
2566 	{
2567 	  /* Symtabs were found for the file.  Record the filename.  */
2568 	  PARSER_EXPLICIT (parser)->source_filename = user_filename.release ();
2569 
2570 	  /* Get the next token.  */
2571 	  token = linespec_lexer_consume_token (parser);
2572 
2573 	  /* This is LSTOKEN_COLON; consume it.  */
2574 	  linespec_lexer_consume_token (parser);
2575 	}
2576       else
2577 	{
2578 	  /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
2579 	  PARSER_RESULT (parser)->file_symtabs.push_back (nullptr);
2580 	}
2581     }
2582   /* If the next token is not EOI, KEYWORD, or COMMA, issue an error.  */
2583   else if (parser->completion_tracker == NULL
2584 	   && (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD
2585 	       && token.type != LSTOKEN_COMMA))
2586     {
2587       /* TOKEN is the _next_ token, not the one currently in the parser.
2588 	 Consuming the token will give the correct error message.  */
2589       linespec_lexer_consume_token (parser);
2590       unexpected_linespec_error (parser);
2591     }
2592   else
2593     {
2594       /* A NULL entry means to use GLOBAL_DEFAULT_SYMTAB.  */
2595       PARSER_RESULT (parser)->file_symtabs.push_back (nullptr);
2596     }
2597 
2598   /* Parse the rest of the linespec.  */
2599   linespec_parse_basic (parser);
2600 
2601   if (parser->completion_tracker == NULL
2602       && PARSER_RESULT (parser)->function_symbols.empty ()
2603       && PARSER_RESULT (parser)->labels.label_symbols.empty ()
2604       && PARSER_EXPLICIT (parser)->line_offset.sign == LINE_OFFSET_UNKNOWN
2605       && PARSER_RESULT (parser)->minimal_symbols.empty ())
2606     {
2607       /* The linespec didn't parse.  Re-throw the file exception if
2608 	 there was one.  */
2609       if (file_exception.reason < 0)
2610 	throw_exception (std::move (file_exception));
2611 
2612       /* Otherwise, the symbol is not found.  */
2613       symbol_not_found_error (PARSER_EXPLICIT (parser)->function_name,
2614 			      PARSER_EXPLICIT (parser)->source_filename);
2615     }
2616 
2617  convert_to_sals:
2618 
2619   /* Get the last token and record how much of the input was parsed,
2620      if necessary.  */
2621   token = linespec_lexer_lex_one (parser);
2622   if (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD)
2623     unexpected_linespec_error (parser);
2624   else if (token.type == LSTOKEN_KEYWORD)
2625     {
2626       /* Setup the completion word past the keyword.  Lexing never
2627 	 advances past a keyword automatically, so skip it
2628 	 manually.  */
2629       parser->completion_word
2630 	= skip_spaces (skip_to_space (PARSER_STREAM (parser)));
2631       parser->complete_what = linespec_complete_what::EXPRESSION;
2632     }
2633 
2634   /* Convert the data in PARSER_RESULT to SALs.  */
2635   if (parser->completion_tracker == NULL)
2636     return convert_linespec_to_sals (PARSER_STATE (parser),
2637 				     PARSER_RESULT (parser));
2638 
2639   return {};
2640 }
2641 
2642 
2643 /* A constructor for linespec_state.  */
2644 
2645 static void
2646 linespec_state_constructor (struct linespec_state *self,
2647 			    int flags, const struct language_defn *language,
2648 			    struct program_space *search_pspace,
2649 			    struct symtab *default_symtab,
2650 			    int default_line,
2651 			    struct linespec_result *canonical)
2652 {
2653   memset (self, 0, sizeof (*self));
2654   self->language = language;
2655   self->funfirstline = (flags & DECODE_LINE_FUNFIRSTLINE) ? 1 : 0;
2656   self->list_mode = (flags & DECODE_LINE_LIST_MODE) ? 1 : 0;
2657   self->search_pspace = search_pspace;
2658   self->default_symtab = default_symtab;
2659   self->default_line = default_line;
2660   self->canonical = canonical;
2661   self->program_space = current_program_space;
2662   self->addr_set = htab_create_alloc (10, hash_address_entry, eq_address_entry,
2663 				      xfree, xcalloc, xfree);
2664   self->is_linespec = 0;
2665 }
2666 
2667 /* Initialize a new linespec parser.  */
2668 
2669 linespec_parser::linespec_parser (int flags,
2670 				  const struct language_defn *language,
2671 				  struct program_space *search_pspace,
2672 				  struct symtab *default_symtab,
2673 				  int default_line,
2674 				  struct linespec_result *canonical)
2675 {
2676   lexer.current.type = LSTOKEN_CONSUMED;
2677   PARSER_EXPLICIT (this)->func_name_match_type
2678     = symbol_name_match_type::WILD;
2679   PARSER_EXPLICIT (this)->line_offset.sign = LINE_OFFSET_UNKNOWN;
2680   linespec_state_constructor (PARSER_STATE (this), flags, language,
2681 			      search_pspace,
2682 			      default_symtab, default_line, canonical);
2683 }
2684 
2685 /* A destructor for linespec_state.  */
2686 
2687 static void
2688 linespec_state_destructor (struct linespec_state *self)
2689 {
2690   htab_delete (self->addr_set);
2691   xfree (self->canonical_names);
2692 }
2693 
2694 /* Delete a linespec parser.  */
2695 
2696 linespec_parser::~linespec_parser ()
2697 {
2698   linespec_state_destructor (PARSER_STATE (this));
2699 }
2700 
2701 /* See description in linespec.h.  */
2702 
2703 void
2704 linespec_lex_to_end (const char **stringp)
2705 {
2706   linespec_token token;
2707   const char *orig;
2708 
2709   if (stringp == NULL || *stringp == NULL)
2710     return;
2711 
2712   linespec_parser parser (0, current_language, NULL, NULL, 0, NULL);
2713   parser.lexer.saved_arg = *stringp;
2714   PARSER_STREAM (&parser) = orig = *stringp;
2715 
2716   do
2717     {
2718       /* Stop before any comma tokens;  we need it to keep it
2719 	 as the next token in the string.  */
2720       token = linespec_lexer_peek_token (&parser);
2721       if (token.type == LSTOKEN_COMMA)
2722 	break;
2723       token = linespec_lexer_consume_token (&parser);
2724     }
2725   while (token.type != LSTOKEN_EOI && token.type != LSTOKEN_KEYWORD);
2726 
2727   *stringp += PARSER_STREAM (&parser) - orig;
2728 }
2729 
2730 /* See linespec.h.  */
2731 
2732 void
2733 linespec_complete_function (completion_tracker &tracker,
2734 			    const char *function,
2735 			    symbol_name_match_type func_match_type,
2736 			    const char *source_filename)
2737 {
2738   complete_symbol_mode mode = complete_symbol_mode::LINESPEC;
2739 
2740   if (source_filename != NULL)
2741     {
2742       collect_file_symbol_completion_matches (tracker, mode, func_match_type,
2743 					      function, function, source_filename);
2744     }
2745   else
2746     {
2747       collect_symbol_completion_matches (tracker, mode, func_match_type,
2748 					 function, function);
2749 
2750     }
2751 }
2752 
2753 /* Helper for complete_linespec to simplify it.  SOURCE_FILENAME is
2754    only meaningful if COMPONENT is FUNCTION.  */
2755 
2756 static void
2757 complete_linespec_component (linespec_parser *parser,
2758 			     completion_tracker &tracker,
2759 			     const char *text,
2760 			     linespec_complete_what component,
2761 			     const char *source_filename)
2762 {
2763   if (component == linespec_complete_what::KEYWORD)
2764     {
2765       complete_on_enum (tracker, linespec_keywords, text, text);
2766     }
2767   else if (component == linespec_complete_what::EXPRESSION)
2768     {
2769       const char *word
2770 	= advance_to_expression_complete_word_point (tracker, text);
2771       complete_expression (tracker, text, word);
2772     }
2773   else if (component == linespec_complete_what::FUNCTION)
2774     {
2775       completion_list fn_list;
2776 
2777       symbol_name_match_type match_type
2778 	= PARSER_EXPLICIT (parser)->func_name_match_type;
2779       linespec_complete_function (tracker, text, match_type, source_filename);
2780       if (source_filename == NULL)
2781 	{
2782 	  /* Haven't seen a source component, like in "b
2783 	     file.c:function[TAB]".  Maybe this wasn't a function, but
2784 	     a filename instead, like "b file.[TAB]".  */
2785 	  fn_list = complete_source_filenames (text);
2786 	}
2787 
2788       /* If we only have a single filename completion, append a ':' for
2789 	 the user, since that's the only thing that can usefully follow
2790 	 the filename.  */
2791       if (fn_list.size () == 1 && !tracker.have_completions ())
2792 	{
2793 	  char *fn = fn_list[0].release ();
2794 
2795 	  /* If we also need to append a quote char, it needs to be
2796 	     appended before the ':'.  Append it now, and make ':' the
2797 	     new "quote" char.  */
2798 	  if (tracker.quote_char ())
2799 	    {
2800 	      char quote_char_str[2] = { (char) tracker.quote_char () };
2801 
2802 	      fn = reconcat (fn, fn, quote_char_str, (char *) NULL);
2803 	      tracker.set_quote_char (':');
2804 	    }
2805 	  else
2806 	    fn = reconcat (fn, fn, ":", (char *) NULL);
2807 	  fn_list[0].reset (fn);
2808 
2809 	  /* Tell readline to skip appending a space.  */
2810 	  tracker.set_suppress_append_ws (true);
2811 	}
2812       tracker.add_completions (std::move (fn_list));
2813     }
2814 }
2815 
2816 /* Helper for linespec_complete_label.  Find labels that match
2817    LABEL_NAME in the function symbols listed in the PARSER, and add
2818    them to the tracker.  */
2819 
2820 static void
2821 complete_label (completion_tracker &tracker,
2822 		linespec_parser *parser,
2823 		const char *label_name)
2824 {
2825   std::vector<block_symbol> label_function_symbols;
2826   std::vector<block_symbol> labels
2827     = find_label_symbols (PARSER_STATE (parser),
2828 			  PARSER_RESULT (parser)->function_symbols,
2829 			  &label_function_symbols,
2830 			  label_name, true);
2831 
2832   for (const auto &label : labels)
2833     {
2834       char *match = xstrdup (label.symbol->search_name ());
2835       tracker.add_completion (gdb::unique_xmalloc_ptr<char> (match));
2836     }
2837 }
2838 
2839 /* See linespec.h.  */
2840 
2841 void
2842 linespec_complete_label (completion_tracker &tracker,
2843 			 const struct language_defn *language,
2844 			 const char *source_filename,
2845 			 const char *function_name,
2846 			 symbol_name_match_type func_name_match_type,
2847 			 const char *label_name)
2848 {
2849   linespec_parser parser (0, language, NULL, NULL, 0, NULL);
2850 
2851   line_offset unknown_offset;
2852 
2853   try
2854     {
2855       convert_explicit_location_spec_to_linespec (PARSER_STATE (&parser),
2856 						  PARSER_RESULT (&parser),
2857 						  source_filename,
2858 						  function_name,
2859 						  func_name_match_type,
2860 						  NULL, unknown_offset);
2861     }
2862   catch (const gdb_exception_error &ex)
2863     {
2864       return;
2865     }
2866 
2867   complete_label (tracker, &parser, label_name);
2868 }
2869 
2870 /* See description in linespec.h.  */
2871 
2872 void
2873 linespec_complete (completion_tracker &tracker, const char *text,
2874 		   symbol_name_match_type match_type)
2875 {
2876   const char *orig = text;
2877 
2878   linespec_parser parser (0, current_language, NULL, NULL, 0, NULL);
2879   parser.lexer.saved_arg = text;
2880   PARSER_EXPLICIT (&parser)->func_name_match_type = match_type;
2881   PARSER_STREAM (&parser) = text;
2882 
2883   parser.completion_tracker = &tracker;
2884   PARSER_STATE (&parser)->is_linespec = 1;
2885 
2886   /* Parse as much as possible.  parser.completion_word will hold
2887      furthest completion point we managed to parse to.  */
2888   try
2889     {
2890       parse_linespec (&parser, text, match_type);
2891     }
2892   catch (const gdb_exception_error &except)
2893     {
2894     }
2895 
2896   if (parser.completion_quote_char != '\0'
2897       && parser.completion_quote_end != NULL
2898       && parser.completion_quote_end[1] == '\0')
2899     {
2900       /* If completing a quoted string with the cursor right at
2901 	 terminating quote char, complete the completion word without
2902 	 interpretation, so that readline advances the cursor one
2903 	 whitespace past the quote, even if there's no match.  This
2904 	 makes these cases behave the same:
2905 
2906 	   before: "b function()"
2907 	   after:  "b function() "
2908 
2909 	   before: "b 'function()'"
2910 	   after:  "b 'function()' "
2911 
2912 	 and trusts the user in this case:
2913 
2914 	   before: "b 'not_loaded_function_yet()'"
2915 	   after:  "b 'not_loaded_function_yet()' "
2916       */
2917       parser.complete_what = linespec_complete_what::NOTHING;
2918       parser.completion_quote_char = '\0';
2919 
2920       gdb::unique_xmalloc_ptr<char> text_copy
2921 	(xstrdup (parser.completion_word));
2922       tracker.add_completion (std::move (text_copy));
2923     }
2924 
2925   tracker.set_quote_char (parser.completion_quote_char);
2926 
2927   if (parser.complete_what == linespec_complete_what::LABEL)
2928     {
2929       parser.complete_what = linespec_complete_what::NOTHING;
2930 
2931       const char *func_name = PARSER_EXPLICIT (&parser)->function_name;
2932 
2933       std::vector<block_symbol> function_symbols;
2934       std::vector<bound_minimal_symbol> minimal_symbols;
2935       find_linespec_symbols (PARSER_STATE (&parser),
2936 			     PARSER_RESULT (&parser)->file_symtabs,
2937 			     func_name, match_type,
2938 			     &function_symbols, &minimal_symbols);
2939 
2940       PARSER_RESULT (&parser)->function_symbols = std::move (function_symbols);
2941       PARSER_RESULT (&parser)->minimal_symbols = std::move (minimal_symbols);
2942 
2943       complete_label (tracker, &parser, parser.completion_word);
2944     }
2945   else if (parser.complete_what == linespec_complete_what::FUNCTION)
2946     {
2947       /* While parsing/lexing, we didn't know whether the completion
2948 	 word completes to a unique function/source name already or
2949 	 not.
2950 
2951 	 E.g.:
2952 	   "b function() <tab>"
2953 	 may need to complete either to:
2954 	   "b function() const"
2955 	 or to:
2956 	   "b function() if/thread/task"
2957 
2958 	 Or, this:
2959 	   "b foo t"
2960 	 may need to complete either to:
2961 	   "b foo template_fun<T>()"
2962 	 with "foo" being the template function's return type, or to:
2963 	   "b foo thread/task"
2964 
2965 	 Or, this:
2966 	   "b file<TAB>"
2967 	 may need to complete either to a source file name:
2968 	   "b file.c"
2969 	 or this, also a filename, but a unique completion:
2970 	   "b file.c:"
2971 	 or to a function name:
2972 	   "b file_function"
2973 
2974 	 Address that by completing assuming source or function, and
2975 	 seeing if we find a completion that matches exactly the
2976 	 completion word.  If so, then it must be a function (see note
2977 	 below) and we advance the completion word to the end of input
2978 	 and switch to KEYWORD completion mode.
2979 
2980 	 Note: if we find a unique completion for a source filename,
2981 	 then it won't match the completion word, because the LCD will
2982 	 contain a trailing ':'.  And if we're completing at or after
2983 	 the ':', then complete_linespec_component won't try to
2984 	 complete on source filenames.  */
2985 
2986       const char *word = parser.completion_word;
2987 
2988       complete_linespec_component (&parser, tracker,
2989 				   parser.completion_word,
2990 				   linespec_complete_what::FUNCTION,
2991 				   PARSER_EXPLICIT (&parser)->source_filename);
2992 
2993       parser.complete_what = linespec_complete_what::NOTHING;
2994 
2995       if (tracker.quote_char ())
2996 	{
2997 	  /* The function/file name was not close-quoted, so this
2998 	     can't be a keyword.  Note: complete_linespec_component
2999 	     may have swapped the original quote char for ':' when we
3000 	     get here, but that still indicates the same.  */
3001 	}
3002       else if (!tracker.have_completions ())
3003 	{
3004 	  size_t key_start;
3005 	  size_t wordlen = strlen (parser.completion_word);
3006 
3007 	  key_start
3008 	    = string_find_incomplete_keyword_at_end (linespec_keywords,
3009 						     parser.completion_word,
3010 						     wordlen);
3011 
3012 	  if (key_start != -1
3013 	      || (wordlen > 0
3014 		  && parser.completion_word[wordlen - 1] == ' '))
3015 	    {
3016 	      parser.completion_word += key_start;
3017 	      parser.complete_what = linespec_complete_what::KEYWORD;
3018 	    }
3019 	}
3020       else if (tracker.completes_to_completion_word (word))
3021 	{
3022 	  /* Skip the function and complete on keywords.  */
3023 	  parser.completion_word += strlen (word);
3024 	  parser.complete_what = linespec_complete_what::KEYWORD;
3025 	  tracker.discard_completions ();
3026 	}
3027     }
3028 
3029   tracker.advance_custom_word_point_by (parser.completion_word - orig);
3030 
3031   complete_linespec_component (&parser, tracker,
3032 			       parser.completion_word,
3033 			       parser.complete_what,
3034 			       PARSER_EXPLICIT (&parser)->source_filename);
3035 
3036   /* If we're past the "filename:function:label:offset" linespec, and
3037      didn't find any match, then assume the user might want to create
3038      a pending breakpoint anyway and offer the keyword
3039      completions.  */
3040   if (!parser.completion_quote_char
3041       && (parser.complete_what == linespec_complete_what::FUNCTION
3042 	  || parser.complete_what == linespec_complete_what::LABEL
3043 	  || parser.complete_what == linespec_complete_what::NOTHING)
3044       && !tracker.have_completions ())
3045     {
3046       const char *end
3047 	= parser.completion_word + strlen (parser.completion_word);
3048 
3049       if (end > orig && end[-1] == ' ')
3050 	{
3051 	  tracker.advance_custom_word_point_by (end - parser.completion_word);
3052 
3053 	  complete_linespec_component (&parser, tracker, end,
3054 				       linespec_complete_what::KEYWORD,
3055 				       NULL);
3056 	}
3057     }
3058 }
3059 
3060 /* A helper function for decode_line_full and decode_line_1 to
3061    turn LOCSPEC into std::vector<symtab_and_line>.  */
3062 
3063 static std::vector<symtab_and_line>
3064 location_spec_to_sals (linespec_parser *parser,
3065 		       const location_spec *locspec)
3066 {
3067   std::vector<symtab_and_line> result;
3068 
3069   switch (locspec->type ())
3070     {
3071     case LINESPEC_LOCATION_SPEC:
3072       {
3073 	const linespec_location_spec *ls = as_linespec_location_spec (locspec);
3074 	PARSER_STATE (parser)->is_linespec = 1;
3075 	result = parse_linespec (parser, ls->spec_string, ls->match_type);
3076       }
3077       break;
3078 
3079     case ADDRESS_LOCATION_SPEC:
3080       {
3081 	const address_location_spec *addr_spec
3082 	  = as_address_location_spec (locspec);
3083 	const char *addr_string = addr_spec->to_string ();
3084 	CORE_ADDR addr;
3085 
3086 	if (addr_string != NULL)
3087 	  {
3088 	    addr = linespec_expression_to_pc (&addr_string);
3089 	    if (PARSER_STATE (parser)->canonical != NULL)
3090 	      PARSER_STATE (parser)->canonical->locspec	= locspec->clone ();
3091 	  }
3092 	else
3093 	  addr = addr_spec->address;
3094 
3095 	result = convert_address_location_to_sals (PARSER_STATE (parser),
3096 						   addr);
3097       }
3098       break;
3099 
3100     case EXPLICIT_LOCATION_SPEC:
3101       {
3102 	const explicit_location_spec *explicit_locspec
3103 	  = as_explicit_location_spec (locspec);
3104 	result = convert_explicit_location_spec_to_sals (PARSER_STATE (parser),
3105 							 PARSER_RESULT (parser),
3106 							 explicit_locspec);
3107       }
3108       break;
3109 
3110     case PROBE_LOCATION_SPEC:
3111       /* Probes are handled by their own decoders.  */
3112       gdb_assert_not_reached ("attempt to decode probe location");
3113       break;
3114 
3115     default:
3116       gdb_assert_not_reached ("unhandled location spec type");
3117     }
3118 
3119   return result;
3120 }
3121 
3122 /* See linespec.h.  */
3123 
3124 void
3125 decode_line_full (struct location_spec *locspec, int flags,
3126 		  struct program_space *search_pspace,
3127 		  struct symtab *default_symtab,
3128 		  int default_line, struct linespec_result *canonical,
3129 		  const char *select_mode,
3130 		  const char *filter)
3131 {
3132   std::vector<const char *> filters;
3133   struct linespec_state *state;
3134 
3135   gdb_assert (canonical != NULL);
3136   /* The filter only makes sense for 'all'.  */
3137   gdb_assert (filter == NULL || select_mode == multiple_symbols_all);
3138   gdb_assert (select_mode == NULL
3139 	      || select_mode == multiple_symbols_all
3140 	      || select_mode == multiple_symbols_ask
3141 	      || select_mode == multiple_symbols_cancel);
3142   gdb_assert ((flags & DECODE_LINE_LIST_MODE) == 0);
3143 
3144   linespec_parser parser (flags, current_language,
3145 			  search_pspace, default_symtab,
3146 			  default_line, canonical);
3147 
3148   scoped_restore_current_program_space restore_pspace;
3149 
3150   std::vector<symtab_and_line> result = location_spec_to_sals (&parser,
3151 							       locspec);
3152   state = PARSER_STATE (&parser);
3153 
3154   if (result.size () == 0)
3155     throw_error (NOT_SUPPORTED_ERROR, _("Location %s not available"),
3156 		 locspec->to_string ());
3157 
3158   gdb_assert (result.size () == 1 || canonical->pre_expanded);
3159   canonical->pre_expanded = 1;
3160 
3161   /* Arrange for allocated canonical names to be freed.  */
3162   std::vector<gdb::unique_xmalloc_ptr<char>> hold_names;
3163   for (int i = 0; i < result.size (); ++i)
3164     {
3165       gdb_assert (state->canonical_names[i].suffix != NULL);
3166       hold_names.emplace_back (state->canonical_names[i].suffix);
3167     }
3168 
3169   if (select_mode == NULL)
3170     {
3171       if (top_level_interpreter ()->interp_ui_out ()->is_mi_like_p ())
3172 	select_mode = multiple_symbols_all;
3173       else
3174 	select_mode = multiple_symbols_select_mode ();
3175     }
3176 
3177   if (select_mode == multiple_symbols_all)
3178     {
3179       if (filter != NULL)
3180 	{
3181 	  filters.push_back (filter);
3182 	  filter_results (state, &result, filters);
3183 	}
3184       else
3185 	convert_results_to_lsals (state, &result);
3186     }
3187   else
3188     decode_line_2 (state, &result, select_mode);
3189 }
3190 
3191 /* See linespec.h.  */
3192 
3193 std::vector<symtab_and_line>
3194 decode_line_1 (const location_spec *locspec, int flags,
3195 	       struct program_space *search_pspace,
3196 	       struct symtab *default_symtab,
3197 	       int default_line)
3198 {
3199   linespec_parser parser (flags, current_language,
3200 			  search_pspace, default_symtab,
3201 			  default_line, NULL);
3202 
3203   scoped_restore_current_program_space restore_pspace;
3204 
3205   return location_spec_to_sals (&parser, locspec);
3206 }
3207 
3208 /* See linespec.h.  */
3209 
3210 std::vector<symtab_and_line>
3211 decode_line_with_current_source (const char *string, int flags)
3212 {
3213   if (string == 0)
3214     error (_("Empty line specification."));
3215 
3216   /* We use whatever is set as the current source line.  We do not try
3217      and get a default source symtab+line or it will recursively call us!  */
3218   symtab_and_line cursal = get_current_source_symtab_and_line ();
3219 
3220   location_spec_up locspec = string_to_location_spec (&string,
3221 						      current_language);
3222   std::vector<symtab_and_line> sals
3223     = decode_line_1 (locspec.get (), flags, NULL, cursal.symtab, cursal.line);
3224 
3225   if (*string)
3226     error (_("Junk at end of line specification: %s"), string);
3227 
3228   return sals;
3229 }
3230 
3231 /* See linespec.h.  */
3232 
3233 std::vector<symtab_and_line>
3234 decode_line_with_last_displayed (const char *string, int flags)
3235 {
3236   if (string == 0)
3237     error (_("Empty line specification."));
3238 
3239   location_spec_up locspec = string_to_location_spec (&string,
3240 						      current_language);
3241   std::vector<symtab_and_line> sals
3242     = (last_displayed_sal_is_valid ()
3243        ? decode_line_1 (locspec.get (), flags, NULL,
3244 			get_last_displayed_symtab (),
3245 			get_last_displayed_line ())
3246        : decode_line_1 (locspec.get (), flags, NULL, NULL, 0));
3247 
3248   if (*string)
3249     error (_("Junk at end of line specification: %s"), string);
3250 
3251   return sals;
3252 }
3253 
3254 
3255 
3256 /* First, some functions to initialize stuff at the beginning of the
3257    function.  */
3258 
3259 static void
3260 initialize_defaults (struct symtab **default_symtab, int *default_line)
3261 {
3262   if (*default_symtab == 0)
3263     {
3264       /* Use whatever we have for the default source line.  We don't use
3265 	 get_current_or_default_symtab_and_line as it can recurse and call
3266 	 us back!  */
3267       struct symtab_and_line cursal =
3268 	get_current_source_symtab_and_line ();
3269 
3270       *default_symtab = cursal.symtab;
3271       *default_line = cursal.line;
3272     }
3273 }
3274 
3275 
3276 
3277 /* Evaluate the expression pointed to by EXP_PTR into a CORE_ADDR,
3278    advancing EXP_PTR past any parsed text.  */
3279 
3280 CORE_ADDR
3281 linespec_expression_to_pc (const char **exp_ptr)
3282 {
3283   if (current_program_space->executing_startup)
3284     /* The error message doesn't really matter, because this case
3285        should only hit during breakpoint reset.  */
3286     throw_error (NOT_FOUND_ERROR, _("cannot evaluate expressions while "
3287 				    "program space is in startup"));
3288 
3289   (*exp_ptr)++;
3290   return value_as_address (parse_to_comma_and_eval (exp_ptr));
3291 }
3292 
3293 
3294 
3295 /* Here's where we recognise an Objective-C Selector.  An Objective C
3296    selector may be implemented by more than one class, therefore it
3297    may represent more than one method/function.  This gives us a
3298    situation somewhat analogous to C++ overloading.  If there's more
3299    than one method that could represent the selector, then use some of
3300    the existing C++ code to let the user choose one.  */
3301 
3302 static std::vector<symtab_and_line>
3303 decode_objc (struct linespec_state *self, linespec *ls, const char *arg)
3304 {
3305   struct collect_info info;
3306   std::vector<const char *> symbol_names;
3307   const char *new_argptr;
3308 
3309   info.state = self;
3310   std::vector<symtab *> symtabs;
3311   symtabs.push_back (nullptr);
3312 
3313   info.file_symtabs = &symtabs;
3314 
3315   std::vector<block_symbol> symbols;
3316   info.result.symbols = &symbols;
3317   std::vector<bound_minimal_symbol> minimal_symbols;
3318   info.result.minimal_symbols = &minimal_symbols;
3319 
3320   new_argptr = find_imps (arg, &symbol_names);
3321   if (symbol_names.empty ())
3322     return {};
3323 
3324   add_all_symbol_names_from_pspace (&info, NULL, symbol_names,
3325 				    FUNCTIONS_DOMAIN);
3326 
3327   std::vector<symtab_and_line> values;
3328   if (!symbols.empty () || !minimal_symbols.empty ())
3329     {
3330       char *saved_arg;
3331 
3332       saved_arg = (char *) alloca (new_argptr - arg + 1);
3333       memcpy (saved_arg, arg, new_argptr - arg);
3334       saved_arg[new_argptr - arg] = '\0';
3335 
3336       ls->explicit_loc.function_name = xstrdup (saved_arg);
3337       ls->function_symbols = std::move (symbols);
3338       ls->minimal_symbols = std::move (minimal_symbols);
3339       values = convert_linespec_to_sals (self, ls);
3340 
3341       if (self->canonical)
3342 	{
3343 	  std::string holder;
3344 	  const char *str;
3345 
3346 	  self->canonical->pre_expanded = 1;
3347 
3348 	  if (ls->explicit_loc.source_filename)
3349 	    {
3350 	      holder = string_printf ("%s:%s",
3351 				      ls->explicit_loc.source_filename,
3352 				      saved_arg);
3353 	      str = holder.c_str ();
3354 	    }
3355 	  else
3356 	    str = saved_arg;
3357 
3358 	  self->canonical->locspec
3359 	    = new_linespec_location_spec (&str, symbol_name_match_type::FULL);
3360 	}
3361     }
3362 
3363   return values;
3364 }
3365 
3366 namespace {
3367 
3368 /* A function object that serves as symbol_found_callback_ftype
3369    callback for iterate_over_symbols.  This is used by
3370    lookup_prefix_sym to collect type symbols.  */
3371 class decode_compound_collector
3372 {
3373 public:
3374   decode_compound_collector ()
3375     : m_unique_syms (htab_create_alloc (1, htab_hash_pointer,
3376 					htab_eq_pointer, NULL,
3377 					xcalloc, xfree))
3378   {
3379   }
3380 
3381   /* Return all symbols collected.  */
3382   std::vector<block_symbol> release_symbols ()
3383   {
3384     return std::move (m_symbols);
3385   }
3386 
3387   /* Callable as a symbol_found_callback_ftype callback.  */
3388   bool operator () (block_symbol *bsym);
3389 
3390 private:
3391   /* A hash table of all symbols we found.  We use this to avoid
3392      adding any symbol more than once.  */
3393   htab_up m_unique_syms;
3394 
3395   /* The result vector.  */
3396   std::vector<block_symbol>  m_symbols;
3397 };
3398 
3399 bool
3400 decode_compound_collector::operator () (block_symbol *bsym)
3401 {
3402   void **slot;
3403   struct type *t;
3404   struct symbol *sym = bsym->symbol;
3405 
3406   if (sym->aclass () != LOC_TYPEDEF)
3407     return true; /* Continue iterating.  */
3408 
3409   t = sym->type ();
3410   t = check_typedef (t);
3411   if (t->code () != TYPE_CODE_STRUCT
3412       && t->code () != TYPE_CODE_UNION
3413       && t->code () != TYPE_CODE_NAMESPACE)
3414     return true; /* Continue iterating.  */
3415 
3416   slot = htab_find_slot (m_unique_syms.get (), sym, INSERT);
3417   if (!*slot)
3418     {
3419       *slot = sym;
3420       m_symbols.push_back (*bsym);
3421     }
3422 
3423   return true; /* Continue iterating.  */
3424 }
3425 
3426 } // namespace
3427 
3428 /* Return any symbols corresponding to CLASS_NAME in FILE_SYMTABS.  */
3429 
3430 static std::vector<block_symbol>
3431 lookup_prefix_sym (struct linespec_state *state,
3432 		   const std::vector<symtab *> &file_symtabs,
3433 		   const char *class_name)
3434 {
3435   decode_compound_collector collector;
3436 
3437   lookup_name_info lookup_name (class_name, symbol_name_match_type::FULL);
3438 
3439   for (const auto &elt : file_symtabs)
3440     {
3441       if (elt == nullptr)
3442 	{
3443 	  iterate_over_all_matching_symtabs (state, lookup_name,
3444 					     STRUCT_DOMAIN, ALL_DOMAIN,
3445 					     NULL, false, collector);
3446 	  iterate_over_all_matching_symtabs (state, lookup_name,
3447 					     VAR_DOMAIN, ALL_DOMAIN,
3448 					     NULL, false, collector);
3449 	}
3450       else
3451 	{
3452 	  /* Program spaces that are executing startup should have
3453 	     been filtered out earlier.  */
3454 	  program_space *pspace = elt->compunit ()->objfile ()->pspace;
3455 
3456 	  gdb_assert (!pspace->executing_startup);
3457 	  set_current_program_space (pspace);
3458 	  iterate_over_file_blocks (elt, lookup_name, STRUCT_DOMAIN, collector);
3459 	  iterate_over_file_blocks (elt, lookup_name, VAR_DOMAIN, collector);
3460 	}
3461     }
3462 
3463   return collector.release_symbols ();
3464 }
3465 
3466 /* A std::sort comparison function for symbols.  The resulting order does
3467    not actually matter; we just need to be able to sort them so that
3468    symbols with the same program space end up next to each other.  */
3469 
3470 static bool
3471 compare_symbols (const block_symbol &a, const block_symbol &b)
3472 {
3473   uintptr_t uia, uib;
3474 
3475   uia = (uintptr_t) a.symbol->symtab ()->compunit ()->objfile ()->pspace;
3476   uib = (uintptr_t) b.symbol->symtab ()->compunit ()->objfile ()->pspace;
3477 
3478   if (uia < uib)
3479     return true;
3480   if (uia > uib)
3481     return false;
3482 
3483   uia = (uintptr_t) a.symbol;
3484   uib = (uintptr_t) b.symbol;
3485 
3486   if (uia < uib)
3487     return true;
3488 
3489   return false;
3490 }
3491 
3492 /* Like compare_symbols but for minimal symbols.  */
3493 
3494 static bool
3495 compare_msymbols (const bound_minimal_symbol &a, const bound_minimal_symbol &b)
3496 {
3497   uintptr_t uia, uib;
3498 
3499   uia = (uintptr_t) a.objfile->pspace;
3500   uib = (uintptr_t) a.objfile->pspace;
3501 
3502   if (uia < uib)
3503     return true;
3504   if (uia > uib)
3505     return false;
3506 
3507   uia = (uintptr_t) a.minsym;
3508   uib = (uintptr_t) b.minsym;
3509 
3510   if (uia < uib)
3511     return true;
3512 
3513   return false;
3514 }
3515 
3516 /* Look for all the matching instances of each symbol in NAMES.  Only
3517    instances from PSPACE are considered; other program spaces are
3518    handled by our caller.  If PSPACE is NULL, then all program spaces
3519    are considered.  Results are stored into INFO.  */
3520 
3521 static void
3522 add_all_symbol_names_from_pspace (struct collect_info *info,
3523 				  struct program_space *pspace,
3524 				  const std::vector<const char *> &names,
3525 				  enum search_domain search_domain)
3526 {
3527   for (const char *iter : names)
3528     add_matching_symbols_to_info (iter,
3529 				  symbol_name_match_type::FULL,
3530 				  search_domain, info, pspace);
3531 }
3532 
3533 static void
3534 find_superclass_methods (std::vector<struct type *> &&superclasses,
3535 			 const char *name, enum language name_lang,
3536 			 std::vector<const char *> *result_names)
3537 {
3538   size_t old_len = result_names->size ();
3539 
3540   while (1)
3541     {
3542       std::vector<struct type *> new_supers;
3543 
3544       for (type *t : superclasses)
3545 	find_methods (t, name_lang, name, result_names, &new_supers);
3546 
3547       if (result_names->size () != old_len || new_supers.empty ())
3548 	break;
3549 
3550       superclasses = std::move (new_supers);
3551     }
3552 }
3553 
3554 /* This finds the method METHOD_NAME in the class CLASS_NAME whose type is
3555    given by one of the symbols in SYM_CLASSES.  Matches are returned
3556    in SYMBOLS (for debug symbols) and MINSYMS (for minimal symbols).  */
3557 
3558 static void
3559 find_method (struct linespec_state *self,
3560 	     const std::vector<symtab *> &file_symtabs,
3561 	     const char *class_name, const char *method_name,
3562 	     std::vector<block_symbol> *sym_classes,
3563 	     std::vector<block_symbol> *symbols,
3564 	     std::vector<bound_minimal_symbol> *minsyms)
3565 {
3566   size_t last_result_len;
3567   std::vector<struct type *> superclass_vec;
3568   std::vector<const char *> result_names;
3569   struct collect_info info;
3570 
3571   /* Sort symbols so that symbols with the same program space are next
3572      to each other.  */
3573   std::sort (sym_classes->begin (), sym_classes->end (),
3574 	     compare_symbols);
3575 
3576   info.state = self;
3577   info.file_symtabs = &file_symtabs;
3578   info.result.symbols = symbols;
3579   info.result.minimal_symbols = minsyms;
3580 
3581   /* Iterate over all the types, looking for the names of existing
3582      methods matching METHOD_NAME.  If we cannot find a direct method in a
3583      given program space, then we consider inherited methods; this is
3584      not ideal (ideal would be to respect C++ hiding rules), but it
3585      seems good enough and is what GDB has historically done.  We only
3586      need to collect the names because later we find all symbols with
3587      those names.  This loop is written in a somewhat funny way
3588      because we collect data across the program space before deciding
3589      what to do.  */
3590   last_result_len = 0;
3591   for (const auto &elt : *sym_classes)
3592     {
3593       struct type *t;
3594       struct program_space *pspace;
3595       struct symbol *sym = elt.symbol;
3596       unsigned int ix = &elt - &*sym_classes->begin ();
3597 
3598       /* Program spaces that are executing startup should have
3599 	 been filtered out earlier.  */
3600       pspace = sym->symtab ()->compunit ()->objfile ()->pspace;
3601       gdb_assert (!pspace->executing_startup);
3602       set_current_program_space (pspace);
3603       t = check_typedef (sym->type ());
3604       find_methods (t, sym->language (),
3605 		    method_name, &result_names, &superclass_vec);
3606 
3607       /* Handle all items from a single program space at once; and be
3608 	 sure not to miss the last batch.  */
3609       if (ix == sym_classes->size () - 1
3610 	  || (pspace
3611 	      != (sym_classes->at (ix + 1).symbol->symtab ()
3612 		  ->compunit ()->objfile ()->pspace)))
3613 	{
3614 	  /* If we did not find a direct implementation anywhere in
3615 	     this program space, consider superclasses.  */
3616 	  if (result_names.size () == last_result_len)
3617 	    find_superclass_methods (std::move (superclass_vec), method_name,
3618 				     sym->language (), &result_names);
3619 
3620 	  /* We have a list of candidate symbol names, so now we
3621 	     iterate over the symbol tables looking for all
3622 	     matches in this pspace.  */
3623 	  add_all_symbol_names_from_pspace (&info, pspace, result_names,
3624 					    FUNCTIONS_DOMAIN);
3625 
3626 	  superclass_vec.clear ();
3627 	  last_result_len = result_names.size ();
3628 	}
3629     }
3630 
3631   if (!symbols->empty () || !minsyms->empty ())
3632     return;
3633 
3634   /* Throw an NOT_FOUND_ERROR.  This will be caught by the caller
3635      and other attempts to locate the symbol will be made.  */
3636   throw_error (NOT_FOUND_ERROR, _("see caller, this text doesn't matter"));
3637 }
3638 
3639 
3640 
3641 namespace {
3642 
3643 /* This function object is a callback for iterate_over_symtabs, used
3644    when collecting all matching symtabs.  */
3645 
3646 class symtab_collector
3647 {
3648 public:
3649   symtab_collector ()
3650     : m_symtab_table (htab_create (1, htab_hash_pointer, htab_eq_pointer,
3651 				   NULL))
3652   {
3653   }
3654 
3655   /* Callable as a symbol_found_callback_ftype callback.  */
3656   bool operator () (symtab *sym);
3657 
3658   /* Return an rvalue reference to the collected symtabs.  */
3659   std::vector<symtab *> &&release_symtabs ()
3660   {
3661     return std::move (m_symtabs);
3662   }
3663 
3664 private:
3665   /* The result vector of symtabs.  */
3666   std::vector<symtab *> m_symtabs;
3667 
3668   /* This is used to ensure the symtabs are unique.  */
3669   htab_up m_symtab_table;
3670 };
3671 
3672 bool
3673 symtab_collector::operator () (struct symtab *symtab)
3674 {
3675   void **slot;
3676 
3677   slot = htab_find_slot (m_symtab_table.get (), symtab, INSERT);
3678   if (!*slot)
3679     {
3680       *slot = symtab;
3681       m_symtabs.push_back (symtab);
3682     }
3683 
3684   return false;
3685 }
3686 
3687 } // namespace
3688 
3689 /* Given a file name, return a list of all matching symtabs.  If
3690    SEARCH_PSPACE is not NULL, the search is restricted to just that
3691    program space.  */
3692 
3693 static std::vector<symtab *>
3694 collect_symtabs_from_filename (const char *file,
3695 			       struct program_space *search_pspace)
3696 {
3697   symtab_collector collector;
3698 
3699   /* Find that file's data.  */
3700   if (search_pspace == NULL)
3701     {
3702       for (struct program_space *pspace : program_spaces)
3703 	{
3704 	  if (pspace->executing_startup)
3705 	    continue;
3706 
3707 	  set_current_program_space (pspace);
3708 	  iterate_over_symtabs (file, collector);
3709 	}
3710     }
3711   else
3712     {
3713       set_current_program_space (search_pspace);
3714       iterate_over_symtabs (file, collector);
3715     }
3716 
3717   return collector.release_symtabs ();
3718 }
3719 
3720 /* Return all the symtabs associated to the FILENAME.  If SEARCH_PSPACE is
3721    not NULL, the search is restricted to just that program space.  */
3722 
3723 static std::vector<symtab *>
3724 symtabs_from_filename (const char *filename,
3725 		       struct program_space *search_pspace)
3726 {
3727   std::vector<symtab *> result
3728     = collect_symtabs_from_filename (filename, search_pspace);
3729 
3730   if (result.empty ())
3731     {
3732       if (!have_full_symbols () && !have_partial_symbols ())
3733 	throw_error (NOT_FOUND_ERROR,
3734 		     _("No symbol table is loaded.  "
3735 		       "Use the \"file\" command."));
3736       source_file_not_found_error (filename);
3737     }
3738 
3739   return result;
3740 }
3741 
3742 /* See symtab.h.  */
3743 
3744 void
3745 symbol_searcher::find_all_symbols (const std::string &name,
3746 				   const struct language_defn *language,
3747 				   enum search_domain search_domain,
3748 				   std::vector<symtab *> *search_symtabs,
3749 				   struct program_space *search_pspace)
3750 {
3751   symbol_searcher_collect_info info;
3752   struct linespec_state state;
3753 
3754   memset (&state, 0, sizeof (state));
3755   state.language = language;
3756   info.state = &state;
3757 
3758   info.result.symbols = &m_symbols;
3759   info.result.minimal_symbols = &m_minimal_symbols;
3760   std::vector<symtab *> all_symtabs;
3761   if (search_symtabs == nullptr)
3762     {
3763       all_symtabs.push_back (nullptr);
3764       search_symtabs = &all_symtabs;
3765     }
3766   info.file_symtabs = search_symtabs;
3767 
3768   add_matching_symbols_to_info (name.c_str (), symbol_name_match_type::WILD,
3769 				search_domain, &info, search_pspace);
3770 }
3771 
3772 /* Look up a function symbol named NAME in symtabs FILE_SYMTABS.  Matching
3773    debug symbols are returned in SYMBOLS.  Matching minimal symbols are
3774    returned in MINSYMS.  */
3775 
3776 static void
3777 find_function_symbols (struct linespec_state *state,
3778 		       const std::vector<symtab *> &file_symtabs, const char *name,
3779 		       symbol_name_match_type name_match_type,
3780 		       std::vector<block_symbol> *symbols,
3781 		       std::vector<bound_minimal_symbol> *minsyms)
3782 {
3783   struct collect_info info;
3784   std::vector<const char *> symbol_names;
3785 
3786   info.state = state;
3787   info.result.symbols = symbols;
3788   info.result.minimal_symbols = minsyms;
3789   info.file_symtabs = &file_symtabs;
3790 
3791   /* Try NAME as an Objective-C selector.  */
3792   find_imps (name, &symbol_names);
3793   if (!symbol_names.empty ())
3794     add_all_symbol_names_from_pspace (&info, state->search_pspace,
3795 				      symbol_names, FUNCTIONS_DOMAIN);
3796   else
3797     add_matching_symbols_to_info (name, name_match_type, FUNCTIONS_DOMAIN,
3798 				  &info, state->search_pspace);
3799 }
3800 
3801 /* Find all symbols named NAME in FILE_SYMTABS, returning debug symbols
3802    in SYMBOLS and minimal symbols in MINSYMS.  */
3803 
3804 static void
3805 find_linespec_symbols (struct linespec_state *state,
3806 		       const std::vector<symtab *> &file_symtabs,
3807 		       const char *lookup_name,
3808 		       symbol_name_match_type name_match_type,
3809 		       std::vector <block_symbol> *symbols,
3810 		       std::vector<bound_minimal_symbol> *minsyms)
3811 {
3812   gdb::unique_xmalloc_ptr<char> canon
3813     = cp_canonicalize_string_no_typedefs (lookup_name);
3814   if (canon != nullptr)
3815     lookup_name = canon.get ();
3816 
3817   /* It's important to not call expand_symtabs_matching unnecessarily
3818      as it can really slow things down (by unnecessarily expanding
3819      potentially 1000s of symtabs, which when debugging some apps can
3820      cost 100s of seconds).  Avoid this to some extent by *first* calling
3821      find_function_symbols, and only if that doesn't find anything
3822      *then* call find_method.  This handles two important cases:
3823      1) break (anonymous namespace)::foo
3824      2) break class::method where method is in class (and not a baseclass)  */
3825 
3826   find_function_symbols (state, file_symtabs, lookup_name,
3827 			 name_match_type, symbols, minsyms);
3828 
3829   /* If we were unable to locate a symbol of the same name, try dividing
3830      the name into class and method names and searching the class and its
3831      baseclasses.  */
3832   if (symbols->empty () && minsyms->empty ())
3833     {
3834       std::string klass, method;
3835       const char *last, *p, *scope_op;
3836 
3837       /* See if we can find a scope operator and break this symbol
3838 	 name into namespaces${SCOPE_OPERATOR}class_name and method_name.  */
3839       scope_op = "::";
3840       p = find_toplevel_string (lookup_name, scope_op);
3841 
3842       last = NULL;
3843       while (p != NULL)
3844 	{
3845 	  last = p;
3846 	  p = find_toplevel_string (p + strlen (scope_op), scope_op);
3847 	}
3848 
3849       /* If no scope operator was found, there is nothing more we can do;
3850 	 we already attempted to lookup the entire name as a symbol
3851 	 and failed.  */
3852       if (last == NULL)
3853 	return;
3854 
3855       /* LOOKUP_NAME points to the class name.
3856 	 LAST points to the method name.  */
3857       klass = std::string (lookup_name, last - lookup_name);
3858 
3859       /* Skip past the scope operator.  */
3860       last += strlen (scope_op);
3861       method = last;
3862 
3863       /* Find a list of classes named KLASS.  */
3864       std::vector<block_symbol> classes
3865 	= lookup_prefix_sym (state, file_symtabs, klass.c_str ());
3866       if (!classes.empty ())
3867 	{
3868 	  /* Now locate a list of suitable methods named METHOD.  */
3869 	  try
3870 	    {
3871 	      find_method (state, file_symtabs,
3872 			   klass.c_str (), method.c_str (),
3873 			   &classes, symbols, minsyms);
3874 	    }
3875 
3876 	  /* If successful, we're done.  If NOT_FOUND_ERROR
3877 	     was not thrown, rethrow the exception that we did get.  */
3878 	  catch (const gdb_exception_error &except)
3879 	    {
3880 	      if (except.error != NOT_FOUND_ERROR)
3881 		throw;
3882 	    }
3883 	}
3884     }
3885 }
3886 
3887 /* Helper for find_label_symbols.  Find all labels that match name
3888    NAME in BLOCK.  Return all labels that match in FUNCTION_SYMBOLS.
3889    Return the actual function symbol in which the label was found in
3890    LABEL_FUNC_RET.  If COMPLETION_MODE is true, then NAME is
3891    interpreted as a label name prefix.  Otherwise, only a label named
3892    exactly NAME match.  */
3893 
3894 static void
3895 find_label_symbols_in_block (const struct block *block,
3896 			     const char *name, struct symbol *fn_sym,
3897 			     bool completion_mode,
3898 			     std::vector<block_symbol> *result,
3899 			     std::vector<block_symbol> *label_funcs_ret)
3900 {
3901   if (completion_mode)
3902     {
3903       struct block_iterator iter;
3904       struct symbol *sym;
3905       size_t name_len = strlen (name);
3906 
3907       int (*cmp) (const char *, const char *, size_t);
3908       cmp = case_sensitivity == case_sensitive_on ? strncmp : strncasecmp;
3909 
3910       ALL_BLOCK_SYMBOLS (block, iter, sym)
3911 	{
3912 	  if (symbol_matches_domain (sym->language (),
3913 				     sym->domain (), LABEL_DOMAIN)
3914 	      && cmp (sym->search_name (), name, name_len) == 0)
3915 	    {
3916 	      result->push_back ({sym, block});
3917 	      label_funcs_ret->push_back ({fn_sym, block});
3918 	    }
3919 	}
3920     }
3921   else
3922     {
3923       struct block_symbol label_sym
3924 	= lookup_symbol (name, block, LABEL_DOMAIN, 0);
3925 
3926       if (label_sym.symbol != NULL)
3927 	{
3928 	  result->push_back (label_sym);
3929 	  label_funcs_ret->push_back ({fn_sym, block});
3930 	}
3931     }
3932 }
3933 
3934 /* Return all labels that match name NAME in FUNCTION_SYMBOLS.
3935 
3936    Return the actual function symbol in which the label was found in
3937    LABEL_FUNC_RET.  If COMPLETION_MODE is true, then NAME is
3938    interpreted as a label name prefix.  Otherwise, only labels named
3939    exactly NAME match.  */
3940 
3941 
3942 static std::vector<block_symbol>
3943 find_label_symbols (struct linespec_state *self,
3944 		    const std::vector<block_symbol> &function_symbols,
3945 		    std::vector<block_symbol> *label_funcs_ret,
3946 		    const char *name,
3947 		    bool completion_mode)
3948 {
3949   const struct block *block;
3950   struct symbol *fn_sym;
3951   std::vector<block_symbol> result;
3952 
3953   if (function_symbols.empty ())
3954     {
3955       set_current_program_space (self->program_space);
3956       block = get_current_search_block ();
3957 
3958       for (;
3959 	   block && !block->function ();
3960 	   block = block->superblock ())
3961 	;
3962 
3963       if (!block)
3964 	return {};
3965 
3966       fn_sym = block->function ();
3967 
3968       find_label_symbols_in_block (block, name, fn_sym, completion_mode,
3969 				   &result, label_funcs_ret);
3970     }
3971   else
3972     {
3973       for (const auto &elt : function_symbols)
3974 	{
3975 	  fn_sym = elt.symbol;
3976 	  set_current_program_space
3977 	    (fn_sym->symtab ()->compunit ()->objfile ()->pspace);
3978 	  block = fn_sym->value_block ();
3979 
3980 	  find_label_symbols_in_block (block, name, fn_sym, completion_mode,
3981 				       &result, label_funcs_ret);
3982 	}
3983     }
3984 
3985   return result;
3986 }
3987 
3988 
3989 
3990 /* A helper for create_sals_line_offset that handles the 'list_mode' case.  */
3991 
3992 static std::vector<symtab_and_line>
3993 decode_digits_list_mode (struct linespec_state *self,
3994 			 linespec *ls,
3995 			 struct symtab_and_line val)
3996 {
3997   gdb_assert (self->list_mode);
3998 
3999   std::vector<symtab_and_line> values;
4000 
4001   for (const auto &elt : ls->file_symtabs)
4002     {
4003       /* The logic above should ensure this.  */
4004       gdb_assert (elt != NULL);
4005 
4006       program_space *pspace = elt->compunit ()->objfile ()->pspace;
4007       set_current_program_space (pspace);
4008 
4009       /* Simplistic search just for the list command.  */
4010       val.symtab = find_line_symtab (elt, val.line, NULL, NULL);
4011       if (val.symtab == NULL)
4012 	val.symtab = elt;
4013       val.pspace = pspace;
4014       val.pc = 0;
4015       val.explicit_line = true;
4016 
4017       add_sal_to_sals (self, &values, &val, NULL, 0);
4018     }
4019 
4020   return values;
4021 }
4022 
4023 /* A helper for create_sals_line_offset that iterates over the symtabs
4024    associated with LS and returns a vector of corresponding symtab_and_line
4025    structures.  */
4026 
4027 static std::vector<symtab_and_line>
4028 decode_digits_ordinary (struct linespec_state *self,
4029 			linespec *ls,
4030 			int line,
4031 			struct linetable_entry **best_entry)
4032 {
4033   std::vector<symtab_and_line> sals;
4034   for (const auto &elt : ls->file_symtabs)
4035     {
4036       std::vector<CORE_ADDR> pcs;
4037 
4038       /* The logic above should ensure this.  */
4039       gdb_assert (elt != NULL);
4040 
4041       program_space *pspace = elt->compunit ()->objfile ()->pspace;
4042       set_current_program_space (pspace);
4043 
4044       pcs = find_pcs_for_symtab_line (elt, line, best_entry);
4045       for (CORE_ADDR pc : pcs)
4046 	{
4047 	  symtab_and_line sal;
4048 	  sal.pspace = pspace;
4049 	  sal.symtab = elt;
4050 	  sal.line = line;
4051 	  sal.explicit_line = true;
4052 	  sal.pc = pc;
4053 	  sals.push_back (std::move (sal));
4054 	}
4055     }
4056 
4057   return sals;
4058 }
4059 
4060 
4061 
4062 /* Return the line offset represented by VARIABLE.  */
4063 
4064 static struct line_offset
4065 linespec_parse_variable (struct linespec_state *self, const char *variable)
4066 {
4067   int index = 0;
4068   const char *p;
4069   line_offset offset;
4070 
4071   p = (variable[1] == '$') ? variable + 2 : variable + 1;
4072   if (*p == '$')
4073     ++p;
4074   while (*p >= '0' && *p <= '9')
4075     ++p;
4076   if (!*p)		/* Reached end of token without hitting non-digit.  */
4077     {
4078       /* We have a value history reference.  */
4079       struct value *val_history;
4080 
4081       sscanf ((variable[1] == '$') ? variable + 2 : variable + 1, "%d", &index);
4082       val_history
4083 	= access_value_history ((variable[1] == '$') ? -index : index);
4084       if (value_type (val_history)->code () != TYPE_CODE_INT)
4085 	error (_("History values used in line "
4086 		 "specs must have integer values."));
4087       offset.offset = value_as_long (val_history);
4088       offset.sign = LINE_OFFSET_NONE;
4089     }
4090   else
4091     {
4092       /* Not all digits -- may be user variable/function or a
4093 	 convenience variable.  */
4094       LONGEST valx;
4095       struct internalvar *ivar;
4096 
4097       /* Try it as a convenience variable.  If it is not a convenience
4098 	 variable, return and allow normal symbol lookup to occur.  */
4099       ivar = lookup_only_internalvar (variable + 1);
4100 	/* If there's no internal variable with that name, let the
4101 	   offset remain as unknown to allow the name to be looked up
4102 	   as a symbol.  */
4103       if (ivar != nullptr)
4104 	{
4105 	  /* We found a valid variable name.  If it is not an integer,
4106 	     throw an error.  */
4107 	  if (!get_internalvar_integer (ivar, &valx))
4108 	    error (_("Convenience variables used in line "
4109 		     "specs must have integer values."));
4110 	  else
4111 	    {
4112 	      offset.offset = valx;
4113 	      offset.sign = LINE_OFFSET_NONE;
4114 	    }
4115 	}
4116     }
4117 
4118   return offset;
4119 }
4120 
4121 
4122 /* We've found a minimal symbol MSYMBOL in OBJFILE to associate with our
4123    linespec; return the SAL in RESULT.  This function should return SALs
4124    matching those from find_function_start_sal, otherwise false
4125    multiple-locations breakpoints could be placed.  */
4126 
4127 static void
4128 minsym_found (struct linespec_state *self, struct objfile *objfile,
4129 	      struct minimal_symbol *msymbol,
4130 	      std::vector<symtab_and_line> *result)
4131 {
4132   bool want_start_sal;
4133 
4134   CORE_ADDR func_addr;
4135   bool is_function = msymbol_is_function (objfile, msymbol, &func_addr);
4136 
4137   if (is_function)
4138     {
4139       const char *msym_name = msymbol->linkage_name ();
4140 
4141       if (msymbol->type () == mst_text_gnu_ifunc
4142 	  || msymbol->type () == mst_data_gnu_ifunc)
4143 	want_start_sal = gnu_ifunc_resolve_name (msym_name, &func_addr);
4144       else
4145 	want_start_sal = true;
4146     }
4147 
4148   symtab_and_line sal;
4149 
4150   if (is_function && want_start_sal)
4151     sal = find_function_start_sal (func_addr, NULL, self->funfirstline);
4152   else
4153     {
4154       sal.objfile = objfile;
4155       sal.msymbol = msymbol;
4156       /* Store func_addr, not the minsym's address in case this was an
4157 	 ifunc that hasn't been resolved yet.  */
4158       if (is_function)
4159 	sal.pc = func_addr;
4160       else
4161 	sal.pc = msymbol->value_address (objfile);
4162       sal.pspace = current_program_space;
4163     }
4164 
4165   sal.section = msymbol->obj_section (objfile);
4166 
4167   if (maybe_add_address (self->addr_set, objfile->pspace, sal.pc))
4168     add_sal_to_sals (self, result, &sal, msymbol->natural_name (), 0);
4169 }
4170 
4171 /* Helper for search_minsyms_for_name that adds the symbol to the
4172    result.  */
4173 
4174 static void
4175 add_minsym (struct minimal_symbol *minsym, struct objfile *objfile,
4176 	    struct symtab *symtab, int list_mode,
4177 	    std::vector<struct bound_minimal_symbol> *msyms)
4178 {
4179   if (symtab != NULL)
4180     {
4181       /* We're looking for a label for which we don't have debug
4182 	 info.  */
4183       CORE_ADDR func_addr;
4184       if (msymbol_is_function (objfile, minsym, &func_addr))
4185 	{
4186 	  symtab_and_line sal = find_pc_sect_line (func_addr, NULL, 0);
4187 
4188 	  if (symtab != sal.symtab)
4189 	    return;
4190 	}
4191     }
4192 
4193   /* Exclude data symbols when looking for breakpoint locations.  */
4194   if (!list_mode && !msymbol_is_function (objfile, minsym))
4195     return;
4196 
4197   msyms->emplace_back (minsym, objfile);
4198   return;
4199 }
4200 
4201 /* Search for minimal symbols called NAME.  If SEARCH_PSPACE
4202    is not NULL, the search is restricted to just that program
4203    space.
4204 
4205    If SYMTAB is NULL, search all objfiles, otherwise
4206    restrict results to the given SYMTAB.  */
4207 
4208 static void
4209 search_minsyms_for_name (struct collect_info *info,
4210 			 const lookup_name_info &name,
4211 			 struct program_space *search_pspace,
4212 			 struct symtab *symtab)
4213 {
4214   std::vector<struct bound_minimal_symbol> minsyms;
4215 
4216   if (symtab == NULL)
4217     {
4218       for (struct program_space *pspace : program_spaces)
4219 	{
4220 	  if (search_pspace != NULL && search_pspace != pspace)
4221 	    continue;
4222 	  if (pspace->executing_startup)
4223 	    continue;
4224 
4225 	  set_current_program_space (pspace);
4226 
4227 	  for (objfile *objfile : current_program_space->objfiles ())
4228 	    {
4229 	      iterate_over_minimal_symbols (objfile, name,
4230 					    [&] (struct minimal_symbol *msym)
4231 					    {
4232 					      add_minsym (msym, objfile, nullptr,
4233 							  info->state->list_mode,
4234 							  &minsyms);
4235 					      return false;
4236 					    });
4237 	    }
4238 	}
4239     }
4240   else
4241     {
4242       program_space *pspace = symtab->compunit ()->objfile ()->pspace;
4243 
4244       if (search_pspace == NULL || pspace == search_pspace)
4245 	{
4246 	  set_current_program_space (pspace);
4247 	  iterate_over_minimal_symbols
4248 	    (symtab->compunit ()->objfile (), name,
4249 	     [&] (struct minimal_symbol *msym)
4250 	       {
4251 		 add_minsym (msym, symtab->compunit ()->objfile (), symtab,
4252 			     info->state->list_mode, &minsyms);
4253 		 return false;
4254 	       });
4255 	}
4256     }
4257 
4258   /* Return true if TYPE is a static symbol.  */
4259   auto msymbol_type_is_static = [] (enum minimal_symbol_type type)
4260     {
4261       switch (type)
4262 	{
4263 	case mst_file_text:
4264 	case mst_file_data:
4265 	case mst_file_bss:
4266 	return true;
4267 	default:
4268 	return false;
4269 	}
4270     };
4271 
4272   /* Add minsyms to the result set, but filter out trampoline symbols
4273      if we also found extern symbols with the same name.  I.e., don't
4274      set a breakpoint on both '<foo@plt>' and 'foo', assuming that
4275      'foo' is the symbol that the plt resolves to.  */
4276   for (const bound_minimal_symbol &item : minsyms)
4277     {
4278       bool skip = false;
4279       if (item.minsym->type () == mst_solib_trampoline)
4280 	{
4281 	  for (const bound_minimal_symbol &item2 : minsyms)
4282 	    {
4283 	      if (&item2 == &item)
4284 		continue;
4285 
4286 	      /* Trampoline symbols can only jump to exported
4287 		 symbols.  */
4288 	      if (msymbol_type_is_static (item2.minsym->type ()))
4289 		continue;
4290 
4291 	      if (strcmp (item.minsym->linkage_name (),
4292 			  item2.minsym->linkage_name ()) != 0)
4293 		continue;
4294 
4295 	      /* Found a global minsym with the same name as the
4296 		 trampoline.  Don't create a location for this
4297 		 trampoline.  */
4298 	      skip = true;
4299 	      break;
4300 	    }
4301 	}
4302 
4303       if (!skip)
4304 	info->result.minimal_symbols->push_back (item);
4305     }
4306 }
4307 
4308 /* A helper function to add all symbols matching NAME to INFO.  If
4309    PSPACE is not NULL, the search is restricted to just that program
4310    space.  */
4311 
4312 static void
4313 add_matching_symbols_to_info (const char *name,
4314 			      symbol_name_match_type name_match_type,
4315 			      enum search_domain search_domain,
4316 			      struct collect_info *info,
4317 			      struct program_space *pspace)
4318 {
4319   lookup_name_info lookup_name (name, name_match_type);
4320 
4321   for (const auto &elt : *info->file_symtabs)
4322     {
4323       if (elt == nullptr)
4324 	{
4325 	  iterate_over_all_matching_symtabs (info->state, lookup_name,
4326 					     VAR_DOMAIN, search_domain,
4327 					     pspace, true,
4328 					     [&] (block_symbol *bsym)
4329 	    { return info->add_symbol (bsym); });
4330 	  search_minsyms_for_name (info, lookup_name, pspace, NULL);
4331 	}
4332       else if (pspace == NULL || pspace == elt->compunit ()->objfile ()->pspace)
4333 	{
4334 	  int prev_len = info->result.symbols->size ();
4335 
4336 	  /* Program spaces that are executing startup should have
4337 	     been filtered out earlier.  */
4338 	  program_space *elt_pspace = elt->compunit ()->objfile ()->pspace;
4339 	  gdb_assert (!elt_pspace->executing_startup);
4340 	  set_current_program_space (elt_pspace);
4341 	  iterate_over_file_blocks (elt, lookup_name, VAR_DOMAIN,
4342 				    [&] (block_symbol *bsym)
4343 	    { return info->add_symbol (bsym); });
4344 
4345 	  /* If no new symbols were found in this iteration and this symtab
4346 	     is in assembler, we might actually be looking for a label for
4347 	     which we don't have debug info.  Check for a minimal symbol in
4348 	     this case.  */
4349 	  if (prev_len == info->result.symbols->size ()
4350 	      && elt->language () == language_asm)
4351 	    search_minsyms_for_name (info, lookup_name, pspace, elt);
4352 	}
4353     }
4354 }
4355 
4356 
4357 
4358 /* Now come some functions that are called from multiple places within
4359    decode_line_1.  */
4360 
4361 static int
4362 symbol_to_sal (struct symtab_and_line *result,
4363 	       int funfirstline, struct symbol *sym)
4364 {
4365   if (sym->aclass () == LOC_BLOCK)
4366     {
4367       *result = find_function_start_sal (sym, funfirstline);
4368       return 1;
4369     }
4370   else
4371     {
4372       if (sym->aclass () == LOC_LABEL && sym->value_address () != 0)
4373 	{
4374 	  *result = {};
4375 	  result->symtab = sym->symtab ();
4376 	  result->symbol = sym;
4377 	  result->line = sym->line ();
4378 	  result->pc = sym->value_address ();
4379 	  result->pspace = result->symtab->compunit ()->objfile ()->pspace;
4380 	  result->explicit_pc = 1;
4381 	  return 1;
4382 	}
4383       else if (funfirstline)
4384 	{
4385 	  /* Nothing.  */
4386 	}
4387       else if (sym->line () != 0)
4388 	{
4389 	  /* We know its line number.  */
4390 	  *result = {};
4391 	  result->symtab = sym->symtab ();
4392 	  result->symbol = sym;
4393 	  result->line = sym->line ();
4394 	  result->pc = sym->value_address ();
4395 	  result->pspace = result->symtab->compunit ()->objfile ()->pspace;
4396 	  return 1;
4397 	}
4398     }
4399 
4400   return 0;
4401 }
4402 
4403 linespec_result::~linespec_result ()
4404 {
4405   for (linespec_sals &lsal : lsals)
4406     xfree (lsal.canonical);
4407 }
4408 
4409 /* Return the quote characters permitted by the linespec parser.  */
4410 
4411 const char *
4412 get_gdb_linespec_parser_quote_characters (void)
4413 {
4414   return linespec_quote_characters;
4415 }
4416