From 0242af401093907f6f2bf49d90c1e5d1e23b4453 Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Tue, 13 Nov 2018 15:50:38 -0800 Subject: [PATCH] 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. --- bfd/ChangeLog | 5 +++++ bfd/elfnn-riscv.c | 29 ++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 554ca27..ffde4c9 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2018-11-13 Jim Wilson + + * elfnn-riscv.c (riscv_float_abi_string): New. + (_bfd_riscv_elf_merge_private_bfd_data): Use it for error message. + 2018-11-09 Bernhard M. Wiedemann * peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Correct comment 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; } -- 2.7.4