@@ -85,14 +85,14 @@ static void check_base(void)
report_prefix_push("spec_version");
if (env_or_skip("SPEC_VERSION")) {
- expected = strtol(getenv("SPEC_VERSION"), NULL, 0);
+ expected = (long)strtoul(getenv("SPEC_VERSION"), NULL, 0);
gen_report(&ret, 0, expected);
}
report_prefix_pop();
report_prefix_push("impl_id");
if (env_or_skip("IMPL_ID")) {
- expected = strtol(getenv("IMPL_ID"), NULL, 0);
+ expected = (long)strtoul(getenv("IMPL_ID"), NULL, 0);
ret = __base_sbi_ecall(SBI_EXT_BASE_GET_IMP_ID, 0);
gen_report(&ret, 0, expected);
}
@@ -100,14 +100,14 @@ static void check_base(void)
report_prefix_push("impl_version");
if (env_or_skip("IMPL_VERSION")) {
- expected = strtol(getenv("IMPL_VERSION"), NULL, 0);
+ expected = (long)strtoul(getenv("IMPL_VERSION"), NULL, 0);
ret = __base_sbi_ecall(SBI_EXT_BASE_GET_IMP_VERSION, 0);
gen_report(&ret, 0, expected);
}
report_prefix_pop();
report_prefix_push("probe_ext");
- expected = getenv("PROBE_EXT") ? strtol(getenv("PROBE_EXT"), NULL, 0) : 1;
+ expected = getenv("PROBE_EXT") ? (long)strtoul(getenv("PROBE_EXT"), NULL, 0) : 1;
ret = __base_sbi_ecall(SBI_EXT_BASE_PROBE_EXT, SBI_EXT_BASE);
gen_report(&ret, 0, expected);
report_prefix_push("unavailable");
@@ -118,7 +118,8 @@ static void check_base(void)
report_prefix_push("mvendorid");
if (env_or_skip("MVENDORID")) {
- expected = strtol(getenv("MVENDORID"), NULL, 0);
+ expected = (long)strtoul(getenv("MVENDORID"), NULL, 0);
+ assert(__riscv_xlen == 32 || !(expected >> 32));
ret = __base_sbi_ecall(SBI_EXT_BASE_GET_MVENDORID, 0);
gen_report(&ret, 0, expected);
}
@@ -126,7 +127,7 @@ static void check_base(void)
report_prefix_push("marchid");
if (env_or_skip("MARCHID")) {
- expected = strtol(getenv("MARCHID"), NULL, 0);
+ expected = (long)strtoul(getenv("MARCHID"), NULL, 0);
ret = __base_sbi_ecall(SBI_EXT_BASE_GET_MARCHID, 0);
gen_report(&ret, 0, expected);
}
@@ -134,7 +135,7 @@ static void check_base(void)
report_prefix_push("mimpid");
if (env_or_skip("MIMPID")) {
- expected = strtol(getenv("MIMPID"), NULL, 0);
+ expected = (long)strtoul(getenv("MIMPID"), NULL, 0);
ret = __base_sbi_ecall(SBI_EXT_BASE_GET_MIMPID, 0);
gen_report(&ret, 0, expected);
}
We want to compare the expected values provided by environment variables with signed long results, but we should parse those values as unsigned as they may actually represent unsigned numbers with the MSB set, and, if that's the case, then strtol will assert when detecting the signed value overflow. Signed-off-by: Andrew Jones <andrew.jones@linux.dev> --- riscv/sbi.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-)