Blame elf/tst-auditmanymod.h

Packit Service 89df9a
/* Check cookie initialization for many auditors.  Auditor template.
Packit Service 89df9a
   Copyright (C) 2019 Free Software Foundation, Inc.
Packit Service 89df9a
   This file is part of the GNU C Library.
Packit Service 89df9a
Packit Service 89df9a
   The GNU C Library is free software; you can redistribute it and/or
Packit Service 89df9a
   modify it under the terms of the GNU Lesser General Public
Packit Service 89df9a
   License as published by the Free Software Foundation; either
Packit Service 89df9a
   version 2.1 of the License, or (at your option) any later version.
Packit Service 89df9a
Packit Service 89df9a
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service 89df9a
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 89df9a
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 89df9a
   Lesser General Public License for more details.
Packit Service 89df9a
Packit Service 89df9a
   You should have received a copy of the GNU Lesser General Public
Packit Service 89df9a
   License along with the GNU C Library; if not, see
Packit Service 89df9a
   <https://www.gnu.org/licenses/>.  */
Packit Service 89df9a
Packit Service 89df9a
/* The macro MOD must be defined to the number of this auditor (an
Packit Service 89df9a
   integer) before including this file.  */
Packit Service 89df9a
Packit Service 89df9a
#include <link.h>
Packit Service 89df9a
#include <stdio.h>
Packit Service 89df9a
#include <unistd.h>
Packit Service 89df9a
Packit Service 89df9a
/* Error counter for delayed error reporting.  */
Packit Service 89df9a
static int errors;
Packit Service 89df9a
Packit Service 89df9a
unsigned int
Packit Service 89df9a
la_version (unsigned int version)
Packit Service 89df9a
{
Packit Service 89df9a
  return version;
Packit Service 89df9a
}
Packit Service 89df9a
Packit Service 89df9a
unsigned int
Packit Service 89df9a
la_objopen (struct link_map *map, Lmid_t lmid,
Packit Service 89df9a
            uintptr_t *cookie)
Packit Service 89df9a
{
Packit Service 89df9a
  struct link_map *cookie_map = (struct link_map *) *cookie;
Packit Service 89df9a
  printf ("info: %d, la_objopen: map=%p name=%s cookie=%p:%p diff=%td\n",
Packit Service 89df9a
          MOD, map, map->l_name, cookie, cookie_map,
Packit Service 89df9a
          (char *) cookie - (char *) map);
Packit Service 89df9a
  fflush (stdout);
Packit Service 89df9a
  if (map != cookie_map)
Packit Service 89df9a
    {
Packit Service 89df9a
      printf ("error: %d, la_objopen:"
Packit Service 89df9a
              " map address does not match cookie value\n",
Packit Service 89df9a
              MOD);
Packit Service 89df9a
      fflush (stdout);
Packit Service 89df9a
      ++errors;
Packit Service 89df9a
    }
Packit Service 89df9a
  return 0;
Packit Service 89df9a
}
Packit Service 89df9a
Packit Service 89df9a
extern unsigned int
Packit Service 89df9a
la_objclose (uintptr_t *__cookie)
Packit Service 89df9a
{
Packit Service 89df9a
  if (errors != 0)
Packit Service 89df9a
    {
Packit Service 89df9a
      printf ("error: exiting due to previous errors");
Packit Service 89df9a
      _exit (1);
Packit Service 89df9a
    }
Packit Service 89df9a
  return 0;
Packit Service 89df9a
}