(root)/
glibc-2.38/
sysdeps/
unix/
sysv/
linux/
tst-getauxval.c
       1  /* Basic test for getauxval.
       2     Copyright (C) 2022-2023 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  
      24  static int missing;
      25  static int mismatch;
      26  
      27  static void
      28  check_nonzero (unsigned long t, const char *s)
      29  {
      30    unsigned long v = getauxval (t);
      31    printf ("%s: %lu (0x%lx)\n", s, v, v);
      32    if (v == 0)
      33      missing++;
      34  }
      35  
      36  static void
      37  check_eq (unsigned long t, const char *s, unsigned long want)
      38  {
      39    unsigned long v = getauxval (t);
      40    printf ("%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  
      48  static int
      49  do_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>