@@ -1,3 +1,10 @@
+2019-10-14 Jim Wilson <jimw@sifive.com>
+
+ * riscv-tdep.c (riscv_gcc_target_options): New.
+ (riscv_gnu_triplet_regexp): New.
+ (riscv_gdbarch_init): Call set_gdbarch_gcc_triplet_options and
+ set_gdbarch_gnu_triplet_regexp.
+
2019-10-14 Simon Marchi <simon.marchi@polymtl.ca>
* dwarf2read.c: Remove includes.
@@ -3055,6 +3055,58 @@
return -1;
}
+/* Implement the gcc_target_options method. We have to select the arch and abi
+ from the feature info. We have enough feature info to select the abi, but
+ not enough info for the arch given all of the possible architecture
+ extensions. So choose reasonable defaults for now. */
+
+static char *
+riscv_gcc_target_options (struct gdbarch *gdbarch)
+{
+ int isa_xlen = riscv_isa_xlen (gdbarch);
+ int isa_flen = riscv_isa_flen (gdbarch);
+ int abi_xlen = riscv_abi_xlen (gdbarch);
+ int abi_flen = riscv_abi_flen (gdbarch);
+ char string[64];
+
+ strcpy (string, "-march=rv");
+ if (isa_xlen == 8)
+ strcat (string, "64");
+ else
+ strcat (string, "32");
+ if (isa_flen == 8)
+ strcat (string, "gc");
+ else if (isa_flen == 4)
+ strcat (string, "imafc");
+ else
+ strcat (string, "imac");
+
+ strcat (string, " -mabi=");
+ if (abi_xlen == 8)
+ strcat (string, "lp64");
+ else
+ strcat (string, "ilp32");
+ if (abi_flen == 8)
+ strcat (string, "d");
+ else if (abi_flen == 4)
+ strcat (string, "f");
+
+ /* The gdb loader doesn't handle link-time relaxation relocations. */
+ strcat (string, " -mno-relax");
+
+ return xstrdup (string);
+}
+
+/* Implement the gnu_triplet_regexp method. A single compiler supports both
+ 32-bit and 64-bit code, and may be named riscv32 or riscv64 or (not
+ recommended) riscv. */
+
+static const char *
+riscv_gnu_triplet_regexp (struct gdbarch *gdbarch)
+{
+ return "riscv(32|64)?";
+}
+
/* Initialize the current architecture based on INFO. If possible,
re-use an architecture from ARCHES, which is a list of
architectures already created during this debugging session.
@@ -3299,6 +3351,10 @@
riscv_setup_register_aliases (gdbarch, &riscv_freg_feature);
riscv_setup_register_aliases (gdbarch, &riscv_csr_feature);
+ /* Compile command hooks. */
+ set_gdbarch_gcc_target_options (gdbarch, riscv_gcc_target_options);
+ set_gdbarch_gnu_triplet_regexp (gdbarch, riscv_gnu_triplet_regexp);
+
/* Hook in OS ABI-specific overrides, if they have been registered. */
gdbarch_init_osabi (info, gdbarch);