From a302b48c21aaf08f166b8514705b87f1331c147f Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Fri, 19 Jan 2001 01:25:13 +0000 Subject: 2001-01-18 Jeff Johnston * libc/sys/arc/Makefile.am: New file. * libc/sys/arc/Makefile.in: Ditto. * libc/sys/arc/aclocal.m4: Ditto. * libc/sys/arc/configure: Ditto. * libc/sys/arc/configure.in: Ditto. * libc/sys/arc/crt0.S: Ditto. * libc/sys/arc/isatty.c: Ditto. * libc/sys/arc/mem-layout.c: Ditto. * libc/sys/arc/sbrk.c: Ditto. * libc/sys/arc/syscalls.c: Ditto. * libc/sys/arc/sys/syscall.h: Ditto. --- newlib/libc/sys/arc/sbrk.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 newlib/libc/sys/arc/sbrk.c (limited to 'newlib/libc/sys/arc/sbrk.c') diff --git a/newlib/libc/sys/arc/sbrk.c b/newlib/libc/sys/arc/sbrk.c new file mode 100644 index 000000000..9f863cded --- /dev/null +++ b/newlib/libc/sys/arc/sbrk.c @@ -0,0 +1,43 @@ +/* sbrk support */ + +/* The current plan is to have one sbrk handler for all cpus. + Hence use `asm' for each global variable here to avoid the cpu prefix. + We can't intrude on the user's namespace (another reason to use asm). */ + +#include +#include +#include +#include + +/* These variables are publicly accessible for debugging purposes. + The user is also free to set sbrk_size to something different. + See mem-layout.c. */ + +extern int sbrk_size asm ("sbrk_size"); + +caddr_t sbrk_start asm ("sbrk_start"); +caddr_t sbrk_loc asm ("sbrk_loc"); + +/*caddr_t _sbrk_r (struct _reent *, size_t) asm ("__sbrk_r");*/ + +/* FIXME: We need a semaphore here. */ + +caddr_t +_sbrk_r (struct _reent *r, size_t nbytes) +{ + caddr_t result; + + if ( + /* Ensure we don't underflow. */ + sbrk_loc + nbytes < sbrk_start + /* Ensure we don't overflow. */ + || sbrk_loc + nbytes > sbrk_start + sbrk_size) + { + errno = ENOMEM; + return ((caddr_t) -1); + } + + result = sbrk_loc; + sbrk_loc += nbytes; + return result; +} -- cgit v1.2.3