2011-05-24 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
[deliverable/binutils-gdb.git] / gdb / linespec.c
CommitLineData
50641945 1/* Parser for linespec for the GNU debugger, GDB.
05ff989b 2
6aba47ca 3 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
0fb0cc75 4 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
7b6bb8da 5 2009, 2010, 2011 Free Software Foundation, Inc.
50641945
FN
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
50641945
FN
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
50641945
FN
21
22#include "defs.h"
23#include "symtab.h"
c5f0f3d0
FN
24#include "frame.h"
25#include "command.h"
50641945
FN
26#include "symfile.h"
27#include "objfiles.h"
0378c332 28#include "source.h"
50641945 29#include "demangle.h"
c5f0f3d0
FN
30#include "value.h"
31#include "completer.h"
015a42b4 32#include "cp-abi.h"
12907978 33#include "cp-support.h"
c38da1af 34#include "parser-defs.h"
fe898f56 35#include "block.h"
d2630e69 36#include "objc-lang.h"
b9362cc7 37#include "linespec.h"
05ff989b 38#include "exceptions.h"
53c5240f 39#include "language.h"
dc67126b
NR
40#include "interps.h"
41#include "mi/mi-cmds.h"
bccdca4a 42#include "target.h"
94af9270 43#include "arch-utils.h"
c00f8484
KS
44#include <ctype.h>
45#include "cli/cli-utils.h"
50641945 46
1777feb0 47/* We share this one with symtab.c, but it is not exported widely. */
50641945
FN
48
49extern char *operator_chars (char *, char **);
50
1777feb0 51/* Prototypes for local functions. */
50641945 52
44fe14ab
DC
53static void initialize_defaults (struct symtab **default_symtab,
54 int *default_line);
55
56static struct symtabs_and_lines decode_indirect (char **argptr);
57
0960f083
DC
58static char *locate_first_half (char **argptr, int *is_quote_enclosed);
59
d2630e69
AF
60static struct symtabs_and_lines decode_objc (char **argptr,
61 int funfirstline,
62 struct symtab *file_symtab,
7efd8fc2 63 struct linespec_result *canonical,
d2630e69
AF
64 char *saved_arg);
65
614b3b14
DC
66static struct symtabs_and_lines decode_compound (char **argptr,
67 int funfirstline,
7efd8fc2 68 struct linespec_result *canonical,
614b3b14 69 char *saved_arg,
58438ac1 70 char *p);
614b3b14 71
93d91629
DC
72static struct symbol *lookup_prefix_sym (char **argptr, char *p);
73
4224873a 74static struct symtabs_and_lines find_method (int funfirstline,
7efd8fc2 75 struct linespec_result *canonical,
4224873a
DC
76 char *saved_arg,
77 char *copy,
78 struct type *t,
58438ac1 79 struct symbol *sym_class);
4224873a 80
c25c4a8b
JK
81static void cplusplus_error (const char *name, const char *fmt, ...)
82 ATTRIBUTE_NORETURN ATTRIBUTE_PRINTF (2, 3);
50641945
FN
83
84static int total_number_of_methods (struct type *type);
85
53c5240f
PA
86static int find_methods (struct type *, char *,
87 enum language, struct symbol **);
50641945 88
aee8d8ba 89static int add_matching_methods (int method_counter, struct type *t,
53c5240f 90 enum language language,
aee8d8ba
DC
91 struct symbol **sym_arr);
92
93static int add_constructors (int method_counter, struct type *t,
53c5240f 94 enum language language,
aee8d8ba
DC
95 struct symbol **sym_arr);
96
50641945 97static void build_canonical_line_spec (struct symtab_and_line *,
7efd8fc2 98 char *, struct linespec_result *);
50641945
FN
99
100static char *find_toplevel_char (char *s, char c);
101
889f28e2
AF
102static int is_objc_method_format (const char *s);
103
50641945 104static struct symtabs_and_lines decode_line_2 (struct symbol *[],
7efd8fc2
TT
105 int, int,
106 struct linespec_result *);
50641945 107
f3c39e76 108static struct symtab *symtab_from_filename (char **argptr,
58438ac1 109 char *p, int is_quote_enclosed);
f3c39e76 110
9ef07c8c
TT
111static struct symbol *find_function_symbol (char **argptr, char *p,
112 int is_quote_enclosed);
113
84fba31b
DC
114static struct
115symtabs_and_lines decode_all_digits (char **argptr,
116 struct symtab *default_symtab,
117 int default_line,
7efd8fc2 118 struct linespec_result *canonical,
88d262ca 119 struct symtab *file_symtab,
84fba31b
DC
120 char *q);
121
14e91ac5
DC
122static struct symtabs_and_lines decode_dollar (char *copy,
123 int funfirstline,
124 struct symtab *default_symtab,
7efd8fc2 125 struct linespec_result *canonical,
88d262ca 126 struct symtab *file_symtab);
14e91ac5 127
9ef07c8c
TT
128static int decode_label (struct symbol *function_symbol,
129 char *copy, struct linespec_result *canonical,
0f5238ed
TT
130 struct symtabs_and_lines *result);
131
bca02a8a
DC
132static struct symtabs_and_lines decode_variable (char *copy,
133 int funfirstline,
7efd8fc2 134 struct linespec_result *canonical,
58438ac1 135 struct symtab *file_symtab);
bca02a8a 136
413dad4d
DC
137static struct
138symtabs_and_lines symbol_found (int funfirstline,
7efd8fc2 139 struct linespec_result *canonical,
413dad4d
DC
140 char *copy,
141 struct symbol *sym,
9ef07c8c
TT
142 struct symtab *file_symtab,
143 struct symbol *function_symbol);
413dad4d
DC
144
145static struct
146symtabs_and_lines minsym_found (int funfirstline,
147 struct minimal_symbol *msymbol);
148
1777feb0 149/* Helper functions. */
50641945 150
255e7dbf
AC
151/* Issue a helpful hint on using the command completion feature on
152 single quoted demangled C++ symbols as part of the completion
153 error. */
50641945 154
c25c4a8b 155static void
255e7dbf 156cplusplus_error (const char *name, const char *fmt, ...)
50641945 157{
255e7dbf 158 struct ui_file *tmp_stream;
f3a5f1de 159 char *message;
e0881a8e 160
255e7dbf
AC
161 tmp_stream = mem_fileopen ();
162 make_cleanup_ui_file_delete (tmp_stream);
163
164 {
165 va_list args;
e0881a8e 166
255e7dbf
AC
167 va_start (args, fmt);
168 vfprintf_unfiltered (tmp_stream, fmt, args);
169 va_end (args);
170 }
171
50641945
FN
172 while (*name == '\'')
173 name++;
255e7dbf
AC
174 fprintf_unfiltered (tmp_stream,
175 ("Hint: try '%s<TAB> or '%s<ESC-?>\n"
176 "(Note leading single quote.)"),
177 name, name);
f3a5f1de 178
759ef836
PA
179 message = ui_file_xstrdup (tmp_stream, NULL);
180 make_cleanup (xfree, message);
181 throw_error (NOT_FOUND_ERROR, "%s", message);
50641945
FN
182}
183
184/* Return the number of methods described for TYPE, including the
1777feb0 185 methods from types it derives from. This can't be done in the symbol
50641945
FN
186 reader because the type of the baseclass might still be stubbed
187 when the definition of the derived class is parsed. */
188
189static int
190total_number_of_methods (struct type *type)
191{
192 int n;
193 int count;
194
195 CHECK_TYPEDEF (type);
b4ba55a1 196 if (! HAVE_CPLUS_STRUCT (type))
50641945
FN
197 return 0;
198 count = TYPE_NFN_FIELDS_TOTAL (type);
199
200 for (n = 0; n < TYPE_N_BASECLASSES (type); n++)
201 count += total_number_of_methods (TYPE_BASECLASS (type, n));
202
203 return count;
204}
205
206/* Recursive helper function for decode_line_1.
207 Look for methods named NAME in type T.
208 Return number of matches.
209 Put matches in SYM_ARR, which should have been allocated with
210 a size of total_number_of_methods (T) * sizeof (struct symbol *).
211 Note that this function is g++ specific. */
212
213static int
53c5240f
PA
214find_methods (struct type *t, char *name, enum language language,
215 struct symbol **sym_arr)
50641945
FN
216{
217 int i1 = 0;
218 int ibase;
50641945 219 char *class_name = type_name_no_tag (t);
c00f8484
KS
220 struct cleanup *cleanup;
221 char *canon;
222
223 /* NAME is typed by the user: it needs to be canonicalized before
224 passing to lookup_symbol. */
225 canon = cp_canonicalize_string (name);
226 if (canon != NULL)
227 {
228 name = canon;
229 cleanup = make_cleanup (xfree, name);
230 }
231 else
232 cleanup = make_cleanup (null_cleanup, NULL);
50641945
FN
233
234 /* Ignore this class if it doesn't have a name. This is ugly, but
235 unless we figure out how to get the physname without the name of
236 the class, then the loop can't do any good. */
237 if (class_name
53c5240f 238 && (lookup_symbol_in_language (class_name, (struct block *) NULL,
2570f2b7 239 STRUCT_DOMAIN, language, (int *) NULL)))
50641945
FN
240 {
241 int method_counter;
5c717440 242 int name_len = strlen (name);
50641945 243
8bd1f2c6 244 CHECK_TYPEDEF (t);
50641945
FN
245
246 /* Loop over each method name. At this level, all overloads of a name
247 are counted as a single name. There is an inner loop which loops over
248 each overload. */
249
250 for (method_counter = TYPE_NFN_FIELDS (t) - 1;
251 method_counter >= 0;
252 --method_counter)
253 {
50641945
FN
254 char *method_name = TYPE_FN_FIELDLIST_NAME (t, method_counter);
255 char dem_opname[64];
256
257 if (strncmp (method_name, "__", 2) == 0 ||
258 strncmp (method_name, "op", 2) == 0 ||
259 strncmp (method_name, "type", 4) == 0)
260 {
261 if (cplus_demangle_opname (method_name, dem_opname, DMGL_ANSI))
262 method_name = dem_opname;
263 else if (cplus_demangle_opname (method_name, dem_opname, 0))
264 method_name = dem_opname;
265 }
266
13b57657 267 if (strcmp_iw (name, method_name) == 0)
50641945 268 /* Find all the overloaded methods with that name. */
53c5240f 269 i1 += add_matching_methods (method_counter, t, language,
aee8d8ba 270 sym_arr + i1);
5c717440
DJ
271 else if (strncmp (class_name, name, name_len) == 0
272 && (class_name[name_len] == '\0'
273 || class_name[name_len] == '<'))
53c5240f 274 i1 += add_constructors (method_counter, t, language,
aee8d8ba 275 sym_arr + i1);
50641945
FN
276 }
277 }
278
279 /* Only search baseclasses if there is no match yet, since names in
280 derived classes override those in baseclasses.
281
282 FIXME: The above is not true; it is only true of member functions
283 if they have the same number of arguments (??? - section 13.1 of the
284 ARM says the function members are not in the same scope but doesn't
285 really spell out the rules in a way I understand. In any case, if
286 the number of arguments differ this is a case in which we can overload
287 rather than hiding without any problem, and gcc 2.4.5 does overload
288 rather than hiding in this case). */
289
290 if (i1 == 0)
291 for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
53c5240f
PA
292 i1 += find_methods (TYPE_BASECLASS (t, ibase), name,
293 language, sym_arr + i1);
50641945 294
c00f8484 295 do_cleanups (cleanup);
50641945
FN
296 return i1;
297}
298
aee8d8ba
DC
299/* Add the symbols associated to methods of the class whose type is T
300 and whose name matches the method indexed by METHOD_COUNTER in the
301 array SYM_ARR. Return the number of methods added. */
302
303static int
304add_matching_methods (int method_counter, struct type *t,
53c5240f 305 enum language language, struct symbol **sym_arr)
aee8d8ba
DC
306{
307 int field_counter;
308 int i1 = 0;
309
310 for (field_counter = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
311 field_counter >= 0;
312 --field_counter)
313 {
314 struct fn_field *f;
1d06ead6 315 const char *phys_name;
aee8d8ba
DC
316
317 f = TYPE_FN_FIELDLIST1 (t, method_counter);
318
319 if (TYPE_FN_FIELD_STUB (f, field_counter))
320 {
1d06ead6 321 char *tmp_name, *tmp2;
aee8d8ba
DC
322
323 tmp_name = gdb_mangle_name (t,
324 method_counter,
325 field_counter);
1d06ead6
TT
326 tmp2 = alloca (strlen (tmp_name) + 1);
327 strcpy (tmp2, tmp_name);
aee8d8ba 328 xfree (tmp_name);
1d06ead6 329 phys_name = tmp2;
aee8d8ba
DC
330 }
331 else
332 phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
53c5240f 333
53c5240f 334 sym_arr[i1] = lookup_symbol_in_language (phys_name,
aee8d8ba 335 NULL, VAR_DOMAIN,
53c5240f 336 language,
2570f2b7 337 (int *) NULL);
aee8d8ba
DC
338 if (sym_arr[i1])
339 i1++;
340 else
341 {
342 /* This error message gets printed, but the method
1777feb0 343 still seems to be found.
aee8d8ba
DC
344 fputs_filtered("(Cannot find method ", gdb_stdout);
345 fprintf_symbol_filtered (gdb_stdout, phys_name,
1777feb0
MS
346 language_cplus,
347 DMGL_PARAMS | DMGL_ANSI);
aee8d8ba
DC
348 fputs_filtered(" - possibly inlined.)\n", gdb_stdout);
349 */
350 }
351 }
352
353 return i1;
354}
355
356/* Add the symbols associated to constructors of the class whose type
357 is CLASS_TYPE and which are indexed by by METHOD_COUNTER to the
358 array SYM_ARR. Return the number of methods added. */
359
360static int
361add_constructors (int method_counter, struct type *t,
53c5240f 362 enum language language, struct symbol **sym_arr)
aee8d8ba
DC
363{
364 int field_counter;
365 int i1 = 0;
366
367 /* For GCC 3.x and stabs, constructors and destructors
368 have names like __base_ctor and __complete_dtor.
369 Check the physname for now if we're looking for a
370 constructor. */
371 for (field_counter
372 = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
373 field_counter >= 0;
374 --field_counter)
375 {
376 struct fn_field *f;
1d06ead6 377 const char *phys_name;
53c5240f 378
aee8d8ba
DC
379 f = TYPE_FN_FIELDLIST1 (t, method_counter);
380
381 /* GCC 3.x will never produce stabs stub methods, so
382 we don't need to handle this case. */
383 if (TYPE_FN_FIELD_STUB (f, field_counter))
384 continue;
385 phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
386 if (! is_constructor_name (phys_name))
387 continue;
388
389 /* If this method is actually defined, include it in the
390 list. */
53c5240f 391 sym_arr[i1] = lookup_symbol_in_language (phys_name,
aee8d8ba 392 NULL, VAR_DOMAIN,
53c5240f 393 language,
2570f2b7 394 (int *) NULL);
aee8d8ba
DC
395 if (sym_arr[i1])
396 i1++;
397 }
398
399 return i1;
400}
401
50641945
FN
402/* Helper function for decode_line_1.
403 Build a canonical line spec in CANONICAL if it is non-NULL and if
404 the SAL has a symtab.
405 If SYMNAME is non-NULL the canonical line spec is `filename:symname'.
406 If SYMNAME is NULL the line number from SAL is used and the canonical
407 line spec is `filename:linenum'. */
408
409static void
410build_canonical_line_spec (struct symtab_and_line *sal, char *symname,
7efd8fc2 411 struct linespec_result *canonical)
50641945
FN
412{
413 char **canonical_arr;
414 char *canonical_name;
415 char *filename;
416 struct symtab *s = sal->symtab;
417
418 if (s == (struct symtab *) NULL
419 || s->filename == (char *) NULL
7efd8fc2 420 || canonical == NULL)
50641945
FN
421 return;
422
423 canonical_arr = (char **) xmalloc (sizeof (char *));
7efd8fc2 424 canonical->canonical = canonical_arr;
50641945
FN
425
426 filename = s->filename;
427 if (symname != NULL)
428 {
429 canonical_name = xmalloc (strlen (filename) + strlen (symname) + 2);
430 sprintf (canonical_name, "%s:%s", filename, symname);
431 }
432 else
433 {
434 canonical_name = xmalloc (strlen (filename) + 30);
435 sprintf (canonical_name, "%s:%d", filename, sal->line);
436 }
437 canonical_arr[0] = canonical_name;
438}
439
440
441
442/* Find an instance of the character C in the string S that is outside
443 of all parenthesis pairs, single-quoted strings, and double-quoted
8120c9d5
EZ
444 strings. Also, ignore the char within a template name, like a ','
445 within foo<int, int>. */
446
50641945
FN
447static char *
448find_toplevel_char (char *s, char c)
449{
450 int quoted = 0; /* zero if we're not in quotes;
451 '"' if we're in a double-quoted string;
452 '\'' if we're in a single-quoted string. */
a04257e6 453 int depth = 0; /* Number of unclosed parens we've seen. */
50641945
FN
454 char *scan;
455
456 for (scan = s; *scan; scan++)
457 {
458 if (quoted)
459 {
460 if (*scan == quoted)
461 quoted = 0;
462 else if (*scan == '\\' && *(scan + 1))
463 scan++;
464 }
465 else if (*scan == c && ! quoted && depth == 0)
466 return scan;
467 else if (*scan == '"' || *scan == '\'')
468 quoted = *scan;
8120c9d5 469 else if (*scan == '(' || *scan == '<')
50641945 470 depth++;
8120c9d5 471 else if ((*scan == ')' || *scan == '>') && depth > 0)
50641945
FN
472 depth--;
473 }
474
475 return 0;
476}
477
889f28e2 478/* Determines if the gives string corresponds to an Objective-C method
1777feb0 479 representation, such as -[Foo bar:] or +[Foo bar]. Objective-C symbols
889f28e2
AF
480 are allowed to have spaces and parentheses in them. */
481
482static int
483is_objc_method_format (const char *s)
484{
485 if (s == NULL || *s == '\0')
486 return 0;
487 /* Handle arguments with the format FILENAME:SYMBOL. */
488 if ((s[0] == ':') && (strchr ("+-", s[1]) != NULL)
489 && (s[2] == '[') && strchr(s, ']'))
490 return 1;
491 /* Handle arguments that are just SYMBOL. */
492 else if ((strchr ("+-", s[0]) != NULL) && (s[1] == '[') && strchr(s, ']'))
493 return 1;
494 return 0;
495}
496
50641945
FN
497/* Given a list of NELTS symbols in SYM_ARR, return a list of lines to
498 operate on (ask user if necessary).
499 If CANONICAL is non-NULL return a corresponding array of mangled names
500 as canonical line specs there. */
501
502static struct symtabs_and_lines
503decode_line_2 (struct symbol *sym_arr[], int nelts, int funfirstline,
7efd8fc2 504 struct linespec_result *canonical)
50641945
FN
505{
506 struct symtabs_and_lines values, return_values;
507 char *args, *arg1;
508 int i;
509 char *prompt;
510 char *symname;
511 struct cleanup *old_chain;
512 char **canonical_arr = (char **) NULL;
717d2f5a 513 const char *select_mode = multiple_symbols_select_mode ();
50641945 514
717d2f5a 515 if (select_mode == multiple_symbols_cancel)
3e43a32a
MS
516 error (_("canceled because the command is ambiguous\n"
517 "See set/show multiple-symbol."));
717d2f5a 518
50641945
FN
519 values.sals = (struct symtab_and_line *)
520 alloca (nelts * sizeof (struct symtab_and_line));
521 return_values.sals = (struct symtab_and_line *)
522 xmalloc (nelts * sizeof (struct symtab_and_line));
b8c9b27d 523 old_chain = make_cleanup (xfree, return_values.sals);
50641945
FN
524
525 if (canonical)
526 {
527 canonical_arr = (char **) xmalloc (nelts * sizeof (char *));
b8c9b27d 528 make_cleanup (xfree, canonical_arr);
50641945 529 memset (canonical_arr, 0, nelts * sizeof (char *));
7efd8fc2 530 canonical->canonical = canonical_arr;
50641945
FN
531 }
532
533 i = 0;
50641945
FN
534 while (i < nelts)
535 {
a04257e6 536 init_sal (&return_values.sals[i]); /* Initialize to zeroes. */
fe39c653 537 init_sal (&values.sals[i]);
50641945 538 if (sym_arr[i] && SYMBOL_CLASS (sym_arr[i]) == LOC_BLOCK)
717d2f5a 539 values.sals[i] = find_function_start_sal (sym_arr[i], funfirstline);
50641945
FN
540 i++;
541 }
542
717d2f5a
JB
543 /* If select_mode is "all", then do not print the multiple-choice
544 menu and act as if the user had chosen choice "1" (all). */
dc67126b
NR
545 if (select_mode == multiple_symbols_all
546 || ui_out_is_mi_like_p (interp_ui_out (top_level_interpreter ())))
717d2f5a
JB
547 args = "1";
548 else
50641945 549 {
717d2f5a
JB
550 i = 0;
551 printf_unfiltered (_("[0] cancel\n[1] all\n"));
552 while (i < nelts)
553 {
554 if (sym_arr[i] && SYMBOL_CLASS (sym_arr[i]) == LOC_BLOCK)
555 {
556 if (values.sals[i].symtab)
557 printf_unfiltered ("[%d] %s at %s:%d\n",
558 (i + 2),
559 SYMBOL_PRINT_NAME (sym_arr[i]),
560 values.sals[i].symtab->filename,
561 values.sals[i].line);
562 else
3e43a32a
MS
563 printf_unfiltered (_("[%d] %s at ?FILE:%d [No symtab? "
564 "Probably broken debug info...]\n"),
717d2f5a
JB
565 (i + 2),
566 SYMBOL_PRINT_NAME (sym_arr[i]),
567 values.sals[i].line);
568
569 }
570 else
571 printf_unfiltered (_("?HERE\n"));
572 i++;
573 }
574
575 prompt = getenv ("PS2");
576 if (prompt == NULL)
577 {
578 prompt = "> ";
579 }
580 args = command_line_input (prompt, 0, "overload-choice");
50641945 581 }
50641945
FN
582
583 if (args == 0 || *args == 0)
e2e0b3e5 584 error_no_arg (_("one or more choice numbers"));
50641945
FN
585
586 i = 0;
587 while (*args)
588 {
589 int num;
590
591 arg1 = args;
592 while (*arg1 >= '0' && *arg1 <= '9')
593 arg1++;
594 if (*arg1 && *arg1 != ' ' && *arg1 != '\t')
8a3fe4f8 595 error (_("Arguments must be choice numbers."));
50641945
FN
596
597 num = atoi (args);
598
599 if (num == 0)
8a3fe4f8 600 error (_("canceled"));
50641945
FN
601 else if (num == 1)
602 {
603 if (canonical_arr)
604 {
605 for (i = 0; i < nelts; i++)
606 {
607 if (canonical_arr[i] == NULL)
608 {
3567439c 609 symname = SYMBOL_LINKAGE_NAME (sym_arr[i]);
1b36a34b 610 canonical_arr[i] = xstrdup (symname);
50641945
FN
611 }
612 }
613 }
614 memcpy (return_values.sals, values.sals,
615 (nelts * sizeof (struct symtab_and_line)));
616 return_values.nelts = nelts;
617 discard_cleanups (old_chain);
618 return return_values;
619 }
620
621 if (num >= nelts + 2)
622 {
a3f17187 623 printf_unfiltered (_("No choice number %d.\n"), num);
50641945
FN
624 }
625 else
626 {
627 num -= 2;
628 if (values.sals[num].pc)
629 {
630 if (canonical_arr)
631 {
3567439c 632 symname = SYMBOL_LINKAGE_NAME (sym_arr[num]);
b8c9b27d 633 make_cleanup (xfree, symname);
1b36a34b 634 canonical_arr[i] = xstrdup (symname);
50641945
FN
635 }
636 return_values.sals[i++] = values.sals[num];
637 values.sals[num].pc = 0;
638 }
639 else
640 {
3e43a32a
MS
641 printf_unfiltered (_("duplicate request for %d ignored.\n"),
642 num);
50641945
FN
643 }
644 }
645
646 args = arg1;
647 while (*args == ' ' || *args == '\t')
648 args++;
649 }
650 return_values.nelts = i;
651 discard_cleanups (old_chain);
652 return return_values;
653}
94af9270
KS
654
655/* A helper function for decode_line_1 and friends which skips P
656 past any method overload information at the beginning of P, e.g.,
657 "(const struct foo *)".
658
659 This function assumes that P has already been validated to contain
660 overload information, and it will assert if *P != '('. */
661static char *
662find_method_overload_end (char *p)
663{
664 int depth = 0;
665
666 gdb_assert (*p == '(');
667
668 while (*p)
669 {
670 if (*p == '(')
671 ++depth;
672 else if (*p == ')')
673 {
674 if (--depth == 0)
675 {
676 ++p;
677 break;
678 }
679 }
680 ++p;
681 }
682
683 return p;
684}
c00f8484
KS
685
686/* Does P point to a sequence of characters which implies the end
687 of a name? Terminals include "if" and "thread" clauses. */
688
689static int
690name_end (char *p)
691{
692 while (isspace (*p))
693 ++p;
694 if (*p == 'i' && p[1] == 'f'
695 && (isspace (p[2]) || p[2] == '\0' || p[2] == '('))
696 return 1;
697
698 if (strncmp (p, "thread", 6) == 0
699 && (isspace (p[6]) || p[6] == '\0'))
700 return 1;
701
702 return 0;
703}
704
705/* Keep important information used when looking up a name. This includes
706 template parameters, overload information, and important keywords. */
707
708static char *
709keep_name_info (char *ptr)
710{
711 char *p = ptr;
712 char *start = ptr;
713
714 /* Keep any template parameters. */
715 if (name_end (ptr))
716 return remove_trailing_whitespace (start, ptr);
717
718 while (isspace (*p))
719 ++p;
720 if (*p == '<')
721 ptr = p = find_template_name_end (ptr);
722
723 if (name_end (ptr))
724 return remove_trailing_whitespace (start, ptr);
725
726 /* Keep method overload information. */
727 if (*p == '(')
728 ptr = p = find_method_overload_end (p);
729
730 if (name_end (ptr))
731 return remove_trailing_whitespace (start, ptr);
732
733 /* Keep important keywords. */
734 while (isspace (*p))
735 ++p;
736 if (strncmp (p, "const", 5) == 0
737 && (isspace (p[5]) || p[5] == '\0'
738 || strchr (get_gdb_completer_quote_characters (), p[5]) != NULL))
739 ptr = p = p + 5;
740
741 return remove_trailing_whitespace (start, ptr);
742}
743
50641945 744\f
1777feb0 745/* The parser of linespec itself. */
50641945
FN
746
747/* Parse a string that specifies a line number.
748 Pass the address of a char * variable; that variable will be
749 advanced over the characters actually parsed.
750
751 The string can be:
752
753 LINENUM -- that line number in current file. PC returned is 0.
754 FILE:LINENUM -- that line in that file. PC returned is 0.
755 FUNCTION -- line number of openbrace of that function.
756 PC returned is the start of the function.
0f5238ed 757 LABEL -- a label in the current scope
50641945
FN
758 VARIABLE -- line number of definition of that variable.
759 PC returned is 0.
760 FILE:FUNCTION -- likewise, but prefer functions in that file.
761 *EXPR -- line in which address EXPR appears.
762
763 This may all be followed by an "if EXPR", which we ignore.
764
765 FUNCTION may be an undebuggable function found in minimal symbol table.
766
767 If the argument FUNFIRSTLINE is nonzero, we want the first line
768 of real code inside a function when a function is specified, and it is
769 not OK to specify a variable or type to get its line number.
770
771 DEFAULT_SYMTAB specifies the file to use if none is specified.
772 It defaults to current_source_symtab.
773 DEFAULT_LINE specifies the line number to use for relative
774 line numbers (that start with signs). Defaults to current_source_line.
775 If CANONICAL is non-NULL, store an array of strings containing the canonical
1777feb0 776 line specs there if necessary. Currently overloaded member functions and
50641945 777 line numbers or static functions without a filename yield a canonical
1777feb0 778 line spec. The array and the line spec strings are allocated on the heap,
50641945
FN
779 it is the callers responsibility to free them.
780
781 Note that it is possible to return zero for the symtab
782 if no file is validly specified. Callers must check that.
58438ac1 783 Also, the line number returned may be invalid. */
50641945
FN
784
785/* We allow single quotes in various places. This is a hideous
786 kludge, which exists because the completer can't yet deal with the
787 lack of single quotes. FIXME: write a linespec_completer which we
788 can use as appropriate instead of make_symbol_completion_list. */
789
790struct symtabs_and_lines
791decode_line_1 (char **argptr, int funfirstline, struct symtab *default_symtab,
58438ac1 792 int default_line, struct linespec_result *canonical)
50641945 793{
f3c39e76 794 char *p;
614b3b14 795 char *q;
88d262ca
DC
796 /* If a file name is specified, this is its symtab. */
797 struct symtab *file_symtab = NULL;
50641945 798
50641945 799 char *copy;
636b1a6d
DC
800 /* This says whether or not something in *ARGPTR is quoted with
801 completer_quotes (i.e. with single quotes). */
e325fb69 802 int is_quoted;
0e0b460e 803 /* Is *ARGPTR is enclosed in double quotes? */
50641945 804 int is_quote_enclosed;
d2630e69 805 int is_objc_method = 0;
50641945 806 char *saved_arg = *argptr;
791dfb64
DJ
807 /* If IS_QUOTED, the end of the quoted bit. */
808 char *end_quote = NULL;
0e0b460e
KS
809 /* The "first half" of the linespec. */
810 char *first_half;
50641945 811
9ef07c8c
TT
812 /* If we are parsing `function:label', this holds the symbol for the
813 function. */
814 struct symbol *function_symbol = NULL;
815 /* If FUNCTION_SYMBOL is not NULL, then this is the exception that
816 was thrown when trying to parse a filename. */
817 volatile struct gdb_exception file_exception;
818
50641945
FN
819 /* Defaults have defaults. */
820
44fe14ab
DC
821 initialize_defaults (&default_symtab, &default_line);
822
a04257e6 823 /* See if arg is *PC. */
50641945 824
e325fb69
MS
825 if (**argptr == '*')
826 return decode_indirect (argptr);
5f01dbc0 827
e325fb69
MS
828 is_quoted = (strchr (get_gdb_completer_quote_characters (),
829 **argptr) != NULL);
50641945 830
791dfb64
DJ
831 if (is_quoted)
832 end_quote = skip_quoted (*argptr);
50641945 833
0960f083
DC
834 /* Check to see if it's a multipart linespec (with colons or
835 periods). */
50641945 836
17763fd9
EZ
837 /* Locate the end of the first half of the linespec.
838 After the call, for instance, if the argptr string is "foo.c:123"
839 p will point at "123". If there is only one part, like "foo", p
1777feb0
MS
840 will point to "". If this is a C++ name, like "A::B::foo", p will
841 point to "::B::foo". Argptr is not changed by this call. */
50641945 842
0e0b460e 843 first_half = p = locate_first_half (argptr, &is_quote_enclosed);
50641945 844
d2630e69
AF
845 /* Check if this is an Objective-C method (anything that starts with
846 a '+' or '-' and a '['). */
889f28e2 847 if (is_objc_method_format (p))
94af9270 848 is_objc_method = 1;
d2630e69
AF
849
850 /* Check if the symbol could be an Objective-C selector. */
851
852 {
853 struct symtabs_and_lines values;
e0881a8e 854
d2630e69
AF
855 values = decode_objc (argptr, funfirstline, NULL,
856 canonical, saved_arg);
857 if (values.sals != NULL)
858 return values;
859 }
860
0960f083 861 /* Does it look like there actually were two parts? */
50641945 862
791dfb64 863 if (p[0] == ':' || p[0] == '.')
50641945 864 {
17763fd9
EZ
865 /* Is it a C++ or Java compound data structure?
866 The check on p[1] == ':' is capturing the case of "::",
1777feb0 867 since p[0]==':' was checked above.
17763fd9
EZ
868 Note that the call to decode_compound does everything
869 for us, including the lookup on the symbol table, so we
1777feb0 870 can return now. */
17763fd9 871
50641945 872 if (p[0] == '.' || p[1] == ':')
791dfb64 873 {
94af9270
KS
874 struct symtabs_and_lines values;
875
876 if (is_quote_enclosed)
877 ++saved_arg;
878 values = decode_compound (argptr, funfirstline, canonical,
58438ac1 879 saved_arg, p);
94af9270
KS
880 if (is_quoted && **argptr == '\'')
881 *argptr = *argptr + 1;
882 return values;
791dfb64 883 }
50641945 884
94af9270
KS
885 /* No, the first part is a filename; set file_symtab to be that file's
886 symtab. Also, move argptr past the filename. */
50641945 887
9ef07c8c
TT
888 TRY_CATCH (file_exception, RETURN_MASK_ERROR)
889 {
58438ac1 890 file_symtab = symtab_from_filename (argptr, p, is_quote_enclosed);
9ef07c8c
TT
891 }
892 /* If that failed, maybe we have `function:label'. */
893 if (file_exception.reason < 0)
894 {
895 function_symbol = find_function_symbol (argptr, p, is_quote_enclosed);
896 /* If we did not find a function, re-throw the original
897 exception. */
898 if (!function_symbol)
899 throw_exception (file_exception);
9ef07c8c 900 }
50641945 901
94af9270
KS
902 /* Check for single quotes on the non-filename part. */
903 if (!is_quoted)
50641945 904 {
94af9270
KS
905 is_quoted = (**argptr
906 && strchr (get_gdb_completer_quote_characters (),
907 **argptr) != NULL);
908 if (is_quoted)
909 end_quote = skip_quoted (*argptr);
50641945 910 }
50641945 911 }
50641945 912
bc882aa9 913 /* file_symtab is specified file's symtab, or 0 if no file specified.
9ef07c8c
TT
914 If we are parsing `function:symbol', then FUNCTION_SYMBOL is the
915 function before the `:'.
50641945
FN
916 arg no longer contains the file name. */
917
0e0b460e
KS
918 /* If the filename was quoted, we must re-check the quotation. */
919
920 if (end_quote == first_half && *end_quote!= '\0')
921 {
922 is_quoted = (**argptr
923 && strchr (get_gdb_completer_quote_characters (),
924 **argptr) != NULL);
925 if (is_quoted)
926 end_quote = skip_quoted (*argptr);
927 }
928
a04257e6 929 /* Check whether arg is all digits (and sign). */
50641945
FN
930
931 q = *argptr;
932 if (*q == '-' || *q == '+')
933 q++;
934 while (*q >= '0' && *q <= '9')
935 q++;
936
9ef07c8c
TT
937 if (q != *argptr && (*q == 0 || *q == ' ' || *q == '\t' || *q == ',')
938 && function_symbol == NULL)
84fba31b
DC
939 /* We found a token consisting of all digits -- at least one digit. */
940 return decode_all_digits (argptr, default_symtab, default_line,
88d262ca 941 canonical, file_symtab, q);
50641945
FN
942
943 /* Arg token is not digits => try it as a variable name
944 Find the next token (everything up to end or next whitespace). */
945
a04257e6
DC
946 if (**argptr == '$') /* May be a convenience variable. */
947 /* One or two $ chars possible. */
948 p = skip_quoted (*argptr + (((*argptr)[1] == '$') ? 2 : 1));
50641945
FN
949 else if (is_quoted)
950 {
791dfb64 951 p = end_quote;
50641945 952 if (p[-1] != '\'')
8a3fe4f8 953 error (_("Unmatched single quote."));
50641945 954 }
d2630e69
AF
955 else if (is_objc_method)
956 {
1777feb0 957 /* allow word separators in method names for Obj-C. */
d2630e69
AF
958 p = skip_quoted_chars (*argptr, NULL, "");
959 }
50641945
FN
960 else
961 {
962 p = skip_quoted (*argptr);
963 }
964
c00f8484
KS
965 /* Keep any important naming information. */
966 p = keep_name_info (p);
94af9270 967
50641945
FN
968 copy = (char *) alloca (p - *argptr + 1);
969 memcpy (copy, *argptr, p - *argptr);
970 copy[p - *argptr] = '\0';
971 if (p != *argptr
972 && copy[0]
973 && copy[0] == copy[p - *argptr - 1]
c5f0f3d0 974 && strchr (get_gdb_completer_quote_characters (), copy[0]) != NULL)
50641945
FN
975 {
976 copy[p - *argptr - 1] = '\0';
977 copy++;
978 }
791dfb64
DJ
979 else if (is_quoted)
980 copy[p - *argptr - 1] = '\0';
50641945
FN
981 while (*p == ' ' || *p == '\t')
982 p++;
983 *argptr = p;
984
985 /* If it starts with $: may be a legitimate variable or routine name
986 (e.g. HP-UX millicode routines such as $$dyncall), or it may
a04257e6 987 be history value, or it may be a convenience variable. */
50641945 988
9ef07c8c 989 if (*copy == '$' && function_symbol == NULL)
14e91ac5 990 return decode_dollar (copy, funfirstline, default_symtab,
88d262ca 991 canonical, file_symtab);
50641945 992
0f5238ed
TT
993 /* Try the token as a label, but only if no file was specified,
994 because we can only really find labels in the current scope. */
995
996 if (!file_symtab)
997 {
998 struct symtabs_and_lines label_result;
9ef07c8c 999 if (decode_label (function_symbol, copy, canonical, &label_result))
0f5238ed
TT
1000 return label_result;
1001 }
1002
9ef07c8c 1003 if (function_symbol)
58438ac1 1004 throw_exception (file_exception);
9ef07c8c 1005
50641945
FN
1006 /* Look up that token as a variable.
1007 If file specified, use that file's per-file block to start with. */
1008
58438ac1 1009 return decode_variable (copy, funfirstline, canonical, file_symtab);
413dad4d 1010}
50641945 1011
44fe14ab
DC
1012\f
1013
614b3b14
DC
1014/* Now, more helper functions for decode_line_1. Some conventions
1015 that these functions follow:
1016
1017 Decode_line_1 typically passes along some of its arguments or local
1018 variables to the subfunctions. It passes the variables by
1019 reference if they are modified by the subfunction, and by value
1020 otherwise.
1021
1022 Some of the functions have side effects that don't arise from
1023 variables that are passed by reference. In particular, if a
1024 function is passed ARGPTR as an argument, it modifies what ARGPTR
1025 points to; typically, it advances *ARGPTR past whatever substring
1026 it has just looked at. (If it doesn't modify *ARGPTR, then the
94af9270
KS
1027 function gets passed *ARGPTR instead, which is then called ARG.)
1028 Also, functions that return a struct symtabs_and_lines may modify
1029 CANONICAL, as in the description of decode_line_1.
614b3b14
DC
1030
1031 If a function returns a struct symtabs_and_lines, then that struct
1032 will immediately make its way up the call chain to be returned by
1033 decode_line_1. In particular, all of the functions decode_XXX
1034 calculate the appropriate struct symtabs_and_lines, under the
1035 assumption that their argument is of the form XXX. */
44fe14ab
DC
1036
1037/* First, some functions to initialize stuff at the beggining of the
1038 function. */
1039
1040static void
1041initialize_defaults (struct symtab **default_symtab, int *default_line)
1042{
1043 if (*default_symtab == 0)
1044 {
1045 /* Use whatever we have for the default source line. We don't use
1046 get_current_or_default_symtab_and_line as it can recurse and call
1777feb0 1047 us back! */
44fe14ab
DC
1048 struct symtab_and_line cursal =
1049 get_current_source_symtab_and_line ();
1050
1051 *default_symtab = cursal.symtab;
1052 *default_line = cursal.line;
1053 }
1054}
1055
1056\f
1057
1058/* Decode arg of the form *PC. */
1059
1060static struct symtabs_and_lines
1061decode_indirect (char **argptr)
1062{
1063 struct symtabs_and_lines values;
1064 CORE_ADDR pc;
1065
1066 (*argptr)++;
63ffa6ee 1067 pc = value_as_address (parse_to_comma_and_eval (argptr));
44fe14ab
DC
1068
1069 values.sals = (struct symtab_and_line *)
1070 xmalloc (sizeof (struct symtab_and_line));
1071
1072 values.nelts = 1;
1073 values.sals[0] = find_pc_line (pc, 0);
1074 values.sals[0].pc = pc;
1075 values.sals[0].section = find_pc_overlay (pc);
ed0616c6 1076 values.sals[0].explicit_pc = 1;
44fe14ab
DC
1077
1078 return values;
1079}
413dad4d
DC
1080
1081\f
1082
0960f083
DC
1083/* Locate the first half of the linespec, ending in a colon, period,
1084 or whitespace. (More or less.) Also, check to see if *ARGPTR is
1085 enclosed in double quotes; if so, set is_quote_enclosed, advance
17763fd9
EZ
1086 ARGPTR past that and zero out the trailing double quote.
1087 If ARGPTR is just a simple name like "main", p will point to ""
1088 at the end. */
0960f083
DC
1089
1090static char *
1091locate_first_half (char **argptr, int *is_quote_enclosed)
1092{
1093 char *ii;
1094 char *p, *p1;
1095 int has_comma;
1096
1097 /* Maybe we were called with a line range FILENAME:LINENUM,FILENAME:LINENUM
1098 and we must isolate the first half. Outer layers will call again later
1099 for the second half.
1100
1101 Don't count commas that appear in argument lists of overloaded
1102 functions, or in quoted strings. It's stupid to go to this much
1103 trouble when the rest of the function is such an obvious roach hotel. */
1104 ii = find_toplevel_char (*argptr, ',');
1105 has_comma = (ii != 0);
1106
a04257e6 1107 /* Temporarily zap out second half to not confuse the code below.
1777feb0 1108 This is undone below. Do not change ii!! */
0960f083
DC
1109 if (has_comma)
1110 {
1111 *ii = '\0';
1112 }
1113
a04257e6
DC
1114 /* Maybe arg is FILE : LINENUM or FILE : FUNCTION. May also be
1115 CLASS::MEMBER, or NAMESPACE::NAME. Look for ':', but ignore
1116 inside of <>. */
0960f083
DC
1117
1118 p = *argptr;
1119 if (p[0] == '"')
1120 {
1121 *is_quote_enclosed = 1;
1122 (*argptr)++;
1123 p++;
1124 }
1125 else
0e0b460e
KS
1126 {
1127 *is_quote_enclosed = 0;
1128 if (strchr (get_gdb_completer_quote_characters (), *p))
1129 {
1130 ++(*argptr);
1131 ++p;
1132 }
1133 }
0960f083
DC
1134 for (; *p; p++)
1135 {
1136 if (p[0] == '<')
1137 {
1138 char *temp_end = find_template_name_end (p);
e0881a8e 1139
0960f083 1140 if (!temp_end)
8a3fe4f8 1141 error (_("malformed template specification in command"));
0960f083
DC
1142 p = temp_end;
1143 }
c00f8484
KS
1144
1145 if (p[0] == '(')
1146 p = find_method_overload_end (p);
1147
d2630e69 1148 /* Check for a colon and a plus or minus and a [ (which
1777feb0 1149 indicates an Objective-C method). */
889f28e2 1150 if (is_objc_method_format (p))
d2630e69
AF
1151 {
1152 break;
1153 }
a04257e6
DC
1154 /* Check for the end of the first half of the linespec. End of
1155 line, a tab, a double colon or the last single colon, or a
1156 space. But if enclosed in double quotes we do not break on
1157 enclosed spaces. */
0960f083
DC
1158 if (!*p
1159 || p[0] == '\t'
1160 || ((p[0] == ':')
1161 && ((p[1] == ':') || (strchr (p + 1, ':') == NULL)))
1162 || ((p[0] == ' ') && !*is_quote_enclosed))
1163 break;
a04257e6 1164 if (p[0] == '.' && strchr (p, ':') == NULL)
0960f083 1165 {
a04257e6 1166 /* Java qualified method. Find the *last* '.', since the
94af9270
KS
1167 others are package qualifiers. Stop at any open parenthesis
1168 which might provide overload information. */
1169 for (p1 = p; *p1 && *p1 != '('; p1++)
0960f083
DC
1170 {
1171 if (*p1 == '.')
1172 p = p1;
1173 }
1174 break;
1175 }
1176 }
1177 while (p[0] == ' ' || p[0] == '\t')
1178 p++;
1179
a04257e6 1180 /* If the closing double quote was left at the end, remove it. */
0960f083
DC
1181 if (*is_quote_enclosed)
1182 {
1183 char *closing_quote = strchr (p - 1, '"');
e0881a8e 1184
0960f083
DC
1185 if (closing_quote && closing_quote[1] == '\0')
1186 *closing_quote = '\0';
1187 }
1188
a04257e6
DC
1189 /* Now that we've safely parsed the first half, put back ',' so
1190 outer layers can see it. */
0960f083
DC
1191 if (has_comma)
1192 *ii = ',';
1193
1194 return p;
1195}
1196
1197\f
1198
d2630e69
AF
1199/* Here's where we recognise an Objective-C Selector. An Objective C
1200 selector may be implemented by more than one class, therefore it
1201 may represent more than one method/function. This gives us a
1202 situation somewhat analogous to C++ overloading. If there's more
1203 than one method that could represent the selector, then use some of
1204 the existing C++ code to let the user choose one. */
1205
1206struct symtabs_and_lines
1207decode_objc (char **argptr, int funfirstline, struct symtab *file_symtab,
7efd8fc2 1208 struct linespec_result *canonical, char *saved_arg)
d2630e69
AF
1209{
1210 struct symtabs_and_lines values;
1211 struct symbol **sym_arr = NULL;
1212 struct symbol *sym = NULL;
d2630e69 1213 struct block *block = NULL;
15550d6b
MK
1214 unsigned i1 = 0;
1215 unsigned i2 = 0;
d2630e69
AF
1216
1217 values.sals = NULL;
1218 values.nelts = 0;
1219
1220 if (file_symtab != NULL)
1221 block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (file_symtab), STATIC_BLOCK);
1222 else
c4fc331b
AS
1223 {
1224 enum language save_language;
1225
1226 /* get_selected_block can change the current language when there is
1227 no selected frame yet. */
1228 save_language = current_language->la_language;
1229 block = get_selected_block (0);
1230 set_language (save_language);
1231 }
1232
5715d26e 1233 find_imps (file_symtab, block, *argptr, NULL, &i1, &i2);
d2630e69
AF
1234
1235 if (i1 > 0)
1236 {
1777feb0
MS
1237 sym_arr = (struct symbol **)
1238 alloca ((i1 + 1) * sizeof (struct symbol *));
46be51c4 1239 sym_arr[i1] = NULL;
d2630e69 1240
5715d26e 1241 *argptr = find_imps (file_symtab, block, *argptr, sym_arr, &i1, &i2);
d2630e69
AF
1242 }
1243
1244 /* i1 now represents the TOTAL number of matches found.
1245 i2 represents how many HIGH-LEVEL (struct symbol) matches,
1246 which will come first in the sym_arr array. Any low-level
1247 (minimal_symbol) matches will follow those. */
1248
1249 if (i1 == 1)
1250 {
1251 if (i2 > 0)
1252 {
1253 /* Already a struct symbol. */
1254 sym = sym_arr[0];
1255 }
1256 else
1257 {
1258 sym = find_pc_function (SYMBOL_VALUE_ADDRESS (sym_arr[0]));
3e43a32a
MS
1259 if ((sym != NULL) && strcmp (SYMBOL_LINKAGE_NAME (sym_arr[0]),
1260 SYMBOL_LINKAGE_NAME (sym)) != 0)
d2630e69 1261 {
3e43a32a
MS
1262 warning (_("debugging symbol \"%s\" does "
1263 "not match selector; ignoring"),
1264 SYMBOL_LINKAGE_NAME (sym));
d2630e69
AF
1265 sym = NULL;
1266 }
1267 }
1268
3e43a32a
MS
1269 values.sals = (struct symtab_and_line *)
1270 xmalloc (sizeof (struct symtab_and_line));
d2630e69
AF
1271 values.nelts = 1;
1272
1273 if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
1274 {
1275 /* Canonicalize this, so it remains resolved for dylib loads. */
1276 values.sals[0] = find_function_start_sal (sym, funfirstline);
3e43a32a
MS
1277 build_canonical_line_spec (values.sals,
1278 SYMBOL_NATURAL_NAME (sym), canonical);
d2630e69
AF
1279 }
1280 else
1281 {
69368a60
UW
1282 /* The only match was a non-debuggable symbol, which might point
1283 to a function descriptor; resolve it to the actual code address
1284 instead. */
1285 struct minimal_symbol *msymbol = (struct minimal_symbol *)sym_arr[0];
1286 struct objfile *objfile = msymbol_objfile (msymbol);
1287 struct gdbarch *gdbarch = get_objfile_arch (objfile);
1288 CORE_ADDR pc = SYMBOL_VALUE_ADDRESS (msymbol);
1289
1290 pc = gdbarch_convert_from_func_ptr_addr (gdbarch, pc,
1291 &current_target);
1292
1293 init_sal (&values.sals[0]);
1294 values.sals[0].pc = pc;
d2630e69
AF
1295 }
1296 return values;
1297 }
1298
1299 if (i1 > 1)
1300 {
1777feb0 1301 /* More than one match. The user must choose one or more. */
d2630e69
AF
1302 return decode_line_2 (sym_arr, i2, funfirstline, canonical);
1303 }
1304
1305 return values;
1306}
1307
614b3b14 1308/* This handles C++ and Java compound data structures. P should point
17763fd9
EZ
1309 at the first component separator, i.e. double-colon or period. As
1310 an example, on entrance to this function we could have ARGPTR
1311 pointing to "AAA::inA::fun" and P pointing to "::inA::fun". */
614b3b14
DC
1312
1313static struct symtabs_and_lines
7efd8fc2
TT
1314decode_compound (char **argptr, int funfirstline,
1315 struct linespec_result *canonical,
58438ac1 1316 char *the_real_saved_arg, char *p)
614b3b14
DC
1317{
1318 struct symtabs_and_lines values;
93d91629 1319 char *p2;
614b3b14
DC
1320 char *saved_arg2 = *argptr;
1321 char *temp_end;
1322 struct symbol *sym;
614b3b14
DC
1323 char *copy;
1324 struct symbol *sym_class;
614b3b14 1325 struct type *t;
94af9270 1326 char *saved_java_argptr = NULL;
c00f8484
KS
1327 char *saved_arg;
1328
1329 /* If the user specified any completer quote characters in the input,
1330 strip them. They are superfluous. */
1331 saved_arg = alloca (strlen (the_real_saved_arg) + 1);
1332 {
1333 char *dst = saved_arg;
1334 char *src = the_real_saved_arg;
1335 char *quotes = get_gdb_completer_quote_characters ();
1336 while (*src != '\0')
1337 {
1338 if (strchr (quotes, *src) == NULL)
1339 *dst++ = *src;
1340 ++src;
1341 }
1342 *dst = '\0';
1343 }
614b3b14 1344
17763fd9
EZ
1345 /* First check for "global" namespace specification, of the form
1346 "::foo". If found, skip over the colons and jump to normal
1347 symbol processing. I.e. the whole line specification starts with
1777feb0 1348 "::" (note the condition that *argptr == p). */
614b3b14
DC
1349 if (p[0] == ':'
1350 && ((*argptr == p) || (p[-1] == ' ') || (p[-1] == '\t')))
1351 saved_arg2 += 2;
1352
87b3ede8
DC
1353 /* Given our example "AAA::inA::fun", we have two cases to consider:
1354
1355 1) AAA::inA is the name of a class. In that case, presumably it
1356 has a method called "fun"; we then look up that method using
1357 find_method.
1358
1359 2) AAA::inA isn't the name of a class. In that case, either the
c00f8484
KS
1360 user made a typo, AAA::inA is the name of a namespace, or it is
1361 the name of a minimal symbol.
1362 We just look up AAA::inA::fun with lookup_symbol. If that fails,
1363 try lookup_minimal_symbol.
87b3ede8
DC
1364
1365 Thus, our first task is to find everything before the last set of
1366 double-colons and figure out if it's the name of a class. So we
1367 first loop through all of the double-colons. */
614b3b14 1368
a04257e6 1369 p2 = p; /* Save for restart. */
17763fd9 1370
1777feb0 1371 /* This is very messy. Following the example above we have now the
17763fd9
EZ
1372 following pointers:
1373 p -> "::inA::fun"
1374 argptr -> "AAA::inA::fun
1375 saved_arg -> "AAA::inA::fun
1376 saved_arg2 -> "AAA::inA::fun
1777feb0 1377 p2 -> "::inA::fun". */
17763fd9
EZ
1378
1379 /* In the loop below, with these strings, we'll make 2 passes, each
1777feb0 1380 is marked in comments. */
17763fd9 1381
614b3b14
DC
1382 while (1)
1383 {
c00f8484
KS
1384 static char *break_characters = " \t(";
1385
a04257e6 1386 /* Move pointer up to next possible class/namespace token. */
17763fd9 1387
a04257e6 1388 p = p2 + 1; /* Restart with old value +1. */
17763fd9
EZ
1389
1390 /* PASS1: at this point p2->"::inA::fun", so p->":inA::fun",
1391 i.e. if there is a double-colon, p will now point to the
1777feb0 1392 second colon. */
87b3ede8 1393 /* PASS2: p2->"::fun", p->":fun" */
17763fd9 1394
a04257e6 1395 /* Move pointer ahead to next double-colon. */
c00f8484
KS
1396 while (*p
1397 && strchr (break_characters, *p) == NULL
1398 && strchr (get_gdb_completer_quote_characters (), *p) == NULL)
614b3b14 1399 {
12907978
KS
1400 if (current_language->la_language == language_cplus)
1401 p += cp_validate_operator (p);
1402
614b3b14
DC
1403 if (p[0] == '<')
1404 {
1405 temp_end = find_template_name_end (p);
1406 if (!temp_end)
8a3fe4f8 1407 error (_("malformed template specification in command"));
614b3b14
DC
1408 p = temp_end;
1409 }
17763fd9
EZ
1410 /* Note that, since, at the start of this loop, p would be
1411 pointing to the second colon in a double-colon, we only
1412 satisfy the condition below if there is another
1777feb0
MS
1413 double-colon to the right (after). I.e. there is another
1414 component that can be a class or a namespace. I.e, if at
17763fd9
EZ
1415 the beginning of this loop (PASS1), we had
1416 p->":inA::fun", we'll trigger this when p has been
1417 advanced to point to "::fun". */
1777feb0 1418 /* PASS2: we will not trigger this. */
614b3b14 1419 else if ((p[0] == ':') && (p[1] == ':'))
a04257e6 1420 break; /* Found double-colon. */
614b3b14 1421 else
c00f8484
KS
1422 {
1423 /* PASS2: We'll keep getting here, until P points to one of the
1424 break characters, at which point we exit this loop. */
1425 if (*p && strchr (break_characters, *p) == NULL)
1426 p++;
1427 }
614b3b14
DC
1428 }
1429
1430 if (*p != ':')
17763fd9
EZ
1431 break; /* Out of the while (1). This would happen
1432 for instance if we have looked up
1433 unsuccessfully all the components of the
1777feb0 1434 string, and p->""(PASS2). */
17763fd9 1435
c00f8484 1436 /* We get here if p points to one of the break characters or "" (i.e.,
1777feb0 1437 string ended). */
17763fd9
EZ
1438 /* Save restart for next time around. */
1439 p2 = p;
1440 /* Restore argptr as it was on entry to this function. */
1441 *argptr = saved_arg2;
87b3ede8
DC
1442 /* PASS1: at this point p->"::fun" argptr->"AAA::inA::fun",
1443 p2->"::fun". */
17763fd9
EZ
1444
1445 /* All ready for next pass through the loop. */
614b3b14
DC
1446 } /* while (1) */
1447
87b3ede8 1448
1777feb0 1449 /* Start of lookup in the symbol tables. */
87b3ede8
DC
1450
1451 /* Lookup in the symbol table the substring between argptr and
1777feb0 1452 p. Note, this call changes the value of argptr. */
87b3ede8
DC
1453 /* Before the call, argptr->"AAA::inA::fun",
1454 p->"", p2->"::fun". After the call: argptr->"fun", p, p2
1455 unchanged. */
1456 sym_class = lookup_prefix_sym (argptr, p2);
1457
1458 /* If sym_class has been found, and if "AAA::inA" is a class, then
1459 we're in case 1 above. So we look up "fun" as a method of that
1460 class. */
1461 if (sym_class &&
1462 (t = check_typedef (SYMBOL_TYPE (sym_class)),
1463 (TYPE_CODE (t) == TYPE_CODE_STRUCT
1464 || TYPE_CODE (t) == TYPE_CODE_UNION)))
1465 {
1466 /* Arg token is not digits => try it as a function name.
1467 Find the next token (everything up to end or next
1468 blank). */
1469 if (**argptr
1470 && strchr (get_gdb_completer_quote_characters (),
1471 **argptr) != NULL)
1472 {
1473 p = skip_quoted (*argptr);
1474 *argptr = *argptr + 1;
1475 }
1476 else
1477 {
1478 /* At this point argptr->"fun". */
94af9270 1479 char *a;
e0881a8e 1480
87b3ede8 1481 p = *argptr;
94af9270
KS
1482 while (*p && *p != ' ' && *p != '\t' && *p != ',' && *p != ':'
1483 && *p != '(')
87b3ede8
DC
1484 p++;
1485 /* At this point p->"". String ended. */
12907978
KS
1486 /* Nope, C++ operators could have spaces in them
1487 ("foo::operator <" or "foo::operator delete []").
1488 I apologize, this is a bit hacky... */
1489 if (current_language->la_language == language_cplus
1490 && *p == ' ' && p - 8 - *argptr + 1 > 0)
1491 {
1492 /* The above loop has already swallowed "operator". */
1493 p += cp_validate_operator (p - 8) - 8;
1494 }
94af9270 1495
c00f8484
KS
1496 /* Keep any important naming information. */
1497 p = keep_name_info (p);
94af9270
KS
1498
1499 /* Java may append typenames, so assume that if there is
1500 anything else left in *argptr, it must be a typename. */
1501 if (*p && current_language->la_language == language_java)
1502 {
1503 struct type *type;
e0881a8e 1504
94af9270
KS
1505 p2 = p;
1506 while (*p2)
1507 ++p2;
1508 copy = (char *) alloca (p2 - p + 1);
1509 memcpy (copy, p, p2 - p);
1510 copy[p2 - p] = '\0';
1511 type = lookup_typename (current_language, get_current_arch (),
1512 copy, NULL, 1);
1513 if (type != NULL)
1514 {
1515 /* Save the location of this just in case this
1516 method/type combination isn't actually defined.
1517 It will be checked later. */
1518 saved_java_argptr = p;
1519 p = p2;
1520 }
1521 }
87b3ede8
DC
1522 }
1523
1524 /* Allocate our own copy of the substring between argptr and
1777feb0 1525 p. */
87b3ede8
DC
1526 copy = (char *) alloca (p - *argptr + 1);
1527 memcpy (copy, *argptr, p - *argptr);
1528 copy[p - *argptr] = '\0';
1529 if (p != *argptr
1530 && copy[p - *argptr - 1]
1531 && strchr (get_gdb_completer_quote_characters (),
1532 copy[p - *argptr - 1]) != NULL)
1533 copy[p - *argptr - 1] = '\0';
1534
1777feb0 1535 /* At this point copy->"fun", p->"". */
87b3ede8
DC
1536
1537 /* No line number may be specified. */
1538 while (*p == ' ' || *p == '\t')
1539 p++;
1540 *argptr = p;
1541 /* At this point arptr->"". */
1542
1777feb0 1543 /* Look for copy as a method of sym_class. */
87b3ede8
DC
1544 /* At this point copy->"fun", sym_class is "AAA:inA",
1545 saved_arg->"AAA::inA::fun". This concludes the scanning of
1546 the string for possible components matches. If we find it
1777feb0 1547 here, we return. If not, and we are at the and of the string,
87b3ede8
DC
1548 we'll lookup the whole string in the symbol tables. */
1549
94af9270 1550 values = find_method (funfirstline, canonical, saved_arg,
58438ac1 1551 copy, t, sym_class);
94af9270
KS
1552 if (saved_java_argptr != NULL && values.nelts == 1)
1553 {
1554 /* The user specified a specific return type for a java method.
1555 Double-check that it really is the one the user specified.
1556 [This is a necessary evil because strcmp_iw_ordered stops
1557 comparisons too prematurely.] */
1558 sym = find_pc_sect_function (values.sals[0].pc,
1559 values.sals[0].section);
1560 /* We just found a SAL, we had better be able to go backwards! */
1561 gdb_assert (sym != NULL);
1562 if (strcmp_iw (SYMBOL_LINKAGE_NAME (sym), saved_arg) != 0)
1563 {
1564 xfree (values.sals);
3e43a32a 1565 error (_("the class `%s' does not have "
8f7e195f 1566 "any method instance named %s"),
94af9270
KS
1567 SYMBOL_PRINT_NAME (sym_class), copy);
1568 }
1569 }
1570 return values;
1777feb0 1571 } /* End if symbol found. */
87b3ede8
DC
1572
1573
1574 /* We couldn't find a class, so we're in case 2 above. We check the
1575 entire name as a symbol instead. */
1576
c00f8484
KS
1577 if (current_language->la_language == language_cplus
1578 || current_language->la_language == language_java)
1579 p = keep_name_info (p);
1580
614b3b14
DC
1581 copy = (char *) alloca (p - saved_arg2 + 1);
1582 memcpy (copy, saved_arg2, p - saved_arg2);
a04257e6
DC
1583 /* Note: if is_quoted should be true, we snuff out quote here
1584 anyway. */
614b3b14 1585 copy[p - saved_arg2] = '\000';
a04257e6 1586 /* Set argptr to skip over the name. */
614b3b14 1587 *argptr = (*p == '\'') ? p + 1 : p;
17763fd9 1588
1777feb0 1589 /* Look up entire name. */
c00f8484 1590 sym = lookup_symbol (copy, get_selected_block (0), VAR_DOMAIN, 0);
614b3b14 1591 if (sym)
9ef07c8c 1592 return symbol_found (funfirstline, canonical, copy, sym, NULL, NULL);
c00f8484
KS
1593 else
1594 {
1595 struct minimal_symbol *msym;
1596
1597 /* Couldn't find any interpretation as classes/namespaces. As a last
1598 resort, try the minimal symbol tables. */
1599 msym = lookup_minimal_symbol (copy, NULL, NULL);
1600 if (msym != NULL)
1601 return minsym_found (funfirstline, msym);
1602 }
614b3b14 1603
c00f8484 1604 /* Couldn't find a minimal symbol, either, so give up. */
c00f8484 1605 cplusplus_error (the_real_saved_arg,
3e43a32a
MS
1606 "Can't find member of namespace, "
1607 "class, struct, or union named \"%s\"\n",
614b3b14
DC
1608 copy);
1609}
1610
93d91629
DC
1611/* Next come some helper functions for decode_compound. */
1612
1613/* Return the symbol corresponding to the substring of *ARGPTR ending
1614 at P, allowing whitespace. Also, advance *ARGPTR past the symbol
1615 name in question, the compound object separator ("::" or "."), and
17763fd9
EZ
1616 whitespace. Note that *ARGPTR is changed whether or not the
1617 lookup_symbol call finds anything (i.e we return NULL). As an
1618 example, say ARGPTR is "AAA::inA::fun" and P is "::inA::fun". */
93d91629
DC
1619
1620static struct symbol *
1621lookup_prefix_sym (char **argptr, char *p)
1622{
1623 char *p1;
1624 char *copy;
1e5a1abc 1625 struct symbol *sym;
93d91629
DC
1626
1627 /* Extract the class name. */
1628 p1 = p;
1629 while (p != *argptr && p[-1] == ' ')
1630 --p;
1631 copy = (char *) alloca (p - *argptr + 1);
1632 memcpy (copy, *argptr, p - *argptr);
1633 copy[p - *argptr] = 0;
1634
17763fd9 1635 /* Discard the class name from the argptr. */
93d91629
DC
1636 p = p1 + (p1[0] == ':' ? 2 : 1);
1637 while (*p == ' ' || *p == '\t')
1638 p++;
1639 *argptr = p;
1640
17763fd9 1641 /* At this point p1->"::inA::fun", p->"inA::fun" copy->"AAA",
1777feb0 1642 argptr->"inA::fun". */
17763fd9 1643
c00f8484 1644 sym = lookup_symbol (copy, get_selected_block (0), STRUCT_DOMAIN, 0);
1e5a1abc
KS
1645 if (sym == NULL)
1646 {
1647 /* Typedefs are in VAR_DOMAIN so the above symbol lookup will
1648 fail when the user attempts to lookup a method of a class
1649 via a typedef'd name (NOT via the class's name, which is already
1650 handled in symbol_matches_domain). So try the lookup again
1651 using VAR_DOMAIN (where typedefs live) and double-check that we
1652 found a struct/class type. */
1653 struct symbol *s = lookup_symbol (copy, 0, VAR_DOMAIN, 0);
e0881a8e 1654
1e5a1abc
KS
1655 if (s != NULL)
1656 {
1657 struct type *t = SYMBOL_TYPE (s);
e0881a8e 1658
1e5a1abc
KS
1659 CHECK_TYPEDEF (t);
1660 if (TYPE_CODE (t) == TYPE_CODE_STRUCT)
1661 return s;
1662 }
1663 }
1664
1665 return sym;
93d91629
DC
1666}
1667
4224873a
DC
1668/* This finds the method COPY in the class whose type is T and whose
1669 symbol is SYM_CLASS. */
1670
1671static struct symtabs_and_lines
7efd8fc2
TT
1672find_method (int funfirstline, struct linespec_result *canonical,
1673 char *saved_arg,
58438ac1 1674 char *copy, struct type *t, struct symbol *sym_class)
4224873a
DC
1675{
1676 struct symtabs_and_lines values;
46be51c4 1677 struct symbol *sym = NULL;
78a11fb4 1678 int i1; /* Counter for the symbol array. */
4224873a
DC
1679 struct symbol **sym_arr = alloca (total_number_of_methods (t)
1680 * sizeof (struct symbol *));
1681
78a11fb4
DC
1682 /* Find all methods with a matching name, and put them in
1683 sym_arr. */
4224873a 1684
19ef5c71 1685 i1 = find_methods (t, copy, SYMBOL_LANGUAGE (sym_class), sym_arr);
4224873a 1686
4224873a
DC
1687 if (i1 == 1)
1688 {
1689 /* There is exactly one field with that name. */
1690 sym = sym_arr[0];
1691
1692 if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
1693 {
1694 values.sals = (struct symtab_and_line *)
1695 xmalloc (sizeof (struct symtab_and_line));
1696 values.nelts = 1;
1697 values.sals[0] = find_function_start_sal (sym,
1698 funfirstline);
1699 }
1700 else
1701 {
15550d6b 1702 values.sals = NULL;
4224873a
DC
1703 values.nelts = 0;
1704 }
1705 return values;
1706 }
1707 if (i1 > 0)
1708 {
94af9270
KS
1709 /* If we were given a specific overload instance, use that
1710 (or error if no matches were found). Otherwise ask the user
1711 which one to use. */
c00f8484 1712 if (strchr (copy, '('))
94af9270
KS
1713 {
1714 int i;
c00f8484
KS
1715 char *name;
1716 char *canon;
d03a3acf 1717 struct cleanup *cleanup;
e0881a8e 1718
c00f8484
KS
1719 /* Construct the proper search name based on SYM_CLASS and COPY.
1720 SAVED_ARG may contain a valid name, but that name might not be
1721 what is actually stored in the symbol table. For example,
1722 if SAVED_ARG (and SYM_CLASS) were found via an import
1723 ("using namespace" in C++), then the physname of
1724 SYM_CLASS ("A::myclass") may not be the same as SAVED_ARG
1725 ("myclass"). */
1726 name = xmalloc (strlen (SYMBOL_NATURAL_NAME (sym_class))
1727 + 2 /* "::" */ + strlen (copy) + 1);
1728 strcpy (name, SYMBOL_NATURAL_NAME (sym_class));
1729 strcat (name, "::");
1730 strcat (name, copy);
1731 canon = cp_canonicalize_string (name);
d03a3acf 1732 if (canon != NULL)
94af9270 1733 {
c00f8484 1734 xfree (name);
d03a3acf 1735 name = canon;
d03a3acf 1736 }
c00f8484 1737 cleanup = make_cleanup (xfree, name);
94af9270 1738
d03a3acf
KS
1739 for (i = 0; i < i1; ++i)
1740 {
94af9270
KS
1741 if (strcmp_iw (name, SYMBOL_LINKAGE_NAME (sym_arr[i])) == 0)
1742 {
1743 values.sals = (struct symtab_and_line *)
1744 xmalloc (sizeof (struct symtab_and_line));
1745 values.nelts = 1;
1746 values.sals[0] = find_function_start_sal (sym_arr[i],
1747 funfirstline);
d03a3acf 1748 do_cleanups (cleanup);
94af9270
KS
1749 return values;
1750 }
94af9270
KS
1751 }
1752
3e43a32a 1753 error (_("the class `%s' does not have "
8f7e195f 1754 "any method instance named %s"),
94af9270
KS
1755 SYMBOL_PRINT_NAME (sym_class), copy);
1756 }
1757
4224873a
DC
1758 return decode_line_2 (sym_arr, i1, funfirstline, canonical);
1759 }
1760 else
1761 {
12907978 1762 if (copy[0] == '~')
4224873a
DC
1763 cplusplus_error (saved_arg,
1764 "the class `%s' does not have destructor defined\n",
1765 SYMBOL_PRINT_NAME (sym_class));
1766 else
1767 cplusplus_error (saved_arg,
1768 "the class %s does not have any method named %s\n",
12907978 1769 SYMBOL_PRINT_NAME (sym_class), copy);
4224873a
DC
1770 }
1771}
1772
f3c39e76
DC
1773\f
1774
1775/* Return the symtab associated to the filename given by the substring
58438ac1 1776 of *ARGPTR ending at P, and advance ARGPTR past that filename. */
f3c39e76
DC
1777
1778static struct symtab *
58438ac1 1779symtab_from_filename (char **argptr, char *p, int is_quote_enclosed)
f3c39e76
DC
1780{
1781 char *p1;
1782 char *copy;
94cd26f8 1783 struct symtab *file_symtab;
f3c39e76
DC
1784
1785 p1 = p;
1786 while (p != *argptr && p[-1] == ' ')
1787 --p;
1788 if ((*p == '"') && is_quote_enclosed)
1789 --p;
1790 copy = (char *) alloca (p - *argptr + 1);
1791 memcpy (copy, *argptr, p - *argptr);
a04257e6 1792 /* It may have the ending quote right after the file name. */
0e0b460e
KS
1793 if ((is_quote_enclosed && copy[p - *argptr - 1] == '"')
1794 || copy[p - *argptr - 1] == '\'')
f3c39e76
DC
1795 copy[p - *argptr - 1] = 0;
1796 else
1797 copy[p - *argptr] = 0;
1798
1799 /* Find that file's data. */
94cd26f8
DC
1800 file_symtab = lookup_symtab (copy);
1801 if (file_symtab == 0)
f3c39e76 1802 {
b96e2927
PA
1803 if (!have_full_symbols () && !have_partial_symbols ())
1804 throw_error (NOT_FOUND_ERROR,
3e43a32a
MS
1805 _("No symbol table is loaded. "
1806 "Use the \"file\" command."));
109c3e39 1807 throw_error (NOT_FOUND_ERROR, _("No source file named %s."), copy);
f3c39e76
DC
1808 }
1809
1810 /* Discard the file name from the arg. */
1811 p = p1 + 1;
1812 while (*p == ' ' || *p == '\t')
1813 p++;
1814 *argptr = p;
1815
94cd26f8 1816 return file_symtab;
f3c39e76
DC
1817}
1818
9ef07c8c
TT
1819/* Look up a function symbol in *ARGPTR. If found, advance *ARGPTR
1820 and return the symbol. If not found, return NULL. */
1821
1822static struct symbol *
1823find_function_symbol (char **argptr, char *p, int is_quote_enclosed)
1824{
1825 char *p1;
1826 char *copy;
1827 struct symbol *function_symbol;
1828
1829 p1 = p;
1830 while (p != *argptr && p[-1] == ' ')
1831 --p;
1832 if ((*p == '"') && is_quote_enclosed)
1833 --p;
1834 copy = (char *) alloca (p - *argptr + 1);
1835 memcpy (copy, *argptr, p - *argptr);
1836 /* It may have the ending quote right after the file name. */
1837 if ((is_quote_enclosed && copy[p - *argptr - 1] == '"')
1838 || copy[p - *argptr - 1] == '\'')
1839 copy[p - *argptr - 1] = 0;
1840 else
1841 copy[p - *argptr] = 0;
1842
1843 function_symbol = lookup_symbol (copy, get_selected_block (0),
1844 VAR_DOMAIN, 0);
1845 if (!function_symbol || SYMBOL_CLASS (function_symbol) != LOC_BLOCK)
1846 return NULL;
1847
1848 /* Discard the file name from the arg. */
1849 p = p1 + 1;
1850 while (*p == ' ' || *p == '\t')
1851 p++;
1852 *argptr = p;
1853
1854 return function_symbol;
1855}
1856
84fba31b
DC
1857\f
1858
1859/* This decodes a line where the argument is all digits (possibly
1860 preceded by a sign). Q should point to the end of those digits;
1861 the other arguments are as usual. */
1862
1863static struct symtabs_and_lines
1864decode_all_digits (char **argptr, struct symtab *default_symtab,
7efd8fc2 1865 int default_line, struct linespec_result *canonical,
88d262ca 1866 struct symtab *file_symtab, char *q)
84fba31b
DC
1867
1868{
1869 struct symtabs_and_lines values;
1870 struct symtab_and_line val;
1871
1872 enum sign
1873 {
1874 none, plus, minus
1875 }
1876 sign = none;
1877
1878 /* We might need a canonical line spec if no file was specified. */
46be51c4 1879 int need_canonical = (file_symtab == NULL) ? 1 : 0;
84fba31b
DC
1880
1881 init_sal (&val);
1882
6c95b8df
PA
1883 val.pspace = current_program_space;
1884
84fba31b
DC
1885 /* This is where we need to make sure that we have good defaults.
1886 We must guarantee that this section of code is never executed
1887 when we are called with just a function name, since
1888 set_default_source_symtab_and_line uses
a04257e6 1889 select_source_symtab that calls us with such an argument. */
84fba31b 1890
88d262ca 1891 if (file_symtab == 0 && default_symtab == 0)
84fba31b 1892 {
a04257e6 1893 /* Make sure we have at least a default source file. */
84fba31b
DC
1894 set_default_source_symtab_and_line ();
1895 initialize_defaults (&default_symtab, &default_line);
1896 }
1897
1898 if (**argptr == '+')
1899 sign = plus, (*argptr)++;
1900 else if (**argptr == '-')
1901 sign = minus, (*argptr)++;
1902 val.line = atoi (*argptr);
1903 switch (sign)
1904 {
1905 case plus:
1906 if (q == *argptr)
1907 val.line = 5;
88d262ca 1908 if (file_symtab == 0)
84fba31b
DC
1909 val.line = default_line + val.line;
1910 break;
1911 case minus:
1912 if (q == *argptr)
1913 val.line = 15;
88d262ca 1914 if (file_symtab == 0)
84fba31b
DC
1915 val.line = default_line - val.line;
1916 else
1917 val.line = 1;
1918 break;
1919 case none:
1920 break; /* No need to adjust val.line. */
1921 }
1922
1923 while (*q == ' ' || *q == '\t')
1924 q++;
1925 *argptr = q;
88d262ca
DC
1926 if (file_symtab == 0)
1927 file_symtab = default_symtab;
84fba31b
DC
1928
1929 /* It is possible that this source file has more than one symtab,
1930 and that the new line number specification has moved us from the
88d262ca
DC
1931 default (in file_symtab) to a new one. */
1932 val.symtab = find_line_symtab (file_symtab, val.line, NULL, NULL);
84fba31b 1933 if (val.symtab == 0)
88d262ca 1934 val.symtab = file_symtab;
84fba31b 1935
6c95b8df 1936 val.pspace = SYMTAB_PSPACE (val.symtab);
84fba31b
DC
1937 val.pc = 0;
1938 values.sals = (struct symtab_and_line *)
1939 xmalloc (sizeof (struct symtab_and_line));
1940 values.sals[0] = val;
1941 values.nelts = 1;
1942 if (need_canonical)
1943 build_canonical_line_spec (values.sals, NULL, canonical);
ed0616c6 1944 values.sals[0].explicit_line = 1;
84fba31b
DC
1945 return values;
1946}
f3c39e76 1947
614b3b14
DC
1948\f
1949
14e91ac5
DC
1950/* Decode a linespec starting with a dollar sign. */
1951
1952static struct symtabs_and_lines
1953decode_dollar (char *copy, int funfirstline, struct symtab *default_symtab,
7efd8fc2 1954 struct linespec_result *canonical, struct symtab *file_symtab)
14e91ac5 1955{
4fa62494 1956 LONGEST valx;
14e91ac5
DC
1957 int index = 0;
1958 int need_canonical = 0;
1959 struct symtabs_and_lines values;
1960 struct symtab_and_line val;
1961 char *p;
1962 struct symbol *sym;
14e91ac5
DC
1963 struct minimal_symbol *msymbol;
1964
1965 p = (copy[1] == '$') ? copy + 2 : copy + 1;
1966 while (*p >= '0' && *p <= '9')
1967 p++;
a04257e6 1968 if (!*p) /* Reached end of token without hitting non-digit. */
14e91ac5 1969 {
a04257e6 1970 /* We have a value history reference. */
4fa62494 1971 struct value *val_history;
e0881a8e 1972
14e91ac5 1973 sscanf ((copy[1] == '$') ? copy + 2 : copy + 1, "%d", &index);
4fa62494
UW
1974 val_history = access_value_history ((copy[1] == '$') ? -index : index);
1975 if (TYPE_CODE (value_type (val_history)) != TYPE_CODE_INT)
3e43a32a
MS
1976 error (_("History values used in line "
1977 "specs must have integer values."));
4fa62494 1978 valx = value_as_long (val_history);
14e91ac5
DC
1979 }
1980 else
1981 {
1982 /* Not all digits -- may be user variable/function or a
a04257e6 1983 convenience variable. */
14e91ac5 1984
a04257e6 1985 /* Look up entire name as a symbol first. */
2570f2b7 1986 sym = lookup_symbol (copy, 0, VAR_DOMAIN, 0);
46be51c4 1987 file_symtab = (struct symtab *) NULL;
14e91ac5
DC
1988 need_canonical = 1;
1989 /* Symbol was found --> jump to normal symbol processing. */
1990 if (sym)
9ef07c8c 1991 return symbol_found (funfirstline, canonical, copy, sym, NULL, NULL);
14e91ac5 1992
a04257e6 1993 /* If symbol was not found, look in minimal symbol tables. */
14e91ac5 1994 msymbol = lookup_minimal_symbol (copy, NULL, NULL);
a04257e6 1995 /* Min symbol was found --> jump to minsym processing. */
14e91ac5
DC
1996 if (msymbol)
1997 return minsym_found (funfirstline, msymbol);
1998
a04257e6 1999 /* Not a user variable or function -- must be convenience variable. */
4fa62494 2000 if (!get_internalvar_integer (lookup_internalvar (copy + 1), &valx))
3e43a32a
MS
2001 error (_("Convenience variables used in line "
2002 "specs must have integer values."));
14e91ac5
DC
2003 }
2004
2005 init_sal (&val);
2006
a04257e6 2007 /* Either history value or convenience value from above, in valx. */
88d262ca 2008 val.symtab = file_symtab ? file_symtab : default_symtab;
4fa62494 2009 val.line = valx;
14e91ac5 2010 val.pc = 0;
6c95b8df 2011 val.pspace = current_program_space;
14e91ac5
DC
2012
2013 values.sals = (struct symtab_and_line *) xmalloc (sizeof val);
2014 values.sals[0] = val;
2015 values.nelts = 1;
2016
2017 if (need_canonical)
2018 build_canonical_line_spec (values.sals, NULL, canonical);
2019
2020 return values;
2021}
2022
bca02a8a
DC
2023\f
2024
0f5238ed
TT
2025/* A helper for decode_line_1 that tries to find a label. The label
2026 is searched for in the current block.
9ef07c8c
TT
2027 FUNCTION_SYMBOL is the enclosing function; or NULL if none
2028 specified.
0f5238ed
TT
2029 COPY is the name of the label to find.
2030 CANONICAL is the same as the "canonical" argument to decode_line_1.
2031 RESULT is a pointer to a symtabs_and_lines structure which will be
2032 filled in on success.
2033 This function returns 1 if a label was found, 0 otherwise. */
2034
2035static int
9ef07c8c
TT
2036decode_label (struct symbol *function_symbol, char *copy,
2037 struct linespec_result *canonical,
7efd8fc2 2038 struct symtabs_and_lines *result)
0f5238ed
TT
2039{
2040 struct symbol *sym;
9ef07c8c
TT
2041 struct block *block;
2042
2043 if (function_symbol)
2044 block = SYMBOL_BLOCK_VALUE (function_symbol);
2045 else
2046 {
2047 block = get_selected_block (0);
2048 for (;
2049 block && !BLOCK_FUNCTION (block);
2050 block = BLOCK_SUPERBLOCK (block))
2051 ;
2052 if (!block)
2053 return 0;
2054 function_symbol = BLOCK_FUNCTION (block);
2055 }
0f5238ed 2056
9ef07c8c 2057 sym = lookup_symbol (copy, block, LABEL_DOMAIN, 0);
0f5238ed
TT
2058
2059 if (sym != NULL)
9ef07c8c 2060 *result = symbol_found (0, canonical, copy, sym, NULL, function_symbol);
0f5238ed
TT
2061
2062 return sym != NULL;
2063}
2064
88d262ca 2065/* Decode a linespec that's a variable. If FILE_SYMTAB is non-NULL,
58438ac1 2066 look in that symtab's static variables first. */
bca02a8a
DC
2067
2068static struct symtabs_and_lines
7efd8fc2
TT
2069decode_variable (char *copy, int funfirstline,
2070 struct linespec_result *canonical,
58438ac1 2071 struct symtab *file_symtab)
bca02a8a
DC
2072{
2073 struct symbol *sym;
bca02a8a
DC
2074 struct minimal_symbol *msymbol;
2075
2076 sym = lookup_symbol (copy,
88d262ca
DC
2077 (file_symtab
2078 ? BLOCKVECTOR_BLOCK (BLOCKVECTOR (file_symtab),
2079 STATIC_BLOCK)
bca02a8a 2080 : get_selected_block (0)),
2570f2b7 2081 VAR_DOMAIN, 0);
bca02a8a
DC
2082
2083 if (sym != NULL)
9ef07c8c 2084 return symbol_found (funfirstline, canonical, copy, sym, file_symtab, NULL);
bca02a8a
DC
2085
2086 msymbol = lookup_minimal_symbol (copy, NULL, NULL);
2087
2088 if (msymbol != NULL)
2089 return minsym_found (funfirstline, msymbol);
2090
b96e2927
PA
2091 if (!have_full_symbols ()
2092 && !have_partial_symbols ()
2093 && !have_minimal_symbols ())
2094 throw_error (NOT_FOUND_ERROR,
2095 _("No symbol table is loaded. Use the \"file\" command."));
109c3e39 2096 throw_error (NOT_FOUND_ERROR, _("Function \"%s\" not defined."), copy);
bca02a8a
DC
2097}
2098
2099
14e91ac5
DC
2100\f
2101
413dad4d
DC
2102/* Now come some functions that are called from multiple places within
2103 decode_line_1. */
2104
2105/* We've found a symbol SYM to associate with our linespec; build a
2106 corresponding struct symtabs_and_lines. */
2107
2108static struct symtabs_and_lines
7efd8fc2 2109symbol_found (int funfirstline, struct linespec_result *canonical, char *copy,
9ef07c8c
TT
2110 struct symbol *sym, struct symtab *file_symtab,
2111 struct symbol *function_symbol)
413dad4d
DC
2112{
2113 struct symtabs_and_lines values;
2114
2115 if (SYMBOL_CLASS (sym) == LOC_BLOCK)
50641945 2116 {
1777feb0 2117 /* Arg is the name of a function. */
50641945
FN
2118 values.sals = (struct symtab_and_line *)
2119 xmalloc (sizeof (struct symtab_and_line));
413dad4d
DC
2120 values.sals[0] = find_function_start_sal (sym, funfirstline);
2121 values.nelts = 1;
2122
2123 /* Don't use the SYMBOL_LINE; if used at all it points to
2124 the line containing the parameters or thereabouts, not
2125 the first line of code. */
2126
2127 /* We might need a canonical line spec if it is a static
2128 function. */
88d262ca 2129 if (file_symtab == 0)
50641945 2130 {
2570f2b7 2131 struct blockvector *bv = BLOCKVECTOR (SYMBOL_SYMTAB (sym));
413dad4d 2132 struct block *b = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
e0881a8e 2133
94af9270 2134 if (lookup_block_symbol (b, copy, VAR_DOMAIN) != NULL)
413dad4d 2135 build_canonical_line_spec (values.sals, copy, canonical);
50641945 2136 }
50641945
FN
2137 return values;
2138 }
413dad4d
DC
2139 else
2140 {
62853458 2141 if (SYMBOL_CLASS (sym) == LOC_LABEL && SYMBOL_VALUE_ADDRESS (sym) != 0)
413dad4d
DC
2142 {
2143 /* We know its line number. */
2144 values.sals = (struct symtab_and_line *)
2145 xmalloc (sizeof (struct symtab_and_line));
2146 values.nelts = 1;
9ef07c8c 2147 init_sal (&values.sals[0]);
2570f2b7 2148 values.sals[0].symtab = SYMBOL_SYMTAB (sym);
413dad4d 2149 values.sals[0].line = SYMBOL_LINE (sym);
9ef07c8c 2150 values.sals[0].pc = SYMBOL_VALUE_ADDRESS (sym);
0f5238ed 2151 values.sals[0].pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
9ef07c8c
TT
2152 values.sals[0].explicit_pc = 1;
2153
2154 if (canonical)
2155 {
2156 canonical->special_display = 1;
2157 canonical->canonical = xmalloc (sizeof (char *));
2158 canonical->canonical[0]
2159 = xstrprintf ("%s:%s",
2160 SYMBOL_NATURAL_NAME (function_symbol),
2161 SYMBOL_NATURAL_NAME (sym));
2162 }
2163
413dad4d
DC
2164 return values;
2165 }
62853458
TT
2166 else if (funfirstline)
2167 error (_("\"%s\" is not a function"), copy);
2168 else if (SYMBOL_LINE (sym) != 0)
2169 {
2170 /* We know its line number. */
2171 values.sals = (struct symtab_and_line *)
2172 xmalloc (sizeof (struct symtab_and_line));
2173 values.nelts = 1;
2174 memset (&values.sals[0], 0, sizeof (values.sals[0]));
2175 values.sals[0].symtab = SYMBOL_SYMTAB (sym);
2176 values.sals[0].line = SYMBOL_LINE (sym);
2177 values.sals[0].pspace = SYMTAB_PSPACE (SYMBOL_SYMTAB (sym));
2178 return values;
2179 }
413dad4d
DC
2180 else
2181 /* This can happen if it is compiled with a compiler which doesn't
2182 put out line numbers for variables. */
2183 /* FIXME: Shouldn't we just set .line and .symtab to zero
2184 and return? For example, "info line foo" could print
2185 the address. */
8a3fe4f8 2186 error (_("Line number not known for symbol \"%s\""), copy);
413dad4d
DC
2187 }
2188}
50641945 2189
413dad4d
DC
2190/* We've found a minimal symbol MSYMBOL to associate with our
2191 linespec; build a corresponding struct symtabs_and_lines. */
50641945 2192
413dad4d
DC
2193static struct symtabs_and_lines
2194minsym_found (int funfirstline, struct minimal_symbol *msymbol)
2195{
bccdca4a
UW
2196 struct objfile *objfile = msymbol_objfile (msymbol);
2197 struct gdbarch *gdbarch = get_objfile_arch (objfile);
413dad4d 2198 struct symtabs_and_lines values;
bccdca4a 2199 CORE_ADDR pc;
413dad4d
DC
2200
2201 values.sals = (struct symtab_and_line *)
2202 xmalloc (sizeof (struct symtab_and_line));
2203 values.sals[0] = find_pc_sect_line (SYMBOL_VALUE_ADDRESS (msymbol),
714835d5
UW
2204 (struct obj_section *) 0, 0);
2205 values.sals[0].section = SYMBOL_OBJ_SECTION (msymbol);
bccdca4a
UW
2206
2207 /* The minimal symbol might point to a function descriptor;
2208 resolve it to the actual code address instead. */
2209 pc = gdbarch_convert_from_func_ptr_addr (gdbarch,
2210 values.sals[0].pc,
2211 &current_target);
2212 if (pc != values.sals[0].pc)
2213 values.sals[0] = find_pc_sect_line (pc, NULL, 0);
2214
413dad4d 2215 if (funfirstline)
059acae7 2216 skip_prologue_sal (&values.sals[0]);
e48883f7 2217
413dad4d
DC
2218 values.nelts = 1;
2219 return values;
50641945 2220}
7efd8fc2
TT
2221
2222void
2223init_linespec_result (struct linespec_result *lr)
2224{
2225 memset (lr, 0, sizeof (*lr));
2226}
This page took 1.46589 seconds and 4 git commands to generate.