diff options
author | hselasky <hselasky@FreeBSD.org> | 2014-05-30 16:47:54 +0000 |
---|---|---|
committer | hselasky <hselasky@FreeBSD.org> | 2014-05-30 16:47:54 +0000 |
commit | 00bb3e5268f901d0c01aeae160a652f876ff331c (patch) | |
tree | a61aadf3a616705410993fc75fccafa340ac0b51 | |
parent | 7acb98f193b8909173c34da13654c33e9dd6b625 (diff) | |
download | FreeBSD-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/Makefile | 11 | ||||
-rw-r--r-- | sys/boot/mips/beri/loader/loader.ldscript | 13 | ||||
-rw-r--r-- | sys/boot/mips/beri/loader/main.c | 7 |
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 }; |