Blame nptl/tst-audit-threads-mod1.c

Packit Service f7a43a
/* Dummy audit library for test-audit-threads.
Packit Service f7a43a
Packit Service f7a43a
   Copyright (C) 2018 Free Software Foundation, Inc.
Packit Service f7a43a
   This file is part of the GNU C Library.
Packit Service f7a43a
Packit Service f7a43a
   The GNU C Library is free software; you can redistribute it and/or
Packit Service f7a43a
   modify it under the terms of the GNU Lesser General Public
Packit Service f7a43a
   License as published by the Free Software Foundation; either
Packit Service f7a43a
   version 2.1 of the License, or (at your option) any later version.
Packit Service f7a43a
Packit Service f7a43a
   The GNU C Library is distributed in the hope that it will be useful,
Packit Service f7a43a
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service f7a43a
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service f7a43a
   Lesser General Public License for more details.
Packit Service f7a43a
Packit Service f7a43a
   You should have received a copy of the GNU Lesser General Public
Packit Service f7a43a
   License along with the GNU C Library; if not, see
Packit Service f7a43a
   <http://www.gnu.org/licenses/>.  */
Packit Service f7a43a
Packit Service f7a43a
#include <elf.h>
Packit Service f7a43a
#include <link.h>
Packit Service f7a43a
#include <stdio.h>
Packit Service f7a43a
#include <assert.h>
Packit Service f7a43a
#include <string.h>
Packit Service f7a43a
Packit Service f7a43a
/* We must use a dummy LD_AUDIT module to force the dynamic loader to
Packit Service f7a43a
   *not* update the real PLT, and instead use a cached value for the
Packit Service f7a43a
   lazy resolution result.  It is the update of that cached value that
Packit Service f7a43a
   we are testing for correctness by doing this.  */
Packit Service f7a43a
Packit Service f7a43a
/* Library to be audited.  */
Packit Service f7a43a
#define LIB "tst-audit-threads-mod2.so"
Packit Service f7a43a
/* CALLNUM is the number of retNum functions.  */
Packit Service f7a43a
#define CALLNUM 7999
Packit Service f7a43a
Packit Service f7a43a
#define CONCATX(a, b) __CONCAT (a, b)
Packit Service f7a43a
Packit Service f7a43a
static int previous = 0;
Packit Service f7a43a
Packit Service f7a43a
unsigned int
Packit Service f7a43a
la_version (unsigned int ver)
Packit Service f7a43a
{
Packit Service f7a43a
  return 1;
Packit Service f7a43a
}
Packit Service f7a43a
Packit Service f7a43a
unsigned int
Packit Service f7a43a
la_objopen (struct link_map *map, Lmid_t lmid, uintptr_t *cookie)
Packit Service f7a43a
{
Packit Service f7a43a
  return LA_FLG_BINDTO | LA_FLG_BINDFROM;
Packit Service f7a43a
}
Packit Service f7a43a
Packit Service f7a43a
uintptr_t
Packit Service f7a43a
CONCATX(la_symbind, __ELF_NATIVE_CLASS) (ElfW(Sym) *sym,
Packit Service f7a43a
					unsigned int ndx,
Packit Service f7a43a
					uintptr_t *refcook,
Packit Service f7a43a
					uintptr_t *defcook,
Packit Service f7a43a
					unsigned int *flags,
Packit Service f7a43a
					const char *symname)
Packit Service f7a43a
{
Packit Service f7a43a
  const char * retnum = "retNum";
Packit Service f7a43a
  char * num = strstr (symname, retnum);
Packit Service f7a43a
  int n;
Packit Service f7a43a
  /* Validate if the symbols are getting called in the correct order.
Packit Service f7a43a
     This code is here to verify binutils does not optimize out the PLT
Packit Service f7a43a
     entries that require the symbol binding.  */
Packit Service f7a43a
  if (num != NULL)
Packit Service f7a43a
    {
Packit Service f7a43a
      n = atoi (num);
Packit Service f7a43a
      assert (n >= previous);
Packit Service f7a43a
      assert (n <= CALLNUM);
Packit Service f7a43a
      previous = n;
Packit Service f7a43a
    }
Packit Service f7a43a
  return sym->st_value;
Packit Service f7a43a
}