nolibc/sys: Implement `getpagesize(2)` function
authorAmmar Faizi <ammarfaizi2@gnuweeb.org>
Tue, 10 Jan 2023 07:24:33 +0000 (08:24 +0100)
committerPaul E. McKenney <paulmck@kernel.org>
Tue, 10 Jan 2023 21:33:56 +0000 (13:33 -0800)
This function returns the page size used by the running kernel. The
page size value is taken from the auxiliary vector at 'AT_PAGESZ' key.

'getpagesize(2)' is assumed as a syscall becuase the manpage placement
of this function is in entry 2 ('man 2 getpagesize') despite there is
no real 'getpagesize(2)' syscall in the Linux syscall table. Define
this function in 'sys.h'.

Signed-off-by: Ammar Faizi <ammarfaizi2@gnuweeb.org>
Signed-off-by: Willy Tarreau <w@1wt.eu>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
tools/include/nolibc/sys.h

index 47bf67668860a7dde987566637f6181ac0a716c5..b5f8cd35c03be1dc42828f3ea422d47c3fbb94af 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/fs.h>
 #include <linux/loop.h>
 #include <linux/time.h>
+#include <linux/auxvec.h>
 
 #include "arch.h"
 #include "errno.h"
@@ -499,6 +500,26 @@ pid_t gettid(void)
        return sys_gettid();
 }
 
+static unsigned long getauxval(unsigned long key);
+
+/*
+ * long getpagesize(void);
+ */
+
+static __attribute__((unused))
+long getpagesize(void)
+{
+       long ret;
+
+       ret = getauxval(AT_PAGESZ);
+       if (!ret) {
+               SET_ERRNO(ENOENT);
+               return -1;
+       }
+
+       return ret;
+}
+
 
 /*
  * int gettimeofday(struct timeval *tv, struct timezone *tz);