[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avr-libc-commit] [2123] Add some initial malloc and realloc tests to te
From: |
Joerg Wunsch |
Subject: |
[avr-libc-commit] [2123] Add some initial malloc and realloc tests to test |
Date: |
Fri, 04 Jun 2010 14:38:24 +0000 |
Revision: 2123
http://svn.sv.gnu.org/viewvc/?view=rev&root=avr-libc&revision=2123
Author: joerg_wunsch
Date: 2010-06-04 14:38:23 +0000 (Fri, 04 Jun 2010)
Log Message:
-----------
Add some initial malloc and realloc tests to test
suite.
Modified Paths:
--------------
trunk/avr-libc/ChangeLog
trunk/avr-libc/libc/stdlib/malloc.c
Added Paths:
-----------
trunk/avr-libc/tests/simulate/stdlib/malloc-1.c
trunk/avr-libc/tests/simulate/stdlib/malloc-2.c
trunk/avr-libc/tests/simulate/stdlib/malloc-3.c
trunk/avr-libc/tests/simulate/stdlib/realloc-1.c
Modified: trunk/avr-libc/ChangeLog
===================================================================
--- trunk/avr-libc/ChangeLog 2010-04-16 02:52:03 UTC (rev 2122)
+++ trunk/avr-libc/ChangeLog 2010-06-04 14:38:23 UTC (rev 2123)
@@ -1,3 +1,12 @@
+2010-06-04 Joerg Wunsch <address@hidden>
+
+ Add some initial malloc and realloc tests to test
+ suite.
+ * tests/simulate/stdlib/malloc-1.c: New file.
+ * tests/simulate/stdlib/malloc-2.c: (Ditto.)
+ * tests/simulate/stdlib/malloc-3.c: (Ditto.)
+ * tests/simulate/stdlib/realloc-1.c: (Ditto.)
+
2010-04-16 Anitha Boyapati <address@hidden>
Fix bug #28574.
Modified: trunk/avr-libc/libc/stdlib/malloc.c
===================================================================
--- trunk/avr-libc/libc/stdlib/malloc.c 2010-04-16 02:52:03 UTC (rev 2122)
+++ trunk/avr-libc/libc/stdlib/malloc.c 2010-06-04 14:38:23 UTC (rev 2123)
@@ -164,7 +164,22 @@
* segment as dynamically requested from the operating system.
* Since we don't have an operating system, just make sure
* that we don't collide with the stack.
+ * But first we check if there is a free chunk at the end of
+ * the allocation area. Brkval is corrected downwards then,
+ * so the free chunk gets added to the new chunk.
+ * (fp2 still points to the last list entry from step 1)
*/
+ if (fp2 && (char*)fp2 + fp2->sz + sizeof(size_t) == __brkval) {
+ __brkval = (char*)fp2;
+ for (fp1 = __flp, fp2 = 0;
+ fp1->nx;
+ fp2 = fp1, fp1 = fp1->nx)
+ {}
+ if (fp2)
+ fp2->nx = 0;
+ else
+ __flp = 0;
+ }
if (__brkval == 0)
__brkval = __malloc_heap_start;
cp = __malloc_heap_end;
Added: trunk/avr-libc/tests/simulate/stdlib/malloc-1.c
===================================================================
--- trunk/avr-libc/tests/simulate/stdlib/malloc-1.c
(rev 0)
+++ trunk/avr-libc/tests/simulate/stdlib/malloc-1.c 2010-06-04 14:38:23 UTC
(rev 2123)
@@ -0,0 +1,105 @@
+/* Copyright (c) 2010 Joerg Wunsch
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of the copyright holders nor the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id$ */
+
+/* Allocate a bunch of things, and free them again. At the end,
+ the freelist is supposed to consist of a single entry. */
+
+#ifndef __AVR__
+
+/* There is no sense to check on host computer. */
+int main ()
+{
+ return 0;
+}
+
+#else
+
+#include <stdint.h>
+#include <stdlib.h>
+
+struct __freelist {
+ size_t sz;
+ struct __freelist *nx;
+};
+
+extern char *__brkval; /* first location not yet allocated */
+extern struct __freelist *__flp; /* freelist pointer (head of freelist) */
+extern char *__malloc_heap_start;
+extern char *__malloc_heap_end;
+
+#if defined(__AVR_ATmega128__)
+static const int sizes[8] =
+{
+ 5, 8, 2, 122, 256, 1, 32, 25 /* 451 + 1 [padding] + 2 * 8 [ptrs] = 468 */
+};
+#define TARGETVAL 468
+#elif defined(__AVR_AT90S8515__)
+static const int sizes[8] =
+{
+ 5, 8, 2, 22, 256, 1, 12, 25 /* 331 + 1 [padding] + 2 * 8 [ptrs] = 348 */
+};
+#define TARGETVAL 348
+#else
+# error "Unknown MCU type"
+#endif
+
+
+int main(void)
+{
+ void *ptrs[8];
+ uint8_t i;
+
+ for (i = 0; i < 8; i++)
+ {
+ void *p = malloc(sizes[i]);
+ /* first test: all allocations are supposed to fit */
+ if (p == NULL) return __LINE__;
+ ptrs[i] = p;
+ }
+ /* second test: the amount of memory allocated to the heap must
+ match the expected TARGETVAL */
+ if (__brkval - __malloc_heap_start != TARGETVAL) return __LINE__;
+
+ for (i = 0; i < 8; i++)
+ {
+ free(ptrs[i]);
+ }
+
+ /* after freeing everything, the freelist must contain one
+ chunk of the full TARGETVAL size (minus the size for one
+ pointer), and the "nx" pointer must be NULL */
+ if (__flp->nx != NULL) return __LINE__;
+ if (__flp->sz != TARGETVAL - 2) return __LINE__;
+
+ return 0;
+}
+
+#endif /* !AVR */
Property changes on: trunk/avr-libc/tests/simulate/stdlib/malloc-1.c
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:keywords
+ Author Id Date
Added: svn:eol-style
+ native
Added: trunk/avr-libc/tests/simulate/stdlib/malloc-2.c
===================================================================
--- trunk/avr-libc/tests/simulate/stdlib/malloc-2.c
(rev 0)
+++ trunk/avr-libc/tests/simulate/stdlib/malloc-2.c 2010-06-04 14:38:23 UTC
(rev 2123)
@@ -0,0 +1,90 @@
+/* Copyright (c) 2010 Joerg Wunsch
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of the copyright holders nor the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id$ */
+
+/* Setup the heap to a certain area, and make sure allocation won't go
+ beyond the restriction. */
+
+#ifndef __AVR__
+
+/* There is no sense to check on host computer. */
+int main ()
+{
+ return 0;
+}
+
+#else
+
+#include <stdint.h>
+#include <stdlib.h>
+
+struct __freelist {
+ size_t sz;
+ struct __freelist *nx;
+};
+
+extern char *__brkval; /* first location not yet allocated */
+extern struct __freelist *__flp; /* freelist pointer (head of freelist) */
+extern char *__malloc_heap_start;
+extern char *__malloc_heap_end;
+
+#if defined(__AVR_ATmega128__)
+#define HEAP_START 0x200
+#define HEAP_END 0x1000
+#define ALLOC_FAILS 0xe00
+#define ALLOC_WORKS 0xdfe
+#elif defined(__AVR_AT90S8515__)
+#define HEAP_START 0x100
+#define HEAP_END 0x200
+#define ALLOC_FAILS 0x100
+#define ALLOC_WORKS 0xfe
+#else
+# error "Unknown MCU type"
+#endif
+
+
+int main(void)
+{
+ void *p;
+
+ __malloc_heap_start = (void *)HEAP_START;
+ __malloc_heap_end = (void *)HEAP_END;
+
+ p = malloc(ALLOC_FAILS);
+ if (p != NULL) return __LINE__;
+
+ p = malloc(ALLOC_WORKS);
+ if (p == NULL) return __LINE__;
+ if (p != (void *)(HEAP_START + 2)) return __LINE__;
+
+ return 0;
+}
+
+#endif /* !AVR */
Property changes on: trunk/avr-libc/tests/simulate/stdlib/malloc-2.c
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:keywords
+ Author Id Date
Added: svn:eol-style
+ native
Added: trunk/avr-libc/tests/simulate/stdlib/malloc-3.c
===================================================================
--- trunk/avr-libc/tests/simulate/stdlib/malloc-3.c
(rev 0)
+++ trunk/avr-libc/tests/simulate/stdlib/malloc-3.c 2010-06-04 14:38:23 UTC
(rev 2123)
@@ -0,0 +1,94 @@
+/* Copyright (c) 2010 Joerg Wunsch
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of the copyright holders nor the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id$ */
+
+/* Test heap restrictions implied by __malloc_margin. */
+
+#ifndef __AVR__
+
+/* There is no sense to check on host computer. */
+int main ()
+{
+ return 0;
+}
+
+#else
+
+#include <stdint.h>
+#include <stdlib.h>
+
+struct __freelist {
+ size_t sz;
+ struct __freelist *nx;
+};
+
+extern char *__brkval; /* first location not yet allocated */
+extern struct __freelist *__flp; /* freelist pointer (head of freelist) */
+extern char *__malloc_heap_start;
+extern char *__malloc_heap_end;
+
+#if defined(__AVR_ATmega128__)
+#define HEAP_START 0x200
+#elif defined(__AVR_AT90S8515__)
+#define HEAP_START 0x100
+#else
+# error "Unknown MCU type"
+#endif
+
+
+int main(void)
+{
+ volatile void *dummy;
+
+ __malloc_heap_start = (void *)HEAP_START;
+ unsigned int bottom_of_stack = (unsigned int)&dummy;
+ size_t s = bottom_of_stack - HEAP_START;
+
+ /* try allocating everything from heap start through bottom
+ of stack; expected to fail */
+ void *p = malloc(s);
+ if (p != NULL) return __LINE__;
+
+ /* reduce by __malloc_margin's default value; still expected to
+ fail*/
+ s -= 32;
+ p = malloc(s);
+ if (p != NULL) return __LINE__;
+
+ /* reduce by some more bytes (size of malloc()'s stack frame);
+ expected to work */
+ s -= 10; /* AVR-GCC 4.3.4: 8 bytes needed */
+ p = malloc(s);
+ if (p == NULL) return __LINE__;
+
+ return 0;
+}
+
+#endif /* !AVR */
Property changes on: trunk/avr-libc/tests/simulate/stdlib/malloc-3.c
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:keywords
+ Author Id Date
Added: svn:eol-style
+ native
Added: trunk/avr-libc/tests/simulate/stdlib/realloc-1.c
===================================================================
--- trunk/avr-libc/tests/simulate/stdlib/realloc-1.c
(rev 0)
+++ trunk/avr-libc/tests/simulate/stdlib/realloc-1.c 2010-06-04 14:38:23 UTC
(rev 2123)
@@ -0,0 +1,86 @@
+/* Copyright (c) 2010 Joerg Wunsch
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of the copyright holders nor the names of
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* $Id$ */
+
+/* Basic realloc() test: ensure the realloc'ed area's initial
+ contents matches the previously malloc'ed one. */
+
+#ifndef __AVR__
+
+/* There is no sense to check on host computer. */
+int main ()
+{
+ return 0;
+}
+
+#else
+
+#include <stdint.h>
+#include <stdlib.h>
+
+struct __freelist {
+ size_t sz;
+ struct __freelist *nx;
+};
+
+extern char *__brkval; /* first location not yet allocated */
+extern struct __freelist *__flp; /* freelist pointer (head of freelist) */
+extern char *__malloc_heap_start;
+extern char *__malloc_heap_end;
+
+int main(void)
+{
+ /* allocate first chunk; expected to work */
+ uint8_t *p = malloc(42);
+ if (p == NULL) return __LINE__;
+
+ /* allocate second chunk; also expected to work */
+ void *q = malloc(23);
+ if (q == NULL) return __LINE__;
+
+ /* fill some data into first chunk */
+ uint8_t i;
+ for (i = 0; i < 42; i++)
+ p[i] = i ^ 0x42;
+
+ /* extend first chunk; expected to work but expected to go into a
+ different location than the initial allocation */
+ uint8_t *r = realloc(p, 142);
+ if (r == NULL) return __LINE__;
+ if (r == p) return __LINE__;
+
+ /* verify contents */
+ for (i = 0; i < 42; i++)
+ if (r[i] != (i ^ 0x42)) return __LINE__;
+
+ return 0;
+}
+
+#endif /* !AVR */
Property changes on: trunk/avr-libc/tests/simulate/stdlib/realloc-1.c
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: svn:keywords
+ Author Id Date
Added: svn:eol-style
+ native
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [avr-libc-commit] [2123] Add some initial malloc and realloc tests to test,
Joerg Wunsch <=