c_src: update Makefile to compile on MacOSX
[nit.git] / c_src / nitg.main.1.c
1 #include "nitg.main.0.h"
2 #include <signal.h>
3 #define UNW_LOCAL_ONLY
4 #include <libunwind.h>
5 int glob_argc;
6 char **glob_argv;
7 val *glob_sys;
8 void sig_handler(int signo){
9 printf("Caught signal : %s\n", strsignal(signo));
10 show_backtrace(signo);
11 }
12 void show_backtrace (int signo) {
13 char* opt = getenv("NIT_NO_STACK");
14 unw_cursor_t cursor;
15 if(opt==NULL){
16 unw_context_t uc;
17 unw_word_t ip;
18 char* procname = malloc(sizeof(char) * 100);
19 unw_getcontext(&uc);
20 unw_init_local(&cursor, &uc);
21 printf("-------------------------------------------------\n");
22 printf("-- Stack Trace ------------------------------\n");
23 printf("-------------------------------------------------\n");
24 while (unw_step(&cursor) > 0) {
25 unw_get_proc_name(&cursor, procname, 100, &ip);
26 printf("` %s \n",procname);
27 }
28 printf("-------------------------------------------------\n");
29 free(procname);
30 }
31 exit(signo);
32 }
33 int main(int argc, char** argv) {
34 val* var /* : Sys */;
35 signal(SIGABRT, sig_handler);
36 signal(SIGFPE, sig_handler);
37 signal(SIGILL, sig_handler);
38 signal(SIGINT, sig_handler);
39 signal(SIGTERM, sig_handler);
40 signal(SIGSEGV, sig_handler);
41 glob_argc = argc; glob_argv = argv;
42 initialize_gc_option();
43 var = NEW_kernel__Sys(&type_kernel__Sys);
44 glob_sys = var;
45 ((void (*)(val*))(var->class->vft[COLOR_kernel__Sys__init]))(var) /* init on <var:Sys>*/;
46 ((void (*)(val*))(var->class->vft[COLOR_kernel__Sys__main]))(var) /* main on <var:Sys>*/;
47 return 0;
48 }