chiark / gitweb /
eglibc (2.11.3-4+deb6u3) squeeze-lts; urgency=medium
[eglibc.git] / sysdeps / powerpc / bits / link.h
1 /* Machine-specific declarations for dynamic linker interface.  PowerPC version
2    Copyright (C) 2004, 2005, 2009 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, write to the Free
17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18    02111-1307 USA.  */
19
20 #ifndef _LINK_H
21 # error "Never include <bits/link.h> directly; use <link.h> instead."
22 #endif
23
24
25 #if __ELF_NATIVE_CLASS == 32
26
27 /* Registers for entry into PLT on PPC32.  */
28 typedef struct La_ppc32_regs
29 {
30   uint32_t lr_reg[8];
31   double lr_fp[8];
32   uint32_t lr_vreg[12][4];
33   uint32_t lr_r1;
34   uint32_t lr_lr;
35 } La_ppc32_regs;
36
37 /* Return values for calls from PLT on PPC32.  */
38 typedef struct La_ppc32_retval
39 {
40   uint32_t lrv_r3;
41   uint32_t lrv_r4;
42   double lrv_fp[8];
43   uint32_t lrv_v2[4];
44 } La_ppc32_retval;
45
46
47 __BEGIN_DECLS
48
49 extern Elf32_Addr la_ppc32_gnu_pltenter (Elf32_Sym *__sym,
50                                          unsigned int __ndx,
51                                          uintptr_t *__refcook,
52                                          uintptr_t *__defcook,
53                                          La_ppc32_regs *__regs,
54                                          unsigned int *__flags,
55                                          const char *__symname,
56                                          long int *__framesizep);
57 extern unsigned int la_ppc32_gnu_pltexit (Elf32_Sym *__sym,
58                                           unsigned int __ndx,
59                                           uintptr_t *__refcook,
60                                           uintptr_t *__defcook,
61                                           const La_ppc32_regs *__inregs,
62                                           La_ppc32_retval *__outregs,
63                                           const char *__symname);
64
65 __END_DECLS
66
67 #else
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 #endif