X-Git-Url: http://cvs.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/e73e717239300d6b47d5f5d81256d8feb493299f..d2219cae51009d36a8cf4f70c0dbe2d534877535:/armsrc/start.c

diff --git a/armsrc/start.c b/armsrc/start.c
index de2dd2f6..d7332bda 100644
--- a/armsrc/start.c
+++ b/armsrc/start.c
@@ -1,12 +1,33 @@
-//-----------------------------------------------------------------------------
-// Just vector to AppMain(). This is in its own file so that I can place it
-// with the linker script.
-// Jonathan Westhues, Mar 2006
-//-----------------------------------------------------------------------------
-#include <proxmark3.h>
-#include "apps.h"
-
-void __attribute__((section(".startos"))) Vector(void)
-{
-	AppMain();
-}
+//-----------------------------------------------------------------------------
+// Jonathan Westhues, Mar 2006
+//
+// This code is licensed to you under the terms of the GNU GPL, version 2 or,
+// at your option, any later version. See the LICENSE.txt file for the text of
+// the license.
+//-----------------------------------------------------------------------------
+// Just vector to AppMain(). This is in its own file so that I can place it
+// with the linker script.
+//-----------------------------------------------------------------------------
+
+#include "proxmark3.h"
+#include "apps.h"
+
+extern char __data_start__, __data_src_start__,  __data_end__, __bss_start__, __bss_end__;
+void __attribute__((section(".startos"))) Vector(void)
+{
+	/* Stack should have been set up by the bootloader */
+	char *src, *dst, *end;
+
+	/* Set up (that is: clear) BSS. */
+	dst = &__bss_start__;
+	end = &__bss_end__;
+	while(dst < end) *dst++ = 0;
+
+	/* Set up data segment: Copy from flash to ram */
+	src = &__data_src_start__;
+	dst = &__data_start__;
+	end = &__data_end__;
+	while(dst < end) *dst++ = *src++;
+
+	AppMain();
+}