Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2010-12-02 22:35:47 +0300
committerJeff Johnston <jjohnstn@redhat.com>2010-12-02 22:35:47 +0300
commit8ae0b98903893e68a52baa9a2e3df574f0d7a39e (patch)
treee6810305a55e34b3b0598e4d04e236ace3b606c6 /libgloss/cr16/sbrk.c
parent874a87f8cd93365c3bea0e6e5d14c265e9bb01f6 (diff)
2010-12-02 Jayant Sonar jayant.sonar@kpitcummins.com
Kaushik Phatak kaushik.phatak@kpitcummins.com * configure.in: Add CR16 support. * configure: Regenerated. * cr16/aclocal.m4: New. * cr16/close.c: New. * cr16/configure: New. * cr16/configure.in: New. * cr16/crt1.S: New. * cr16/crti.S: New. * cr16/crtn.S: New. * cr16/dvz_hndl.c: New. * cr16/_exit.c: New. * cr16/flg_hndl.c: New. * cr16/fstat.c: New. * cr16/_getenv.c: New. * cr16/getpid.c: New. * cr16/iad_hndl.c: New. * cr16/intable.c: New. * cr16/isatty.c: New. * cr16/kill.c: New. * cr16/lseek.c: New. * cr16/Makefile.in: New. * cr16/open.c: New. * cr16/putnum.c: New. * cr16/read.c: New. * cr16/_rename.c: New. * cr16/sbrk.c: New. * cr16/sim.ld: New. * cr16/stat.c: New. * cr16/svc_hndl.c: New. * cr16/time.c: New. * cr16/und_hndl.c: New. * cr16/unlink.c: New. * cr16/write.c: New.
Diffstat (limited to 'libgloss/cr16/sbrk.c')
-rw-r--r--libgloss/cr16/sbrk.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/libgloss/cr16/sbrk.c b/libgloss/cr16/sbrk.c
new file mode 100644
index 000000000..7c9604726
--- /dev/null
+++ b/libgloss/cr16/sbrk.c
@@ -0,0 +1,56 @@
+/* sbrk.c -- Implementation of the low-level sbrk() routine
+ *
+ * Copyright (c) 2004 National Semiconductor Corporation
+ *
+ * The authors hereby grant permission to use, copy, modify, distribute,
+ * and license this software and its documentation for any purpose, provided
+ * that existing copyright notices are retained in all copies and that this
+ * notice is included verbatim in any distributions. No written agreement,
+ * license, or royalty fee is required for any of the authorized uses.
+ * Modifications to this software may be copyrighted by their authors
+ * and need not follow the licensing terms described here, provided that
+ * the new terms are clearly indicated on the first page of each file where
+ * they apply.
+ */
+
+#include <errno.h>
+#include <stddef.h> /* where ptrdiff_t is defined */
+#include <stdlib.h>
+
+/* Extend heap space by size bytes.
+ Return start of new space allocated, or -1 for errors
+ Error cases:
+ 1. Allocation is not within heap range */
+
+void * _sbrk (ptrdiff_t size)
+{
+ /*
+ * The following two memory locations should be defined in the linker script file
+ */
+ extern const char _HEAP_START; /* start of heap */
+ extern const char _HEAP_MAX; /* end of heap (maximum value of heap_ptr) */
+
+ static const char * heap_ptr; /* pointer to head of heap */
+ const char * old_heap_ptr;
+ static unsigned char init_sbrk = 0;
+
+ /* heap_ptr is initialized to HEAP_START */
+ if (init_sbrk == 0)
+ {
+ heap_ptr = &_HEAP_START;
+ init_sbrk = 1;
+ }
+
+ old_heap_ptr = heap_ptr;
+
+ if ((heap_ptr + size) > &_HEAP_MAX)
+ {
+ /* top of heap is bigger than _HEAP_MAX */
+ errno = ENOMEM;
+ return (void *) -1;
+ }
+
+ /* success: update heap_ptr and return previous value */
+ heap_ptr += size;
+ return (void *)old_heap_ptr;
+}