machine_triple_t *triple = XMALLOCZ(machine_triple_t);
- size_t cpu_type_len = manufacturer-cpu+1;
+ size_t cpu_type_len = manufacturer-cpu;
triple->cpu_type = XMALLOCN(char, cpu_type_len);
memcpy(triple->cpu_type, cpu, cpu_type_len-1);
triple->cpu_type[cpu_type_len-1] = '\0';
triple->manufacturer = xstrdup("unknown");
os = manufacturer;
} else {
- size_t manufacturer_len = os-manufacturer+1;
+ size_t manufacturer_len = os-manufacturer;
triple->manufacturer = XMALLOCN(char, manufacturer_len);
memcpy(triple->manufacturer, manufacturer, manufacturer_len-1);
triple->manufacturer[manufacturer_len-1] = '\0';
fprintf(stderr, "Target-triple is not in the form 'cpu_type-manufacturer-operating_system'\n");
return false;
}
+ target_machine = triple;
return true;
}
+static void setup_target_machine(void)
+{
+ if (!setup_firm_for_machine(target_machine))
+ exit(1);
+ init_os_support();
+}
+
int main(int argc, char **argv)
{
firm_early_init();
target_machine = firm_get_host_machine();
}
choose_optimization_pack(opt_level);
- setup_firm_for_machine(target_machine);
- init_os_support();
+ setup_target_machine();
/* parse rest of options */
standard = STANDARD_DEFAULT;
if (!parse_target_triple(opt)) {
argument_errors = true;
} else {
- setup_firm_for_machine(target_machine);
+ setup_target_machine();
target_triple = opt;
}
} else if (strstart(opt, "triple=")) {
if (!parse_target_triple(opt)) {
argument_errors = true;
} else {
- setup_firm_for_machine(target_machine);
+ setup_target_machine();
target_triple = opt;
}
} else if (strstart(opt, "arch=")) {