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