Skip to content

Commit 48558a5

Browse files
nhukcJeff Law
authored andcommitted
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>
1 parent c62d5ac commit 48558a5

1 file changed

Lines changed: 22 additions & 7 deletions

File tree

bfd/elfxx-riscv.c

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1873,14 +1873,29 @@ static void
18731873
riscv_parse_add_implicit_subsets (riscv_parse_subset_t *rps)
18741874
{
18751875
struct riscv_implicit_subset *t = riscv_implicit_subsets;
1876-
for (; t->subset_name; t++)
1876+
bool finished = false;
1877+
while (!finished)
18771878
{
1878-
riscv_subset_t *subset = NULL;
1879-
if (riscv_lookup_subset (rps->subset_list, t->subset_name, &subset)
1880-
&& t->check_func (t->implicit_name, subset))
1881-
riscv_parse_add_subset (rps, t->implicit_name,
1882-
RISCV_UNKNOWN_VERSION,
1883-
RISCV_UNKNOWN_VERSION, true);
1879+
finished = true;
1880+
for (; t->subset_name; t++)
1881+
{
1882+
riscv_subset_t *subset = NULL;
1883+
riscv_subset_t *implicit_subset = NULL;
1884+
if (riscv_lookup_subset (rps->subset_list, t->subset_name, &subset)
1885+
&& !riscv_lookup_subset (rps->subset_list, t->implicit_name,
1886+
&implicit_subset)
1887+
&& t->check_func (t->implicit_name, subset))
1888+
{
1889+
riscv_parse_add_subset (rps, t->implicit_name,
1890+
RISCV_UNKNOWN_VERSION,
1891+
RISCV_UNKNOWN_VERSION, true);
1892+
1893+
/* Restart the loop and pick up any new implications. */
1894+
finished = false;
1895+
t = riscv_implicit_subsets;
1896+
break;
1897+
}
1898+
}
18841899
}
18851900
}
18861901

0 commit comments

Comments
 (0)