aboutsummaryrefslogtreecommitdiff
path: root/bfd/elfnn-riscv.c
diff options
context:
space:
mode:
authorJim Wilson <jimw@sifive.com>2018-11-13 15:50:38 -0800
committerJim Wilson <jimw@sifive.com>2018-11-13 15:56:29 -0800
commit0242af401093907f6f2bf49d90c1e5d1e23b4453 (patch)
tree92f5db99bde14ec437972e256cccf2a858177f27 /bfd/elfnn-riscv.c
parent97b3f39201efc9029a9a27d65f13674964c51503 (diff)
downloadgdb-0242af401093907f6f2bf49d90c1e5d1e23b4453.zip
gdb-0242af401093907f6f2bf49d90c1e5d1e23b4453.tar.gz
gdb-0242af401093907f6f2bf49d90c1e5d1e23b4453.tar.bz2
RISC-V: Improve linker error for FP mismatch.
bfd/ * elfnn-riscv.c (riscv_float_abi_string): New. (_bfd_riscv_elf_merge_private_bfd_data): Use it for error message.
Diffstat (limited to 'bfd/elfnn-riscv.c')
-rw-r--r--bfd/elfnn-riscv.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c
index 5cde72f..a3599d73 100644
--- a/bfd/elfnn-riscv.c
+++ b/bfd/elfnn-riscv.c
@@ -2638,6 +2638,31 @@ riscv_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
}
}
+/* Given the ELF header flags in FLAGS, it returns a string that describes the
+ float ABI. */
+
+static const char *
+riscv_float_abi_string (flagword flags)
+{
+ switch (flags & EF_RISCV_FLOAT_ABI)
+ {
+ case EF_RISCV_FLOAT_ABI_SOFT:
+ return "soft-float";
+ break;
+ case EF_RISCV_FLOAT_ABI_SINGLE:
+ return "single-float";
+ break;
+ case EF_RISCV_FLOAT_ABI_DOUBLE:
+ return "double-float";
+ break;
+ case EF_RISCV_FLOAT_ABI_QUAD:
+ return "quad-float";
+ break;
+ default:
+ abort ();
+ }
+}
+
/* Merge backend specific data from an object file to the output
object file when linking. */
@@ -2674,7 +2699,9 @@ _bfd_riscv_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
if ((old_flags ^ new_flags) & EF_RISCV_FLOAT_ABI)
{
(*_bfd_error_handler)
- (_("%pB: can't link hard-float modules with soft-float modules"), ibfd);
+ (_("%pB: can't link %s modules with %s modules"), ibfd,
+ riscv_float_abi_string (new_flags),
+ riscv_float_abi_string (old_flags));
goto fail;
}