Index: kernel/arch/amd64/_link.ld.in
===================================================================
--- kernel/arch/amd64/_link.ld.in	(revision e3444229c8e3295e9e2bed75246c19263f3c51a6)
+++ kernel/arch/amd64/_link.ld.in	(revision 1d18bbc08dc1396fef76658a115a806023a86299)
@@ -13,4 +13,6 @@
 
 SECTIONS {
+	kernel_load_address = PA2KA(BOOT_OFFSET);
+
 	.unmapped BOOT_OFFSET: AT (0) {
 		unmapped_ktext_start = .;
@@ -32,14 +34,4 @@
 		*(.data);              /* initialized data */
 		*(.rodata .rodata.*);  /* string literals */
-		hardcoded_load_address = .;
-		QUAD(PA2KA(BOOT_OFFSET));
-		hardcoded_ktext_size = .;
-		QUAD(ktext_end - ktext_start + (unmapped_ktext_end - unmapped_ktext_start));
-		hardcoded_kdata_size = .;
-		QUAD(kdata_end - kdata_start + (unmapped_kdata_end - unmapped_kdata_start));
-		hardcoded_unmapped_ktext_size = .;
-		QUAD(unmapped_ktext_end - unmapped_ktext_start);
-		hardcoded_unmapped_kdata_size = .;
-		QUAD(unmapped_kdata_end - unmapped_kdata_start);
 		*(COMMON);      /* global variables */
 
@@ -71,5 +63,4 @@
 
 #ifdef CONFIG_SMP
-	_hardcoded_unmapped_size = (unmapped_ktext_end - unmapped_ktext_start) + (unmapped_kdata_end - unmapped_kdata_start);
 	ap_boot = unmapped_ap_boot - BOOT_OFFSET + AP_BOOT_OFFSET;
 	ap_gdtr = unmapped_ap_gdtr - BOOT_OFFSET + AP_BOOT_OFFSET;
Index: kernel/arch/amd64/include/arch/boot/boot.h
===================================================================
--- kernel/arch/amd64/include/arch/boot/boot.h	(revision e3444229c8e3295e9e2bed75246c19263f3c51a6)
+++ kernel/arch/amd64/include/arch/boot/boot.h	(revision 1d18bbc08dc1396fef76658a115a806023a86299)
@@ -42,10 +42,5 @@
 #ifndef __ASSEMBLER__
 
-#ifdef CONFIG_SMP
-
-/* This is only a symbol so the type is dummy. Obtain the value using &. */
-extern int _hardcoded_unmapped_size;
-
-#endif /* CONFIG_SMP */
+extern uint8_t unmapped_kdata_end[];
 
 #endif /* __ASSEMBLER__ */
Index: kernel/arch/amd64/src/amd64.c
===================================================================
--- kernel/arch/amd64/src/amd64.c	(revision e3444229c8e3295e9e2bed75246c19263f3c51a6)
+++ kernel/arch/amd64/src/amd64.c	(revision 1d18bbc08dc1396fef76658a115a806023a86299)
@@ -94,7 +94,7 @@
 
 #ifdef CONFIG_SMP
+	size_t unmapped_size = (uintptr_t) unmapped_kdata_end - BOOT_OFFSET;
 	/* Copy AP bootstrap routines below 1 MB. */
-	memcpy((void *) AP_BOOT_OFFSET, (void *) BOOT_OFFSET,
-	    (size_t) &_hardcoded_unmapped_size);
+	memcpy((void *) AP_BOOT_OFFSET, (void *) BOOT_OFFSET, unmapped_size);
 #endif
 }
