mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-02 04:27:46 +08:00
Move some code later in backtrace_command_1
PR backtrace/15584 notes that some code in backtrace_command_1 is not useful when frame filters are in use. This patch moves this code into the no-frame-filters "if". This also removes the unused local "trailing_level", which I noticed while moving the code around. gdb/ChangeLog 2018-03-26 Tom Tromey <tom@tromey.com> PR backtrace/15584: * stack.c (backtrace_command_1): Move some code into no-filters "if".
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2018-03-26 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
PR backtrace/15584:
|
||||||
|
* stack.c (backtrace_command_1): Move some code into no-filters
|
||||||
|
"if".
|
||||||
|
|
||||||
2018-03-26 Tom Tromey <tom@tromey.com>
|
2018-03-26 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* python/py-framefilter.c (throw_quit_or_print_exception): New
|
* python/py-framefilter.c (throw_quit_or_print_exception): New
|
||||||
|
105
gdb/stack.c
105
gdb/stack.c
@ -1698,49 +1698,17 @@ backtrace_command_1 (const char *count_exp, frame_filter_flags flags,
|
|||||||
struct frame_info *fi;
|
struct frame_info *fi;
|
||||||
int count;
|
int count;
|
||||||
int i;
|
int i;
|
||||||
struct frame_info *trailing;
|
int py_start = 0, py_end = 0;
|
||||||
int trailing_level, py_start = 0, py_end = 0;
|
|
||||||
enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
|
enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
|
||||||
|
|
||||||
if (!target_has_stack)
|
if (!target_has_stack)
|
||||||
error (_("No stack."));
|
error (_("No stack."));
|
||||||
|
|
||||||
/* The following code must do two things. First, it must set the
|
|
||||||
variable TRAILING to the frame from which we should start
|
|
||||||
printing. Second, it must set the variable count to the number
|
|
||||||
of frames which we should print, or -1 if all of them. */
|
|
||||||
trailing = get_current_frame ();
|
|
||||||
|
|
||||||
trailing_level = 0;
|
|
||||||
if (count_exp)
|
if (count_exp)
|
||||||
{
|
{
|
||||||
count = parse_and_eval_long (count_exp);
|
count = parse_and_eval_long (count_exp);
|
||||||
if (count < 0)
|
if (count < 0)
|
||||||
{
|
py_start = count;
|
||||||
struct frame_info *current;
|
|
||||||
|
|
||||||
py_start = count;
|
|
||||||
count = -count;
|
|
||||||
|
|
||||||
current = trailing;
|
|
||||||
while (current && count--)
|
|
||||||
{
|
|
||||||
QUIT;
|
|
||||||
current = get_prev_frame (current);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Will stop when CURRENT reaches the top of the stack.
|
|
||||||
TRAILING will be COUNT below it. */
|
|
||||||
while (current)
|
|
||||||
{
|
|
||||||
QUIT;
|
|
||||||
trailing = get_prev_frame (trailing);
|
|
||||||
current = get_prev_frame (current);
|
|
||||||
trailing_level++;
|
|
||||||
}
|
|
||||||
|
|
||||||
count = -1;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
py_start = 0;
|
py_start = 0;
|
||||||
@ -1755,24 +1723,6 @@ backtrace_command_1 (const char *count_exp, frame_filter_flags flags,
|
|||||||
count = -1;
|
count = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info_verbose)
|
|
||||||
{
|
|
||||||
/* Read in symbols for all of the frames. Need to do this in a
|
|
||||||
separate pass so that "Reading in symbols for xxx" messages
|
|
||||||
don't screw up the appearance of the backtrace. Also if
|
|
||||||
people have strong opinions against reading symbols for
|
|
||||||
backtrace this may have to be an option. */
|
|
||||||
i = count;
|
|
||||||
for (fi = trailing; fi != NULL && i--; fi = get_prev_frame (fi))
|
|
||||||
{
|
|
||||||
CORE_ADDR pc;
|
|
||||||
|
|
||||||
QUIT;
|
|
||||||
pc = get_frame_address_in_block (fi);
|
|
||||||
expand_symtab_containing_pc (pc, find_pc_mapped_section (pc));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! no_filters)
|
if (! no_filters)
|
||||||
{
|
{
|
||||||
enum ext_lang_frame_args arg_type;
|
enum ext_lang_frame_args arg_type;
|
||||||
@ -1797,6 +1747,57 @@ backtrace_command_1 (const char *count_exp, frame_filter_flags flags,
|
|||||||
"no-filters" has been specified from the command. */
|
"no-filters" has been specified from the command. */
|
||||||
if (no_filters || result == EXT_LANG_BT_NO_FILTERS)
|
if (no_filters || result == EXT_LANG_BT_NO_FILTERS)
|
||||||
{
|
{
|
||||||
|
struct frame_info *trailing;
|
||||||
|
|
||||||
|
/* The following code must do two things. First, it must set the
|
||||||
|
variable TRAILING to the frame from which we should start
|
||||||
|
printing. Second, it must set the variable count to the number
|
||||||
|
of frames which we should print, or -1 if all of them. */
|
||||||
|
trailing = get_current_frame ();
|
||||||
|
|
||||||
|
if (count_exp != NULL && count < 0)
|
||||||
|
{
|
||||||
|
struct frame_info *current;
|
||||||
|
|
||||||
|
count = -count;
|
||||||
|
|
||||||
|
current = trailing;
|
||||||
|
while (current && count--)
|
||||||
|
{
|
||||||
|
QUIT;
|
||||||
|
current = get_prev_frame (current);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Will stop when CURRENT reaches the top of the stack.
|
||||||
|
TRAILING will be COUNT below it. */
|
||||||
|
while (current)
|
||||||
|
{
|
||||||
|
QUIT;
|
||||||
|
trailing = get_prev_frame (trailing);
|
||||||
|
current = get_prev_frame (current);
|
||||||
|
}
|
||||||
|
|
||||||
|
count = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info_verbose)
|
||||||
|
{
|
||||||
|
/* Read in symbols for all of the frames. Need to do this in a
|
||||||
|
separate pass so that "Reading in symbols for xxx" messages
|
||||||
|
don't screw up the appearance of the backtrace. Also if
|
||||||
|
people have strong opinions against reading symbols for
|
||||||
|
backtrace this may have to be an option. */
|
||||||
|
i = count;
|
||||||
|
for (fi = trailing; fi != NULL && i--; fi = get_prev_frame (fi))
|
||||||
|
{
|
||||||
|
CORE_ADDR pc;
|
||||||
|
|
||||||
|
QUIT;
|
||||||
|
pc = get_frame_address_in_block (fi);
|
||||||
|
expand_symtab_containing_pc (pc, find_pc_mapped_section (pc));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0, fi = trailing; fi && count--; i++, fi = get_prev_frame (fi))
|
for (i = 0, fi = trailing; fi && count--; i++, fi = get_prev_frame (fi))
|
||||||
{
|
{
|
||||||
QUIT;
|
QUIT;
|
||||||
|
Reference in New Issue
Block a user