[rtems commit] powerpc/.../sbrk.c: Do not reference errno.

Joel Sherrill joel at rtems.org
Tue May 25 13:33:45 UTC 2021


Module:    rtems
Branch:    master
Commit:    402a206a1b1ff984b14c3321f0bc1340c4873147
Changeset: http://git.rtems.org/rtems/commit/?id=402a206a1b1ff984b14c3321f0bc1340c4873147

Author:    Joel Sherrill <joel at rtems.org>
Date:      Fri May 21 16:29:42 2021 -0500

powerpc/.../sbrk.c: Do not reference errno.

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 95104ba..d7507b3 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



More information about the vc mailing list