Skip to content

Commit

Permalink
stacktrace: add saved stack traces to backtrace self-test
Browse files Browse the repository at this point in the history
This patch adds saved stack-traces to the backtrace suite of self-tests.

Note that we don't depend on or unconditionally enable CONFIG_STACKTRACE
because not all architectures may have it (and we still want to enable the
other tests for those architectures).

Cc: Arjan van de Ven <[email protected]>
Signed-off-by: Vegard Nossum <[email protected]>
Cc: Arjan van de Ven <[email protected]>
Cc: Andrew Morton <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>
  • Loading branch information
vegard authored and Ingo Molnar committed Jun 27, 2008
1 parent a5a242d commit ad118c5
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
30 changes: 29 additions & 1 deletion kernel/backtracetest.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@
* of the License.
*/

#include <linux/delay.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/delay.h>
#include <linux/stacktrace.h>

static struct timer_list backtrace_timer;

Expand All @@ -22,13 +23,40 @@ static void backtrace_test_timer(unsigned long data)
printk("The following trace is a kernel self test and not a bug!\n");
dump_stack();
}

#ifdef CONFIG_STACKTRACE
static void backtrace_test_saved(void)
{
struct stack_trace trace;
unsigned long entries[8];

printk("Testing a saved backtrace.\n");
printk("The following trace is a kernel self test and not a bug!\n");

trace.nr_entries = 0;
trace.max_entries = ARRAY_SIZE(entries);
trace.entries = entries;
trace.skip = 0;

save_stack_trace(&trace);
print_stack_trace(&trace, 0);
}
#else
static void backtrace_test_saved(void)
{
printk("Saved backtrace test skipped.\n");
}
#endif

static int backtrace_regression_test(void)
{
printk("====[ backtrace testing ]===========\n");
printk("Testing a backtrace from process context.\n");
printk("The following trace is a kernel self test and not a bug!\n");
dump_stack();

backtrace_test_saved();

init_timer(&backtrace_timer);
backtrace_timer.function = backtrace_test_timer;
mod_timer(&backtrace_timer, jiffies + 10);
Expand Down
3 changes: 3 additions & 0 deletions lib/Kconfig.debug
Original file line number Diff line number Diff line change
Expand Up @@ -562,6 +562,9 @@ config BACKTRACE_SELF_TEST
for distributions or general kernels, but only for kernel
developers working on architecture code.

Note that if you want to also test saved backtraces, you will
have to enable STACKTRACE as well.

Say N if you are unsure.

config LKDTM
Expand Down

0 comments on commit ad118c5

Please sign in to comment.