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.
This commit is contained in:
Jim Wilson 2018-11-13 15:50:38 -08:00
parent 97b3f39201
commit 0242af4010
2 changed files with 33 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2018-11-13 Jim Wilson <jimw@sifive.com>
* 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 <bwiedemann@suse.de>
* peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Correct comment

View File

@ -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;
}