fix target-triple handling
authorMatthias Braun <matze@braunis.de>
Fri, 8 Apr 2011 14:14:07 +0000 (16:14 +0200)
committerMatthias Braun <matze@braunis.de>
Thu, 14 Apr 2011 14:51:46 +0000 (16:51 +0200)
driver/firm_machine.c
main.c

index ca6a5fe..de1bf77 100644 (file)
@@ -119,7 +119,7 @@ machine_triple_t *firm_parse_machine_triple(const char *triple_string)
 
        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';
@@ -130,7 +130,7 @@ machine_triple_t *firm_parse_machine_triple(const char *triple_string)
                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';
diff --git a/main.c b/main.c
index efe90d3..bb3c310 100644 (file)
--- a/main.c
+++ b/main.c
@@ -642,9 +642,17 @@ static bool parse_target_triple(const char *arg)
                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();
@@ -712,8 +720,7 @@ int main(int argc, char **argv)
                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;
@@ -930,7 +937,7 @@ int main(int argc, char **argv)
                                        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=")) {
@@ -938,7 +945,7 @@ int main(int argc, char **argv)
                                        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=")) {