glibc/sysdeps/s390/ldsodefs.h
Stefan Liebler 41f67ccbe9 S390: Influence hwcaps/stfle via GLIBC_TUNABLES.
This patch enables the option to influence hwcaps and stfle bits used
by the s390 specific ifunc-resolvers.  The currently x86-specific
tunable glibc.cpu.hwcaps is also used on s390x to achieve the task. In
addition the user can also set a CPU arch-level like z13 instead of
single HWCAP and STFLE features.

Note that the tunable only handles the features which are really used
in the IFUNC-resolvers.  All others are ignored as the values are only
used inside glibc.  Thus we can influence:
- HWCAP_S390_VXRS (z13)
- HWCAP_S390_VXRS_EXT (z14)
- HWCAP_S390_VXRS_EXT2 (z15)
- STFLE_MIE3 (z15)

The influenced hwcap/stfle-bits are stored in the s390-specific
cpu_features struct which also contains reserved fields for future
usage.

The ifunc-resolvers and users of stfle bits are adjusted to use the
information from cpu_features struct.

On 31bit, the ELF_MACHINE_IRELATIVE macro is now also defined.
Otherwise the new ifunc-resolvers segfaults as they depend on
the not yet processed_rtld_global_ro@GLIBC_PRIVATE relocation.
2023-02-07 09:19:27 +01:00

59 lines
2.0 KiB
C

/* Run-time dynamic linker data structures for loaded ELF shared objects.
Copyright (C) 1995-2023 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#ifndef _S390_LDSODEFS_H
#define _S390_LDSODEFS_H 1
#include <elf.h>
#include <cpu-features.h>
struct La_s390_32_regs;
struct La_s390_32_retval;
struct La_s390_64_regs;
struct La_s390_64_retval;
#define ARCH_PLTENTER_MEMBERS \
Elf32_Addr (*s390_32_gnu_pltenter) (Elf32_Sym *, unsigned int, \
uintptr_t *, \
uintptr_t *, \
struct La_s390_32_regs *, \
unsigned int *, const char *name, \
long int *framesizep); \
Elf64_Addr (*s390_64_gnu_pltenter) (Elf64_Sym *, unsigned int, \
uintptr_t *, \
uintptr_t *, \
struct La_s390_64_regs *, \
unsigned int *, const char *name, \
long int *framesizep)
#define ARCH_PLTEXIT_MEMBERS \
unsigned int (*s390_32_gnu_pltexit) (Elf32_Sym *, unsigned int, \
uintptr_t *, uintptr_t *, \
const struct La_s390_32_regs *, \
struct La_s390_32_retval *, \
const char *); \
unsigned int (*s390_64_gnu_pltexit) (Elf64_Sym *, unsigned int, \
uintptr_t *, uintptr_t *, \
const struct La_s390_64_regs *, \
struct La_s390_64_retval *, \
const char *)
#include_next <ldsodefs.h>
#endif