* symtab.h (enum address_class): Remove LOC_REGPARM and

LOC_COMPUTED_ARG.
	(struct symbol): Add is_argument.
	(SYMBOL_IS_ARGUMENT): Define.

	* ada-lang.c (ada_add_block_symbols): Use SYMBOL_IS_ARGUMENT.
	* buildsym.c (finish_block): Likewise.
	* stack.c (print_frame_args, print_block_frame_locals)
	(print_frame_arg_vars): Likewise.
	* symtab.c (lookup_block_symbol): Likewise.
	* tracepoint.c (add_local_symbols): Likewise.
	* mi/mi-cmd-stack.c (list_args_or_locals): Likewise.

	* coffread.c (process_coff_symbol): Set SYMBOL_IS_ARGUMENT.
	* dwarf2read.c (new_symbol): Likewise.
	* mdebugread.c (parse_symbol): Likewise.
	* stabsread.c (define_symbol): Likewise.

	* ada-exp.y (select_possible_type_sym): Don't handle LOC_REGPARM
	and LOC_COMPUTED_ARG.
	* ada-lang.c (resolve_subexp, symtab_for_sym): Likewise.
	* ax-gdb.c (gen_var_ref): Likewise.
	* eval.c (evaluate_subexp_for_address): Likewise.
	* findvar.c (symbol_read_needs_frame, read_var_value): Likewise.
	* m2-exp.y (yylex): Likewise.
	* printcmd.c (address_info): Likewise.
	* symmisc.c (print_symbol, print_partial_symbols): Likewise.
	* tracepoint.c (collect_symbol, scope_info): Likewise.

testsuite/:
	* gdb.base/frame-args.exp: Handle arguments that are optimized
	out.
This commit is contained in:
Andreas Schwab 2008-05-27 19:29:52 +00:00
parent 725a9891bc
commit 2a2d4dc301
21 changed files with 144 additions and 237 deletions

View file

@ -235,6 +235,9 @@ print_frame_args (struct symbol *func, struct frame_info *frame,
/* Keep track of the highest stack argument offset seen, and
skip over any kinds of symbols we don't care about. */
if (!SYMBOL_IS_ARGUMENT (sym))
continue;
switch (SYMBOL_CLASS (sym))
{
case LOC_ARG:
@ -262,14 +265,12 @@ print_frame_args (struct symbol *func, struct frame_info *frame,
/* We care about types of symbols, but don't need to
keep track of stack offsets in them. */
case LOC_REGPARM:
case LOC_REGISTER:
case LOC_REGPARM_ADDR:
case LOC_COMPUTED_ARG:
break;
/* Other types of symbols we just skip over. */
case LOC_COMPUTED:
case LOC_OPTIMIZED_OUT:
default:
continue;
break;
}
/* We have to look up the symbol because arguments can have
@ -291,7 +292,8 @@ print_frame_args (struct symbol *func, struct frame_info *frame,
nsym = lookup_symbol (DEPRECATED_SYMBOL_NAME (sym),
b, VAR_DOMAIN, NULL);
gdb_assert (nsym != NULL);
if (SYMBOL_CLASS (nsym) == LOC_REGISTER)
if (SYMBOL_CLASS (nsym) == LOC_REGISTER
&& !SYMBOL_IS_ARGUMENT (nsym))
{
/* There is a LOC_ARG/LOC_REGISTER pair. This means
that it was passed on the stack and loaded into a
@ -1375,6 +1377,8 @@ print_block_frame_locals (struct block *b, struct frame_info *frame,
case LOC_REGISTER:
case LOC_STATIC:
case LOC_COMPUTED:
if (SYMBOL_IS_ARGUMENT (sym))
break;
values_printed = 1;
for (j = 0; j < num_tabs; j++)
fputs_filtered ("\t", stream);
@ -1571,13 +1575,9 @@ print_frame_arg_vars (struct frame_info *frame, struct ui_file *stream)
b = SYMBOL_BLOCK_VALUE (func);
ALL_BLOCK_SYMBOLS (b, iter, sym)
{
switch (SYMBOL_CLASS (sym))
/* Don't worry about things which aren't arguments. */
if (SYMBOL_IS_ARGUMENT (sym))
{
case LOC_ARG:
case LOC_REF_ARG:
case LOC_REGPARM:
case LOC_REGPARM_ADDR:
case LOC_COMPUTED_ARG:
values_printed = 1;
fputs_filtered (SYMBOL_PRINT_NAME (sym), stream);
fputs_filtered (" = ", stream);
@ -1597,11 +1597,6 @@ print_frame_arg_vars (struct frame_info *frame, struct ui_file *stream)
b, VAR_DOMAIN, NULL);
print_variable_value (sym2, frame, stream);
fprintf_filtered (stream, "\n");
break;
default:
/* Don't worry about things which aren't arguments. */
break;
}
}