RISC-V: Allow to link the objects with unknown prefixed extensions.

Since the policies of GNU and llvm toolchain are different for now,
current binutils mainline cannot accept any draft extensions, including
rvv, zfh, ....  The Clang/LLVM allows these draft stuff on mainline,
but the GNU ld might be used with them, so this causes the link time
problems.

The patch allows ld to link the objects with unknown prefixed extensions,
which are probably generated by LLVM or customized toolchains.

bfd/
    * elfxx-riscv.h (check_unknown_prefixed_ext): New bool.
    * elfxx-riscv.c (riscv_parse_prefixed_ext): Do not check the
    prefixed extension name if check_unknown_prefixed_ext is false.
    * elfnn-riscv.c (riscv_merge_arch_attr_info): Set
    check_unknown_prefixed_ext to false for linker.
gas/
    * config/tc-riscv.c (riscv_set_arch): Set
    check_unknown_prefixed_ext to true for assembler.
This commit is contained in:
Nelson Chu 2021-05-26 10:34:13 +08:00
parent 9495896335
commit fe1f847d9a
6 changed files with 19 additions and 1 deletions

View File

@ -1,3 +1,11 @@
2021-05-26 Nelson Chu <nelson.chu@sifive.com>
* elfxx-riscv.h (check_unknown_prefixed_ext): New bool.
* elfxx-riscv.c (riscv_parse_prefixed_ext): Do not check the
prefixed extension name if check_unknown_prefixed_ext is false.
* elfnn-riscv.c (riscv_merge_arch_attr_info): Set
check_unknown_prefixed_ext to false for linker.
2021-05-25 Nick Clifton <nickc@redhat.com>
* elf32-arn.c (struct elf_arm_obj_tdata): Add num_entries field.

View File

@ -3558,11 +3558,13 @@ riscv_merge_arch_attr_info (bfd *ibfd, char *in_arch, char *out_arch)
rpe_in.error_handler = _bfd_error_handler;
rpe_in.xlen = &xlen_in;
rpe_in.get_default_version = NULL;
rpe_in.check_unknown_prefixed_ext = false;
rpe_out.subset_list = &out_subsets;
rpe_out.error_handler = _bfd_error_handler;
rpe_out.xlen = &xlen_out;
rpe_out.get_default_version = NULL;
rpe_out.check_unknown_prefixed_ext = false;
if (in_arch == NULL && out_arch == NULL)
return NULL;

View File

@ -1681,7 +1681,8 @@ riscv_parse_prefixed_ext (riscv_parse_subset_t *rps,
and cannot simply be the prefixed name. */
/* Check that the extension name is well-formed. */
if (!riscv_valid_prefixed_ext (subset))
if (rps->check_unknown_prefixed_ext
&& !riscv_valid_prefixed_ext (subset))
{
rps->error_handler
(_("-march=%s: unknown prefixed ISA extension `%s'"),

View File

@ -74,6 +74,7 @@ typedef struct
void (*get_default_version) (const char *,
int *,
int *);
bool check_unknown_prefixed_ext;
} riscv_parse_subset_t;
extern bool

View File

@ -1,3 +1,8 @@
2021-05-26 Nelson Chu <nelson.chu@sifive.com>
* config/tc-riscv.c (riscv_set_arch): Set
check_unknown_prefixed_ext to true for assembler.
2021-05-25 Tamar Christina <tamar.christina@arm.com>
PR gas/25235

View File

@ -410,6 +410,7 @@ riscv_set_arch (const char *s)
rps.error_handler = as_bad;
rps.xlen = &xlen;
rps.get_default_version = riscv_get_default_ext_version;
rps.check_unknown_prefixed_ext = true;
if (s == NULL)
return;