From 4a5e53e83fe72dbd0ddc6482ceed64095b19f56e Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Sat, 28 May 2005 22:51:37 +0000 Subject: PR backtrace/1760 * frame.c (backtrace_limit): Change type to int. (get_prev_frame): Update backtrace limit support. (_initialize_frame): Use add_setshow_integer_cmd for backtrace_limit. --- gdb/ChangeLog | 8 ++++++++ gdb/frame.c | 25 ++++++++++++++++--------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 8b4690e3d4e..c6c45bde339 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2005-05-28 Daniel Jacobowitz + Jonathan Larmour + + PR backtrace/1760 + * frame.c (backtrace_limit): Change type to int. + (get_prev_frame): Update backtrace limit support. + (_initialize_frame): Use add_setshow_integer_cmd for backtrace_limit. + 2005-05-28 Daniel Jacobowitz * configure.tgt (powerpc64-*-linux*): Enable gdbserver. diff --git a/gdb/frame.c b/gdb/frame.c index d692f33f639..dcdf2994d0d 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -141,7 +141,7 @@ Whether backtraces should continue past the entry point of a program is %s.\n"), value); } -static unsigned int backtrace_limit = UINT_MAX; +static int backtrace_limit = INT_MAX; static void show_backtrace_limit (struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value) @@ -1258,9 +1258,16 @@ get_prev_frame (struct frame_info *this_frame) return NULL; } - if (this_frame->level > backtrace_limit) + /* If the user's backtrace limit has been exceeded, stop. We must + add two to the current level; one of those accounts for backtrace_limit + being 1-based and the level being 0-based, and the other accounts for + the level of the new frame instead of the level of the current + frame. */ + if (this_frame->level + 2 > backtrace_limit) { - error (_("Backtrace limit of %d exceeded"), backtrace_limit); + frame_debug_got_null_frame (gdb_stdlog, this_frame, + "backtrace limit exceeded"); + return NULL; } /* If we're already inside the entry function for the main objfile, @@ -1610,16 +1617,16 @@ the rest of the stack trace."), &set_backtrace_cmdlist, &show_backtrace_cmdlist); - add_setshow_uinteger_cmd ("limit", class_obscure, - &backtrace_limit, _("\ + add_setshow_integer_cmd ("limit", class_obscure, + &backtrace_limit, _("\ Set an upper bound on the number of backtrace levels."), _("\ Show the upper bound on the number of backtrace levels."), _("\ No more than the specified number of frames can be displayed or examined.\n\ Zero is unlimited."), - NULL, - show_backtrace_limit, - &set_backtrace_cmdlist, - &show_backtrace_cmdlist); + NULL, + show_backtrace_limit, + &set_backtrace_cmdlist, + &show_backtrace_cmdlist); /* Debug this files internals. */ add_setshow_zinteger_cmd ("frame", class_maintenance, &frame_debug, _("\ -- cgit v1.2.1