// ***************** arm_syscalls.c ****************************************** // SBC-DBG debug monitor implementation for ARMCortex-A9. // // // (c) OJSC ELVEES, multicore.ru // // ******************************************************************* #include #define CODE_PRINT 0xf #define CODE_EXIT 0xe int _close(int file) { return -1; } int _fstat(int file, struct stat *st) { st->st_mode = S_IFCHR; return 0; } int _isatty(int file) { return 1; } int _lseek(int file, int ptr, int dir) { return 0; } int _open(const char *name, int flags, int mode) { return -1; } int _read(int file, char *ptr, int len) { return -1; } char *heap_end = 0; caddr_t _sbrk(int incr) { extern char heap_low; /* Defined by the linker */ extern char heap_top; /* Defined by the linker */ char *prev_heap_end; if (heap_end == 0) { heap_end = &heap_low; } prev_heap_end = heap_end; if (heap_end + incr > &heap_top) { /* Heap and stack collision */ return (caddr_t)0; } heap_end += incr; return (caddr_t) prev_heap_end; } int _write(int file, char *ptr, int len) { asm volatile ("mov r0, %0; mov r1, %1;bkpt %2;" : /*No Outputs */ : "r" ((int)ptr), "r" (len), "i" (CODE_PRINT) /* Inputs */ : "r0", "r1" ); return len; } void _exit(int rc) { asm volatile ("mov r0, %0; bkpt %1;" : /* No Output */ : "r" (rc), "i" (CODE_EXIT) : "r0" ); for (;;) ; }