linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch 2.6.15-current] i386: multi-column stack backtraces
@ 2006-01-17  6:23 Chuck Ebbert
  2006-01-17  6:39 ` Dave Jones
  2006-01-17  6:42 ` Andrew Morton
  0 siblings, 2 replies; 13+ messages in thread
From: Chuck Ebbert @ 2006-01-17  6:23 UTC (permalink / raw)
  To: linux-kernel; +Cc: Andrew Morton, Linus Torvalds, Akinobu Mita

Print stack backtraces in multiple columns, saving screen space.
Number of columns is configurable and defaults to one so 
behavior is backwards-compatible.

Also removes the brackets around addresses when printing more
that one entry per line so they print as:
    <address>
instead of:
    [<address>]
This helps multiple entries fit better on one line.

Original idea by Dave Jones, taken from x86_64.

Signed-Off-By: Chuck Ebbert <76306.1226@compuserve.com>

 arch/i386/Kconfig.debug  |    9 +++++++++
 arch/i386/kernel/traps.c |   32 +++++++++++++++++++++++++++-----
 2 files changed, 36 insertions(+), 5 deletions(-)

--- 2.6.15a.orig/arch/i386/kernel/traps.c
+++ 2.6.15a/arch/i386/kernel/traps.c
@@ -112,12 +112,30 @@ static inline int valid_stack_ptr(struct
 		p < (void *)tinfo + THREAD_SIZE - 3;
 }
 
-static inline void print_addr_and_symbol(unsigned long addr, char *log_lvl)
+/*
+ * Print CONFIG_STACK_BACKTRACE_COLS address/symbol entries per line.
+ */
+static inline int print_addr_and_symbol(unsigned long addr, char *log_lvl,
+					int printed)
 {
-	printk(log_lvl);
+	if (!printed)
+		printk(log_lvl);
+
+#if CONFIG_STACK_BACKTRACE_COLS == 1
 	printk(" [<%08lx>] ", addr);
+#else
+	printk(" <%08lx> ", addr);
+#endif
 	print_symbol("%s", addr);
-	printk("\n");
+
+	printed = (printed + 1) % CONFIG_STACK_BACKTRACE_COLS;
+
+	if (printed)
+		printk("  ");
+	else
+		printk("\n");
+
+	return printed;
 }
 
 static inline unsigned long print_context_stack(struct thread_info *tinfo,
@@ -125,20 +143,24 @@ static inline unsigned long print_contex
 				char *log_lvl)
 {
 	unsigned long addr;
+	int printed = 0; /* nr of entries already printed on current line */
 
 #ifdef	CONFIG_FRAME_POINTER
 	while (valid_stack_ptr(tinfo, (void *)ebp)) {
 		addr = *(unsigned long *)(ebp + 4);
-		print_addr_and_symbol(addr, log_lvl);
+		printed = print_addr_and_symbol(addr, log_lvl, printed);
 		ebp = *(unsigned long *)ebp;
 	}
 #else
 	while (valid_stack_ptr(tinfo, stack)) {
 		addr = *stack++;
 		if (__kernel_text_address(addr))
-			print_addr_and_symbol(addr, log_lvl);
+			printed = print_addr_and_symbol(addr, log_lvl, printed);
 	}
 #endif
+	if (printed)
+		printk("\n");
+
 	return ebp;
 }
 
--- 2.6.15a.orig/arch/i386/Kconfig.debug
+++ 2.6.15a/arch/i386/Kconfig.debug
@@ -31,6 +31,15 @@ config DEBUG_STACK_USAGE
 
 	  This option will slow down process creation somewhat.
 
+config STACK_BACKTRACE_COLS
+	int "Stack backtraces per line" if DEBUG_KERNEL
+	range 1 3
+	default 1
+	help
+	  Selects how many stack backtrace entries per line to display.
+
+	  This can save screen space when displaying traces.
+
 comment "Page alloc debug is incompatible with Software Suspend on i386"
 	depends on DEBUG_KERNEL && SOFTWARE_SUSPEND
 
-- 
Chuck
Currently reading: _Einstein's Bridge_ by John Cramer

^ permalink raw reply	[flat|nested] 13+ messages in thread
* Re: [patch 2.6.15-current] i386: multi-column stack backtraces
@ 2006-01-18  3:05 Chuck Ebbert
  0 siblings, 0 replies; 13+ messages in thread
From: Chuck Ebbert @ 2006-01-18  3:05 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: mita, torvalds, linux-kernel, Andrew Morton

In-Reply-To: <20060117181416.GB8047@mars.ravnborg.org>

On Tue, 17 Jan 2006 19:14:16 +0100, Sam Ravnborg wrote:

> On Tue, Jan 17, 2006 at 09:22:09PM +1100, Keith Owens wrote:
> > Should not be a problem for ksymoops.  Most entries use this regex,
> > where [ ] is optional.
> 
> In that case can we then remove the CONFIG option?
> If needed to be configurable a commandline option could do it,
> so one does not have to rebuild the kernel.

I guess it could be a command-line option, but how many times would
you change it?  Only traps.o get rebuilt when you change the config,
and that plus the kernel relink is pretty fast anyway.

-- 
Chuck

^ permalink raw reply	[flat|nested] 13+ messages in thread
* Re: [patch 2.6.15-current] i386: multi-column stack backtraces
@ 2006-01-19  0:36 Chuck Ebbert
  0 siblings, 0 replies; 13+ messages in thread
From: Chuck Ebbert @ 2006-01-19  0:36 UTC (permalink / raw)
  To: Pavel Machek; +Cc: Keith Owens, mita, torvalds, linux-kernel, Andrew Morton

In-Reply-To: <20060118224732.GA1812@elf.ucw.cz>

On Wed, 18 Jan 2006, Pavel Machek wrote:

> I also believe that oops dump is so closely tied
> to kernel that it is fair to change... plus this should better not be
> configurable, or userspace will have hard time parsing it.

Userspace will still have to cope with the old format anyway.

I'll send a patch to change the default to two columns so the
new format gets some exposure, though.

-- 
Chuck
Currently reading: _Noise_ by Hal Clement

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2006-01-19  0:38 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-01-17  6:23 [patch 2.6.15-current] i386: multi-column stack backtraces Chuck Ebbert
2006-01-17  6:39 ` Dave Jones
2006-01-17  6:42 ` Andrew Morton
2006-01-17  7:58   ` Dave Jones
2006-01-17  8:20     ` Andrew Morton
2006-01-17 10:26     ` Keith Owens
2006-01-17 17:12     ` Jan Engelhardt
2006-01-18  5:23       ` Keith Owens
2006-01-17 10:22   ` Keith Owens
2006-01-17 18:14     ` Sam Ravnborg
2006-01-18 22:47   ` Pavel Machek
2006-01-18  3:05 Chuck Ebbert
2006-01-19  0:36 Chuck Ebbert

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).