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:
parent
4ca59a9f36
commit
fb7eb8b582
|
@ -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>
|
||||
|
||||
* 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;
|
||||
int count;
|
||||
int i;
|
||||
struct frame_info *trailing;
|
||||
int trailing_level, py_start = 0, py_end = 0;
|
||||
int py_start = 0, py_end = 0;
|
||||
enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
|
||||
|
||||
if (!target_has_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)
|
||||
{
|
||||
count = parse_and_eval_long (count_exp);
|
||||
if (count < 0)
|
||||
{
|
||||
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;
|
||||
}
|
||||
py_start = count;
|
||||
else
|
||||
{
|
||||
py_start = 0;
|
||||
|
@ -1755,24 +1723,6 @@ backtrace_command_1 (const char *count_exp, frame_filter_flags flags,
|
|||
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)
|
||||
{
|
||||
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. */
|
||||
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))
|
||||
{
|
||||
QUIT;
|
||||
|
|
Loading…
Reference in New Issue