diff options
| author | Brooks Davis <brooks@FreeBSD.org> | 2023-11-27 17:06:25 +0000 |
|---|---|---|
| committer | Brooks Davis <brooks@FreeBSD.org> | 2023-11-28 17:09:26 +0000 |
| commit | ea180bb3797ed4e976adccfba7d09c154d3244d1 (patch) | |
| tree | 80e7e0f1149c1bbc7ae0c9ecfaf96d362f89513a | |
| parent | df65c89375e242bf53e6c5b7614ab898104f71b7 (diff) | |
getpagesize(3): drop support for non-ELF kernels
AT_PAGESZ was introduced with ELF support in 1996 (commit
e1743d02cd14069f69a50bb8a6c626c1c6f47ddd) so we can safely count on
being able to use it to get our page size via elf_aux_info(). As such
we don't need a fallback sysctl query.
Save a few bytes of bss by dropping caching as elf_aux_info() runs
in constant time for a given query.
Reviewed by: kevans, imp, emaste
Sponsored by: DARPA
Differential Revision: https://reviews.freebsd.org/D42708
| -rw-r--r-- | lib/libc/gen/getpagesize.c | 28 |
1 files changed, 4 insertions, 24 deletions
diff --git a/lib/libc/gen/getpagesize.c b/lib/libc/gen/getpagesize.c index 5fe9a965385f..23d2c6ea5eda 100644 --- a/lib/libc/gen/getpagesize.c +++ b/lib/libc/gen/getpagesize.c @@ -30,18 +30,11 @@ */ #include <sys/param.h> -#include <sys/sysctl.h> - -#include <errno.h> -#include <link.h> -#include <unistd.h> +#include <sys/auxv.h> #include "libc_private.h" /* - * This is unlikely to change over the running time of any - * program, so we cache the result to save some syscalls. - * * NB: This function may be called from malloc(3) at initialization * NB: so must not result in a malloc(3) related call! */ @@ -49,23 +42,10 @@ int getpagesize(void) { - int mib[2]; - static int value; - size_t size; - int error; - - if (value != 0) - return (value); - - error = _elf_aux_info(AT_PAGESZ, &value, sizeof(value)); - if (error == 0 && value != 0) - return (value); + int value; - mib[0] = CTL_HW; - mib[1] = HW_PAGESIZE; - size = sizeof value; - if (sysctl(mib, nitems(mib), &value, &size, NULL, 0) == -1) - return (PAGE_SIZE); + if (_elf_aux_info(AT_PAGESZ, &value, sizeof(value)) != 0) + value = PAGE_SIZE; return (value); } |
