From e5fba22bc43b46801af515b5a565d31a3bbab054 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Mon, 12 Jul 2010 01:01:26 +0200 Subject: gcc: add sbrk stub --- AT91SAM7S256/SAM7S256/gcc/Makefile | 2 +- AT91SAM7S256/SAM7S256/gcc/lib/sbrk.c | 44 ++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 AT91SAM7S256/SAM7S256/gcc/lib/sbrk.c (limited to 'AT91SAM7S256/SAM7S256/gcc') diff --git a/AT91SAM7S256/SAM7S256/gcc/Makefile b/AT91SAM7S256/SAM7S256/gcc/Makefile index 93fda54..1e64ec8 100644 --- a/AT91SAM7S256/SAM7S256/gcc/Makefile +++ b/AT91SAM7S256/SAM7S256/gcc/Makefile @@ -11,7 +11,7 @@ THUMB_SOURCES = c_button.c c_cmd.c c_comm.c c_display.c c_input.c c_ioctrl.c \ d_ioctrl.c d_loader.c d_lowspeed.c d_output.c d_sound.c \ d_timer.c d_usb.c \ m_sched.c \ - errno.c strtod.c sscanf.c \ + errno.c sbrk.c strtod.c sscanf.c \ Cstartup_SAM7.c ASM_ARM_SOURCE = Cstartup.S diff --git a/AT91SAM7S256/SAM7S256/gcc/lib/sbrk.c b/AT91SAM7S256/SAM7S256/gcc/lib/sbrk.c new file mode 100644 index 0000000..317a94b --- /dev/null +++ b/AT91SAM7S256/SAM7S256/gcc/lib/sbrk.c @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2010 Nicolas Schodet + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +/* The newlib sprintf use dynamic allocation for floating point. Therefore, + * the sbrk syscall should be provided. + * + * This works by taking memory above BSS and below stack. There is no + * collision detection as it whould not known what to do then. */ + +extern char _end; + +void * +_sbrk (int incr) +{ + static char *heap = 0; + char *base; + /* Initialise if first call. */ + if (heap == 0) + heap = &_end; + /* Increment and return old heap base. */ + base = heap; + heap += incr; + return base; +} + -- cgit v1.2.3