1 | /*
|
---|
2 | * TOPPERS Software
|
---|
3 | * Toyohashi Open Platform for Embedded Real-Time Systems
|
---|
4 | *
|
---|
5 | * Copyright (C) 2013 by Kijineko Inc.
|
---|
6 | *
|
---|
7 | * $B>e5-Cx:n8"<T$O!$0J2<$N(B(1)$B!A(B(4)$B$N>r7o$rK~$?$9>l9g$K8B$j!$K\%=%U%H%&%'(B
|
---|
8 | * $B%"!JK\%=%U%H%&%'%"$r2~JQ$7$?$b$N$r4^$`!%0J2<F1$8!K$r;HMQ!&J#@=!&2~(B
|
---|
9 | * $BJQ!&:FG[I[!J0J2<!$MxMQ$H8F$V!K$9$k$3$H$rL5=~$G5vBz$9$k!%(B
|
---|
10 | * (1) $BK\%=%U%H%&%'%"$r%=!<%9%3!<%I$N7A$GMxMQ$9$k>l9g$K$O!$>e5-$NCx:n(B
|
---|
11 | * $B8"I=<(!$$3$NMxMQ>r7o$*$h$S2<5-$NL5J]>Z5,Dj$,!$$=$N$^$^$N7A$G%=!<(B
|
---|
12 | * $B%9%3!<%ICf$K4^$^$l$F$$$k$3$H!%(B
|
---|
13 | * (2) $BK\%=%U%H%&%'%"$r!$%i%$%V%i%j7A<0$J$I!$B>$N%=%U%H%&%'%"3+H/$K;H(B
|
---|
14 | * $BMQ$G$-$k7A$G:FG[I[$9$k>l9g$K$O!$:FG[I[$KH<$&%I%-%e%a%s%H!JMxMQ(B
|
---|
15 | * $B<T%^%K%e%"%k$J$I!K$K!$>e5-$NCx:n8"I=<(!$$3$NMxMQ>r7o$*$h$S2<5-(B
|
---|
16 | * $B$NL5J]>Z5,Dj$r7G:\$9$k$3$H!%(B
|
---|
17 | * (3) $BK\%=%U%H%&%'%"$r!$5!4o$KAH$_9~$`$J$I!$B>$N%=%U%H%&%'%"3+H/$K;H(B
|
---|
18 | * $BMQ$G$-$J$$7A$G:FG[I[$9$k>l9g$K$O!$<!$N$$$:$l$+$N>r7o$rK~$?$9$3(B
|
---|
19 | * $B$H!%(B
|
---|
20 | * (a) $B:FG[I[$KH<$&%I%-%e%a%s%H!JMxMQ<T%^%K%e%"%k$J$I!K$K!$>e5-$NCx(B
|
---|
21 | * $B:n8"I=<(!$$3$NMxMQ>r7o$*$h$S2<5-$NL5J]>Z5,Dj$r7G:\$9$k$3$H!%(B
|
---|
22 | * (b) $B:FG[I[$N7ABV$r!$JL$KDj$a$kJ}K!$K$h$C$F!$(BTOPPERS$B%W%m%8%'%/%H$K(B
|
---|
23 | * $BJs9p$9$k$3$H!%(B
|
---|
24 | * (4) $BK\%=%U%H%&%'%"$NMxMQ$K$h$jD>@\E*$^$?$O4V@\E*$K@8$8$k$$$+$J$kB;(B
|
---|
25 | * $B32$+$i$b!$>e5-Cx:n8"<T$*$h$S(BTOPPERS$B%W%m%8%'%/%H$rLH@U$9$k$3$H!%(B
|
---|
26 | * $B$^$?!$K\%=%U%H%&%'%"$N%f!<%6$^$?$O%(%s%I%f!<%6$+$i$N$$$+$J$kM}(B
|
---|
27 | * $BM3$K4p$E$/@A5a$+$i$b!$>e5-Cx:n8"<T$*$h$S(BTOPPERS$B%W%m%8%'%/%H$r(B
|
---|
28 | * $BLH@U$9$k$3$H!%(B
|
---|
29 | *
|
---|
30 | * $BK\%=%U%H%&%'%"$O!$L5J]>Z$GDs6!$5$l$F$$$k$b$N$G$"$k!%>e5-Cx:n8"<T$*(B
|
---|
31 | * $B$h$S(BTOPPERS$B%W%m%8%'%/%H$O!$K\%=%U%H%&%'%"$K4X$7$F!$FCDj$N;HMQL\E*(B
|
---|
32 | * $B$KBP$9$kE,9g@-$b4^$a$F!$$$$+$J$kJ]>Z$b9T$o$J$$!%$^$?!$K\%=%U%H%&%'(B
|
---|
33 | * $B%"$NMxMQ$K$h$jD>@\E*$^$?$O4V@\E*$K@8$8$?$$$+$J$kB;32$K4X$7$F$b!$$=(B
|
---|
34 | * $B$N@UG$$rIi$o$J$$!%(B
|
---|
35 | *
|
---|
36 | * $Id: libc_syscall.c 58 2013-04-12 00:36:18Z ertl-honda $
|
---|
37 | */
|
---|
38 |
|
---|
39 | /*
|
---|
40 | * Newlib$B$N(Bmalloc/free$B$r;H$&$?$a$N2<@A$14X?t(B
|
---|
41 | * $BB>$N4D6-$K0\?"$9$k>l9g$O!"%i%$%V%i%j$N;EMM$K9g$o$;$F<BAu$7$J$*$9(B
|
---|
42 | * $BI,MW$,$"$k!#(B
|
---|
43 | */
|
---|
44 |
|
---|
45 | #include <reent.h>
|
---|
46 | #include <unistd.h>
|
---|
47 | #include <kernel.h>
|
---|
48 | #include "kernel_cfg.h"
|
---|
49 |
|
---|
50 | /* $B%R!<%W%5%$%:(B */
|
---|
51 | #ifndef HEAP_SIZE
|
---|
52 | # define HEAP_SIZE 0x100000
|
---|
53 | #endif
|
---|
54 |
|
---|
55 | void *_sbrk_r(struct _reent *ptr, ptrdiff_t incr)
|
---|
56 | {
|
---|
57 | static uint64_t storage[HEAP_SIZE / sizeof(uint64_t)];
|
---|
58 | static size_t pos = 0;
|
---|
59 | char *result;
|
---|
60 |
|
---|
61 | if (pos + incr >= sizeof(storage))
|
---|
62 | return NULL;
|
---|
63 |
|
---|
64 | incr = (incr + sizeof(uint64_t) - 1) / sizeof(uint64_t) * sizeof(uint64_t);
|
---|
65 | result = (char*)storage + pos;
|
---|
66 | pos += incr;
|
---|
67 | return result;
|
---|
68 | }
|
---|
69 |
|
---|
70 | void __malloc_lock (struct _reent *ptr)
|
---|
71 | {
|
---|
72 | (void)ptr;
|
---|
73 | if (!sns_ker())
|
---|
74 | dis_dsp();
|
---|
75 | }
|
---|
76 |
|
---|
77 | void __malloc_unlock (struct _reent *ptr)
|
---|
78 | {
|
---|
79 | (void)ptr;
|
---|
80 | if (!sns_ker())
|
---|
81 | ena_dsp();
|
---|
82 | }
|
---|
83 |
|
---|