Index: boot/arch/mips32/Makefile.inc
===================================================================
--- boot/arch/mips32/Makefile.inc	(revision 7a995075ee9ad9adbfafd2610997bc6f56b8916e)
+++ boot/arch/mips32/Makefile.inc	(revision c09ff7bd1b88585eb4f2aaba5b1a2d603a5979c7)
@@ -30,4 +30,5 @@
 BITS = 32
 EXTRA_CFLAGS = -msoft-float -mno-abicalls -G 0 -fno-zero-initialized-in-bss -mabi=32
+AS_PROLOG = .module softfloat;
 
 ifeq ($(MACHINE),msim)
@@ -74,5 +75,6 @@
 	arch/$(BARCH)/src/main.c \
 	arch/$(BARCH)/src/putchar.c \
-	$(COMPS_C) \
+	$(COMPS).s \
+	$(COMPS)_desc.c \
 	genarch/src/division.c \
 	genarch/src/multiplication.c \
@@ -84,2 +86,4 @@
 	generic/src/version.c \
 	generic/src/inflate.c
+
+PRE_DEPEND = $(COMPS).s $(COMPS).h $(COMPS)_desc.c
Index: boot/arch/mips32/_link.ld.in
===================================================================
--- boot/arch/mips32/_link.ld.in	(revision 7a995075ee9ad9adbfafd2610997bc6f56b8916e)
+++ boot/arch/mips32/_link.ld.in	(revision c09ff7bd1b88585eb4f2aaba5b1a2d603a5979c7)
@@ -21,5 +21,5 @@
 		*(.bss);        /* uninitialized static variables */
 		*(COMMON);      /* global variables */
-[[COMPONENTS]]
+		*(.components);
 	}
 	
Index: boot/arch/mips32/src/main.c
===================================================================
--- boot/arch/mips32/src/main.c	(revision 7a995075ee9ad9adbfafd2610997bc6f56b8916e)
+++ boot/arch/mips32/src/main.c	(revision c09ff7bd1b88585eb4f2aaba5b1a2d603a5979c7)
@@ -30,5 +30,4 @@
 #include <arch/arch.h>
 #include <arch/asm.h>
-#include <arch/_components.h>
 #include <halt.h>
 #include <printf.h>
@@ -40,4 +39,5 @@
 #include <errno.h>
 #include <inflate.h>
+#include "../../components.h"
 
 #define TOP2ADDR(top)  (((void *) PA2KA(BOOT_OFFSET)) + (top))
@@ -64,8 +64,8 @@
 	size_t i;
 	for (i = 0; i < COMPONENTS; i++)
-		printf(" %p|%p: %s image (%zu/%zu bytes)\n", components[i].start,
-		    (uintptr_t) components[i].start >= PA2KSEG(0) ?
-		    (void *) KSEG2PA(components[i].start) :
-		    (void *) KA2PA(components[i].start),
+		printf(" %p|%p: %s image (%zu/%zu bytes)\n", components[i].addr,
+		    (uintptr_t) components[i].addr >= PA2KSEG(0) ?
+		    (void *) KSEG2PA(components[i].addr) :
+		    (void *) KA2PA(components[i].addr),
 		    components[i].name, components[i].inflated,
 		    components[i].size);
@@ -107,5 +107,5 @@
 		printf("%s ", components[i - 1].name);
 		
-		int err = inflate(components[i - 1].start, components[i - 1].size,
+		int err = inflate(components[i - 1].addr, components[i - 1].size,
 		    dest[i - 1], components[i - 1].inflated);
 		
