123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- #define USE_LIBC 1
- #pragma GCC optimize("Os")
- extern unsigned long _etext, _sdata, _edata, _end;
- extern void main(void);
- extern void __libc_init_array(void);
- __attribute__ ((noreturn)) void _start(void){
- unsigned long *pulSrc, *pulDest;
-
- pulSrc = &_etext;
- pulDest = &_sdata;
- for(; pulDest < &_edata; )
- *(pulDest++) = *(pulSrc++);
-
- for(; pulDest < &_end; )
- *(pulDest++) = 0;
- #ifdef USE_LIBC
-
- __libc_init_array();
- #endif
-
- while (1)
- main();
- }
- #ifdef USE_LIBC
- #include <sys/errno.h>
- extern unsigned int _stack_bottom;
- #define RAM_END (void*)&_stack_bottom
-
- void * _sbrk(nbytes)
- int nbytes;
- {
- static void * heap_ptr = (void*) &_end;
- void * base;
- if (heap_ptr + nbytes < RAM_END) {
- base = heap_ptr;
- heap_ptr += nbytes;
- return (base);
- }
- errno = ENOMEM;
- return ((void*)-1);
- }
- #endif
|