* [Xenomai-core] [PATCH] kgdb over 2.6.17
@ 2006-07-21 12:09 Jan Kiszka
0 siblings, 0 replies; only message in thread
From: Jan Kiszka @ 2006-07-21 12:09 UTC (permalink / raw)
To: xenomai-core
[-- Attachment #1.1: Type: text/plain, Size: 440 bytes --]
This is just a trivial refresh of the existing I-pipe-over-kgdb patches
for 2.6.16. Successfully tested with 2.6.17.6 + I-pipe-1.3-08.
Still keep in mind that you have to add
CFLAGS_kgdb.o += -fno-unit-at-a-time
to kernel/Makefile in order to compile kgdb with gcc-4.1[.1] (you may
remember this when your box locks up or reboots on debugger
attaching...). That's due to a compiler bug which will be fixed in 4.1.2.
Jan
[-- Attachment #1.2: pre-kgdb-CVS-20060721-ipipe-i386.patch --]
[-- Type: text/plain, Size: 839 bytes --]
Index: linux-2.6.17.6/arch/i386/kernel/entry.S
===================================================================
--- linux-2.6.17.6.orig/arch/i386/kernel/entry.S
+++ linux-2.6.17.6/arch/i386/kernel/entry.S
@@ -123,7 +123,7 @@ VM_MASK = 0x00020000
.previous
-KPROBE_ENTRY(ret_from_fork)
+ENTRY(ret_from_fork)
pushl %eax
call schedule_tail
GET_THREAD_INFO(%ebp)
@@ -476,7 +476,7 @@ ENTRY(simd_coprocessor_error)
pushl $do_simd_coprocessor_error
jmp error_code
-KPROBE_ENTRY(device_not_available)
+ENTRY(device_not_available)
pushl $-1 # mark this as an int
SAVE_ALL
movl %cr0, %eax
@@ -658,7 +658,7 @@ ENTRY(machine_check)
jmp error_code
#endif
-KPROBE_ENTRY(spurious_interrupt_bug)
+ENTRY(spurious_interrupt_bug)
pushl $0
pushl $do_spurious_interrupt_bug
jmp error_code
[-- Attachment #1.3: core-kgdb-CVS-20060721-ipipe-i386.patch --]
[-- Type: text/plain, Size: 5075 bytes --]
Index: linux-2.6.17.6/kernel/kgdb.c
===================================================================
--- linux-2.6.17.6.orig/kernel/kgdb.c
+++ linux-2.6.17.6/kernel/kgdb.c
@@ -50,6 +50,15 @@
#include <linux/sched.h>
#include <asm/byteorder.h>
+#if defined(CONFIG_KGDB) && defined(CONFIG_IPIPE)
+#undef smp_processor_id
+#undef local_irq_save
+#undef local_irq_restore
+#define smp_processor_id ipipe_processor_id
+#define local_irq_save local_irq_save_hw
+#define local_irq_restore local_irq_restore_hw
+#endif
+
extern int pid_max;
/* How many times to count all of the waiting CPUs */
#define ROUNDUP_WAIT 640000 /* Arbitrary, increase if needed. */
@@ -742,7 +751,7 @@ static void kgdb_wait(struct pt_regs *re
local_irq_save(flags);
processor = smp_processor_id();
kgdb_info[processor].debuggerinfo = regs;
- kgdb_info[processor].task = current;
+ kgdb_info[processor].task = ipipe_safe_current();
atomic_set(&procindebug[processor], 1);
atomic_set(&kgdb_sync_softlockup[smp_processor_id()], 1);
@@ -883,8 +892,8 @@ int kgdb_deactivate_sw_breakpoints(void)
kgdb_break[i].saved_instr)))
return error;
- if (CACHE_FLUSH_IS_SAFE && current->mm &&
- addr < TASK_SIZE)
+ if (CACHE_FLUSH_IS_SAFE && ipipe_safe_current() == current &&
+ current->mm && addr < TASK_SIZE)
flush_cache_range(current->mm->mmap_cache,
addr, addr + BREAK_INSTR_SIZE);
else if (CACHE_FLUSH_IS_SAFE)
@@ -1068,7 +1077,7 @@ int kgdb_handle_exception(int ex_vector,
goto kgdb_restore;
kgdb_info[processor].debuggerinfo = linux_regs;
- kgdb_info[processor].task = current;
+ kgdb_info[processor].task = ipipe_safe_current();
kgdb_disable_hw_debug(linux_regs);
@@ -1120,7 +1129,8 @@ int kgdb_handle_exception(int ex_vector,
*ptr++ = hexchars[(signo >> 4) % 16];
*ptr++ = hexchars[signo % 16];
ptr += strlen(strcpy(ptr, "thread:"));
- int_to_threadref(&thref, shadow_pid(current->pid));
+ int_to_threadref(&thref,
+ shadow_pid(ipipe_safe_current()->pid));
ptr = pack_threadid(ptr, &thref);
*ptr++ = ';';
@@ -1212,7 +1222,8 @@ int kgdb_handle_exception(int ex_vector,
kgdb_hex2mem(&remcom_in_buffer[1], (char *)gdb_regs,
NUMREGBYTES);
- if (kgdb_usethread && kgdb_usethread != current)
+ if (kgdb_usethread &&
+ kgdb_usethread != ipipe_safe_current())
error_packet(remcom_out_buffer, -EINVAL);
else {
gdb_regs_to_regs(gdb_regs, linux_regs);
@@ -1333,7 +1344,8 @@ int kgdb_handle_exception(int ex_vector,
/* Current thread id */
strcpy(remcom_out_buffer, "QC");
- threadid = shadow_pid(current->pid);
+ threadid =
+ shadow_pid(ipipe_safe_current()->pid);
int_to_threadref(&thref, threadid);
pack_threadid(remcom_out_buffer + 2, &thref);
@@ -1487,7 +1499,8 @@ int kgdb_handle_exception(int ex_vector,
break;
case 'c':
case 's':
- if (kgdb_contthread && kgdb_contthread != current) {
+ if (kgdb_contthread &&
+ kgdb_contthread != ipipe_safe_current()) {
/* Can't switch threads in kgdb */
error_packet(remcom_out_buffer, -EINVAL);
break;
Index: linux-2.6.17.6/lib/Kconfig.debug
===================================================================
--- linux-2.6.17.6.orig/lib/Kconfig.debug
+++ linux-2.6.17.6/lib/Kconfig.debug
@@ -274,7 +274,7 @@ choice
config KGDB_ONLY_MODULES
bool "KGDB: Use only kernel modules for I/O"
- depends on MODULES
+ depends on MODULES && !IPIPE
help
Use only kernel modules to configure KGDB I/O after the
kernel is booted.
@@ -319,7 +319,7 @@ config KGDB_SIBYTE
endchoice
config KGDBOE
- tristate "KGDB: On ethernet" if !KGDBOE_NOMODULE
+ tristate "KGDB: On ethernet" if !KGDBOE_NOMODULE && !IPIPE
depends on m && KGDB
select NETPOLL
select NETPOLL_TRAP
Index: linux-2.6.17.6/drivers/serial/8250_kgdb.c
===================================================================
--- linux-2.6.17.6.orig/drivers/serial/8250_kgdb.c
+++ linux-2.6.17.6/drivers/serial/8250_kgdb.c
@@ -301,6 +301,10 @@ static void __init kgdb8250_late_init(vo
"GDB-stub", current_port) < 0)
printk(KERN_ERR "KGDB failed to request the serial IRQ (%d)\n",
current_port->irq);
+#ifdef CONFIG_IPIPE
+ ipipe_control_irq(current_port->irq, 0,
+ IPIPE_HANDLE_MASK|IPIPE_STICKY_MASK|IPIPE_SYSTEM_MASK);
+#endif /* CONFIG_IPIPE */
}
static __init int kgdb_init_io(void)
Index: linux-2.6.17.6/arch/i386/kernel/kgdb.c
===================================================================
--- linux-2.6.17.6.orig/arch/i386/kernel/kgdb.c
+++ linux-2.6.17.6/arch/i386/kernel/kgdb.c
@@ -43,6 +43,11 @@
#include "mach_ipi.h"
+#if defined(CONFIG_KGDB) && defined(CONFIG_IPIPE)
+#undef smp_processor_id
+#define smp_processor_id ipipe_processor_id
+#endif
+
/* Put the error code here just in case the user cares. */
int gdb_i386errcode;
/* Likewise, the vector number here (since GDB only gets the signal
[-- Attachment #1.4: post-kgdb-CVS-20060721-ipipe-i386.patch --]
[-- Type: text/plain, Size: 862 bytes --]
Index: linux-2.6.17.6/arch/i386/kernel/entry.S
===================================================================
--- linux-2.6.17.6.orig/arch/i386/kernel/entry.S
+++ linux-2.6.17.6/arch/i386/kernel/entry.S
@@ -194,7 +194,7 @@ VM_MASK = 0x00020000
.previous
-ENTRY(ret_from_fork)
+KPROBE_ENTRY(ret_from_fork)
STI_COND_HW
pushl %eax
call schedule_tail
@@ -588,7 +588,7 @@ ENTRY(simd_coprocessor_error)
PUSH_XCODE(do_simd_coprocessor_error)
jmp error_code
-ENTRY(device_not_available)
+KPROBE_ENTRY(device_not_available)
pushl $-1 # mark this as an int
SAVE_ALL
DIVERT_EXCEPTION(device_not_available)
@@ -773,7 +773,7 @@ ENTRY(machine_check)
jmp error_code
#endif
-ENTRY(spurious_interrupt_bug)
+KPROBE_ENTRY(spurious_interrupt_bug)
pushl $0
PUSH_XCODE(do_spurious_interrupt_bug)
jmp error_code
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 250 bytes --]
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2006-07-21 12:09 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-07-21 12:09 [Xenomai-core] [PATCH] kgdb over 2.6.17 Jan Kiszka
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.