gdb/symtab.c | 29 +++++++++++++++++++++++++++-- 1 files changed, 27 insertions(+), 2 deletions(-) diff --git a/gdb/symtab.c b/gdb/symtab.c index 65e4248..2047351 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -1730,6 +1730,8 @@ lookup_block_symbol (const struct block *block, const char *name, { struct dict_iterator iter; struct symbol *sym; + struct frame_info *frame; + struct symtab_and_line sal; if (!BLOCK_FUNCTION (block)) { @@ -1739,7 +1741,20 @@ lookup_block_symbol (const struct block *block, const char *name, { if (symbol_matches_domain (SYMBOL_LANGUAGE (sym), SYMBOL_DOMAIN (sym), domain)) - return sym; + { + if(SYMBOL_CLASS (sym)==LOC_LOCAL + ||SYMBOL_CLASS (sym)==LOC_REGISTER + ||SYMBOL_CLASS (sym)==LOC_COMPUTED) + { + frame = get_selected_frame (NULL) ; + find_frame_sal (frame, &sal); + if( block == get_frame_block (frame, 0) + && sym->line >= sal.line) + return NULL; + } + return sym; + } + } return NULL; } @@ -1763,7 +1778,17 @@ lookup_block_symbol (const struct block *block, const char *name, sym_found = sym; if (!SYMBOL_IS_ARGUMENT (sym)) { - break; + if(SYMBOL_CLASS (sym)==LOC_LOCAL + ||SYMBOL_CLASS (sym)==LOC_REGISTER + ||SYMBOL_CLASS (sym)==LOC_COMPUTED) + { + frame = get_selected_frame (NULL) ; + find_frame_sal (frame, &sal); + if(block == get_frame_block (frame, 0) + && sym->line >= sal.line) + sym_found = NULL; + } + break; } } }