mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-09 04:21:49 +08:00
RISC-V: Allow nested implications for extensions
Certain extensions require two levels of implications. For example, zvkng implies zvkn and zvkn implies zvkned. Enabling zvkng should also enable zvkned. This patch fixes this behavior. bfd/ChangeLog: * elfxx-riscv.c (riscv_parse_add_implicit_subsets): Allow nested implications for extensions. Signed-off-by: Nathan Huckleberry <nhuck@google.com> Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu>
This commit is contained in:
parent
c62d5acf84
commit
48558a5e54
@ -1873,14 +1873,29 @@ static void
|
||||
riscv_parse_add_implicit_subsets (riscv_parse_subset_t *rps)
|
||||
{
|
||||
struct riscv_implicit_subset *t = riscv_implicit_subsets;
|
||||
for (; t->subset_name; t++)
|
||||
bool finished = false;
|
||||
while (!finished)
|
||||
{
|
||||
riscv_subset_t *subset = NULL;
|
||||
if (riscv_lookup_subset (rps->subset_list, t->subset_name, &subset)
|
||||
&& t->check_func (t->implicit_name, subset))
|
||||
riscv_parse_add_subset (rps, t->implicit_name,
|
||||
RISCV_UNKNOWN_VERSION,
|
||||
RISCV_UNKNOWN_VERSION, true);
|
||||
finished = true;
|
||||
for (; t->subset_name; t++)
|
||||
{
|
||||
riscv_subset_t *subset = NULL;
|
||||
riscv_subset_t *implicit_subset = NULL;
|
||||
if (riscv_lookup_subset (rps->subset_list, t->subset_name, &subset)
|
||||
&& !riscv_lookup_subset (rps->subset_list, t->implicit_name,
|
||||
&implicit_subset)
|
||||
&& t->check_func (t->implicit_name, subset))
|
||||
{
|
||||
riscv_parse_add_subset (rps, t->implicit_name,
|
||||
RISCV_UNKNOWN_VERSION,
|
||||
RISCV_UNKNOWN_VERSION, true);
|
||||
|
||||
/* Restart the loop and pick up any new implications. */
|
||||
finished = false;
|
||||
t = riscv_implicit_subsets;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user