summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2006-09-15 13:24:03 +0000
committerNathan Sidwell <nathan@codesourcery.com>2006-09-15 13:24:03 +0000
commit5f87f7b44d1fd4819577a6fe2beec305990d09d9 (patch)
tree4b77a23f7c68abce214cdaffd60cbdfa768c40ca
parent11d4e97923c1d24d5342acea8cb6b392a1229ee2 (diff)
downloadcygnal-5f87f7b44d1fd4819577a6fe2beec305990d09d9.tar.gz
cygnal-5f87f7b44d1fd4819577a6fe2beec305990d09d9.tar.bz2
cygnal-5f87f7b44d1fd4819577a6fe2beec305990d09d9.zip
libgloss/
* m68k/Makefile.in (BDM_OTHER_OBJS): Remove sbrk.o. (BDM_SYSOBJS): Add bdm-sbrk.o. * m68k/bdm-sbrk.c: New.
-rw-r--r--ChangeLog.csl7
-rw-r--r--libgloss/m68k/bdm-sbrk.c49
2 files changed, 56 insertions, 0 deletions
diff --git a/ChangeLog.csl b/ChangeLog.csl
index 9ce5ed6b5..6fe9d6c2d 100644
--- a/ChangeLog.csl
+++ b/ChangeLog.csl
@@ -1,3 +1,10 @@
+2006-09-15 Nathan Sidwell <nathan@codesourcery.com>
+
+ libgloss/
+ * m68k/Makefile.in (BDM_OTHER_OBJS): Remove sbrk.o.
+ (BDM_SYSOBJS): Add bdm-sbrk.o.
+ * m68k/bdm-sbrk.c: New.
+
2006-09-11 Paul Brook <paul@codesourcery.com>
libgloss/
diff --git a/libgloss/m68k/bdm-sbrk.c b/libgloss/m68k/bdm-sbrk.c
new file mode 100644
index 000000000..b1d539d46
--- /dev/null
+++ b/libgloss/m68k/bdm-sbrk.c
@@ -0,0 +1,49 @@
+/*
+ * bdm-open.c --
+ *
+ * Copyright (c) 2006 CodeSourcery Inc
+ *
+ * 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>
+/*
+ * sbrk -- changes heap size size. Get nbytes more
+ * RAM. We just increment a pointer in what's
+ * left of memory on the board.
+ */
+
+extern char __end[] __attribute__ ((aligned (4)));
+/* Optional explicit end of heap. */
+extern char __heap_end[] __attribute__ ((aligned (4), weak));
+
+void *
+sbrk (int nbytes)
+{
+ static char *heap = __end;
+ char *end = __heap_end;
+ char *base = heap;
+ char *new_heap = heap + nbytes;
+
+ if (!end)
+ {
+ /* Use sp - 256 as the heap limit. */
+ __asm__ __volatile__ ("move.l %/sp,%0" : "=r"(end));
+ end -= 256;
+ }
+ if (nbytes < 0 || (long)(end - new_heap) < 0)
+ {
+ errno = ENOMEM;
+ return (void *)-1;
+ }
+ heap = new_heap;
+ return base;
+}