Index: arch/amd64/include/asm.h
===================================================================
--- arch/amd64/include/asm.h	(revision cfd6efd2ec638914e675fcd76bc73d6f40897738)
+++ arch/amd64/include/asm.h	(revision 361635cc8cbd2af7919fe3e68f9792ebe4770f2c)
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __amd64_ASM_H__
+#define __amd64_ASM_H__
+
+#include <arch/types.h>
+#include <config.h>
+
+/* TODO: implement the real stuff */
+static inline __address get_stack_base(void)
+{
+	return NULL;
+}
+
+#endif
Index: arch/ia32/include/asm.h
===================================================================
--- arch/ia32/include/asm.h	(revision cfd6efd2ec638914e675fcd76bc73d6f40897738)
+++ arch/ia32/include/asm.h	(revision 361635cc8cbd2af7919fe3e68f9792ebe4770f2c)
@@ -35,4 +35,5 @@
 #include <synch/spinlock.h>
 #include <arch/boot/memmap.h>
+#include <config.h>
 
 extern __u32 interrupt_handler_size;
@@ -157,3 +158,17 @@
 }
 
+/** Return base address of current stack
+ *
+ * Return the base address of the current stack.
+ * The stack is assumed to be STACK_SIZE bytes long.
+ */
+static inline __address get_stack_base(void)
+{
+	__address v;
+	
+	__asm__ volatile ("andl %%esp, %0\n" : "=r" (v) : "0" (~(STACK_SIZE-1)));
+	
+	return v;
+}
+
 #endif
Index: arch/ia64/include/asm.h
===================================================================
--- arch/ia64/include/asm.h	(revision cfd6efd2ec638914e675fcd76bc73d6f40897738)
+++ arch/ia64/include/asm.h	(revision 361635cc8cbd2af7919fe3e68f9792ebe4770f2c)
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __ia64_ASM_H__
+#define __ia64_ASM_H__
+
+#include <arch/types.h>
+#include <config.h>
+
+/* TODO: implement the real stuff */
+static inline __address get_stack_base(void)
+{
+	return NULL;
+}
+
+#endif
Index: arch/ia64/include/context.h
===================================================================
--- arch/ia64/include/context.h	(revision cfd6efd2ec638914e675fcd76bc73d6f40897738)
+++ arch/ia64/include/context.h	(revision 361635cc8cbd2af7919fe3e68f9792ebe4770f2c)
@@ -42,7 +42,7 @@
 #endif
 
-#define context_set(c, _pc, stack, size) 	\
-	(c)->pc = (__address) _pc;		\
-	(c)->bsp = (__address) stack;		\
+#define context_set(c, _pc, stack, size) 			\
+	(c)->pc = (__address) _pc;				\
+	(c)->bsp = ((__address) stack) + (sizeof(the_t));	\
 	(c)->sp = ((__address) stack) + (size) - SP_DELTA;
 
Index: arch/mips/include/asm.h
===================================================================
--- arch/mips/include/asm.h	(revision cfd6efd2ec638914e675fcd76bc73d6f40897738)
+++ arch/mips/include/asm.h	(revision 361635cc8cbd2af7919fe3e68f9792ebe4770f2c)
@@ -30,5 +30,22 @@
 #define __MIPS_ASM_H__
 
+#include <arch/types.h>
+#include <config.h>
+
 #define cpu_sleep()	;
 
+/** Return base address of current stack
+ * 
+ * Return the base address of the current stack.
+ * The stack is assumed to be STACK_SIZE bytes long.
+ */
+static inline __address get_stack_base(void)
+{
+	__address v;
+	
+	__asm__ volatile ("and %0, $29, %1\n" : "=r" (v) : "r" (~(STACK_SIZE-1)));
+	
+	return v;
+}
+
 #endif
Index: arch/ppc/include/asm.h
===================================================================
--- arch/ppc/include/asm.h	(revision cfd6efd2ec638914e675fcd76bc73d6f40897738)
+++ arch/ppc/include/asm.h	(revision 361635cc8cbd2af7919fe3e68f9792ebe4770f2c)
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __ppc_ASM_H__
+#define __ppc_ASM_H__
+
+#include <arch/types.h>
+#include <config.h>
+
+/* TODO: implement the real stuff */
+static inline __address get_stack_base(void)
+{
+	return NULL;
+}
+
+#endif
Index: include/arch.h
===================================================================
--- include/arch.h	(revision cfd6efd2ec638914e675fcd76bc73d6f40897738)
+++ include/arch.h	(revision 361635cc8cbd2af7919fe3e68f9792ebe4770f2c)
@@ -47,4 +47,16 @@
 #define TASK		(cpu_private_data[CPU_ID_ARCH].task)
 
+/*
+ * For each possible kernel stack, structure
+ * of the following type will be placed at
+ * the bottom of the stack.
+ */
+struct the {
+	int preemption_disabled;
+	thread_t *thread;		/* current thread */
+	task_t *task;			/* current task */
+	cpu_t *cpu;			/* executing cpu */
+};
+
 extern void arch_pre_mm_init(void);
 extern void arch_post_mm_init(void);
Index: include/config.h
===================================================================
--- include/config.h	(revision cfd6efd2ec638914e675fcd76bc73d6f40897738)
+++ include/config.h	(revision 361635cc8cbd2af7919fe3e68f9792ebe4770f2c)
@@ -32,8 +32,11 @@
 #include <arch/types.h>
 #include <typedefs.h>
+#include <arch/mm/page.h>
+
+#define STACK_SIZE		PAGE_SIZE
 
 #define CONFIG_MEMORY_SIZE	4*1024*1024
 #define CONFIG_HEAP_SIZE	300*1024
-#define CONFIG_STACK_SIZE	32*1024
+#define CONFIG_STACK_SIZE	STACK_SIZE
 
 struct config {
Index: include/cpu.h
===================================================================
--- include/cpu.h	(revision cfd6efd2ec638914e675fcd76bc73d6f40897738)
+++ include/cpu.h	(revision 361635cc8cbd2af7919fe3e68f9792ebe4770f2c)
@@ -40,6 +40,7 @@
 #include <typedefs.h>
 #include <arch/context.h>
+#include <config.h>
 
-#define CPU_STACK_SIZE	PAGE_SIZE
+#define CPU_STACK_SIZE	STACK_SIZE
 
 struct cpu {
Index: include/proc/thread.h
===================================================================
--- include/proc/thread.h	(revision cfd6efd2ec638914e675fcd76bc73d6f40897738)
+++ include/proc/thread.h	(revision 361635cc8cbd2af7919fe3e68f9792ebe4770f2c)
@@ -40,7 +40,8 @@
 #include <synch/rwlock.h>
 #include <mm/page.h>
+#include <config.h>
 #include <list.h>
 
-#define THREAD_STACK_SIZE	PAGE_SIZE
+#define THREAD_STACK_SIZE	STACK_SIZE
 
 #define THREAD_USER_STACK	1
Index: include/typedefs.h
===================================================================
--- include/typedefs.h	(revision cfd6efd2ec638914e675fcd76bc73d6f40897738)
+++ include/typedefs.h	(revision 361635cc8cbd2af7919fe3e68f9792ebe4770f2c)
@@ -72,3 +72,5 @@
 typedef char *char_ptr;
 
+typedef struct the the_t;
+
 #endif
