1*4d9fdb46SRobert Mustacchi /*
2*4d9fdb46SRobert Mustacchi Copyright (c) 2019, David Anderson
3*4d9fdb46SRobert Mustacchi All rights reserved.
4*4d9fdb46SRobert Mustacchi cc
5*4d9fdb46SRobert Mustacchi Redistribution and use in source and binary forms, with
6*4d9fdb46SRobert Mustacchi or without modification, are permitted provided that the
7*4d9fdb46SRobert Mustacchi following conditions are met:
8*4d9fdb46SRobert Mustacchi 
9*4d9fdb46SRobert Mustacchi     Redistributions of source code must retain the above
10*4d9fdb46SRobert Mustacchi     copyright notice, this list of conditions and the following
11*4d9fdb46SRobert Mustacchi     disclaimer.
12*4d9fdb46SRobert Mustacchi 
13*4d9fdb46SRobert Mustacchi     Redistributions in binary form must reproduce the above
14*4d9fdb46SRobert Mustacchi     copyright notice, this list of conditions and the following
15*4d9fdb46SRobert Mustacchi     disclaimer in the documentation and/or other materials
16*4d9fdb46SRobert Mustacchi     provided with the distribution.
17*4d9fdb46SRobert Mustacchi 
18*4d9fdb46SRobert Mustacchi THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
19*4d9fdb46SRobert Mustacchi CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20*4d9fdb46SRobert Mustacchi INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21*4d9fdb46SRobert Mustacchi OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22*4d9fdb46SRobert Mustacchi ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23*4d9fdb46SRobert Mustacchi CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24*4d9fdb46SRobert Mustacchi SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25*4d9fdb46SRobert Mustacchi NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26*4d9fdb46SRobert Mustacchi LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27*4d9fdb46SRobert Mustacchi HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28*4d9fdb46SRobert Mustacchi CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29*4d9fdb46SRobert Mustacchi OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30*4d9fdb46SRobert Mustacchi EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31*4d9fdb46SRobert Mustacchi */
32*4d9fdb46SRobert Mustacchi 
33*4d9fdb46SRobert Mustacchi #include "config.h"
34*4d9fdb46SRobert Mustacchi #include <stdio.h>
35*4d9fdb46SRobert Mustacchi #include "dwarf_elf_defines.h"
36*4d9fdb46SRobert Mustacchi #include "dwarf_elf_rel_detector.h"
37*4d9fdb46SRobert Mustacchi 
38*4d9fdb46SRobert Mustacchi unsigned
_dwarf_is_32bit_abs_reloc(unsigned int type,unsigned machine)39*4d9fdb46SRobert Mustacchi _dwarf_is_32bit_abs_reloc(unsigned int type, unsigned machine)
40*4d9fdb46SRobert Mustacchi {
41*4d9fdb46SRobert Mustacchi     unsigned r = 0;
42*4d9fdb46SRobert Mustacchi 
43*4d9fdb46SRobert Mustacchi     switch (machine) {
44*4d9fdb46SRobert Mustacchi #if defined(EM_MIPS) && defined (R_MIPS_32)
45*4d9fdb46SRobert Mustacchi     case EM_MIPS:
46*4d9fdb46SRobert Mustacchi         r =  (0
47*4d9fdb46SRobert Mustacchi #if defined (R_MIPS_32)
48*4d9fdb46SRobert Mustacchi             | (type == R_MIPS_32)
49*4d9fdb46SRobert Mustacchi #endif
50*4d9fdb46SRobert Mustacchi #if defined (R_MIPS_TLS_DTPREL32)
51*4d9fdb46SRobert Mustacchi             | (type == R_MIPS_TLS_DTPREL32)
52*4d9fdb46SRobert Mustacchi #endif /* DTPREL32 */
53*4d9fdb46SRobert Mustacchi             );
54*4d9fdb46SRobert Mustacchi         break;
55*4d9fdb46SRobert Mustacchi #endif /* MIPS case */
56*4d9fdb46SRobert Mustacchi #if defined(EM_SPARC32PLUS)  && defined (R_SPARC_UA32)
57*4d9fdb46SRobert Mustacchi     case EM_SPARC32PLUS:
58*4d9fdb46SRobert Mustacchi         r = (0
59*4d9fdb46SRobert Mustacchi #if defined(R_SPARC_UA32)
60*4d9fdb46SRobert Mustacchi             | (type == R_SPARC_UA32)
61*4d9fdb46SRobert Mustacchi #endif
62*4d9fdb46SRobert Mustacchi #if defined(R_SPARC_TLS_DTPOFF32)
63*4d9fdb46SRobert Mustacchi             | (type == R_SPARC_TLS_DTPOFF32)
64*4d9fdb46SRobert Mustacchi #endif
65*4d9fdb46SRobert Mustacchi             );
66*4d9fdb46SRobert Mustacchi         break;
67*4d9fdb46SRobert Mustacchi #endif
68*4d9fdb46SRobert Mustacchi #if defined(EM_SPARCV9)  && defined (R_SPARC_UA32)
69*4d9fdb46SRobert Mustacchi     case EM_SPARCV9:
70*4d9fdb46SRobert Mustacchi         r =  (type == R_SPARC_UA32);
71*4d9fdb46SRobert Mustacchi         break;
72*4d9fdb46SRobert Mustacchi #endif
73*4d9fdb46SRobert Mustacchi #if defined(EM_SPARC) && defined (R_SPARC_UA32)
74*4d9fdb46SRobert Mustacchi     case EM_SPARC:
75*4d9fdb46SRobert Mustacchi         r =  (0
76*4d9fdb46SRobert Mustacchi #if defined(R_SPARC_UA32)
77*4d9fdb46SRobert Mustacchi             | (type == R_SPARC_UA32)
78*4d9fdb46SRobert Mustacchi #endif
79*4d9fdb46SRobert Mustacchi #if (R_SPARC_TLS_DTPOFF32)
80*4d9fdb46SRobert Mustacchi             | (type == R_SPARC_TLS_DTPOFF32)
81*4d9fdb46SRobert Mustacchi #endif
82*4d9fdb46SRobert Mustacchi             );
83*4d9fdb46SRobert Mustacchi         break;
84*4d9fdb46SRobert Mustacchi #endif /* EM_SPARC */
85*4d9fdb46SRobert Mustacchi #if defined(EM_386) && defined (R_386_32) && defined (R_386_PC32)
86*4d9fdb46SRobert Mustacchi     case EM_386:
87*4d9fdb46SRobert Mustacchi         r = (0
88*4d9fdb46SRobert Mustacchi #if defined (R_386_32)
89*4d9fdb46SRobert Mustacchi             |  (type == R_386_32)
90*4d9fdb46SRobert Mustacchi #endif
91*4d9fdb46SRobert Mustacchi #if defined (R_386_PC32)
92*4d9fdb46SRobert Mustacchi             |  (type == R_386_PC32)
93*4d9fdb46SRobert Mustacchi #endif
94*4d9fdb46SRobert Mustacchi #if defined (R_386_TLS_LDO_32)
95*4d9fdb46SRobert Mustacchi             | (type == R_386_TLS_LDO_32)
96*4d9fdb46SRobert Mustacchi #endif
97*4d9fdb46SRobert Mustacchi #if defined (R_386_TLS_DTPOFF32)
98*4d9fdb46SRobert Mustacchi             | (type == R_386_TLS_DTPOFF32)
99*4d9fdb46SRobert Mustacchi #endif
100*4d9fdb46SRobert Mustacchi #if defined (R_386_GOTPC)
101*4d9fdb46SRobert Mustacchi 	    | (type == R_386_GOTPC)
102*4d9fdb46SRobert Mustacchi #endif
103*4d9fdb46SRobert Mustacchi             );
104*4d9fdb46SRobert Mustacchi         break;
105*4d9fdb46SRobert Mustacchi #endif /* EM_386 */
106*4d9fdb46SRobert Mustacchi 
107*4d9fdb46SRobert Mustacchi #if defined (EM_SH) && defined (R_SH_DIR32)
108*4d9fdb46SRobert Mustacchi     case EM_SH:
109*4d9fdb46SRobert Mustacchi         r = (0
110*4d9fdb46SRobert Mustacchi #if defined (R_SH_DIR32)
111*4d9fdb46SRobert Mustacchi             | (type == R_SH_DIR32)
112*4d9fdb46SRobert Mustacchi #endif
113*4d9fdb46SRobert Mustacchi #if defined (R_SH_DTPOFF32)
114*4d9fdb46SRobert Mustacchi             | (type == R_SH_TLS_DTPOFF32)
115*4d9fdb46SRobert Mustacchi #endif
116*4d9fdb46SRobert Mustacchi             );
117*4d9fdb46SRobert Mustacchi         break;
118*4d9fdb46SRobert Mustacchi #endif /* SH */
119*4d9fdb46SRobert Mustacchi 
120*4d9fdb46SRobert Mustacchi #if defined(EM_IA_64) && defined (R_IA64_SECREL32LSB)
121*4d9fdb46SRobert Mustacchi     case EM_IA_64:  /* 32bit? ! */
122*4d9fdb46SRobert Mustacchi         r = (0
123*4d9fdb46SRobert Mustacchi #if defined (R_IA64_SECREL32LSB)
124*4d9fdb46SRobert Mustacchi             | (type == R_IA64_SECREL32LSB)
125*4d9fdb46SRobert Mustacchi #endif
126*4d9fdb46SRobert Mustacchi #if defined (R_IA64_DIR32LSB)
127*4d9fdb46SRobert Mustacchi             | (type == R_IA64_DIR32LSB)
128*4d9fdb46SRobert Mustacchi #endif
129*4d9fdb46SRobert Mustacchi #if defined (R_IA64_DTPREL32LSB)
130*4d9fdb46SRobert Mustacchi             | (type == R_IA64_DTPREL32LSB)
131*4d9fdb46SRobert Mustacchi #endif
132*4d9fdb46SRobert Mustacchi             );
133*4d9fdb46SRobert Mustacchi         break;
134*4d9fdb46SRobert Mustacchi #endif /* EM_IA_64 */
135*4d9fdb46SRobert Mustacchi 
136*4d9fdb46SRobert Mustacchi #if defined(EM_ARM) && defined (R_ARM_ABS32)
137*4d9fdb46SRobert Mustacchi     case EM_ARM:
138*4d9fdb46SRobert Mustacchi     case EM_AARCH64:
139*4d9fdb46SRobert Mustacchi         r = (0
140*4d9fdb46SRobert Mustacchi #if defined (R_ARM_ABS32)
141*4d9fdb46SRobert Mustacchi             | ( type == R_ARM_ABS32)
142*4d9fdb46SRobert Mustacchi #endif
143*4d9fdb46SRobert Mustacchi #if defined (R_AARCH64_ABS32)
144*4d9fdb46SRobert Mustacchi             | ( type == R_AARCH64_ABS32)
145*4d9fdb46SRobert Mustacchi #endif
146*4d9fdb46SRobert Mustacchi #if defined (R_ARM_TLS_LDO32)
147*4d9fdb46SRobert Mustacchi             | ( type == R_ARM_TLS_LDO32)
148*4d9fdb46SRobert Mustacchi #endif
149*4d9fdb46SRobert Mustacchi             );
150*4d9fdb46SRobert Mustacchi         break;
151*4d9fdb46SRobert Mustacchi #endif /* EM_ARM */
152*4d9fdb46SRobert Mustacchi 
153*4d9fdb46SRobert Mustacchi /*  On FreeBSD xR_PPC64_ADDR32 not defined
154*4d9fdb46SRobert Mustacchi     so we use the xR_PPC_ names which
155*4d9fdb46SRobert Mustacchi     have the proper value.
156*4d9fdb46SRobert Mustacchi     Our headers have:
157*4d9fdb46SRobert Mustacchi     xR_PPC64_ADDR64   38
158*4d9fdb46SRobert Mustacchi     xR_PPC_ADDR32     1 so we use this one
159*4d9fdb46SRobert Mustacchi     xR_PPC64_ADDR32   R_PPC_ADDR32
160*4d9fdb46SRobert Mustacchi 
161*4d9fdb46SRobert Mustacchi     xR_PPC64_DTPREL32 110  which may be wrong/unavailable
162*4d9fdb46SRobert Mustacchi     xR_PPC64_DTPREL64 78
163*4d9fdb46SRobert Mustacchi     xR_PPC_DTPREL32   78
164*4d9fdb46SRobert Mustacchi     */
165*4d9fdb46SRobert Mustacchi #if defined(EM_PPC64) && defined (R_PPC_ADDR32)
166*4d9fdb46SRobert Mustacchi     case EM_PPC64:
167*4d9fdb46SRobert Mustacchi         r = (0
168*4d9fdb46SRobert Mustacchi #if defined(R_PPC_ADDR32)
169*4d9fdb46SRobert Mustacchi             | (type == R_PPC_ADDR32)
170*4d9fdb46SRobert Mustacchi #endif
171*4d9fdb46SRobert Mustacchi #if defined(R_PPC64_DTPREL32)
172*4d9fdb46SRobert Mustacchi             | (type == R_PPC64_DTPREL32)
173*4d9fdb46SRobert Mustacchi #endif
174*4d9fdb46SRobert Mustacchi             );
175*4d9fdb46SRobert Mustacchi         break;
176*4d9fdb46SRobert Mustacchi #endif /* EM_PPC64 */
177*4d9fdb46SRobert Mustacchi 
178*4d9fdb46SRobert Mustacchi 
179*4d9fdb46SRobert Mustacchi #if defined(EM_PPC) && defined (R_PPC_ADDR32)
180*4d9fdb46SRobert Mustacchi     case EM_PPC:
181*4d9fdb46SRobert Mustacchi         r = (0
182*4d9fdb46SRobert Mustacchi #if defined (R_PPC_ADDR32)
183*4d9fdb46SRobert Mustacchi             | (type == R_PPC_ADDR32)
184*4d9fdb46SRobert Mustacchi #endif
185*4d9fdb46SRobert Mustacchi #if defined (R_PPC_DTPREL32)
186*4d9fdb46SRobert Mustacchi             | (type == R_PPC_DTPREL32)
187*4d9fdb46SRobert Mustacchi #endif
188*4d9fdb46SRobert Mustacchi             );
189*4d9fdb46SRobert Mustacchi         break;
190*4d9fdb46SRobert Mustacchi #endif /* EM_PPC */
191*4d9fdb46SRobert Mustacchi 
192*4d9fdb46SRobert Mustacchi #if defined(EM_S390) && defined (R_390_32)
193*4d9fdb46SRobert Mustacchi     case EM_S390:
194*4d9fdb46SRobert Mustacchi         r = (0
195*4d9fdb46SRobert Mustacchi #if defined (R_390_32)
196*4d9fdb46SRobert Mustacchi             | (type == R_390_32)
197*4d9fdb46SRobert Mustacchi #endif
198*4d9fdb46SRobert Mustacchi #if defined (R_390_TLS_LDO32)
199*4d9fdb46SRobert Mustacchi             | (type == R_390_TLS_LDO32)
200*4d9fdb46SRobert Mustacchi #endif
201*4d9fdb46SRobert Mustacchi             );
202*4d9fdb46SRobert Mustacchi         break;
203*4d9fdb46SRobert Mustacchi #endif /* EM_S390 */
204*4d9fdb46SRobert Mustacchi 
205*4d9fdb46SRobert Mustacchi #if defined(EM_X86_64) && ( defined(R_X86_64_32) || defined(R_X86_64_PC32) || defined(R_X86_64_DTPOFF32) )
206*4d9fdb46SRobert Mustacchi #if defined(EM_K10M)
207*4d9fdb46SRobert Mustacchi     case EM_K10M:
208*4d9fdb46SRobert Mustacchi #endif
209*4d9fdb46SRobert Mustacchi #if defined(EM_L10M)
210*4d9fdb46SRobert Mustacchi     case EM_L10M:
211*4d9fdb46SRobert Mustacchi #endif
212*4d9fdb46SRobert Mustacchi     case EM_X86_64:
213*4d9fdb46SRobert Mustacchi         r = (0
214*4d9fdb46SRobert Mustacchi #if defined (R_X86_64_PC32)
215*4d9fdb46SRobert Mustacchi             | (type == R_X86_64_PC32)
216*4d9fdb46SRobert Mustacchi #endif
217*4d9fdb46SRobert Mustacchi #if defined (R_X86_64_32)
218*4d9fdb46SRobert Mustacchi             | (type == R_X86_64_32)
219*4d9fdb46SRobert Mustacchi #endif
220*4d9fdb46SRobert Mustacchi #if defined (R_X86_64_DTPOFF32)
221*4d9fdb46SRobert Mustacchi             | (type ==  R_X86_64_DTPOFF32)
222*4d9fdb46SRobert Mustacchi #endif
223*4d9fdb46SRobert Mustacchi             );
224*4d9fdb46SRobert Mustacchi         break;
225*4d9fdb46SRobert Mustacchi #endif /* EM_X86_64 */
226*4d9fdb46SRobert Mustacchi 
227*4d9fdb46SRobert Mustacchi     case  EM_QUALCOMM_DSP6:
228*4d9fdb46SRobert Mustacchi         r = (type == R_QUALCOMM_REL32);
229*4d9fdb46SRobert Mustacchi         break;
230*4d9fdb46SRobert Mustacchi     }
231*4d9fdb46SRobert Mustacchi     return r;
232*4d9fdb46SRobert Mustacchi }
233*4d9fdb46SRobert Mustacchi 
234*4d9fdb46SRobert Mustacchi unsigned
_dwarf_is_64bit_abs_reloc(unsigned int type,unsigned machine)235*4d9fdb46SRobert Mustacchi _dwarf_is_64bit_abs_reloc(unsigned int type, unsigned machine)
236*4d9fdb46SRobert Mustacchi {
237*4d9fdb46SRobert Mustacchi     unsigned r = 0;
238*4d9fdb46SRobert Mustacchi 
239*4d9fdb46SRobert Mustacchi     switch (machine) {
240*4d9fdb46SRobert Mustacchi #if defined(EM_MIPS) && defined (R_MIPS_64)
241*4d9fdb46SRobert Mustacchi     case EM_MIPS:
242*4d9fdb46SRobert Mustacchi         r = (0
243*4d9fdb46SRobert Mustacchi #if defined (R_MIPS_64)
244*4d9fdb46SRobert Mustacchi             | (type == R_MIPS_64)
245*4d9fdb46SRobert Mustacchi #endif
246*4d9fdb46SRobert Mustacchi #if defined (R_MIPS_32)
247*4d9fdb46SRobert Mustacchi             | (type == R_MIPS_32)
248*4d9fdb46SRobert Mustacchi #endif
249*4d9fdb46SRobert Mustacchi #if defined(R_MIPS_TLS_DTPREL64)
250*4d9fdb46SRobert Mustacchi             | (type == R_MIPS_TLS_DTPREL64)
251*4d9fdb46SRobert Mustacchi #endif
252*4d9fdb46SRobert Mustacchi             );
253*4d9fdb46SRobert Mustacchi         break;
254*4d9fdb46SRobert Mustacchi #endif /* EM_MIPS */
255*4d9fdb46SRobert Mustacchi #if defined(EM_SPARC32PLUS) && defined (R_SPARC_UA64)
256*4d9fdb46SRobert Mustacchi     case EM_SPARC32PLUS:
257*4d9fdb46SRobert Mustacchi         r =  (type == R_SPARC_UA64);
258*4d9fdb46SRobert Mustacchi         break;
259*4d9fdb46SRobert Mustacchi #endif
260*4d9fdb46SRobert Mustacchi #if defined(EM_SPARCV9) && defined (R_SPARC_UA64)
261*4d9fdb46SRobert Mustacchi     case EM_SPARCV9:
262*4d9fdb46SRobert Mustacchi         r = (0
263*4d9fdb46SRobert Mustacchi #if defined (R_SPARC_UA64)
264*4d9fdb46SRobert Mustacchi             | (type == R_SPARC_UA64)
265*4d9fdb46SRobert Mustacchi #endif
266*4d9fdb46SRobert Mustacchi #if defined (R_SPARC_TLS_DTPOFF64)
267*4d9fdb46SRobert Mustacchi             | (type == R_SPARC_TLS_DTPOFF64)
268*4d9fdb46SRobert Mustacchi #endif
269*4d9fdb46SRobert Mustacchi             );
270*4d9fdb46SRobert Mustacchi         break;
271*4d9fdb46SRobert Mustacchi #endif
272*4d9fdb46SRobert Mustacchi #if defined(EM_SPARC) && defined (R_SPARC_UA64)
273*4d9fdb46SRobert Mustacchi     case EM_SPARC:
274*4d9fdb46SRobert Mustacchi         r = (0
275*4d9fdb46SRobert Mustacchi #if defined(R_SPARC_UA64)
276*4d9fdb46SRobert Mustacchi             | (type == R_SPARC_UA64)
277*4d9fdb46SRobert Mustacchi #endif
278*4d9fdb46SRobert Mustacchi #if defined (R_SPARC_TLS_DTPOFF64)
279*4d9fdb46SRobert Mustacchi             | (type == R_SPARC_TLS_DTPOFF64)
280*4d9fdb46SRobert Mustacchi #endif
281*4d9fdb46SRobert Mustacchi             );
282*4d9fdb46SRobert Mustacchi         break;
283*4d9fdb46SRobert Mustacchi #endif /* EM_SPARC */
284*4d9fdb46SRobert Mustacchi 
285*4d9fdb46SRobert Mustacchi #if defined(EM_IA_64) && defined (R_IA64_SECREL64LSB)
286*4d9fdb46SRobert Mustacchi     case EM_IA_64: /* 64bit */
287*4d9fdb46SRobert Mustacchi         r = (0
288*4d9fdb46SRobert Mustacchi #if defined (R_IA64_SECREL64LSB)
289*4d9fdb46SRobert Mustacchi             | (type == R_IA64_SECREL64LSB)
290*4d9fdb46SRobert Mustacchi #endif
291*4d9fdb46SRobert Mustacchi #if defined (R_IA64_SECREL32LSB)
292*4d9fdb46SRobert Mustacchi             | (type == R_IA64_SECREL32LSB)
293*4d9fdb46SRobert Mustacchi #endif
294*4d9fdb46SRobert Mustacchi #if defined (R_IA64_DIR64LSB)
295*4d9fdb46SRobert Mustacchi             | (type == R_IA64_DIR64LSB)
296*4d9fdb46SRobert Mustacchi #endif
297*4d9fdb46SRobert Mustacchi #if defined (R_IA64_DTPREL64LSB)
298*4d9fdb46SRobert Mustacchi             | (type == R_IA64_DTPREL64LSB)
299*4d9fdb46SRobert Mustacchi #endif
300*4d9fdb46SRobert Mustacchi #if defined (R_IA64_REL32LSB)
301*4d9fdb46SRobert Mustacchi             | (type == R_IA64_REL32LSB)
302*4d9fdb46SRobert Mustacchi #endif
303*4d9fdb46SRobert Mustacchi             );
304*4d9fdb46SRobert Mustacchi         break;
305*4d9fdb46SRobert Mustacchi #endif /* EM_IA_64 */
306*4d9fdb46SRobert Mustacchi 
307*4d9fdb46SRobert Mustacchi #if defined(EM_PPC64) && defined (R_PPC64_ADDR64)
308*4d9fdb46SRobert Mustacchi     case EM_PPC64:
309*4d9fdb46SRobert Mustacchi         r = (0
310*4d9fdb46SRobert Mustacchi #if defined(R_PPC64_ADDR64)
311*4d9fdb46SRobert Mustacchi             | (type == R_PPC64_ADDR64)
312*4d9fdb46SRobert Mustacchi #endif
313*4d9fdb46SRobert Mustacchi #if defined(R_PPC64_DTPREL64)
314*4d9fdb46SRobert Mustacchi             | (type == R_PPC64_DTPREL64)
315*4d9fdb46SRobert Mustacchi #endif
316*4d9fdb46SRobert Mustacchi             );
317*4d9fdb46SRobert Mustacchi         break;
318*4d9fdb46SRobert Mustacchi #endif /* EM_PPC64 */
319*4d9fdb46SRobert Mustacchi 
320*4d9fdb46SRobert Mustacchi #if defined(EM_S390) && defined (R_390_64)
321*4d9fdb46SRobert Mustacchi     case EM_S390:
322*4d9fdb46SRobert Mustacchi         r = (0
323*4d9fdb46SRobert Mustacchi #if defined(R_390_64)
324*4d9fdb46SRobert Mustacchi             | (type == R_390_64)
325*4d9fdb46SRobert Mustacchi #endif
326*4d9fdb46SRobert Mustacchi #if defined(R_390_TLS_LDO64)
327*4d9fdb46SRobert Mustacchi             | (type == R_390_TLS_LDO64)
328*4d9fdb46SRobert Mustacchi #endif
329*4d9fdb46SRobert Mustacchi             );
330*4d9fdb46SRobert Mustacchi         break;
331*4d9fdb46SRobert Mustacchi #endif /* EM_390 */
332*4d9fdb46SRobert Mustacchi 
333*4d9fdb46SRobert Mustacchi #if defined(EM_X86_64) && defined (R_X86_64_64)
334*4d9fdb46SRobert Mustacchi #if defined(EM_K10M)
335*4d9fdb46SRobert Mustacchi     case EM_K10M:
336*4d9fdb46SRobert Mustacchi #endif
337*4d9fdb46SRobert Mustacchi #if defined(EM_L10M)
338*4d9fdb46SRobert Mustacchi     case EM_L10M:
339*4d9fdb46SRobert Mustacchi #endif
340*4d9fdb46SRobert Mustacchi     case EM_X86_64:
341*4d9fdb46SRobert Mustacchi         r = (0
342*4d9fdb46SRobert Mustacchi #if defined (R_X86_64_64)
343*4d9fdb46SRobert Mustacchi             | (type == R_X86_64_64)
344*4d9fdb46SRobert Mustacchi #endif
345*4d9fdb46SRobert Mustacchi #if defined (R_X86_64_DTPOFF32)
346*4d9fdb46SRobert Mustacchi             | (type == R_X86_64_DTPOFF64)
347*4d9fdb46SRobert Mustacchi #endif
348*4d9fdb46SRobert Mustacchi             );
349*4d9fdb46SRobert Mustacchi         break;
350*4d9fdb46SRobert Mustacchi #endif /* EM_X86_64 */
351*4d9fdb46SRobert Mustacchi #if defined(EM_AARCH64) && defined (R_AARCH64_ABS64)
352*4d9fdb46SRobert Mustacchi     case EM_AARCH64:
353*4d9fdb46SRobert Mustacchi         r = (0
354*4d9fdb46SRobert Mustacchi #if defined (R_AARCH64_ABS64)
355*4d9fdb46SRobert Mustacchi             | ( type == R_AARCH64_ABS64)
356*4d9fdb46SRobert Mustacchi #endif
357*4d9fdb46SRobert Mustacchi             );
358*4d9fdb46SRobert Mustacchi         break;
359*4d9fdb46SRobert Mustacchi #endif /* EM_AARCH64 */
360*4d9fdb46SRobert Mustacchi 
361*4d9fdb46SRobert Mustacchi     }
362*4d9fdb46SRobert Mustacchi     return r;
363*4d9fdb46SRobert Mustacchi }
364