Index: arch/ia64/src/asm.S
===================================================================
--- arch/ia64/src/asm.S	(revision 9db5b66ca088c0a98965fe9d47a06117c9df7272)
+++ arch/ia64/src/asm.S	(revision 724b58aaabefadca6d3a85277fe070140ec29bc3)
@@ -34,7 +34,7 @@
 	 * Switch the role of first two arguments
 	 */
-	sub r33 = r32, r33	;;
+	sub r33 = r33, r32	;;
 	add r32 = r32, r33	;;
-	sub r33 = r33, r32	
+	sub r33 = r32, r33	
 		
 	br _memcopy
Index: arch/ia64/src/context.S
===================================================================
--- arch/ia64/src/context.S	(revision 9db5b66ca088c0a98965fe9d47a06117c9df7272)
+++ arch/ia64/src/context.S	(revision 724b58aaabefadca6d3a85277fe070140ec29bc3)
@@ -78,5 +78,5 @@
 	
 	add r8 = r0, r0, 1 		/* context_save returns 1 */
-	br.ret.sptk.many rp
+	br.ret.sptk.many b0
 
 context_restore:
@@ -126,3 +126,3 @@
 	
 	mov r8 = r0			/* context_restore returns 0 */
-	br.ret.sptk.many rp
+	br.ret.sptk.many b0
Index: arch/ia64/src/fake.s
===================================================================
--- arch/ia64/src/fake.s	(revision 9db5b66ca088c0a98965fe9d47a06117c9df7272)
+++ arch/ia64/src/fake.s	(revision 724b58aaabefadca6d3a85277fe070140ec29bc3)
@@ -70,4 +70,4 @@
 memsetb:
 panic:
-	br.ret.sptk.many rp
+	br.ret.sptk.many b0
 
Index: arch/ia64/src/start.S
===================================================================
--- arch/ia64/src/start.S	(revision 9db5b66ca088c0a98965fe9d47a06117c9df7272)
+++ arch/ia64/src/start.S	(revision 724b58aaabefadca6d3a85277fe070140ec29bc3)
@@ -29,4 +29,21 @@
 #include <arch/ski/ski.h>
 
+.section K_TEXT_START
+.global k_text_start
+k_text_start:
+
+.section K_TEXT_END
+.global k_text_end
+k_text_end:
+
+.section K_DATA_START
+.global k_data_start
+k_data_start:
+
+.section K_DATA_END
+.global k_data_end
+k_data_end:
+
+
 .text
 
@@ -36,8 +53,27 @@
 kernel_image_start:
 	# initialize gp (Global Pointer) register
-	mov r1=kernel_image_start;
+	movl r1=k_text_start;
 
 	# set stack pointer to some sane value
-	mov r12=stack0
+	movl r12=stack0
+
+	#
+	# Initialize hardcoded_* variables.
+	# (IA-64 port doesn't get these values from linker.)
+	#
+	movl r8 = k_text_start	;;
+	movl r9 = k_text_end	;;
+	sub r8 = r9, r8		;;
+	addl r10 = @gprel(hardcoded_ktext_size), gp;;
+	st4 [r10] = r8		;;
+
+	movl r8 = k_data_start	;;
+	movl r9 = k_data_end	;;
+	sub r8 = r9, r8		;;
+	addl r10 = @gprel(hardcoded_kdata_size), gp;;
+	st4 [r10] = r8		;;
+	
+	addl r10 = @gprel(hardcoded_load_address), gp;;
+	st8 [r10] = r1
 	
 	# initialize Ski console using SSC (Simulator System Call)
@@ -45,6 +81,7 @@
 	break 0x80000
 
-	br.call.sptk.many rp=main_bsp
+	br.call.sptk.many b0=main_bsp
 
 0:
 	br 0b
+
