Index: arch/sparc64/include/context.h
===================================================================
--- arch/sparc64/include/context.h	(revision 437ee6a415da73f91e8c1aec824ab9613fe59028)
+++ arch/sparc64/include/context.h	(revision 0e90b4e1c38ec5953fac696c423cb2c5f47170cc)
@@ -38,11 +38,19 @@
 #endif
 
-#define STACK_ALIGNMENT			8
-#define STACK_ITEM_SIZE			8
+/** According to SPARC Compliance Definition, every stack frame is 16-byte aligned. */
+#define STACK_ALIGNMENT			16
 
-/*
- * One item is put onto the stack to support get_stack_base().
+#define STACK_ITEM_SIZE			sizeof(__u64)
+
+/**
+ * 16-extended-word save area for %i[0-7] and %l[0-7] registers.
  */
-#define SP_DELTA	(0+STACK_ITEM_SIZE)
+#define SAVE_AREA	(16*STACK_ITEM_SIZE)
+#define SP_DELTA	SAVE_AREA
+
+/**
+ * By convention, the actual top of the stack is %sp + BIAS.
+ */
+#define BIAS		2047
 
 #ifdef context_set
@@ -52,5 +60,5 @@
 #define context_set(c, _pc, stack, size)                                                                \
         (c)->pc = ((__address) _pc) - 8;                                                                \
-        (c)->sp = ((__address) stack) + (ALIGN((size), STACK_ALIGNMENT) + 1) - SP_DELTA;			
+        (c)->sp = ((__address) stack) + ALIGN((size), STACK_ALIGNMENT) - (BIAS + SP_DELTA)
 
 /*
