make SILENT=yes
[tinycc.git] / lib / bt-log.c
blobd767f08a89efd5247f86c5e059e108568f85b4a4
1 /* ------------------------------------------------------------- */
2 /* function to get a stack backtrace on demand with a message */
4 #include <stdarg.h>
5 #include <stdio.h>
6 #include <string.h>
8 int (*__rt_error)(void*, void*, const char *, va_list);
10 #ifdef _WIN32
11 # define DLL_EXPORT __declspec(dllexport)
12 #else
13 # define DLL_EXPORT
14 #endif
16 DLL_EXPORT int tcc_backtrace(const char *fmt, ...)
18 va_list ap;
19 int ret;
21 if (__rt_error) {
22 void *fp = __builtin_frame_address(1);
23 void *ip = __builtin_return_address(0);
24 va_start(ap, fmt);
25 ret = __rt_error(fp, ip, fmt, ap);
26 va_end(ap);
27 } else {
28 const char *p;
29 if (fmt[0] == '^' && (p = strchr(fmt + 1, fmt[0])))
30 fmt = p + 1;
31 va_start(ap, fmt);
32 ret = vfprintf(stderr, fmt, ap);
33 va_end(ap);
34 fprintf(stderr, "\n"), fflush(stderr);
36 return ret;