Messages in this thread Patch in this message |  | | Date | Fri, 30 Nov 2001 17:19:23 +0100 | From | Petr Vandrovec <> | Subject | Re: Generating a function call trace |
| |
On Fri, Nov 30, 2001 at 04:33:58PM +0100, Martin Dalecki wrote: > Simon Turvey wrote: > > > > Is it possible to arbitrarily generate (in a module say) a function call > > trace? > > > > Just insert the dereference of a NULL pointer where you wan't to have > it. > The oops gives you what you wan't.... > Or better attach the gdb to /proc/kmem (you will have to compile the > kernel with > debugging on in front of this action) and have fun.
I'm using this ia32-only solution, as killing userspace program is not acceptable under some conditions. Patch below was generated from my 2.5.0-pre1 tree. Petr Vandrovec vandrove@vc.cvut.cz
diff -urdN linux/arch/i386/kernel/traps.c linux/arch/i386/kernel/traps.c --- linux/arch/i386/kernel/traps.c Sun Sep 30 19:26:08 2001 +++ linux/arch/i386/kernel/traps.c Mon Nov 26 15:40:47 2001 @@ -237,6 +237,42 @@ printk("\n"); } +void printstate(void) { + asm volatile ( + "pushl %%ss\n\t" + "pushl %%esp\n\t" + "pushfl\n\t" + "pushl %%cs\n\t" + "call 1f\n" + "1:\n\t" + "pushl %%eax\n\t" + "pushl %%ds\n\t" + "pushl %%es\n\t" + "pushl %%eax\n\t" + "pushl %%ebp\n\t" + "pushl %%edi\n\t" + "pushl %%esi\n\t" + "pushl %%edx\n\t" + "pushl %%ecx\n\t" + "pushl %%ebx\n\t" + "movl %%esp,%%eax\n\t" + "pushl %%eax\n\t" + "call show_registers\n\t" + "addl $4,%%esp\n\t" + "popl %%ebx\n\t" + "popl %%ecx\n\t" + "popl %%edx\n\t" + "popl %%esi\n\t" + "popl %%edi\n\t" + "popl %%ebp\n\t" + "popl %%eax\n\t" + "popl %%es\n\t" + "popl %%ds\n\t" + "popl %%eax\n\t" + "addl $20,%%esp\n\t" + : : : "memory" ); +} + spinlock_t die_lock = SPIN_LOCK_UNLOCKED; void die(const char * str, struct pt_regs * regs, long err) diff -urdN linux/kernel/ksyms.c linux/kernel/ksyms.c --- linux/kernel/ksyms.c Wed Nov 21 22:07:25 2001 +++ linux/kernel/ksyms.c Mon Nov 26 15:40:47 2001 @@ -71,6 +71,9 @@ }; #endif +extern void printstate(void); + +EXPORT_SYMBOL(printstate); EXPORT_SYMBOL(inter_module_register); EXPORT_SYMBOL(inter_module_unregister); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |