]>
Commit | Line | Data |
---|---|---|
1d3be038 | 1 | /* Machine-specific declarations for dynamic linker interface. PowerPC version |
2b778ceb | 2 | Copyright (C) 2004-2021 Free Software Foundation, Inc. |
82221992 UD |
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 | |
59ba27a6 | 16 | License along with the GNU C Library; if not, see |
5a82c748 | 17 | <https://www.gnu.org/licenses/>. */ |
82221992 UD |
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 | ||
2413fdba UD |
26 | /* Registers for entry into PLT on PPC32. */ |
27 | typedef struct La_ppc32_regs | |
28 | { | |
70cd1f97 | 29 | uint32_t lr_reg[8]; |
2413fdba UD |
30 | double lr_fp[8]; |
31 | uint32_t lr_vreg[12][4]; | |
70cd1f97 UD |
32 | uint32_t lr_r1; |
33 | uint32_t lr_lr; | |
2413fdba UD |
34 | } La_ppc32_regs; |
35 | ||
36 | /* Return values for calls from PLT on PPC32. */ | |
37 | typedef struct La_ppc32_retval | |
38 | { | |
70cd1f97 UD |
39 | uint32_t lrv_r3; |
40 | uint32_t lrv_r4; | |
2413fdba UD |
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, | |
d82a27f8 | 62 | const char *__symname); |
2413fdba UD |
63 | |
64 | __END_DECLS | |
82221992 | 65 | |
3f17b03b AZ |
66 | #elif __ELF_NATIVE_CLASS == 64 |
67 | # if _CALL_ELF != 2 | |
82221992 | 68 | |
2413fdba | 69 | /* Registers for entry into PLT on PPC64. */ |
82221992 UD |
70 | typedef struct La_ppc64_regs |
71 | { | |
72 | uint64_t lr_reg[8]; | |
73 | double lr_fp[13]; | |
bb4bb82b UD |
74 | uint32_t __padding; |
75 | uint32_t lr_vrsave; | |
82221992 UD |
76 | uint32_t lr_vreg[12][4]; |
77 | uint64_t lr_r1; | |
78 | uint64_t lr_lr; | |
79 | } La_ppc64_regs; | |
80 | ||
2413fdba | 81 | /* Return values for calls from PLT on PPC64. */ |
82221992 UD |
82 | typedef struct La_ppc64_retval |
83 | { | |
84 | uint64_t lrv_r3; | |
85 | uint64_t lrv_r4; | |
bb4bb82b | 86 | double lrv_fp[4]; /* f1-f4, float - complex long double. */ |
9c84384c | 87 | uint32_t lrv_v2[4]; /* v2. */ |
82221992 UD |
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, | |
d82a27f8 | 107 | const char *__symname); |
82221992 UD |
108 | |
109 | __END_DECLS | |
110 | ||
3f17b03b | 111 | # else |
61cd8fe4 UW |
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 | ||
3f17b03b | 155 | # endif |
82221992 | 156 | #endif |