Index: arch/ia64/Makefile.inc
===================================================================
--- arch/ia64/Makefile.inc	(revision 9db5b66ca088c0a98965fe9d47a06117c9df7272)
+++ arch/ia64/Makefile.inc	(revision 724b58aaabefadca6d3a85277fe070140ec29bc3)
@@ -13,5 +13,5 @@
 CPPFLAGS=$(DEFS) -nostdinc -I../include
 CFLAGS=$(CPPFLAGS) -nostdlib -fno-builtin -Wmissing-prototypes -Werror -O3
-LFLAGS=-EL -n -M -no-check-sections -T ../arch/ia64/_link.ld
+LFLAGS=-EL -M -no-check-sections -T ../arch/ia64/_link.ld
 
 arch_sources= \
Index: arch/ia64/_link.ld
===================================================================
--- arch/ia64/_link.ld	(revision 9db5b66ca088c0a98965fe9d47a06117c9df7272)
+++ arch/ia64/_link.ld	(revision 724b58aaabefadca6d3a85277fe070140ec29bc3)
@@ -13,5 +13,5 @@
 SECTIONS {
     .image 0x0000000000001000: AT (0x0000000000001000) { 
-	    ktext_start = .;
+	    *(K_TEXT_START)
 	    *(.text .stub .text.* .gnu.linkonce.t.*)
 	    *(.interp)
@@ -51,6 +51,6 @@
 	    *(.plt)
 	    *(.fini)
-	    ktext_end = .;
-	    kdata_start = .;
+	    *(K_TEXT_END)
+	    *(K_DATA_START)
 	    *(.rodata .rodata.* .gnu.linkonce.r.*)
 	    *(.rodata1)
@@ -80,22 +80,8 @@
 	    *(.dynbss)
 	    *(.bss .bss.* .gnu.linkonce.b.*)
-	    *(COMMON)
-	    kdata_end = .;
+	    *(COMMON);
+	    *(K_DATA_END)
     }
 
-    . = ABSOLUTE(hardcoded_ktext_size);
-    .patch_1 : {
-        LONG(ktext_end - ktext_start);
-    }
-
-    . = ABSOLUTE(hardcoded_kdata_size);
-    .patch_2 : {
-        LONG(kdata_end - kdata_start);
-    }
-
-    . = ABSOLUTE(hardcoded_load_address);
-    .patch_3 : {
-        QUAD(0x0000000000001000);
-    }
-
+    
 }
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
+
