util/getauxval: Ensure setting errno if not found

Sometimes zero is a valid value for getauxval (e.g. AT_EXECFD). Make
sure that we can distinguish between a valid zero value and a not found
entry by setting errno.

Assumes that getauxval from sys/auxv.h sets errno correctly.

Signed-off-by: Vivian Wang <uwu@dram.page>
Message-ID: <20240723100545.405476-2-uwu@dram.page>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Vivian Wang 2024-07-23 18:05:44 +08:00 committed by Richard Henderson
parent 83340193b9
commit 22531d8cc5
1 changed files with 6 additions and 1 deletions

View File

@ -95,6 +95,7 @@ unsigned long qemu_getauxval(unsigned long type)
}
}
errno = ENOENT;
return 0;
}
@ -104,7 +105,10 @@ unsigned long qemu_getauxval(unsigned long type)
unsigned long qemu_getauxval(unsigned long type)
{
unsigned long aux = 0;
elf_aux_info(type, &aux, sizeof(aux));
int ret = elf_aux_info(type, &aux, sizeof(aux));
if (ret != 0) {
errno = ret;
}
return aux;
}
@ -112,6 +116,7 @@ unsigned long qemu_getauxval(unsigned long type)
unsigned long qemu_getauxval(unsigned long type)
{
errno = ENOSYS;
return 0;
}