1/* Copyright (C) 2005-2025 Free Software Foundation, Inc.
  2   This file is part of the GNU C Library.
  3
  4   The GNU C Library is free software; you can redistribute it and/or
  5   modify it under the terms of the GNU Lesser General Public
  6   License as published by the Free Software Foundation; either
  7   version 2.1 of the License, or (at your option) any later version.
  8
  9   The GNU C Library is distributed in the hope that it will be useful,
 10   but WITHOUT ANY WARRANTY; without even the implied warranty of
 11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 12   Lesser General Public License for more details.
 13
 14   You should have received a copy of the GNU Lesser General Public
 15   License along with the GNU C Library; if not, see
 16   <https://www.gnu.org/licenses/>.  */
 17
 18#ifndef	_LINK_H
 19# error "Never include <bits/link.h> directly; use <link.h> instead."
 20#endif
 21
 22#if defined HAVE_S390_VX_ASM_SUPPORT
 23typedef char La_s390_vr[16];
 24#endif
 25
 26#if __ELF_NATIVE_CLASS == 32
 27
 28/* Registers for entry into PLT on s390-32.  */
 29typedef struct La_s390_32_regs
 30{
 31  uint32_t lr_r2;
 32  uint32_t lr_r3;
 33  uint32_t lr_r4;
 34  uint32_t lr_r5;
 35  uint32_t lr_r6;
 36  double lr_fp0;
 37  double lr_fp2;
 38# if defined HAVE_S390_VX_ASM_SUPPORT
 39  La_s390_vr lr_v24;
 40  La_s390_vr lr_v25;
 41  La_s390_vr lr_v26;
 42  La_s390_vr lr_v27;
 43  La_s390_vr lr_v28;
 44  La_s390_vr lr_v29;
 45  La_s390_vr lr_v30;
 46  La_s390_vr lr_v31;
 47# endif
 48} La_s390_32_regs;
 49
 50/* Return values for calls from PLT on s390-32.  */
 51typedef struct La_s390_32_retval
 52{
 53  uint32_t lrv_r2;
 54  uint32_t lrv_r3;
 55  double lrv_fp0;
 56# if defined HAVE_S390_VX_ASM_SUPPORT
 57  La_s390_vr lrv_v24;
 58# endif
 59} La_s390_32_retval;
 60
 61
 62__BEGIN_DECLS
 63
 64extern Elf32_Addr la_s390_32_gnu_pltenter (Elf32_Sym *__sym,
 65					   unsigned int __ndx,
 66					   uintptr_t *__refcook,
 67					   uintptr_t *__defcook,
 68					   La_s390_32_regs *__regs,
 69					   unsigned int *__flags,
 70					   const char *__symname,
 71					   long int *__framesizep);
 72extern unsigned int la_s390_32_gnu_pltexit (Elf32_Sym *__sym,
 73					    unsigned int __ndx,
 74					    uintptr_t *__refcook,
 75					    uintptr_t *__defcook,
 76					    const La_s390_32_regs *__inregs,
 77					    La_s390_32_retval *__outregs,
 78					    const char *symname);
 79
 80__END_DECLS
 81
 82#else
 83
 84/* Registers for entry into PLT on s390-64.  */
 85typedef struct La_s390_64_regs
 86{
 87  uint64_t lr_r2;
 88  uint64_t lr_r3;
 89  uint64_t lr_r4;
 90  uint64_t lr_r5;
 91  uint64_t lr_r6;
 92  double lr_fp0;
 93  double lr_fp2;
 94  double lr_fp4;
 95  double lr_fp6;
 96# if defined HAVE_S390_VX_ASM_SUPPORT
 97  La_s390_vr lr_v24;
 98  La_s390_vr lr_v25;
 99  La_s390_vr lr_v26;
100  La_s390_vr lr_v27;
101  La_s390_vr lr_v28;
102  La_s390_vr lr_v29;
103  La_s390_vr lr_v30;
104  La_s390_vr lr_v31;
105# endif
106} La_s390_64_regs;
107
108/* Return values for calls from PLT on s390-64.  */
109typedef struct La_s390_64_retval
110{
111  uint64_t lrv_r2;
112  double lrv_fp0;
113# if defined HAVE_S390_VX_ASM_SUPPORT
114  La_s390_vr lrv_v24;
115# endif
116} La_s390_64_retval;
117
118
119__BEGIN_DECLS
120
121extern Elf64_Addr la_s390_64_gnu_pltenter (Elf64_Sym *__sym,
122					   unsigned int __ndx,
123					   uintptr_t *__refcook,
124					   uintptr_t *__defcook,
125					   La_s390_64_regs *__regs,
126					   unsigned int *__flags,
127					   const char *__symname,
128					   long int *__framesizep);
129extern unsigned int la_s390_64_gnu_pltexit (Elf64_Sym *__sym,
130					    unsigned int __ndx,
131					    uintptr_t *__refcook,
132					    uintptr_t *__defcook,
133					    const La_s390_64_regs *__inregs,
134					    La_s390_64_retval *__outregs,
135					    const char *__symname);
136
137__END_DECLS
138
139#endif