Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02215759 authored by Paolo 'Blaisorblade' Giarrusso's avatar Paolo 'Blaisorblade' Giarrusso Committed by Linus Torvalds
Browse files

[PATCH] uml: workaround GDB problems on debugging



Apparently, GDB gets confused when we do an execvp() on ourselves.

Since it's simply done to allocate further space for command line arguments
(which we'll use to allow gathering the startup command line for guest
processes through the host), allow the user to disable that to get a
debuggable UML binary.

Signed-off-by: default avatarPaolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Cc: Jeff Dike <jdike@addtoit.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 640aa46e
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -2,6 +2,17 @@ menu "Kernel hacking"

source "lib/Kconfig.debug"

config CMDLINE_ON_HOST
	bool "Show command line arguments on the host in TT mode"
	depends on MODE_TT
	default !DEBUG_INFO
	help
	This controls whether arguments in guest processes should be shown on
	the host's ps output.
	Enabling this option hinders debugging on some recent GDB versions
	(because GDB gets "confused" when we do an execvp()). So probably you
	should disable it.

config PT_PROXY
	bool "Enable ptrace proxy"
	depends on XTERM_CHAN && DEBUG_INFO && MODE_TT
+1 −1
Original line number Diff line number Diff line
@@ -97,7 +97,7 @@ int main(int argc, char **argv, char **envp)
		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){

+3 −3
Original line number Diff line number Diff line
@@ -126,7 +126,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.
@@ -141,7 +141,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;
@@ -385,7 +385,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