aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrooks Davis <brooks@FreeBSD.org>2023-11-27 17:06:25 +0000
committerBrooks Davis <brooks@FreeBSD.org>2023-11-28 17:09:26 +0000
commitea180bb3797ed4e976adccfba7d09c154d3244d1 (patch)
tree80e7e0f1149c1bbc7ae0c9ecfaf96d362f89513a
parentdf65c89375e242bf53e6c5b7614ab898104f71b7 (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.c28
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);
}