2005-12-01 Jeff Johnston * frame.c (backtrace_past_zero_pc): New static variable. (get_prev_frame): Don't return NULL for zero pc value if backtrace past-zero-frame option is turned on. (_initialize_frame): Initialize new command to allow backtracing past a zero pc value (set backtrace past-zero-pc). testsuite/gdb.base: 2005-12-01 Jeff Johnston * setshow.exp: Add testing of "set backtrace past-zero-pc" option. Index: gdb-6.5/gdb/testsuite/gdb.base/setshow.exp =================================================================== --- gdb-6.5.orig/gdb/testsuite/gdb.base/setshow.exp 2006-07-11 02:46:50.000000000 -0300 +++ gdb-6.5/gdb/testsuite/gdb.base/setshow.exp 2006-07-11 02:47:24.000000000 -0300 @@ -1,4 +1,4 @@ -# Copyright 1992, 1994, 1996, 1997, 1998, 2001, 2003 +# Copyright 1992, 1994, 1996, 1997, 1998, 2001, 2003, 2005 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify @@ -106,6 +106,16 @@ if { ![target_info exists use_gdb_stub] delete_breakpoints gdb_test "run" "Starting program:.*foo bar blup baz bubble.*" "passing args" } +#test show backtrace past-zero-pc +gdb_test "show backtrace past-zero-pc" "Whether backtraces should continue past a zero pc value is off." "default show backtrace past-zero-pc (off)" +#test set backtrace past-zero-pc on +gdb_test "set backtrace past-zero-pc on" "" "set backtrace past-zero-pc on" +#test show backtrace past-zero-pc +gdb_test "show backtrace past-zero-pc" "Whether backtraces should continue past a zero pc value is on." "show backtrace past-zero-pc (on)" +#test set backtrace past-zero-pc off +gdb_test "set backtrace past-zero-pc off" "" "set backtrace past-zero-pc off" +#test show backtrace past-zero-pc +gdb_test "show backtrace past-zero-pc" "Whether backtraces should continue past a zero pc value is off." "show backtrace past-zero-pc (off)" #test set check range on gdb_test "set check range on" "" "set check range on" #test show check range on Index: gdb-6.5/gdb/frame.c =================================================================== --- gdb-6.5.orig/gdb/frame.c 2006-07-11 02:46:50.000000000 -0300 +++ gdb-6.5/gdb/frame.c 2006-07-11 02:51:20.000000000 -0300 @@ -131,6 +131,16 @@ Whether backtraces should continue past value); } +static int backtrace_past_zero_pc; +static void +show_backtrace_past_zero_pc (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("\ +Whether backtraces should continue past a zero pc value is %s.\n"), + value); +} + static int backtrace_past_entry; static void show_backtrace_past_entry (struct ui_file *file, int from_tty, @@ -1313,9 +1323,7 @@ get_prev_frame (struct frame_info *this_ } if (this_frame->level > 0 -#if 0 - && backtrace_past_zero_pc -#endif + && !backtrace_past_zero_pc && get_frame_type (this_frame) == NORMAL_FRAME && get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME && get_frame_pc (this_frame) == 0) @@ -1629,6 +1637,17 @@ the rest of the stack trace."), &set_backtrace_cmdlist, &show_backtrace_cmdlist); + add_setshow_boolean_cmd ("past-zero-pc", class_obscure, + &backtrace_past_zero_pc, _("\ +Set whether backtraces should continue past a zero pc value."), _("\ +Show whether backtraces should continue past a zero pc value."), _("\ +Normally GDB stops backtracing when it finds a zero pc.\n\ +Set this variable if you need to see the rest of the stack trace."), + NULL, + show_backtrace_past_zero_pc, + &set_backtrace_cmdlist, + &show_backtrace_cmdlist); + add_setshow_integer_cmd ("limit", class_obscure, &backtrace_limit, _("\ Set an upper bound on the number of backtrace levels."), _("\