1/* SPARC-specific support for ELF
2   Copyright (C) 2005-2022 Free Software Foundation, Inc.
3
4   This file is part of BFD, the Binary File Descriptor library.
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 3 of the License, or
9   (at your option) any later version.
10
11   This program is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15
16   You should have received a copy of the GNU General Public License
17   along with this program; if not, write to the Free Software
18   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
19   MA 02110-1301, USA.  */
20
21
22/* This file handles functionality common to the different SPARC ABI's.  */
23
24#include "sysdep.h"
25#include "bfd.h"
26#include "bfdlink.h"
27#include "libbfd.h"
28#include "libiberty.h"
29#include "elf-bfd.h"
30#include "elf/sparc.h"
31#include "opcode/sparc.h"
32#include "elfxx-sparc.h"
33#include "elf-vxworks.h"
34#include "objalloc.h"
35#include "hashtab.h"
36
37/* In case we're on a 32-bit machine, construct a 64-bit "-1" value.  */
38#define MINUS_ONE (~ (bfd_vma) 0)
39
40#define ABI_64_P(abfd) \
41  (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
42
43/* The relocation "howto" table.  */
44
45/* Utility for performing the standard initial work of an instruction
46   relocation.
47   *PRELOCATION will contain the relocated item.
48   *PINSN will contain the instruction from the input stream.
49   If the result is `bfd_reloc_other' the caller can continue with
50   performing the relocation.  Otherwise it must stop and return the
51   value to its caller.  */
52
53static bfd_reloc_status_type
54init_insn_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
55		 void * data, asection *input_section, bfd *output_bfd,
56		 bfd_vma *prelocation, bfd_vma *pinsn)
57{
58  bfd_vma relocation;
59  reloc_howto_type *howto = reloc_entry->howto;
60
61  if (output_bfd != (bfd *) NULL
62      && (symbol->flags & BSF_SECTION_SYM) == 0
63      && (! howto->partial_inplace
64	  || reloc_entry->addend == 0))
65    {
66      reloc_entry->address += input_section->output_offset;
67      return bfd_reloc_ok;
68    }
69
70  /* This works because partial_inplace is FALSE.  */
71  if (output_bfd != NULL)
72    return bfd_reloc_continue;
73
74  if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
75    return bfd_reloc_outofrange;
76
77  relocation = (symbol->value
78		+ symbol->section->output_section->vma
79		+ symbol->section->output_offset);
80  relocation += reloc_entry->addend;
81  if (howto->pc_relative)
82    {
83      relocation -= (input_section->output_section->vma
84		     + input_section->output_offset);
85      relocation -= reloc_entry->address;
86    }
87
88  *prelocation = relocation;
89  *pinsn = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
90  return bfd_reloc_other;
91}
92
93/* For unsupported relocs.  */
94
95static bfd_reloc_status_type
96sparc_elf_notsup_reloc (bfd *abfd ATTRIBUTE_UNUSED,
97			arelent *reloc_entry ATTRIBUTE_UNUSED,
98			asymbol *symbol ATTRIBUTE_UNUSED,
99			void * data ATTRIBUTE_UNUSED,
100			asection *input_section ATTRIBUTE_UNUSED,
101			bfd *output_bfd ATTRIBUTE_UNUSED,
102			char **error_message ATTRIBUTE_UNUSED)
103{
104  return bfd_reloc_notsupported;
105}
106
107/* Handle the WDISP16 reloc.  */
108
109static bfd_reloc_status_type
110sparc_elf_wdisp16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
111			 void * data, asection *input_section, bfd *output_bfd,
112			 char **error_message ATTRIBUTE_UNUSED)
113{
114  bfd_vma relocation;
115  bfd_vma insn;
116  bfd_reloc_status_type status;
117
118  status = init_insn_reloc (abfd, reloc_entry, symbol, data,
119			    input_section, output_bfd, &relocation, &insn);
120  if (status != bfd_reloc_other)
121    return status;
122
123  insn &= ~ (bfd_vma) 0x303fff;
124  insn |= (((relocation >> 2) & 0xc000) << 6) | ((relocation >> 2) & 0x3fff);
125  bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address);
126
127  if ((bfd_signed_vma) relocation < - 0x40000
128      || (bfd_signed_vma) relocation > 0x3ffff)
129    return bfd_reloc_overflow;
130  else
131    return bfd_reloc_ok;
132}
133
134/* Handle the WDISP10 reloc.  */
135
136static bfd_reloc_status_type
137sparc_elf_wdisp10_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
138			 void * data, asection *input_section, bfd *output_bfd,
139			 char **error_message ATTRIBUTE_UNUSED)
140{
141  bfd_vma relocation;
142  bfd_vma insn;
143  bfd_reloc_status_type status;
144
145  status = init_insn_reloc (abfd, reloc_entry, symbol, data,
146			    input_section, output_bfd, &relocation, &insn);
147  if (status != bfd_reloc_other)
148    return status;
149
150  insn &= ~ (bfd_vma) 0x181fe0;
151  insn |= (((relocation >> 2) & 0x300) << 11)
152	  | (((relocation >> 2) & 0xff) << 5);
153  bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address);
154
155  if ((bfd_signed_vma) relocation < - 0x1000
156      || (bfd_signed_vma) relocation > 0xfff)
157    return bfd_reloc_overflow;
158  else
159    return bfd_reloc_ok;
160}
161
162/* Handle the HIX22 reloc.  */
163
164static bfd_reloc_status_type
165sparc_elf_hix22_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
166		       void * data, asection *input_section, bfd *output_bfd,
167		       char **error_message ATTRIBUTE_UNUSED)
168{
169  bfd_vma relocation;
170  bfd_vma insn;
171  bfd_reloc_status_type status;
172
173  status = init_insn_reloc (abfd, reloc_entry, symbol, data,
174			    input_section, output_bfd, &relocation, &insn);
175  if (status != bfd_reloc_other)
176    return status;
177
178  relocation ^= MINUS_ONE;
179  insn = (insn &~ (bfd_vma) 0x3fffff) | ((relocation >> 10) & 0x3fffff);
180  bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address);
181
182  if ((relocation & ~ (bfd_vma) 0xffffffff) != 0)
183    return bfd_reloc_overflow;
184  else
185    return bfd_reloc_ok;
186}
187
188/* Handle the LOX10 reloc.  */
189
190static bfd_reloc_status_type
191sparc_elf_lox10_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
192		       void * data, asection *input_section, bfd *output_bfd,
193		       char **error_message ATTRIBUTE_UNUSED)
194{
195  bfd_vma relocation;
196  bfd_vma insn;
197  bfd_reloc_status_type status;
198
199  status = init_insn_reloc (abfd, reloc_entry, symbol, data,
200			    input_section, output_bfd, &relocation, &insn);
201  if (status != bfd_reloc_other)
202    return status;
203
204  insn = (insn &~ (bfd_vma) 0x1fff) | 0x1c00 | (relocation & 0x3ff);
205  bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address);
206
207  return bfd_reloc_ok;
208}
209
210static reloc_howto_type _bfd_sparc_elf_howto_table[] =
211{
212  HOWTO(R_SPARC_NONE,	   0,0, 0,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_NONE",	false,0,0x00000000,true),
213  HOWTO(R_SPARC_8,	   0,1, 8,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_8",	false,0,0x000000ff,true),
214  HOWTO(R_SPARC_16,	   0,2,16,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_16",	false,0,0x0000ffff,true),
215  HOWTO(R_SPARC_32,	   0,4,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_32",	false,0,0xffffffff,true),
216  HOWTO(R_SPARC_DISP8,	   0,1, 8,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_DISP8",	false,0,0x000000ff,true),
217  HOWTO(R_SPARC_DISP16,	   0,2,16,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_DISP16",	false,0,0x0000ffff,true),
218  HOWTO(R_SPARC_DISP32,	   0,4,32,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_DISP32",	false,0,0xffffffff,true),
219  HOWTO(R_SPARC_WDISP30,   2,4,30,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WDISP30", false,0,0x3fffffff,true),
220  HOWTO(R_SPARC_WDISP22,   2,4,22,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WDISP22", false,0,0x003fffff,true),
221  HOWTO(R_SPARC_HI22,	  10,4,22,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_HI22",	false,0,0x003fffff,true),
222  HOWTO(R_SPARC_22,	   0,4,22,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_22",	false,0,0x003fffff,true),
223  HOWTO(R_SPARC_13,	   0,4,13,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_13",	false,0,0x00001fff,true),
224  HOWTO(R_SPARC_LO10,	   0,4,10,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_LO10",	false,0,0x000003ff,true),
225  HOWTO(R_SPARC_GOT10,	   0,4,10,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_GOT10",	false,0,0x000003ff,true),
226  HOWTO(R_SPARC_GOT13,	   0,4,13,false,0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_GOT13",	false,0,0x00001fff,true),
227  HOWTO(R_SPARC_GOT22,	  10,4,22,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_GOT22",	false,0,0x003fffff,true),
228  HOWTO(R_SPARC_PC10,	   0,4,10,true, 0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_PC10",	false,0,0x000003ff,true),
229  HOWTO(R_SPARC_PC22,	  10,4,22,true, 0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_PC22",	false,0,0x003fffff,true),
230  HOWTO(R_SPARC_WPLT30,	   2,4,30,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WPLT30",	false,0,0x3fffffff,true),
231  HOWTO(R_SPARC_COPY,	   0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_COPY",	false,0,0x00000000,true),
232  HOWTO(R_SPARC_GLOB_DAT,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_GLOB_DAT",false,0,0x00000000,true),
233  HOWTO(R_SPARC_JMP_SLOT,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_JMP_SLOT",false,0,0x00000000,true),
234  HOWTO(R_SPARC_RELATIVE,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_RELATIVE",false,0,0x00000000,true),
235  HOWTO(R_SPARC_UA32,	   0,4,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_UA32",	false,0,0xffffffff,true),
236  HOWTO(R_SPARC_PLT32,	   0,4,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_PLT32",	false,0,0xffffffff,true),
237  HOWTO(R_SPARC_HIPLT22,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_HIPLT22",	 false,0,0x00000000,true),
238  HOWTO(R_SPARC_LOPLT10,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_LOPLT10",	 false,0,0x00000000,true),
239  HOWTO(R_SPARC_PCPLT32,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_PCPLT32",	 false,0,0x00000000,true),
240  HOWTO(R_SPARC_PCPLT22,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_PCPLT22",	 false,0,0x00000000,true),
241  HOWTO(R_SPARC_PCPLT10,   0,0,00,false,0,complain_overflow_dont,    sparc_elf_notsup_reloc, "R_SPARC_PCPLT10",	 false,0,0x00000000,true),
242  HOWTO(R_SPARC_10,	   0,4,10,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_10",	false,0,0x000003ff,true),
243  HOWTO(R_SPARC_11,	   0,4,11,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_11",	false,0,0x000007ff,true),
244  HOWTO(R_SPARC_64,	   0,8,64,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_64",	false,0,MINUS_ONE, true),
245  HOWTO(R_SPARC_OLO10,	   0,4,13,false,0,complain_overflow_signed,  sparc_elf_notsup_reloc, "R_SPARC_OLO10",	false,0,0x00001fff,true),
246  HOWTO(R_SPARC_HH22,	  42,4,22,false,0,complain_overflow_unsigned,bfd_elf_generic_reloc,  "R_SPARC_HH22",	false,0,0x003fffff,true),
247  HOWTO(R_SPARC_HM10,	  32,4,10,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_HM10",	false,0,0x000003ff,true),
248  HOWTO(R_SPARC_LM22,	  10,4,22,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_LM22",	false,0,0x003fffff,true),
249  HOWTO(R_SPARC_PC_HH22,  42,4,22,true, 0,complain_overflow_unsigned,bfd_elf_generic_reloc,  "R_SPARC_PC_HH22",	   false,0,0x003fffff,true),
250  HOWTO(R_SPARC_PC_HM10,  32,4,10,true, 0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_PC_HM10",	   false,0,0x000003ff,true),
251  HOWTO(R_SPARC_PC_LM22,  10,4,22,true, 0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_PC_LM22",	   false,0,0x003fffff,true),
252  HOWTO(R_SPARC_WDISP16,   2,4,16,true, 0,complain_overflow_signed,  sparc_elf_wdisp16_reloc,"R_SPARC_WDISP16", false,0,0x00000000,true),
253  HOWTO(R_SPARC_WDISP19,   2,4,19,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_WDISP19", false,0,0x0007ffff,true),
254  HOWTO(R_SPARC_UNUSED_42, 0,0, 0,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_UNUSED_42",false,0,0x00000000,true),
255  HOWTO(R_SPARC_7,	   0,4, 7,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_7",	false,0,0x0000007f,true),
256  HOWTO(R_SPARC_5,	   0,4, 5,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_5",	false,0,0x0000001f,true),
257  HOWTO(R_SPARC_6,	   0,4, 6,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_6",	false,0,0x0000003f,true),
258  HOWTO(R_SPARC_DISP64,	   0,8,64,true, 0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_DISP64",	false,0,MINUS_ONE, true),
259  HOWTO(R_SPARC_PLT64,	   0,8,64,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_PLT64",	false,0,MINUS_ONE, true),
260  HOWTO(R_SPARC_HIX22,	   0,8, 0,false,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,  "R_SPARC_HIX22",	false,0,MINUS_ONE, false),
261  HOWTO(R_SPARC_LOX10,	   0,8, 0,false,0,complain_overflow_dont,    sparc_elf_lox10_reloc,  "R_SPARC_LOX10",	false,0,MINUS_ONE, false),
262  HOWTO(R_SPARC_H44,	  22,4,22,false,0,complain_overflow_unsigned,bfd_elf_generic_reloc,  "R_SPARC_H44",	false,0,0x003fffff,false),
263  HOWTO(R_SPARC_M44,	  12,4,10,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_M44",	false,0,0x000003ff,false),
264  HOWTO(R_SPARC_L44,	   0,4,13,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_L44",	false,0,0x00000fff,false),
265  HOWTO(R_SPARC_REGISTER,  0,8, 0,false,0,complain_overflow_bitfield,sparc_elf_notsup_reloc, "R_SPARC_REGISTER",false,0,MINUS_ONE, false),
266  HOWTO(R_SPARC_UA64,	   0,8,64,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_UA64",	    false,0,MINUS_ONE, true),
267  HOWTO(R_SPARC_UA16,	   0,2,16,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,  "R_SPARC_UA16",	    false,0,0x0000ffff,true),
268  HOWTO(R_SPARC_TLS_GD_HI22,10,4,22,false,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_GD_HI22",false,0,0x003fffff,true),
269  HOWTO(R_SPARC_TLS_GD_LO10,0,4,10,false,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_GD_LO10",false,0,0x000003ff,true),
270  HOWTO(R_SPARC_TLS_GD_ADD,0,0, 0,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_TLS_GD_ADD",false,0,0x00000000,true),
271  HOWTO(R_SPARC_TLS_GD_CALL,2,4,30,true,0,complain_overflow_signed,  bfd_elf_generic_reloc,  "R_SPARC_TLS_GD_CALL",false,0,0x3fffffff,true),
272  HOWTO(R_SPARC_TLS_LDM_HI22,10,4,22,false,0,complain_overflow_dont, bfd_elf_generic_reloc,  "R_SPARC_TLS_LDM_HI22",false,0,0x003fffff,true),
273  HOWTO(R_SPARC_TLS_LDM_LO10,0,4,10,false,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_LDM_LO10",false,0,0x000003ff,true),
274  HOWTO(R_SPARC_TLS_LDM_ADD,0,0, 0,false,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_LDM_ADD",false,0,0x00000000,true),
275  HOWTO(R_SPARC_TLS_LDM_CALL,2,4,30,true,0,complain_overflow_signed, bfd_elf_generic_reloc,  "R_SPARC_TLS_LDM_CALL",false,0,0x3fffffff,true),
276  HOWTO(R_SPARC_TLS_LDO_HIX22,0,4,0,false,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,"R_SPARC_TLS_LDO_HIX22",false,0,0x003fffff, false),
277  HOWTO(R_SPARC_TLS_LDO_LOX10,0,4,0,false,0,complain_overflow_dont,  sparc_elf_lox10_reloc,  "R_SPARC_TLS_LDO_LOX10",false,0,0x000003ff, false),
278  HOWTO(R_SPARC_TLS_LDO_ADD,0,0, 0,false,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_LDO_ADD",false,0,0x00000000,true),
279  HOWTO(R_SPARC_TLS_IE_HI22,10,4,22,false,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_IE_HI22",false,0,0x003fffff,true),
280  HOWTO(R_SPARC_TLS_IE_LO10,0,4,10,false,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_IE_LO10",false,0,0x000003ff,true),
281  HOWTO(R_SPARC_TLS_IE_LD,0,0, 0,false,0,complain_overflow_dont,     bfd_elf_generic_reloc,  "R_SPARC_TLS_IE_LD",false,0,0x00000000,true),
282  HOWTO(R_SPARC_TLS_IE_LDX,0,0, 0,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_TLS_IE_LDX",false,0,0x00000000,true),
283  HOWTO(R_SPARC_TLS_IE_ADD,0,0, 0,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_TLS_IE_ADD",false,0,0x00000000,true),
284  HOWTO(R_SPARC_TLS_LE_HIX22,0,4,0,false,0,complain_overflow_bitfield,sparc_elf_hix22_reloc, "R_SPARC_TLS_LE_HIX22",false,0,0x003fffff, false),
285  HOWTO(R_SPARC_TLS_LE_LOX10,0,4,0,false,0,complain_overflow_dont,   sparc_elf_lox10_reloc,  "R_SPARC_TLS_LE_LOX10",false,0,0x000003ff, false),
286  HOWTO(R_SPARC_TLS_DTPMOD32,0,0, 0,false,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_DTPMOD32",false,0,0x00000000,true),
287  HOWTO(R_SPARC_TLS_DTPMOD64,0,0, 0,false,0,complain_overflow_dont,  bfd_elf_generic_reloc,  "R_SPARC_TLS_DTPMOD64",false,0,0x00000000,true),
288  HOWTO(R_SPARC_TLS_DTPOFF32,0,4,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_TLS_DTPOFF32",false,0,0xffffffff,true),
289  HOWTO(R_SPARC_TLS_DTPOFF64,0,8,64,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_TLS_DTPOFF64",false,0,MINUS_ONE,true),
290  HOWTO(R_SPARC_TLS_TPOFF32,0,0, 0,false,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_TPOFF32",false,0,0x00000000,true),
291  HOWTO(R_SPARC_TLS_TPOFF64,0,0, 0,false,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_TLS_TPOFF64",false,0,0x00000000,true),
292  HOWTO(R_SPARC_GOTDATA_HIX22,0,4,0,false,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,"R_SPARC_GOTDATA_HIX22",false,0,0x003fffff, false),
293  HOWTO(R_SPARC_GOTDATA_LOX10,0,4,0,false,0,complain_overflow_dont,  sparc_elf_lox10_reloc,  "R_SPARC_GOTDATA_LOX10",false,0,0x000003ff, false),
294  HOWTO(R_SPARC_GOTDATA_OP_HIX22,0,4,0,false,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,"R_SPARC_GOTDATA_OP_HIX22",false,0,0x003fffff, false),
295  HOWTO(R_SPARC_GOTDATA_OP_LOX10,0,4,0,false,0,complain_overflow_dont,	sparc_elf_lox10_reloc,	"R_SPARC_GOTDATA_OP_LOX10",false,0,0x000003ff, false),
296  HOWTO(R_SPARC_GOTDATA_OP,0,0, 0,false,0,complain_overflow_dont,   bfd_elf_generic_reloc,  "R_SPARC_GOTDATA_OP",false,0,0x00000000,true),
297  HOWTO(R_SPARC_H34,12,4,22,false,0,complain_overflow_unsigned,bfd_elf_generic_reloc,"R_SPARC_H34",false,0,0x003fffff,false),
298  HOWTO(R_SPARC_SIZE32,0,4,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_SIZE32",false,0,0xffffffff,true),
299  HOWTO(R_SPARC_SIZE64,0,8,64,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_SIZE64",false,0,MINUS_ONE, true),
300  HOWTO(R_SPARC_WDISP10,2,4,10,true, 0,complain_overflow_signed,sparc_elf_wdisp10_reloc,"R_SPARC_WDISP10",false,0,0x00000000,true),
301};
302static reloc_howto_type sparc_jmp_irel_howto =
303  HOWTO(R_SPARC_JMP_IREL,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_JMP_IREL",false,0,0x00000000,true);
304static reloc_howto_type sparc_irelative_howto =
305  HOWTO(R_SPARC_IRELATIVE,  0,0,00,false,0,complain_overflow_dont,    bfd_elf_generic_reloc,  "R_SPARC_IRELATIVE",false,0,0x00000000,true);
306static reloc_howto_type sparc_vtinherit_howto =
307  HOWTO (R_SPARC_GNU_VTINHERIT, 0,4,0,false,0,complain_overflow_dont, NULL, "R_SPARC_GNU_VTINHERIT", false,0, 0, false);
308static reloc_howto_type sparc_vtentry_howto =
309  HOWTO (R_SPARC_GNU_VTENTRY, 0,4,0,false,0,complain_overflow_dont, _bfd_elf_rel_vtable_reloc_fn,"R_SPARC_GNU_VTENTRY", false,0,0, false);
310static reloc_howto_type sparc_rev32_howto =
311  HOWTO(R_SPARC_REV32, 0,4,32,false,0,complain_overflow_bitfield,bfd_elf_generic_reloc, "R_SPARC_REV32", false,0,0xffffffff,true);
312
313reloc_howto_type *
314_bfd_sparc_elf_reloc_type_lookup (bfd *abfd,
315				  bfd_reloc_code_real_type code)
316{
317  /* We explicitly handle each relocation type in the switch
318     instead of using a lookup table for efficiency.  */
319  switch (code)
320    {
321    case BFD_RELOC_NONE:
322      return &_bfd_sparc_elf_howto_table[R_SPARC_NONE];
323
324    case BFD_RELOC_8:
325      return &_bfd_sparc_elf_howto_table[R_SPARC_8];
326
327    case BFD_RELOC_16:
328      return &_bfd_sparc_elf_howto_table[R_SPARC_16];
329
330    case BFD_RELOC_32:
331      return &_bfd_sparc_elf_howto_table[R_SPARC_32];
332
333    case BFD_RELOC_8_PCREL:
334      return &_bfd_sparc_elf_howto_table[R_SPARC_DISP8];
335
336    case BFD_RELOC_16_PCREL:
337      return &_bfd_sparc_elf_howto_table[R_SPARC_DISP16];
338
339    case BFD_RELOC_32_PCREL:
340      return &_bfd_sparc_elf_howto_table[R_SPARC_DISP32];
341
342    case BFD_RELOC_32_PCREL_S2:
343      return &_bfd_sparc_elf_howto_table[R_SPARC_WDISP30];
344
345    case BFD_RELOC_SPARC_WDISP22:
346      return &_bfd_sparc_elf_howto_table[R_SPARC_WDISP22];
347
348    case BFD_RELOC_HI22:
349      return &_bfd_sparc_elf_howto_table[R_SPARC_HI22];
350
351    case BFD_RELOC_SPARC22:
352      return &_bfd_sparc_elf_howto_table[R_SPARC_22];
353
354    case BFD_RELOC_SPARC13:
355      return &_bfd_sparc_elf_howto_table[R_SPARC_13];
356
357    case BFD_RELOC_LO10:
358      return &_bfd_sparc_elf_howto_table[R_SPARC_LO10];
359
360    case BFD_RELOC_SPARC_GOT10:
361      return &_bfd_sparc_elf_howto_table[R_SPARC_GOT10];
362
363    case BFD_RELOC_SPARC_GOT13:
364      return &_bfd_sparc_elf_howto_table[R_SPARC_GOT13];
365
366    case BFD_RELOC_SPARC_GOT22:
367      return &_bfd_sparc_elf_howto_table[R_SPARC_GOT22];
368
369    case BFD_RELOC_SPARC_PC10:
370      return &_bfd_sparc_elf_howto_table[R_SPARC_PC10];
371
372    case BFD_RELOC_SPARC_PC22:
373      return &_bfd_sparc_elf_howto_table[R_SPARC_PC22];
374
375    case BFD_RELOC_SPARC_WPLT30:
376      return &_bfd_sparc_elf_howto_table[R_SPARC_WPLT30];
377
378    case BFD_RELOC_SPARC_COPY:
379      return &_bfd_sparc_elf_howto_table[R_SPARC_COPY];
380
381    case BFD_RELOC_SPARC_GLOB_DAT:
382      return &_bfd_sparc_elf_howto_table[R_SPARC_GLOB_DAT];
383
384    case BFD_RELOC_SPARC_JMP_SLOT:
385      return &_bfd_sparc_elf_howto_table[R_SPARC_JMP_SLOT];
386
387    case BFD_RELOC_SPARC_RELATIVE:
388      return &_bfd_sparc_elf_howto_table[R_SPARC_RELATIVE];
389
390    case BFD_RELOC_SPARC_UA32:
391      return &_bfd_sparc_elf_howto_table[R_SPARC_UA32];
392
393    case BFD_RELOC_SPARC_PLT32:
394      return &_bfd_sparc_elf_howto_table[R_SPARC_PLT32];
395
396    case BFD_RELOC_SPARC_10:
397      return &_bfd_sparc_elf_howto_table[R_SPARC_10];
398
399    case BFD_RELOC_SPARC_11:
400      return &_bfd_sparc_elf_howto_table[R_SPARC_11];
401
402    case BFD_RELOC_SPARC_64:
403      return &_bfd_sparc_elf_howto_table[R_SPARC_64];
404
405    case BFD_RELOC_SPARC_OLO10:
406      return &_bfd_sparc_elf_howto_table[R_SPARC_OLO10];
407
408    case BFD_RELOC_SPARC_HH22:
409      return &_bfd_sparc_elf_howto_table[R_SPARC_HH22];
410
411    case BFD_RELOC_SPARC_HM10:
412      return &_bfd_sparc_elf_howto_table[R_SPARC_HM10];
413
414    case BFD_RELOC_SPARC_LM22:
415      return &_bfd_sparc_elf_howto_table[R_SPARC_LM22];
416
417    case BFD_RELOC_SPARC_PC_HH22:
418      return &_bfd_sparc_elf_howto_table[R_SPARC_PC_HH22];
419
420    case BFD_RELOC_SPARC_PC_HM10:
421      return &_bfd_sparc_elf_howto_table[R_SPARC_PC_HM10];
422
423    case BFD_RELOC_SPARC_PC_LM22:
424      return &_bfd_sparc_elf_howto_table[R_SPARC_PC_LM22];
425
426    case BFD_RELOC_SPARC_WDISP16:
427      return &_bfd_sparc_elf_howto_table[R_SPARC_WDISP16];
428
429    case BFD_RELOC_SPARC_WDISP19:
430      return &_bfd_sparc_elf_howto_table[R_SPARC_WDISP19];
431
432    case BFD_RELOC_SPARC_7:
433      return &_bfd_sparc_elf_howto_table[R_SPARC_7];
434
435    case BFD_RELOC_SPARC_5:
436      return &_bfd_sparc_elf_howto_table[R_SPARC_5];
437
438    case BFD_RELOC_SPARC_6:
439      return &_bfd_sparc_elf_howto_table[R_SPARC_6];
440
441    case BFD_RELOC_SPARC_DISP64:
442      return &_bfd_sparc_elf_howto_table[R_SPARC_DISP64];
443
444    case BFD_RELOC_SPARC_PLT64:
445      return &_bfd_sparc_elf_howto_table[R_SPARC_PLT64];
446
447    case BFD_RELOC_SPARC_HIX22:
448      return &_bfd_sparc_elf_howto_table[R_SPARC_HIX22];
449
450    case BFD_RELOC_SPARC_LOX10:
451      return &_bfd_sparc_elf_howto_table[R_SPARC_LOX10];
452
453    case BFD_RELOC_SPARC_H44:
454      return &_bfd_sparc_elf_howto_table[R_SPARC_H44];
455
456    case BFD_RELOC_SPARC_M44:
457      return &_bfd_sparc_elf_howto_table[R_SPARC_M44];
458
459    case BFD_RELOC_SPARC_L44:
460      return &_bfd_sparc_elf_howto_table[R_SPARC_L44];
461
462    case BFD_RELOC_SPARC_REGISTER:
463      return &_bfd_sparc_elf_howto_table[R_SPARC_REGISTER];
464
465    case BFD_RELOC_SPARC_UA64:
466      return &_bfd_sparc_elf_howto_table[R_SPARC_UA64];
467
468    case BFD_RELOC_SPARC_UA16:
469      return &_bfd_sparc_elf_howto_table[R_SPARC_UA16];
470
471    case BFD_RELOC_SPARC_TLS_GD_HI22:
472      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_GD_HI22];
473
474    case BFD_RELOC_SPARC_TLS_GD_LO10:
475      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_GD_LO10];
476
477    case BFD_RELOC_SPARC_TLS_GD_ADD:
478      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_GD_ADD];
479
480    case BFD_RELOC_SPARC_TLS_GD_CALL:
481      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_GD_CALL];
482
483    case BFD_RELOC_SPARC_TLS_LDM_HI22:
484      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_LDM_HI22];
485
486    case BFD_RELOC_SPARC_TLS_LDM_LO10:
487      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_LDM_LO10];
488
489    case BFD_RELOC_SPARC_TLS_LDM_ADD:
490      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_LDM_ADD];
491
492    case BFD_RELOC_SPARC_TLS_LDM_CALL:
493      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_LDM_CALL];
494
495    case BFD_RELOC_SPARC_TLS_LDO_HIX22:
496      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_LDO_HIX22];
497
498    case BFD_RELOC_SPARC_TLS_LDO_LOX10:
499      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_LDO_LOX10];
500
501    case BFD_RELOC_SPARC_TLS_LDO_ADD:
502      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_LDO_ADD];
503
504    case BFD_RELOC_SPARC_TLS_IE_HI22:
505      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_IE_HI22];
506
507    case BFD_RELOC_SPARC_TLS_IE_LO10:
508      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_IE_LO10];
509
510    case BFD_RELOC_SPARC_TLS_IE_LD:
511      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_IE_LD];
512
513    case BFD_RELOC_SPARC_TLS_IE_LDX:
514      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_IE_LDX];
515
516    case BFD_RELOC_SPARC_TLS_IE_ADD:
517      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_IE_ADD];
518
519    case BFD_RELOC_SPARC_TLS_LE_HIX22:
520      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_LE_HIX22];
521
522    case BFD_RELOC_SPARC_TLS_LE_LOX10:
523      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_LE_LOX10];
524
525    case BFD_RELOC_SPARC_TLS_DTPMOD32:
526      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_DTPMOD32];
527
528    case BFD_RELOC_SPARC_TLS_DTPMOD64:
529      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_DTPMOD64];
530
531    case BFD_RELOC_SPARC_TLS_DTPOFF32:
532      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_DTPOFF32];
533
534    case BFD_RELOC_SPARC_TLS_DTPOFF64:
535      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_DTPOFF64];
536
537    case BFD_RELOC_SPARC_TLS_TPOFF32:
538      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_TPOFF32];
539
540    case BFD_RELOC_SPARC_TLS_TPOFF64:
541      return &_bfd_sparc_elf_howto_table[R_SPARC_TLS_TPOFF64];
542
543    case BFD_RELOC_SPARC_GOTDATA_HIX22:
544      return &_bfd_sparc_elf_howto_table[R_SPARC_GOTDATA_HIX22];
545
546    case BFD_RELOC_SPARC_GOTDATA_LOX10:
547      return &_bfd_sparc_elf_howto_table[R_SPARC_GOTDATA_LOX10];
548
549    case BFD_RELOC_SPARC_GOTDATA_OP_HIX22:
550      return &_bfd_sparc_elf_howto_table[R_SPARC_GOTDATA_OP_HIX22];
551
552    case BFD_RELOC_SPARC_GOTDATA_OP_LOX10:
553      return &_bfd_sparc_elf_howto_table[R_SPARC_GOTDATA_OP_LOX10];
554
555    case BFD_RELOC_SPARC_GOTDATA_OP:
556      return &_bfd_sparc_elf_howto_table[R_SPARC_GOTDATA_OP];
557
558    case BFD_RELOC_SPARC_H34:
559      return &_bfd_sparc_elf_howto_table[R_SPARC_H34];
560
561    case BFD_RELOC_SPARC_SIZE32:
562      return &_bfd_sparc_elf_howto_table[R_SPARC_SIZE32];
563
564    case BFD_RELOC_SPARC_SIZE64:
565      return &_bfd_sparc_elf_howto_table[R_SPARC_SIZE64];
566
567    case BFD_RELOC_SPARC_WDISP10:
568      return &_bfd_sparc_elf_howto_table[R_SPARC_WDISP10];
569
570    case BFD_RELOC_SPARC_JMP_IREL:
571      return &sparc_jmp_irel_howto;
572
573    case BFD_RELOC_SPARC_IRELATIVE:
574      return &sparc_irelative_howto;
575
576    case BFD_RELOC_VTABLE_INHERIT:
577      return &sparc_vtinherit_howto;
578
579    case BFD_RELOC_VTABLE_ENTRY:
580      return &sparc_vtentry_howto;
581
582    case BFD_RELOC_SPARC_REV32:
583      return &sparc_rev32_howto;
584
585    default:
586      break;
587    }
588  /* xgettext:c-format */
589  _bfd_error_handler (_("%pB: unsupported relocation type %#x"), abfd, (int) code);
590  bfd_set_error (bfd_error_bad_value);
591  return NULL;
592}
593
594reloc_howto_type *
595_bfd_sparc_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
596				  const char *r_name)
597{
598  unsigned int i;
599
600  for (i = 0; i < ARRAY_SIZE (_bfd_sparc_elf_howto_table); i++)
601    if (_bfd_sparc_elf_howto_table[i].name != NULL
602	&& strcasecmp (_bfd_sparc_elf_howto_table[i].name, r_name) == 0)
603      return &_bfd_sparc_elf_howto_table[i];
604
605  if (strcasecmp (sparc_vtinherit_howto.name, r_name) == 0)
606    return &sparc_vtinherit_howto;
607  if (strcasecmp (sparc_vtentry_howto.name, r_name) == 0)
608    return &sparc_vtentry_howto;
609  if (strcasecmp (sparc_rev32_howto.name, r_name) == 0)
610    return &sparc_rev32_howto;
611
612  return NULL;
613}
614
615reloc_howto_type *
616_bfd_sparc_elf_info_to_howto_ptr (bfd *abfd ATTRIBUTE_UNUSED,
617				  unsigned int r_type)
618{
619  switch (r_type)
620    {
621    case R_SPARC_JMP_IREL:
622      return &sparc_jmp_irel_howto;
623
624    case R_SPARC_IRELATIVE:
625      return &sparc_irelative_howto;
626
627    case R_SPARC_GNU_VTINHERIT:
628      return &sparc_vtinherit_howto;
629
630    case R_SPARC_GNU_VTENTRY:
631      return &sparc_vtentry_howto;
632
633    case R_SPARC_REV32:
634      return &sparc_rev32_howto;
635
636    default:
637      if (r_type >= (unsigned int) R_SPARC_max_std)
638	{
639	  _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
640			      abfd, r_type);
641	  bfd_set_error (bfd_error_bad_value);
642	  return NULL;
643	}
644      return &_bfd_sparc_elf_howto_table[r_type];
645    }
646}
647
648/* Both 32-bit and 64-bit sparc encode this in an identical manner,
649   so just take advantage of that.  */
650#define SPARC_ELF_R_TYPE(r_info)	\
651	((r_info) & 0xff)
652
653bool
654_bfd_sparc_elf_info_to_howto (bfd *abfd, arelent *cache_ptr,
655			      Elf_Internal_Rela *dst)
656{
657  unsigned int r_type = SPARC_ELF_R_TYPE (dst->r_info);
658
659  if ((cache_ptr->howto = _bfd_sparc_elf_info_to_howto_ptr (abfd, r_type)) == NULL)
660    {
661      bfd_set_error (bfd_error_bad_value);
662      return false;
663    }
664  return true;
665}
666
667
668/* The nop opcode we use.  */
669#define SPARC_NOP 0x01000000
670
671#define SPARC_INSN_BYTES	4
672
673/* Is an undefined weak symbol resolved to 0 ?
674   Reference to an undefined weak symbol is resolved to 0 when
675   building an executable if it isn't dynamic and
676   1. Has non-GOT/non-PLT relocations in text section.
677   Or
678   2. Has no GOT/PLT relocation.  */
679#define UNDEFINED_WEAK_RESOLVED_TO_ZERO(INFO, EH)		\
680  ((EH)->elf.root.type == bfd_link_hash_undefweak		\
681   && bfd_link_executable (INFO)				\
682   && (_bfd_sparc_elf_hash_table (INFO)->interp == NULL		\
683       || !(INFO)->dynamic_undefined_weak			\
684       || (EH)->has_non_got_reloc				\
685       || !(EH)->has_got_reloc))
686
687/* SPARC ELF linker hash entry.  */
688
689struct _bfd_sparc_elf_link_hash_entry
690{
691  struct elf_link_hash_entry elf;
692
693#define GOT_UNKNOWN     0
694#define GOT_NORMAL      1
695#define GOT_TLS_GD      2
696#define GOT_TLS_IE      3
697  unsigned char tls_type;
698
699  /* Symbol has GOT or PLT relocations.  */
700  unsigned int has_got_reloc : 1;
701
702  /* Symbol has old-style, non-relaxable GOT relocations.  */
703  unsigned int has_old_style_got_reloc : 1;
704
705  /* Symbol has non-GOT/non-PLT relocations in text sections.  */
706  unsigned int has_non_got_reloc : 1;
707
708};
709
710#define _bfd_sparc_elf_hash_entry(ent) ((struct _bfd_sparc_elf_link_hash_entry *)(ent))
711
712struct _bfd_sparc_elf_obj_tdata
713{
714  struct elf_obj_tdata root;
715
716  /* tls_type for each local got entry.  */
717  char *local_got_tls_type;
718
719  /* TRUE if TLS GD relocs has been seen for this object.  */
720  bool has_tlsgd;
721};
722
723#define _bfd_sparc_elf_tdata(abfd) \
724  ((struct _bfd_sparc_elf_obj_tdata *) (abfd)->tdata.any)
725
726#define _bfd_sparc_elf_local_got_tls_type(abfd) \
727  (_bfd_sparc_elf_tdata (abfd)->local_got_tls_type)
728
729#define is_sparc_elf(bfd)				\
730  (bfd_get_flavour (bfd) == bfd_target_elf_flavour	\
731   && elf_tdata (bfd) != NULL				\
732   && elf_object_id (bfd) == SPARC_ELF_DATA)
733
734bool
735_bfd_sparc_elf_mkobject (bfd *abfd)
736{
737  return bfd_elf_allocate_object (abfd, sizeof (struct _bfd_sparc_elf_obj_tdata),
738				  SPARC_ELF_DATA);
739}
740
741static void
742sparc_put_word_32 (bfd *abfd, bfd_vma val, void *ptr)
743{
744  bfd_put_32 (abfd, val, ptr);
745}
746
747static void
748sparc_put_word_64 (bfd *abfd, bfd_vma val, void *ptr)
749{
750  bfd_put_64 (abfd, val, ptr);
751}
752
753static void
754sparc_elf_append_rela (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
755{
756  const struct elf_backend_data *bed;
757  bfd_byte *loc;
758
759  bed = get_elf_backend_data (abfd);
760  BFD_ASSERT (s->reloc_count * bed->s->sizeof_rela < s->size);
761  loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rela);
762  bed->s->swap_reloca_out (abfd, rel, loc);
763}
764
765static bfd_vma
766sparc_elf_r_info_64 (Elf_Internal_Rela *in_rel ATTRIBUTE_UNUSED,
767		     bfd_vma rel_index ATTRIBUTE_UNUSED,
768		     bfd_vma type ATTRIBUTE_UNUSED)
769{
770  return ELF64_R_INFO (rel_index,
771		       (in_rel ?
772			ELF64_R_TYPE_INFO (ELF64_R_TYPE_DATA (in_rel->r_info),
773					   type) : type));
774}
775
776static bfd_vma
777sparc_elf_r_info_32 (Elf_Internal_Rela *in_rel ATTRIBUTE_UNUSED,
778		     bfd_vma rel_index, bfd_vma type)
779{
780  return ELF32_R_INFO (rel_index, type);
781}
782
783static bfd_vma
784sparc_elf_r_symndx_64 (bfd_vma r_info)
785{
786  bfd_vma r_symndx = ELF32_R_SYM (r_info);
787  return (r_symndx >> 24);
788}
789
790static bfd_vma
791sparc_elf_r_symndx_32 (bfd_vma r_info)
792{
793  return ELF32_R_SYM (r_info);
794}
795
796/* PLT/GOT stuff */
797
798#define PLT32_ENTRY_SIZE 12
799#define PLT32_HEADER_SIZE	(4 * PLT32_ENTRY_SIZE)
800
801/* The first four entries in a 32-bit procedure linkage table are reserved,
802   and the initial contents are unimportant (we zero them out).
803   Subsequent entries look like this.  See the SVR4 ABI SPARC
804   supplement to see how this works.  */
805
806/* sethi %hi(.-.plt0),%g1.  We fill in the address later.  */
807#define PLT32_ENTRY_WORD0 0x03000000
808/* b,a .plt0.  We fill in the offset later.  */
809#define PLT32_ENTRY_WORD1 0x30800000
810/* nop.  */
811#define PLT32_ENTRY_WORD2 SPARC_NOP
812
813static int
814sparc32_plt_entry_build (bfd *output_bfd, asection *splt, bfd_vma offset,
815			 bfd_vma max ATTRIBUTE_UNUSED,
816			 bfd_vma *r_offset)
817{
818      bfd_put_32 (output_bfd,
819		  PLT32_ENTRY_WORD0 + offset,
820		  splt->contents + offset);
821      bfd_put_32 (output_bfd,
822		  (PLT32_ENTRY_WORD1
823		   + (((- (offset + 4)) >> 2) & 0x3fffff)),
824		  splt->contents + offset + 4);
825      bfd_put_32 (output_bfd, (bfd_vma) PLT32_ENTRY_WORD2,
826		  splt->contents + offset + 8);
827
828      *r_offset = offset;
829
830      return offset / PLT32_ENTRY_SIZE - 4;
831}
832
833/* Both the headers and the entries are icache aligned.  */
834#define PLT64_ENTRY_SIZE	32
835#define PLT64_HEADER_SIZE	(4 * PLT64_ENTRY_SIZE)
836#define PLT64_LARGE_THRESHOLD	32768
837
838static int
839sparc64_plt_entry_build (bfd *output_bfd, asection *splt, bfd_vma offset,
840			 bfd_vma max, bfd_vma *r_offset)
841{
842  unsigned char *entry = splt->contents + offset;
843  const unsigned int nop = SPARC_NOP;
844  int plt_index;
845
846  if (offset < (PLT64_LARGE_THRESHOLD * PLT64_ENTRY_SIZE))
847    {
848      unsigned int sethi, ba;
849
850      *r_offset = offset;
851
852      plt_index = (offset / PLT64_ENTRY_SIZE);
853
854      sethi = 0x03000000 | (plt_index * PLT64_ENTRY_SIZE);
855      ba = 0x30680000
856	| (((splt->contents + PLT64_ENTRY_SIZE) - (entry + 4)) / 4 & 0x7ffff);
857
858      bfd_put_32 (output_bfd, (bfd_vma) sethi, entry);
859      bfd_put_32 (output_bfd, (bfd_vma) ba,    entry + 4);
860      bfd_put_32 (output_bfd, (bfd_vma) nop,   entry + 8);
861      bfd_put_32 (output_bfd, (bfd_vma) nop,   entry + 12);
862      bfd_put_32 (output_bfd, (bfd_vma) nop,   entry + 16);
863      bfd_put_32 (output_bfd, (bfd_vma) nop,   entry + 20);
864      bfd_put_32 (output_bfd, (bfd_vma) nop,   entry + 24);
865      bfd_put_32 (output_bfd, (bfd_vma) nop,   entry + 28);
866    }
867  else
868    {
869      unsigned char *ptr;
870      unsigned int ldx;
871      int block, last_block, ofs, last_ofs, chunks_this_block;
872      const int insn_chunk_size = (6 * 4);
873      const int ptr_chunk_size = (1 * 8);
874      const int entries_per_block = 160;
875      const int block_size = entries_per_block * (insn_chunk_size
876						  + ptr_chunk_size);
877
878      /* Entries 32768 and higher are grouped into blocks of 160.
879	 The blocks are further subdivided into 160 sequences of
880	 6 instructions and 160 pointers.  If a block does not require
881	 the full 160 entries, let's say it requires N, then there
882	 will be N sequences of 6 instructions and N pointers.  */
883
884      offset -= (PLT64_LARGE_THRESHOLD * PLT64_ENTRY_SIZE);
885      max -= (PLT64_LARGE_THRESHOLD * PLT64_ENTRY_SIZE);
886
887      block = offset / block_size;
888      last_block = max / block_size;
889      if (block != last_block)
890	{
891	  chunks_this_block = 160;
892	}
893      else
894	{
895	  last_ofs = max % block_size;
896	  chunks_this_block = last_ofs / (insn_chunk_size + ptr_chunk_size);
897	}
898
899      ofs = offset % block_size;
900
901      plt_index = (PLT64_LARGE_THRESHOLD +
902	       (block * 160) +
903	       (ofs / insn_chunk_size));
904
905      ptr = splt->contents
906	+ (PLT64_LARGE_THRESHOLD * PLT64_ENTRY_SIZE)
907	+ (block * block_size)
908	+ (chunks_this_block * insn_chunk_size)
909	+ (ofs / insn_chunk_size) * ptr_chunk_size;
910
911      *r_offset = (bfd_vma) (ptr - splt->contents);
912
913      ldx = 0xc25be000 | ((ptr - (entry+4)) & 0x1fff);
914
915      /* mov %o7,%g5
916	 call .+8
917	 nop
918	 ldx [%o7+P],%g1
919	 jmpl %o7+%g1,%g1
920	 mov %g5,%o7  */
921      bfd_put_32 (output_bfd, (bfd_vma) 0x8a10000f, entry);
922      bfd_put_32 (output_bfd, (bfd_vma) 0x40000002, entry + 4);
923      bfd_put_32 (output_bfd, (bfd_vma) SPARC_NOP,  entry + 8);
924      bfd_put_32 (output_bfd, (bfd_vma) ldx,	    entry + 12);
925      bfd_put_32 (output_bfd, (bfd_vma) 0x83c3c001, entry + 16);
926      bfd_put_32 (output_bfd, (bfd_vma) 0x9e100005, entry + 20);
927
928      bfd_put_64 (output_bfd, (bfd_vma) (splt->contents - (entry + 4)), ptr);
929    }
930
931  return plt_index - 4;
932}
933
934/* The format of the first PLT entry in a VxWorks executable.  */
935static const bfd_vma sparc_vxworks_exec_plt0_entry[] =
936  {
937    0x05000000,	/* sethi  %hi(_GLOBAL_OFFSET_TABLE_+8), %g2 */
938    0x8410a000,	/* or     %g2, %lo(_GLOBAL_OFFSET_TABLE_+8), %g2 */
939    0xc4008000,	/* ld     [ %g2 ], %g2 */
940    0x81c08000,	/* jmp    %g2 */
941    0x01000000	/* nop */
942  };
943
944/* The format of subsequent PLT entries.  */
945static const bfd_vma sparc_vxworks_exec_plt_entry[] =
946  {
947    0x03000000,	/* sethi  %hi(_GLOBAL_OFFSET_TABLE_+f@got), %g1 */
948    0x82106000,	/* or     %g1, %lo(_GLOBAL_OFFSET_TABLE_+f@got), %g1 */
949    0xc2004000,	/* ld     [ %g1 ], %g1 */
950    0x81c04000,	/* jmp    %g1 */
951    0x01000000,	/* nop */
952    0x03000000,	/* sethi  %hi(f@pltindex), %g1 */
953    0x10800000,	/* b      _PLT_resolve */
954    0x82106000	/* or     %g1, %lo(f@pltindex), %g1 */
955  };
956
957/* The format of the first PLT entry in a VxWorks shared object.  */
958static const bfd_vma sparc_vxworks_shared_plt0_entry[] =
959  {
960    0xc405e008,	/* ld     [ %l7 + 8 ], %g2 */
961    0x81c08000,	/* jmp    %g2 */
962    0x01000000	/* nop */
963  };
964
965/* The format of subsequent PLT entries.  */
966static const bfd_vma sparc_vxworks_shared_plt_entry[] =
967  {
968    0x03000000,	/* sethi  %hi(f@got), %g1 */
969    0x82106000,	/* or     %g1, %lo(f@got), %g1 */
970    0xc205c001,	/* ld     [ %l7 + %g1 ], %g1 */
971    0x81c04000,	/* jmp    %g1 */
972    0x01000000,	/* nop */
973    0x03000000,	/* sethi  %hi(f@pltindex), %g1 */
974    0x10800000,	/* b      _PLT_resolve */
975    0x82106000	/* or     %g1, %lo(f@pltindex), %g1 */
976  };
977
978#define SPARC_ELF_PUT_WORD(htab, bfd, val, ptr)	\
979	htab->put_word(bfd, val, ptr)
980
981#define SPARC_ELF_R_INFO(htab, in_rel, index, type)	\
982	htab->r_info(in_rel, index, type)
983
984#define SPARC_ELF_R_SYMNDX(htab, r_info)	\
985	htab->r_symndx(r_info)
986
987#define SPARC_ELF_WORD_BYTES(htab)	\
988	htab->bytes_per_word
989
990#define SPARC_ELF_RELA_BYTES(htab)	\
991	htab->bytes_per_rela
992
993#define SPARC_ELF_DTPOFF_RELOC(htab)	\
994	htab->dtpoff_reloc
995
996#define SPARC_ELF_DTPMOD_RELOC(htab)	\
997	htab->dtpmod_reloc
998
999#define SPARC_ELF_TPOFF_RELOC(htab)	\
1000	htab->tpoff_reloc
1001
1002#define SPARC_ELF_BUILD_PLT_ENTRY(htab, obfd, splt, off, max, r_off) \
1003	htab->build_plt_entry (obfd, splt, off, max, r_off)
1004
1005/* Create an entry in an SPARC ELF linker hash table.  */
1006
1007static struct bfd_hash_entry *
1008link_hash_newfunc (struct bfd_hash_entry *entry,
1009		   struct bfd_hash_table *table, const char *string)
1010{
1011  /* Allocate the structure if it has not already been allocated by a
1012     subclass.  */
1013  if (entry == NULL)
1014    {
1015      entry = bfd_hash_allocate (table,
1016				 sizeof (struct _bfd_sparc_elf_link_hash_entry));
1017      if (entry == NULL)
1018	return entry;
1019    }
1020
1021  /* Call the allocation method of the superclass.  */
1022  entry = _bfd_elf_link_hash_newfunc (entry, table, string);
1023  if (entry != NULL)
1024    {
1025      struct _bfd_sparc_elf_link_hash_entry *eh;
1026
1027      eh = (struct _bfd_sparc_elf_link_hash_entry *) entry;
1028      eh->tls_type = GOT_UNKNOWN;
1029      eh->has_got_reloc = 0;
1030      eh->has_non_got_reloc = 0;
1031    }
1032
1033  return entry;
1034}
1035
1036/* The name of the dynamic interpreter.  This is put in the .interp
1037   section.  */
1038
1039#define ELF32_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
1040#define ELF64_DYNAMIC_INTERPRETER "/usr/lib/sparcv9/ld.so.1"
1041
1042/* Compute a hash of a local hash entry.  We use elf_link_hash_entry
1043   for local symbol so that we can handle local STT_GNU_IFUNC symbols
1044   as global symbol.  We reuse indx and dynstr_index for local symbol
1045   hash since they aren't used by global symbols in this backend.  */
1046
1047static hashval_t
1048elf_sparc_local_htab_hash (const void *ptr)
1049{
1050  struct elf_link_hash_entry *h
1051    = (struct elf_link_hash_entry *) ptr;
1052  return ELF_LOCAL_SYMBOL_HASH (h->indx, h->dynstr_index);
1053}
1054
1055/* Compare local hash entries.  */
1056
1057static int
1058elf_sparc_local_htab_eq (const void *ptr1, const void *ptr2)
1059{
1060  struct elf_link_hash_entry *h1
1061     = (struct elf_link_hash_entry *) ptr1;
1062  struct elf_link_hash_entry *h2
1063    = (struct elf_link_hash_entry *) ptr2;
1064
1065  return h1->indx == h2->indx && h1->dynstr_index == h2->dynstr_index;
1066}
1067
1068/* Find and/or create a hash entry for local symbol.  */
1069
1070static struct elf_link_hash_entry *
1071elf_sparc_get_local_sym_hash (struct _bfd_sparc_elf_link_hash_table *htab,
1072			      bfd *abfd, const Elf_Internal_Rela *rel,
1073			      bool create)
1074{
1075  struct _bfd_sparc_elf_link_hash_entry e, *ret;
1076  asection *sec = abfd->sections;
1077  unsigned long r_symndx;
1078  hashval_t h;
1079  void **slot;
1080
1081  r_symndx = SPARC_ELF_R_SYMNDX (htab, rel->r_info);
1082  h = ELF_LOCAL_SYMBOL_HASH (sec->id, r_symndx);
1083
1084  e.elf.indx = sec->id;
1085  e.elf.dynstr_index = r_symndx;
1086  slot = htab_find_slot_with_hash (htab->loc_hash_table, &e, h,
1087				   create ? INSERT : NO_INSERT);
1088
1089  if (!slot)
1090    return NULL;
1091
1092  if (*slot)
1093    {
1094      ret = (struct _bfd_sparc_elf_link_hash_entry *) *slot;
1095      return &ret->elf;
1096    }
1097
1098  ret = (struct _bfd_sparc_elf_link_hash_entry *)
1099	objalloc_alloc ((struct objalloc *) htab->loc_hash_memory,
1100			sizeof (struct _bfd_sparc_elf_link_hash_entry));
1101  if (ret)
1102    {
1103      memset (ret, 0, sizeof (*ret));
1104      ret->elf.indx = sec->id;
1105      ret->elf.dynstr_index = r_symndx;
1106      ret->elf.dynindx = -1;
1107      ret->elf.plt.offset = (bfd_vma) -1;
1108      ret->elf.got.offset = (bfd_vma) -1;
1109      *slot = ret;
1110    }
1111  return &ret->elf;
1112}
1113
1114/* Destroy a SPARC ELF linker hash table.  */
1115
1116static void
1117_bfd_sparc_elf_link_hash_table_free (bfd *obfd)
1118{
1119  struct _bfd_sparc_elf_link_hash_table *htab
1120    = (struct _bfd_sparc_elf_link_hash_table *) obfd->link.hash;
1121
1122  if (htab->loc_hash_table)
1123    htab_delete (htab->loc_hash_table);
1124  if (htab->loc_hash_memory)
1125    objalloc_free ((struct objalloc *) htab->loc_hash_memory);
1126  _bfd_elf_link_hash_table_free (obfd);
1127}
1128
1129/* Create a SPARC ELF linker hash table.  */
1130
1131struct bfd_link_hash_table *
1132_bfd_sparc_elf_link_hash_table_create (bfd *abfd)
1133{
1134  struct _bfd_sparc_elf_link_hash_table *ret;
1135  size_t amt = sizeof (struct _bfd_sparc_elf_link_hash_table);
1136
1137  ret = (struct _bfd_sparc_elf_link_hash_table *) bfd_zmalloc (amt);
1138  if (ret == NULL)
1139    return NULL;
1140
1141  if (ABI_64_P (abfd))
1142    {
1143      ret->put_word = sparc_put_word_64;
1144      ret->r_info = sparc_elf_r_info_64;
1145      ret->r_symndx = sparc_elf_r_symndx_64;
1146      ret->dtpoff_reloc = R_SPARC_TLS_DTPOFF64;
1147      ret->dtpmod_reloc = R_SPARC_TLS_DTPMOD64;
1148      ret->tpoff_reloc = R_SPARC_TLS_TPOFF64;
1149      ret->word_align_power = 3;
1150      ret->align_power_max = 4;
1151      ret->bytes_per_word = 8;
1152      ret->bytes_per_rela = sizeof (Elf64_External_Rela);
1153      ret->dynamic_interpreter = ELF64_DYNAMIC_INTERPRETER;
1154      ret->dynamic_interpreter_size = sizeof ELF64_DYNAMIC_INTERPRETER;
1155
1156      ret->build_plt_entry = sparc64_plt_entry_build;
1157      ret->plt_header_size = PLT64_HEADER_SIZE;
1158      ret->plt_entry_size = PLT64_ENTRY_SIZE;
1159    }
1160  else
1161    {
1162      ret->put_word = sparc_put_word_32;
1163      ret->r_info = sparc_elf_r_info_32;
1164      ret->r_symndx = sparc_elf_r_symndx_32;
1165      ret->dtpoff_reloc = R_SPARC_TLS_DTPOFF32;
1166      ret->dtpmod_reloc = R_SPARC_TLS_DTPMOD32;
1167      ret->tpoff_reloc = R_SPARC_TLS_TPOFF32;
1168      ret->word_align_power = 2;
1169      ret->align_power_max = 3;
1170      ret->bytes_per_word = 4;
1171      ret->bytes_per_rela = sizeof (Elf32_External_Rela);
1172      ret->dynamic_interpreter = ELF32_DYNAMIC_INTERPRETER;
1173      ret->dynamic_interpreter_size = sizeof ELF32_DYNAMIC_INTERPRETER;
1174
1175      ret->build_plt_entry = sparc32_plt_entry_build;
1176      ret->plt_header_size = PLT32_HEADER_SIZE;
1177      ret->plt_entry_size = PLT32_ENTRY_SIZE;
1178    }
1179
1180  if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd, link_hash_newfunc,
1181				      sizeof (struct _bfd_sparc_elf_link_hash_entry),
1182				      SPARC_ELF_DATA))
1183    {
1184      free (ret);
1185      return NULL;
1186    }
1187
1188  ret->loc_hash_table = htab_try_create (1024,
1189					 elf_sparc_local_htab_hash,
1190					 elf_sparc_local_htab_eq,
1191					 NULL);
1192  ret->loc_hash_memory = objalloc_create ();
1193  if (!ret->loc_hash_table || !ret->loc_hash_memory)
1194    {
1195      _bfd_sparc_elf_link_hash_table_free (abfd);
1196      return NULL;
1197    }
1198  ret->elf.root.hash_table_free = _bfd_sparc_elf_link_hash_table_free;
1199
1200  return &ret->elf.root;
1201}
1202
1203/* Create .plt, .rela.plt, .got, .rela.got, .dynbss, and
1204   .rela.bss sections in DYNOBJ, and set up shortcuts to them in our
1205   hash table.  */
1206
1207bool
1208_bfd_sparc_elf_create_dynamic_sections (bfd *dynobj,
1209					struct bfd_link_info *info)
1210{
1211  struct _bfd_sparc_elf_link_hash_table *htab;
1212
1213  htab = _bfd_sparc_elf_hash_table (info);
1214  BFD_ASSERT (htab != NULL);
1215
1216  if (!_bfd_elf_create_dynamic_sections (dynobj, info))
1217    return false;
1218
1219  if (htab->elf.target_os == is_vxworks)
1220    {
1221      if (!elf_vxworks_create_dynamic_sections (dynobj, info, &htab->srelplt2))
1222	return false;
1223      if (bfd_link_pic (info))
1224	{
1225	  htab->plt_header_size
1226	    = 4 * ARRAY_SIZE (sparc_vxworks_shared_plt0_entry);
1227	  htab->plt_entry_size
1228	    = 4 * ARRAY_SIZE (sparc_vxworks_shared_plt_entry);
1229	}
1230      else
1231	{
1232	  htab->plt_header_size
1233	    = 4 * ARRAY_SIZE (sparc_vxworks_exec_plt0_entry);
1234	  htab->plt_entry_size
1235	    = 4 * ARRAY_SIZE (sparc_vxworks_exec_plt_entry);
1236	}
1237    }
1238
1239  if (!htab->elf.splt || !htab->elf.srelplt || !htab->elf.sdynbss
1240      || (!bfd_link_pic (info) && !htab->elf.srelbss))
1241    abort ();
1242
1243  return true;
1244}
1245
1246static bool
1247create_ifunc_sections (bfd *abfd, struct bfd_link_info *info)
1248{
1249  const struct elf_backend_data *bed = get_elf_backend_data (abfd);
1250  struct elf_link_hash_table *htab = elf_hash_table (info);
1251  flagword flags, pltflags;
1252  asection *s;
1253
1254  if (htab->irelifunc != NULL || htab->iplt != NULL)
1255    return true;
1256
1257  flags = bed->dynamic_sec_flags;
1258  pltflags = flags | SEC_ALLOC | SEC_CODE | SEC_LOAD;
1259
1260  s = bfd_make_section_with_flags (abfd, ".iplt", pltflags);
1261  if (s == NULL
1262      || !bfd_set_section_alignment (s, bed->plt_alignment))
1263    return false;
1264  htab->iplt = s;
1265
1266  s = bfd_make_section_with_flags (abfd, ".rela.iplt",
1267				   flags | SEC_READONLY);
1268  if (s == NULL
1269      || !bfd_set_section_alignment (s, bed->s->log_file_align))
1270    return false;
1271  htab->irelplt = s;
1272
1273  return true;
1274}
1275
1276/* Copy the extra info we tack onto an elf_link_hash_entry.  */
1277
1278void
1279_bfd_sparc_elf_copy_indirect_symbol (struct bfd_link_info *info,
1280				     struct elf_link_hash_entry *dir,
1281				     struct elf_link_hash_entry *ind)
1282{
1283  struct _bfd_sparc_elf_link_hash_entry *edir, *eind;
1284
1285  edir = (struct _bfd_sparc_elf_link_hash_entry *) dir;
1286  eind = (struct _bfd_sparc_elf_link_hash_entry *) ind;
1287
1288  if (ind->root.type == bfd_link_hash_indirect && dir->got.refcount <= 0)
1289    {
1290      edir->tls_type = eind->tls_type;
1291      eind->tls_type = GOT_UNKNOWN;
1292    }
1293
1294  /* Copy has_got_reloc and has_non_got_reloc.  */
1295  edir->has_got_reloc |= eind->has_got_reloc;
1296  edir->has_non_got_reloc |= eind->has_non_got_reloc;
1297
1298  _bfd_elf_link_hash_copy_indirect (info, dir, ind);
1299}
1300
1301static int
1302sparc_elf_tls_transition (struct bfd_link_info *info, bfd *abfd,
1303			  int r_type, int is_local)
1304{
1305  if (! ABI_64_P (abfd)
1306      && r_type == R_SPARC_TLS_GD_HI22
1307      && ! _bfd_sparc_elf_tdata (abfd)->has_tlsgd)
1308    return R_SPARC_REV32;
1309
1310  if (!bfd_link_executable (info))
1311    return r_type;
1312
1313  switch (r_type)
1314    {
1315    case R_SPARC_TLS_GD_HI22:
1316      return is_local ? R_SPARC_TLS_LE_HIX22 : R_SPARC_TLS_IE_HI22;
1317    case R_SPARC_TLS_GD_LO10:
1318      return is_local ? R_SPARC_TLS_LE_LOX10 : R_SPARC_TLS_IE_LO10;
1319    case R_SPARC_TLS_LDM_HI22:
1320      return R_SPARC_TLS_LE_HIX22;
1321    case R_SPARC_TLS_LDM_LO10:
1322      return R_SPARC_TLS_LE_LOX10;
1323    case R_SPARC_TLS_IE_HI22:
1324      return is_local ? R_SPARC_TLS_LE_HIX22 : r_type;
1325    case R_SPARC_TLS_IE_LO10:
1326      return is_local ? R_SPARC_TLS_LE_LOX10 : r_type;
1327    }
1328
1329  return r_type;
1330}
1331
1332/* Look through the relocs for a section during the first phase, and
1333   allocate space in the global offset table or procedure linkage
1334   table.  */
1335
1336bool
1337_bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
1338			     asection *sec, const Elf_Internal_Rela *relocs)
1339{
1340  struct _bfd_sparc_elf_link_hash_table *htab;
1341  Elf_Internal_Shdr *symtab_hdr;
1342  struct elf_link_hash_entry **sym_hashes;
1343  const Elf_Internal_Rela *rel;
1344  const Elf_Internal_Rela *rel_end;
1345  asection *sreloc;
1346  int num_relocs;
1347  bool checked_tlsgd = false;
1348
1349  if (bfd_link_relocatable (info))
1350    return true;
1351
1352  htab = _bfd_sparc_elf_hash_table (info);
1353  BFD_ASSERT (htab != NULL);
1354  symtab_hdr = &elf_symtab_hdr (abfd);
1355  sym_hashes = elf_sym_hashes (abfd);
1356
1357  sreloc = NULL;
1358
1359  if (ABI_64_P (abfd))
1360    num_relocs = NUM_SHDR_ENTRIES (_bfd_elf_single_rel_hdr (sec));
1361  else
1362    num_relocs = sec->reloc_count;
1363
1364  BFD_ASSERT (is_sparc_elf (abfd) || num_relocs == 0);
1365
1366  if (htab->elf.dynobj == NULL)
1367    htab->elf.dynobj = abfd;
1368  if (!create_ifunc_sections (htab->elf.dynobj, info))
1369    return false;
1370
1371  rel_end = relocs + num_relocs;
1372  for (rel = relocs; rel < rel_end; rel++)
1373    {
1374      unsigned int r_type;
1375      unsigned int r_symndx;
1376      struct elf_link_hash_entry *h;
1377      struct _bfd_sparc_elf_link_hash_entry *eh;
1378      Elf_Internal_Sym *isym;
1379
1380      r_symndx = SPARC_ELF_R_SYMNDX (htab, rel->r_info);
1381      r_type = SPARC_ELF_R_TYPE (rel->r_info);
1382
1383      if (r_symndx >= NUM_SHDR_ENTRIES (symtab_hdr))
1384	{
1385	  /* xgettext:c-format */
1386	  _bfd_error_handler (_("%pB: bad symbol index: %d"), abfd, r_symndx);
1387	  return false;
1388	}
1389
1390      isym = NULL;
1391      if (r_symndx < symtab_hdr->sh_info)
1392	{
1393	  /* A local symbol.  */
1394	  isym = bfd_sym_from_r_symndx (&htab->elf.sym_cache, abfd,
1395					r_symndx);
1396	  if (isym == NULL)
1397	    return false;
1398
1399	  /* Check relocation against local STT_GNU_IFUNC symbol.  */
1400	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
1401	    {
1402	      h = elf_sparc_get_local_sym_hash (htab, abfd, rel, true);
1403	      if (h == NULL)
1404		return false;
1405
1406	      /* Fake a STT_GNU_IFUNC symbol.  */
1407	      h->type = STT_GNU_IFUNC;
1408	      h->def_regular = 1;
1409	      h->ref_regular = 1;
1410	      h->forced_local = 1;
1411	      h->root.type = bfd_link_hash_defined;
1412	    }
1413	  else
1414	    h = NULL;
1415	}
1416      else
1417	{
1418	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
1419	  while (h->root.type == bfd_link_hash_indirect
1420		 || h->root.type == bfd_link_hash_warning)
1421	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
1422	}
1423
1424      if (h && h->type == STT_GNU_IFUNC && h->def_regular)
1425	{
1426	  h->ref_regular = 1;
1427	  h->plt.refcount += 1;
1428	}
1429
1430      /* Compatibility with old R_SPARC_REV32 reloc conflicting
1431	 with R_SPARC_TLS_GD_HI22.  */
1432      if (! ABI_64_P (abfd) && ! checked_tlsgd)
1433	switch (r_type)
1434	  {
1435	  case R_SPARC_TLS_GD_HI22:
1436	    {
1437	      const Elf_Internal_Rela *relt;
1438
1439	      for (relt = rel + 1; relt < rel_end; relt++)
1440		if (ELF32_R_TYPE (relt->r_info) == R_SPARC_TLS_GD_LO10
1441		    || ELF32_R_TYPE (relt->r_info) == R_SPARC_TLS_GD_ADD
1442		    || ELF32_R_TYPE (relt->r_info) == R_SPARC_TLS_GD_CALL)
1443		  break;
1444	      checked_tlsgd = true;
1445	      _bfd_sparc_elf_tdata (abfd)->has_tlsgd = relt < rel_end;
1446	    }
1447	    break;
1448	  case R_SPARC_TLS_GD_LO10:
1449	  case R_SPARC_TLS_GD_ADD:
1450	  case R_SPARC_TLS_GD_CALL:
1451	    checked_tlsgd = true;
1452	    _bfd_sparc_elf_tdata (abfd)->has_tlsgd = true;
1453	    break;
1454	  }
1455
1456      r_type = sparc_elf_tls_transition (info, abfd, r_type, h == NULL);
1457      eh = (struct _bfd_sparc_elf_link_hash_entry *) h;
1458
1459      switch (r_type)
1460	{
1461	case R_SPARC_TLS_LDM_HI22:
1462	case R_SPARC_TLS_LDM_LO10:
1463	  htab->tls_ldm_got.refcount += 1;
1464	  if (eh != NULL)
1465	    eh->has_got_reloc = 1;
1466	  break;
1467
1468	case R_SPARC_TLS_LE_HIX22:
1469	case R_SPARC_TLS_LE_LOX10:
1470	  if (!bfd_link_executable (info))
1471	    goto r_sparc_plt32;
1472	  break;
1473
1474	case R_SPARC_TLS_IE_HI22:
1475	case R_SPARC_TLS_IE_LO10:
1476	  if (!bfd_link_executable (info))
1477	    info->flags |= DF_STATIC_TLS;
1478	  /* Fall through */
1479
1480	case R_SPARC_GOT10:
1481	case R_SPARC_GOT13:
1482	case R_SPARC_GOT22:
1483	case R_SPARC_GOTDATA_HIX22:
1484	case R_SPARC_GOTDATA_LOX10:
1485	case R_SPARC_GOTDATA_OP_HIX22:
1486	case R_SPARC_GOTDATA_OP_LOX10:
1487	case R_SPARC_TLS_GD_HI22:
1488	case R_SPARC_TLS_GD_LO10:
1489	  /* This symbol requires a global offset table entry.  */
1490	  {
1491	    int tls_type, old_tls_type;
1492
1493	    switch (r_type)
1494	      {
1495	      case R_SPARC_TLS_GD_HI22:
1496	      case R_SPARC_TLS_GD_LO10:
1497		tls_type = GOT_TLS_GD;
1498		break;
1499	      case R_SPARC_TLS_IE_HI22:
1500	      case R_SPARC_TLS_IE_LO10:
1501		tls_type = GOT_TLS_IE;
1502		break;
1503	      default:
1504		tls_type = GOT_NORMAL;
1505		break;
1506	      }
1507
1508	    if (h != NULL)
1509	      {
1510		h->got.refcount += 1;
1511		old_tls_type = _bfd_sparc_elf_hash_entry(h)->tls_type;
1512	      }
1513	    else
1514	      {
1515		bfd_signed_vma *local_got_refcounts;
1516
1517		/* This is a global offset table entry for a local symbol.  */
1518		local_got_refcounts = elf_local_got_refcounts (abfd);
1519		if (local_got_refcounts == NULL)
1520		  {
1521		    bfd_size_type size;
1522
1523		    size = symtab_hdr->sh_info;
1524		    size *= (sizeof (bfd_signed_vma) + sizeof(char));
1525		    local_got_refcounts = ((bfd_signed_vma *)
1526					   bfd_zalloc (abfd, size));
1527		    if (local_got_refcounts == NULL)
1528		      return false;
1529		    elf_local_got_refcounts (abfd) = local_got_refcounts;
1530		    _bfd_sparc_elf_local_got_tls_type (abfd)
1531		      = (char *) (local_got_refcounts + symtab_hdr->sh_info);
1532		  }
1533
1534		if (r_type != R_SPARC_GOTDATA_OP_HIX22
1535		    && r_type != R_SPARC_GOTDATA_OP_LOX10)
1536		  local_got_refcounts[r_symndx] += 1;
1537
1538		old_tls_type
1539		  = _bfd_sparc_elf_local_got_tls_type (abfd) [r_symndx];
1540	      }
1541
1542	    /* If a TLS symbol is accessed using IE at least once, there is no
1543	       point in using the dynamic model for it.  */
1544	    if (old_tls_type != tls_type)
1545	      {
1546		if (old_tls_type == GOT_UNKNOWN)
1547		  ;
1548		else if (old_tls_type == GOT_TLS_GD && tls_type == GOT_TLS_IE)
1549		  ;
1550		else if (old_tls_type == GOT_TLS_IE && tls_type == GOT_TLS_GD)
1551		  tls_type = old_tls_type;
1552		else
1553		  {
1554		    _bfd_error_handler
1555		      /* xgettext:c-format */
1556		      (_("%pB: `%s' accessed both as normal and thread local symbol"),
1557		       abfd, h ? h->root.root.string : "<local>");
1558		    return false;
1559		  }
1560
1561		if (h != NULL)
1562		  _bfd_sparc_elf_hash_entry (h)->tls_type = tls_type;
1563		else
1564		  _bfd_sparc_elf_local_got_tls_type (abfd) [r_symndx] = tls_type;
1565	      }
1566	  }
1567
1568	  if (!htab->elf.sgot
1569	      && !_bfd_elf_create_got_section (htab->elf.dynobj, info))
1570	    return false;
1571
1572	  if (eh != NULL)
1573	    {
1574	      eh->has_got_reloc = 1;
1575	      if (r_type == R_SPARC_GOT10
1576		  || r_type == R_SPARC_GOT13
1577		  || r_type == R_SPARC_GOT22)
1578		eh->has_old_style_got_reloc = 1;
1579	    }
1580	  break;
1581
1582	case R_SPARC_TLS_GD_CALL:
1583	case R_SPARC_TLS_LDM_CALL:
1584	  if (bfd_link_executable (info))
1585	    break;
1586
1587	  /* Essentially R_SPARC_WPLT30 relocs against __tls_get_addr.  */
1588	  h = (struct elf_link_hash_entry *)
1589	       bfd_link_hash_lookup (info->hash, "__tls_get_addr", false,
1590				     false, true);
1591	  BFD_ASSERT (h != NULL);
1592	  /* Fall through */
1593
1594	case R_SPARC_WPLT30:
1595	case R_SPARC_PLT32:
1596	case R_SPARC_PLT64:
1597	case R_SPARC_HIPLT22:
1598	case R_SPARC_LOPLT10:
1599	case R_SPARC_PCPLT32:
1600	case R_SPARC_PCPLT22:
1601	case R_SPARC_PCPLT10:
1602	  /* This symbol requires a procedure linkage table entry.
1603	     We actually build the entry in adjust_dynamic_symbol,
1604	     because this might be a case of linking PIC code without
1605	     linking in any dynamic objects, in which case we don't
1606	     need to generate a procedure linkage table after all.  */
1607
1608	  if (h == NULL)
1609	    {
1610	      if (! ABI_64_P (abfd))
1611		{
1612		  /* The Solaris native assembler will generate a WPLT30
1613		     reloc for a local symbol if you assemble a call from
1614		     one section to another when using -K pic.  We treat
1615		     it as WDISP30.  */
1616		  if (r_type == R_SPARC_PLT32)
1617		    goto r_sparc_plt32;
1618		  break;
1619		}
1620	      /* PR 7027: We need similar behaviour for 64-bit binaries.  */
1621	      else if (r_type == R_SPARC_WPLT30)
1622		break;
1623
1624	      /* It does not make sense to have a procedure linkage
1625		 table entry for a local symbol.  */
1626	      bfd_set_error (bfd_error_bad_value);
1627	      return false;
1628	    }
1629
1630	  h->needs_plt = 1;
1631
1632	  if (r_type == R_SPARC_PLT32 || r_type == R_SPARC_PLT64)
1633	    goto r_sparc_plt32;
1634
1635	  h->plt.refcount += 1;
1636
1637	  eh = (struct _bfd_sparc_elf_link_hash_entry *) h;
1638	  eh->has_got_reloc = 1;
1639	  break;
1640
1641	case R_SPARC_PC10:
1642	case R_SPARC_PC22:
1643	case R_SPARC_PC_HH22:
1644	case R_SPARC_PC_HM10:
1645	case R_SPARC_PC_LM22:
1646	  if (h != NULL)
1647	    h->non_got_ref = 1;
1648
1649	  if (h != NULL
1650	      && strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0)
1651	    break;
1652	  /* Fall through.  */
1653
1654	case R_SPARC_DISP8:
1655	case R_SPARC_DISP16:
1656	case R_SPARC_DISP32:
1657	case R_SPARC_DISP64:
1658	case R_SPARC_WDISP30:
1659	case R_SPARC_WDISP22:
1660	case R_SPARC_WDISP19:
1661	case R_SPARC_WDISP16:
1662	case R_SPARC_WDISP10:
1663	case R_SPARC_8:
1664	case R_SPARC_16:
1665	case R_SPARC_32:
1666	case R_SPARC_HI22:
1667	case R_SPARC_22:
1668	case R_SPARC_13:
1669	case R_SPARC_LO10:
1670	case R_SPARC_UA16:
1671	case R_SPARC_UA32:
1672	case R_SPARC_10:
1673	case R_SPARC_11:
1674	case R_SPARC_64:
1675	case R_SPARC_OLO10:
1676	case R_SPARC_HH22:
1677	case R_SPARC_HM10:
1678	case R_SPARC_LM22:
1679	case R_SPARC_7:
1680	case R_SPARC_5:
1681	case R_SPARC_6:
1682	case R_SPARC_HIX22:
1683	case R_SPARC_LOX10:
1684	case R_SPARC_H44:
1685	case R_SPARC_M44:
1686	case R_SPARC_L44:
1687	case R_SPARC_H34:
1688	case R_SPARC_UA64:
1689	  if (h != NULL)
1690	    h->non_got_ref = 1;
1691
1692	  if (eh != NULL && (sec->flags & SEC_CODE) != 0)
1693	    eh->has_non_got_reloc = 1;
1694
1695	r_sparc_plt32:
1696	  if (h != NULL && !bfd_link_pic (info))
1697	    {
1698	      /* We may need a .plt entry if the function this reloc
1699		 refers to is in a shared lib.  */
1700	      h->plt.refcount += 1;
1701	    }
1702
1703	  /* If we are creating a shared library, and this is a reloc
1704	     against a global symbol, or a non PC relative reloc
1705	     against a local symbol, then we need to copy the reloc
1706	     into the shared library.  However, if we are linking with
1707	     -Bsymbolic, we do not need to copy a reloc against a
1708	     global symbol which is defined in an object we are
1709	     including in the link (i.e., DEF_REGULAR is set).  At
1710	     this point we have not seen all the input files, so it is
1711	     possible that DEF_REGULAR is not set now but will be set
1712	     later (it is never cleared).  In case of a weak definition,
1713	     DEF_REGULAR may be cleared later by a strong definition in
1714	     a shared library.  We account for that possibility below by
1715	     storing information in the relocs_copied field of the hash
1716	     table entry.  A similar situation occurs when creating
1717	     shared libraries and symbol visibility changes render the
1718	     symbol local.
1719
1720	     If on the other hand, we are creating an executable, we
1721	     may need to keep relocations for symbols satisfied by a
1722	     dynamic library if we manage to avoid copy relocs for the
1723	     symbol.  */
1724	  if ((bfd_link_pic (info)
1725	       && (sec->flags & SEC_ALLOC) != 0
1726	       && (! _bfd_sparc_elf_howto_table[r_type].pc_relative
1727		   || (h != NULL
1728		       && (! SYMBOLIC_BIND (info, h)
1729			   || h->root.type == bfd_link_hash_defweak
1730			   || !h->def_regular))))
1731	      || (!bfd_link_pic (info)
1732		  && (sec->flags & SEC_ALLOC) != 0
1733		  && h != NULL
1734		  && (h->root.type == bfd_link_hash_defweak
1735		      || !h->def_regular))
1736	      || (!bfd_link_pic (info)
1737		  && h != NULL
1738		  && h->type == STT_GNU_IFUNC))
1739	    {
1740	      struct elf_dyn_relocs *p;
1741	      struct elf_dyn_relocs **head;
1742
1743	      /* When creating a shared object, we must copy these
1744		 relocs into the output file.  We create a reloc
1745		 section in dynobj and make room for the reloc.  */
1746	      if (sreloc == NULL)
1747		{
1748		  sreloc = _bfd_elf_make_dynamic_reloc_section
1749		    (sec, htab->elf.dynobj, htab->word_align_power,
1750		     abfd, /*rela?*/ true);
1751
1752		  if (sreloc == NULL)
1753		    return false;
1754		}
1755
1756	      /* If this is a global symbol, we count the number of
1757		 relocations we need for this symbol.  */
1758	      if (h != NULL)
1759		head = &h->dyn_relocs;
1760	      else
1761		{
1762		  /* Track dynamic relocs needed for local syms too.
1763		     We really need local syms available to do this
1764		     easily.  Oh well.  */
1765		  asection *s;
1766		  void *vpp;
1767
1768		  BFD_ASSERT (isym != NULL);
1769		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
1770		  if (s == NULL)
1771		    s = sec;
1772
1773		  vpp = &elf_section_data (s)->local_dynrel;
1774		  head = (struct elf_dyn_relocs **) vpp;
1775		}
1776
1777	      p = *head;
1778	      if (p == NULL || p->sec != sec)
1779		{
1780		  size_t amt = sizeof *p;
1781		  p = ((struct elf_dyn_relocs *)
1782		       bfd_alloc (htab->elf.dynobj, amt));
1783		  if (p == NULL)
1784		    return false;
1785		  p->next = *head;
1786		  *head = p;
1787		  p->sec = sec;
1788		  p->count = 0;
1789		  p->pc_count = 0;
1790		}
1791
1792	      p->count += 1;
1793	      if (_bfd_sparc_elf_howto_table[r_type].pc_relative)
1794		p->pc_count += 1;
1795	    }
1796
1797	  break;
1798
1799	case R_SPARC_GNU_VTINHERIT:
1800	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
1801	    return false;
1802	  break;
1803
1804	case R_SPARC_GNU_VTENTRY:
1805	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
1806	    return false;
1807	  break;
1808
1809	case R_SPARC_REGISTER:
1810	  /* Nothing to do.  */
1811	  break;
1812
1813	default:
1814	  break;
1815	}
1816    }
1817
1818  return true;
1819}
1820
1821asection *
1822_bfd_sparc_elf_gc_mark_hook (asection *sec,
1823			     struct bfd_link_info *info,
1824			     Elf_Internal_Rela *rel,
1825			     struct elf_link_hash_entry *h,
1826			     Elf_Internal_Sym *sym)
1827{
1828  if (h != NULL)
1829    switch (SPARC_ELF_R_TYPE (rel->r_info))
1830      {
1831      case R_SPARC_GNU_VTINHERIT:
1832      case R_SPARC_GNU_VTENTRY:
1833	return NULL;
1834      }
1835
1836  if (!bfd_link_executable (info))
1837    {
1838      switch (SPARC_ELF_R_TYPE (rel->r_info))
1839	{
1840	case R_SPARC_TLS_GD_CALL:
1841	case R_SPARC_TLS_LDM_CALL:
1842	  /* This reloc implicitly references __tls_get_addr.  We know
1843	     another reloc will reference the same symbol as the one
1844	     on this reloc, so the real symbol and section will be
1845	     gc marked when processing the other reloc.  That lets
1846	     us handle __tls_get_addr here.  */
1847	  h = elf_link_hash_lookup (elf_hash_table (info), "__tls_get_addr",
1848				    false, false, true);
1849	  BFD_ASSERT (h != NULL);
1850	  h->mark = 1;
1851	  if (h->is_weakalias)
1852	    weakdef (h)->mark = 1;
1853	  sym = NULL;
1854	}
1855    }
1856
1857  return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
1858}
1859
1860static Elf_Internal_Rela *
1861sparc_elf_find_reloc_at_ofs (Elf_Internal_Rela *rel,
1862			     Elf_Internal_Rela *relend,
1863			     bfd_vma offset)
1864{
1865  while (rel < relend)
1866    {
1867      if (rel->r_offset == offset)
1868	return rel;
1869      rel++;
1870    }
1871  return NULL;
1872}
1873
1874/* Remove undefined weak symbol from the dynamic symbol table if it
1875   is resolved to 0.   */
1876
1877bool
1878_bfd_sparc_elf_fixup_symbol (struct bfd_link_info *info,
1879			     struct elf_link_hash_entry *h)
1880{
1881  if (h->dynindx != -1
1882      && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info,
1883					  _bfd_sparc_elf_hash_entry (h)))
1884    {
1885      h->dynindx = -1;
1886      _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
1887			      h->dynstr_index);
1888    }
1889  return true;
1890}
1891
1892/* Adjust a symbol defined by a dynamic object and referenced by a
1893   regular object.  The current definition is in some section of the
1894   dynamic object, but we're not including those sections.  We have to
1895   change the definition to something the rest of the link can
1896   understand.  */
1897
1898bool
1899_bfd_sparc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
1900				     struct elf_link_hash_entry *h)
1901{
1902  struct _bfd_sparc_elf_link_hash_table *htab;
1903  asection *s, *srel;
1904
1905  htab = _bfd_sparc_elf_hash_table (info);
1906  BFD_ASSERT (htab != NULL);
1907
1908  /* Make sure we know what is going on here.  */
1909  BFD_ASSERT (htab->elf.dynobj != NULL
1910	      && (h->needs_plt
1911		  || h->type == STT_GNU_IFUNC
1912		  || h->is_weakalias
1913		  || (h->def_dynamic
1914		      && h->ref_regular
1915		      && !h->def_regular)));
1916
1917  /* If this is a function, put it in the procedure linkage table.  We
1918     will fill in the contents of the procedure linkage table later
1919     (although we could actually do it here).  The STT_NOTYPE
1920     condition is a hack specifically for the Oracle libraries
1921     delivered for Solaris; for some inexplicable reason, they define
1922     some of their functions as STT_NOTYPE when they really should be
1923     STT_FUNC.  */
1924  if (h->type == STT_FUNC
1925      || h->type == STT_GNU_IFUNC
1926      || h->needs_plt
1927      || (h->type == STT_NOTYPE
1928	  && (h->root.type == bfd_link_hash_defined
1929	      || h->root.type == bfd_link_hash_defweak)
1930	  && (h->root.u.def.section->flags & SEC_CODE) != 0))
1931    {
1932      if (h->plt.refcount <= 0
1933	  || (h->type != STT_GNU_IFUNC
1934	      && (SYMBOL_CALLS_LOCAL (info, h)
1935		  || (h->root.type == bfd_link_hash_undefweak
1936		      && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT))))
1937	{
1938	  /* This case can occur if we saw a WPLT30 reloc in an input
1939	     file, but the symbol was never referred to by a dynamic
1940	     object, or if all references were garbage collected.  In
1941	     such a case, we don't actually need to build a procedure
1942	     linkage table, and we can just do a WDISP30 reloc instead.  */
1943	  h->plt.offset = (bfd_vma) -1;
1944	  h->needs_plt = 0;
1945	}
1946
1947      return true;
1948    }
1949  else
1950    h->plt.offset = (bfd_vma) -1;
1951
1952  /* If this is a weak symbol, and there is a real definition, the
1953     processor independent code will have arranged for us to see the
1954     real definition first, and we can just use the same value.  */
1955  if (h->is_weakalias)
1956    {
1957      struct elf_link_hash_entry *def = weakdef (h);
1958      BFD_ASSERT (def->root.type == bfd_link_hash_defined);
1959      h->root.u.def.section = def->root.u.def.section;
1960      h->root.u.def.value = def->root.u.def.value;
1961      return true;
1962    }
1963
1964  /* This is a reference to a symbol defined by a dynamic object which
1965     is not a function.  */
1966
1967  /* If we are creating a shared library, we must presume that the
1968     only references to the symbol are via the global offset table.
1969     For such cases we need not do anything here; the relocations will
1970     be handled correctly by relocate_section.  */
1971  if (bfd_link_pic (info))
1972    return true;
1973
1974  /* If there are no references to this symbol that do not use the
1975     GOT, we don't need to generate a copy reloc.  */
1976  if (!h->non_got_ref)
1977    return true;
1978
1979  /* If -z nocopyreloc was given, we won't generate them either.  */
1980  if (info->nocopyreloc)
1981    {
1982      h->non_got_ref = 0;
1983      return true;
1984    }
1985
1986  /* If we don't find any dynamic relocs in read-only sections, then
1987     we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
1988  if (!_bfd_elf_readonly_dynrelocs (h))
1989    {
1990      h->non_got_ref = 0;
1991      return true;
1992    }
1993
1994  /* We must allocate the symbol in our .dynbss section, which will
1995     become part of the .bss section of the executable.  There will be
1996     an entry for this symbol in the .dynsym section.  The dynamic
1997     object will contain position independent code, so all references
1998     from the dynamic object to this symbol will go through the global
1999     offset table.  The dynamic linker will use the .dynsym entry to
2000     determine the address it must put in the global offset table, so
2001     both the dynamic object and the regular object will refer to the
2002     same memory location for the variable.  */
2003
2004  /* We must generate a R_SPARC_COPY reloc to tell the dynamic linker
2005     to copy the initial value out of the dynamic object and into the
2006     runtime process image.  We need to remember the offset into the
2007     .rel.bss section we are going to use.  */
2008  if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
2009    {
2010      s = htab->elf.sdynrelro;
2011      srel = htab->elf.sreldynrelro;
2012    }
2013  else
2014    {
2015      s = htab->elf.sdynbss;
2016      srel = htab->elf.srelbss;
2017    }
2018  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
2019    {
2020      srel->size += SPARC_ELF_RELA_BYTES (htab);
2021      h->needs_copy = 1;
2022    }
2023
2024  return _bfd_elf_adjust_dynamic_copy (info, h, s);
2025}
2026
2027/* Allocate space in .plt, .got and associated reloc sections for
2028   dynamic relocs.  */
2029
2030static bool
2031allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
2032{
2033  struct bfd_link_info *info;
2034  struct _bfd_sparc_elf_link_hash_table *htab;
2035  struct _bfd_sparc_elf_link_hash_entry *eh;
2036  struct elf_dyn_relocs *p;
2037  bool resolved_to_zero;
2038
2039  if (h->root.type == bfd_link_hash_indirect)
2040    return true;
2041
2042  info = (struct bfd_link_info *) inf;
2043  htab = _bfd_sparc_elf_hash_table (info);
2044  BFD_ASSERT (htab != NULL);
2045
2046  eh = (struct _bfd_sparc_elf_link_hash_entry *) h;
2047  resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
2048
2049  if ((htab->elf.dynamic_sections_created
2050       && h->plt.refcount > 0)
2051      || (h->type == STT_GNU_IFUNC
2052	  && h->def_regular
2053	  && h->ref_regular))
2054    {
2055      /* Undefined weak syms won't yet be marked as dynamic.  */
2056      if (h->root.type == bfd_link_hash_undefweak
2057	  && !resolved_to_zero
2058	  && h->dynindx == -1
2059	  && !h->forced_local)
2060	{
2061	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
2062	    return false;
2063	}
2064
2065      if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h)
2066	  || (h->type == STT_GNU_IFUNC
2067	      && h->def_regular))
2068	{
2069	  asection *s = htab->elf.splt;
2070
2071	  if (s == NULL)
2072	    s = htab->elf.iplt;
2073
2074	  /* Allocate room for the header.  */
2075	  if (s->size == 0)
2076	    {
2077	      s->size = htab->plt_header_size;
2078
2079	      /* Allocate space for the .rela.plt.unloaded relocations.  */
2080	      if (htab->elf.target_os == is_vxworks
2081		  && !bfd_link_pic (info))
2082		htab->srelplt2->size = sizeof (Elf32_External_Rela) * 2;
2083	    }
2084
2085	  /* The procedure linkage table size is bounded by the magnitude
2086	     of the offset we can describe in the entry.  */
2087	  if (s->size >= (SPARC_ELF_WORD_BYTES(htab) == 8 ?
2088			  (((bfd_vma)1 << 31) << 1) : 0x400000))
2089	    {
2090	      bfd_set_error (bfd_error_bad_value);
2091	      return false;
2092	    }
2093
2094	  if (SPARC_ELF_WORD_BYTES(htab) == 8
2095	      && s->size >= PLT64_LARGE_THRESHOLD * PLT64_ENTRY_SIZE)
2096	    {
2097	      bfd_vma off = s->size - PLT64_LARGE_THRESHOLD * PLT64_ENTRY_SIZE;
2098
2099
2100	      off = (off % (160 * PLT64_ENTRY_SIZE)) / PLT64_ENTRY_SIZE;
2101
2102	      h->plt.offset = (s->size - (off * 8));
2103	    }
2104	  else
2105	    h->plt.offset = s->size;
2106
2107	  /* If this symbol is not defined in a regular file, and we are
2108	     not generating a shared library, then set the symbol to this
2109	     location in the .plt.  This is required to make function
2110	     pointers compare as equal between the normal executable and
2111	     the shared library.  */
2112	  if (! bfd_link_pic (info)
2113	      && !h->def_regular)
2114	    {
2115	      h->root.u.def.section = s;
2116	      h->root.u.def.value = h->plt.offset;
2117	    }
2118
2119	  /* Make room for this entry.  */
2120	  s->size += htab->plt_entry_size;
2121
2122	  /* There should be no PLT relocations against resolved undefined
2123	     weak symbols in the executable.  */
2124	  if (!resolved_to_zero)
2125	    {
2126	      /* We also need to make an entry in the .rela.plt section.  */
2127	      if (s == htab->elf.splt)
2128		htab->elf.srelplt->size += SPARC_ELF_RELA_BYTES (htab);
2129	      else
2130		htab->elf.irelplt->size += SPARC_ELF_RELA_BYTES (htab);
2131	    }
2132
2133	  if (htab->elf.target_os == is_vxworks)
2134	    {
2135	      /* Allocate space for the .got.plt entry.  */
2136	      htab->elf.sgotplt->size += 4;
2137
2138	      /* ...and for the .rela.plt.unloaded relocations.  */
2139	      if (!bfd_link_pic (info))
2140		htab->srelplt2->size += sizeof (Elf32_External_Rela) * 3;
2141	    }
2142	}
2143      else
2144	{
2145	  h->plt.offset = (bfd_vma) -1;
2146	  h->needs_plt = 0;
2147	}
2148    }
2149  else
2150    {
2151      h->plt.offset = (bfd_vma) -1;
2152      h->needs_plt = 0;
2153    }
2154
2155  /* If R_SPARC_TLS_IE_{HI22,LO10} symbol is now local to the binary,
2156     make it a R_SPARC_TLS_LE_{HI22,LO10} requiring no TLS entry.  */
2157  if (h->got.refcount > 0
2158      && bfd_link_executable (info)
2159      && h->dynindx == -1
2160      && _bfd_sparc_elf_hash_entry(h)->tls_type == GOT_TLS_IE)
2161    h->got.offset = (bfd_vma) -1;
2162  else if (h->got.refcount > 0)
2163    {
2164      asection *s;
2165      bool dyn;
2166      int tls_type = _bfd_sparc_elf_hash_entry(h)->tls_type;
2167
2168      /* Undefined weak syms won't yet be marked as dynamic.  */
2169      if (h->root.type == bfd_link_hash_undefweak
2170	  && !resolved_to_zero
2171	  && h->dynindx == -1
2172	  && !h->forced_local)
2173	{
2174	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
2175	    return false;
2176	}
2177
2178      s = htab->elf.sgot;
2179      h->got.offset = s->size;
2180      s->size += SPARC_ELF_WORD_BYTES (htab);
2181      /* R_SPARC_TLS_GD_HI{22,LO10} needs 2 consecutive GOT slots.  */
2182      if (tls_type == GOT_TLS_GD)
2183	s->size += SPARC_ELF_WORD_BYTES (htab);
2184      dyn = htab->elf.dynamic_sections_created;
2185      /* R_SPARC_TLS_IE_{HI22,LO10} needs one dynamic relocation,
2186	 R_SPARC_TLS_GD_{HI22,LO10} needs one if local and two if global.  */
2187      if ((tls_type == GOT_TLS_GD && h->dynindx == -1)
2188	  || tls_type == GOT_TLS_IE
2189	  || h->type == STT_GNU_IFUNC)
2190	htab->elf.srelgot->size += SPARC_ELF_RELA_BYTES (htab);
2191      else if (tls_type == GOT_TLS_GD)
2192	htab->elf.srelgot->size += 2 * SPARC_ELF_RELA_BYTES (htab);
2193      else if ((WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
2194		/* Even if the symbol isn't dynamic, we may generate a
2195		   reloc for the dynamic linker in PIC mode.  */
2196		|| (h->dynindx == -1
2197		    && !h->forced_local
2198		    && h->root.type != bfd_link_hash_undefweak
2199		    && bfd_link_pic (info)))
2200	       /* No dynamic relocations are needed against resolved
2201		  undefined weak symbols in an executable.  */
2202	       && !(h->root.type == bfd_link_hash_undefweak
2203		    && (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
2204			|| resolved_to_zero)))
2205	htab->elf.srelgot->size += SPARC_ELF_RELA_BYTES (htab);
2206    }
2207  else
2208    h->got.offset = (bfd_vma) -1;
2209
2210  if (h->dyn_relocs == NULL)
2211    return true;
2212
2213  /* In the shared -Bsymbolic case, discard space allocated for
2214     dynamic pc-relative relocs against symbols which turn out to be
2215     defined in regular objects.  For the normal shared case, discard
2216     space for pc-relative relocs that have become local due to symbol
2217     visibility changes.  */
2218
2219  if (bfd_link_pic (info))
2220    {
2221      if (SYMBOL_CALLS_LOCAL (info, h))
2222	{
2223	  struct elf_dyn_relocs **pp;
2224
2225	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
2226	    {
2227	      p->count -= p->pc_count;
2228	      p->pc_count = 0;
2229	      if (p->count == 0)
2230		*pp = p->next;
2231	      else
2232		pp = &p->next;
2233	    }
2234	}
2235
2236      if (htab->elf.target_os == is_vxworks)
2237	{
2238	  struct elf_dyn_relocs **pp;
2239
2240	  for (pp = &h->dyn_relocs; (p = *pp) != NULL; )
2241	    {
2242	      if (strcmp (p->sec->output_section->name, ".tls_vars") == 0)
2243		*pp = p->next;
2244	      else
2245		pp = &p->next;
2246	    }
2247	}
2248
2249      /* Also discard relocs on undefined weak syms with non-default
2250	 visibility or in PIE.  */
2251      if (h->dyn_relocs != NULL
2252	  && h->root.type == bfd_link_hash_undefweak)
2253	{
2254	  /* An undefined weak symbol is never
2255	     bound locally in a shared library.  */
2256
2257	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
2258	      || resolved_to_zero)
2259	    {
2260	      if (h->non_got_ref)
2261		{
2262		  /* Keep dynamic non-GOT/non-PLT relocation so that we
2263		     can branch to 0 without PLT.  */
2264		  struct elf_dyn_relocs **pp;
2265
2266		  for (pp = &h->dyn_relocs; (p = *pp) != NULL;)
2267		    if (p->pc_count == 0)
2268		      *pp = p->next;
2269		    else
2270		      {
2271			/* Remove other relocations.  */
2272			p->count = p->pc_count;
2273			pp = &p->next;
2274		      }
2275
2276		  if (h->dyn_relocs != NULL)
2277		    {
2278		      /* Make sure undefined weak symbols are output
2279			 as dynamic symbols in PIEs for dynamic non-GOT
2280			 non-PLT reloations.  */
2281		      if (! bfd_elf_link_record_dynamic_symbol (info, h))
2282			return false;
2283		    }
2284		}
2285	      else
2286		h->dyn_relocs = NULL;
2287	    }
2288
2289	  /* Make sure undefined weak symbols are output as a dynamic
2290	     symbol in PIEs.  */
2291	  else if (h->dynindx == -1
2292		   && !h->forced_local)
2293	    {
2294	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
2295		return false;
2296	    }
2297	}
2298    }
2299  else
2300    {
2301      /* For the non-shared case, discard space for relocs against
2302	 symbols which turn out to need copy relocs or are not
2303	 dynamic.  */
2304
2305      if ((!h->non_got_ref
2306	   || (h->root.type == bfd_link_hash_undefweak
2307	       && !resolved_to_zero))
2308	  && ((h->def_dynamic
2309	       && !h->def_regular)
2310	      || (htab->elf.dynamic_sections_created
2311		  && (h->root.type == bfd_link_hash_undefweak
2312		      || h->root.type == bfd_link_hash_undefined))))
2313	{
2314	  /* Undefined weak syms won't yet be marked as dynamic.  */
2315	  if (h->root.type == bfd_link_hash_undefweak
2316	      && !resolved_to_zero
2317	      && h->dynindx == -1
2318	      && !h->forced_local)
2319	    {
2320	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
2321		return false;
2322	    }
2323
2324	  /* If that succeeded, we know we'll be keeping all the
2325	     relocs.  */
2326	  if (h->dynindx != -1)
2327	    goto keep;
2328	}
2329
2330      h->dyn_relocs = NULL;
2331
2332    keep: ;
2333    }
2334
2335  /* Finally, allocate space.  */
2336  for (p = h->dyn_relocs; p != NULL; p = p->next)
2337    {
2338      asection *sreloc = elf_section_data (p->sec)->sreloc;
2339      sreloc->size += p->count * SPARC_ELF_RELA_BYTES (htab);
2340    }
2341
2342  return true;
2343}
2344
2345/* Allocate space in .plt, .got and associated reloc sections for
2346   local dynamic relocs.  */
2347
2348static int
2349allocate_local_dynrelocs (void **slot, void *inf)
2350{
2351  struct elf_link_hash_entry *h
2352    = (struct elf_link_hash_entry *) *slot;
2353
2354  if (h->type != STT_GNU_IFUNC
2355      || !h->def_regular
2356      || !h->ref_regular
2357      || !h->forced_local
2358      || h->root.type != bfd_link_hash_defined)
2359    abort ();
2360
2361  return allocate_dynrelocs (h, inf);
2362}
2363
2364/* Return true if the dynamic symbol for a given section should be
2365   omitted when creating a shared library.  */
2366
2367bool
2368_bfd_sparc_elf_omit_section_dynsym (bfd *output_bfd,
2369				    struct bfd_link_info *info,
2370				    asection *p)
2371{
2372  /* We keep the .got section symbol so that explicit relocations
2373     against the _GLOBAL_OFFSET_TABLE_ symbol emitted in PIC mode
2374     can be turned into relocations against the .got symbol.  */
2375  if (strcmp (p->name, ".got") == 0)
2376    return false;
2377
2378  return _bfd_elf_omit_section_dynsym_default (output_bfd, info, p);
2379}
2380
2381/* Set the sizes of the dynamic sections.  */
2382
2383bool
2384_bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd,
2385				      struct bfd_link_info *info)
2386{
2387  struct _bfd_sparc_elf_link_hash_table *htab;
2388  bfd *dynobj;
2389  asection *s;
2390  bfd *ibfd;
2391
2392  htab = _bfd_sparc_elf_hash_table (info);
2393  BFD_ASSERT (htab != NULL);
2394  dynobj = htab->elf.dynobj;
2395  BFD_ASSERT (dynobj != NULL);
2396
2397  if (elf_hash_table (info)->dynamic_sections_created)
2398    {
2399      /* Set the contents of the .interp section to the interpreter.  */
2400      if (bfd_link_executable (info) && !info->nointerp)
2401	{
2402	  s = bfd_get_linker_section (dynobj, ".interp");
2403	  BFD_ASSERT (s != NULL);
2404	  s->size = htab->dynamic_interpreter_size;
2405	  s->contents = (unsigned char *) htab->dynamic_interpreter;
2406	  htab->interp = s;
2407	}
2408    }
2409
2410  /* Set up .got offsets for local syms, and space for local dynamic
2411     relocs.  */
2412  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
2413    {
2414      bfd_signed_vma *local_got;
2415      bfd_signed_vma *end_local_got;
2416      char *local_tls_type;
2417      bfd_size_type locsymcount;
2418      Elf_Internal_Shdr *symtab_hdr;
2419      asection *srel;
2420
2421      if (! is_sparc_elf (ibfd))
2422	continue;
2423
2424      for (s = ibfd->sections; s != NULL; s = s->next)
2425	{
2426	  struct elf_dyn_relocs *p;
2427
2428	  for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
2429	    {
2430	      if (!bfd_is_abs_section (p->sec)
2431		  && bfd_is_abs_section (p->sec->output_section))
2432		{
2433		  /* Input section has been discarded, either because
2434		     it is a copy of a linkonce section or due to
2435		     linker script /DISCARD/, so we'll be discarding
2436		     the relocs too.  */
2437		}
2438	      else if (htab->elf.target_os == is_vxworks
2439		       && strcmp (p->sec->output_section->name,
2440				  ".tls_vars") == 0)
2441		{
2442		  /* Relocations in vxworks .tls_vars sections are
2443		     handled specially by the loader.  */
2444		}
2445	      else if (p->count != 0)
2446		{
2447		  srel = elf_section_data (p->sec)->sreloc;
2448		  if (!htab->elf.dynamic_sections_created)
2449		    srel = htab->elf.irelplt;
2450		  srel->size += p->count * SPARC_ELF_RELA_BYTES (htab);
2451		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
2452		    {
2453		      info->flags |= DF_TEXTREL;
2454		      info->callbacks->minfo (_("%pB: dynamic relocation in read-only section `%pA'\n"),
2455					      p->sec->owner, p->sec);
2456		    }
2457		}
2458	    }
2459	}
2460
2461      local_got = elf_local_got_refcounts (ibfd);
2462      if (!local_got)
2463	continue;
2464
2465      symtab_hdr = &elf_symtab_hdr (ibfd);
2466      locsymcount = symtab_hdr->sh_info;
2467      end_local_got = local_got + locsymcount;
2468      local_tls_type = _bfd_sparc_elf_local_got_tls_type (ibfd);
2469      s = htab->elf.sgot;
2470      srel = htab->elf.srelgot;
2471      for (; local_got < end_local_got; ++local_got, ++local_tls_type)
2472	{
2473	  if (*local_got > 0)
2474	    {
2475	      *local_got = s->size;
2476	      s->size += SPARC_ELF_WORD_BYTES (htab);
2477	      if (*local_tls_type == GOT_TLS_GD)
2478		s->size += SPARC_ELF_WORD_BYTES (htab);
2479	      if (bfd_link_pic (info)
2480		  || *local_tls_type == GOT_TLS_GD
2481		  || *local_tls_type == GOT_TLS_IE)
2482		srel->size += SPARC_ELF_RELA_BYTES (htab);
2483	    }
2484	  else
2485	    *local_got = (bfd_vma) -1;
2486	}
2487    }
2488
2489  if (htab->tls_ldm_got.refcount > 0)
2490    {
2491      /* Allocate 2 got entries and 1 dynamic reloc for
2492	 R_SPARC_TLS_LDM_{HI22,LO10} relocs.  */
2493      htab->tls_ldm_got.offset = htab->elf.sgot->size;
2494      htab->elf.sgot->size += (2 * SPARC_ELF_WORD_BYTES (htab));
2495      htab->elf.srelgot->size += SPARC_ELF_RELA_BYTES (htab);
2496    }
2497  else
2498    htab->tls_ldm_got.offset = -1;
2499
2500  /* Allocate global sym .plt and .got entries, and space for global
2501     sym dynamic relocs.  */
2502  elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
2503
2504  /* Allocate .plt and .got entries, and space for local symbols.  */
2505  htab_traverse (htab->loc_hash_table, allocate_local_dynrelocs, info);
2506
2507  if (! ABI_64_P (output_bfd)
2508      && htab->elf.target_os != is_vxworks
2509      && elf_hash_table (info)->dynamic_sections_created)
2510    {
2511      /* Make space for the trailing nop in .plt.  */
2512      if (htab->elf.splt->size > 0)
2513	htab->elf.splt->size += 1 * SPARC_INSN_BYTES;
2514
2515      /* If the .got section is more than 0x1000 bytes, we add
2516	 0x1000 to the value of _GLOBAL_OFFSET_TABLE_, so that 13
2517	 bit relocations have a greater chance of working.
2518
2519	 FIXME: Make this optimization work for 64-bit too.  */
2520      if (htab->elf.sgot->size >= 0x1000
2521	  && elf_hash_table (info)->hgot->root.u.def.value == 0)
2522	elf_hash_table (info)->hgot->root.u.def.value = 0x1000;
2523    }
2524
2525  /* The check_relocs and adjust_dynamic_symbol entry points have
2526     determined the sizes of the various dynamic sections.  Allocate
2527     memory for them.  */
2528  for (s = dynobj->sections; s != NULL; s = s->next)
2529    {
2530      if ((s->flags & SEC_LINKER_CREATED) == 0)
2531	continue;
2532
2533      if (s == htab->elf.splt
2534	  || s == htab->elf.sgot
2535	  || s == htab->elf.sdynbss
2536	  || s == htab->elf.sdynrelro
2537	  || s == htab->elf.iplt
2538	  || s == htab->elf.sgotplt)
2539	{
2540	  /* Strip this section if we don't need it; see the
2541	     comment below.  */
2542	}
2543      else if (startswith (s->name, ".rela"))
2544	{
2545	  if (s->size != 0)
2546	    {
2547	      /* We use the reloc_count field as a counter if we need
2548		 to copy relocs into the output file.  */
2549	      s->reloc_count = 0;
2550	    }
2551	}
2552      else
2553	{
2554	  /* It's not one of our sections.  */
2555	  continue;
2556	}
2557
2558      if (s->size == 0)
2559	{
2560	  /* If we don't need this section, strip it from the
2561	     output file.  This is mostly to handle .rela.bss and
2562	     .rela.plt.  We must create both sections in
2563	     create_dynamic_sections, because they must be created
2564	     before the linker maps input sections to output
2565	     sections.  The linker does that before
2566	     adjust_dynamic_symbol is called, and it is that
2567	     function which decides whether anything needs to go
2568	     into these sections.  */
2569	  s->flags |= SEC_EXCLUDE;
2570	  continue;
2571	}
2572
2573      if ((s->flags & SEC_HAS_CONTENTS) == 0)
2574	continue;
2575
2576      /* Allocate memory for the section contents.  Zero the memory
2577	 for the benefit of .rela.plt, which has 4 unused entries
2578	 at the beginning, and we don't want garbage.  */
2579      s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
2580      if (s->contents == NULL)
2581	return false;
2582    }
2583
2584  if (elf_hash_table (info)->dynamic_sections_created)
2585    {
2586      /* Add some entries to the .dynamic section.  We fill in the
2587	 values later, in _bfd_sparc_elf_finish_dynamic_sections, but we
2588	 must add the entries now so that we get the correct size for
2589	 the .dynamic section.  The DT_DEBUG entry is filled in by the
2590	 dynamic linker and used by the debugger.  */
2591#define add_dynamic_entry(TAG, VAL) \
2592  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
2593
2594      if (!_bfd_elf_maybe_vxworks_add_dynamic_tags (output_bfd, info,
2595						    true))
2596	return false;
2597
2598      if (ABI_64_P (output_bfd))
2599	{
2600	  int reg;
2601	  struct _bfd_sparc_elf_app_reg * app_regs;
2602	  struct elf_strtab_hash *dynstr;
2603	  struct elf_link_hash_table *eht = elf_hash_table (info);
2604
2605	  /* Add dynamic STT_REGISTER symbols and corresponding DT_SPARC_REGISTER
2606	     entries if needed.  */
2607	  app_regs = _bfd_sparc_elf_hash_table (info)->app_regs;
2608	  dynstr = eht->dynstr;
2609
2610	  for (reg = 0; reg < 4; reg++)
2611	    if (app_regs [reg].name != NULL)
2612	      {
2613		struct elf_link_local_dynamic_entry *entry, *e;
2614
2615		if (!add_dynamic_entry (DT_SPARC_REGISTER, 0))
2616		  return false;
2617
2618		entry = (struct elf_link_local_dynamic_entry *)
2619		  bfd_hash_allocate (&info->hash->table, sizeof (*entry));
2620		if (entry == NULL)
2621		  return false;
2622
2623		/* We cheat here a little bit: the symbol will not be local, so we
2624		   put it at the end of the dynlocal linked list.  We will fix it
2625		   later on, as we have to fix other fields anyway.  */
2626		entry->isym.st_value = reg < 2 ? reg + 2 : reg + 4;
2627		entry->isym.st_size = 0;
2628		if (*app_regs [reg].name != '\0')
2629		  entry->isym.st_name
2630		    = _bfd_elf_strtab_add (dynstr, app_regs[reg].name, false);
2631		else
2632		  entry->isym.st_name = 0;
2633		entry->isym.st_other = 0;
2634		entry->isym.st_info = ELF_ST_INFO (app_regs [reg].bind,
2635						   STT_REGISTER);
2636		entry->isym.st_shndx = app_regs [reg].shndx;
2637		entry->isym.st_target_internal = 0;
2638		entry->next = NULL;
2639		entry->input_bfd = output_bfd;
2640		entry->input_indx = -1;
2641
2642		if (eht->dynlocal == NULL)
2643		  eht->dynlocal = entry;
2644		else
2645		  {
2646		    for (e = eht->dynlocal; e->next; e = e->next)
2647		      ;
2648		    e->next = entry;
2649		  }
2650		eht->dynsymcount++;
2651	      }
2652	}
2653    }
2654#undef add_dynamic_entry
2655
2656  return true;
2657}
2658
2659bool
2660_bfd_sparc_elf_new_section_hook (bfd *abfd, asection *sec)
2661{
2662  if (!sec->used_by_bfd)
2663    {
2664      struct _bfd_sparc_elf_section_data *sdata;
2665      size_t amt = sizeof (*sdata);
2666
2667      sdata = bfd_zalloc (abfd, amt);
2668      if (sdata == NULL)
2669	return false;
2670      sec->used_by_bfd = sdata;
2671    }
2672
2673  return _bfd_elf_new_section_hook (abfd, sec);
2674}
2675
2676bool
2677_bfd_sparc_elf_relax_section (bfd *abfd ATTRIBUTE_UNUSED,
2678			      struct bfd_section *section,
2679			      struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
2680			      bool *again)
2681{
2682  if (bfd_link_relocatable (link_info))
2683    (*link_info->callbacks->einfo)
2684      (_("%P%F: --relax and -r may not be used together\n"));
2685
2686  *again = false;
2687  sec_do_relax (section) = 1;
2688  return true;
2689}
2690
2691/* Return the base VMA address which should be subtracted from real addresses
2692   when resolving @dtpoff relocation.
2693   This is PT_TLS segment p_vaddr.  */
2694
2695static bfd_vma
2696dtpoff_base (struct bfd_link_info *info)
2697{
2698  /* If tls_sec is NULL, we should have signalled an error already.  */
2699  if (elf_hash_table (info)->tls_sec == NULL)
2700    return 0;
2701  return elf_hash_table (info)->tls_sec->vma;
2702}
2703
2704/* Return the relocation value for @tpoff relocation
2705   if STT_TLS virtual address is ADDRESS.  */
2706
2707static bfd_vma
2708tpoff (struct bfd_link_info *info, bfd_vma address)
2709{
2710  struct elf_link_hash_table *htab = elf_hash_table (info);
2711  const struct elf_backend_data *bed = get_elf_backend_data (info->output_bfd);
2712  bfd_vma static_tls_size;
2713
2714  /* If tls_sec is NULL, we should have signalled an error already.  */
2715  if (htab->tls_sec == NULL)
2716    return 0;
2717
2718  /* Consider special static TLS alignment requirements.  */
2719  static_tls_size = BFD_ALIGN (htab->tls_size, bed->static_tls_alignment);
2720  return address - static_tls_size - htab->tls_sec->vma;
2721}
2722
2723/* Return the relocation value for a %gdop relocation.  */
2724
2725static bfd_vma
2726gdopoff (struct bfd_link_info *info, bfd_vma address)
2727{
2728  struct elf_link_hash_table *htab = elf_hash_table (info);
2729  bfd_vma got_base;
2730
2731  got_base = (htab->hgot->root.u.def.value
2732	      + htab->hgot->root.u.def.section->output_offset
2733	      + htab->hgot->root.u.def.section->output_section->vma);
2734
2735  return address - got_base;
2736}
2737
2738/* Return whether H is local and its ADDRESS is within 4G of
2739   _GLOBAL_OFFSET_TABLE_ and thus the offset may be calculated by a
2740   sethi, xor sequence.  */
2741
2742static bool
2743gdop_relative_offset_ok (struct bfd_link_info *info,
2744			 struct elf_link_hash_entry *h,
2745			 bfd_vma address ATTRIBUTE_UNUSED)
2746{
2747  if (!SYMBOL_REFERENCES_LOCAL (info, h))
2748    return false;
2749  /* If H is undefined, ADDRESS will be zero.  We can't allow a
2750     relative offset to "zero" when producing PIEs or shared libs.
2751     Note that to get here with an undefined symbol it must also be
2752     hidden or internal visibility.  */
2753  if (bfd_link_pic (info)
2754      && h != NULL
2755      && (h->root.type == bfd_link_hash_undefweak
2756	  || h->root.type == bfd_link_hash_undefined))
2757    return false;
2758#ifdef BFD64
2759  return gdopoff (info, address) + ((bfd_vma) 1 << 32) < (bfd_vma) 2 << 32;
2760#else
2761  return true;
2762#endif
2763}
2764
2765/* Relocate a SPARC ELF section.  */
2766
2767int
2768_bfd_sparc_elf_relocate_section (bfd *output_bfd,
2769				 struct bfd_link_info *info,
2770				 bfd *input_bfd,
2771				 asection *input_section,
2772				 bfd_byte *contents,
2773				 Elf_Internal_Rela *relocs,
2774				 Elf_Internal_Sym *local_syms,
2775				 asection **local_sections)
2776{
2777  struct _bfd_sparc_elf_link_hash_table *htab;
2778  Elf_Internal_Shdr *symtab_hdr;
2779  struct elf_link_hash_entry **sym_hashes;
2780  bfd_vma *local_got_offsets;
2781  bfd_vma got_base;
2782  asection *sreloc;
2783  Elf_Internal_Rela *rel;
2784  Elf_Internal_Rela *relend;
2785  int num_relocs;
2786  bool is_vxworks_tls;
2787
2788  htab = _bfd_sparc_elf_hash_table (info);
2789  BFD_ASSERT (htab != NULL);
2790  symtab_hdr = &elf_symtab_hdr (input_bfd);
2791  sym_hashes = elf_sym_hashes (input_bfd);
2792  local_got_offsets = elf_local_got_offsets (input_bfd);
2793
2794  if (elf_hash_table (info)->hgot == NULL)
2795    got_base = 0;
2796  else
2797    got_base = elf_hash_table (info)->hgot->root.u.def.value;
2798
2799  sreloc = elf_section_data (input_section)->sreloc;
2800  /* We have to handle relocations in vxworks .tls_vars sections
2801     specially, because the dynamic loader is 'weird'.  */
2802  is_vxworks_tls = (htab->elf.target_os == is_vxworks
2803		    && bfd_link_pic (info)
2804		    && !strcmp (input_section->output_section->name,
2805				".tls_vars"));
2806
2807  rel = relocs;
2808  if (ABI_64_P (output_bfd))
2809    num_relocs = NUM_SHDR_ENTRIES (_bfd_elf_single_rel_hdr (input_section));
2810  else
2811    num_relocs = input_section->reloc_count;
2812  relend = relocs + num_relocs;
2813  for (; rel < relend; rel++)
2814    {
2815      int r_type, tls_type;
2816      reloc_howto_type *howto;
2817      unsigned long r_symndx;
2818      struct elf_link_hash_entry *h;
2819      struct _bfd_sparc_elf_link_hash_entry *eh;
2820      Elf_Internal_Sym *sym;
2821      asection *sec;
2822      bfd_vma relocation, off;
2823      bfd_reloc_status_type r;
2824      bool is_plt = false;
2825      bool unresolved_reloc;
2826      bool resolved_to_zero;
2827      bool relative_reloc;
2828
2829      r_type = SPARC_ELF_R_TYPE (rel->r_info);
2830      if (r_type == R_SPARC_GNU_VTINHERIT
2831	  || r_type == R_SPARC_GNU_VTENTRY)
2832	continue;
2833
2834      if (r_type < 0 || r_type >= (int) R_SPARC_max_std)
2835	{
2836	  bfd_set_error (bfd_error_bad_value);
2837	  return false;
2838	}
2839
2840      howto = _bfd_sparc_elf_howto_table + r_type;
2841      r_symndx = SPARC_ELF_R_SYMNDX (htab, rel->r_info);
2842      h = NULL;
2843      sym = NULL;
2844      sec = NULL;
2845      unresolved_reloc = false;
2846      if (r_symndx < symtab_hdr->sh_info)
2847	{
2848	  sym = local_syms + r_symndx;
2849	  sec = local_sections[r_symndx];
2850	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
2851
2852	  if (!bfd_link_relocatable (info)
2853	      && ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
2854	    {
2855	      /* Relocate against local STT_GNU_IFUNC symbol.  */
2856	      h = elf_sparc_get_local_sym_hash (htab, input_bfd,
2857						rel, false);
2858	      if (h == NULL)
2859		abort ();
2860
2861	      /* Set STT_GNU_IFUNC symbol value.  */
2862	      h->root.u.def.value = sym->st_value;
2863	      h->root.u.def.section = sec;
2864	    }
2865	}
2866      else
2867	{
2868	  bool warned, ignored;
2869
2870	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
2871				   r_symndx, symtab_hdr, sym_hashes,
2872				   h, sec, relocation,
2873				   unresolved_reloc, warned, ignored);
2874	  if (warned)
2875	    {
2876	      /* To avoid generating warning messages about truncated
2877		 relocations, set the relocation's address to be the same as
2878		 the start of this section.  */
2879	      if (input_section->output_section != NULL)
2880		relocation = input_section->output_section->vma;
2881	      else
2882		relocation = 0;
2883	    }
2884	}
2885
2886      if (sec != NULL && discarded_section (sec))
2887	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
2888					 rel, 1, relend, howto, 0, contents);
2889
2890      if (bfd_link_relocatable (info))
2891	continue;
2892
2893      if (h != NULL
2894	  && h->type == STT_GNU_IFUNC
2895	  && h->def_regular)
2896	{
2897	  asection *plt_sec;
2898	  const char *name;
2899
2900	  if ((input_section->flags & SEC_ALLOC) == 0
2901	      || h->plt.offset == (bfd_vma) -1)
2902	    {
2903	      /* If this is a SHT_NOTE section without SHF_ALLOC, treat
2904	         STT_GNU_IFUNC symbol as STT_FUNC.  */
2905	      if (elf_section_type (input_section) == SHT_NOTE)
2906		goto skip_ifunc;
2907
2908	      /* Dynamic relocs are not propagated for SEC_DEBUGGING
2909		 sections because such sections are not SEC_ALLOC and
2910		 thus ld.so will not process them.  */
2911	      if ((input_section->flags & SEC_ALLOC) == 0
2912		  && (input_section->flags & SEC_DEBUGGING) != 0)
2913		continue;
2914
2915	      _bfd_error_handler
2916		/* xgettext:c-format */
2917		(_("%pB(%pA+%#" PRIx64 "): "
2918		   "unresolvable %s relocation against symbol `%s'"),
2919		 input_bfd,
2920		 input_section,
2921		 (uint64_t) rel->r_offset,
2922		 howto->name,
2923		 h->root.root.string);
2924	      bfd_set_error (bfd_error_bad_value);
2925	      return false;
2926	    }
2927
2928	  plt_sec = htab->elf.splt;
2929	  if (! plt_sec)
2930	    plt_sec =htab->elf.iplt;
2931
2932	  switch (r_type)
2933	    {
2934	    case R_SPARC_GOTDATA_OP:
2935	      continue;
2936
2937	    case R_SPARC_GOTDATA_OP_HIX22:
2938	    case R_SPARC_GOTDATA_OP_LOX10:
2939	      r_type = (r_type == R_SPARC_GOTDATA_OP_HIX22
2940			? R_SPARC_GOT22
2941			: R_SPARC_GOT10);
2942	      howto = _bfd_sparc_elf_howto_table + r_type;
2943	      /* Fall through.  */
2944
2945	    case R_SPARC_GOT10:
2946	    case R_SPARC_GOT13:
2947	    case R_SPARC_GOT22:
2948	      if (htab->elf.sgot == NULL)
2949		abort ();
2950	      off = h->got.offset;
2951	      if (off == (bfd_vma) -1)
2952		abort();
2953	      relocation = htab->elf.sgot->output_offset + off - got_base;
2954	      goto do_relocation;
2955
2956	    case R_SPARC_WPLT30:
2957	    case R_SPARC_WDISP30:
2958	      relocation = (plt_sec->output_section->vma
2959			    + plt_sec->output_offset + h->plt.offset);
2960	      goto do_relocation;
2961
2962	    case R_SPARC_32:
2963	    case R_SPARC_64:
2964	      if (bfd_link_pic (info) && h->non_got_ref)
2965		{
2966		  Elf_Internal_Rela outrel;
2967		  bfd_vma offset;
2968
2969		  offset = _bfd_elf_section_offset (output_bfd, info,
2970						    input_section,
2971						    rel->r_offset);
2972		  if (offset == (bfd_vma) -1
2973		      || offset == (bfd_vma) -2)
2974		    abort();
2975
2976		  outrel.r_offset = (input_section->output_section->vma
2977				     + input_section->output_offset
2978				     + offset);
2979
2980		  if (h->dynindx == -1
2981		      || h->forced_local
2982		      || bfd_link_executable (info))
2983		    {
2984		      outrel.r_info = SPARC_ELF_R_INFO (htab, NULL,
2985							0, R_SPARC_IRELATIVE);
2986		      outrel.r_addend = relocation + rel->r_addend;
2987		    }
2988		  else
2989		    {
2990		      if (h->dynindx == -1)
2991			abort();
2992		      outrel.r_info = SPARC_ELF_R_INFO (htab, rel, h->dynindx, r_type);
2993		      outrel.r_addend = rel->r_addend;
2994		    }
2995
2996		  sparc_elf_append_rela (output_bfd, sreloc, &outrel);
2997		  continue;
2998		}
2999
3000	      relocation = (plt_sec->output_section->vma
3001			    + plt_sec->output_offset + h->plt.offset);
3002	      goto do_relocation;
3003
3004	    case R_SPARC_HI22:
3005	    case R_SPARC_LO10:
3006	      /* We should only see such relocs in static links.  */
3007	      if (bfd_link_pic (info))
3008		abort();
3009	      relocation = (plt_sec->output_section->vma
3010			    + plt_sec->output_offset + h->plt.offset);
3011	      goto do_relocation;
3012
3013	    default:
3014	      if (h->root.root.string)
3015		name = h->root.root.string;
3016	      else
3017		name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym,
3018					 NULL);
3019	      _bfd_error_handler
3020		/* xgettext:c-format */
3021		(_("%pB: relocation %s against STT_GNU_IFUNC "
3022		   "symbol `%s' isn't handled by %s"), input_bfd,
3023		 _bfd_sparc_elf_howto_table[r_type].name,
3024		 name, __FUNCTION__);
3025	      bfd_set_error (bfd_error_bad_value);
3026	      return false;
3027	    }
3028	}
3029
3030    skip_ifunc:
3031      eh = (struct _bfd_sparc_elf_link_hash_entry *) h;
3032      resolved_to_zero = eh && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
3033
3034      switch (r_type)
3035	{
3036	case R_SPARC_GOTDATA_OP_HIX22:
3037	case R_SPARC_GOTDATA_OP_LOX10:
3038	  if (gdop_relative_offset_ok (info, h, relocation))
3039	    {
3040	      r_type = (r_type == R_SPARC_GOTDATA_OP_HIX22
3041			? R_SPARC_GOTDATA_HIX22
3042			: R_SPARC_GOTDATA_LOX10);
3043	      howto = _bfd_sparc_elf_howto_table + r_type;
3044	    }
3045	  break;
3046
3047	case R_SPARC_GOTDATA_OP:
3048	  if (gdop_relative_offset_ok (info, h, relocation))
3049	    {
3050	      bfd_vma insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
3051
3052	      /* {ld,ldx} [%rs1 + %rs2], %rd --> add %rs1, %rs2, %rd */
3053	      relocation = 0x80000000 | (insn & 0x3e07c01f);
3054	      bfd_put_32 (output_bfd, relocation, contents + rel->r_offset);
3055
3056	      /* If the symbol is global but not dynamic, an .rela.* slot has
3057		 been allocated for it in the GOT so output R_SPARC_NONE here,
3058		 if it isn't also subject to another, old-style GOT relocation.
3059		 See also the handling of these GOT relocations just below.  */
3060	      if (h != NULL
3061		  && h->dynindx == -1
3062		  && !h->forced_local
3063		  && h->root.type != bfd_link_hash_undefweak
3064		  && !eh->has_old_style_got_reloc
3065		  && (h->got.offset & 1) == 0
3066		  && bfd_link_pic (info))
3067		{
3068		  asection *s = htab->elf.srelgot;
3069		  Elf_Internal_Rela outrel;
3070
3071		  BFD_ASSERT (s != NULL);
3072
3073		  memset (&outrel, 0, sizeof outrel);
3074		  sparc_elf_append_rela (output_bfd, s, &outrel);
3075		  h->got.offset |= 1;
3076		}
3077	    }
3078	  continue;
3079	}
3080
3081      switch (r_type)
3082	{
3083	case R_SPARC_GOTDATA_HIX22:
3084	case R_SPARC_GOTDATA_LOX10:
3085	  relocation = gdopoff (info, relocation);
3086	  break;
3087
3088	case R_SPARC_GOTDATA_OP_HIX22:
3089	case R_SPARC_GOTDATA_OP_LOX10:
3090	case R_SPARC_GOT10:
3091	case R_SPARC_GOT13:
3092	case R_SPARC_GOT22:
3093	  /* Relocation is to the entry for this symbol in the global
3094	     offset table.  */
3095	  if (htab->elf.sgot == NULL)
3096	    abort ();
3097
3098	  relative_reloc = false;
3099	  if (h != NULL)
3100	    {
3101	      bool dyn;
3102
3103	      off = h->got.offset;
3104	      BFD_ASSERT (off != (bfd_vma) -1);
3105	      dyn = elf_hash_table (info)->dynamic_sections_created;
3106
3107	      if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn,
3108						     bfd_link_pic (info),
3109						     h)
3110		  || (bfd_link_pic (info)
3111		      && SYMBOL_REFERENCES_LOCAL (info, h)))
3112		{
3113		  /* This is actually a static link, or it is a
3114		     -Bsymbolic link and the symbol is defined
3115		     locally, or the symbol was forced to be local
3116		     because of a version file.  We must initialize
3117		     this entry in the global offset table.  Since the
3118		     offset must always be a multiple of 8 for 64-bit
3119		     and 4 for 32-bit, we use the least significant bit
3120		     to record whether we have initialized it already.
3121
3122		     When doing a dynamic link, we create a .rela.got
3123		     relocation entry to initialize the value.  This
3124		     is done in the finish_dynamic_symbol routine.  */
3125		  if ((off & 1) != 0)
3126		    off &= ~1;
3127		  else
3128		    {
3129		      /* If this symbol isn't dynamic in PIC mode, treat it
3130			 like a local symbol in PIC mode below.  */
3131		      if (h->dynindx == -1
3132			  && !h->forced_local
3133			  && h->root.type != bfd_link_hash_undefweak
3134			  && bfd_link_pic (info))
3135			relative_reloc = true;
3136		      else
3137			SPARC_ELF_PUT_WORD (htab, output_bfd, relocation,
3138					    htab->elf.sgot->contents + off);
3139		      h->got.offset |= 1;
3140		    }
3141		}
3142	      else
3143		unresolved_reloc = false;
3144	    }
3145	  else
3146	    {
3147	      BFD_ASSERT (local_got_offsets != NULL
3148			  && local_got_offsets[r_symndx] != (bfd_vma) -1);
3149
3150	      off = local_got_offsets[r_symndx];
3151
3152	      /* The offset must always be a multiple of 8 on 64-bit and
3153		 4 on 32-bit.  We use the least significant bit to record
3154		 whether we have already processed this entry.  */
3155	      if ((off & 1) != 0)
3156		off &= ~1;
3157	      else
3158		{
3159		  /* For a local symbol in PIC mode, we need to generate a
3160		     R_SPARC_RELATIVE reloc for the dynamic linker.  */
3161		  if (bfd_link_pic (info))
3162		    relative_reloc = true;
3163		  else
3164		    SPARC_ELF_PUT_WORD (htab, output_bfd, relocation,
3165					htab->elf.sgot->contents + off);
3166		  local_got_offsets[r_symndx] |= 1;
3167		}
3168	    }
3169
3170	  if (relative_reloc)
3171	    {
3172	      asection *s = htab->elf.srelgot;
3173	      Elf_Internal_Rela outrel;
3174
3175	      BFD_ASSERT (s != NULL);
3176
3177	      outrel.r_offset = (htab->elf.sgot->output_section->vma
3178				 + htab->elf.sgot->output_offset
3179				 + off);
3180	      outrel.r_info = SPARC_ELF_R_INFO (htab, NULL,
3181						0, R_SPARC_RELATIVE);
3182	      outrel.r_addend = relocation;
3183	      sparc_elf_append_rela (output_bfd, s, &outrel);
3184	      /* Versions of glibc ld.so at least up to 2.26 wrongly
3185		 add the section contents to the value calculated for
3186		 a RELATIVE reloc.  Zero the contents to work around
3187		 this bug.  */
3188	      relocation = 0;
3189	      SPARC_ELF_PUT_WORD (htab, output_bfd, relocation,
3190				  htab->elf.sgot->contents + off);
3191	    }
3192
3193	  relocation = htab->elf.sgot->output_offset + off - got_base;
3194	  break;
3195
3196	case R_SPARC_PLT32:
3197	case R_SPARC_PLT64:
3198	  if (h == NULL || h->plt.offset == (bfd_vma) -1)
3199	    {
3200	      r_type = (r_type == R_SPARC_PLT32) ? R_SPARC_32 : R_SPARC_64;
3201	      goto r_sparc_plt32;
3202	    }
3203	  /* Fall through.  */
3204
3205	case R_SPARC_WPLT30:
3206	case R_SPARC_HIPLT22:
3207	case R_SPARC_LOPLT10:
3208	case R_SPARC_PCPLT32:
3209	case R_SPARC_PCPLT22:
3210	case R_SPARC_PCPLT10:
3211	r_sparc_wplt30:
3212	  /* Relocation is to the entry for this symbol in the
3213	     procedure linkage table.  */
3214
3215	  if (! ABI_64_P (output_bfd))
3216	    {
3217	      /* The Solaris native assembler will generate a WPLT30 reloc
3218		 for a local symbol if you assemble a call from one
3219		 section to another when using -K pic.  We treat it as
3220		 WDISP30.  */
3221	      if (h == NULL)
3222		break;
3223	    }
3224	  /* PR 7027: We need similar behaviour for 64-bit binaries.  */
3225	  else if (r_type == R_SPARC_WPLT30 && h == NULL)
3226	    break;
3227	  else
3228	    {
3229	      BFD_ASSERT (h != NULL);
3230	    }
3231
3232	  if (h->plt.offset == (bfd_vma) -1 || htab->elf.splt == NULL)
3233	    {
3234	      /* We didn't make a PLT entry for this symbol.  This
3235		 happens when statically linking PIC code, or when
3236		 using -Bsymbolic.  */
3237	      break;
3238	    }
3239
3240	  relocation = (htab->elf.splt->output_section->vma
3241			+ htab->elf.splt->output_offset
3242			+ h->plt.offset);
3243	  unresolved_reloc = false;
3244	  if (r_type == R_SPARC_PLT32 || r_type == R_SPARC_PLT64)
3245	    {
3246	      r_type = r_type == R_SPARC_PLT32 ? R_SPARC_32 : R_SPARC_64;
3247	      is_plt = true;
3248	      goto r_sparc_plt32;
3249	    }
3250	  break;
3251
3252	case R_SPARC_PC10:
3253	case R_SPARC_PC22:
3254	case R_SPARC_PC_HH22:
3255	case R_SPARC_PC_HM10:
3256	case R_SPARC_PC_LM22:
3257	  if (h != NULL
3258	      && strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0)
3259	    break;
3260	  /* Fall through.  */
3261	case R_SPARC_DISP8:
3262	case R_SPARC_DISP16:
3263	case R_SPARC_DISP32:
3264	case R_SPARC_DISP64:
3265	case R_SPARC_WDISP30:
3266	case R_SPARC_WDISP22:
3267	case R_SPARC_WDISP19:
3268	case R_SPARC_WDISP16:
3269	case R_SPARC_WDISP10:
3270	case R_SPARC_8:
3271	case R_SPARC_16:
3272	case R_SPARC_32:
3273	case R_SPARC_HI22:
3274	case R_SPARC_22:
3275	case R_SPARC_13:
3276	case R_SPARC_LO10:
3277	case R_SPARC_UA16:
3278	case R_SPARC_UA32:
3279	case R_SPARC_10:
3280	case R_SPARC_11:
3281	case R_SPARC_64:
3282	case R_SPARC_OLO10:
3283	case R_SPARC_HH22:
3284	case R_SPARC_HM10:
3285	case R_SPARC_LM22:
3286	case R_SPARC_7:
3287	case R_SPARC_5:
3288	case R_SPARC_6:
3289	case R_SPARC_HIX22:
3290	case R_SPARC_LOX10:
3291	case R_SPARC_H44:
3292	case R_SPARC_M44:
3293	case R_SPARC_L44:
3294	case R_SPARC_H34:
3295	case R_SPARC_UA64:
3296	r_sparc_plt32:
3297	  if ((input_section->flags & SEC_ALLOC) == 0 || is_vxworks_tls)
3298	    break;
3299
3300	  /* Copy dynamic function pointer relocations.  Don't generate
3301	     dynamic relocations against resolved undefined weak symbols
3302	     in PIE.  */
3303	  if ((bfd_link_pic (info)
3304	       && (h == NULL
3305		   || !(h->root.type == bfd_link_hash_undefweak
3306			&& (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
3307			    || resolved_to_zero)))
3308	       && (! howto->pc_relative
3309		   || !SYMBOL_CALLS_LOCAL (info, h)))
3310	      || (!bfd_link_pic (info)
3311		  && h != NULL
3312		  && h->dynindx != -1
3313		  && !h->non_got_ref
3314		  && ((h->def_dynamic
3315		       && !h->def_regular)
3316		      || (h->root.type == bfd_link_hash_undefweak
3317			  && !resolved_to_zero)
3318		      || h->root.type == bfd_link_hash_undefined)))
3319	    {
3320	      Elf_Internal_Rela outrel;
3321	      bool skip, relocate = false;
3322
3323	      /* When generating a shared object, these relocations
3324		 are copied into the output file to be resolved at run
3325		 time.  */
3326
3327	      BFD_ASSERT (sreloc != NULL);
3328
3329	      skip = false;
3330
3331	      outrel.r_offset =
3332		_bfd_elf_section_offset (output_bfd, info, input_section,
3333					 rel->r_offset);
3334	      if (outrel.r_offset == (bfd_vma) -1)
3335		skip = true;
3336	      else if (outrel.r_offset == (bfd_vma) -2)
3337		skip = true, relocate = true;
3338	      outrel.r_offset += (input_section->output_section->vma
3339				  + input_section->output_offset);
3340
3341	      /* Optimize unaligned reloc usage now that we know where
3342		 it finally resides.  */
3343	      switch (r_type)
3344		{
3345		case R_SPARC_16:
3346		  if (outrel.r_offset & 1)
3347		    r_type = R_SPARC_UA16;
3348		  break;
3349		case R_SPARC_UA16:
3350		  if (!(outrel.r_offset & 1))
3351		    r_type = R_SPARC_16;
3352		  break;
3353		case R_SPARC_32:
3354		  if (outrel.r_offset & 3)
3355		    r_type = R_SPARC_UA32;
3356		  break;
3357		case R_SPARC_UA32:
3358		  if (!(outrel.r_offset & 3))
3359		    r_type = R_SPARC_32;
3360		  break;
3361		case R_SPARC_64:
3362		  if (outrel.r_offset & 7)
3363		    r_type = R_SPARC_UA64;
3364		  break;
3365		case R_SPARC_UA64:
3366		  if (!(outrel.r_offset & 7))
3367		    r_type = R_SPARC_64;
3368		  break;
3369		case R_SPARC_DISP8:
3370		case R_SPARC_DISP16:
3371		case R_SPARC_DISP32:
3372		case R_SPARC_DISP64:
3373		  /* If the symbol is not dynamic, we should not keep
3374		     a dynamic relocation.  But an .rela.* slot has been
3375		     allocated for it, output R_SPARC_NONE.
3376		     FIXME: Add code tracking needed dynamic relocs as
3377		     e.g. i386 has.  */
3378		  if (h->dynindx == -1)
3379		    skip = true, relocate = true;
3380		  break;
3381		}
3382
3383	      if (skip)
3384		memset (&outrel, 0, sizeof outrel);
3385	      /* h->dynindx may be -1 if the symbol was marked to
3386		 become local.  */
3387	      else if (h != NULL
3388		       && h->dynindx != -1
3389		       && (_bfd_sparc_elf_howto_table[r_type].pc_relative
3390			   || !bfd_link_pic (info)
3391			   || !SYMBOLIC_BIND (info, h)
3392			   || !h->def_regular))
3393		{
3394		  outrel.r_info = SPARC_ELF_R_INFO (htab, rel, h->dynindx, r_type);
3395		  outrel.r_addend = rel->r_addend;
3396		}
3397	      else
3398		{
3399		  if (  (!ABI_64_P (output_bfd) && r_type == R_SPARC_32)
3400		      || (ABI_64_P (output_bfd) && r_type == R_SPARC_64))
3401		    {
3402		      outrel.r_info = SPARC_ELF_R_INFO (htab, NULL,
3403							0, R_SPARC_RELATIVE);
3404		      outrel.r_addend = relocation + rel->r_addend;
3405		    }
3406		  else
3407		    {
3408		      long indx;
3409
3410		      outrel.r_addend = relocation + rel->r_addend;
3411
3412		      if (is_plt)
3413			sec = htab->elf.splt;
3414
3415		      if (bfd_is_abs_section (sec))
3416			indx = 0;
3417		      else if (sec == NULL || sec->owner == NULL)
3418			{
3419			  bfd_set_error (bfd_error_bad_value);
3420			  return false;
3421			}
3422		      else
3423			{
3424			  asection *osec;
3425
3426			  /* We are turning this relocation into one
3427			     against a section symbol.  It would be
3428			     proper to subtract the symbol's value,
3429			     osec->vma, from the emitted reloc addend,
3430			     but ld.so expects buggy relocs.  */
3431			  osec = sec->output_section;
3432			  indx = elf_section_data (osec)->dynindx;
3433
3434			  if (indx == 0)
3435			    {
3436			      osec = htab->elf.text_index_section;
3437			      indx = elf_section_data (osec)->dynindx;
3438			    }
3439
3440			  /* FIXME: we really should be able to link non-pic
3441			     shared libraries.  */
3442			  if (indx == 0)
3443			    {
3444			      BFD_FAIL ();
3445			      _bfd_error_handler
3446				(_("%pB: probably compiled without -fPIC?"),
3447				 input_bfd);
3448			      bfd_set_error (bfd_error_bad_value);
3449			      return false;
3450			    }
3451			}
3452
3453		      outrel.r_info = SPARC_ELF_R_INFO (htab, rel, indx,
3454							r_type);
3455		    }
3456		}
3457
3458	      sparc_elf_append_rela (output_bfd, sreloc, &outrel);
3459
3460	      /* This reloc will be computed at runtime, so there's no
3461		 need to do anything now.  */
3462	      if (! relocate)
3463		continue;
3464	    }
3465	  break;
3466
3467	case R_SPARC_TLS_GD_HI22:
3468	case R_SPARC_TLS_GD_LO10:
3469	case R_SPARC_TLS_IE_HI22:
3470	case R_SPARC_TLS_IE_LO10:
3471	  r_type = sparc_elf_tls_transition (info, input_bfd, r_type,
3472					     h == NULL || h->dynindx == -1);
3473	  if (r_type == R_SPARC_REV32)
3474	    break;
3475	  if (h != NULL)
3476	    tls_type = _bfd_sparc_elf_hash_entry (h)->tls_type;
3477	  else if (local_got_offsets)
3478	    tls_type = _bfd_sparc_elf_local_got_tls_type (input_bfd) [r_symndx];
3479	  else if (h != NULL)
3480	    {
3481	      tls_type = _bfd_sparc_elf_hash_entry(h)->tls_type;
3482	      if (!bfd_link_dll (info)
3483		  && h->dynindx == -1
3484		  && tls_type == GOT_TLS_IE)
3485		switch (SPARC_ELF_R_TYPE (rel->r_info))
3486		  {
3487		  case R_SPARC_TLS_GD_HI22:
3488		  case R_SPARC_TLS_IE_HI22:
3489		    r_type = R_SPARC_TLS_LE_HIX22;
3490		    break;
3491		  default:
3492		    r_type = R_SPARC_TLS_LE_LOX10;
3493		    break;
3494		  }
3495	    }
3496	  else
3497	    tls_type = GOT_UNKNOWN;
3498	  if (tls_type == GOT_TLS_IE)
3499	    switch (r_type)
3500	      {
3501	      case R_SPARC_TLS_GD_HI22:
3502		r_type = R_SPARC_TLS_IE_HI22;
3503		break;
3504	      case R_SPARC_TLS_GD_LO10:
3505		r_type = R_SPARC_TLS_IE_LO10;
3506		break;
3507	      }
3508
3509	  if (r_type == R_SPARC_TLS_LE_HIX22)
3510	    {
3511	      relocation = tpoff (info, relocation);
3512	      break;
3513	    }
3514	  if (r_type == R_SPARC_TLS_LE_LOX10)
3515	    {
3516	      /* Change add into xor.  */
3517	      relocation = tpoff (info, relocation);
3518	      bfd_put_32 (output_bfd, (bfd_get_32 (input_bfd,
3519						   contents + rel->r_offset)
3520				       | 0x80182000), contents + rel->r_offset);
3521	      break;
3522	    }
3523
3524	  if (h != NULL)
3525	    {
3526	      off = h->got.offset;
3527	      h->got.offset |= 1;
3528	    }
3529	  else
3530	    {
3531	      BFD_ASSERT (local_got_offsets != NULL);
3532	      off = local_got_offsets[r_symndx];
3533	      local_got_offsets[r_symndx] |= 1;
3534	    }
3535
3536	r_sparc_tlsldm:
3537	  if (htab->elf.sgot == NULL)
3538	    abort ();
3539
3540	  if ((off & 1) != 0)
3541	    off &= ~1;
3542	  else
3543	    {
3544	      Elf_Internal_Rela outrel;
3545	      int dr_type, indx;
3546
3547	      if (htab->elf.srelgot == NULL)
3548		abort ();
3549
3550	      SPARC_ELF_PUT_WORD (htab, output_bfd, 0,
3551				  htab->elf.sgot->contents + off);
3552	      outrel.r_offset = (htab->elf.sgot->output_section->vma
3553				 + htab->elf.sgot->output_offset + off);
3554	      indx = h && h->dynindx != -1 ? h->dynindx : 0;
3555	      if (r_type == R_SPARC_TLS_IE_HI22
3556		  || r_type == R_SPARC_TLS_IE_LO10)
3557		dr_type = SPARC_ELF_TPOFF_RELOC (htab);
3558	      else
3559		dr_type = SPARC_ELF_DTPMOD_RELOC (htab);
3560	      if (dr_type == SPARC_ELF_TPOFF_RELOC (htab) && indx == 0)
3561		outrel.r_addend = relocation - dtpoff_base (info);
3562	      else
3563		outrel.r_addend = 0;
3564	      outrel.r_info = SPARC_ELF_R_INFO (htab, NULL, indx, dr_type);
3565	      sparc_elf_append_rela (output_bfd, htab->elf.srelgot, &outrel);
3566
3567	      if (r_type == R_SPARC_TLS_GD_HI22
3568		  || r_type == R_SPARC_TLS_GD_LO10)
3569		{
3570		  if (indx == 0)
3571		    {
3572		      BFD_ASSERT (! unresolved_reloc);
3573		      SPARC_ELF_PUT_WORD (htab, output_bfd,
3574					  relocation - dtpoff_base (info),
3575					  (htab->elf.sgot->contents + off
3576					   + SPARC_ELF_WORD_BYTES (htab)));
3577		    }
3578		  else
3579		    {
3580		      SPARC_ELF_PUT_WORD (htab, output_bfd, 0,
3581					  (htab->elf.sgot->contents + off
3582					   + SPARC_ELF_WORD_BYTES (htab)));
3583		      outrel.r_info = SPARC_ELF_R_INFO (htab, NULL, indx,
3584							SPARC_ELF_DTPOFF_RELOC (htab));
3585		      outrel.r_offset += SPARC_ELF_WORD_BYTES (htab);
3586		      sparc_elf_append_rela (output_bfd, htab->elf.srelgot,
3587					     &outrel);
3588		    }
3589		}
3590	      else if (dr_type == SPARC_ELF_DTPMOD_RELOC (htab))
3591		{
3592		  SPARC_ELF_PUT_WORD (htab, output_bfd, 0,
3593				      (htab->elf.sgot->contents + off
3594				       + SPARC_ELF_WORD_BYTES (htab)));
3595		}
3596	    }
3597
3598	  if (off >= (bfd_vma) -2)
3599	    abort ();
3600
3601	  relocation = htab->elf.sgot->output_offset + off - got_base;
3602	  unresolved_reloc = false;
3603	  howto = _bfd_sparc_elf_howto_table + r_type;
3604	  break;
3605
3606	case R_SPARC_TLS_LDM_HI22:
3607	case R_SPARC_TLS_LDM_LO10:
3608	  /* LD -> LE */
3609	  if (bfd_link_executable (info))
3610	    {
3611	      bfd_put_32 (output_bfd, SPARC_NOP, contents + rel->r_offset);
3612	      continue;
3613	    }
3614	  off = htab->tls_ldm_got.offset;
3615	  htab->tls_ldm_got.offset |= 1;
3616	  goto r_sparc_tlsldm;
3617
3618	case R_SPARC_TLS_LDO_HIX22:
3619	case R_SPARC_TLS_LDO_LOX10:
3620	  /* LD -> LE */
3621	  if (bfd_link_executable (info))
3622	    {
3623	      if (r_type == R_SPARC_TLS_LDO_HIX22)
3624		r_type = R_SPARC_TLS_LE_HIX22;
3625	      else
3626		r_type = R_SPARC_TLS_LE_LOX10;
3627	    }
3628	  else
3629	    {
3630	      relocation -= dtpoff_base (info);
3631	      break;
3632	    }
3633	  /* Fall through.  */
3634
3635	case R_SPARC_TLS_LE_HIX22:
3636	case R_SPARC_TLS_LE_LOX10:
3637	  if (!bfd_link_executable (info))
3638	    {
3639	      Elf_Internal_Rela outrel;
3640	      bfd_vma offset
3641		= _bfd_elf_section_offset (output_bfd, info, input_section,
3642					   rel->r_offset);
3643	      if (offset == (bfd_vma) -1 || offset == (bfd_vma) -2)
3644		memset (&outrel, 0, sizeof outrel);
3645	      else
3646		{
3647		  outrel.r_offset = offset
3648				    + input_section->output_section->vma
3649				    + input_section->output_offset;
3650		  outrel.r_info = SPARC_ELF_R_INFO (htab, NULL, 0, r_type);
3651		  outrel.r_addend
3652		    = relocation - dtpoff_base (info) + rel->r_addend;
3653		}
3654
3655	      BFD_ASSERT (sreloc != NULL);
3656	      sparc_elf_append_rela (output_bfd, sreloc, &outrel);
3657	      continue;
3658	    }
3659	  relocation = tpoff (info, relocation);
3660	  break;
3661
3662	case R_SPARC_TLS_LDM_CALL:
3663	  /* LD -> LE */
3664	  if (bfd_link_executable (info))
3665	    {
3666	      /* mov %g0, %o0 */
3667	      bfd_put_32 (output_bfd, 0x90100000, contents + rel->r_offset);
3668	      continue;
3669	    }
3670	  /* Fall through */
3671
3672	case R_SPARC_TLS_GD_CALL:
3673	  if (h != NULL)
3674	    tls_type = _bfd_sparc_elf_hash_entry (h)->tls_type;
3675	  else if (local_got_offsets)
3676	    tls_type = _bfd_sparc_elf_local_got_tls_type (input_bfd) [r_symndx];
3677	  else if (h != NULL)
3678	    tls_type = _bfd_sparc_elf_hash_entry(h)->tls_type;
3679	  else
3680	    tls_type = GOT_UNKNOWN;
3681	  /* GD -> IE or LE */
3682	  if (bfd_link_executable (info)
3683	      || (r_type == R_SPARC_TLS_GD_CALL && tls_type == GOT_TLS_IE))
3684	    {
3685	      Elf_Internal_Rela *rel2;
3686	      bfd_vma insn;
3687
3688	      /* GD -> LE */
3689	      if (bfd_link_executable (info) && (h == NULL || h->dynindx == -1))
3690		{
3691		  bfd_put_32 (output_bfd, SPARC_NOP, contents + rel->r_offset);
3692		  continue;
3693		}
3694
3695	      /* GD -> IE */
3696	      if (rel + 1 < relend
3697		  && SPARC_ELF_R_TYPE (rel[1].r_info) == R_SPARC_TLS_GD_ADD
3698		  && rel[1].r_offset == rel->r_offset + 4
3699		  && SPARC_ELF_R_SYMNDX (htab, rel[1].r_info) == r_symndx
3700		  && (((insn = bfd_get_32 (input_bfd,
3701					   contents + rel[1].r_offset))
3702		       >> 25) & 0x1f) == 8)
3703		{
3704		  /* We have
3705		     call __tls_get_addr, %tgd_call(foo)
3706		      add %reg1, %reg2, %o0, %tgd_add(foo)
3707		     and change it into IE:
3708		     {ld,ldx} [%reg1 + %reg2], %o0, %tie_ldx(foo)
3709		     add %g7, %o0, %o0, %tie_add(foo).
3710		     add is 0x80000000 | (rd << 25) | (rs1 << 14) | rs2,
3711		     ld is 0xc0000000 | (rd << 25) | (rs1 << 14) | rs2,
3712		     ldx is 0xc0580000 | (rd << 25) | (rs1 << 14) | rs2.  */
3713		  bfd_put_32 (output_bfd, insn | (ABI_64_P (output_bfd) ? 0xc0580000 : 0xc0000000),
3714			      contents + rel->r_offset);
3715		  bfd_put_32 (output_bfd, 0x9001c008,
3716			      contents + rel->r_offset + 4);
3717		  rel++;
3718		  continue;
3719		}
3720
3721	      /* We cannot just overwrite the delay slot instruction,
3722		 as it might be what puts the %o0 argument to
3723		 __tls_get_addr into place.  So we have to transpose
3724		 the delay slot with the add we patch in.  */
3725	      insn = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
3726	      bfd_put_32 (output_bfd, insn,
3727			  contents + rel->r_offset);
3728	      bfd_put_32 (output_bfd, 0x9001c008,
3729			  contents + rel->r_offset + 4);
3730
3731	      rel2 = rel;
3732	      while ((rel2 = sparc_elf_find_reloc_at_ofs (rel2 + 1, relend,
3733							  rel->r_offset + 4))
3734		     != NULL)
3735		{
3736		  /* If the instruction we moved has a relocation attached to
3737		     it, adjust the offset so that it will apply to the correct
3738		     instruction.  */
3739		  rel2->r_offset -= 4;
3740		}
3741	      continue;
3742	    }
3743
3744	  h = (struct elf_link_hash_entry *)
3745	      bfd_link_hash_lookup (info->hash, "__tls_get_addr", false,
3746				    false, true);
3747	  BFD_ASSERT (h != NULL);
3748	  r_type = R_SPARC_WPLT30;
3749	  howto = _bfd_sparc_elf_howto_table + r_type;
3750	  goto r_sparc_wplt30;
3751
3752	case R_SPARC_TLS_GD_ADD:
3753	  if (h != NULL)
3754	    tls_type = _bfd_sparc_elf_hash_entry (h)->tls_type;
3755	  else if (local_got_offsets)
3756	    tls_type = _bfd_sparc_elf_local_got_tls_type (input_bfd) [r_symndx];
3757	  else
3758	    tls_type = GOT_UNKNOWN;
3759	  /* GD -> IE or LE */
3760	  if (bfd_link_executable (info) || tls_type == GOT_TLS_IE)
3761	    {
3762	      /* add %reg1, %reg2, %reg3, %tgd_add(foo)
3763		 changed into IE:
3764		 {ld,ldx} [%reg1 + %reg2], %reg3, %tie_ldx(foo)
3765		 or LE:
3766		 add %g7, %reg2, %reg3.  */
3767	      bfd_vma insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
3768	      if (bfd_link_executable (info) && (h == NULL || h->dynindx == -1))
3769		relocation = (insn & ~0x7c000) | 0x1c000;
3770	      else
3771		relocation = insn | (ABI_64_P (output_bfd) ? 0xc0580000 : 0xc0000000);
3772	      bfd_put_32 (output_bfd, relocation, contents + rel->r_offset);
3773	    }
3774	  continue;
3775
3776	case R_SPARC_TLS_LDM_ADD:
3777	  /* LD -> LE */
3778	  if (bfd_link_executable (info))
3779	    bfd_put_32 (output_bfd, SPARC_NOP, contents + rel->r_offset);
3780	  continue;
3781
3782	case R_SPARC_TLS_LDO_ADD:
3783	  /* LD -> LE */
3784	  if (bfd_link_executable (info))
3785	    {
3786	      /* Change rs1 into %g7.  */
3787	      bfd_vma insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
3788	      insn = (insn & ~0x7c000) | 0x1c000;
3789	      bfd_put_32 (output_bfd, insn, contents + rel->r_offset);
3790	    }
3791	  continue;
3792
3793	case R_SPARC_TLS_IE_LD:
3794	case R_SPARC_TLS_IE_LDX:
3795	  /* IE -> LE */
3796	  if (bfd_link_executable (info) && (h == NULL || h->dynindx == -1))
3797	    {
3798	      bfd_vma insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
3799	      int rs2 = insn & 0x1f;
3800	      int rd = (insn >> 25) & 0x1f;
3801
3802	      if (rs2 == rd)
3803		relocation = SPARC_NOP;
3804	      else
3805		relocation = 0x80100000 | (insn & 0x3e00001f);
3806	      bfd_put_32 (output_bfd, relocation, contents + rel->r_offset);
3807	    }
3808	  continue;
3809
3810	case R_SPARC_TLS_IE_ADD:
3811	  /* Totally useless relocation.  */
3812	  continue;
3813
3814	case R_SPARC_TLS_DTPOFF32:
3815	case R_SPARC_TLS_DTPOFF64:
3816	  relocation -= dtpoff_base (info);
3817	  break;
3818
3819	default:
3820	  break;
3821	}
3822
3823      /* Dynamic relocs are not propagated for SEC_DEBUGGING sections
3824	 because such sections are not SEC_ALLOC and thus ld.so will
3825	 not process them.  */
3826      if (unresolved_reloc
3827	  && !((input_section->flags & SEC_DEBUGGING) != 0
3828	       && h->def_dynamic)
3829	  && _bfd_elf_section_offset (output_bfd, info, input_section,
3830				      rel->r_offset) != (bfd_vma) -1)
3831	_bfd_error_handler
3832	  /* xgettext:c-format */
3833	  (_("%pB(%pA+%#" PRIx64 "): "
3834	     "unresolvable %s relocation against symbol `%s'"),
3835	   input_bfd,
3836	   input_section,
3837	   (uint64_t) rel->r_offset,
3838	   howto->name,
3839	   h->root.root.string);
3840
3841      r = bfd_reloc_continue;
3842      if (r_type == R_SPARC_OLO10)
3843	{
3844	    bfd_vma x;
3845
3846	    if (! ABI_64_P (output_bfd))
3847	      abort ();
3848
3849	    relocation += rel->r_addend;
3850	    relocation = (relocation & 0x3ff) + ELF64_R_TYPE_DATA (rel->r_info);
3851
3852	    x = bfd_get_32 (input_bfd, contents + rel->r_offset);
3853	    x = (x & ~(bfd_vma) 0x1fff) | (relocation & 0x1fff);
3854	    bfd_put_32 (input_bfd, x, contents + rel->r_offset);
3855
3856	    r = bfd_check_overflow (howto->complain_on_overflow,
3857				    howto->bitsize, howto->rightshift,
3858				    bfd_arch_bits_per_address (input_bfd),
3859				    relocation);
3860	}
3861      else if (r_type == R_SPARC_WDISP16)
3862	{
3863	  bfd_vma x;
3864
3865	  relocation += rel->r_addend;
3866	  relocation -= (input_section->output_section->vma
3867			 + input_section->output_offset);
3868	  relocation -= rel->r_offset;
3869
3870	  x = bfd_get_32 (input_bfd, contents + rel->r_offset);
3871	  x |= ((((relocation >> 2) & 0xc000) << 6)
3872		| ((relocation >> 2) & 0x3fff));
3873	  bfd_put_32 (input_bfd, x, contents + rel->r_offset);
3874
3875	  r = bfd_check_overflow (howto->complain_on_overflow,
3876				  howto->bitsize, howto->rightshift,
3877				  bfd_arch_bits_per_address (input_bfd),
3878				  relocation);
3879	}
3880      else if (r_type == R_SPARC_WDISP10)
3881	{
3882	  bfd_vma x;
3883
3884	  relocation += rel->r_addend;
3885	  relocation -= (input_section->output_section->vma
3886			 + input_section->output_offset);
3887	  relocation -= rel->r_offset;
3888
3889	  x = bfd_get_32 (input_bfd, contents + rel->r_offset);
3890	  x |= ((((relocation >> 2) & 0x300) << 11)
3891		| (((relocation >> 2) & 0xff) << 5));
3892	  bfd_put_32 (input_bfd, x, contents + rel->r_offset);
3893
3894	  r = bfd_check_overflow (howto->complain_on_overflow,
3895				  howto->bitsize, howto->rightshift,
3896				  bfd_arch_bits_per_address (input_bfd),
3897				  relocation);
3898	}
3899      else if (r_type == R_SPARC_REV32)
3900	{
3901	  bfd_vma x;
3902
3903	  relocation = relocation + rel->r_addend;
3904
3905	  x = bfd_get_32 (input_bfd, contents + rel->r_offset);
3906	  x = x + relocation;
3907	  bfd_putl32 (/*input_bfd,*/ x, contents + rel->r_offset);
3908	  r = bfd_reloc_ok;
3909	}
3910      else if (r_type == R_SPARC_TLS_LDO_HIX22
3911	       || r_type == R_SPARC_TLS_LE_HIX22)
3912	{
3913	  bfd_vma x;
3914
3915	  relocation += rel->r_addend;
3916	  if (r_type == R_SPARC_TLS_LE_HIX22)
3917	    relocation ^= MINUS_ONE;
3918
3919	  x = bfd_get_32 (input_bfd, contents + rel->r_offset);
3920	  x = (x & ~(bfd_vma) 0x3fffff) | ((relocation >> 10) & 0x3fffff);
3921	  bfd_put_32 (input_bfd, x, contents + rel->r_offset);
3922	  r = bfd_reloc_ok;
3923	}
3924      else if (r_type == R_SPARC_TLS_LDO_LOX10
3925	       || r_type == R_SPARC_TLS_LE_LOX10)
3926	{
3927	  bfd_vma x;
3928
3929	  relocation += rel->r_addend;
3930	  relocation &= 0x3ff;
3931	  if (r_type == R_SPARC_TLS_LE_LOX10)
3932	    relocation |= 0x1c00;
3933
3934	  x = bfd_get_32 (input_bfd, contents + rel->r_offset);
3935	  x = (x & ~(bfd_vma) 0x1fff) | relocation;
3936	  bfd_put_32 (input_bfd, x, contents + rel->r_offset);
3937
3938	  r = bfd_reloc_ok;
3939	}
3940      else if (r_type == R_SPARC_HIX22
3941	       || r_type == R_SPARC_GOTDATA_HIX22
3942	       || r_type == R_SPARC_GOTDATA_OP_HIX22)
3943	{
3944	  bfd_vma x;
3945
3946	  relocation += rel->r_addend;
3947	  if (r_type == R_SPARC_HIX22
3948	      || (bfd_signed_vma) relocation < 0)
3949	    relocation = relocation ^ MINUS_ONE;
3950
3951	  x = bfd_get_32 (input_bfd, contents + rel->r_offset);
3952	  x = (x & ~(bfd_vma) 0x3fffff) | ((relocation >> 10) & 0x3fffff);
3953	  bfd_put_32 (input_bfd, x, contents + rel->r_offset);
3954
3955	  r = bfd_check_overflow (howto->complain_on_overflow,
3956				  howto->bitsize, howto->rightshift,
3957				  bfd_arch_bits_per_address (input_bfd),
3958				  relocation);
3959	}
3960      else if (r_type == R_SPARC_LOX10
3961	       || r_type == R_SPARC_GOTDATA_LOX10
3962	       || r_type == R_SPARC_GOTDATA_OP_LOX10)
3963	{
3964	  bfd_vma x;
3965
3966	  relocation += rel->r_addend;
3967	  if (r_type == R_SPARC_LOX10
3968	      || (bfd_signed_vma) relocation < 0)
3969	    relocation = (relocation & 0x3ff) | 0x1c00;
3970	  else
3971	    relocation = (relocation & 0x3ff);
3972
3973	  x = bfd_get_32 (input_bfd, contents + rel->r_offset);
3974	  x = (x & ~(bfd_vma) 0x1fff) | relocation;
3975	  bfd_put_32 (input_bfd, x, contents + rel->r_offset);
3976
3977	  r = bfd_reloc_ok;
3978	}
3979      else if ((r_type == R_SPARC_WDISP30 || r_type == R_SPARC_WPLT30)
3980	       && sec_do_relax (input_section)
3981	       && rel->r_offset + 4 < input_section->size)
3982	{
3983#define G0		0
3984#define O7		15
3985#define XCC		(2 << 20)
3986#define COND(x)		(((x)&0xf)<<25)
3987#define CONDA		COND(0x8)
3988#define INSN_BPA	(F2(0,1) | CONDA | BPRED | XCC)
3989#define INSN_BA		(F2(0,2) | CONDA)
3990#define INSN_OR		F3(2, 0x2, 0)
3991#define INSN_NOP	F2(0,4)
3992
3993	  bfd_vma x, y;
3994
3995	  /* If the instruction is a call with either:
3996	     restore
3997	     arithmetic instruction with rd == %o7
3998	     where rs1 != %o7 and rs2 if it is register != %o7
3999	     then we can optimize if the call destination is near
4000	     by changing the call into a branch always.  */
4001	  x = bfd_get_32 (input_bfd, contents + rel->r_offset);
4002	  y = bfd_get_32 (input_bfd, contents + rel->r_offset + 4);
4003	  if ((x & OP(~0)) == OP(1) && (y & OP(~0)) == OP(2))
4004	    {
4005	      if (((y & OP3(~0)) == OP3(0x3d) /* restore */
4006		   || ((y & OP3(0x28)) == 0 /* arithmetic */
4007		       && (y & RD(~0)) == RD(O7)))
4008		  && (y & RS1(~0)) != RS1(O7)
4009		  && ((y & F3I(~0))
4010		      || (y & RS2(~0)) != RS2(O7)))
4011		{
4012		  bfd_vma reloc;
4013
4014		  reloc = relocation + rel->r_addend - rel->r_offset;
4015		  reloc -= (input_section->output_section->vma
4016			    + input_section->output_offset);
4017
4018		  /* Ensure the branch fits into simm22.  */
4019		  if ((reloc & 3) == 0
4020		      && ((reloc & ~(bfd_vma)0x7fffff) == 0
4021			  || ((reloc | 0x7fffff) == ~(bfd_vma)0)))
4022		    {
4023		      reloc >>= 2;
4024
4025		      /* Check whether it fits into simm19.  */
4026		      if (((reloc & 0x3c0000) == 0
4027			   || (reloc & 0x3c0000) == 0x3c0000)
4028			  && (ABI_64_P (output_bfd)
4029			      || elf_elfheader (output_bfd)->e_flags & EF_SPARC_32PLUS))
4030			x = INSN_BPA | (reloc & 0x7ffff); /* ba,pt %xcc */
4031		      else
4032			x = INSN_BA | (reloc & 0x3fffff); /* ba */
4033		      bfd_put_32 (input_bfd, x, contents + rel->r_offset);
4034		      r = bfd_reloc_ok;
4035		      if (rel->r_offset >= 4
4036			  && (y & (0xffffffff ^ RS1(~0)))
4037			     == (INSN_OR | RD(O7) | RS2(G0)))
4038			{
4039			  bfd_vma z;
4040			  unsigned int reg;
4041
4042			  z = bfd_get_32 (input_bfd,
4043					  contents + rel->r_offset - 4);
4044			  if ((z & (0xffffffff ^ RD(~0)))
4045			      != (INSN_OR | RS1(O7) | RS2(G0)))
4046			    continue;
4047
4048			  /* The sequence was
4049			     or %o7, %g0, %rN
4050			     call foo
4051			     or %rN, %g0, %o7
4052
4053			     If call foo was replaced with ba, replace
4054			     or %rN, %g0, %o7 with nop.  */
4055
4056			  reg = (y & RS1(~0)) >> 14;
4057			  if (reg != ((z & RD(~0)) >> 25)
4058			      || reg == G0 || reg == O7)
4059			    continue;
4060
4061			  bfd_put_32 (input_bfd, (bfd_vma) INSN_NOP,
4062				      contents + rel->r_offset + 4);
4063			}
4064
4065		    }
4066		}
4067	    }
4068	}
4069
4070      if (r == bfd_reloc_continue)
4071	{
4072	do_relocation:
4073	  r = _bfd_final_link_relocate (howto, input_bfd, input_section,
4074					contents, rel->r_offset,
4075					relocation, rel->r_addend);
4076	}
4077      if (r != bfd_reloc_ok)
4078	{
4079	  switch (r)
4080	    {
4081	    default:
4082	    case bfd_reloc_outofrange:
4083	      abort ();
4084	    case bfd_reloc_overflow:
4085	      {
4086		const char *name;
4087
4088		/* The Solaris native linker silently disregards overflows.
4089		   We don't, but this breaks stabs debugging info, whose
4090		   relocations are only 32-bits wide.  Ignore overflows in
4091		   this case and also for discarded entries.  */
4092		if ((r_type == R_SPARC_32
4093		     || r_type == R_SPARC_UA32
4094		     || r_type == R_SPARC_DISP32)
4095		    && (((input_section->flags & SEC_DEBUGGING) != 0
4096			 && strcmp (bfd_section_name (input_section),
4097				    ".stab") == 0)
4098			|| _bfd_elf_section_offset (output_bfd, info,
4099						    input_section,
4100						    rel->r_offset)
4101			     == (bfd_vma)-1))
4102		  break;
4103
4104		if (h != NULL)
4105		  {
4106		    /* Assume this is a call protected by other code that
4107		       detect the symbol is undefined.  If this is the case,
4108		       we can safely ignore the overflow.  If not, the
4109		       program is hosed anyway, and a little warning isn't
4110		       going to help.  */
4111		    if (h->root.type == bfd_link_hash_undefweak
4112			&& howto->pc_relative)
4113		      break;
4114
4115		    name = NULL;
4116		  }
4117		else
4118		  {
4119		    name = bfd_elf_string_from_elf_section (input_bfd,
4120							    symtab_hdr->sh_link,
4121							    sym->st_name);
4122		    if (name == NULL)
4123		      return false;
4124		    if (*name == '\0')
4125		      name = bfd_section_name (sec);
4126		  }
4127		(*info->callbacks->reloc_overflow)
4128		  (info, (h ? &h->root : NULL), name, howto->name,
4129		   (bfd_vma) 0, input_bfd, input_section, rel->r_offset);
4130	      }
4131	      break;
4132	    }
4133	}
4134    }
4135
4136  return true;
4137}
4138
4139/* Build a VxWorks PLT entry.  PLT_INDEX is the index of the PLT entry
4140   and PLT_OFFSET is the byte offset from the start of .plt.  GOT_OFFSET
4141   is the offset of the associated .got.plt entry from
4142   _GLOBAL_OFFSET_TABLE_.  */
4143
4144static void
4145sparc_vxworks_build_plt_entry (bfd *output_bfd, struct bfd_link_info *info,
4146			       bfd_vma plt_offset, bfd_vma plt_index,
4147			       bfd_vma got_offset)
4148{
4149  bfd_vma got_base;
4150  const bfd_vma *plt_entry;
4151  struct _bfd_sparc_elf_link_hash_table *htab;
4152  bfd_byte *loc;
4153  Elf_Internal_Rela rela;
4154
4155  htab = _bfd_sparc_elf_hash_table (info);
4156  BFD_ASSERT (htab != NULL);
4157
4158  if (bfd_link_pic (info))
4159    {
4160      plt_entry = sparc_vxworks_shared_plt_entry;
4161      got_base = 0;
4162    }
4163  else
4164    {
4165      plt_entry = sparc_vxworks_exec_plt_entry;
4166      got_base = (htab->elf.hgot->root.u.def.value
4167		  + htab->elf.hgot->root.u.def.section->output_offset
4168		  + htab->elf.hgot->root.u.def.section->output_section->vma);
4169    }
4170
4171  /* Fill in the entry in the procedure linkage table.  */
4172  bfd_put_32 (output_bfd, plt_entry[0] + ((got_base + got_offset) >> 10),
4173	      htab->elf.splt->contents + plt_offset);
4174  bfd_put_32 (output_bfd, plt_entry[1] + ((got_base + got_offset) & 0x3ff),
4175	      htab->elf.splt->contents + plt_offset + 4);
4176  bfd_put_32 (output_bfd, plt_entry[2],
4177	      htab->elf.splt->contents + plt_offset + 8);
4178  bfd_put_32 (output_bfd, plt_entry[3],
4179	      htab->elf.splt->contents + plt_offset + 12);
4180  bfd_put_32 (output_bfd, plt_entry[4],
4181	      htab->elf.splt->contents + plt_offset + 16);
4182  bfd_put_32 (output_bfd, plt_entry[5] + (plt_index >> 10),
4183	      htab->elf.splt->contents + plt_offset + 20);
4184  /* PC-relative displacement for a branch to the start of
4185     the PLT section.  */
4186  bfd_put_32 (output_bfd, plt_entry[6] + (((-plt_offset - 24) >> 2)
4187					  & 0x003fffff),
4188	      htab->elf.splt->contents + plt_offset + 24);
4189  bfd_put_32 (output_bfd, plt_entry[7] + (plt_index & 0x3ff),
4190	      htab->elf.splt->contents + plt_offset + 28);
4191
4192  /* Fill in the .got.plt entry, pointing initially at the
4193     second half of the PLT entry.  */
4194  BFD_ASSERT (htab->elf.sgotplt != NULL);
4195  bfd_put_32 (output_bfd,
4196	      htab->elf.splt->output_section->vma
4197	      + htab->elf.splt->output_offset
4198	      + plt_offset + 20,
4199	      htab->elf.sgotplt->contents + got_offset);
4200
4201  /* Add relocations to .rela.plt.unloaded.  */
4202  if (!bfd_link_pic (info))
4203    {
4204      loc = (htab->srelplt2->contents
4205	     + (2 + 3 * plt_index) * sizeof (Elf32_External_Rela));
4206
4207      /* Relocate the initial sethi.  */
4208      rela.r_offset = (htab->elf.splt->output_section->vma
4209		       + htab->elf.splt->output_offset
4210		       + plt_offset);
4211      rela.r_info = ELF32_R_INFO (htab->elf.hgot->indx, R_SPARC_HI22);
4212      rela.r_addend = got_offset;
4213      bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
4214      loc += sizeof (Elf32_External_Rela);
4215
4216      /* Likewise the following or.  */
4217      rela.r_offset += 4;
4218      rela.r_info = ELF32_R_INFO (htab->elf.hgot->indx, R_SPARC_LO10);
4219      bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
4220      loc += sizeof (Elf32_External_Rela);
4221
4222      /* Relocate the .got.plt entry.  */
4223      rela.r_offset = (htab->elf.sgotplt->output_section->vma
4224		       + htab->elf.sgotplt->output_offset
4225		       + got_offset);
4226      rela.r_info = ELF32_R_INFO (htab->elf.hplt->indx, R_SPARC_32);
4227      rela.r_addend = plt_offset + 20;
4228      bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
4229    }
4230}
4231
4232/* Finish up dynamic symbol handling.  We set the contents of various
4233   dynamic sections here.  */
4234
4235bool
4236_bfd_sparc_elf_finish_dynamic_symbol (bfd *output_bfd,
4237				      struct bfd_link_info *info,
4238				      struct elf_link_hash_entry *h,
4239				      Elf_Internal_Sym *sym)
4240{
4241  struct _bfd_sparc_elf_link_hash_table *htab;
4242  const struct elf_backend_data *bed;
4243  struct _bfd_sparc_elf_link_hash_entry  *eh;
4244  bool resolved_to_zero;
4245
4246  htab = _bfd_sparc_elf_hash_table (info);
4247  BFD_ASSERT (htab != NULL);
4248  bed = get_elf_backend_data (output_bfd);
4249
4250  eh = (struct _bfd_sparc_elf_link_hash_entry *) h;
4251
4252  /* We keep PLT/GOT entries without dynamic PLT/GOT relocations for
4253     resolved undefined weak symbols in executable so that their
4254     references have value 0 at run-time.  */
4255  resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
4256
4257  if (h->plt.offset != (bfd_vma) -1)
4258    {
4259      asection *splt;
4260      asection *srela;
4261      Elf_Internal_Rela rela;
4262      bfd_byte *loc;
4263      bfd_vma r_offset, got_offset;
4264      int rela_index;
4265
4266      /* When building a static executable, use .iplt and
4267	 .rela.iplt sections for STT_GNU_IFUNC symbols.  */
4268      if (htab->elf.splt != NULL)
4269	{
4270	  splt = htab->elf.splt;
4271	  srela = htab->elf.srelplt;
4272	}
4273      else
4274	{
4275	  splt = htab->elf.iplt;
4276	  srela = htab->elf.irelplt;
4277	}
4278
4279      if (splt == NULL || srela == NULL)
4280	abort ();
4281
4282      /* Fill in the entry in the .rela.plt section.  */
4283      if (htab->elf.target_os == is_vxworks)
4284	{
4285	  /* Work out the index of this PLT entry.  */
4286	  rela_index = ((h->plt.offset - htab->plt_header_size)
4287			/ htab->plt_entry_size);
4288
4289	  /* Calculate the offset of the associated .got.plt entry.
4290	     The first three entries are reserved.  */
4291	  got_offset = (rela_index + 3) * 4;
4292
4293	  sparc_vxworks_build_plt_entry (output_bfd, info, h->plt.offset,
4294					 rela_index, got_offset);
4295
4296
4297	  /* On VxWorks, the relocation points to the .got.plt entry,
4298	     not the .plt entry.  */
4299	  rela.r_offset = (htab->elf.sgotplt->output_section->vma
4300			   + htab->elf.sgotplt->output_offset
4301			   + got_offset);
4302	  rela.r_addend = 0;
4303	  rela.r_info = SPARC_ELF_R_INFO (htab, NULL, h->dynindx,
4304					  R_SPARC_JMP_SLOT);
4305	}
4306      else
4307	{
4308	  bool ifunc = false;
4309
4310	  /* Fill in the entry in the procedure linkage table.  */
4311	  rela_index = SPARC_ELF_BUILD_PLT_ENTRY (htab, output_bfd, splt,
4312						  h->plt.offset, splt->size,
4313						  &r_offset);
4314
4315	  if (h == NULL
4316	      || h->dynindx == -1
4317	      || ((bfd_link_executable (info)
4318		   || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
4319		  && h->def_regular
4320		  && h->type == STT_GNU_IFUNC))
4321	    {
4322	      ifunc = true;
4323	      BFD_ASSERT (h == NULL
4324			  || (h->type == STT_GNU_IFUNC
4325			      && h->def_regular
4326			      && (h->root.type == bfd_link_hash_defined
4327				  || h->root.type == bfd_link_hash_defweak)));
4328	    }
4329
4330	  rela.r_offset = r_offset
4331	    + (splt->output_section->vma + splt->output_offset);
4332	  if (ABI_64_P (output_bfd)
4333	      && h->plt.offset >= (PLT64_LARGE_THRESHOLD * PLT64_ENTRY_SIZE))
4334	    {
4335	      if (ifunc)
4336		{
4337		  rela.r_addend = (h->root.u.def.section->output_section->vma
4338				   + h->root.u.def.section->output_offset
4339				   + h->root.u.def.value);
4340		  rela.r_info = SPARC_ELF_R_INFO (htab, NULL, 0,
4341						  R_SPARC_IRELATIVE);
4342		}
4343	      else
4344		{
4345		  rela.r_addend = (-(h->plt.offset + 4)
4346				   - splt->output_section->vma
4347				   - splt->output_offset);
4348		  rela.r_info = SPARC_ELF_R_INFO (htab, NULL, h->dynindx,
4349						  R_SPARC_JMP_SLOT);
4350		}
4351	    }
4352	  else
4353	    {
4354	      if (ifunc)
4355		{
4356		  rela.r_addend = (h->root.u.def.section->output_section->vma
4357				   + h->root.u.def.section->output_offset
4358				   + h->root.u.def.value);
4359		  rela.r_info = SPARC_ELF_R_INFO (htab, NULL, 0,
4360						  R_SPARC_JMP_IREL);
4361		}
4362	      else
4363		{
4364		  rela.r_addend = 0;
4365		  rela.r_info = SPARC_ELF_R_INFO (htab, NULL, h->dynindx,
4366						  R_SPARC_JMP_SLOT);
4367		}
4368	    }
4369	}
4370
4371      /* Adjust for the first 4 reserved elements in the .plt section
4372	 when setting the offset in the .rela.plt section.
4373	 Sun forgot to read their own ABI and copied elf32-sparc behaviour,
4374	 thus .plt[4] has corresponding .rela.plt[0] and so on.  */
4375
4376      loc = srela->contents;
4377      loc += rela_index * bed->s->sizeof_rela;
4378      bed->s->swap_reloca_out (output_bfd, &rela, loc);
4379
4380      if (!resolved_to_zero && !h->def_regular)
4381	{
4382	  /* Mark the symbol as undefined, rather than as defined in
4383	     the .plt section.  Leave the value alone.  */
4384	  sym->st_shndx = SHN_UNDEF;
4385	  /* If the symbol is weak, we do need to clear the value.
4386	     Otherwise, the PLT entry would provide a definition for
4387	     the symbol even if the symbol wasn't defined anywhere,
4388	     and so the symbol would never be NULL.  */
4389	  if (!h->ref_regular_nonweak)
4390	    sym->st_value = 0;
4391	}
4392    }
4393
4394  /* Don't generate dynamic GOT relocation against resolved undefined weak
4395     symbols in an executable.  */
4396  if (h->got.offset != (bfd_vma) -1
4397      && _bfd_sparc_elf_hash_entry(h)->tls_type != GOT_TLS_GD
4398      && _bfd_sparc_elf_hash_entry(h)->tls_type != GOT_TLS_IE
4399      && !(h->root.type == bfd_link_hash_undefweak
4400	   && (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
4401	       || resolved_to_zero)))
4402    {
4403      asection *sgot;
4404      asection *srela;
4405      Elf_Internal_Rela rela;
4406
4407      /* This symbol has an entry in the GOT.  Set it up.  */
4408
4409      sgot = htab->elf.sgot;
4410      srela = htab->elf.srelgot;
4411      BFD_ASSERT (sgot != NULL && srela != NULL);
4412
4413      rela.r_offset = (sgot->output_section->vma
4414		       + sgot->output_offset
4415		       + (h->got.offset &~ (bfd_vma) 1));
4416
4417      /* If this is a -Bsymbolic link, and the symbol is defined
4418	 locally, we just want to emit a RELATIVE reloc.  Likewise if
4419	 the symbol was forced to be local because of a version file.
4420	 The entry in the global offset table will already have been
4421	 initialized in the relocate_section function.  */
4422      if (! bfd_link_pic (info)
4423	  && h->type == STT_GNU_IFUNC
4424	  && h->def_regular)
4425	{
4426	  asection *plt;
4427
4428	  /* We load the GOT entry with the PLT entry.  */
4429	  plt = htab->elf.splt ? htab->elf.splt : htab->elf.iplt;
4430	  SPARC_ELF_PUT_WORD (htab, output_bfd,
4431			      (plt->output_section->vma
4432			       + plt->output_offset + h->plt.offset),
4433			      htab->elf.sgot->contents
4434			      + (h->got.offset & ~(bfd_vma) 1));
4435	  return true;
4436	}
4437
4438      if (bfd_link_pic (info)
4439	  && (h->root.type == bfd_link_hash_defined
4440	      || h->root.type == bfd_link_hash_defweak)
4441	  && SYMBOL_REFERENCES_LOCAL (info, h))
4442	{
4443	  asection *sec = h->root.u.def.section;
4444	  if (h->type == STT_GNU_IFUNC)
4445	    rela.r_info = SPARC_ELF_R_INFO (htab, NULL, 0, R_SPARC_IRELATIVE);
4446	  else
4447	    rela.r_info = SPARC_ELF_R_INFO (htab, NULL, 0, R_SPARC_RELATIVE);
4448	  rela.r_addend = (h->root.u.def.value
4449			   + sec->output_section->vma
4450			   + sec->output_offset);
4451	}
4452      else
4453	{
4454	  rela.r_info = SPARC_ELF_R_INFO (htab, NULL, h->dynindx, R_SPARC_GLOB_DAT);
4455	  rela.r_addend = 0;
4456	}
4457
4458      SPARC_ELF_PUT_WORD (htab, output_bfd, 0,
4459			  sgot->contents + (h->got.offset & ~(bfd_vma) 1));
4460      sparc_elf_append_rela (output_bfd, srela, &rela);
4461    }
4462
4463  if (h->needs_copy)
4464    {
4465      asection *s;
4466      Elf_Internal_Rela rela;
4467
4468      /* This symbols needs a copy reloc.  Set it up.  */
4469      BFD_ASSERT (h->dynindx != -1);
4470
4471      rela.r_offset = (h->root.u.def.value
4472		       + h->root.u.def.section->output_section->vma
4473		       + h->root.u.def.section->output_offset);
4474      rela.r_info = SPARC_ELF_R_INFO (htab, NULL, h->dynindx, R_SPARC_COPY);
4475      rela.r_addend = 0;
4476      if (h->root.u.def.section == htab->elf.sdynrelro)
4477	s = htab->elf.sreldynrelro;
4478      else
4479	s = htab->elf.srelbss;
4480      sparc_elf_append_rela (output_bfd, s, &rela);
4481    }
4482
4483  /* Mark some specially defined symbols as absolute.  On VxWorks,
4484     _GLOBAL_OFFSET_TABLE_ is not absolute: it is relative to the
4485     ".got" section.  Likewise _PROCEDURE_LINKAGE_TABLE_ and ".plt".  */
4486  if (sym != NULL
4487      && (h == htab->elf.hdynamic
4488	  || (htab->elf.target_os != is_vxworks
4489	      && (h == htab->elf.hgot || h == htab->elf.hplt))))
4490    sym->st_shndx = SHN_ABS;
4491
4492  return true;
4493}
4494
4495/* Finish up the dynamic sections.  */
4496
4497static bool
4498sparc_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
4499		  bfd *dynobj, asection *sdyn,
4500		  asection *splt ATTRIBUTE_UNUSED)
4501{
4502  struct _bfd_sparc_elf_link_hash_table *htab;
4503  const struct elf_backend_data *bed;
4504  bfd_byte *dyncon, *dynconend;
4505  size_t dynsize;
4506  int stt_regidx = -1;
4507  bool abi_64_p;
4508
4509  htab = _bfd_sparc_elf_hash_table (info);
4510  BFD_ASSERT (htab != NULL);
4511  bed = get_elf_backend_data (output_bfd);
4512  dynsize = bed->s->sizeof_dyn;
4513  dynconend = sdyn->contents + sdyn->size;
4514  abi_64_p = ABI_64_P (output_bfd);
4515  for (dyncon = sdyn->contents; dyncon < dynconend; dyncon += dynsize)
4516    {
4517      Elf_Internal_Dyn dyn;
4518      bool size;
4519
4520      bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
4521
4522      if (htab->elf.target_os == is_vxworks && dyn.d_tag == DT_PLTGOT)
4523	{
4524	  /* On VxWorks, DT_PLTGOT should point to the start of the GOT,
4525	     not to the start of the PLT.  */
4526	  if (htab->elf.sgotplt)
4527	    {
4528	      dyn.d_un.d_val = (htab->elf.sgotplt->output_section->vma
4529				+ htab->elf.sgotplt->output_offset);
4530	      bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
4531	    }
4532	}
4533      else if (htab->elf.target_os == is_vxworks
4534	       && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
4535	bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
4536      else if (abi_64_p && dyn.d_tag == DT_SPARC_REGISTER)
4537	{
4538	  if (stt_regidx == -1)
4539	    {
4540	      stt_regidx =
4541		_bfd_elf_link_lookup_local_dynindx (info, output_bfd, -1);
4542	      if (stt_regidx == -1)
4543		return false;
4544	    }
4545	  dyn.d_un.d_val = stt_regidx++;
4546	  bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
4547	}
4548      else
4549	{
4550	  asection *s;
4551
4552	  switch (dyn.d_tag)
4553	    {
4554	    case DT_PLTGOT:
4555	      s = htab->elf.splt;
4556	      size = false;
4557	      break;
4558	    case DT_PLTRELSZ:
4559	      s = htab->elf.srelplt;
4560	      size = true;
4561	      break;
4562	    case DT_JMPREL:
4563	      s = htab->elf.srelplt;
4564	      size = false;
4565	      break;
4566	    default:
4567	      continue;
4568	    }
4569
4570	  if (s == NULL)
4571	    dyn.d_un.d_val = 0;
4572	  else
4573	    {
4574	      if (!size)
4575		dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
4576	      else
4577		dyn.d_un.d_val = s->size;
4578	    }
4579	  bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
4580	}
4581    }
4582  return true;
4583}
4584
4585/* Install the first PLT entry in a VxWorks executable and make sure that
4586   .rela.plt.unloaded relocations have the correct symbol indexes.  */
4587
4588static void
4589sparc_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
4590{
4591  struct _bfd_sparc_elf_link_hash_table *htab;
4592  Elf_Internal_Rela rela;
4593  bfd_vma got_base;
4594  bfd_byte *loc;
4595
4596  htab = _bfd_sparc_elf_hash_table (info);
4597  BFD_ASSERT (htab != NULL);
4598
4599  /* Calculate the absolute value of _GLOBAL_OFFSET_TABLE_.  */
4600  got_base = (htab->elf.hgot->root.u.def.section->output_section->vma
4601	      + htab->elf.hgot->root.u.def.section->output_offset
4602	      + htab->elf.hgot->root.u.def.value);
4603
4604  /* Install the initial PLT entry.  */
4605  bfd_put_32 (output_bfd,
4606	      sparc_vxworks_exec_plt0_entry[0] + ((got_base + 8) >> 10),
4607	      htab->elf.splt->contents);
4608  bfd_put_32 (output_bfd,
4609	      sparc_vxworks_exec_plt0_entry[1] + ((got_base + 8) & 0x3ff),
4610	      htab->elf.splt->contents + 4);
4611  bfd_put_32 (output_bfd,
4612	      sparc_vxworks_exec_plt0_entry[2],
4613	      htab->elf.splt->contents + 8);
4614  bfd_put_32 (output_bfd,
4615	      sparc_vxworks_exec_plt0_entry[3],
4616	      htab->elf.splt->contents + 12);
4617  bfd_put_32 (output_bfd,
4618	      sparc_vxworks_exec_plt0_entry[4],
4619	      htab->elf.splt->contents + 16);
4620
4621  loc = htab->srelplt2->contents;
4622
4623  /* Add an unloaded relocation for the initial entry's "sethi".  */
4624  rela.r_offset = (htab->elf.splt->output_section->vma
4625		   + htab->elf.splt->output_offset);
4626  rela.r_info = ELF32_R_INFO (htab->elf.hgot->indx, R_SPARC_HI22);
4627  rela.r_addend = 8;
4628  bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
4629  loc += sizeof (Elf32_External_Rela);
4630
4631  /* Likewise the following "or".  */
4632  rela.r_offset += 4;
4633  rela.r_info = ELF32_R_INFO (htab->elf.hgot->indx, R_SPARC_LO10);
4634  bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
4635  loc += sizeof (Elf32_External_Rela);
4636
4637  /* Fix up the remaining .rela.plt.unloaded relocations.  They may have
4638     the wrong symbol index for _G_O_T_ or _P_L_T_ depending on the order
4639     in which symbols were output.  */
4640  while (loc < htab->srelplt2->contents + htab->srelplt2->size)
4641    {
4642      Elf_Internal_Rela rel;
4643
4644      /* The entry's initial "sethi" (against _G_O_T_).  */
4645      bfd_elf32_swap_reloc_in (output_bfd, loc, &rel);
4646      rel.r_info = ELF32_R_INFO (htab->elf.hgot->indx, R_SPARC_HI22);
4647      bfd_elf32_swap_reloc_out (output_bfd, &rel, loc);
4648      loc += sizeof (Elf32_External_Rela);
4649
4650      /* The following "or" (also against _G_O_T_).  */
4651      bfd_elf32_swap_reloc_in (output_bfd, loc, &rel);
4652      rel.r_info = ELF32_R_INFO (htab->elf.hgot->indx, R_SPARC_LO10);
4653      bfd_elf32_swap_reloc_out (output_bfd, &rel, loc);
4654      loc += sizeof (Elf32_External_Rela);
4655
4656      /* The .got.plt entry (against _P_L_T_).  */
4657      bfd_elf32_swap_reloc_in (output_bfd, loc, &rel);
4658      rel.r_info = ELF32_R_INFO (htab->elf.hplt->indx, R_SPARC_32);
4659      bfd_elf32_swap_reloc_out (output_bfd, &rel, loc);
4660      loc += sizeof (Elf32_External_Rela);
4661    }
4662}
4663
4664/* Install the first PLT entry in a VxWorks shared object.  */
4665
4666static void
4667sparc_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
4668{
4669  struct _bfd_sparc_elf_link_hash_table *htab;
4670  unsigned int i;
4671
4672  htab = _bfd_sparc_elf_hash_table (info);
4673  BFD_ASSERT (htab != NULL);
4674
4675  for (i = 0; i < ARRAY_SIZE (sparc_vxworks_shared_plt0_entry); i++)
4676    bfd_put_32 (output_bfd, sparc_vxworks_shared_plt0_entry[i],
4677		htab->elf.splt->contents + i * 4);
4678}
4679
4680/* Finish up local dynamic symbol handling.  We set the contents of
4681   various dynamic sections here.  */
4682
4683static int
4684finish_local_dynamic_symbol (void **slot, void *inf)
4685{
4686  struct elf_link_hash_entry *h
4687    = (struct elf_link_hash_entry *) *slot;
4688  struct bfd_link_info *info
4689    = (struct bfd_link_info *) inf;
4690
4691  return _bfd_sparc_elf_finish_dynamic_symbol (info->output_bfd, info,
4692					       h, NULL);
4693}
4694
4695/* Finish up undefined weak symbol handling in PIE.  Fill its PLT entry
4696   here since undefined weak symbol may not be dynamic and may not be
4697   called for _bfd_sparc_elf_finish_dynamic_symbol.  */
4698
4699static bool
4700pie_finish_undefweak_symbol (struct bfd_hash_entry *bh,
4701			     void *inf)
4702{
4703  struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) bh;
4704  struct bfd_link_info *info = (struct bfd_link_info *) inf;
4705
4706  if (h->root.type != bfd_link_hash_undefweak
4707      || h->dynindx != -1)
4708    return true;
4709
4710  return _bfd_sparc_elf_finish_dynamic_symbol (info->output_bfd, info,
4711					       h, NULL);
4712}
4713
4714bool
4715_bfd_sparc_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
4716{
4717  bfd *dynobj;
4718  asection *sdyn;
4719  struct _bfd_sparc_elf_link_hash_table *htab;
4720
4721  htab = _bfd_sparc_elf_hash_table (info);
4722  BFD_ASSERT (htab != NULL);
4723  dynobj = htab->elf.dynobj;
4724
4725  /* We arranged in size_dynamic_sections to put the STT_REGISTER
4726     entries at the end of the dynlocal list, so they came at the end
4727     of the local symbols in the symtab.  Except that they aren't
4728     STB_LOCAL, so we need to back up symtab->sh_info.  */
4729  if (ABI_64_P (output_bfd)
4730      && elf_hash_table (info)->dynlocal)
4731    {
4732      asection *dynsymsec = bfd_get_linker_section (dynobj, ".dynsym");
4733      struct elf_link_local_dynamic_entry *e;
4734
4735      for (e = elf_hash_table (info)->dynlocal; e ; e = e->next)
4736	if (e->input_indx == -1)
4737	  break;
4738      if (e)
4739	elf_section_data (dynsymsec->output_section)->this_hdr.sh_info
4740	  = e->dynindx;
4741    }
4742
4743  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
4744
4745  if (elf_hash_table (info)->dynamic_sections_created)
4746    {
4747      asection *splt;
4748
4749      splt = htab->elf.splt;
4750      BFD_ASSERT (splt != NULL && sdyn != NULL);
4751
4752      if (!sparc_finish_dyn (output_bfd, info, dynobj, sdyn, splt))
4753	return false;
4754
4755      /* Initialize the contents of the .plt section.  */
4756      if (splt->size > 0)
4757	{
4758	  if (htab->elf.target_os == is_vxworks)
4759	    {
4760	      if (bfd_link_pic (info))
4761		sparc_vxworks_finish_shared_plt (output_bfd, info);
4762	      else
4763		sparc_vxworks_finish_exec_plt (output_bfd, info);
4764	    }
4765	  else
4766	    {
4767	      memset (splt->contents, 0, htab->plt_header_size);
4768	      if (!ABI_64_P (output_bfd))
4769		bfd_put_32 (output_bfd, (bfd_vma) SPARC_NOP,
4770			    splt->contents + splt->size - 4);
4771	    }
4772	}
4773
4774      if (elf_section_data (splt->output_section) != NULL)
4775	elf_section_data (splt->output_section)->this_hdr.sh_entsize
4776	  = ((htab->elf.target_os == is_vxworks
4777	      || !ABI_64_P (output_bfd))
4778	     ? 0 : htab->plt_entry_size);
4779    }
4780
4781  /* Set the first entry in the global offset table to the address of
4782     the dynamic section.  */
4783  if (htab->elf.sgot && htab->elf.sgot->size > 0)
4784    {
4785      bfd_vma val = (sdyn ?
4786		     sdyn->output_section->vma + sdyn->output_offset :
4787		     0);
4788
4789      SPARC_ELF_PUT_WORD (htab, output_bfd, val, htab->elf.sgot->contents);
4790    }
4791
4792  if (htab->elf.sgot)
4793    elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize =
4794      SPARC_ELF_WORD_BYTES (htab);
4795
4796  /* Fill PLT and GOT entries for local STT_GNU_IFUNC symbols.  */
4797  htab_traverse (htab->loc_hash_table, finish_local_dynamic_symbol, info);
4798
4799  /* Fill PLT entries for undefined weak symbols in PIE.  */
4800  if (bfd_link_pie (info))
4801    bfd_hash_traverse (&info->hash->table,
4802		       pie_finish_undefweak_symbol,
4803		       info);
4804  return true;
4805}
4806
4807
4808/* Set the right machine number for a SPARC ELF file.  */
4809
4810bool
4811_bfd_sparc_elf_object_p (bfd *abfd)
4812{
4813  obj_attribute *attrs = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU];
4814  obj_attribute *hwcaps = &attrs[Tag_GNU_Sparc_HWCAPS];
4815  obj_attribute *hwcaps2 = &attrs[Tag_GNU_Sparc_HWCAPS2];
4816
4817  unsigned int v9c_hwcaps_mask = ELF_SPARC_HWCAP_ASI_BLK_INIT;
4818  unsigned int v9d_hwcaps_mask = (ELF_SPARC_HWCAP_FMAF
4819				  | ELF_SPARC_HWCAP_VIS3
4820				  | ELF_SPARC_HWCAP_HPC);
4821  unsigned int v9e_hwcaps_mask = (ELF_SPARC_HWCAP_AES
4822				  | ELF_SPARC_HWCAP_DES
4823				  | ELF_SPARC_HWCAP_KASUMI
4824				  | ELF_SPARC_HWCAP_CAMELLIA
4825				  | ELF_SPARC_HWCAP_MD5
4826				  | ELF_SPARC_HWCAP_SHA1
4827				  | ELF_SPARC_HWCAP_SHA256
4828				  | ELF_SPARC_HWCAP_SHA512
4829				  | ELF_SPARC_HWCAP_MPMUL
4830				  | ELF_SPARC_HWCAP_MONT
4831				  | ELF_SPARC_HWCAP_CRC32C
4832				  | ELF_SPARC_HWCAP_CBCOND
4833				  | ELF_SPARC_HWCAP_PAUSE);
4834  unsigned int v9v_hwcaps_mask = (ELF_SPARC_HWCAP_FJFMAU
4835				 | ELF_SPARC_HWCAP_IMA);
4836  unsigned int v9m_hwcaps2_mask = (ELF_SPARC_HWCAP2_SPARC5
4837				   | ELF_SPARC_HWCAP2_MWAIT
4838				   | ELF_SPARC_HWCAP2_XMPMUL
4839				   | ELF_SPARC_HWCAP2_XMONT);
4840  unsigned int m8_hwcaps2_mask = (ELF_SPARC_HWCAP2_SPARC6
4841				  | ELF_SPARC_HWCAP2_ONADDSUB
4842				  | ELF_SPARC_HWCAP2_ONMUL
4843				  | ELF_SPARC_HWCAP2_ONDIV
4844				  | ELF_SPARC_HWCAP2_DICTUNP
4845				  | ELF_SPARC_HWCAP2_FPCMPSHL
4846				  | ELF_SPARC_HWCAP2_RLE
4847				  | ELF_SPARC_HWCAP2_SHA3);
4848
4849  if (ABI_64_P (abfd))
4850    {
4851      unsigned long mach = bfd_mach_sparc_v9;
4852
4853      if (hwcaps2->i & m8_hwcaps2_mask)
4854	mach = bfd_mach_sparc_v9m8;
4855      else if (hwcaps2->i & v9m_hwcaps2_mask)
4856	mach = bfd_mach_sparc_v9m;
4857      else if (hwcaps->i & v9v_hwcaps_mask)
4858	mach = bfd_mach_sparc_v9v;
4859      else if (hwcaps->i & v9e_hwcaps_mask)
4860	mach = bfd_mach_sparc_v9e;
4861      else if (hwcaps->i & v9d_hwcaps_mask)
4862	mach = bfd_mach_sparc_v9d;
4863      else if (hwcaps->i & v9c_hwcaps_mask)
4864	mach = bfd_mach_sparc_v9c;
4865      else if (elf_elfheader (abfd)->e_flags & EF_SPARC_SUN_US3)
4866	mach = bfd_mach_sparc_v9b;
4867      else if (elf_elfheader (abfd)->e_flags & EF_SPARC_SUN_US1)
4868	mach = bfd_mach_sparc_v9a;
4869      return bfd_default_set_arch_mach (abfd, bfd_arch_sparc, mach);
4870    }
4871  else
4872    {
4873      if (elf_elfheader (abfd)->e_machine == EM_SPARC32PLUS)
4874	{
4875	  if (hwcaps2->i & m8_hwcaps2_mask)
4876	    return bfd_default_set_arch_mach (abfd, bfd_arch_sparc,
4877					      bfd_mach_sparc_v8plusm8);
4878	  else if (hwcaps2->i & v9m_hwcaps2_mask)
4879	    return bfd_default_set_arch_mach (abfd, bfd_arch_sparc,
4880					      bfd_mach_sparc_v8plusm);
4881	  else if (hwcaps->i & v9v_hwcaps_mask)
4882	    return bfd_default_set_arch_mach (abfd, bfd_arch_sparc,
4883					      bfd_mach_sparc_v8plusv);
4884	  else if (hwcaps->i & v9e_hwcaps_mask)
4885	    return bfd_default_set_arch_mach (abfd, bfd_arch_sparc,
4886					      bfd_mach_sparc_v8pluse);
4887	  else if (hwcaps->i & v9d_hwcaps_mask)
4888	    return bfd_default_set_arch_mach (abfd, bfd_arch_sparc,
4889					      bfd_mach_sparc_v8plusd);
4890	  else if (hwcaps->i & v9c_hwcaps_mask)
4891	    return bfd_default_set_arch_mach (abfd, bfd_arch_sparc,
4892					      bfd_mach_sparc_v8plusc);
4893	  else if (elf_elfheader (abfd)->e_flags & EF_SPARC_SUN_US3)
4894	    return bfd_default_set_arch_mach (abfd, bfd_arch_sparc,
4895					      bfd_mach_sparc_v8plusb);
4896	  else if (elf_elfheader (abfd)->e_flags & EF_SPARC_SUN_US1)
4897	    return bfd_default_set_arch_mach (abfd, bfd_arch_sparc,
4898					      bfd_mach_sparc_v8plusa);
4899	  else if (elf_elfheader (abfd)->e_flags & EF_SPARC_32PLUS)
4900	    return bfd_default_set_arch_mach (abfd, bfd_arch_sparc,
4901					      bfd_mach_sparc_v8plus);
4902	  else
4903	    return false;
4904	}
4905      else if (elf_elfheader (abfd)->e_flags & EF_SPARC_LEDATA)
4906	return bfd_default_set_arch_mach (abfd, bfd_arch_sparc,
4907					  bfd_mach_sparc_sparclite_le);
4908      else
4909	return bfd_default_set_arch_mach (abfd, bfd_arch_sparc, bfd_mach_sparc);
4910    }
4911}
4912
4913/* Return address for Ith PLT stub in section PLT, for relocation REL
4914   or (bfd_vma) -1 if it should not be included.  */
4915
4916bfd_vma
4917_bfd_sparc_elf_plt_sym_val (bfd_vma i, const asection *plt, const arelent *rel)
4918{
4919  if (ABI_64_P (plt->owner))
4920    {
4921      bfd_vma j;
4922
4923      i += PLT64_HEADER_SIZE / PLT64_ENTRY_SIZE;
4924      if (i < PLT64_LARGE_THRESHOLD)
4925	return plt->vma + i * PLT64_ENTRY_SIZE;
4926
4927      j = (i - PLT64_LARGE_THRESHOLD) % 160;
4928      i -= j;
4929      return plt->vma + i * PLT64_ENTRY_SIZE + j * 4 * 6;
4930    }
4931  else
4932    return rel->address;
4933}
4934
4935/* Merge backend specific data from an object file to the output
4936   object file when linking.  */
4937
4938bool
4939_bfd_sparc_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
4940{
4941  bfd *obfd = info->output_bfd;
4942  obj_attribute *in_attr, *in_attrs;
4943  obj_attribute *out_attr, *out_attrs;
4944
4945  if (!elf_known_obj_attributes_proc (obfd)[0].i)
4946    {
4947      /* This is the first object.  Copy the attributes.  */
4948      _bfd_elf_copy_obj_attributes (ibfd, obfd);
4949
4950      /* Use the Tag_null value to indicate the attributes have been
4951	 initialized.  */
4952      elf_known_obj_attributes_proc (obfd)[0].i = 1;
4953
4954      return true;
4955    }
4956
4957  in_attrs = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
4958  out_attrs = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
4959
4960  in_attr = &in_attrs[Tag_GNU_Sparc_HWCAPS];
4961  out_attr = &out_attrs[Tag_GNU_Sparc_HWCAPS];
4962
4963  out_attr->i |= in_attr->i;
4964  out_attr->type = 1;
4965
4966  in_attr = &in_attrs[Tag_GNU_Sparc_HWCAPS2];
4967  out_attr = &out_attrs[Tag_GNU_Sparc_HWCAPS2];
4968
4969  out_attr->i |= in_attr->i;
4970  out_attr->type = 1;
4971
4972  /* Merge Tag_compatibility attributes and any common GNU ones.  */
4973  _bfd_elf_merge_object_attributes (ibfd, info);
4974
4975  return true;
4976}
4977