On Wednesday 27 July 2005 21:22, Allan Graves wrote:
> Hi guys, from the lists, this looks like it should work.  Its not
> though, and so my question. :)

> I'm working on debugging a module, and it panics and takes down uml.
> I'm running uml in a gdb session, but since UML exits after the panic
> code, i don't have a backtrace, context, or really anything to help me
> debug.  I've tried putting a breakpoint on panic to catch it, but for
> some reason, it didn't stop it.  Any thoughts on how i can get gdb to
> catch and keep the context of the panic and not just let UML exit?

Well, a first thing might be to compile in only SKAS mode, and play with 
static / dynamic. GDB has always appreciated more a standard binary than a TT 
one.

If it's a segfault put a breakpoint on handle_segv, otherwise you can always 
try adding something as dump_stack() at the beginning of panic(); there's 
currently one done by
        notifier_call_chain(&panic_notifier_list, 0, buf);

in particular by panic_exit, but it doesn't always work.

And I think that the two attached patches might improve this (I can't use GDB 
on UML without them).
-- 
Inform me of my mistakes, so I can keep imitating Homer Simpson's "Doh!".
Paolo Giarrusso, aka Blaisorblade (Skype ID "PaoloGiarrusso", ICQ 215621894)
http://www.user-mode-linux.org/~blaisorblade

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]>
---

 linux-2.6.git-paolo/arch/um/kernel/uml.lds.S |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+)

diff -puN arch/um/kernel/uml.lds.S~uml-add-dwarf-sections-to-static-link-script arch/um/kernel/uml.lds.S
--- linux-2.6.git/arch/um/kernel/uml.lds.S~uml-add-dwarf-sections-to-static-link-script	2005-07-18 18:53:15.000000000 +0200
+++ linux-2.6.git-paolo/arch/um/kernel/uml.lds.S	2005-07-18 18:53:15.000000000 +0200
@@ -103,4 +103,29 @@ SECTIONS
   .stab.index 0 : { *(.stab.index) }
   .stab.indexstr 0 : { *(.stab.indexstr) }
   .comment 0 : { *(.comment) }
+  /* DWARF debug sections.
+     Symbols in the DWARF debugging sections are relative to the beginning
+     of the section so we begin them at 0.  */
+  /* DWARF 1 */
+  .debug          0 : { *(.debug) }
+  .line           0 : { *(.line) }
+  /* GNU DWARF 1 extensions */
+  .debug_srcinfo  0 : { *(.debug_srcinfo) }
+  .debug_sfnames  0 : { *(.debug_sfnames) }
+  /* DWARF 1.1 and DWARF 2 */
+  .debug_aranges  0 : { *(.debug_aranges) }
+  .debug_pubnames 0 : { *(.debug_pubnames) }
+  /* DWARF 2 */
+  .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+  .debug_abbrev   0 : { *(.debug_abbrev) }
+  .debug_line     0 : { *(.debug_line) }
+  .debug_frame    0 : { *(.debug_frame) }
+  .debug_str      0 : { *(.debug_str) }
+  .debug_loc      0 : { *(.debug_loc) }
+  .debug_macinfo  0 : { *(.debug_macinfo) }
+  /* SGI/MIPS DWARF 2 extensions */
+  .debug_weaknames 0 : { *(.debug_weaknames) }
+  .debug_funcnames 0 : { *(.debug_funcnames) }
+  .debug_typenames 0 : { *(.debug_typenames) }
+  .debug_varnames  0 : { *(.debug_varnames) }
 }
_

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[EMAIL PROTECTED]>
---

 linux-2.6.git-paolo/arch/um/Kconfig          |   10 ++++++++++
 linux-2.6.git-paolo/arch/um/kernel/main.c    |    2 +-
 linux-2.6.git-paolo/arch/um/kernel/um_arch.c |    6 +++---
 3 files changed, 14 insertions(+), 4 deletions(-)

diff -puN arch/um/kernel/main.c~uml-fix-host-debug-on-TT-binaries arch/um/kernel/main.c
--- linux-2.6.git/arch/um/kernel/main.c~uml-fix-host-debug-on-TT-binaries	2005-07-18 18:53:19.000000000 +0200
+++ linux-2.6.git-paolo/arch/um/kernel/main.c	2005-07-18 18:53:19.000000000 +0200
@@ -97,7 +97,7 @@ int main(int argc, char **argv, char **e
 		exit(1);
 	}
 
-#ifdef UML_CONFIG_MODE_TT
+#ifdef UML_CONFIG_CMDLINE_ON_HOST
 	/* Allocate memory for thread command lines */
 	if(argc < 2 || strlen(argv[1]) < THREAD_NAME_LEN - 1){
 
diff -puN arch/um/kernel/um_arch.c~uml-fix-host-debug-on-TT-binaries arch/um/kernel/um_arch.c
--- linux-2.6.git/arch/um/kernel/um_arch.c~uml-fix-host-debug-on-TT-binaries	2005-07-18 18:53:19.000000000 +0200
+++ linux-2.6.git-paolo/arch/um/kernel/um_arch.c	2005-07-18 18:53:19.000000000 +0200
@@ -123,7 +123,7 @@ unsigned long start_vm;
 unsigned long end_vm;
 int ncpus = 1;
 
-#ifdef CONFIG_MODE_TT
+#ifdef CONFIG_CMDLINE_ON_HOST
 /* Pointer set in linux_main, the array itself is private to each thread,
  * and changed at address space creation time so this poses no concurrency
  * problems.
@@ -138,7 +138,7 @@ long physmem_size = 32 * 1024 * 1024;
 
 void set_cmdline(char *cmd)
 {
-#ifdef CONFIG_MODE_TT
+#ifdef CONFIG_CMDLINE_ON_HOST
 	char *umid, *ptr;
 
 	if(CHOOSE_MODE(honeypot, 0)) return;
@@ -366,7 +366,7 @@ int linux_main(int argc, char **argv)
 
 	setup_machinename(system_utsname.machine);
 
-#ifdef CONFIG_MODE_TT
+#ifdef CONFIG_CMDLINE_ON_HOST
 	argv1_begin = argv[1];
 	argv1_end = &argv[1][strlen(argv[1])];
 #endif
diff -puN arch/um/Kconfig~uml-fix-host-debug-on-TT-binaries arch/um/Kconfig
--- linux-2.6.git/arch/um/Kconfig~uml-fix-host-debug-on-TT-binaries	2005-07-18 18:53:19.000000000 +0200
+++ linux-2.6.git-paolo/arch/um/Kconfig	2005-07-18 18:53:19.000000000 +0200
@@ -51,6 +51,16 @@ config MODE_TT
 	use only skas mode (and the host has the skas patch applied to it),
 	then it is OK to say N here.
 
+config CMDLINE_ON_HOST
+	bool
+	depends on MODE_TT && !DEBUG_INFO
+	default y
+	help
+	This controls whether arguments in guest processes should be shown at all.
+	I'm disabling this when TT mode is enabled because it creates problems
+	with host debugging, on recent GDB versions (starting from the execvp
+	point).
+
 config STATIC_LINK
 	bool "Force a static link"
 	default n
_

Reply via email to