Index: kernel/arch/riscv64/Makefile.inc
===================================================================
--- kernel/arch/riscv64/Makefile.inc	(revision 7850dda67ede0986d7053d2b73a5f416b36ec072)
+++ kernel/arch/riscv64/Makefile.inc	(revision d639eaa7a43293ef2bf56afc045fe76c6e69341c)
@@ -31,10 +31,15 @@
 BFD = binary
 
+GCC_CFLAGS += -mcmodel=medany
+
 BITS = 64
 ENDIANESS = LE
 
 ARCH_SOURCES = \
+	arch/$(KARCH)/src/boot/boot.S \
 	arch/$(KARCH)/src/asm.S \
+	arch/$(KARCH)/src/context.S \
 	arch/$(KARCH)/src/debug/stacktrace.c \
+	arch/$(KARCH)/src/drivers/ucb.c \
 	arch/$(KARCH)/src/proc/scheduler.c \
 	arch/$(KARCH)/src/proc/task.c \
Index: kernel/arch/riscv64/_link.ld.in
===================================================================
--- kernel/arch/riscv64/_link.ld.in	(revision 7850dda67ede0986d7053d2b73a5f416b36ec072)
+++ kernel/arch/riscv64/_link.ld.in	(revision d639eaa7a43293ef2bf56afc045fe76c6e69341c)
@@ -14,17 +14,7 @@
 
 SECTIONS {
-	.unmapped BOOT_OFFSET: AT (0) {
-		unmapped_ktext_start = .;
+	.image (PA2KA(BOOT_OFFSET)) : AT (0) {
+		ktext_start = .;
 		*(K_TEXT_START);
-		unmapped_ktext_end = .;
-		
-		unmapped_kdata_start = .;
-		*(K_DATA_START);
-		*(K_INI_PTLS);
-		unmapped_kdata_end = .;
-	}
-	
-	.mapped (BOOT_OFFSET + SIZEOF(.unmapped)) : AT (SIZEOF(.unmapped)) {
-		ktext_start = .;
 		*(.text);
 		ktext_end = .;
@@ -36,11 +26,7 @@
 		QUAD(PA2KA(BOOT_OFFSET));
 		hardcoded_ktext_size = .;
-		QUAD(ktext_end - ktext_start + (unmapped_ktext_end - unmapped_ktext_start));
+		QUAD(ktext_end - 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);
+		QUAD(kdata_end - kdata_start);
 		*(.sdata);
 		*(.reginfo);
