summaryrefslogtreecommitdiff
path: root/app/platform/stm32f0-gcc/retarget.cpp
blob: 524840e917095db81da7c312d65f93bd71d8c749 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include "unistd.h"
#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <cerrno>
#include "third_party/printf/printf.h"

#ifdef errno
#undef errno
#endif

int errno{};

extern "C" [[noreturn]] void vApplicationMallocFailedHook(void)
{
    for (;;);
}

extern "C" [[noreturn]] void vApplicationStackOverflowHook(void *task_handle, char *task_name)
{
    (void) task_handle;
    (void) task_name;
    for (;;);
}

extern "C" void vApplicationIdleHook(void)
{
}

extern "C" [[noreturn]] void _exit(int __status)
{
    (void) __status;
    for (;;);
}

/* func can be NULL, in which case no function information is given.  */
extern "C" [[noreturn]] void __assert_func (
        const char *file, int line, const char *func, const char *failedexpr)
{
  dprintf(STDERR_FILENO,
	   "assertion \"%s\" failed: file \"%s\", line %d%s%s\n",
	   failedexpr, file, line,
	   func ? ", function: " : "", func ? func : "");
  abort();
  /* NOTREACHED */
}

extern "C" ssize_t read(int fd, void *buf, size_t nbytes)
{
    (void) fd;
    (void) buf;
    (void) nbytes;
    errno = ENOSYS;
    return -1;
}

extern "C" ssize_t write(int fd, const void *buf, size_t nbytes)
{
    (void) fd;
    (void) buf;
    (void) nbytes;
    errno = ENOSYS;
    return -1;
}

static void dputchar2(char c, void* fd)
{
    write(reinterpret_cast<int>(fd), &c, 1);
}

static void dputchar(char c, int fd)
{
    write(fd, &c, 1);
}

extern "C" int dprintf(int fd, const char * format, ...)
{
    va_list args;
    va_start(args, format);
    const int ret = vfctprintf(dputchar2, reinterpret_cast<void *>(fd), format, args);
    va_end(args);
    return ret;
}

extern "C" int vdprintf(int fd, const char * format, va_list args)
{
    return vfctprintf(dputchar2, reinterpret_cast<void *>(fd), format, args);
}

extern "C" void putchar_(char c)
{
    dputchar(c, STDIN_FILENO);
}