summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2005-05-28 22:51:37 +0000
committerDaniel Jacobowitz <drow@false.org>2005-05-28 22:51:37 +0000
commit4a5e53e83fe72dbd0ddc6482ceed64095b19f56e (patch)
treea1a3cb5f0a0530b6752759477545654b4d175f3b
parenteee84df140f36d21877bb874f6fa0942b16b302e (diff)
downloadbinutils-gdb-4a5e53e83fe72dbd0ddc6482ceed64095b19f56e.tar.gz
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.
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/frame.c25
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,4 +1,12 @@
2005-05-28 Daniel Jacobowitz <dan@codesourcery.com>
+ Jonathan Larmour <jifl@eCosCentric.com>
+
+ 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 <dan@codesourcery.com>
* configure.tgt (powerpc64-*-linux*): Enable gdbserver.
* regformats/reg-ppc64.dat: New file.
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, _("\