SHIO

Fork of mbed-stm32l0/l1-src by lzbp li

Revision:
473:44b5a0bc6da6
Parent:
431:255afbe6270c
Child:
476:4dac56e9ae44
--- a/common/retarget.cpp	Thu Feb 12 13:00:07 2015 +0000
+++ b/common/retarget.cpp	Thu Feb 12 13:15:07 2015 +0000
@@ -1,5 +1,5 @@
 /* mbed Microcontroller Library
- * Copyright (c) 2006-2013 ARM Limited
+ * Copyright (c) 2006-2015 ARM Limited
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,6 +19,11 @@
 #include "FilePath.h"
 #include "serial_api.h"
 #include "toolchain.h"
+#include "semihost_api.h"
+#include "mbed_interface.h"
+#if DEVICE_STDIO_MESSAGES
+#include <stdio.h>
+#endif
 #include <errno.h>
 
 #if defined(__ARMCC_VERSION)
@@ -482,6 +487,33 @@
 #endif
 
 
+#ifdef TOOLCHAIN_GCC_CW
+// TODO: Ideally, we would like to define directly "_ExitProcess"
+extern "C" void mbed_exit(int return_code) {
+#elif defined TOOLCHAIN_GCC_ARM
+extern "C" void _exit(int return_code) {
+#else
+extern "C" void exit(int return_code) {
+#endif
+
+#if DEVICE_STDIO_MESSAGES
+    fflush(stdout);
+    fflush(stderr);
+#endif
+
+#if DEVICE_SEMIHOST
+    if (mbed_interface_connected()) {
+        semihost_exit();
+    }
+#endif
+    if (return_code) {
+        mbed_die();
+    }
+
+    while (1);
+}
+
+
 namespace mbed {
 
 void mbed_set_unbuffered_stream(FILE *_file) {
@@ -524,11 +556,3 @@
 }
 
 } // namespace mbed
-
-
-
-
-
-
-
-