Re: 2.6.9-rc4-mm1

From: Brice Goglin
Date: Mon Oct 11 2004 - 06:45:58 EST


Andrew Morton wrote:
>ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.9-rc4/2.6.9-rc4-mm1/
[...]
> kgdb-ga.patch
> kgdb stub for ia32 (George Anzinger's one)
> kgdbL warning fix
> kgdb buffer overflow fix
> kgdbL warning fix
> kgdb: CONFIG_DEBUG_INFO fix
> x86_64 fixes
> correct kgdb.txt Documentation link (against 2.6.1-rc1-mm2)
> kgdb: fix for recent gcc
> kgdb warning fixes
> THREAD_SIZE fixes for kgdb
> Fix stack overflow test for non-8k stacks
> kgdb-ga.patch fix for i386 single-step into sysenter
> fix TRAP_BAD_SYSCALL_EXITS on i386
> add TRAP_BAD_SYSCALL_EXITS config for i386

Hi Andrew,

When compiling on my P3 with CONFIG_KGDB, I get this error :

CC arch/i386/kernel/traps.o
arch/i386/kernel/traps.c: Dans la fonction « do_debug »:
arch/i386/kernel/traps.c:776: error: `sysenter_past_esp' undeclared (first use in this function)
arch/i386/kernel/traps.c:776: error: (Each undeclared identifier is reported only once
arch/i386/kernel/traps.c:776: error: for each function it appears in.)
make[1]: *** [arch/i386/kernel/traps.o] Erreur 1
make: *** [arch/i386/kernel] Erreur 2

sysenter_past_esp is declared (as extern). But it seems that kgdb-ga.patch moved it inside of the the print_context_stack
function so that it's not visible outside anymore.

Moving "extern void sysenter_past_esp()" outside of print_context_stack
seems to fix compiling. Hope this won't break anything else.
Patch attached.

Regards
Brice Goglin


--- arch/i386/kernel/traps.c.old 2004-10-11 13:22:01.000000000 +0200
+++ arch/i386/kernel/traps.c 2004-10-11 13:39:24.000000000 +0200
@@ -91,6 +91,10 @@
asmlinkage void spurious_interrupt_bug(void);
asmlinkage void machine_check(void);

+#ifdef CONFIG_KGDB
+extern void sysenter_past_esp(void);
+#endif
+
static int kstack_depth_to_print = 24;
struct notifier_block *i386die_chain;
static spinlock_t die_notifier_lock = SPIN_LOCK_UNLOCKED;
@@ -117,7 +121,6 @@
unsigned long addr;

#ifdef CONFIG_KGDB
-extern void sysenter_past_esp(void);
#include <asm/kgdb.h>
#include <linux/init.h>
void set_intr_gate(unsigned int n, void *addr);