aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrooks Davis <brooks@FreeBSD.org>2023-11-27 17:06:01 +0000
committerBrooks Davis <brooks@FreeBSD.org>2023-11-28 17:09:26 +0000
commitdf65c89375e242bf53e6c5b7614ab898104f71b7 (patch)
treeb4db2c51ffcc24dbc01669e8bd2b3ae2ab80d157
parent9f20787fe89e2a912a9e5dd2d3da56087722e8c2 (diff)
downloadsrc-df65c89375e242bf53e6c5b7614ab898104f71b7.tar.gz
src-df65c89375e242bf53e6c5b7614ab898104f71b7.zip
getpagesizes(3): drop support for kernels before 9.0
AT_PAGESIZES and elf_aux_info where added prior to FreeBSD 9.0 in commit ee235befcb8253fab9beea27b916f1bc46b33147. It's safe to say that a FreeBSD 15 libc won't work on a 8.x kernel so drop sysctl fallback. Reviewed by: kevans, imp, emaste Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D42707
-rw-r--r--lib/libc/gen/getpagesizes.c23
1 files changed, 7 insertions, 16 deletions
diff --git a/lib/libc/gen/getpagesizes.c b/lib/libc/gen/getpagesizes.c
index c9f7f2f29e16..7f481f84177a 100644
--- a/lib/libc/gen/getpagesizes.c
+++ b/lib/libc/gen/getpagesizes.c
@@ -27,11 +27,8 @@
*/
#include <sys/param.h>
-#include <sys/mman.h>
-#include <sys/sysctl.h>
-
-#include <errno.h>
-#include <link.h>
+#include <sys/auxv.h>
+#include <sys/errno.h>
#include "libc_private.h"
@@ -52,24 +49,18 @@ getpagesizes(size_t pagesize[], int nelem)
{
static u_long ps[MAXPAGESIZES];
static int nops;
- size_t size;
- int error, i;
+ int i;
if (nelem < 0 || (nelem > 0 && pagesize == NULL)) {
errno = EINVAL;
return (-1);
}
- /* Cache the result of the sysctl(2). */
+ /* Cache the result */
if (nops == 0) {
- error = _elf_aux_info(AT_PAGESIZES, ps, sizeof(ps));
- size = sizeof(ps);
- if (error != 0 || ps[0] == 0) {
- if (sysctlbyname("hw.pagesizes", ps, &size, NULL, 0)
- == -1)
- return (-1);
- }
+ if (_elf_aux_info(AT_PAGESIZES, ps, sizeof(ps)) != 0)
+ ps[0] = PAGE_SIZE;
/* Count the number of page sizes that are supported. */
- nops = size / sizeof(ps[0]);
+ nops = nitems(ps);
while (nops > 0 && ps[nops - 1] == 0)
nops--;
}