mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-23 03:29:47 +08:00
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:
@ -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>
|
2021-05-25 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* elf32-arn.c (struct elf_arm_obj_tdata): Add num_entries field.
|
* elf32-arn.c (struct elf_arm_obj_tdata): Add num_entries field.
|
||||||
|
@ -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.error_handler = _bfd_error_handler;
|
||||||
rpe_in.xlen = &xlen_in;
|
rpe_in.xlen = &xlen_in;
|
||||||
rpe_in.get_default_version = NULL;
|
rpe_in.get_default_version = NULL;
|
||||||
|
rpe_in.check_unknown_prefixed_ext = false;
|
||||||
|
|
||||||
rpe_out.subset_list = &out_subsets;
|
rpe_out.subset_list = &out_subsets;
|
||||||
rpe_out.error_handler = _bfd_error_handler;
|
rpe_out.error_handler = _bfd_error_handler;
|
||||||
rpe_out.xlen = &xlen_out;
|
rpe_out.xlen = &xlen_out;
|
||||||
rpe_out.get_default_version = NULL;
|
rpe_out.get_default_version = NULL;
|
||||||
|
rpe_out.check_unknown_prefixed_ext = false;
|
||||||
|
|
||||||
if (in_arch == NULL && out_arch == NULL)
|
if (in_arch == NULL && out_arch == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -1681,7 +1681,8 @@ riscv_parse_prefixed_ext (riscv_parse_subset_t *rps,
|
|||||||
and cannot simply be the prefixed name. */
|
and cannot simply be the prefixed name. */
|
||||||
|
|
||||||
/* Check that the extension name is well-formed. */
|
/* 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
|
rps->error_handler
|
||||||
(_("-march=%s: unknown prefixed ISA extension `%s'"),
|
(_("-march=%s: unknown prefixed ISA extension `%s'"),
|
||||||
|
@ -74,6 +74,7 @@ typedef struct
|
|||||||
void (*get_default_version) (const char *,
|
void (*get_default_version) (const char *,
|
||||||
int *,
|
int *,
|
||||||
int *);
|
int *);
|
||||||
|
bool check_unknown_prefixed_ext;
|
||||||
} riscv_parse_subset_t;
|
} riscv_parse_subset_t;
|
||||||
|
|
||||||
extern bool
|
extern bool
|
||||||
|
@ -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>
|
2021-05-25 Tamar Christina <tamar.christina@arm.com>
|
||||||
|
|
||||||
PR gas/25235
|
PR gas/25235
|
||||||
|
@ -410,6 +410,7 @@ riscv_set_arch (const char *s)
|
|||||||
rps.error_handler = as_bad;
|
rps.error_handler = as_bad;
|
||||||
rps.xlen = &xlen;
|
rps.xlen = &xlen;
|
||||||
rps.get_default_version = riscv_get_default_ext_version;
|
rps.get_default_version = riscv_get_default_ext_version;
|
||||||
|
rps.check_unknown_prefixed_ext = true;
|
||||||
|
|
||||||
if (s == NULL)
|
if (s == NULL)
|
||||||
return;
|
return;
|
||||||
|
Reference in New Issue
Block a user