Alessandro Angelino / mbed-hal

Dependencies:   target-freescale

Fork of mbed-hal by Morpheus

Files at this revision

API Documentation at this revision

Comitter:
Alessandro Angelino
Date:
Mon Apr 04 14:24:07 2016 +0100
Parent:
3:e4b241e107f9
Commit message:
Fix function to get sp when in unprivileged mode

Changed in this revision

common/retarget.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/common/retarget.cpp	Fri Apr 01 15:04:27 2016 +0000
+++ b/common/retarget.cpp	Mon Apr 04 14:24:07 2016 +0100
@@ -469,8 +469,16 @@
 #undef errno
 extern "C" int errno;
 
-// For ARM7 only
-register unsigned char * stack_ptr __asm ("sp");
+// Stack pointer handling
+#ifdef  __ICCARM__
+#define __current_sp() __get_SP()
+#else
+static inline unsigned int __current_sp(void)
+{
+    register unsigned sp asm("sp");
+    return sp;
+}
+#endif /* __ICCARM__ */
 
 // Dynamic memory allocation related syscall.
 extern "C" caddr_t _sbrk(int incr) {
@@ -478,12 +486,10 @@
     unsigned char*        prev_heap = heap;
     unsigned char*        new_heap = heap + incr;
 
-#if defined(TARGET_ARM7)
-    if (new_heap >= stack_ptr) {
-#elif defined(TARGET_CORTEX_A)
+#if defined(TARGET_CORTEX_A)
     if (new_heap >= (unsigned char*)&__HeapLimit) {     /* __HeapLimit is end of heap section */
 #else
-    if (new_heap >= (unsigned char*)__get_MSP()) {
+    if (new_heap >= (unsigned char*)__current_sp()) {
 #endif
         errno = ENOMEM;
         return (caddr_t)-1;
@@ -566,4 +572,3 @@
 }
 
 } // namespace mbed
-