Index: arch/ia64/_link.ld
===================================================================
--- arch/ia64/_link.ld	(revision dcbc8be75e5824d4f8c94163799daa1370fbaae0)
+++ arch/ia64/_link.ld	(revision ac5d02b7ec81adf50a7070d07dc35f5f6df54639)
@@ -12,76 +12,81 @@
 
 SECTIONS {
-    .image 0x0000000000001000: AT (0x0000000000001000) { 
-	    *(K_TEXT_START)
-	    *(.text .stub .text.* .gnu.linkonce.t.*)
-	    *(.interp)
-	    *(.hash)
-	    *(.dynsym)
-	    *(.dynstr)
-	    *(.rel.init)
-	    *(.rela.init)
-	    *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
-	    *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
-	    *(.rel.fini)
-	    *(.rela.fini)
-	    *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
-	    *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
-	    *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
-	    *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
-	    *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
-	    *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
-	    *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
-	    *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
-	    *(.rel.got)
-	    *(.rela.got)
-	    *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*)
-	    *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*)
-	    *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*)
-	    *(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*)
-	    *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*)
-	    *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*)
-	    *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*)
-	    *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*)
-	    *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
-	    *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
-	    *(.rel.plt)
-	    *(.rela.plt)
-	    *(.rela.IA_64.pltoff)
-	    *(.init)
-	    *(.plt)
-	    *(.fini)
-	    *(K_TEXT_END)
-	    *(K_DATA_START)
-	    *(.rodata .rodata.* .gnu.linkonce.r.*)
-	    *(.rodata1)
-	    *(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
-	    *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)
-	    *(.opd)
-	    *(.IA_64.unwind_info* .gnu.linkonce.ia64unwi.*)
-	    *(.IA_64.unwind* .gnu.linkonce.ia64unw.*)
-	    *(.eh_frame_hdr)
-	    *(.preinit_array)
-	    *(.init_array)
-	    *(.fini_array)
-	    *(.data .data.* .gnu.linkonce.d.*)
-	    *(.data1)
-	    *(.tdata .tdata.* .gnu.linkonce.td.*)
-	    *(.tcommon)
-	    *(.eh_frame)
-	    *(.gcc_except_table)
-	    *(.dynamic)
-	    *(.jcr)
-	    *(.got)
-	    *(.IA_64.pltoff)
-	    *(.sdata .sdata.* .gnu.linkonce.s.*)
-	    *(.dynsbss)
-	    *(.sbss .sbss.* .gnu.linkonce.sb.*)
-	    *(.scommon)
-	    *(.dynbss)
-	    *(.bss .bss.* .gnu.linkonce.b.*)
-	    *(COMMON);
-	    *(K_DATA_END)
-    }
+	.image 0x0000000000001000: AT (0x0000000000001000) { 
+		ktext_start = .;
+		*(K_TEXT_START);
+		*(.text .stub .text.* .gnu.linkonce.t.*)
+		*(.interp)
+		*(.hash)
+		*(.dynsym)
+		*(.dynstr)
+		*(.rel.init)
+		*(.rela.init)
+		*(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
+		*(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
+		*(.rel.fini)
+		*(.rela.fini)
+		*(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
+		*(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
+		*(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
+		*(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
+		*(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
+		*(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
+		*(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
+		*(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
+		*(.rel.got)
+		*(.rela.got)
+		*(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*)
+		*(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*)
+		*(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*)
+		*(.rela.sbss .rela.sbss.* .rela.gnu.linkonce.sb.*)
+		*(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*)
+		*(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*)
+		*(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*)
+		*(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*)
+		*(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
+		*(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
+		*(.rel.plt)
+		*(.rela.plt)
+		*(.rela.IA_64.pltoff)
+		*(.init)
+		*(.plt)
+		*(.fini)
+		ktext_end = .;
+		kdata_start = .;
+		*(K_DATA_START)
+		*(.rodata .rodata.* .gnu.linkonce.r.*)
+		*(.rodata1)
+		*(.sdata2 .sdata2.* .gnu.linkonce.s2.*)
+		*(.sbss2 .sbss2.* .gnu.linkonce.sb2.*)
+		*(.opd)
+		*(.IA_64.unwind_info* .gnu.linkonce.ia64unwi.*)
+		*(.IA_64.unwind* .gnu.linkonce.ia64unw.*)
+		*(.eh_frame_hdr)
+		*(.preinit_array)
+		*(.init_array)
+		*(.fini_array)
+		*(.data .data.* .gnu.linkonce.d.*)
+		*(.data1)
+		*(.tdata .tdata.* .gnu.linkonce.td.*)
+		*(.tcommon)
+		*(.eh_frame)
+		*(.gcc_except_table)
+		*(.dynamic)
+		*(.jcr)
+		*(.got)
+		*(.IA_64.pltoff)
+		*(.sdata .sdata.* .gnu.linkonce.s.*)
+		*(.dynsbss)
+		*(.sbss .sbss.* .gnu.linkonce.sb.*)
+		*(.scommon)
+		*(.dynbss)
+		*(.bss .bss.* .gnu.linkonce.b.*)
+		*(COMMON);
+		kdata_end = .;
+	}
 
+	_hardcoded_ktext_size = ktext_end - ktext_start;
+	_hardcoded_kdata_size = kdata_end - kdata_start;
+	_hardcoded_load_address = 0x0000000000001000;
     
 }
Index: arch/ia64/src/start.S
===================================================================
--- arch/ia64/src/start.S	(revision dcbc8be75e5824d4f8c94163799daa1370fbaae0)
+++ arch/ia64/src/start.S	(revision ac5d02b7ec81adf50a7070d07dc35f5f6df54639)
@@ -28,6 +28,4 @@
 
 .section K_TEXT_START
-.global k_text_start
-k_text_start:
 
 .global kernel_image_start
@@ -50,24 +48,21 @@
 
 	# initialize gp (Global Pointer) register
-	movl r1=k_text_start
+	movl r1 = _hardcoded_load_address
+	
+	;;
 
 	#
 	# 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
+	movl r14 = _hardcoded_ktext_size
+	movl r15 = _hardcoded_kdata_size
+	movl r16 = _hardcoded_load_address
+	addl r17 = @gprel(hardcoded_ktext_size), gp
+	addl r18 = @gprel(hardcoded_kdata_size), gp
+	addl r19 = @gprel(hardcoded_load_address), gp
+	;;
+	st4 [r17] = r14
+	st4 [r18] = r15
+	st8 [r19] = r16
 	
 	br.call.sptk.many b0=main_bsp
@@ -75,14 +70,2 @@
 0:
 	br 0b
-
-.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:
