21static void parse_boot_path(
int argc,
char *argv[]) {
25 strcpy(_init_erl_prefix,
"host:");
27 strcpy(_init_erl_prefix, argv[0]);
29 p = strrchr(_init_erl_prefix,
'/');
32 p = strrchr(_init_erl_prefix,
'\\');
35 p = strrchr(_init_erl_prefix,
':');
41 _init_erl_prefix[p - _init_erl_prefix] = 0;
44static char * prohibit_list[] = {
45 "_edata",
"_end",
"_end_bss",
"_fbss",
"_fdata",
"_fini",
46 "_ftext",
"_gp",
"_init",
"main",
50static void export_symbols() {
53 for (p = export_list; p->name; p++) {
57 for (i = 0; prohibit_list[i]; i++) {
58 if (!(strcmp(prohibit_list[i], p->name))) {
64 erl_add_global_symbol(p->name, (u32) p->pointer);
68typedef void (*func_t)(void);
70int main(
int argc,
char *argv[]) {
73 parse_boot_path(argc, argv);
79 for (i = 1; i < argc; i++) {
80 _init_load_erl_from_file(argv[i], 0);
83 _init_load_erl_from_file(
"main.erl", 0);
86 if ((s = erl_find_symbol(
"main"))) {
87 ((func_t) s->address)();