embkernel
 All Classes Functions Variables Typedefs Groups Pages
RtosSysCalls.cpp
1 //------------------------------------------------------------------------------
2 //This file is part of embKernel.
3 //See license.txt for the full license governing this code.
4 //------------------------------------------------------------------------------
8 extern void (*__init_array_start[])(void);
9 extern void (*__init_array_end)(void);
10 
11 extern "C" __attribute__((weak)) void __libc_init_array(void) {
12  for (int i = 0; &__init_array_start[i] < &__init_array_end; i++) {
13  __init_array_start[i]();
14  }
15 }
16 
17 //Override operator new
18 #include <stdlib.h>
19 #include <string.h>
20 #include "RtosHeap.hpp"
21 
22 void* operator new(size_t size) {
23  return RtosHeap::alloc(size);
24 }
25 
26 void operator delete(void* p) {
27  RtosHeap::free(p);
28 }
29 
30 extern "C" void* malloc(size_t size) {
31  return RtosHeap::alloc(size);
32 }
33 
34 extern "C" void free(void* p) {
35  RtosHeap::free(p);
36 }
37 
38 extern "C" void* realloc(void* p, size_t size) {
39  return RtosHeap::resize(p, size);
40 }
41 
42 extern "C" void* calloc(size_t num, size_t size) {
43  size_t len = num * size;
44  void* result = RtosHeap::alloc(len);
45  if (result) {
46  memset(result, 0, len);
47  }
48  return result;
49 }
50 
51 //extern "C" __attribute__((weak)) void _init(void) {
52 //
53 //}
54 //
55 //extern "C" __attribute__((weak)) void _fini(void) {
56 //
57 //}
58 //
59 //extern "C" __attribute__((weak)) void abort(void) {
60 // while (1)
61 // ;
62 //}
63 //extern "C" __attribute__((weak)) void __cxa_pure_virtual() {
64 // while (1)
65 // ;
66 //}