2013-10-13 00:42:20 +01:00
|
|
|
#include <stdint.h>
|
|
|
|
#include "std.h"
|
2013-12-21 18:17:45 +00:00
|
|
|
#include "mpconfig.h"
|
2013-10-21 23:46:04 +01:00
|
|
|
#include "gc.h"
|
2013-10-13 00:42:20 +01:00
|
|
|
|
2013-10-21 23:46:04 +01:00
|
|
|
#if 0
|
2013-10-13 00:42:20 +01:00
|
|
|
static uint32_t mem = 0;
|
|
|
|
|
|
|
|
void *malloc(size_t n) {
|
|
|
|
if (mem == 0) {
|
2013-10-17 22:50:21 +01:00
|
|
|
extern uint32_t _heap_start;
|
2013-10-18 23:44:05 +01:00
|
|
|
mem = (uint32_t)&_heap_start; // need to use big ram block so we can execute code from it (is it true that we can't execute from CCM?)
|
2013-10-13 00:42:20 +01:00
|
|
|
}
|
|
|
|
void *ptr = (void*)mem;
|
|
|
|
mem = (mem + n + 3) & (~3);
|
|
|
|
if (mem > 0x20000000 + 0x18000) {
|
|
|
|
void __fatal_error(const char*);
|
|
|
|
__fatal_error("out of memory");
|
|
|
|
}
|
|
|
|
return ptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
void free(void *ptr) {
|
|
|
|
}
|
|
|
|
|
2013-10-21 23:46:04 +01:00
|
|
|
void *realloc(void *ptr, size_t n) {
|
|
|
|
return malloc(n);
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
2013-10-13 00:42:20 +01:00
|
|
|
void *calloc(size_t sz, size_t n) {
|
|
|
|
char *ptr = malloc(sz * n);
|
|
|
|
for (int i = 0; i < sz * n; i++) {
|
|
|
|
ptr[i] = 0;
|
|
|
|
}
|
|
|
|
return ptr;
|
|
|
|
}
|
|
|
|
|
2013-10-21 23:46:04 +01:00
|
|
|
void *malloc(size_t n) {
|
|
|
|
return gc_alloc(n);
|
|
|
|
}
|
|
|
|
|
|
|
|
void free(void *ptr) {
|
2013-10-22 21:13:36 +01:00
|
|
|
gc_free(ptr);
|
2013-10-21 23:46:04 +01:00
|
|
|
}
|
|
|
|
|
2013-10-13 00:42:20 +01:00
|
|
|
void *realloc(void *ptr, size_t n) {
|
2013-10-21 23:46:04 +01:00
|
|
|
return gc_realloc(ptr, n);
|
2013-10-13 00:42:20 +01:00
|
|
|
}
|
|
|
|
|
2013-10-23 20:39:20 +01:00
|
|
|
void __assert_func(void) {
|
2013-10-13 00:42:20 +01:00
|
|
|
printf("\nASSERT FAIL!");
|
|
|
|
for (;;) {
|
|
|
|
}
|
|
|
|
}
|