diff --git a/sys/riscv/riscv/identcpu.c b/sys/riscv/riscv/identcpu.c --- a/sys/riscv/riscv/identcpu.c +++ b/sys/riscv/riscv/identcpu.c @@ -142,7 +142,7 @@ fill_elf_hwcap(void *dummy __unused) { u_long caps[256] = {0}; - char isa[ISA_NAME_MAXLEN]; + char *isa; u_long hwcap; phandle_t node; ssize_t len; @@ -175,8 +175,7 @@ if (!ofw_bus_node_is_compatible(node, "riscv")) continue; - len = OF_getprop(node, "riscv,isa", isa, sizeof(isa)); - KASSERT(len <= ISA_NAME_MAXLEN, ("ISA string truncated")); + len = OF_getprop_alloc(node, "riscv,isa", (void **)&isa); if (len == -1) { if (bootverbose) printf("fill_elf_hwcap: " @@ -190,8 +189,9 @@ } hwcap = 0; - for (i = ISA_PREFIX_LEN; i < len; i++) + for (i = ISA_PREFIX_LEN; i < len && isa[i] != '_'; i++) hwcap |= caps[(unsigned char)isa[i]]; + OF_prop_free(isa); if (elf_hwcap != 0) elf_hwcap &= hwcap;