diff options
author | Albert Ou <albert@sifive.com> | 2016-12-13 15:05:19 -0800 |
---|---|---|
committer | Albert Ou <albert@sifive.com> | 2016-12-14 12:23:40 -0800 |
commit | 3dbaad0a1f27b96462541e1189efe37ffa913e9a (patch) | |
tree | f50f770a39bc5d9fd9296862b4806c5dd7d0eed6 /bsp/libwrap/sys/sbrk.c | |
parent | 82d5cab92318ca82f6fb95921cd70e4aefa28cd9 (diff) |
Refactor libc stubs into libwrap
The --wrap feature of GNU ld supports a cleaner framework for linking in
alternative implementations of libc functions without cpp hacks.
Place wrappers in separate object files to reduce static code size.
Diffstat (limited to 'bsp/libwrap/sys/sbrk.c')
-rw-r--r-- | bsp/libwrap/sys/sbrk.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/bsp/libwrap/sys/sbrk.c b/bsp/libwrap/sys/sbrk.c new file mode 100644 index 0000000..6e6b36a --- /dev/null +++ b/bsp/libwrap/sys/sbrk.c @@ -0,0 +1,16 @@ +/* See LICENSE of license details. */ + +#include <stddef.h> + +void *__wrap_sbrk(ptrdiff_t incr) +{ + extern char _end[]; + extern char _heap_end[]; + static char *curbrk = _end; + + if ((curbrk + incr < _end) || (curbrk + incr > _heap_end)) + return NULL - 1; + + curbrk += incr; + return curbrk - incr; +} |