summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhselasky <hselasky@FreeBSD.org>2014-05-30 16:47:54 +0000
committerhselasky <hselasky@FreeBSD.org>2014-05-30 16:47:54 +0000
commit00bb3e5268f901d0c01aeae160a652f876ff331c (patch)
treea61aadf3a616705410993fc75fccafa340ac0b51
parent7acb98f193b8909173c34da13654c33e9dd6b625 (diff)
downloadFreeBSD-src-00bb3e5268f901d0c01aeae160a652f876ff331c.zip
FreeBSD-src-00bb3e5268f901d0c01aeae160a652f876ff331c.tar.gz
Add optional support for USB to BERI loader. Fix the linker script so
that the garbage collection feature can be used when linking. Sponsored by: DARPA, AFRL
-rw-r--r--sys/boot/mips/beri/loader/Makefile11
-rw-r--r--sys/boot/mips/beri/loader/loader.ldscript13
-rw-r--r--sys/boot/mips/beri/loader/main.c7
3 files changed, 27 insertions, 4 deletions
diff --git a/sys/boot/mips/beri/loader/Makefile b/sys/boot/mips/beri/loader/Makefile
index fed2247..3da7f7f 100644
--- a/sys/boot/mips/beri/loader/Makefile
+++ b/sys/boot/mips/beri/loader/Makefile
@@ -136,6 +136,17 @@ FILES+= loader.rc
FILES+= menu.rc
.endif
+.if defined(LOADER_USB_SUPPORT)
+# Do garbage collection
+CFLAGS+= -ffunction-sections -fdata-sections
+CFLAGS+= -Wl,--gc-sections
+# Link USB BOOT library
+LDADD+= ${.OBJDIR}/../../../usb/libusbboot.a
+CFLAGS+= -I${.CURDIR}/../../../usb
+# Define USB SUPPORT
+CFLAGS+= -DLOADER_USB_SUPPORT
+.endif
+
all: loader
.include <bsd.prog.mk>
diff --git a/sys/boot/mips/beri/loader/loader.ldscript b/sys/boot/mips/beri/loader/loader.ldscript
index 769bbbe..4d1c82d 100644
--- a/sys/boot/mips/beri/loader/loader.ldscript
+++ b/sys/boot/mips/beri/loader/loader.ldscript
@@ -58,11 +58,16 @@ SECTIONS
. += SIZEOF_HEADERS;
.text ALIGN(0x8): {
- start.o(.text)
- *(EXCLUDE_FILE (start.o) .text)
+ start.o(.text*)
+ *(EXCLUDE_FILE (start.o) .text*)
+ *(.rodata*)
+
+ __start_set_Xcommand_set = .;
+ KEEP(*(set_Xcommand_set))
+ __stop_set_Xcommand_set = .;
}
- .data ALIGN(0x8): { *(.data)}
- .bss ALIGN(0x8): { *(.bss) }
+ .data ALIGN(0x8): { *(.data*)}
+ .bss ALIGN(0x8): { *(.bss*) }
__heap = ALIGN(0x8); /* 64-bit aligned heap pointer */
__data_end = .;
diff --git a/sys/boot/mips/beri/loader/main.c b/sys/boot/mips/beri/loader/main.c
index 2354614..a8e3424 100644
--- a/sys/boot/mips/beri/loader/main.c
+++ b/sys/boot/mips/beri/loader/main.c
@@ -43,12 +43,19 @@ __FBSDID("$FreeBSD$");
#include <loader.h>
#include <mips.h>
+#ifdef LOADER_USB_SUPPORT
+#include <storage/umass_common.h>
+#endif
+
static int __elfN(exec)(struct preloaded_file *);
static void extract_currdev(struct bootinfo *);
struct devsw *devsw[] = {
&beri_cfi_disk,
&beri_sdcard_disk,
+#ifdef LOADER_USB_SUPPORT
+ &umass_disk,
+#endif
NULL
};
OpenPOWER on IntegriCloud