+++ /dev/null
-/*
- * linux/arch/i386/dstack.S
- *
- * Copyright (C) 2005 Marc E. Fiuczynski
- */
-
-/*
- * dstack.s contains the system specific support for stack overflows
- * and discontiguous stack support.
- */
-
-#include <linux/config.h>
-#include <linux/linkage.h>
-#include <asm/thread_info.h>
-#include <asm/errno.h>
-#include <asm/segment.h>
-#include <asm/smp.h>
-#include <asm/page.h>
-
-.data
-.globl stack_overflowed
-stack_overflowed:
- .long 0
-.text
-
-ENTRY(mcount)
-#warning stack check enabled
- push %eax
- movl $(THREAD_SIZE - 1),%eax
- andl %esp,%eax
- cmpl $STACK_WARN,%eax
- jle 1f
-2:
- popl %eax
- ret
-1:
- /* prevent infinite recursion from call to mcount from the
- * stack_overflow function. Need to revisit this code for
- * SMP based systems.
- */
- lock; btsl $0,stack_overflowed
- jc 2b
-
- /* prepare to jmp to stack_overflow directly, as if it were
- * called directly by the caller of mcount.
- */
- pushl %ebp
- pushl %ebx
- pushl %esi
- pushl %edi
-
- call stack_overflow
- /* Note that stack_overflow() will clear the stack_overflowed
- * variable.
- */
-
- popl %edi
- popl %esi
- popl %ebx
- popl %ebp
-
- popl %eax
- ret
+++ /dev/null
-/*
- * linux/arch/i386/kernel/stackoverflow.c
- *
- * Copyright (C) 2005 Marc E. Fiuczynski
- *
- */
-
-/*
- * This file handles the architecture-dependent parts of stack overflow handling...
- */
-
-#include <linux/sched.h>
-#include <linux/kernel.h>
-#include <linux/thread_info.h>
-#include <asm/processor.h>
-
-void dstackdump(void)
-{
- unsigned long esp = current_stack_pointer();
- int panicing = ((esp&(THREAD_SIZE-1)) <= STACK_PANIC);
-
- oops_in_progress = 1;
- printk( "esp: 0x%lx masked: 0x%lx STACK_PANIC:0x%lx %d %d\n",
- esp, (esp&(THREAD_SIZE-1)), STACK_PANIC,
- (((esp&(THREAD_SIZE-1)) <= STACK_PANIC)), panicing);
-
- show_trace(current,(void*)esp);
-
- if (panicing)
- panic("stack overflow\n");
-
- oops_in_progress = 0;
-
- /* Just let it happen once per task, as otherwise it goes nuts
- * in printing stack traces. This means that I need to dump
- * the stack_overflowed boolean into the task or thread_info
- * structure. For now just turn it off all together.
- */
-
- /* stack_overflowed = 0; */
-}
+++ /dev/null
-/*
- * linux/arch/i386/kernel/stackoverflow.c
- *
- * Copyright (C) 2005 Marc E. Fiuczynski
- *
- */
-
-/*
- * This file handles the architecture-dependent parts of stack overflow handling...
- */
-
-#include <linux/kernel.h>
-#include <linux/thread_info.h>
-#include <linux/sched.h>
-#include <asm/processor.h>
-
-void stack_overflow(void)
-{
- unsigned long esp = current_stack_pointer();
- int panicing = ((esp&(THREAD_SIZE-1)) <= STACK_PANIC);
-
- oops_in_progress = 1;
- printk( "esp: 0x%lx masked: 0x%lx STACK_PANIC:0x%lx %d %d\n",
- esp, (esp&(THREAD_SIZE-1)), STACK_PANIC,
- (((esp&(THREAD_SIZE-1)) <= STACK_PANIC)), panicing);
- show_trace(current,(void*)esp);
-
- if (panicing)
- panic("stack overflow\n");
-
- oops_in_progress = 0;
-
- /* Just let it happen once per task, as otherwise it goes nuts
- * in printing stack traces. This means that I need to dump
- * the stack_overflowed boolean into the task or thread_info
- * structure. For now just turn it off all together.
- */
-
- /* stack_overflowed = 0; */
-}