(root)/
glibc-2.38/
sysdeps/
powerpc/
bits/
link.h
       1  /* Machine-specific declarations for dynamic linker interface.  PowerPC version
       2     Copyright (C) 2004-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #ifndef	_LINK_H
      20  # error "Never include <bits/link.h> directly; use <link.h> instead."
      21  #endif
      22  
      23  
      24  #if __ELF_NATIVE_CLASS == 32
      25  
      26  /* Registers for entry into PLT on PPC32.  */
      27  typedef struct La_ppc32_regs
      28  {
      29    uint32_t lr_reg[8];
      30    double lr_fp[8];
      31    uint32_t lr_vreg[12][4];
      32    uint32_t lr_r1;
      33    uint32_t lr_lr;
      34  } La_ppc32_regs;
      35  
      36  /* Return values for calls from PLT on PPC32.  */
      37  typedef struct La_ppc32_retval
      38  {
      39    uint32_t lrv_r3;
      40    uint32_t lrv_r4;
      41    double lrv_fp[8];
      42    uint32_t lrv_v2[4];
      43  } La_ppc32_retval;
      44  
      45  
      46  __BEGIN_DECLS
      47  
      48  extern Elf32_Addr la_ppc32_gnu_pltenter (Elf32_Sym *__sym,
      49  					 unsigned int __ndx,
      50  					 uintptr_t *__refcook,
      51  					 uintptr_t *__defcook,
      52  					 La_ppc32_regs *__regs,
      53  					 unsigned int *__flags,
      54  					 const char *__symname,
      55  					 long int *__framesizep);
      56  extern unsigned int la_ppc32_gnu_pltexit (Elf32_Sym *__sym,
      57  					  unsigned int __ndx,
      58  					  uintptr_t *__refcook,
      59  					  uintptr_t *__defcook,
      60  					  const La_ppc32_regs *__inregs,
      61  					  La_ppc32_retval *__outregs,
      62  					  const char *__symname);
      63  
      64  __END_DECLS
      65  
      66  #elif __ELF_NATIVE_CLASS == 64
      67  # if _CALL_ELF != 2
      68  
      69  /* Registers for entry into PLT on PPC64.  */
      70  typedef struct La_ppc64_regs
      71  {
      72    uint64_t lr_reg[8];
      73    double lr_fp[13];
      74    uint32_t __padding;
      75    uint32_t lr_vrsave;
      76    uint32_t lr_vreg[12][4];
      77    uint64_t lr_r1;
      78    uint64_t lr_lr;
      79  } La_ppc64_regs;
      80  
      81  /* Return values for calls from PLT on PPC64.  */
      82  typedef struct La_ppc64_retval
      83  {
      84    uint64_t lrv_r3;
      85    uint64_t lrv_r4;
      86    double lrv_fp[4];	/* f1-f4, float - complex long double.  */
      87    uint32_t lrv_v2[4];	/* v2.  */
      88  } La_ppc64_retval;
      89  
      90  
      91  __BEGIN_DECLS
      92  
      93  extern Elf64_Addr la_ppc64_gnu_pltenter (Elf64_Sym *__sym,
      94  					 unsigned int __ndx,
      95  					 uintptr_t *__refcook,
      96  					 uintptr_t *__defcook,
      97  					 La_ppc64_regs *__regs,
      98  					 unsigned int *__flags,
      99  					 const char *__symname,
     100  					 long int *__framesizep);
     101  extern unsigned int la_ppc64_gnu_pltexit (Elf64_Sym *__sym,
     102  					  unsigned int __ndx,
     103  					  uintptr_t *__refcook,
     104  					  uintptr_t *__defcook,
     105  					  const La_ppc64_regs *__inregs,
     106  					  La_ppc64_retval *__outregs,
     107  					  const char *__symname);
     108  
     109  __END_DECLS
     110  
     111  # else
     112  
     113  /* Registers for entry into PLT on PPC64 in the ELFv2 ABI.  */
     114  typedef struct La_ppc64v2_regs
     115  {
     116    uint64_t lr_reg[8];
     117    double lr_fp[13];
     118    uint32_t __padding;
     119    uint32_t lr_vrsave;
     120    uint32_t lr_vreg[12][4] __attribute__ ((aligned (16)));
     121    uint64_t lr_r1;
     122    uint64_t lr_lr;
     123  } La_ppc64v2_regs;
     124  
     125  /* Return values for calls from PLT on PPC64 in the ELFv2 ABI.  */
     126  typedef struct La_ppc64v2_retval
     127  {
     128    uint64_t lrv_r3;
     129    uint64_t lrv_r4;
     130    double lrv_fp[10];
     131    uint32_t lrv_vreg[8][4] __attribute__ ((aligned (16)));
     132  } La_ppc64v2_retval;
     133  
     134  
     135  __BEGIN_DECLS
     136  
     137  extern Elf64_Addr la_ppc64v2_gnu_pltenter (Elf64_Sym *__sym,
     138  					   unsigned int __ndx,
     139  					   uintptr_t *__refcook,
     140  					   uintptr_t *__defcook,
     141  					   La_ppc64v2_regs *__regs,
     142  					   unsigned int *__flags,
     143  					   const char *__symname,
     144  					   long int *__framesizep);
     145  extern unsigned int la_ppc64v2_gnu_pltexit (Elf64_Sym *__sym,
     146  					    unsigned int __ndx,
     147  					    uintptr_t *__refcook,
     148  					    uintptr_t *__defcook,
     149  					    const La_ppc64v2_regs *__inregs,
     150  					    La_ppc64v2_retval *__outregs,
     151  					    const char *__symname);
     152  
     153  __END_DECLS
     154  
     155  # endif
     156  #endif