From: Tom Tromey <tom@tromey.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: [RFA 08/10] Move some code later in backtrace_command_1
Date: Tue, 25 Apr 2017 19:43:00 -0000 [thread overview]
Message-ID: <20170425194113.17862-9-tom@tromey.com> (raw)
In-Reply-To: <20170425194113.17862-1-tom@tromey.com>
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.
ChangeLog
2017-04-25 Tom Tromey <tom@tromey.com>
PR backtrace/15584:
* stack.c (backtrace_command_1): Move some code into no-filters
"if".
---
gdb/ChangeLog | 6 ++++
gdb/stack.c | 105 +++++++++++++++++++++++++++++-----------------------------
2 files changed, 59 insertions(+), 52 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0bf5386..db6dccf 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
2017-04-25 Tom Tromey <tom@tromey.com>
+ PR backtrace/15584:
+ * stack.c (backtrace_command_1): Move some code into no-filters
+ "if".
+
+2017-04-25 Tom Tromey <tom@tromey.com>
+
* python/py-framefilter.c (throw_quit_or_print_exception): New
function.
(gdbpy_apply_frame_filter): Use it.
diff --git a/gdb/stack.c b/gdb/stack.c
index 77e8c9b..4f6b117 100644
--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -1720,49 +1720,17 @@ backtrace_command_1 (char *count_exp, int flags, int no_filters,
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;
@@ -1775,24 +1743,6 @@ backtrace_command_1 (char *count_exp, int flags, int no_filters,
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;
@@ -1815,6 +1765,57 @@ backtrace_command_1 (char *count_exp, int flags, int no_filters,
"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;
--
2.9.3
next prev parent reply other threads:[~2017-04-25 19:43 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-25 19:41 [RFA 00/10] various frame filter fixes and cleanups Tom Tromey
2017-04-25 19:41 ` [RFA 06/10] Allow C-c to work in backtrace in more cases Tom Tromey
2017-04-28 14:55 ` Phil Muldoon
2017-06-27 16:46 ` Pedro Alves
2017-04-25 19:41 ` [RFA 01/10] Rationalize "backtrace" command line parsing Tom Tromey
2017-06-27 16:25 ` Pedro Alves
2017-07-09 22:34 ` Tom Tromey
2017-07-10 16:48 ` Eli Zaretskii
2017-07-14 12:08 ` Pedro Alves
2017-04-25 19:41 ` [RFA 04/10] Remove EXT_LANG_BT_COMPLETED Tom Tromey
2017-04-28 14:52 ` Phil Muldoon
2017-06-27 16:40 ` Pedro Alves
2017-04-25 19:42 ` [RFA 03/10] Allow elision of some filtered frames Tom Tromey
2017-04-26 10:35 ` Eli Zaretskii
2017-04-28 14:50 ` Phil Muldoon
2017-06-27 16:40 ` Pedro Alves
2017-06-27 20:01 ` Tom Tromey
2017-04-25 19:42 ` [RFA 07/10] Throw a "quit" on a KeyboardException in py-framefilter.c Tom Tromey
2017-04-28 15:06 ` Phil Muldoon
2017-06-27 16:59 ` Pedro Alves
2017-04-25 19:42 ` [RFA 05/10] Avoid manual resource management " Tom Tromey
2017-04-28 14:53 ` Phil Muldoon
2017-06-27 16:43 ` Pedro Alves
2017-04-25 19:42 ` [RFA 10/10] Call wrap_hint in one more spot " Tom Tromey
2017-04-28 15:09 ` Phil Muldoon
2017-06-27 17:35 ` Pedro Alves
2017-04-25 19:42 ` [RFA 09/10] Return EXT_LANG_BT_ERROR " Tom Tromey
2017-04-28 15:08 ` Phil Muldoon
2017-06-27 17:31 ` Pedro Alves
2017-06-27 19:08 ` Pedro Alves
2017-04-25 19:43 ` Tom Tromey [this message]
2017-04-28 15:08 ` [RFA 08/10] Move some code later in backtrace_command_1 Phil Muldoon
2017-06-27 17:18 ` Pedro Alves
2017-04-25 19:43 ` [RFA 02/10] Change backtrace_command_1 calling to use flags Tom Tromey
2017-04-28 14:40 ` Phil Muldoon
2017-06-27 16:29 ` Pedro Alves
2017-07-09 22:22 ` Tom Tromey
2017-07-14 12:02 ` Pedro Alves
2017-07-14 19:16 ` Tom Tromey
2017-05-29 17:21 ` [RFA 00/10] various frame filter fixes and cleanups Tom Tromey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170425194113.17862-9-tom@tromey.com \
--to=tom@tromey.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox