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#include <sgidefs.h>
 23
 24#if _MIPS_SIM == _ABIO32
 25
 26/* Registers for entry into PLT on MIPS.  */
 27typedef struct La_mips_32_regs
 28{
 29  uint32_t lr_reg[4]; /* $a0 through $a3 */
 30  double lr_fpreg[2]; /* $f12 and $f14 */
 31  uint32_t lr_ra;
 32  uint32_t lr_sp;
 33} La_mips_32_regs;
 34
 35/* Return values for calls from PLT on MIPS.  */
 36typedef struct La_mips_32_retval
 37{
 38  uint32_t lrv_v0;
 39  uint32_t lrv_v1;
 40  double lrv_f0;
 41  double lrv_f2;
 42} La_mips_32_retval;
 43
 44#else
 45
 46typedef struct La_mips_64_regs
 47{
 48  uint64_t lr_reg[8]; /* $a0 through $a7 */
 49  double lr_fpreg[8]; /* $f12 through $f19 */
 50  uint64_t lr_ra;
 51  uint64_t lr_sp;
 52} La_mips_64_regs;
 53
 54/* Return values for calls from PLT on MIPS.  */
 55typedef struct La_mips_64_retval
 56{
 57  uint64_t lrv_v0;
 58  uint64_t lrv_v1;
 59  double lrv_f0;
 60  double lrv_f2;
 61} La_mips_64_retval;
 62
 63#endif
 64
 65__BEGIN_DECLS
 66
 67#if _MIPS_SIM == _ABIO32
 68
 69extern Elf32_Addr la_mips_o32_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx,
 70					    uintptr_t *__refcook,
 71					    uintptr_t *__defcook,
 72					    La_mips_32_regs *__regs,
 73					    unsigned int *__flags,
 74					    const char *__symname,
 75					    long int *__framesizep);
 76extern unsigned int la_mips_o32_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx,
 77					     uintptr_t *__refcook,
 78					     uintptr_t *__defcook,
 79					     const La_mips_32_regs *__inregs,
 80					     La_mips_32_retval *__outregs,
 81					     const char *__symname);
 82
 83#elif _MIPS_SIM == _ABIN32
 84
 85extern Elf32_Addr la_mips_n32_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx,
 86					    uintptr_t *__refcook,
 87					    uintptr_t *__defcook,
 88					    La_mips_64_regs *__regs,
 89					    unsigned int *__flags,
 90					    const char *__symname,
 91					    long int *__framesizep);
 92extern unsigned int la_mips_n32_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx,
 93					     uintptr_t *__refcook,
 94					     uintptr_t *__defcook,
 95					     const La_mips_64_regs *__inregs,
 96					     La_mips_64_retval *__outregs,
 97					     const char *__symname);
 98
 99#else
100
101extern Elf64_Addr la_mips_n64_gnu_pltenter (Elf64_Sym *__sym, unsigned int __ndx,
102					    uintptr_t *__refcook,
103					    uintptr_t *__defcook,
104					    La_mips_64_regs *__regs,
105					    unsigned int *__flags,
106					    const char *__symname,
107					    long int *__framesizep);
108extern unsigned int la_mips_n64_gnu_pltexit (Elf64_Sym *__sym, unsigned int __ndx,
109					     uintptr_t *__refcook,
110					     uintptr_t *__defcook,
111					     const La_mips_64_regs *__inregs,
112					     La_mips_64_retval *__outregs,
113					     const char *__symname);
114
115#endif
116
117__END_DECLS