DFU: make sure to properly initialize g_dfu pointer before using it
diff --git a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu.h b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu.h
index dd0e5e2..4af3e3b 100644
--- a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu.h
+++ b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu.h
@@ -97,6 +97,8 @@
 	unsigned int total_bytes;
 };
 
+/* RAM address for this magic value above */
+extern struct dfudata _g_dfu;
 extern struct dfudata *g_dfu;
 
 void set_usb_serial_str(const uint8_t *serial_usbstr);
diff --git a/firmware/libboard/common/source/board_cstartup_gnu.c b/firmware/libboard/common/source/board_cstartup_gnu.c
index bc89b1b..3d92d2f 100644
--- a/firmware/libboard/common/source/board_cstartup_gnu.c
+++ b/firmware/libboard/common/source/board_cstartup_gnu.c
@@ -154,6 +154,9 @@
 

 

 #if defined(BOARD_USB_DFU) && defined(APPLICATION_dfu)

+    /* we are before the text segment has been relocated, so g_dfu is

+     * not initialized yet */

+    g_dfu = &_g_dfu;

     if (g_dfu->magic != USB_DFU_MAGIC) {

         BootIntoApp();

         /* Infinite loop */