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