value caml_startup_common(char_os **argv, int pooling) { char_os * exe_name, * proc_self_exe; char tos; CAML_INIT_DOMAIN_STATE; /* Determine options */ caml_parse_ocamlrunparam(); #ifdef DEBUG caml_gc_message (-1, "### OCaml runtime: debug mode ###\n"); #endif if (caml_params->cleanup_on_exit) pooling = 1; if (!caml_startup_aux(pooling)) return Val_unit; #ifdef WITH_SPACETIME caml_spacetime_initialize(); #endif caml_init_ieee_floats(); #if defined(_MSC_VER) && __STDC_SECURE_LIB__ >= 200411L caml_install_invalid_parameter_handler(); #endif caml_init_custom_operations(); caml_init_gc (); if (caml_params->backtrace_enabled_init) caml_record_backtrace(Val_int(1)); /* Capture 16-byte aligned (ceil) system_stack_high */ Caml_state->system_stack_high = (char*)((((uintnat)&tos + 16) >> 4) << 4); init_segments(); caml_init_signals(); #ifdef _WIN32 caml_win32_overflow_detection(); #endif caml_debugger_init (); /* force debugger.o stub to be linked */ exe_name = argv[0]; if (exe_name == NULL) exe_name = _T(""); proc_self_exe = caml_executable_name(); if (proc_self_exe != NULL) exe_name = proc_self_exe; else exe_name = caml_search_exe_in_path(exe_name); caml_init_argv(exe_name, argv); if (sigsetjmp(caml_termination_jmpbuf.buf, 0)) { if (caml_termination_hook != NULL) caml_termination_hook(NULL); return Val_unit; } caml_init_main_stack(); return caml_start_program(Caml_state->young_ptr); }
void caml_main(char **argv) { char * exe_name; #ifdef __linux__ static char proc_self_exe[256]; #endif value res; char tos; caml_init_ieee_floats(); #ifdef _MSC_VER caml_install_invalid_parameter_handler(); #endif caml_init_custom_operations(); #ifdef DEBUG caml_verb_gc = 63; #endif caml_top_of_stack = &tos; parse_camlrunparam(); caml_init_gc (minor_heap_init, heap_size_init, heap_chunk_init, percent_free_init, max_percent_free_init); init_atoms(); caml_init_signals(); #if !defined(__FreeBSD__) && !defined(_KERNEL) caml_debugger_init (); /* force debugger.o stub to be linked */ #endif exe_name = argv[0]; if (exe_name == NULL) exe_name = ""; #ifdef __linux__ if (caml_executable_name(proc_self_exe, sizeof(proc_self_exe)) == 0) exe_name = proc_self_exe; else exe_name = caml_search_exe_in_path(exe_name); #elif defined(__FreeBSD__) && defined(_KERNEL) exe_name = "mirage.ko"; #else exe_name = caml_search_exe_in_path(exe_name); #endif caml_sys_init(exe_name, argv); if (sigsetjmp(caml_termination_jmpbuf.buf, 0)) { if (caml_termination_hook != NULL) caml_termination_hook(NULL); return; } res = caml_start_program(); if (Is_exception_result(res)) caml_fatal_uncaught_exception(Extract_exception(res)); }