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