[PATCH 2/3] powerpc/.../sbrk.c: Do not reference errno.

Joel Sherrill joel at rtems.org
Fri May 21 21:35:44 UTC 2021


Closes #4r37.
---
 bsps/powerpc/shared/start/sbrk.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/bsps/powerpc/shared/start/sbrk.c b/bsps/powerpc/shared/start/sbrk.c
index 95104ba9c8..d7507b3997 100644
--- a/bsps/powerpc/shared/start/sbrk.c
+++ b/bsps/powerpc/shared/start/sbrk.c
@@ -150,9 +150,19 @@ void *sbrk(ptrdiff_t incr)
     remaining_size-=incr;
     rval = (void *) remaining_start;
     remaining_start += incr;
-  } else {
-    errno = ENOMEM;
   }
+
+  /*
+   * sbrk() is a Legacy POSIX method which means it is no longer part of the
+   * POSIX standard. Historically, it was required to set errno to ENOMEM if
+   * the extension failed. This implementation does not do that for two
+   * reasons. First, this method is only called from the RTEMS malloc()
+   * implementation and does not expect errno to be set when -1 is returned.
+   * Second, setting errno implicitly pulls in some of the newlib reentrancy
+   * support. Not setting errno avoids this method forcing that support
+   * into every application for every BSP that uses this method.
+   */
+
   #ifdef DEBUG
     printk("************* SBRK 0x%08x (ret 0x%08x) **********\n", incr, rval);
   #endif
-- 
2.24.4



More information about the devel mailing list