1 /* Parser for linespec for the GNU debugger, GDB.
2 Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
3 1996, 1997, 1998, 1999, 2000, 2001
4 Free Software Foundation, Inc.
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
31 #include "completer.h"
33 /* Prototype for one function in parser-defs.h,
34 instead of including that entire file. */
36 extern char *find_template_name_end (char *);
38 /* We share this one with symtab.c, but it is not exported widely. */
40 extern char *operator_chars (char *, char **);
42 /* Prototypes for local functions */
44 static void cplusplus_hint (char *name
);
46 static int total_number_of_methods (struct type
*type
);
48 static int find_methods (struct type
*, char *, struct symbol
**);
50 static void build_canonical_line_spec (struct symtab_and_line
*,
53 static char *find_toplevel_char (char *s
, char c
);
55 static struct symtabs_and_lines
decode_line_2 (struct symbol
*[],
58 /* Helper functions. */
60 /* While the C++ support is still in flux, issue a possibly helpful hint on
61 using the new command completion feature on single quoted demangled C++
62 symbols. Remove when loose ends are cleaned up. FIXME -fnf */
65 cplusplus_hint (char *name
)
69 printf_filtered ("Hint: try '%s<TAB> or '%s<ESC-?>\n", name
, name
);
70 printf_filtered ("(Note leading single quote.)\n");
73 /* Return the number of methods described for TYPE, including the
74 methods from types it derives from. This can't be done in the symbol
75 reader because the type of the baseclass might still be stubbed
76 when the definition of the derived class is parsed. */
79 total_number_of_methods (struct type
*type
)
85 if (TYPE_CPLUS_SPECIFIC (type
) == NULL
)
87 count
= TYPE_NFN_FIELDS_TOTAL (type
);
89 for (n
= 0; n
< TYPE_N_BASECLASSES (type
); n
++)
90 count
+= total_number_of_methods (TYPE_BASECLASS (type
, n
));
95 /* Recursive helper function for decode_line_1.
96 Look for methods named NAME in type T.
97 Return number of matches.
98 Put matches in SYM_ARR, which should have been allocated with
99 a size of total_number_of_methods (T) * sizeof (struct symbol *).
100 Note that this function is g++ specific. */
103 find_methods (struct type
*t
, char *name
, struct symbol
**sym_arr
)
107 struct symbol
*sym_class
;
108 char *class_name
= type_name_no_tag (t
);
110 /* Ignore this class if it doesn't have a name. This is ugly, but
111 unless we figure out how to get the physname without the name of
112 the class, then the loop can't do any good. */
114 && (sym_class
= lookup_symbol (class_name
,
115 (struct block
*) NULL
,
118 (struct symtab
**) NULL
)))
122 /* FIXME: Shouldn't this just be CHECK_TYPEDEF (t)? */
123 t
= SYMBOL_TYPE (sym_class
);
125 /* Loop over each method name. At this level, all overloads of a name
126 are counted as a single name. There is an inner loop which loops over
129 for (method_counter
= TYPE_NFN_FIELDS (t
) - 1;
134 char *method_name
= TYPE_FN_FIELDLIST_NAME (t
, method_counter
);
137 if (strncmp (method_name
, "__", 2) == 0 ||
138 strncmp (method_name
, "op", 2) == 0 ||
139 strncmp (method_name
, "type", 4) == 0)
141 if (cplus_demangle_opname (method_name
, dem_opname
, DMGL_ANSI
))
142 method_name
= dem_opname
;
143 else if (cplus_demangle_opname (method_name
, dem_opname
, 0))
144 method_name
= dem_opname
;
147 if (STREQ (name
, method_name
))
148 /* Find all the overloaded methods with that name. */
149 for (field_counter
= TYPE_FN_FIELDLIST_LENGTH (t
, method_counter
) - 1;
156 f
= TYPE_FN_FIELDLIST1 (t
, method_counter
);
158 if (TYPE_FN_FIELD_STUB (f
, field_counter
))
162 tmp_name
= gdb_mangle_name (t
,
165 phys_name
= alloca (strlen (tmp_name
) + 1);
166 strcpy (phys_name
, tmp_name
);
170 phys_name
= TYPE_FN_FIELD_PHYSNAME (f
, field_counter
);
172 /* Destructor is handled by caller, dont add it to the list */
173 if (DESTRUCTOR_PREFIX_P (phys_name
))
176 sym_arr
[i1
] = lookup_symbol (phys_name
,
179 (struct symtab
**) NULL
);
184 /* This error message gets printed, but the method
185 still seems to be found
186 fputs_filtered("(Cannot find method ", gdb_stdout);
187 fprintf_symbol_filtered (gdb_stdout, phys_name,
189 DMGL_PARAMS | DMGL_ANSI);
190 fputs_filtered(" - possibly inlined.)\n", gdb_stdout);
197 /* Only search baseclasses if there is no match yet, since names in
198 derived classes override those in baseclasses.
200 FIXME: The above is not true; it is only true of member functions
201 if they have the same number of arguments (??? - section 13.1 of the
202 ARM says the function members are not in the same scope but doesn't
203 really spell out the rules in a way I understand. In any case, if
204 the number of arguments differ this is a case in which we can overload
205 rather than hiding without any problem, and gcc 2.4.5 does overload
206 rather than hiding in this case). */
209 for (ibase
= 0; ibase
< TYPE_N_BASECLASSES (t
); ibase
++)
210 i1
+= find_methods (TYPE_BASECLASS (t
, ibase
), name
, sym_arr
+ i1
);
215 /* Helper function for decode_line_1.
216 Build a canonical line spec in CANONICAL if it is non-NULL and if
217 the SAL has a symtab.
218 If SYMNAME is non-NULL the canonical line spec is `filename:symname'.
219 If SYMNAME is NULL the line number from SAL is used and the canonical
220 line spec is `filename:linenum'. */
223 build_canonical_line_spec (struct symtab_and_line
*sal
, char *symname
,
226 char **canonical_arr
;
227 char *canonical_name
;
229 struct symtab
*s
= sal
->symtab
;
231 if (s
== (struct symtab
*) NULL
232 || s
->filename
== (char *) NULL
233 || canonical
== (char ***) NULL
)
236 canonical_arr
= (char **) xmalloc (sizeof (char *));
237 *canonical
= canonical_arr
;
239 filename
= s
->filename
;
242 canonical_name
= xmalloc (strlen (filename
) + strlen (symname
) + 2);
243 sprintf (canonical_name
, "%s:%s", filename
, symname
);
247 canonical_name
= xmalloc (strlen (filename
) + 30);
248 sprintf (canonical_name
, "%s:%d", filename
, sal
->line
);
250 canonical_arr
[0] = canonical_name
;
255 /* Find an instance of the character C in the string S that is outside
256 of all parenthesis pairs, single-quoted strings, and double-quoted
259 find_toplevel_char (char *s
, char c
)
261 int quoted
= 0; /* zero if we're not in quotes;
262 '"' if we're in a double-quoted string;
263 '\'' if we're in a single-quoted string. */
264 int depth
= 0; /* number of unclosed parens we've seen */
267 for (scan
= s
; *scan
; scan
++)
273 else if (*scan
== '\\' && *(scan
+ 1))
276 else if (*scan
== c
&& ! quoted
&& depth
== 0)
278 else if (*scan
== '"' || *scan
== '\'')
280 else if (*scan
== '(')
282 else if (*scan
== ')' && depth
> 0)
289 /* Given a list of NELTS symbols in SYM_ARR, return a list of lines to
290 operate on (ask user if necessary).
291 If CANONICAL is non-NULL return a corresponding array of mangled names
292 as canonical line specs there. */
294 static struct symtabs_and_lines
295 decode_line_2 (struct symbol
*sym_arr
[], int nelts
, int funfirstline
,
298 struct symtabs_and_lines values
, return_values
;
303 struct cleanup
*old_chain
;
304 char **canonical_arr
= (char **) NULL
;
306 values
.sals
= (struct symtab_and_line
*)
307 alloca (nelts
* sizeof (struct symtab_and_line
));
308 return_values
.sals
= (struct symtab_and_line
*)
309 xmalloc (nelts
* sizeof (struct symtab_and_line
));
310 old_chain
= make_cleanup (xfree
, return_values
.sals
);
314 canonical_arr
= (char **) xmalloc (nelts
* sizeof (char *));
315 make_cleanup (xfree
, canonical_arr
);
316 memset (canonical_arr
, 0, nelts
* sizeof (char *));
317 *canonical
= canonical_arr
;
321 printf_unfiltered ("[0] cancel\n[1] all\n");
324 INIT_SAL (&return_values
.sals
[i
]); /* initialize to zeroes */
325 INIT_SAL (&values
.sals
[i
]);
326 if (sym_arr
[i
] && SYMBOL_CLASS (sym_arr
[i
]) == LOC_BLOCK
)
328 values
.sals
[i
] = find_function_start_sal (sym_arr
[i
], funfirstline
);
329 printf_unfiltered ("[%d] %s at %s:%d\n",
331 SYMBOL_SOURCE_NAME (sym_arr
[i
]),
332 values
.sals
[i
].symtab
->filename
,
333 values
.sals
[i
].line
);
336 printf_unfiltered ("?HERE\n");
340 if ((prompt
= getenv ("PS2")) == NULL
)
344 args
= command_line_input (prompt
, 0, "overload-choice");
346 if (args
== 0 || *args
== 0)
347 error_no_arg ("one or more choice numbers");
355 while (*arg1
>= '0' && *arg1
<= '9')
357 if (*arg1
&& *arg1
!= ' ' && *arg1
!= '\t')
358 error ("Arguments must be choice numbers.");
368 for (i
= 0; i
< nelts
; i
++)
370 if (canonical_arr
[i
] == NULL
)
372 symname
= SYMBOL_NAME (sym_arr
[i
]);
373 canonical_arr
[i
] = savestring (symname
, strlen (symname
));
377 memcpy (return_values
.sals
, values
.sals
,
378 (nelts
* sizeof (struct symtab_and_line
)));
379 return_values
.nelts
= nelts
;
380 discard_cleanups (old_chain
);
381 return return_values
;
384 if (num
>= nelts
+ 2)
386 printf_unfiltered ("No choice number %d.\n", num
);
391 if (values
.sals
[num
].pc
)
395 symname
= SYMBOL_NAME (sym_arr
[num
]);
396 make_cleanup (xfree
, symname
);
397 canonical_arr
[i
] = savestring (symname
, strlen (symname
));
399 return_values
.sals
[i
++] = values
.sals
[num
];
400 values
.sals
[num
].pc
= 0;
404 printf_unfiltered ("duplicate request for %d ignored.\n", num
);
409 while (*args
== ' ' || *args
== '\t')
412 return_values
.nelts
= i
;
413 discard_cleanups (old_chain
);
414 return return_values
;
417 /* The parser of linespec itself. */
419 /* Parse a string that specifies a line number.
420 Pass the address of a char * variable; that variable will be
421 advanced over the characters actually parsed.
425 LINENUM -- that line number in current file. PC returned is 0.
426 FILE:LINENUM -- that line in that file. PC returned is 0.
427 FUNCTION -- line number of openbrace of that function.
428 PC returned is the start of the function.
429 VARIABLE -- line number of definition of that variable.
431 FILE:FUNCTION -- likewise, but prefer functions in that file.
432 *EXPR -- line in which address EXPR appears.
434 This may all be followed by an "if EXPR", which we ignore.
436 FUNCTION may be an undebuggable function found in minimal symbol table.
438 If the argument FUNFIRSTLINE is nonzero, we want the first line
439 of real code inside a function when a function is specified, and it is
440 not OK to specify a variable or type to get its line number.
442 DEFAULT_SYMTAB specifies the file to use if none is specified.
443 It defaults to current_source_symtab.
444 DEFAULT_LINE specifies the line number to use for relative
445 line numbers (that start with signs). Defaults to current_source_line.
446 If CANONICAL is non-NULL, store an array of strings containing the canonical
447 line specs there if necessary. Currently overloaded member functions and
448 line numbers or static functions without a filename yield a canonical
449 line spec. The array and the line spec strings are allocated on the heap,
450 it is the callers responsibility to free them.
452 Note that it is possible to return zero for the symtab
453 if no file is validly specified. Callers must check that.
454 Also, the line number returned may be invalid. */
456 /* We allow single quotes in various places. This is a hideous
457 kludge, which exists because the completer can't yet deal with the
458 lack of single quotes. FIXME: write a linespec_completer which we
459 can use as appropriate instead of make_symbol_completion_list. */
461 struct symtabs_and_lines
462 decode_line_1 (char **argptr
, int funfirstline
, struct symtab
*default_symtab
,
463 int default_line
, char ***canonical
)
465 struct symtabs_and_lines values
;
466 #ifdef HPPA_COMPILER_BUG
467 /* FIXME: The native HP 9000/700 compiler has a bug which appears
468 when optimizing this file with target i960-vxworks. I haven't
469 been able to construct a simple test case. The problem is that
470 in the second call to SKIP_PROLOGUE below, the compiler somehow
471 does not realize that the statement val = find_pc_line (...) will
472 change the values of the fields of val. It extracts the elements
473 into registers at the top of the block, and does not update the
474 registers after the call to find_pc_line. You can check this by
475 inserting a printf at the end of find_pc_line to show what values
476 it is returning for val.pc and val.end and another printf after
477 the call to see what values the function actually got (remember,
478 this is compiling with cc -O, with this patch removed). You can
479 also examine the assembly listing: search for the second call to
480 skip_prologue; the LDO statement before the next call to
481 find_pc_line loads the address of the structure which
482 find_pc_line will return; if there is a LDW just before the LDO,
483 which fetches an element of the structure, then the compiler
486 Setting val to volatile avoids the problem. We must undef
487 volatile, because the HPPA native compiler does not define
488 __STDC__, although it does understand volatile, and so volatile
489 will have been defined away in defs.h. */
491 volatile struct symtab_and_line val
;
492 #define volatile /*nothing */
494 struct symtab_and_line val
;
496 register char *p
, *p1
;
497 char *q
, *pp
, *ii
, *p2
;
501 register struct symtab
*s
;
503 register struct symbol
*sym
;
504 /* The symtab that SYM was found in. */
505 struct symtab
*sym_symtab
;
507 register CORE_ADDR pc
;
508 register struct minimal_symbol
*msymbol
;
510 struct symbol
*sym_class
;
513 int is_quote_enclosed
;
517 struct symbol
**sym_arr
;
519 char *saved_arg
= *argptr
;
520 extern char *gdb_completer_quote_characters
;
522 INIT_SAL (&val
); /* initialize to zeroes */
524 /* Defaults have defaults. */
526 if (default_symtab
== 0)
528 default_symtab
= current_source_symtab
;
529 default_line
= current_source_line
;
532 /* See if arg is *PC */
537 pc
= parse_and_eval_address_1 (argptr
);
539 values
.sals
= (struct symtab_and_line
*)
540 xmalloc (sizeof (struct symtab_and_line
));
543 values
.sals
[0] = find_pc_line (pc
, 0);
544 values
.sals
[0].pc
= pc
;
545 values
.sals
[0].section
= find_pc_overlay (pc
);
550 /* 'has_if' is for the syntax:
551 * (gdb) break foo if (a==b)
553 if ((ii
= strstr (*argptr
, " if ")) != NULL
||
554 (ii
= strstr (*argptr
, "\tif ")) != NULL
||
555 (ii
= strstr (*argptr
, " if\t")) != NULL
||
556 (ii
= strstr (*argptr
, "\tif\t")) != NULL
||
557 (ii
= strstr (*argptr
, " if(")) != NULL
||
558 (ii
= strstr (*argptr
, "\tif( ")) != NULL
)
560 /* Temporarily zap out "if (condition)" to not
561 * confuse the parenthesis-checking code below.
562 * This is undone below. Do not change ii!!
569 /* Set various flags.
570 * 'has_parens' is important for overload checking, where
571 * we allow things like:
572 * (gdb) break c::f(int)
575 /* Maybe arg is FILE : LINENUM or FILE : FUNCTION */
577 is_quoted
= (**argptr
578 && strchr (get_gdb_completer_quote_characters (),
581 has_parens
= ((pp
= strchr (*argptr
, '(')) != NULL
582 && (pp
= strrchr (pp
, ')')) != NULL
);
584 /* Now that we're safely past the has_parens check,
585 * put back " if (condition)" so outer layers can see it
590 /* Maybe we were called with a line range FILENAME:LINENUM,FILENAME:LINENUM
591 and we must isolate the first half. Outer layers will call again later
594 Don't count commas that appear in argument lists of overloaded
595 functions, or in quoted strings. It's stupid to go to this much
596 trouble when the rest of the function is such an obvious roach hotel. */
597 ii
= find_toplevel_char (*argptr
, ',');
598 has_comma
= (ii
!= 0);
600 /* Temporarily zap out second half to not
601 * confuse the code below.
602 * This is undone below. Do not change ii!!
609 /* Maybe arg is FILE : LINENUM or FILE : FUNCTION */
610 /* May also be CLASS::MEMBER, or NAMESPACE::NAME */
611 /* Look for ':', but ignore inside of <> */
617 is_quote_enclosed
= 1;
622 is_quote_enclosed
= 0;
627 char *temp_end
= find_template_name_end (p
);
629 error ("malformed template specification in command");
632 /* Check for the end of the first half of the linespec. End of line,
633 a tab, a double colon or the last single colon, or a space. But
634 if enclosed in double quotes we do not break on enclosed spaces */
638 && ((p
[1] == ':') || (strchr (p
+ 1, ':') == NULL
)))
639 || ((p
[0] == ' ') && !is_quote_enclosed
))
641 if (p
[0] == '.' && strchr (p
, ':') == NULL
) /* Java qualified method. */
643 /* Find the *last* '.', since the others are package qualifiers. */
644 for (p1
= p
; *p1
; p1
++)
652 while (p
[0] == ' ' || p
[0] == '\t')
655 /* if the closing double quote was left at the end, remove it */
656 if (is_quote_enclosed
)
658 char *closing_quote
= strchr (p
- 1, '"');
659 if (closing_quote
&& closing_quote
[1] == '\0')
660 *closing_quote
= '\0';
663 /* Now that we've safely parsed the first half,
664 * put back ',' so outer layers can see it
669 if ((p
[0] == ':' || p
[0] == '.') && !has_parens
)
674 *argptr
= *argptr
+ 1;
675 if (p
[0] == '.' || p
[1] == ':')
677 char *saved_arg2
= *argptr
;
679 /* First check for "global" namespace specification,
680 of the form "::foo". If found, skip over the colons
681 and jump to normal symbol processing */
683 && ((*argptr
== p
) || (p
[-1] == ' ') || (p
[-1] == '\t')))
686 /* We have what looks like a class or namespace
687 scope specification (A::B), possibly with many
688 levels of namespaces or classes (A::B::C::D).
690 Some versions of the HP ANSI C++ compiler (as also possibly
691 other compilers) generate class/function/member names with
692 embedded double-colons if they are inside namespaces. To
693 handle this, we loop a few times, considering larger and
694 larger prefixes of the string as though they were single
695 symbols. So, if the initially supplied string is
696 A::B::C::D::foo, we have to look up "A", then "A::B",
697 then "A::B::C", then "A::B::C::D", and finally
698 "A::B::C::D::foo" as single, monolithic symbols, because
699 A, B, C or D may be namespaces.
701 Note that namespaces can nest only inside other
702 namespaces, and not inside classes. So we need only
703 consider *prefixes* of the string; there is no need to look up
704 "B::C" separately as a symbol in the previous example. */
706 p2
= p
; /* save for restart */
709 /* Extract the class name. */
711 while (p
!= *argptr
&& p
[-1] == ' ')
713 copy
= (char *) alloca (p
- *argptr
+ 1);
714 memcpy (copy
, *argptr
, p
- *argptr
);
715 copy
[p
- *argptr
] = 0;
717 /* Discard the class name from the arg. */
718 p
= p1
+ (p1
[0] == ':' ? 2 : 1);
719 while (*p
== ' ' || *p
== '\t')
723 sym_class
= lookup_symbol (copy
, 0, STRUCT_NAMESPACE
, 0,
724 (struct symtab
**) NULL
);
727 (t
= check_typedef (SYMBOL_TYPE (sym_class
)),
728 (TYPE_CODE (t
) == TYPE_CODE_STRUCT
729 || TYPE_CODE (t
) == TYPE_CODE_UNION
)))
731 /* Arg token is not digits => try it as a function name
732 Find the next token(everything up to end or next blank). */
734 && strchr (get_gdb_completer_quote_characters (),
737 p
= skip_quoted (*argptr
);
738 *argptr
= *argptr
+ 1;
743 while (*p
&& *p
!= ' ' && *p
!= '\t' && *p
!= ',' && *p
!= ':')
747 q = operator_chars (*argptr, &q1);
751 char *tmp = alloca (q1 - q + 1);
752 memcpy (tmp, q, q1 - q);
754 opname = cplus_mangle_opname (tmp, DMGL_ANSI);
758 printf_filtered ("no mangling for \"%s\"\n", tmp);
759 cplusplus_hint (saved_arg);
760 return_to_top_level (RETURN_ERROR);
762 copy = (char*) alloca (3 + strlen(opname));
763 sprintf (copy, "__%s", opname);
769 copy
= (char *) alloca (p
- *argptr
+ 1);
770 memcpy (copy
, *argptr
, p
- *argptr
);
771 copy
[p
- *argptr
] = '\0';
773 && copy
[p
- *argptr
- 1]
774 && strchr (get_gdb_completer_quote_characters (),
775 copy
[p
- *argptr
- 1]) != NULL
)
776 copy
[p
- *argptr
- 1] = '\0';
779 /* no line number may be specified */
780 while (*p
== ' ' || *p
== '\t')
785 i1
= 0; /* counter for the symbol array */
786 sym_arr
= (struct symbol
**) alloca (total_number_of_methods (t
)
787 * sizeof (struct symbol
*));
789 if (destructor_name_p (copy
, t
))
791 /* Destructors are a special case. */
792 int m_index
, f_index
;
794 if (get_destructor_fn_field (t
, &m_index
, &f_index
))
796 struct fn_field
*f
= TYPE_FN_FIELDLIST1 (t
, m_index
);
799 lookup_symbol (TYPE_FN_FIELD_PHYSNAME (f
, f_index
),
800 NULL
, VAR_NAMESPACE
, (int *) NULL
,
801 (struct symtab
**) NULL
);
807 i1
= find_methods (t
, copy
, sym_arr
);
810 /* There is exactly one field with that name. */
813 if (sym
&& SYMBOL_CLASS (sym
) == LOC_BLOCK
)
815 values
.sals
= (struct symtab_and_line
*)
816 xmalloc (sizeof (struct symtab_and_line
));
818 values
.sals
[0] = find_function_start_sal (sym
,
829 /* There is more than one field with that name
830 (overloaded). Ask the user which one to use. */
831 return decode_line_2 (sym_arr
, i1
, funfirstline
, canonical
);
837 if (OPNAME_PREFIX_P (copy
))
839 tmp
= (char *) alloca (strlen (copy
+ 3) + 9);
840 strcpy (tmp
, "operator ");
841 strcat (tmp
, copy
+ 3);
848 ("the class `%s' does not have destructor defined\n",
849 SYMBOL_SOURCE_NAME (sym_class
));
852 ("the class %s does not have any method named %s\n",
853 SYMBOL_SOURCE_NAME (sym_class
), tmp
);
854 cplusplus_hint (saved_arg
);
855 return_to_top_level (RETURN_ERROR
);
859 /* Move pointer up to next possible class/namespace token */
860 p
= p2
+ 1; /* restart with old value +1 */
861 /* Move pointer ahead to next double-colon */
862 while (*p
&& (p
[0] != ' ') && (p
[0] != '\t') && (p
[0] != '\''))
866 temp_end
= find_template_name_end (p
);
868 error ("malformed template specification in command");
871 else if ((p
[0] == ':') && (p
[1] == ':'))
872 break; /* found double-colon */
878 break; /* out of the while (1) */
880 p2
= p
; /* save restart for next time around */
881 *argptr
= saved_arg2
; /* restore argptr */
884 /* Last chance attempt -- check entire name as a symbol */
885 /* Use "copy" in preparation for jumping out of this block,
886 to be consistent with usage following the jump target */
887 copy
= (char *) alloca (p
- saved_arg2
+ 1);
888 memcpy (copy
, saved_arg2
, p
- saved_arg2
);
889 /* Note: if is_quoted should be true, we snuff out quote here anyway */
890 copy
[p
- saved_arg2
] = '\000';
891 /* Set argptr to skip over the name */
892 *argptr
= (*p
== '\'') ? p
+ 1 : p
;
893 /* Look up entire name */
894 sym
= lookup_symbol (copy
, 0, VAR_NAMESPACE
, 0, &sym_symtab
);
895 s
= (struct symtab
*) 0;
896 /* Prepare to jump: restore the " if (condition)" so outer layers see it */
897 /* Symbol was found --> jump to normal symbol processing.
898 Code following "symbol_found" expects "copy" to have the
899 symbol name, "sym" to have the symbol pointer, "s" to be
900 a specified file's symtab, and sym_symtab to be the symbol's
902 /* By jumping there we avoid falling through the FILE:LINE and
903 FILE:FUNC processing stuff below */
907 /* Couldn't find any interpretation as classes/namespaces, so give up */
909 /* The quotes are important if copy is empty. */
911 ("Can't find member of namespace, class, struct, or union named \"%s\"\n", copy
);
912 cplusplus_hint (saved_arg
);
913 return_to_top_level (RETURN_ERROR
);
918 /* Extract the file name. */
920 while (p
!= *argptr
&& p
[-1] == ' ')
922 if ((*p
== '"') && is_quote_enclosed
)
924 copy
= (char *) alloca (p
- *argptr
+ 1);
925 if ((**argptr
== '"') && is_quote_enclosed
)
927 memcpy (copy
, *argptr
+ 1, p
- *argptr
- 1);
928 /* It may have the ending quote right after the file name */
929 if (copy
[p
- *argptr
- 2] == '"')
930 copy
[p
- *argptr
- 2] = 0;
932 copy
[p
- *argptr
- 1] = 0;
936 memcpy (copy
, *argptr
, p
- *argptr
);
937 copy
[p
- *argptr
] = 0;
940 /* Find that file's data. */
941 s
= lookup_symtab (copy
);
944 if (!have_full_symbols () && !have_partial_symbols ())
945 error ("No symbol table is loaded. Use the \"file\" command.");
946 error ("No source file named %s.", copy
);
949 /* Discard the file name from the arg. */
951 while (*p
== ' ' || *p
== '\t')
956 /* No one really seems to know why this was added. It certainly
957 breaks the command line, though, whenever the passed
958 name is of the form ClassName::Method. This bit of code
959 singles out the class name, and if funfirstline is set (for
960 example, you are setting a breakpoint at this function),
961 you get an error. This did not occur with earlier
962 verions, so I am ifdef'ing this out. 3/29/99 */
965 /* Check if what we have till now is a symbol name */
967 /* We may be looking at a template instantiation such
968 as "foo<int>". Check here whether we know about it,
969 instead of falling through to the code below which
970 handles ordinary function names, because that code
971 doesn't like seeing '<' and '>' in a name -- the
972 skip_quoted call doesn't go past them. So see if we
973 can figure it out right now. */
975 copy
= (char *) alloca (p
- *argptr
+ 1);
976 memcpy (copy
, *argptr
, p
- *argptr
);
977 copy
[p
- *argptr
] = '\000';
978 sym
= lookup_symbol (copy
, 0, VAR_NAMESPACE
, 0, &sym_symtab
);
981 /* Yes, we have a symbol; jump to symbol processing */
982 /* Code after symbol_found expects S, SYM_SYMTAB, SYM,
983 and COPY to be set correctly */
984 *argptr
= (*p
== '\'') ? p
+ 1 : p
;
985 s
= (struct symtab
*) 0;
988 /* Otherwise fall out from here and go to file/line spec
993 /* S is specified file's symtab, or 0 if no file specified.
994 arg no longer contains the file name. */
996 /* Check whether arg is all digits (and sign) */
999 if (*q
== '-' || *q
== '+')
1001 while (*q
>= '0' && *q
<= '9')
1004 if (q
!= *argptr
&& (*q
== 0 || *q
== ' ' || *q
== '\t' || *q
== ','))
1006 /* We found a token consisting of all digits -- at least one digit. */
1013 /* We might need a canonical line spec if no file was specified. */
1014 int need_canonical
= (s
== 0) ? 1 : 0;
1016 /* This is where we need to make sure that we have good defaults.
1017 We must guarantee that this section of code is never executed
1018 when we are called with just a function name, since
1019 select_source_symtab calls us with such an argument */
1021 if (s
== 0 && default_symtab
== 0)
1023 select_source_symtab (0);
1024 default_symtab
= current_source_symtab
;
1025 default_line
= current_source_line
;
1028 if (**argptr
== '+')
1029 sign
= plus
, (*argptr
)++;
1030 else if (**argptr
== '-')
1031 sign
= minus
, (*argptr
)++;
1032 val
.line
= atoi (*argptr
);
1039 val
.line
= default_line
+ val
.line
;
1045 val
.line
= default_line
- val
.line
;
1050 break; /* No need to adjust val.line. */
1053 while (*q
== ' ' || *q
== '\t')
1059 /* It is possible that this source file has more than one symtab,
1060 and that the new line number specification has moved us from the
1061 default (in s) to a new one. */
1062 val
.symtab
= find_line_symtab (s
, val
.line
, NULL
, NULL
);
1063 if (val
.symtab
== 0)
1067 values
.sals
= (struct symtab_and_line
*)
1068 xmalloc (sizeof (struct symtab_and_line
));
1069 values
.sals
[0] = val
;
1072 build_canonical_line_spec (values
.sals
, NULL
, canonical
);
1076 /* Arg token is not digits => try it as a variable name
1077 Find the next token (everything up to end or next whitespace). */
1079 if (**argptr
== '$') /* May be a convenience variable */
1080 p
= skip_quoted (*argptr
+ (((*argptr
)[1] == '$') ? 2 : 1)); /* One or two $ chars possible */
1083 p
= skip_quoted (*argptr
);
1085 error ("Unmatched single quote.");
1087 else if (has_parens
)
1093 p
= skip_quoted (*argptr
);
1096 copy
= (char *) alloca (p
- *argptr
+ 1);
1097 memcpy (copy
, *argptr
, p
- *argptr
);
1098 copy
[p
- *argptr
] = '\0';
1101 && copy
[0] == copy
[p
- *argptr
- 1]
1102 && strchr (get_gdb_completer_quote_characters (), copy
[0]) != NULL
)
1104 copy
[p
- *argptr
- 1] = '\0';
1107 while (*p
== ' ' || *p
== '\t')
1111 /* If it starts with $: may be a legitimate variable or routine name
1112 (e.g. HP-UX millicode routines such as $$dyncall), or it may
1113 be history value, or it may be a convenience variable */
1119 int need_canonical
= 0;
1121 p
= (copy
[1] == '$') ? copy
+ 2 : copy
+ 1;
1122 while (*p
>= '0' && *p
<= '9')
1124 if (!*p
) /* reached end of token without hitting non-digit */
1126 /* We have a value history reference */
1127 sscanf ((copy
[1] == '$') ? copy
+ 2 : copy
+ 1, "%d", &index
);
1128 valx
= access_value_history ((copy
[1] == '$') ? -index
: index
);
1129 if (TYPE_CODE (VALUE_TYPE (valx
)) != TYPE_CODE_INT
)
1130 error ("History values used in line specs must have integer values.");
1134 /* Not all digits -- may be user variable/function or a
1135 convenience variable */
1137 /* Look up entire name as a symbol first */
1138 sym
= lookup_symbol (copy
, 0, VAR_NAMESPACE
, 0, &sym_symtab
);
1139 s
= (struct symtab
*) 0;
1141 /* Symbol was found --> jump to normal symbol processing.
1142 Code following "symbol_found" expects "copy" to have the
1143 symbol name, "sym" to have the symbol pointer, "s" to be
1144 a specified file's symtab, and sym_symtab to be the symbol's
1149 /* If symbol was not found, look in minimal symbol tables */
1150 msymbol
= lookup_minimal_symbol (copy
, 0, 0);
1151 /* Min symbol was found --> jump to minsym processing. */
1153 goto minimal_symbol_found
;
1155 /* Not a user variable or function -- must be convenience variable */
1156 need_canonical
= (s
== 0) ? 1 : 0;
1157 valx
= value_of_internalvar (lookup_internalvar (copy
+ 1));
1158 if (TYPE_CODE (VALUE_TYPE (valx
)) != TYPE_CODE_INT
)
1159 error ("Convenience variables used in line specs must have integer values.");
1162 /* Either history value or convenience value from above, in valx */
1163 val
.symtab
= s
? s
: default_symtab
;
1164 val
.line
= value_as_long (valx
);
1167 values
.sals
= (struct symtab_and_line
*) xmalloc (sizeof val
);
1168 values
.sals
[0] = val
;
1172 build_canonical_line_spec (values
.sals
, NULL
, canonical
);
1178 /* Look up that token as a variable.
1179 If file specified, use that file's per-file block to start with. */
1181 sym
= lookup_symbol (copy
,
1182 (s
? BLOCKVECTOR_BLOCK (BLOCKVECTOR (s
), STATIC_BLOCK
)
1183 : get_selected_block ()),
1184 VAR_NAMESPACE
, 0, &sym_symtab
);
1186 symbol_found
: /* We also jump here from inside the C++ class/namespace
1187 code on finding a symbol of the form "A::B::C" */
1191 if (SYMBOL_CLASS (sym
) == LOC_BLOCK
)
1193 /* Arg is the name of a function */
1194 values
.sals
= (struct symtab_and_line
*)
1195 xmalloc (sizeof (struct symtab_and_line
));
1196 values
.sals
[0] = find_function_start_sal (sym
, funfirstline
);
1199 /* Don't use the SYMBOL_LINE; if used at all it points to
1200 the line containing the parameters or thereabouts, not
1201 the first line of code. */
1203 /* We might need a canonical line spec if it is a static
1207 struct blockvector
*bv
= BLOCKVECTOR (sym_symtab
);
1208 struct block
*b
= BLOCKVECTOR_BLOCK (bv
, STATIC_BLOCK
);
1209 if (lookup_block_symbol (b
, copy
, VAR_NAMESPACE
) != NULL
)
1210 build_canonical_line_spec (values
.sals
, copy
, canonical
);
1217 error ("\"%s\" is not a function", copy
);
1218 else if (SYMBOL_LINE (sym
) != 0)
1220 /* We know its line number. */
1221 values
.sals
= (struct symtab_and_line
*)
1222 xmalloc (sizeof (struct symtab_and_line
));
1224 memset (&values
.sals
[0], 0, sizeof (values
.sals
[0]));
1225 values
.sals
[0].symtab
= sym_symtab
;
1226 values
.sals
[0].line
= SYMBOL_LINE (sym
);
1230 /* This can happen if it is compiled with a compiler which doesn't
1231 put out line numbers for variables. */
1232 /* FIXME: Shouldn't we just set .line and .symtab to zero
1233 and return? For example, "info line foo" could print
1235 error ("Line number not known for symbol \"%s\"", copy
);
1239 msymbol
= lookup_minimal_symbol (copy
, NULL
, NULL
);
1241 minimal_symbol_found
: /* We also jump here from the case for variables
1242 that begin with '$' */
1244 if (msymbol
!= NULL
)
1246 values
.sals
= (struct symtab_and_line
*)
1247 xmalloc (sizeof (struct symtab_and_line
));
1248 values
.sals
[0] = find_pc_sect_line (SYMBOL_VALUE_ADDRESS (msymbol
),
1249 (struct sec
*) 0, 0);
1250 values
.sals
[0].section
= SYMBOL_BFD_SECTION (msymbol
);
1253 values
.sals
[0].pc
+= FUNCTION_START_OFFSET
;
1254 values
.sals
[0].pc
= SKIP_PROLOGUE (values
.sals
[0].pc
);
1260 if (!have_full_symbols () &&
1261 !have_partial_symbols () && !have_minimal_symbols ())
1262 error ("No symbol table is loaded. Use the \"file\" command.");
1264 error ("Function \"%s\" not defined.", copy
);
1265 return values
; /* for lint */