1/* Basic test for getauxval.
2 Copyright (C) 2022-2024 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
4
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <https://www.gnu.org/licenses/>. */
18
19#include <unistd.h>
20#include <stdio.h>
21#include <support/check.h>
22#include <sys/auxv.h>
23
24static int missing;
25static int mismatch;
26
27static void
28check_nonzero (unsigned long t, const char *s)
29{
30 unsigned long v = getauxval (type: t);
31 printf (format: "%s: %lu (0x%lx)\n", s, v, v);
32 if (v == 0)
33 missing++;
34}
35
36static void
37check_eq (unsigned long t, const char *s, unsigned long want)
38{
39 unsigned long v = getauxval (type: t);
40 printf (format: "%s: %lu want: %lu\n", s, v, want);
41 if (v != want)
42 mismatch++;
43}
44
45#define NZ(x) check_nonzero (x, #x)
46#define EQ(x, want) check_eq (x, #x, want)
47
48static int
49do_test (void)
50{
51 /* These auxv entries should be non-zero on Linux. */
52 NZ (AT_PHDR);
53 NZ (AT_PHENT);
54 NZ (AT_PHNUM);
55 NZ (AT_PAGESZ);
56 NZ (AT_ENTRY);
57 NZ (AT_CLKTCK);
58 NZ (AT_RANDOM);
59 NZ (AT_EXECFN);
60 if (missing)
61 FAIL_EXIT1 ("Found %d missing auxv entries.\n", missing);
62
63 /* Check against syscalls. */
64 EQ (AT_UID, getuid ());
65 EQ (AT_EUID, geteuid ());
66 EQ (AT_GID, getgid ());
67 EQ (AT_EGID, getegid ());
68 if (mismatch)
69 FAIL_EXIT1 ("Found %d mismatching auxv entries.\n", mismatch);
70
71 return 0;
72}
73
74#include <support/test-driver.c>
75

source code of glibc/sysdeps/unix/sysv/linux/tst-getauxval.c