1/* CRIS-specific support for 32-bit ELF.
2   Copyright (C) 2000-2017 Free Software Foundation, Inc.
3   Contributed by Axis Communications AB.
4   Written by Hans-Peter Nilsson, based on elf32-fr30.c
5   PIC and shlib bits based primarily on elf32-m68k.c and elf32-i386.c.
6
7   This file is part of BFD, the Binary File Descriptor library.
8
9   This program is free software; you can redistribute it and/or modify
10   it under the terms of the GNU General Public License as published by
11   the Free Software Foundation; either version 3 of the License, or
12   (at your option) any later version.
13
14   This program is distributed in the hope that it will be useful,
15   but WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   GNU General Public License for more details.
18
19   You should have received a copy of the GNU General Public License
20   along with this program; if not, write to the Free Software
21   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
22   MA 02110-1301, USA.  */
23
24#include "sysdep.h"
25#include "bfd.h"
26#include "libbfd.h"
27#include "elf-bfd.h"
28#include "elf/cris.h"
29#include <limits.h>
30
31bfd_reloc_status_type
32cris_elf_pcrel_reloc (bfd *, arelent *, asymbol *, void *,
33		      asection *, bfd *, char **);
34static bfd_boolean
35cris_elf_set_mach_from_flags (bfd *, unsigned long);
36
37/* Forward declarations.  */
38static reloc_howto_type cris_elf_howto_table [] =
39{
40  /* This reloc does nothing.  */
41  HOWTO (R_CRIS_NONE,		/* type */
42	 0,			/* rightshift */
43	 3,			/* size (0 = byte, 1 = short, 2 = long) */
44	 0,			/* bitsize */
45	 FALSE,			/* pc_relative */
46	 0,			/* bitpos */
47	 complain_overflow_dont, /* complain_on_overflow */
48	 bfd_elf_generic_reloc,	/* special_function */
49	 "R_CRIS_NONE",		/* name */
50	 FALSE,			/* partial_inplace */
51	 0,			/* src_mask */
52	 0,			/* dst_mask */
53	 FALSE),		/* pcrel_offset */
54
55  /* An 8 bit absolute relocation.  */
56  HOWTO (R_CRIS_8,		/* type */
57	 0,			/* rightshift */
58	 0,			/* size (0 = byte, 1 = short, 2 = long) */
59	 8,			/* bitsize */
60	 FALSE,			/* pc_relative */
61	 0,			/* bitpos */
62	 complain_overflow_bitfield, /* complain_on_overflow */
63	 bfd_elf_generic_reloc,	/* special_function */
64	 "R_CRIS_8",		/* name */
65	 FALSE,			/* partial_inplace */
66	 0x0000,		/* src_mask */
67	 0x00ff,		/* dst_mask */
68	 FALSE),		/* pcrel_offset */
69
70  /* A 16 bit absolute relocation.  */
71  HOWTO (R_CRIS_16,		/* type */
72	 0,			/* rightshift */
73	 1,			/* size (0 = byte, 1 = short, 2 = long) */
74	 16,			/* bitsize */
75	 FALSE,			/* pc_relative */
76	 0,			/* bitpos */
77	 complain_overflow_bitfield, /* complain_on_overflow */
78	 bfd_elf_generic_reloc,	/* special_function */
79	 "R_CRIS_16",		/* name */
80	 FALSE,			/* partial_inplace */
81	 0x00000000,		/* src_mask */
82	 0x0000ffff,		/* dst_mask */
83	 FALSE),		/* pcrel_offset */
84
85  /* A 32 bit absolute relocation.  */
86  HOWTO (R_CRIS_32,		/* type */
87	 0,			/* rightshift */
88	 2,			/* size (0 = byte, 1 = short, 2 = long) */
89	 32,			/* bitsize */
90	 FALSE,			/* pc_relative */
91	 0,			/* bitpos */
92	 /* We don't want overflow complaints for 64-bit vma builds
93	    for e.g. sym+0x40000000 (or actually sym-0xc0000000 in
94	    32-bit ELF) where sym=0xc0001234.
95	    Don't do this for the PIC relocs, as we don't expect to
96	    see them with large offsets.  */
97	 complain_overflow_dont, /* complain_on_overflow */
98	 bfd_elf_generic_reloc,	/* special_function */
99	 "R_CRIS_32",		/* name */
100	 FALSE,			/* partial_inplace */
101	 0x00000000,		/* src_mask */
102	 0xffffffff,		/* dst_mask */
103	 FALSE),		/* pcrel_offset */
104
105  /* An 8 bit PC-relative relocation.  */
106  HOWTO (R_CRIS_8_PCREL,	/* type */
107	 0,			/* rightshift */
108	 0,			/* size (0 = byte, 1 = short, 2 = long) */
109	 8,			/* bitsize */
110	 TRUE,			/* pc_relative */
111	 0,			/* bitpos */
112	 complain_overflow_bitfield, /* complain_on_overflow */
113	 cris_elf_pcrel_reloc,	/* special_function */
114	 "R_CRIS_8_PCREL",	/* name */
115	 FALSE,			/* partial_inplace */
116	 0x0000,		/* src_mask */
117	 0x00ff,		/* dst_mask */
118	 TRUE),			/* pcrel_offset */
119
120  /* A 16 bit PC-relative relocation.  */
121  HOWTO (R_CRIS_16_PCREL,	/* type */
122	 0,			/* rightshift */
123	 1,			/* size (0 = byte, 1 = short, 2 = long) */
124	 16,			/* bitsize */
125	 TRUE,			/* pc_relative */
126	 0,			/* bitpos */
127	 complain_overflow_bitfield, /* complain_on_overflow */
128	 cris_elf_pcrel_reloc,	/* special_function */
129	 "R_CRIS_16_PCREL",	/* name */
130	 FALSE,			/* partial_inplace */
131	 0x00000000,		/* src_mask */
132	 0x0000ffff,		/* dst_mask */
133	 TRUE),			/* pcrel_offset */
134
135  /* A 32 bit PC-relative relocation.  */
136  HOWTO (R_CRIS_32_PCREL,	/* type */
137	 0,			/* rightshift */
138	 2,			/* size (0 = byte, 1 = short, 2 = long) */
139	 32,			/* bitsize */
140	 TRUE,			/* pc_relative */
141	 0,			/* bitpos */
142	 complain_overflow_bitfield, /* complain_on_overflow */
143	 cris_elf_pcrel_reloc,	/* special_function */
144	 "R_CRIS_32_PCREL",	/* name */
145	 FALSE,			/* partial_inplace */
146	 0x00000000,		/* src_mask */
147	 0xffffffff,		/* dst_mask */
148	 TRUE),			/* pcrel_offset */
149
150  /* GNU extension to record C++ vtable hierarchy.  */
151  HOWTO (R_CRIS_GNU_VTINHERIT,	/* type */
152	 0,			/* rightshift */
153	 2,			/* size (0 = byte, 1 = short, 2 = long) */
154	 0,			/* bitsize */
155	 FALSE,			/* pc_relative */
156	 0,			/* bitpos */
157	 complain_overflow_dont, /* complain_on_overflow */
158	 NULL,			/* special_function */
159	 "R_CRIS_GNU_VTINHERIT", /* name */
160	 FALSE,			/* partial_inplace */
161	 0,			/* src_mask */
162	 0,			/* dst_mask */
163	 FALSE),		/* pcrel_offset */
164
165  /* GNU extension to record C++ vtable member usage.  */
166  HOWTO (R_CRIS_GNU_VTENTRY,	/* type */
167	 0,			/* rightshift */
168	 2,			/* size (0 = byte, 1 = short, 2 = long) */
169	 0,			/* bitsize */
170	 FALSE,			/* pc_relative */
171	 0,			/* bitpos */
172	 complain_overflow_dont, /* complain_on_overflow */
173	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
174	 "R_CRIS_GNU_VTENTRY",	 /* name */
175	 FALSE,			/* partial_inplace */
176	 0,			/* src_mask */
177	 0,			/* dst_mask */
178	 FALSE),		/* pcrel_offset */
179
180  /* This is used only by the dynamic linker.  The symbol should exist
181     both in the object being run and in some shared library.  The
182     dynamic linker copies the data addressed by the symbol from the
183     shared library into the object, because the object being
184     run has to have the data at some particular address.  */
185  HOWTO (R_CRIS_COPY,		/* type */
186	 0,			/* rightshift */
187	 2,			/* size (0 = byte, 1 = short, 2 = long) */
188	 32,			/* bitsize */
189	 FALSE,			/* pc_relative */
190	 0,			/* bitpos */
191	 complain_overflow_bitfield, /* complain_on_overflow */
192	 bfd_elf_generic_reloc,	/* special_function */
193	 "R_CRIS_COPY",		/* name */
194	 FALSE,			/* partial_inplace */
195	 0,			/* src_mask */
196	 0,			/* dst_mask */
197	 FALSE),		/* pcrel_offset */
198
199  /* Like R_CRIS_32, but used when setting global offset table entries.  */
200  HOWTO (R_CRIS_GLOB_DAT,	/* type */
201	 0,			/* rightshift */
202	 2,			/* size (0 = byte, 1 = short, 2 = long) */
203	 32,			/* bitsize */
204	 FALSE,			/* pc_relative */
205	 0,			/* bitpos */
206	 complain_overflow_bitfield, /* complain_on_overflow */
207	 bfd_elf_generic_reloc,	/* special_function */
208	 "R_CRIS_GLOB_DAT",	/* name */
209	 FALSE,			/* partial_inplace */
210	 0,			/* src_mask */
211	 0xffffffff,		/* dst_mask */
212	 FALSE),		/* pcrel_offset */
213
214  /* Marks a procedure linkage table entry for a symbol.  */
215  HOWTO (R_CRIS_JUMP_SLOT,	/* type */
216	 0,			/* rightshift */
217	 2,			/* size (0 = byte, 1 = short, 2 = long) */
218	 32,			/* bitsize */
219	 FALSE,			/* pc_relative */
220	 0,			/* bitpos */
221	 complain_overflow_bitfield, /* complain_on_overflow */
222	 bfd_elf_generic_reloc,	/* special_function */
223	 "R_CRIS_JUMP_SLOT",	/* name */
224	 FALSE,			/* partial_inplace */
225	 0,			/* src_mask */
226	 0,			/* dst_mask */
227	 FALSE),		/* pcrel_offset */
228
229  /* Used only by the dynamic linker.  When the object is run, this
230     longword is set to the load address of the object, plus the
231     addend.  */
232  HOWTO (R_CRIS_RELATIVE,	/* type */
233	 0,			/* rightshift */
234	 2,			/* size (0 = byte, 1 = short, 2 = long) */
235	 32,			/* bitsize */
236	 FALSE,			/* pc_relative */
237	 0,			/* bitpos */
238	 complain_overflow_bitfield, /* complain_on_overflow */
239	 bfd_elf_generic_reloc,	/* special_function */
240	 "R_CRIS_RELATIVE",	/* name */
241	 FALSE,			/* partial_inplace */
242	 0,			/* src_mask */
243	 0xffffffff,		/* dst_mask */
244	 FALSE),		/* pcrel_offset */
245
246  /* Like R_CRIS_32, but referring to the GOT table entry for the symbol.  */
247  HOWTO (R_CRIS_16_GOT,		/* type */
248	 0,			/* rightshift */
249	 1,			/* size (0 = byte, 1 = short, 2 = long) */
250	 16,			/* bitsize */
251	 FALSE,			/* pc_relative */
252	 0,			/* bitpos */
253	 complain_overflow_bitfield, /* complain_on_overflow */
254	 bfd_elf_generic_reloc,	/* special_function */
255	 "R_CRIS_16_GOT",	/* name */
256	 FALSE,			/* partial_inplace */
257	 0,			/* src_mask */
258	 0xffff,		/* dst_mask */
259	 FALSE),		/* pcrel_offset */
260
261  HOWTO (R_CRIS_32_GOT,		/* type */
262	 0,			/* rightshift */
263	 2,			/* size (0 = byte, 1 = short, 2 = long) */
264	 32,			/* bitsize */
265	 FALSE,			/* pc_relative */
266	 0,			/* bitpos */
267	 complain_overflow_bitfield, /* complain_on_overflow */
268	 bfd_elf_generic_reloc,	/* special_function */
269	 "R_CRIS_32_GOT",	/* name */
270	 FALSE,			/* partial_inplace */
271	 0,			/* src_mask */
272	 0xffffffff,		/* dst_mask */
273	 FALSE),		/* pcrel_offset */
274
275  /* Like R_CRIS_32_GOT, but referring to (and requesting a) PLT part of
276     the GOT table for the symbol.  */
277  HOWTO (R_CRIS_16_GOTPLT,	/* type */
278	 0,			/* rightshift */
279	 1,			/* size (0 = byte, 1 = short, 2 = long) */
280	 16,			/* bitsize */
281	 FALSE,			/* pc_relative */
282	 0,			/* bitpos */
283	 complain_overflow_bitfield, /* complain_on_overflow */
284	 bfd_elf_generic_reloc,	/* special_function */
285	 "R_CRIS_16_GOTPLT",	/* name */
286	 FALSE,			/* partial_inplace */
287	 0,			/* src_mask */
288	 0xffff,		/* dst_mask */
289	 FALSE),		/* pcrel_offset */
290
291  HOWTO (R_CRIS_32_GOTPLT,	/* type */
292	 0,			/* rightshift */
293	 2,			/* size (0 = byte, 1 = short, 2 = long) */
294	 32,			/* bitsize */
295	 FALSE,			/* pc_relative */
296	 0,			/* bitpos */
297	 complain_overflow_bitfield, /* complain_on_overflow */
298	 bfd_elf_generic_reloc,	/* special_function */
299	 "R_CRIS_32_GOTPLT",	/* name */
300	 FALSE,			/* partial_inplace */
301	 0,			/* src_mask */
302	 0xffffffff,		/* dst_mask */
303	 FALSE),		/* pcrel_offset */
304
305  /* A 32-bit offset from GOT to (local const) symbol: no GOT entry should
306     be necessary.  */
307  HOWTO (R_CRIS_32_GOTREL,	/* type */
308	 0,			/* rightshift */
309	 2,			/* size (0 = byte, 1 = short, 2 = long) */
310	 32,			/* bitsize */
311	 FALSE,			/* pc_relative */
312	 0,			/* bitpos */
313	 complain_overflow_bitfield, /* complain_on_overflow */
314	 bfd_elf_generic_reloc,	/* special_function */
315	 "R_CRIS_32_GOTREL",	/* name */
316	 FALSE,			/* partial_inplace */
317	 0,			/* src_mask */
318	 0xffffffff,		/* dst_mask */
319	 FALSE),		/* pcrel_offset */
320
321  /* A 32-bit offset from GOT to entry for this symbol in PLT and request
322     to create PLT entry for symbol.  */
323  HOWTO (R_CRIS_32_PLT_GOTREL,	/* type */
324	 0,			/* rightshift */
325	 2,			/* size (0 = byte, 1 = short, 2 = long) */
326	 32,			/* bitsize */
327	 FALSE,			/* pc_relative */
328	 0,			/* bitpos */
329	 complain_overflow_bitfield, /* complain_on_overflow */
330	 bfd_elf_generic_reloc,	/* special_function */
331	 "R_CRIS_32_PLT_GOTREL", /* name */
332	 FALSE,			/* partial_inplace */
333	 0,			/* src_mask */
334	 0xffffffff,		/* dst_mask */
335	 FALSE),		/* pcrel_offset */
336
337  /* A 32-bit offset from PC (location after the relocation) + addend to
338     entry for this symbol in PLT and request to create PLT entry for
339     symbol.  */
340  HOWTO (R_CRIS_32_PLT_PCREL,	/* type */
341	 0,			/* rightshift */
342	 2,			/* size (0 = byte, 1 = short, 2 = long) */
343	 32,			/* bitsize */
344	 TRUE,			/* pc_relative */
345	 0,			/* bitpos */
346	 complain_overflow_bitfield, /* complain_on_overflow */
347	 cris_elf_pcrel_reloc,	/* special_function */
348	 "R_CRIS_32_PLT_PCREL",	/* name */
349	 FALSE,			/* partial_inplace */
350	 0,			/* src_mask */
351	 0xffffffff,		/* dst_mask */
352	 TRUE),			/* pcrel_offset */
353
354  /* We don't handle these in any special manner and cross-format
355     linking is not supported; just recognize them enough to pass them
356     around.  FIXME: do the same for most PIC relocs and add sanity
357     tests to actually refuse gracefully to handle these and PIC
358     relocs for cross-format linking.  */
359#define TLSHOWTO32(name) \
360 HOWTO (name, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, \
361        bfd_elf_generic_reloc, #name, FALSE, 0, 0xffffffff, FALSE)
362#define TLSHOWTO16X(name, X)	     \
363 HOWTO (name, 0, 1, 16, FALSE, 0, complain_overflow_ ## X, \
364        bfd_elf_generic_reloc, #name, FALSE, 0, 0xffff, FALSE)
365#define TLSHOWTO16(name) TLSHOWTO16X(name, unsigned)
366#define TLSHOWTO16S(name) TLSHOWTO16X(name, signed)
367
368  TLSHOWTO32 (R_CRIS_32_GOT_GD),
369  TLSHOWTO16 (R_CRIS_16_GOT_GD),
370  TLSHOWTO32 (R_CRIS_32_GD),
371  TLSHOWTO32 (R_CRIS_DTP),
372  TLSHOWTO32 (R_CRIS_32_DTPREL),
373  TLSHOWTO16S (R_CRIS_16_DTPREL),
374  TLSHOWTO32 (R_CRIS_32_GOT_TPREL),
375  TLSHOWTO16S (R_CRIS_16_GOT_TPREL),
376  TLSHOWTO32 (R_CRIS_32_TPREL),
377  TLSHOWTO16S (R_CRIS_16_TPREL),
378  TLSHOWTO32 (R_CRIS_DTPMOD),
379  TLSHOWTO32 (R_CRIS_32_IE)
380};
381
382/* Map BFD reloc types to CRIS ELF reloc types.  */
383
384struct cris_reloc_map
385{
386  bfd_reloc_code_real_type bfd_reloc_val;
387  unsigned int cris_reloc_val;
388};
389
390static const struct cris_reloc_map cris_reloc_map [] =
391{
392  { BFD_RELOC_NONE,		R_CRIS_NONE },
393  { BFD_RELOC_8,		R_CRIS_8 },
394  { BFD_RELOC_16,		R_CRIS_16 },
395  { BFD_RELOC_32,		R_CRIS_32 },
396  { BFD_RELOC_8_PCREL,		R_CRIS_8_PCREL },
397  { BFD_RELOC_16_PCREL,		R_CRIS_16_PCREL },
398  { BFD_RELOC_32_PCREL,		R_CRIS_32_PCREL },
399  { BFD_RELOC_VTABLE_INHERIT,	R_CRIS_GNU_VTINHERIT },
400  { BFD_RELOC_VTABLE_ENTRY,	R_CRIS_GNU_VTENTRY },
401  { BFD_RELOC_CRIS_COPY,	R_CRIS_COPY },
402  { BFD_RELOC_CRIS_GLOB_DAT,	R_CRIS_GLOB_DAT },
403  { BFD_RELOC_CRIS_JUMP_SLOT,	R_CRIS_JUMP_SLOT },
404  { BFD_RELOC_CRIS_RELATIVE,	R_CRIS_RELATIVE },
405  { BFD_RELOC_CRIS_16_GOT,	R_CRIS_16_GOT },
406  { BFD_RELOC_CRIS_32_GOT,	R_CRIS_32_GOT },
407  { BFD_RELOC_CRIS_16_GOTPLT,	R_CRIS_16_GOTPLT },
408  { BFD_RELOC_CRIS_32_GOTPLT,	R_CRIS_32_GOTPLT },
409  { BFD_RELOC_CRIS_32_GOTREL,	R_CRIS_32_GOTREL },
410  { BFD_RELOC_CRIS_32_PLT_GOTREL, R_CRIS_32_PLT_GOTREL },
411  { BFD_RELOC_CRIS_32_PLT_PCREL, R_CRIS_32_PLT_PCREL },
412  { BFD_RELOC_CRIS_32_GOT_GD,	R_CRIS_32_GOT_GD },
413  { BFD_RELOC_CRIS_16_GOT_GD,	R_CRIS_16_GOT_GD },
414  { BFD_RELOC_CRIS_32_GD,	R_CRIS_32_GD },
415  { BFD_RELOC_CRIS_DTP,	R_CRIS_DTP },
416  { BFD_RELOC_CRIS_32_DTPREL,	R_CRIS_32_DTPREL },
417  { BFD_RELOC_CRIS_16_DTPREL,	R_CRIS_16_DTPREL },
418  { BFD_RELOC_CRIS_32_GOT_TPREL, R_CRIS_32_GOT_TPREL },
419  { BFD_RELOC_CRIS_16_GOT_TPREL, R_CRIS_16_GOT_TPREL },
420  { BFD_RELOC_CRIS_32_TPREL,	R_CRIS_32_TPREL },
421  { BFD_RELOC_CRIS_16_TPREL,	R_CRIS_16_TPREL },
422  { BFD_RELOC_CRIS_DTPMOD,	R_CRIS_DTPMOD },
423  { BFD_RELOC_CRIS_32_IE,	R_CRIS_32_IE }
424};
425
426static reloc_howto_type *
427cris_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
428			bfd_reloc_code_real_type code)
429{
430  unsigned int i;
431
432  for (i = 0; i < sizeof (cris_reloc_map) / sizeof (cris_reloc_map[0]); i++)
433    if (cris_reloc_map [i].bfd_reloc_val == code)
434      return & cris_elf_howto_table [cris_reloc_map[i].cris_reloc_val];
435
436  return NULL;
437}
438
439static reloc_howto_type *
440cris_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name)
441{
442  unsigned int i;
443
444  for (i = 0;
445       i < sizeof (cris_elf_howto_table) / sizeof (cris_elf_howto_table[0]);
446       i++)
447    if (cris_elf_howto_table[i].name != NULL
448	&& strcasecmp (cris_elf_howto_table[i].name, r_name) == 0)
449      return &cris_elf_howto_table[i];
450
451  return NULL;
452}
453
454/* Set the howto pointer for an CRIS ELF reloc.  */
455
456static void
457cris_info_to_howto_rela (bfd * abfd ATTRIBUTE_UNUSED,
458			 arelent * cache_ptr,
459			 Elf_Internal_Rela * dst)
460{
461  enum elf_cris_reloc_type r_type;
462
463  r_type = ELF32_R_TYPE (dst->r_info);
464  if (r_type >= R_CRIS_max)
465    {
466      /* xgettext:c-format */
467      _bfd_error_handler (_("%B: invalid CRIS reloc number: %d"), abfd, r_type);
468      r_type = 0;
469    }
470  cache_ptr->howto = & cris_elf_howto_table [r_type];
471}
472
473bfd_reloc_status_type
474cris_elf_pcrel_reloc (bfd *abfd ATTRIBUTE_UNUSED,
475		      arelent *reloc_entry,
476		      asymbol *symbol,
477		      void * data ATTRIBUTE_UNUSED,
478		      asection *input_section,
479		      bfd *output_bfd,
480		      char **error_message ATTRIBUTE_UNUSED)
481{
482  /* By default (using only bfd_elf_generic_reloc when linking to
483     non-ELF formats) PC-relative relocs are relative to the beginning
484     of the reloc.  CRIS PC-relative relocs are relative to the position
485     *after* the reloc because that's what pre-CRISv32 PC points to
486     after reading an insn field with that reloc.  (For CRISv32, PC is
487     actually relative to the start of the insn, but we keep the old
488     definition.)  Still, we use as much generic machinery as we can.
489
490     Only adjust when doing a final link.  */
491  if (output_bfd == (bfd *) NULL)
492    reloc_entry->addend -= 1 << reloc_entry->howto->size;
493
494  return
495    bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
496			   input_section, output_bfd, error_message);
497}
498
499/* Support for core dump NOTE sections.
500   The slightly unintuitive code layout is an attempt to keep at least
501   some similarities with other ports, hoping to simplify general
502   changes, while still keeping Linux/CRIS and Linux/CRISv32 code apart.  */
503
504static bfd_boolean
505cris_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
506{
507  int offset;
508  size_t size;
509
510  if (bfd_get_mach (abfd) == bfd_mach_cris_v32)
511    switch (note->descsz)
512      {
513      default:
514	return FALSE;
515
516      case 202:		/* Linux/CRISv32 */
517	/* pr_cursig */
518	elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
519
520	/* pr_pid */
521	elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 22);
522
523	/* pr_reg */
524	offset = 70;
525	size = 128;
526
527	break;
528      }
529  else
530    switch (note->descsz)
531      {
532      default:
533	return FALSE;
534
535      case 214:		/* Linux/CRIS */
536	/* pr_cursig */
537	elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
538
539	/* pr_pid */
540	elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 22);
541
542	/* pr_reg */
543	offset = 70;
544	size = 140;
545
546	break;
547      }
548
549  /* Make a ".reg/999" section.  */
550  return _bfd_elfcore_make_pseudosection (abfd, ".reg",
551					  size, note->descpos + offset);
552}
553
554static bfd_boolean
555cris_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
556{
557  if (bfd_get_mach (abfd) == bfd_mach_cris_v32)
558    switch (note->descsz)
559      {
560      default:
561	return FALSE;
562
563      case 124:		/* Linux/CRISv32 elf_prpsinfo */
564	elf_tdata (abfd)->core->program
565	  = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16);
566	elf_tdata (abfd)->core->command
567	  = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
568      }
569  else
570    switch (note->descsz)
571      {
572      default:
573	return FALSE;
574
575      case 124:		/* Linux/CRIS elf_prpsinfo */
576	elf_tdata (abfd)->core->program
577	  = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16);
578	elf_tdata (abfd)->core->command
579	  = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80);
580      }
581
582  /* Note that for some reason, a spurious space is tacked
583     onto the end of the args in some (at least one anyway)
584     implementations, so strip it off if it exists.  */
585
586  {
587    char *command = elf_tdata (abfd)->core->command;
588    int n = strlen (command);
589
590    if (0 < n && command[n - 1] == ' ')
591      command[n - 1] = '\0';
592  }
593
594  return TRUE;
595}
596
597/* The name of the dynamic interpreter.  This is put in the .interp
598   section.  */
599
600#define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1"
601
602/* The size in bytes of an entry in the procedure linkage table.  */
603
604#define PLT_ENTRY_SIZE 20
605#define PLT_ENTRY_SIZE_V32 26
606
607/* The first entry in an absolute procedure linkage table looks like this.  */
608
609static const bfd_byte elf_cris_plt0_entry[PLT_ENTRY_SIZE] =
610{
611  0xfc, 0xe1,
612  0x7e, 0x7e,	/* push mof.  */
613  0x7f, 0x0d,   /*  (dip [pc+]) */
614  0, 0, 0, 0,	/*  Replaced with address of .got + 4.  */
615  0x30, 0x7a,	/* move [...],mof */
616  0x7f, 0x0d,   /*  (dip [pc+]) */
617  0, 0, 0, 0,	/*  Replaced with address of .got + 8.  */
618  0x30, 0x09	/* jump [...] */
619};
620
621static const bfd_byte elf_cris_plt0_entry_v32[PLT_ENTRY_SIZE_V32] =
622{
623  0x84, 0xe2,	/* subq 4,$sp */
624  0x6f, 0xfe,	/* move.d 0,$acr */
625  0, 0, 0, 0,	/*  Replaced by address of .got + 4.  */
626  0x7e, 0x7a,	/* move $mof,[$sp] */
627  0x3f, 0x7a,	/* move [$acr],$mof */
628  0x04, 0xf2,	/* addq 4,acr */
629  0x6f, 0xfa,	/* move.d [$acr],$acr */
630  0xbf, 0x09,	/* jump $acr */
631  0xb0, 0x05,	/* nop */
632  0, 0		/*  Pad out to 26 bytes.  */
633};
634
635/* Subsequent entries in an absolute procedure linkage table look like
636   this.  */
637
638static const bfd_byte elf_cris_plt_entry[PLT_ENTRY_SIZE] =
639{
640  0x7f, 0x0d,   /*  (dip [pc+]) */
641  0, 0, 0, 0,	/*  Replaced with address of this symbol in .got.  */
642  0x30, 0x09,	/* jump [...] */
643  0x3f,	 0x7e,	/* move [pc+],mof */
644  0, 0, 0, 0,	/*  Replaced with offset into relocation table.  */
645  0x2f, 0xfe,	/* add.d [pc+],pc */
646  0xec, 0xff,
647  0xff, 0xff	/*  Replaced with offset to start of .plt.  */
648};
649
650static const bfd_byte elf_cris_plt_entry_v32[PLT_ENTRY_SIZE_V32] =
651{
652  0x6f, 0xfe,	/* move.d 0,$acr */
653  0, 0, 0, 0,	/*  Replaced with address of this symbol in .got.  */
654  0x6f, 0xfa,   /* move.d [$acr],$acr */
655  0xbf, 0x09,   /* jump $acr */
656  0xb0, 0x05,	/* nop */
657  0x3f, 0x7e,	/* move 0,mof */
658  0, 0, 0, 0,	/*  Replaced with offset into relocation table. */
659  0xbf, 0x0e,	/* ba start_of_plt0_entry */
660  0, 0, 0, 0,	/*  Replaced with offset to plt0 entry.  */
661  0xb0, 0x05	/* nop */
662};
663
664/* The first entry in a PIC procedure linkage table looks like this.  */
665
666static const bfd_byte elf_cris_pic_plt0_entry[PLT_ENTRY_SIZE] =
667{
668  0xfc, 0xe1, 0x7e, 0x7e,	/* push mof */
669  0x04, 0x01, 0x30, 0x7a,	/* move [r0+4],mof */
670  0x08, 0x01, 0x30, 0x09,	/* jump [r0+8] */
671  0, 0, 0, 0, 0, 0, 0, 0,	/*  Pad out to 20 bytes.  */
672};
673
674static const bfd_byte elf_cris_pic_plt0_entry_v32[PLT_ENTRY_SIZE_V32] =
675{
676  0x84, 0xe2,	/* subq 4,$sp */
677  0x04, 0x01,	/* addoq 4,$r0,$acr */
678  0x7e, 0x7a,	/* move $mof,[$sp] */
679  0x3f, 0x7a,	/* move [$acr],$mof */
680  0x04, 0xf2,	/* addq 4,$acr */
681  0x6f, 0xfa,	/* move.d [$acr],$acr */
682  0xbf, 0x09,	/* jump $acr */
683  0xb0, 0x05,	/* nop */
684  0, 0,		/*  Pad out to 26 bytes.  */
685  0, 0, 0, 0,
686  0, 0, 0, 0
687};
688
689/* Subsequent entries in a PIC procedure linkage table look like this.  */
690
691static const bfd_byte elf_cris_pic_plt_entry[PLT_ENTRY_SIZE] =
692{
693  0x6f, 0x0d,   /*  (bdap [pc+].d,r0) */
694  0, 0, 0, 0,	/*  Replaced with offset of this symbol in .got.  */
695  0x30, 0x09,	/* jump [...] */
696  0x3f, 0x7e,	/* move [pc+],mof */
697  0, 0, 0, 0,	/*  Replaced with offset into relocation table.  */
698  0x2f, 0xfe,	/* add.d [pc+],pc */
699  0xec, 0xff,	/*  Replaced with offset to start of .plt.  */
700  0xff, 0xff
701};
702
703static const bfd_byte elf_cris_pic_plt_entry_v32[PLT_ENTRY_SIZE_V32] =
704{
705  0x6f, 0x0d,	/* addo.d 0,$r0,$acr */
706  0, 0, 0, 0,	/*  Replaced with offset of this symbol in .got.  */
707  0x6f, 0xfa,	/* move.d [$acr],$acr */
708  0xbf, 0x09,	/* jump $acr */
709  0xb0, 0x05,	/* nop */
710  0x3f, 0x7e,	/* move relocoffs,$mof */
711  0, 0, 0, 0,	/*  Replaced with offset into relocation table.  */
712  0xbf, 0x0e,	/* ba start_of_plt */
713  0, 0, 0, 0,	/*  Replaced with offset to start of .plt.  */
714  0xb0, 0x05	/* nop */
715};
716
717/* We copy elf32-m68k.c and elf32-i386.c for the basic linker hash bits
718   (and most other PIC/shlib stuff).  Check that we don't drift away
719   without reason.
720
721   The CRIS linker, like the m68k and i386 linkers (and probably the rest
722   too) needs to keep track of the number of relocs that it decides to
723   copy in check_relocs for each symbol.  This is so that it can discard
724   PC relative relocs if it doesn't need them when linking with
725   -Bsymbolic.  We store the information in a field extending the regular
726   ELF linker hash table.  */
727
728/* This structure keeps track of the number of PC relative relocs we have
729   copied for a given symbol.  */
730
731struct elf_cris_pcrel_relocs_copied
732{
733  /* Next section.  */
734  struct elf_cris_pcrel_relocs_copied *next;
735
736  /* A section in dynobj.  */
737  asection *section;
738
739  /* Number of relocs copied in this section.  */
740  bfd_size_type count;
741
742  /* Example of reloc being copied, for message.  */
743  enum elf_cris_reloc_type r_type;
744};
745
746/* CRIS ELF linker hash entry.  */
747
748struct elf_cris_link_hash_entry
749{
750  struct elf_link_hash_entry root;
751
752  /* Number of PC relative relocs copied for this symbol.  */
753  struct elf_cris_pcrel_relocs_copied *pcrel_relocs_copied;
754
755  /* The GOTPLT references are CRIS-specific; the goal is to avoid having
756     both a general GOT and a PLT-specific GOT entry for the same symbol,
757     when it is referenced both as a function and as a function pointer.
758
759     Number of GOTPLT references for a function.  */
760  bfd_signed_vma gotplt_refcount;
761
762  /* Actual GOTPLT index for this symbol, if applicable, or zero if not
763     (zero is never used as an index).  FIXME: We should be able to fold
764     this with gotplt_refcount in a union, like the got and plt unions in
765     elf_link_hash_entry.  */
766  bfd_size_type gotplt_offset;
767
768  /* The root.got.refcount is the sum of the regular reference counts
769     (this) and those members below.  We have to keep a separate count
770     to track when we've found the first (or last) reference to a
771     regular got entry.  The offset is in root.got.offset.  */
772  bfd_signed_vma reg_got_refcount;
773
774  /* Similar to the above, the number of reloc references to this
775     symbols that need a R_CRIS_32_TPREL slot.  The offset is in
776     root.got.offset, because this and .dtp_refcount can't validly
777     happen when there's also a regular GOT entry; that's invalid
778     input for which an error is emitted.  */
779  bfd_signed_vma tprel_refcount;
780
781  /* Similar to the above, the number of reloc references to this
782     symbols that need a R_CRIS_DTP slot.  The offset is in
783     root.got.offset; plus 4 if .tprel_refcount > 0.  */
784  bfd_signed_vma dtp_refcount;
785};
786
787static bfd_boolean
788elf_cris_discard_excess_dso_dynamics (struct elf_cris_link_hash_entry *,
789				      void * );
790static bfd_boolean
791elf_cris_discard_excess_program_dynamics (struct elf_cris_link_hash_entry *,
792					  void *);
793
794/* The local_got_refcounts and local_got_offsets are a multiple of
795   LSNUM in size, namely LGOT_ALLOC_NELTS_FOR(LSNUM) (plus one for the
796   refcount for GOT itself, see code), with the summary / group offset
797   for local symbols located at offset N, reference counts for
798   ordinary (address) relocs at offset N + LSNUM, for R_CRIS_DTP
799   relocs at offset N + 2*LSNUM, and for R_CRIS_32_TPREL relocs at N +
800   3*LSNUM.  */
801
802#define LGOT_REG_NDX(x) ((x) + symtab_hdr->sh_info)
803#define LGOT_DTP_NDX(x) ((x) + 2 * symtab_hdr->sh_info)
804#define LGOT_TPREL_NDX(x) ((x) + 3 * symtab_hdr->sh_info)
805#define LGOT_ALLOC_NELTS_FOR(x) ((x) * 4)
806
807/* CRIS ELF linker hash table.  */
808
809struct elf_cris_link_hash_table
810{
811  struct elf_link_hash_table root;
812
813  /* We can't use the PLT offset and calculate to get the GOTPLT offset,
814     since we try and avoid creating GOTPLT:s when there's already a GOT.
815     Instead, we keep and update the next available index here.  */
816  bfd_size_type next_gotplt_entry;
817
818  /* The number of R_CRIS_32_DTPREL and R_CRIS_16_DTPREL that have
819     been seen for any input; if != 0, then the constant-offset
820     R_CRIS_DTPMOD is needed for this DSO/executable.  This turns
821     negative at relocation, so that we don't need an extra flag for
822     when the reloc is output.  */
823  bfd_signed_vma dtpmod_refcount;
824};
825
826/* Traverse a CRIS ELF linker hash table.  */
827
828#define elf_cris_link_hash_traverse(table, func, info)			\
829  (elf_link_hash_traverse						\
830   (&(table)->root,							\
831    (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
832    (info)))
833
834/* Get the CRIS ELF linker hash table from a link_info structure.  */
835
836#define elf_cris_hash_table(p) \
837  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
838  == CRIS_ELF_DATA ? ((struct elf_cris_link_hash_table *) ((p)->hash)) : NULL)
839
840/* Get the CRIS ELF linker hash entry from a regular hash entry (the
841   "parent class").  The .root reference is just a simple type
842   check on the argument.  */
843
844#define elf_cris_hash_entry(p) \
845 ((struct elf_cris_link_hash_entry *) (&(p)->root))
846
847/* Create an entry in a CRIS ELF linker hash table.  */
848
849static struct bfd_hash_entry *
850elf_cris_link_hash_newfunc (struct bfd_hash_entry *entry,
851			    struct bfd_hash_table *table,
852			    const char *string)
853{
854  struct elf_cris_link_hash_entry *ret =
855    (struct elf_cris_link_hash_entry *) entry;
856
857  /* Allocate the structure if it has not already been allocated by a
858     subclass.  */
859  if (ret == (struct elf_cris_link_hash_entry *) NULL)
860    ret = ((struct elf_cris_link_hash_entry *)
861	   bfd_hash_allocate (table,
862			      sizeof (struct elf_cris_link_hash_entry)));
863  if (ret == (struct elf_cris_link_hash_entry *) NULL)
864    return (struct bfd_hash_entry *) ret;
865
866  /* Call the allocation method of the superclass.  */
867  ret = ((struct elf_cris_link_hash_entry *)
868	 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
869				     table, string));
870  if (ret != (struct elf_cris_link_hash_entry *) NULL)
871    {
872      ret->pcrel_relocs_copied = NULL;
873      ret->gotplt_refcount = 0;
874      ret->gotplt_offset = 0;
875      ret->dtp_refcount = 0;
876      ret->tprel_refcount = 0;
877      ret->reg_got_refcount = 0;
878    }
879
880  return (struct bfd_hash_entry *) ret;
881}
882
883/* Create a CRIS ELF linker hash table.  */
884
885static struct bfd_link_hash_table *
886elf_cris_link_hash_table_create (bfd *abfd)
887{
888  struct elf_cris_link_hash_table *ret;
889  bfd_size_type amt = sizeof (struct elf_cris_link_hash_table);
890
891  ret = ((struct elf_cris_link_hash_table *) bfd_zmalloc (amt));
892  if (ret == (struct elf_cris_link_hash_table *) NULL)
893    return NULL;
894
895  if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
896				      elf_cris_link_hash_newfunc,
897				      sizeof (struct elf_cris_link_hash_entry),
898				      CRIS_ELF_DATA))
899    {
900      free (ret);
901      return NULL;
902    }
903
904  /* Initialize to skip over the first three entries in the gotplt; they
905     are used for run-time symbol evaluation.  */
906  ret->next_gotplt_entry = 12;
907
908  return &ret->root.root;
909}
910
911/* Perform a single relocation.  By default we use the standard BFD
912   routines, with a few tweaks.  */
913
914static bfd_reloc_status_type
915cris_final_link_relocate (reloc_howto_type *  howto,
916			  bfd *               input_bfd,
917			  asection *          input_section,
918			  bfd_byte *          contents,
919			  Elf_Internal_Rela * rel,
920			  bfd_vma             relocation)
921{
922  bfd_reloc_status_type r;
923  enum elf_cris_reloc_type r_type = ELF32_R_TYPE (rel->r_info);
924
925  /* PC-relative relocations are relative to the position *after*
926     the reloc.  Note that for R_CRIS_8_PCREL the adjustment is
927     not a single byte, since PC must be 16-bit-aligned.  */
928  switch (r_type)
929    {
930      /* Check that the 16-bit GOT relocs are positive.  */
931    case R_CRIS_16_GOTPLT:
932    case R_CRIS_16_GOT:
933      if ((bfd_signed_vma) relocation < 0)
934	return bfd_reloc_overflow;
935      break;
936
937    case R_CRIS_32_PLT_PCREL:
938    case R_CRIS_32_PCREL:
939      relocation -= 2;
940      /* Fall through.  */
941    case R_CRIS_8_PCREL:
942    case R_CRIS_16_PCREL:
943      relocation -= 2;
944      break;
945
946    default:
947      break;
948    }
949
950  r = _bfd_final_link_relocate (howto, input_bfd, input_section,
951				contents, rel->r_offset,
952				relocation, rel->r_addend);
953  return r;
954}
955
956
957/* The number of errors left before we stop outputting reloc-specific
958   explanatory messages.  By coincidence, this works nicely together
959   with the default number of messages you'll get from LD about
960   "relocation truncated to fit" messages before you get an
961   "additional relocation overflows omitted from the output".  */
962static int additional_relocation_error_msg_count = 10;
963
964/* Relocate an CRIS ELF section.  See elf32-fr30.c, from where this was
965   copied, for further comments.  */
966
967static bfd_boolean
968cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
969			   struct bfd_link_info *info,
970			   bfd *input_bfd,
971			   asection *input_section,
972			   bfd_byte *contents,
973			   Elf_Internal_Rela *relocs,
974			   Elf_Internal_Sym *local_syms,
975			   asection **local_sections)
976{
977  struct elf_cris_link_hash_table * htab;
978  bfd *dynobj;
979  Elf_Internal_Shdr *symtab_hdr;
980  struct elf_link_hash_entry **sym_hashes;
981  bfd_vma *local_got_offsets;
982  asection *sgot;
983  asection *splt;
984  asection *sreloc;
985  Elf_Internal_Rela *rel;
986  Elf_Internal_Rela *relend;
987  asection *srelgot;
988
989  htab = elf_cris_hash_table (info);
990  if (htab == NULL)
991    return FALSE;
992
993  dynobj = htab->root.dynobj;
994  local_got_offsets = elf_local_got_offsets (input_bfd);
995  symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
996  sym_hashes = elf_sym_hashes (input_bfd);
997  relend     = relocs + input_section->reloc_count;
998
999  sgot = NULL;
1000  splt = NULL;
1001  sreloc = NULL;
1002  srelgot = NULL;
1003
1004  if (dynobj != NULL)
1005    {
1006      splt = htab->root.splt;
1007      sgot = htab->root.sgot;
1008    }
1009
1010  for (rel = relocs; rel < relend; rel ++)
1011    {
1012      reloc_howto_type *howto;
1013      unsigned long r_symndx;
1014      Elf_Internal_Sym *sym;
1015      asection *sec;
1016      struct elf_link_hash_entry *h;
1017      bfd_vma relocation;
1018      bfd_reloc_status_type r;
1019      const char *symname = NULL;
1020      enum elf_cris_reloc_type r_type;
1021
1022      r_type = ELF32_R_TYPE (rel->r_info);
1023
1024      if (   r_type == R_CRIS_GNU_VTINHERIT
1025	  || r_type == R_CRIS_GNU_VTENTRY)
1026	continue;
1027
1028      r_symndx = ELF32_R_SYM (rel->r_info);
1029      howto  = cris_elf_howto_table + r_type;
1030      h      = NULL;
1031      sym    = NULL;
1032      sec    = NULL;
1033
1034      if (r_symndx < symtab_hdr->sh_info)
1035	{
1036	  sym = local_syms + r_symndx;
1037	  sec = local_sections [r_symndx];
1038	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
1039
1040	  symname = (bfd_elf_string_from_elf_section
1041		     (input_bfd, symtab_hdr->sh_link, sym->st_name));
1042	  if (symname == NULL)
1043	    symname = bfd_section_name (input_bfd, sec);
1044	}
1045      else
1046	{
1047	  bfd_boolean warned, ignored;
1048	  bfd_boolean unresolved_reloc;
1049
1050	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
1051				   r_symndx, symtab_hdr, sym_hashes,
1052				   h, sec, relocation,
1053				   unresolved_reloc, warned, ignored);
1054
1055	  symname = h->root.root.string;
1056
1057	  if (unresolved_reloc
1058	      /* Perhaps we should detect the cases that
1059		 sec->output_section is expected to be NULL like i386 and
1060		 m68k, but apparently (and according to elfxx-ia64.c) all
1061		 valid cases are where the symbol is defined in a shared
1062		 object which we link dynamically against.  This includes
1063		 PLT relocs for which we've created a PLT entry and other
1064		 relocs for which we're prepared to create dynamic
1065		 relocations.
1066
1067		 For now, new situations cause us to just err when
1068		 sec->output_offset is NULL but the object with the symbol
1069		 is *not* dynamically linked against.  Thus this will
1070		 automatically remind us so we can see if there are other
1071		 valid cases we need to revisit.  */
1072	      && (sec->owner->flags & DYNAMIC) != 0)
1073	    relocation = 0;
1074
1075	  else if (h->root.type == bfd_link_hash_defined
1076		   || h->root.type == bfd_link_hash_defweak)
1077	    {
1078	      /* Here follow the cases where the relocation value must
1079		 be zero (or when further handling is simplified when
1080		 zero).  I can't claim to understand the various
1081		 conditions and they weren't described in the files
1082		 where I copied them from (elf32-m68k.c and
1083		 elf32-i386.c), but let's mention examples of where
1084		 they happen.  FIXME: Perhaps define and use a
1085		 dynamic_symbol_p function like ia64.
1086
1087		 - When creating a shared library, we can have an
1088		 ordinary relocation for a symbol defined in a shared
1089		 library (perhaps the one we create).  We then make
1090		 the relocation value zero, as the value seen now will
1091		 be added into the relocation addend in this shared
1092		 library, but must be handled only at dynamic-link
1093		 time.  FIXME: Not sure this example covers the
1094		 h->elf_link_hash_flags test, though it's there in
1095		 other targets.  */
1096	      if (bfd_link_pic (info)
1097		  && ((!SYMBOLIC_BIND (info, h) && h->dynindx != -1)
1098		      || !h->def_regular)
1099		  && (input_section->flags & SEC_ALLOC) != 0
1100		  && (r_type == R_CRIS_8
1101		      || r_type == R_CRIS_16
1102		      || r_type == R_CRIS_32
1103		      || r_type == R_CRIS_8_PCREL
1104		      || r_type == R_CRIS_16_PCREL
1105		      || r_type == R_CRIS_32_PCREL))
1106		relocation = 0;
1107	      else if (!bfd_link_relocatable (info) && unresolved_reloc
1108		       && (_bfd_elf_section_offset (output_bfd, info,
1109						    input_section,
1110						    rel->r_offset)
1111			   != (bfd_vma) -1))
1112		{
1113		  _bfd_error_handler
1114		    /* xgettext:c-format */
1115		    (_("%B, section %A: unresolvable relocation %s against symbol `%s'"),
1116		     input_bfd,
1117		     input_section,
1118		     cris_elf_howto_table[r_type].name,
1119		     symname);
1120		  bfd_set_error (bfd_error_bad_value);
1121		  return FALSE;
1122		}
1123	    }
1124	}
1125
1126      if (sec != NULL && discarded_section (sec))
1127	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
1128					 rel, 1, relend, howto, 0, contents);
1129
1130      if (bfd_link_relocatable (info))
1131	continue;
1132
1133      switch (r_type)
1134	{
1135	case R_CRIS_16_GOTPLT:
1136	case R_CRIS_32_GOTPLT:
1137	  /* This is like the case for R_CRIS_32_GOT and R_CRIS_16_GOT,
1138	     but we require a PLT, and the PLT handling will take care of
1139	     filling in the PLT-specific GOT entry.  For the GOT offset,
1140	     calculate it as we do when filling it in for the .got.plt
1141	     section.  If we don't have a PLT, punt to GOT handling.  */
1142	  if (h != NULL
1143	      && ((struct elf_cris_link_hash_entry *) h)->gotplt_offset != 0)
1144	    {
1145	      asection *sgotplt = htab->root.sgotplt;
1146	      bfd_vma got_offset;
1147
1148	      BFD_ASSERT (h->dynindx != -1);
1149	      BFD_ASSERT (sgotplt != NULL);
1150
1151	      got_offset
1152		= ((struct elf_cris_link_hash_entry *) h)->gotplt_offset;
1153
1154	      relocation = got_offset;
1155	      break;
1156	    }
1157
1158	  /* We didn't make a PLT entry for this symbol.  Maybe everything is
1159	     folded into the GOT.  Other than folding, this happens when
1160	     statically linking PIC code, or when using -Bsymbolic.  Check
1161	     that we instead have a GOT entry as done for us by
1162	     elf_cris_adjust_dynamic_symbol, and drop through into the
1163	     ordinary GOT cases.  This must not happen for the
1164	     executable, because any reference it does to a function
1165	     that is satisfied by a DSO must generate a PLT.  We assume
1166	     these call-specific relocs don't address non-functions.  */
1167	  if (h != NULL
1168	      && (h->got.offset == (bfd_vma) -1
1169		  || (!bfd_link_pic (info)
1170		      && !(h->def_regular
1171			   || (!h->def_dynamic
1172			       && h->root.type == bfd_link_hash_undefweak)))))
1173	    {
1174	      _bfd_error_handler
1175		((h->got.offset == (bfd_vma) -1)
1176		 /* xgettext:c-format */
1177		 ? _("%B, section %A: No PLT nor GOT for relocation %s"
1178		     " against symbol `%s'")
1179		 /* xgettext:c-format */
1180		 : _("%B, section %A: No PLT for relocation %s"
1181		     " against symbol `%s'"),
1182		 input_bfd,
1183		 input_section,
1184		 cris_elf_howto_table[r_type].name,
1185		 (symname != NULL && symname[0] != '\0'
1186		  ? symname : _("[whose name is lost]")));
1187
1188	      /* FIXME: Perhaps blaming input is not the right thing to
1189		 do; this is probably an internal error.  But it is true
1190		 that we didn't like that particular input.  */
1191	      bfd_set_error (bfd_error_bad_value);
1192	      return FALSE;
1193	    }
1194	  /* Fall through.  */
1195
1196	  /* The size of the actual relocation is not used here; we only
1197	     fill in the GOT table here.  */
1198	case R_CRIS_16_GOT:
1199	case R_CRIS_32_GOT:
1200	  {
1201	    bfd_vma off;
1202
1203	    /* Note that despite using RELA relocations, the .got contents
1204	       is always filled in with the link-relative relocation
1205	       value; the addend.  */
1206
1207	    if (h != NULL)
1208	      {
1209		off = h->got.offset;
1210		BFD_ASSERT (off != (bfd_vma) -1);
1211
1212		if (!elf_hash_table (info)->dynamic_sections_created
1213		    || (! bfd_link_pic (info)
1214			&& (h->def_regular
1215			    || h->type == STT_FUNC
1216			    || h->needs_plt))
1217		    || (bfd_link_pic (info)
1218			&& (SYMBOLIC_BIND (info, h) || h->dynindx == -1)
1219			&& h->def_regular))
1220		  {
1221		    /* This wasn't checked above for ! bfd_link_pic (info), but
1222		       must hold there if we get here; the symbol must
1223		       be defined in the regular program or be undefweak
1224		       or be a function or otherwise need a PLT.  */
1225		    BFD_ASSERT (!elf_hash_table (info)->dynamic_sections_created
1226				|| bfd_link_pic (info)
1227				|| h->def_regular
1228				|| h->type == STT_FUNC
1229				|| h->needs_plt
1230				|| h->root.type == bfd_link_hash_undefweak);
1231
1232		    /* This is actually a static link, or it is a
1233		       -Bsymbolic link and the symbol is defined locally,
1234		       or is undefweak, or the symbol was forced to be
1235		       local because of a version file, or we're not
1236		       creating a dynamic object.  We must initialize this
1237		       entry in the global offset table.  Since the offset
1238		       must always be a multiple of 4, we use the least
1239		       significant bit to record whether we have
1240		       initialized it already.
1241
1242		       If this GOT entry should be runtime-initialized, we
1243		       will create a .rela.got relocation entry to
1244		       initialize the value.  This is done in the
1245		       finish_dynamic_symbol routine.  */
1246		    if ((off & 1) != 0)
1247		      off &= ~1;
1248		    else
1249		      {
1250			bfd_put_32 (output_bfd, relocation,
1251				    sgot->contents + off);
1252			h->got.offset |= 1;
1253		      }
1254		  }
1255	      }
1256	    else
1257	      {
1258		BFD_ASSERT (local_got_offsets != NULL
1259			    && local_got_offsets[r_symndx] != (bfd_vma) -1);
1260
1261		off = local_got_offsets[r_symndx];
1262
1263		/* The offset must always be a multiple of 4.  We use
1264		   the least significant bit to record whether we have
1265		   already generated the necessary reloc.  */
1266		if ((off & 1) != 0)
1267		  off &= ~1;
1268		else
1269		  {
1270		    bfd_put_32 (output_bfd, relocation, sgot->contents + off);
1271
1272		    if (bfd_link_pic (info))
1273		      {
1274			Elf_Internal_Rela outrel;
1275			bfd_byte *loc;
1276
1277			srelgot = htab->root.srelgot;
1278			BFD_ASSERT (srelgot != NULL);
1279
1280			outrel.r_offset = (sgot->output_section->vma
1281					   + sgot->output_offset
1282					   + off);
1283			outrel.r_info = ELF32_R_INFO (0, R_CRIS_RELATIVE);
1284			outrel.r_addend = relocation;
1285			loc = srelgot->contents;
1286			loc += srelgot->reloc_count++ * sizeof (Elf32_External_Rela);
1287			bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
1288		      }
1289
1290		    local_got_offsets[r_symndx] |= 1;
1291		  }
1292	      }
1293
1294	    relocation = sgot->output_offset + off;
1295	    if (rel->r_addend != 0)
1296	      {
1297		/* We can't do anything for a relocation which is against
1298		   a symbol *plus offset*.  GOT holds relocations for
1299		   symbols.  Make this an error; the compiler isn't
1300		   allowed to pass us these kinds of things.  */
1301		if (h == NULL)
1302		  _bfd_error_handler
1303		    /* xgettext:c-format */
1304		    (_("%B, section %A: relocation %s with non-zero addend %d"
1305		       " against local symbol"),
1306		     input_bfd,
1307		     input_section,
1308		     cris_elf_howto_table[r_type].name,
1309		     rel->r_addend);
1310		else
1311		  _bfd_error_handler
1312		    /* xgettext:c-format */
1313		    (_("%B, section %A: relocation %s with non-zero addend %d"
1314		       " against symbol `%s'"),
1315		     input_bfd,
1316		     input_section,
1317		     cris_elf_howto_table[r_type].name,
1318		     rel->r_addend,
1319		     symname[0] != '\0' ? symname : _("[whose name is lost]"));
1320
1321		bfd_set_error (bfd_error_bad_value);
1322		return FALSE;
1323	      }
1324	  }
1325	  break;
1326
1327	case R_CRIS_32_GOTREL:
1328	  /* This relocation must only be performed against local symbols.
1329	     It's also ok when we link a program and the symbol is either
1330	     defined in an ordinary (non-DSO) object or is undefined weak.  */
1331	  if (h != NULL
1332	      && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
1333	      && !(!bfd_link_pic (info)
1334		   && (h->def_regular
1335		       || (!h->def_dynamic
1336			   && h->root.type == bfd_link_hash_undefweak))))
1337	    {
1338	      _bfd_error_handler
1339		/* xgettext:c-format */
1340		(_("%B, section %A: relocation %s is"
1341		   " not allowed for global symbol: `%s'"),
1342		 input_bfd,
1343		 input_section,
1344		 cris_elf_howto_table[r_type].name,
1345		 symname);
1346	      bfd_set_error (bfd_error_bad_value);
1347	      return FALSE;
1348	    }
1349
1350	  /* This can happen if we get a link error with the input ELF
1351	     variant mismatching the output variant.  Emit an error so
1352	     it's noticed if it happens elsewhere.  */
1353	  if (sgot == NULL)
1354	    {
1355	      _bfd_error_handler
1356		/* xgettext:c-format */
1357		(_("%B, section %A: relocation %s with no GOT created"),
1358		 input_bfd,
1359		 input_section,
1360		 cris_elf_howto_table[r_type].name);
1361	      bfd_set_error (bfd_error_bad_value);
1362	      return FALSE;
1363	    }
1364
1365	  /* This relocation is like a PC-relative one, except the
1366	     reference point is the location of GOT.  Note that
1367	     sgot->output_offset is not involved in this calculation.  We
1368	     always want the start of entire .got section, not the
1369	     position after the reserved header.  */
1370	  relocation -= sgot->output_section->vma;
1371	  break;
1372
1373	case R_CRIS_32_PLT_PCREL:
1374	  /* Relocation is to the entry for this symbol in the
1375	     procedure linkage table.  */
1376
1377	  /* Resolve a PLT_PCREL reloc against a local symbol directly,
1378	     without using the procedure linkage table.  */
1379	  if (h == NULL || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
1380	    break;
1381
1382	  if (h->plt.offset == (bfd_vma) -1
1383	      || splt == NULL)
1384	    {
1385	      /* We didn't make a PLT entry for this symbol.  This
1386		 happens when statically linking PIC code, or when
1387		 using -Bsymbolic.  */
1388	      break;
1389	    }
1390
1391	  relocation = (splt->output_section->vma
1392			+ splt->output_offset
1393			+ h->plt.offset);
1394	  break;
1395
1396	case R_CRIS_32_PLT_GOTREL:
1397	  /* Like R_CRIS_32_PLT_PCREL, but the reference point is the
1398	     start of the .got section.  See also comment at
1399	     R_CRIS_32_GOT.  */
1400	  relocation -= sgot->output_section->vma;
1401
1402	  /* Resolve a PLT_GOTREL reloc against a local symbol directly,
1403	     without using the procedure linkage table.  */
1404	  if (h == NULL || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
1405	    break;
1406
1407	  if (h->plt.offset == (bfd_vma) -1
1408	      || splt == NULL)
1409	    {
1410	      /* We didn't make a PLT entry for this symbol.  This
1411		 happens when statically linking PIC code, or when
1412		 using -Bsymbolic.  */
1413	      break;
1414	    }
1415
1416	  relocation = (splt->output_section->vma
1417			+ splt->output_offset
1418			+ h->plt.offset
1419			- sgot->output_section->vma);
1420	  break;
1421
1422	case R_CRIS_8_PCREL:
1423	case R_CRIS_16_PCREL:
1424	case R_CRIS_32_PCREL:
1425	  /* If the symbol was local, we need no shlib-specific handling.  */
1426	  if (h == NULL || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
1427	      || h->dynindx == -1)
1428	    break;
1429
1430	  /* Fall through.  */
1431	case R_CRIS_8:
1432	case R_CRIS_16:
1433	case R_CRIS_32:
1434	  if (bfd_link_pic (info)
1435	      && r_symndx != STN_UNDEF
1436	      && (input_section->flags & SEC_ALLOC) != 0
1437	      && ((r_type != R_CRIS_8_PCREL
1438		   && r_type != R_CRIS_16_PCREL
1439		   && r_type != R_CRIS_32_PCREL)
1440		  || (!SYMBOLIC_BIND (info, h)
1441		      || (h != NULL && !h->def_regular))))
1442	    {
1443	      Elf_Internal_Rela outrel;
1444	      bfd_byte *loc;
1445	      bfd_boolean skip, relocate;
1446
1447	      /* When generating a shared object, these relocations
1448		 are copied into the output file to be resolved at run
1449		 time.  */
1450
1451	      if (sreloc == NULL)
1452		{
1453		  sreloc = _bfd_elf_get_dynamic_reloc_section
1454		    (dynobj, input_section, /*rela?*/ TRUE);
1455		  /* The section should have been created in cris_elf_check_relocs,
1456		     but that function will not be called for objects which fail in
1457		     cris_elf_merge_private_bfd_data.  */
1458		  if (sreloc == NULL)
1459		    {
1460		      bfd_set_error (bfd_error_bad_value);
1461		      return FALSE;
1462		    }
1463		}
1464
1465	      skip = FALSE;
1466	      relocate = FALSE;
1467
1468	      outrel.r_offset =
1469		_bfd_elf_section_offset (output_bfd, info, input_section,
1470					 rel->r_offset);
1471	      if (outrel.r_offset == (bfd_vma) -1)
1472		skip = TRUE;
1473	      else if (outrel.r_offset == (bfd_vma) -2
1474		       /* For now, undefined weak symbols with non-default
1475			  visibility (yielding 0), like exception info for
1476			  discarded sections, will get a R_CRIS_NONE
1477			  relocation rather than no relocation, because we
1478			  notice too late that the symbol doesn't need a
1479			  relocation.  */
1480		       || (h != NULL
1481			   && h->root.type == bfd_link_hash_undefweak
1482			   && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT))
1483		skip = TRUE, relocate = TRUE;
1484	      outrel.r_offset += (input_section->output_section->vma
1485				  + input_section->output_offset);
1486
1487	      if (skip)
1488		memset (&outrel, 0, sizeof outrel);
1489	      /* h->dynindx may be -1 if the symbol was marked to
1490		 become local.  */
1491	      else if (h != NULL
1492		       && ((!SYMBOLIC_BIND (info, h) && h->dynindx != -1)
1493			   || !h->def_regular))
1494		{
1495		  BFD_ASSERT (h->dynindx != -1);
1496		  outrel.r_info = ELF32_R_INFO (h->dynindx, r_type);
1497		  outrel.r_addend = relocation + rel->r_addend;
1498		}
1499	      else
1500		{
1501		  outrel.r_addend = relocation + rel->r_addend;
1502
1503		  if (r_type == R_CRIS_32)
1504		    {
1505		      relocate = TRUE;
1506		      outrel.r_info = ELF32_R_INFO (0, R_CRIS_RELATIVE);
1507		    }
1508		  else
1509		    {
1510		      long indx;
1511
1512		      if (bfd_is_abs_section (sec))
1513			indx = 0;
1514		      else if (sec == NULL || sec->owner == NULL)
1515			{
1516			  bfd_set_error (bfd_error_bad_value);
1517			  return FALSE;
1518			}
1519		      else
1520			{
1521			  asection *osec;
1522
1523			  /* We are turning this relocation into one
1524			     against a section symbol.  It would be
1525			     proper to subtract the symbol's value,
1526			     osec->vma, from the emitted reloc addend,
1527			     but ld.so expects buggy relocs.  */
1528			  osec = sec->output_section;
1529			  indx = elf_section_data (osec)->dynindx;
1530			  if (indx == 0)
1531			    {
1532			      osec = htab->root.text_index_section;
1533			      indx = elf_section_data (osec)->dynindx;
1534			    }
1535			  BFD_ASSERT (indx != 0);
1536			}
1537
1538		      outrel.r_info = ELF32_R_INFO (indx, r_type);
1539		    }
1540		}
1541
1542	      loc = sreloc->contents;
1543	      loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rela);
1544	      bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
1545
1546	      /* This reloc will be computed at runtime, so there's no
1547                 need to do anything now, except for R_CRIS_32 relocations
1548                 that have been turned into R_CRIS_RELATIVE.  */
1549	      if (!relocate)
1550		continue;
1551	    }
1552
1553	  break;
1554
1555	case R_CRIS_16_DTPREL:
1556	case R_CRIS_32_DTPREL:
1557	  /* This relocation must only be performed against local
1558	     symbols, or to sections that are not loadable.  It's also
1559	     ok when we link a program and the symbol is defined in an
1560	     ordinary (non-DSO) object (if it's undefined there, we've
1561	     already seen an error).  */
1562	  if (h != NULL
1563	      && (input_section->flags & SEC_ALLOC) != 0
1564	      && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
1565	      && (bfd_link_pic (info)
1566		  || (!h->def_regular
1567		      && h->root.type != bfd_link_hash_undefined)))
1568	    {
1569	      _bfd_error_handler
1570		((h->root.type == bfd_link_hash_undefined)
1571		 /* We shouldn't get here for GCC-emitted code.  */
1572		 /* xgettext:c-format */
1573		 ? _("%B, section %A: relocation %s has an undefined"
1574		     " reference to `%s', perhaps a declaration mixup?")
1575		 /* xgettext:c-format */
1576		 : _("%B, section %A: relocation %s is"
1577		     " not allowed for `%s', a global symbol with default"
1578		     " visibility, perhaps a declaration mixup?"),
1579		 input_bfd,
1580		 input_section,
1581		 cris_elf_howto_table[r_type].name,
1582		 symname != NULL && symname[0] != '\0'
1583		 ? symname : _("[whose name is lost]"));
1584	      bfd_set_error (bfd_error_bad_value);
1585	      return FALSE;
1586	    }
1587
1588	  BFD_ASSERT ((input_section->flags & SEC_ALLOC) == 0
1589		      || htab->dtpmod_refcount != 0);
1590
1591	  /* Fill in a R_CRIS_DTPMOD reloc at offset 3 if we haven't
1592	     already done so.  Note that we do this in .got.plt, not
1593	     in .got, as .got.plt contains the first part, still the
1594	     reloc is against .got, because the linker script directs
1595	     (is required to direct) them both into .got.  */
1596	  if (htab->dtpmod_refcount > 0
1597	      && (input_section->flags & SEC_ALLOC) != 0)
1598	    {
1599	      asection *sgotplt = htab->root.sgotplt;
1600	      BFD_ASSERT (sgotplt != NULL);
1601
1602	      if (bfd_link_pic (info))
1603		{
1604		  Elf_Internal_Rela outrel;
1605		  bfd_byte *loc;
1606
1607		  srelgot = htab->root.srelgot;
1608		  BFD_ASSERT (srelgot != NULL);
1609		  loc = srelgot->contents;
1610		  loc += srelgot->reloc_count++ * sizeof (Elf32_External_Rela);
1611
1612		  bfd_put_32 (output_bfd, (bfd_vma) 0, sgotplt->contents + 12);
1613		  bfd_put_32 (output_bfd, (bfd_vma) 0, sgotplt->contents + 16);
1614		  outrel.r_offset = (sgotplt->output_section->vma
1615				     + sgotplt->output_offset
1616				     + 12);
1617		  outrel.r_info = ELF32_R_INFO (0, R_CRIS_DTPMOD);
1618		  outrel.r_addend = 0;
1619		  bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
1620		}
1621	      else
1622		{
1623		  /* For an executable, the GOT entry contents is known.  */
1624		  bfd_put_32 (output_bfd, (bfd_vma) 1, sgotplt->contents + 12);
1625		  bfd_put_32 (output_bfd, (bfd_vma) 0, sgotplt->contents + 16);
1626		}
1627
1628	      /* Reverse the sign to mark that we've emitted the
1629		 required GOT entry.  */
1630	      htab->dtpmod_refcount = - htab->dtpmod_refcount;
1631	    }
1632
1633	  /* The relocation is the offset from the start of the module
1634	     TLS block to the (local) symbol.  */
1635	  relocation -= elf_hash_table (info)->tls_sec == NULL
1636	    ? 0 : elf_hash_table (info)->tls_sec->vma;
1637	  break;
1638
1639	case R_CRIS_32_GD:
1640	  if (bfd_link_pic (info))
1641	    {
1642	      bfd_set_error (bfd_error_invalid_operation);
1643
1644	      /* We've already informed in cris_elf_check_relocs that
1645		 this is an error.  */
1646	      return FALSE;
1647	    }
1648	  /* Fall through.  */
1649
1650	case R_CRIS_16_GOT_GD:
1651	case R_CRIS_32_GOT_GD:
1652	  if (rel->r_addend != 0)
1653	    {
1654	      /* We can't do anything for a relocation which is against a
1655		 symbol *plus offset*.  The GOT holds relocations for
1656		 symbols.  Make this an error; the compiler isn't allowed
1657		 to pass us these kinds of things.  */
1658	      _bfd_error_handler
1659		/* xgettext:c-format */
1660		(_("%B, section %A: relocation %s with non-zero addend %d"
1661		   " against symbol `%s'"),
1662		 input_bfd,
1663		 input_section,
1664		 cris_elf_howto_table[r_type].name,
1665		 rel->r_addend,
1666		 symname[0] != '\0' ? symname : _("[whose name is lost]"));
1667
1668	      bfd_set_error (bfd_error_bad_value);
1669	      return FALSE;
1670	    }
1671
1672	  if (!bfd_link_pic (info)
1673	      && (h == NULL || h->def_regular || ELF_COMMON_DEF_P (h)))
1674	    {
1675	      /* Known contents of the GOT.  */
1676	      bfd_vma off;
1677
1678	      /* The symbol is defined in the program, so just write
1679		 (1, known_tpoffset) into the GOT.  */
1680	      relocation -= elf_hash_table (info)->tls_sec->vma;
1681
1682	      if (h != NULL)
1683		{
1684		  off = elf_cris_hash_entry (h)->tprel_refcount > 0
1685		    ? h->got.offset + 4 : h->got.offset;
1686		}
1687	      else
1688		{
1689		  off = local_got_offsets[r_symndx];
1690		  if (local_got_offsets[LGOT_TPREL_NDX (r_symndx)])
1691		    off += 4;
1692		}
1693
1694	      /* We use bit 1 of the offset as a flag for GOT entry with
1695		 the R_CRIS_DTP reloc, setting it when we've emitted the
1696		 GOT entry and reloc.  Bit 0 is used for R_CRIS_32_TPREL
1697		 relocs.  */
1698	      if ((off & 2) == 0)
1699		{
1700		  off &= ~3;
1701
1702		  if (h != NULL)
1703		    h->got.offset |= 2;
1704		  else
1705		    local_got_offsets[r_symndx] |= 2;
1706
1707		  bfd_put_32 (output_bfd, 1, sgot->contents + off);
1708		  bfd_put_32 (output_bfd, relocation, sgot->contents + off + 4);
1709		}
1710	      else
1711		off &= ~3;
1712
1713	      relocation = sgot->output_offset + off
1714		+ (r_type == R_CRIS_32_GD ? sgot->output_section->vma : 0);
1715	    }
1716	  else
1717	    {
1718	      /* Not all parts of the GOT entry are known; emit a real
1719		 relocation.  */
1720	      bfd_vma off;
1721
1722	      if (h != NULL)
1723		off = elf_cris_hash_entry (h)->tprel_refcount > 0
1724		  ? h->got.offset + 4 : h->got.offset;
1725	      else
1726		{
1727		  off = local_got_offsets[r_symndx];
1728		  if (local_got_offsets[LGOT_TPREL_NDX (r_symndx)])
1729		    off += 4;
1730		}
1731
1732	      /* See above re bit 1 and bit 0 usage.  */
1733	      if ((off & 2) == 0)
1734		{
1735		  Elf_Internal_Rela outrel;
1736		  bfd_byte *loc;
1737
1738		  off &= ~3;
1739
1740		  if (h != NULL)
1741		    h->got.offset |= 2;
1742		  else
1743		    local_got_offsets[r_symndx] |= 2;
1744
1745		  /* Clear the target contents of the GOT (just as a
1746		     gesture; it's already cleared on allocation): this
1747		     relocation is not like the other dynrelocs.  */
1748		  bfd_put_32 (output_bfd, 0, sgot->contents + off);
1749		  bfd_put_32 (output_bfd, 0, sgot->contents + off + 4);
1750
1751		  srelgot = htab->root.srelgot;
1752		  BFD_ASSERT (srelgot != NULL);
1753
1754		  if (h != NULL && h->dynindx != -1)
1755		    {
1756		      outrel.r_info = ELF32_R_INFO (h->dynindx, R_CRIS_DTP);
1757		      relocation = 0;
1758		    }
1759		  else
1760		    {
1761		      outrel.r_info = ELF32_R_INFO (0, R_CRIS_DTP);
1762
1763		      /* NULL if we had an error.  */
1764		      relocation -= elf_hash_table (info)->tls_sec == NULL
1765			? 0 : elf_hash_table (info)->tls_sec->vma;
1766		    }
1767
1768		  outrel.r_offset = (sgot->output_section->vma
1769				     + sgot->output_offset
1770				     + off);
1771		  outrel.r_addend = relocation;
1772		  loc = srelgot->contents;
1773		  loc += srelgot->reloc_count++ * sizeof (Elf32_External_Rela);
1774
1775		  /* NULL if we had an error.  */
1776		  if (srelgot->contents != NULL)
1777		    bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
1778		}
1779	      else
1780		off &= ~3;
1781
1782	      relocation = sgot->output_offset + off
1783		+ (r_type == R_CRIS_32_GD ? sgot->output_section->vma : 0);
1784	    }
1785
1786	  /* The GOT-relative offset to the GOT entry is the
1787	     relocation, or for R_CRIS_32_GD, the actual address of
1788	     the GOT entry.  */
1789	  break;
1790
1791	case R_CRIS_32_IE:
1792	  if (bfd_link_pic (info))
1793	    {
1794	      bfd_set_error (bfd_error_invalid_operation);
1795
1796	      /* We've already informed in cris_elf_check_relocs that
1797		 this is an error.  */
1798	      return FALSE;
1799	    }
1800	  /* Fall through.  */
1801
1802	case R_CRIS_32_GOT_TPREL:
1803	case R_CRIS_16_GOT_TPREL:
1804	  if (rel->r_addend != 0)
1805	    {
1806	      /* We can't do anything for a relocation which is
1807		 against a symbol *plus offset*.  GOT holds
1808		 relocations for symbols.  Make this an error; the
1809		 compiler isn't allowed to pass us these kinds of
1810		 things.  */
1811	      _bfd_error_handler
1812		/* xgettext:c-format */
1813		(_("%B, section %A: relocation %s with non-zero addend %d"
1814		   " against symbol `%s'"),
1815		 input_bfd,
1816		 input_section,
1817		 cris_elf_howto_table[r_type].name,
1818		 rel->r_addend,
1819		 symname[0] != '\0' ? symname : _("[whose name is lost]"));
1820	      bfd_set_error (bfd_error_bad_value);
1821	      return FALSE;
1822	    }
1823
1824	  if (!bfd_link_pic (info)
1825	      && (h == NULL || h->def_regular || ELF_COMMON_DEF_P (h)))
1826	    {
1827	      /* Known contents of the GOT.  */
1828	      bfd_vma off;
1829
1830	      /* The symbol is defined in the program, so just write
1831		 the -prog_tls_size+known_tpoffset into the GOT.  */
1832	      relocation -= elf_hash_table (info)->tls_sec->vma;
1833	      relocation -= elf_hash_table (info)->tls_size;
1834
1835	      if (h != NULL)
1836		off = h->got.offset;
1837	      else
1838		off = local_got_offsets[r_symndx];
1839
1840	      /* Bit 0 is used to mark whether we've emitted the required
1841		 entry (and if needed R_CRIS_32_TPREL reloc).  Bit 1
1842		 is used similarly for R_CRIS_DTP, see above.  */
1843	      if ((off & 1) == 0)
1844		{
1845		  off &= ~3;
1846
1847		  if (h != NULL)
1848		    h->got.offset |= 1;
1849		  else
1850		    local_got_offsets[r_symndx] |= 1;
1851
1852		  bfd_put_32 (output_bfd, relocation, sgot->contents + off);
1853		}
1854	      else
1855		off &= ~3;
1856
1857	      relocation = sgot->output_offset + off
1858		+ (r_type == R_CRIS_32_IE ? sgot->output_section->vma : 0);
1859	    }
1860	  else
1861	    {
1862	      /* Emit a real relocation.  */
1863	      bfd_vma off;
1864
1865	      if (h != NULL)
1866		off = h->got.offset;
1867	      else
1868		off = local_got_offsets[r_symndx];
1869
1870	      /* See above re usage of bit 0 and 1.  */
1871	      if ((off & 1) == 0)
1872		{
1873		  Elf_Internal_Rela outrel;
1874		  bfd_byte *loc;
1875
1876		  off &= ~3;
1877
1878		  if (h != NULL)
1879		    h->got.offset |= 1;
1880		  else
1881		    local_got_offsets[r_symndx] |= 1;
1882
1883		  srelgot = htab->root.srelgot;
1884		  BFD_ASSERT (srelgot != NULL);
1885
1886		  if (h != NULL && h->dynindx != -1)
1887		    {
1888		      outrel.r_info = ELF32_R_INFO (h->dynindx, R_CRIS_32_TPREL);
1889		      relocation = 0;
1890		    }
1891		  else
1892		    {
1893		      outrel.r_info = ELF32_R_INFO (0, R_CRIS_32_TPREL);
1894
1895		      /* NULL if we had an error.  */
1896		      relocation -= elf_hash_table (info)->tls_sec == NULL
1897			? 0 : elf_hash_table (info)->tls_sec->vma;
1898		    }
1899
1900		  /* Just "define" the initial contents in some
1901		     semi-logical way.  */
1902		  bfd_put_32 (output_bfd, relocation, sgot->contents + off);
1903
1904		  outrel.r_offset = (sgot->output_section->vma
1905				     + sgot->output_offset
1906				     + off);
1907		  outrel.r_addend = relocation;
1908		  loc = srelgot->contents;
1909		  loc += srelgot->reloc_count++ * sizeof (Elf32_External_Rela);
1910		  /* NULL if we had an error.  */
1911		  if (srelgot->contents != NULL)
1912		    bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc);
1913		}
1914	      else
1915		off &= ~3;
1916
1917	      relocation = sgot->output_offset + off
1918		+ (r_type == R_CRIS_32_IE ? sgot->output_section->vma : 0);
1919	    }
1920
1921	  /* The GOT-relative offset to the GOT entry is the relocation,
1922	     or for R_CRIS_32_GD, the actual address of the GOT entry.  */
1923	  break;
1924
1925	case R_CRIS_16_TPREL:
1926	case R_CRIS_32_TPREL:
1927	  /* This relocation must only be performed against symbols
1928	     defined in an ordinary (non-DSO) object.  */
1929	  if (bfd_link_pic (info))
1930	    {
1931	      bfd_set_error (bfd_error_invalid_operation);
1932
1933	      /* We've already informed in cris_elf_check_relocs that
1934		 this is an error.  */
1935	      return FALSE;
1936	    }
1937
1938	  if (h != NULL
1939	      && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
1940	      && !(h->def_regular || ELF_COMMON_DEF_P (h))
1941	      /* If it's undefined, then an error message has already
1942		 been emitted.  */
1943	      && h->root.type != bfd_link_hash_undefined)
1944	    {
1945	      _bfd_error_handler
1946		/* xgettext:c-format */
1947		(_("%B, section %A: relocation %s is"
1948		   " not allowed for symbol: `%s'"
1949		   " which is defined outside the program,"
1950		   " perhaps a declaration mixup?"),
1951		 input_bfd,
1952		 input_section,
1953		 cris_elf_howto_table[r_type].name,
1954		 symname);
1955	      bfd_set_error (bfd_error_bad_value);
1956	      return FALSE;
1957	    }
1958
1959	  /* NULL if we had an error.  */
1960	  relocation -= elf_hash_table (info)->tls_sec == NULL
1961	    ? 0
1962	    : (elf_hash_table (info)->tls_sec->vma
1963	       + elf_hash_table (info)->tls_size);
1964
1965	  /* The TLS-relative offset is the relocation.  */
1966	  break;
1967
1968	default:
1969	  BFD_FAIL ();
1970	  return FALSE;
1971	}
1972
1973      r = cris_final_link_relocate (howto, input_bfd, input_section,
1974				     contents, rel, relocation);
1975
1976      if (r != bfd_reloc_ok)
1977	{
1978	  const char * msg = (const char *) NULL;
1979
1980	  switch (r)
1981	    {
1982	    case bfd_reloc_overflow:
1983	      (*info->callbacks->reloc_overflow)
1984		(info, (h ? &h->root : NULL), symname, howto->name,
1985		 (bfd_vma) 0, input_bfd, input_section, rel->r_offset);
1986	      if (additional_relocation_error_msg_count > 0)
1987		{
1988		  additional_relocation_error_msg_count--;
1989		  switch (r_type)
1990		    {
1991		    case R_CRIS_16_GOTPLT:
1992		    case R_CRIS_16_GOT:
1993
1994		      /* Not just TLS is involved here, so we make
1995			 generation and message depend on -fPIC/-fpic
1996			 only.  */
1997		    case R_CRIS_16_GOT_TPREL:
1998		    case R_CRIS_16_GOT_GD:
1999		      _bfd_error_handler
2000			(_("(too many global variables for -fpic:"
2001			   " recompile with -fPIC)"));
2002		      break;
2003
2004		    case R_CRIS_16_TPREL:
2005		    case R_CRIS_16_DTPREL:
2006		      _bfd_error_handler
2007			(_("(thread-local data too big for -fpic or"
2008			   " -msmall-tls: recompile with -fPIC or"
2009			   " -mno-small-tls)"));
2010		      break;
2011
2012		      /* No known cause for overflow for other relocs.  */
2013		    default:
2014		      break;
2015		    }
2016		}
2017	      break;
2018
2019	    case bfd_reloc_undefined:
2020	      (*info->callbacks->undefined_symbol)
2021		(info, symname, input_bfd, input_section, rel->r_offset, TRUE);
2022	      break;
2023
2024	    case bfd_reloc_outofrange:
2025	      msg = _("internal error: out of range error");
2026	      break;
2027
2028	    case bfd_reloc_notsupported:
2029	      msg = _("internal error: unsupported relocation error");
2030	      break;
2031
2032	    case bfd_reloc_dangerous:
2033	      msg = _("internal error: dangerous relocation");
2034	      break;
2035
2036	    default:
2037	      msg = _("internal error: unknown error");
2038	      break;
2039	    }
2040
2041	  if (msg)
2042	    (*info->callbacks->warning) (info, msg, symname, input_bfd,
2043					 input_section, rel->r_offset);
2044	}
2045    }
2046
2047  return TRUE;
2048}
2049
2050/* Finish up dynamic symbol handling.  We set the contents of various
2051   dynamic sections here.  */
2052
2053static bfd_boolean
2054elf_cris_finish_dynamic_symbol (bfd *output_bfd,
2055				struct bfd_link_info *info,
2056				struct elf_link_hash_entry *h,
2057				Elf_Internal_Sym *sym)
2058{
2059  struct elf_cris_link_hash_table * htab;
2060
2061  /* Where in the plt entry to put values.  */
2062  int plt_off1 = 2, plt_off2 = 10, plt_off3 = 16;
2063
2064  /* What offset to add to the distance to the first PLT entry for the
2065     value at plt_off3.   */
2066  int plt_off3_value_bias = 4;
2067
2068  /* Where in the PLT entry the call-dynlink-stub is (happens to be same
2069     for PIC and non-PIC for v32 and pre-v32).  */
2070  int plt_stub_offset = 8;
2071  int plt_entry_size = PLT_ENTRY_SIZE;
2072  const bfd_byte *plt_entry = elf_cris_plt_entry;
2073  const bfd_byte *plt_pic_entry = elf_cris_pic_plt_entry;
2074
2075  htab = elf_cris_hash_table (info);
2076  if (htab == NULL)
2077    return FALSE;
2078
2079  /* Adjust the various PLT entry offsets.  */
2080  if (bfd_get_mach (output_bfd) == bfd_mach_cris_v32)
2081    {
2082      plt_off2 = 14;
2083      plt_off3 = 20;
2084      plt_off3_value_bias = -2;
2085      plt_stub_offset = 12;
2086      plt_entry_size = PLT_ENTRY_SIZE_V32;
2087      plt_entry = elf_cris_plt_entry_v32;
2088      plt_pic_entry = elf_cris_pic_plt_entry_v32;
2089    }
2090
2091  if (h->plt.offset != (bfd_vma) -1)
2092    {
2093      asection *splt;
2094      asection *sgotplt;
2095      asection *srela;
2096      bfd_vma got_base;
2097
2098      bfd_vma gotplt_offset
2099	= elf_cris_hash_entry (h)->gotplt_offset;
2100      Elf_Internal_Rela rela;
2101      bfd_byte *loc;
2102      bfd_boolean has_gotplt = gotplt_offset != 0;
2103
2104      /* Get the index in the .rela.plt relocations for the .got.plt
2105	 entry that corresponds to this symbol.
2106	 We have to count backwards here, and the result is only valid
2107	 as an index into .rela.plt.  We also have to undo the effect
2108	 of the R_CRIS_DTPMOD entry at .got index 3 (offset 12 into
2109	 .got.plt) for which gotplt_offset is adjusted, because while
2110	 that entry goes into .got.plt, its relocation goes into
2111	 .rela.got, not .rela.plt.  (It's not PLT-specific; not to be
2112	 processed as part of the runtime lazy .rela.plt relocation).
2113	 FIXME: There be literal constants here...  */
2114      bfd_vma rela_plt_index
2115	= (htab->dtpmod_refcount != 0
2116	   ? gotplt_offset/4 - 2 - 3 : gotplt_offset/4 - 3);
2117
2118      /* Get the offset into the .got table of the entry that corresponds
2119	 to this function.  Note that we embed knowledge that "incoming"
2120	 .got goes after .got.plt in the output without padding (pointer
2121	 aligned).  However, that knowledge is present in several other
2122	 places too.  */
2123      bfd_vma got_offset
2124	= (has_gotplt
2125	   ? gotplt_offset
2126	   : h->got.offset + htab->next_gotplt_entry);
2127
2128      /* This symbol has an entry in the procedure linkage table.  Set it
2129	 up.  */
2130
2131      BFD_ASSERT (h->dynindx != -1);
2132
2133      splt = htab->root.splt;
2134      sgotplt = htab->root.sgotplt;
2135      srela = htab->root.srelplt;
2136      BFD_ASSERT (splt != NULL && sgotplt != NULL
2137		  && (! has_gotplt || srela != NULL));
2138
2139      got_base = sgotplt->output_section->vma + sgotplt->output_offset;
2140
2141      /* Fill in the entry in the procedure linkage table.  */
2142      if (! bfd_link_pic (info))
2143	{
2144	  memcpy (splt->contents + h->plt.offset, plt_entry,
2145		  plt_entry_size);
2146
2147	  /* We need to enter the absolute address of the GOT entry here.  */
2148	  bfd_put_32 (output_bfd, got_base + got_offset,
2149		      splt->contents + h->plt.offset + plt_off1);
2150	}
2151      else
2152	{
2153	  memcpy (splt->contents + h->plt.offset, plt_pic_entry,
2154		  plt_entry_size);
2155	  bfd_put_32 (output_bfd, got_offset,
2156		      splt->contents + h->plt.offset + plt_off1);
2157	}
2158
2159      /* Fill in the plt entry and make a relocation, if this is a "real"
2160	 PLT entry.  */
2161      if (has_gotplt)
2162	{
2163	  /* Fill in the offset to the reloc table.  */
2164	  bfd_put_32 (output_bfd,
2165		      rela_plt_index * sizeof (Elf32_External_Rela),
2166		      splt->contents + h->plt.offset + plt_off2);
2167
2168	  /* Fill in the offset to the first PLT entry, where to "jump".  */
2169	  bfd_put_32 (output_bfd,
2170		      - (h->plt.offset + plt_off3 + plt_off3_value_bias),
2171		      splt->contents + h->plt.offset + plt_off3);
2172
2173	  /* Fill in the entry in the global offset table with the address of
2174	     the relocating stub.  */
2175	  bfd_put_32 (output_bfd,
2176		      (splt->output_section->vma
2177		       + splt->output_offset
2178		       + h->plt.offset
2179		       + plt_stub_offset),
2180		      sgotplt->contents + got_offset);
2181
2182	  /* Fill in the entry in the .rela.plt section.  */
2183	  rela.r_offset = (sgotplt->output_section->vma
2184			   + sgotplt->output_offset
2185			   + got_offset);
2186	  rela.r_info = ELF32_R_INFO (h->dynindx, R_CRIS_JUMP_SLOT);
2187	  rela.r_addend = 0;
2188	  loc = srela->contents + rela_plt_index * sizeof (Elf32_External_Rela);
2189	  bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
2190	}
2191
2192      if (!h->def_regular)
2193	{
2194	  /* Mark the symbol as undefined, rather than as defined in
2195	     the .plt section.  Leave the value alone.  */
2196	  sym->st_shndx = SHN_UNDEF;
2197
2198	  /* FIXME: From elf32-sparc.c 2001-02-19 (1.18).  I still don't
2199	     know whether resetting the value is significant; if it really
2200	     is, rather than a quirk or bug in the sparc port, then I
2201	     believe we'd see this elsewhere.  */
2202	  /* If the symbol is weak, we do need to clear the value.
2203	     Otherwise, the PLT entry would provide a definition for
2204	     the symbol even if the symbol wasn't defined anywhere,
2205	     and so the symbol would never be NULL.  */
2206	  if (!h->ref_regular_nonweak)
2207	    sym->st_value = 0;
2208	}
2209    }
2210
2211  /* For an ordinary program, we emit .got relocs only for symbols that
2212     are in the dynamic-symbols table and are either defined by the
2213     program or are undefined weak symbols, or are function symbols
2214     where we do not output a PLT: the PLT reloc was output above and all
2215     references to the function symbol are redirected to the PLT.  */
2216  if (h->got.offset != (bfd_vma) -1
2217      && (elf_cris_hash_entry (h)->reg_got_refcount > 0)
2218      && (bfd_link_pic (info)
2219	  || (h->dynindx != -1
2220	      && h->plt.offset == (bfd_vma) -1
2221	      && !h->def_regular
2222	      && h->root.type != bfd_link_hash_undefweak)))
2223    {
2224      asection *sgot;
2225      asection *srela;
2226      Elf_Internal_Rela rela;
2227      bfd_byte *loc;
2228      bfd_byte *where;
2229
2230      /* This symbol has an entry in the global offset table.  Set it up.  */
2231
2232      sgot = htab->root.sgot;
2233      srela = htab->root.srelgot;
2234      BFD_ASSERT (sgot != NULL && srela != NULL);
2235
2236      rela.r_offset = (sgot->output_section->vma
2237		       + sgot->output_offset
2238		       + (h->got.offset &~ (bfd_vma) 1));
2239
2240      /* If this is a static link, or it is a -Bsymbolic link and the
2241	 symbol is defined locally or was forced to be local because
2242	 of a version file, we just want to emit a RELATIVE reloc.
2243	 The entry in the global offset table will already have been
2244	 initialized in the relocate_section function.  */
2245      where = sgot->contents + (h->got.offset &~ (bfd_vma) 1);
2246      if (! elf_hash_table (info)->dynamic_sections_created
2247	  || (bfd_link_pic (info)
2248	      && (SYMBOLIC_BIND (info, h) || h->dynindx == -1)
2249	      && h->def_regular))
2250	{
2251	  rela.r_info = ELF32_R_INFO (0, R_CRIS_RELATIVE);
2252	  rela.r_addend = bfd_get_signed_32 (output_bfd, where);
2253	}
2254      else
2255	{
2256	  bfd_put_32 (output_bfd, (bfd_vma) 0, where);
2257	  rela.r_info = ELF32_R_INFO (h->dynindx, R_CRIS_GLOB_DAT);
2258	  rela.r_addend = 0;
2259	}
2260
2261      loc = srela->contents;
2262      loc += srela->reloc_count++ * sizeof (Elf32_External_Rela);
2263      bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
2264    }
2265
2266  if (h->needs_copy)
2267    {
2268      asection *s;
2269      Elf_Internal_Rela rela;
2270      bfd_byte *loc;
2271
2272      /* This symbol needs a copy reloc.  Set it up.  */
2273
2274      BFD_ASSERT (h->dynindx != -1
2275		  && (h->root.type == bfd_link_hash_defined
2276		      || h->root.type == bfd_link_hash_defweak));
2277
2278      if (h->root.u.def.section == htab->root.sdynrelro)
2279	s = htab->root.sreldynrelro;
2280      else
2281	s = htab->root.srelbss;
2282
2283      rela.r_offset = (h->root.u.def.value
2284		       + h->root.u.def.section->output_section->vma
2285		       + h->root.u.def.section->output_offset);
2286      rela.r_info = ELF32_R_INFO (h->dynindx, R_CRIS_COPY);
2287      rela.r_addend = 0;
2288      loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
2289      bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
2290    }
2291
2292  /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
2293  if (h == elf_hash_table (info)->hdynamic
2294      || h == elf_hash_table (info)->hgot)
2295    sym->st_shndx = SHN_ABS;
2296
2297  return TRUE;
2298}
2299
2300/* Finish up the dynamic sections.  Do *not* emit relocs here, as their
2301   offsets were changed, as part of -z combreloc handling, from those we
2302   computed.  */
2303
2304static bfd_boolean
2305elf_cris_finish_dynamic_sections (bfd *output_bfd,
2306				  struct bfd_link_info *info)
2307{
2308  bfd *dynobj;
2309  asection *sgot;
2310  asection *sdyn;
2311
2312  dynobj = elf_hash_table (info)->dynobj;
2313
2314  sgot = elf_hash_table (info)->sgotplt;
2315  BFD_ASSERT (sgot != NULL);
2316  sdyn = bfd_get_linker_section (dynobj, ".dynamic");
2317
2318  if (elf_hash_table (info)->dynamic_sections_created)
2319    {
2320      asection *splt;
2321      Elf32_External_Dyn *dyncon, *dynconend;
2322
2323      splt = elf_hash_table (info)->splt;
2324      BFD_ASSERT (splt != NULL && sdyn != NULL);
2325
2326      dyncon = (Elf32_External_Dyn *) sdyn->contents;
2327      dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size);
2328      for (; dyncon < dynconend; dyncon++)
2329	{
2330	  Elf_Internal_Dyn dyn;
2331	  asection *s;
2332
2333	  bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn);
2334
2335	  switch (dyn.d_tag)
2336	    {
2337	    default:
2338	      break;
2339
2340	    case DT_PLTGOT:
2341	      dyn.d_un.d_ptr = sgot->output_section->vma + sgot->output_offset;
2342	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
2343	      break;
2344
2345	    case DT_JMPREL:
2346	      /* Yes, we *can* have a .plt and no .plt.rela, for instance
2347		 if all symbols are found in the .got (not .got.plt).  */
2348	      s = elf_hash_table (info)->srelplt;
2349	      dyn.d_un.d_ptr = s != NULL ? (s->output_section->vma
2350					    + s->output_offset) : 0;
2351	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
2352	      break;
2353
2354	    case DT_PLTRELSZ:
2355	      s = elf_hash_table (info)->srelplt;
2356	      if (s == NULL)
2357		dyn.d_un.d_val = 0;
2358	      else
2359		dyn.d_un.d_val = s->size;
2360	      bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
2361	      break;
2362	    }
2363	}
2364
2365      /* Fill in the first entry in the procedure linkage table.  */
2366      if (splt->size > 0)
2367	{
2368	  if (bfd_get_mach (output_bfd) == bfd_mach_cris_v32)
2369	    {
2370	      if (bfd_link_pic (info))
2371		memcpy (splt->contents, elf_cris_pic_plt0_entry_v32,
2372			PLT_ENTRY_SIZE_V32);
2373	      else
2374		{
2375		  memcpy (splt->contents, elf_cris_plt0_entry_v32,
2376			  PLT_ENTRY_SIZE_V32);
2377		  bfd_put_32 (output_bfd,
2378			      sgot->output_section->vma
2379			      + sgot->output_offset + 4,
2380			      splt->contents + 4);
2381
2382		  elf_section_data (splt->output_section)->this_hdr.sh_entsize
2383		    = PLT_ENTRY_SIZE_V32;
2384		}
2385	    }
2386	  else
2387	    {
2388	      if (bfd_link_pic (info))
2389		memcpy (splt->contents, elf_cris_pic_plt0_entry,
2390			PLT_ENTRY_SIZE);
2391	      else
2392		{
2393		  memcpy (splt->contents, elf_cris_plt0_entry,
2394			  PLT_ENTRY_SIZE);
2395		  bfd_put_32 (output_bfd,
2396			      sgot->output_section->vma
2397			      + sgot->output_offset + 4,
2398			      splt->contents + 6);
2399		  bfd_put_32 (output_bfd,
2400			      sgot->output_section->vma
2401			      + sgot->output_offset + 8,
2402			      splt->contents + 14);
2403
2404		  elf_section_data (splt->output_section)->this_hdr.sh_entsize
2405		    = PLT_ENTRY_SIZE;
2406		}
2407            }
2408	}
2409    }
2410
2411  /* Fill in the first three entries in the global offset table.  */
2412  if (sgot->size > 0)
2413    {
2414      if (sdyn == NULL)
2415	bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents);
2416      else
2417	bfd_put_32 (output_bfd,
2418		    sdyn->output_section->vma + sdyn->output_offset,
2419		    sgot->contents);
2420      bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 4);
2421      bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 8);
2422    }
2423
2424  elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4;
2425
2426  return TRUE;
2427}
2428
2429/* Return the section that should be marked against GC for a given
2430   relocation.  */
2431
2432static asection *
2433cris_elf_gc_mark_hook (asection *sec,
2434		       struct bfd_link_info *info,
2435		       Elf_Internal_Rela *rel,
2436		       struct elf_link_hash_entry *h,
2437		       Elf_Internal_Sym *sym)
2438{
2439  enum elf_cris_reloc_type r_type = ELF32_R_TYPE (rel->r_info);
2440  if (h != NULL)
2441    switch (r_type)
2442      {
2443      case R_CRIS_GNU_VTINHERIT:
2444      case R_CRIS_GNU_VTENTRY:
2445	return NULL;
2446
2447      default:
2448	break;
2449      }
2450
2451  return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
2452}
2453
2454/* Update the got entry reference counts for the section being removed.  */
2455
2456static bfd_boolean
2457cris_elf_gc_sweep_hook (bfd *abfd,
2458			struct bfd_link_info *info,
2459			asection *sec,
2460			const Elf_Internal_Rela *relocs)
2461{
2462  struct elf_cris_link_hash_table * htab;
2463  Elf_Internal_Shdr *symtab_hdr;
2464  struct elf_link_hash_entry **sym_hashes;
2465  bfd_signed_vma *local_got_refcounts;
2466  const Elf_Internal_Rela *rel, *relend;
2467  bfd *dynobj;
2468  asection *sgot;
2469  asection *srelgot;
2470
2471  if (bfd_link_relocatable (info))
2472    return TRUE;
2473
2474  dynobj = elf_hash_table (info)->dynobj;
2475  if (dynobj == NULL)
2476    return TRUE;
2477
2478  htab = elf_cris_hash_table (info);
2479  if (htab == NULL)
2480    return FALSE;
2481
2482  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2483  sym_hashes = elf_sym_hashes (abfd);
2484  local_got_refcounts = elf_local_got_refcounts (abfd);
2485
2486  sgot = htab->root.sgot;
2487  srelgot = htab->root.srelgot;
2488
2489  relend = relocs + sec->reloc_count;
2490  for (rel = relocs; rel < relend; rel++)
2491    {
2492      unsigned long r_symndx;
2493      struct elf_link_hash_entry *h = NULL;
2494      bfd_signed_vma got_element_size = 4;
2495      bfd_signed_vma *specific_refcount = NULL;
2496      enum elf_cris_reloc_type r_type;
2497
2498      r_symndx = ELF32_R_SYM (rel->r_info);
2499      if (r_symndx >= symtab_hdr->sh_info)
2500	{
2501	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
2502	  while (h->root.type == bfd_link_hash_indirect
2503		 || h->root.type == bfd_link_hash_warning)
2504	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
2505	}
2506
2507      r_type = ELF32_R_TYPE (rel->r_info);
2508      switch (r_type)
2509	{
2510	case R_CRIS_32_GOT:
2511	case R_CRIS_16_GOT:
2512	case R_CRIS_16_GOTPLT:
2513	case R_CRIS_32_GOTPLT:
2514	  specific_refcount = h != NULL
2515	    ? &((struct elf_cris_link_hash_entry *) h)->reg_got_refcount
2516	    : &local_got_refcounts[LGOT_REG_NDX (r_symndx)];
2517	  break;
2518
2519	case R_CRIS_32_GD:
2520	case R_CRIS_32_GOT_GD:
2521	case R_CRIS_16_GOT_GD:
2522	  got_element_size = 8;
2523	  specific_refcount = h != NULL
2524	    ? &((struct elf_cris_link_hash_entry *) h)->dtp_refcount
2525	    : &local_got_refcounts[LGOT_DTP_NDX (r_symndx)];
2526	  break;
2527
2528	case R_CRIS_32_IE:
2529	case R_CRIS_16_GOT_TPREL:
2530	case R_CRIS_32_GOT_TPREL:
2531	  specific_refcount = h != NULL
2532	    ? &((struct elf_cris_link_hash_entry *) h)->tprel_refcount
2533	    : &local_got_refcounts[LGOT_TPREL_NDX (r_symndx)];
2534	  break;
2535
2536	default:
2537	  break;
2538	}
2539
2540      switch (r_type)
2541	{
2542	case R_CRIS_32_IE:
2543	case R_CRIS_32_GD:
2544	case R_CRIS_16_GOT_TPREL:
2545	case R_CRIS_32_GOT_TPREL:
2546	case R_CRIS_32_GOT_GD:
2547	case R_CRIS_16_GOT_GD:
2548	case R_CRIS_16_GOT:
2549	case R_CRIS_32_GOT:
2550	  if (h != NULL)
2551	    {
2552	      /* If the counters are 0 when we got here, we've
2553		 miscounted somehow somewhere, an internal error.  */
2554	      BFD_ASSERT (h->got.refcount > 0);
2555	      --h->got.refcount;
2556
2557	      BFD_ASSERT (*specific_refcount > 0);
2558	      --*specific_refcount;
2559	      if (*specific_refcount == 0)
2560		{
2561		  /* We don't need the .got entry any more.  */
2562		  sgot->size -= got_element_size;
2563		  srelgot->size -= sizeof (Elf32_External_Rela);
2564		}
2565	      break;
2566	    }
2567
2568	local_got_reloc:
2569	  if (local_got_refcounts != NULL)
2570	    {
2571	      /* If the counters are 0 when we got here, we've
2572		 miscounted somehow somewhere, an internal error.  */
2573	      BFD_ASSERT (local_got_refcounts[r_symndx] > 0);
2574	      --local_got_refcounts[r_symndx];
2575
2576	      BFD_ASSERT (*specific_refcount > 0);
2577	      --*specific_refcount;
2578	      if (*specific_refcount == 0)
2579		{
2580		  /* We don't need the .got entry any more.  */
2581		  sgot->size -= got_element_size;
2582		  if (bfd_link_pic (info))
2583		    srelgot->size -= sizeof (Elf32_External_Rela);
2584		}
2585	    }
2586	  break;
2587
2588	case R_CRIS_16_GOTPLT:
2589	case R_CRIS_32_GOTPLT:
2590	  /* For local symbols, treat these like GOT relocs.  */
2591	  if (h == NULL)
2592	    goto local_got_reloc;
2593	  else
2594	    /* For global symbols, adjust the reloc-specific refcount.  */
2595	    elf_cris_hash_entry (h)->gotplt_refcount--;
2596	  /* Fall through.  */
2597
2598	case R_CRIS_32_PLT_GOTREL:
2599	  /* FIXME: We don't garbage-collect away the .got section.  */
2600	  if (local_got_refcounts != NULL)
2601	    local_got_refcounts[-1]--;
2602	  /* Fall through.  */
2603
2604	case R_CRIS_8:
2605	case R_CRIS_16:
2606	case R_CRIS_32:
2607	case R_CRIS_8_PCREL:
2608	case R_CRIS_16_PCREL:
2609	case R_CRIS_32_PCREL:
2610	case R_CRIS_32_PLT_PCREL:
2611	  /* Negate the increment we did in cris_elf_check_relocs.  */
2612	  if (h != NULL)
2613	    {
2614	      if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2615		  && h->plt.refcount > 0)
2616		--h->plt.refcount;
2617	    }
2618	  break;
2619
2620	case R_CRIS_32_DTPREL:
2621	  /* This'd be a .dtpreld entry in e.g. debug info.  */
2622	  if ((sec->flags & SEC_ALLOC) == 0)
2623	    break;
2624	  /* Fall through.  */
2625	case R_CRIS_16_DTPREL:
2626	  htab->dtpmod_refcount--;
2627	  if (htab->dtpmod_refcount == 0)
2628	    htab->next_gotplt_entry -= 8;
2629	  BFD_ASSERT (local_got_refcounts != NULL);
2630	  local_got_refcounts[-1]--;
2631	  break;
2632
2633	default:
2634	  break;
2635	}
2636    }
2637
2638  return TRUE;
2639}
2640
2641/* The elf_backend_plt_sym_val hook function.  */
2642
2643static bfd_vma
2644cris_elf_plt_sym_val (bfd_vma i ATTRIBUTE_UNUSED, const asection *plt,
2645		      const arelent *rel)
2646{
2647  bfd_size_type plt_entry_size;
2648  bfd_size_type pltoffs;
2649  bfd *abfd = plt->owner;
2650
2651  /* Same for CRIS and CRIS v32; see elf_cris_(|pic_)plt_entry(|_v32)[].  */
2652  bfd_size_type plt_entry_got_offset = 2;
2653  bfd_size_type plt_sec_size;
2654  bfd_size_type got_vma_for_dyn;
2655  asection *got;
2656
2657  /* FIXME: the .got section should be readily available also when
2658     we're not linking.  */
2659  if ((got = bfd_get_section_by_name (abfd, ".got")) == NULL)
2660    return (bfd_vma) -1;
2661
2662  plt_sec_size =  bfd_section_size (plt->owner, plt);
2663  plt_entry_size
2664    = (bfd_get_mach (abfd) == bfd_mach_cris_v32
2665       ? PLT_ENTRY_SIZE_V32 : PLT_ENTRY_SIZE);
2666
2667  /* Data in PLT is GOT-relative for DYN, but absolute for EXE.  */
2668  got_vma_for_dyn = (abfd->flags & EXEC_P) ? 0 : got->vma;
2669
2670  /* Because we can have merged GOT entries; a single .got entry for
2671     both GOT and the PLT part of the GOT (.got.plt), the index of the
2672     reloc in .rela.plt is not the same as the index in the PLT.
2673     Instead, we have to hunt down the GOT offset in the PLT that
2674     corresponds to that of this reloc.  Unfortunately, we will only
2675     be called for the .rela.plt relocs, so we'll miss synthetic
2676     symbols for .plt entries with merged GOT entries.  (FIXME:
2677     fixable by providing our own bfd_elf32_get_synthetic_symtab.
2678     Doesn't seem worthwile at time of this writing.)  FIXME: we've
2679     gone from O(1) to O(N) (N number of PLT entries) for finding each
2680     PLT address.  Shouldn't matter in practice though.  */
2681
2682  for (pltoffs = plt_entry_size;
2683       pltoffs < plt_sec_size;
2684       pltoffs += plt_entry_size)
2685    {
2686      bfd_size_type got_offset;
2687      bfd_byte gotoffs_raw[4];
2688
2689      if (!bfd_get_section_contents (abfd, (asection *) plt, gotoffs_raw,
2690				     pltoffs + plt_entry_got_offset,
2691				     sizeof (gotoffs_raw)))
2692	return (bfd_vma) -1;
2693
2694      got_offset = bfd_get_32 (abfd, gotoffs_raw);
2695      if (got_offset + got_vma_for_dyn == rel->address)
2696	return plt->vma + pltoffs;
2697    }
2698
2699  /* While it's tempting to BFD_ASSERT that we shouldn't get here,
2700     that'd not be graceful behavior for invalid input.  */
2701  return (bfd_vma) -1;
2702}
2703
2704/* Make sure we emit a GOT entry if the symbol was supposed to have a PLT
2705   entry but we found we will not create any.  Called when we find we will
2706   not have any PLT for this symbol, by for example
2707   elf_cris_adjust_dynamic_symbol when we're doing a proper dynamic link,
2708   or elf_cris_size_dynamic_sections if no dynamic sections will be
2709   created (we're only linking static objects).  */
2710
2711static bfd_boolean
2712elf_cris_adjust_gotplt_to_got (struct elf_cris_link_hash_entry *h, void * p)
2713{
2714  struct bfd_link_info *info = (struct bfd_link_info *) p;
2715
2716  /* A GOTPLT reloc, when activated, is supposed to be included into
2717     the PLT refcount, when the symbol isn't set-or-forced local.  */
2718  BFD_ASSERT (h->gotplt_refcount == 0
2719	      || h->root.plt.refcount == -1
2720	      || h->gotplt_refcount <= h->root.plt.refcount);
2721
2722  /* If nobody wanted a GOTPLT with this symbol, we're done.  */
2723  if (h->gotplt_refcount <= 0)
2724    return TRUE;
2725
2726  if (h->reg_got_refcount > 0)
2727    {
2728      /* There's a GOT entry for this symbol.  Just adjust the refcounts.
2729	 Probably not necessary at this stage, but keeping them accurate
2730	 helps avoiding surprises later.  */
2731      h->root.got.refcount += h->gotplt_refcount;
2732      h->reg_got_refcount += h->gotplt_refcount;
2733      h->gotplt_refcount = 0;
2734    }
2735  else
2736    {
2737      /* No GOT entry for this symbol.  We need to create one.  */
2738      asection *sgot;
2739      asection *srelgot;
2740
2741      sgot = elf_hash_table (info)->sgot;
2742      srelgot = elf_hash_table (info)->srelgot;
2743
2744      /* Put accurate refcounts there.  */
2745      BFD_ASSERT (h->root.got.refcount >= 0);
2746      h->root.got.refcount += h->gotplt_refcount;
2747      h->reg_got_refcount = h->gotplt_refcount;
2748
2749      h->gotplt_refcount = 0;
2750
2751      /* We always have a .got and a .rela.got section if there were
2752	 GOTPLT relocs in input.  */
2753      BFD_ASSERT (sgot != NULL && srelgot != NULL);
2754
2755      /* Allocate space in the .got section.  */
2756      sgot->size += 4;
2757
2758      /* Allocate relocation space.  */
2759      srelgot->size += sizeof (Elf32_External_Rela);
2760    }
2761
2762  return TRUE;
2763}
2764
2765/* Try to fold PLT entries with GOT entries.  There are two cases when we
2766   want to do this:
2767
2768   - When all PLT references are GOTPLT references, and there are GOT
2769     references, and this is not the executable.  We don't have to
2770     generate a PLT at all.
2771
2772   - When there are both (ordinary) PLT references and GOT references,
2773     and this isn't the executable.
2774     We want to make the PLT reference use the ordinary GOT entry rather
2775     than R_CRIS_JUMP_SLOT, a run-time dynamically resolved GOTPLT entry,
2776     since the GOT entry will have to be resolved at startup anyway.
2777
2778   Though the latter case is handled when room for the PLT is allocated,
2779   not here.
2780
2781   By folding into the GOT, we may need a round-trip to a PLT in the
2782   executable for calls, a loss in performance.  Still, losing a
2783   reloc is a win in size and at least in start-up time.
2784
2785   Note that this function is called before symbols are forced local by
2786   version scripts.  The differing cases are handled by
2787   elf_cris_hide_symbol.  */
2788
2789static bfd_boolean
2790elf_cris_try_fold_plt_to_got (struct elf_cris_link_hash_entry *h, void * p)
2791{
2792  struct bfd_link_info *info = (struct bfd_link_info *) p;
2793
2794  /* If there are no GOT references for this symbol, we can't fold any
2795     other reference so there's nothing to do.  Likewise if there are no
2796     PLT references; GOTPLT references included.  */
2797  if (h->root.got.refcount <= 0 || h->root.plt.refcount <= 0)
2798    return TRUE;
2799
2800  /* GOTPLT relocs are supposed to be included into the PLT refcount.  */
2801  BFD_ASSERT (h->gotplt_refcount <= h->root.plt.refcount);
2802
2803  if (h->gotplt_refcount == h->root.plt.refcount)
2804    {
2805      /* The only PLT references are GOTPLT references, and there are GOT
2806	 references.  Convert PLT to GOT references.  */
2807      if (! elf_cris_adjust_gotplt_to_got (h, info))
2808	return FALSE;
2809
2810      /* Clear the PLT references, so no PLT will be created.  */
2811      h->root.plt.offset = (bfd_vma) -1;
2812    }
2813
2814  return TRUE;
2815}
2816
2817/* Our own version of hide_symbol, so that we can adjust a GOTPLT reloc
2818   to use a GOT entry (and create one) rather than requiring a GOTPLT
2819   entry.  */
2820
2821static void
2822elf_cris_hide_symbol (struct bfd_link_info *info,
2823		      struct elf_link_hash_entry *h,
2824		      bfd_boolean force_local)
2825{
2826  elf_cris_adjust_gotplt_to_got ((struct elf_cris_link_hash_entry *) h, info);
2827
2828  _bfd_elf_link_hash_hide_symbol (info, h, force_local);
2829}
2830
2831/* Adjust a symbol defined by a dynamic object and referenced by a
2832   regular object.  The current definition is in some section of the
2833   dynamic object, but we're not including those sections.  We have to
2834   change the definition to something the rest of the link can
2835   understand.  */
2836
2837static bfd_boolean
2838elf_cris_adjust_dynamic_symbol (struct bfd_link_info *info,
2839				struct elf_link_hash_entry *h)
2840{
2841  struct elf_cris_link_hash_table * htab;
2842  bfd *dynobj;
2843  asection *s;
2844  asection *srel;
2845  bfd_size_type plt_entry_size;
2846
2847  htab = elf_cris_hash_table (info);
2848  if (htab == NULL)
2849    return FALSE;
2850
2851  dynobj = htab->root.dynobj;
2852
2853  /* Make sure we know what is going on here.  */
2854  BFD_ASSERT (dynobj != NULL
2855	      && (h->needs_plt
2856		  || h->u.weakdef != NULL
2857		  || (h->def_dynamic
2858		      && h->ref_regular
2859		      && !h->def_regular)));
2860
2861  plt_entry_size
2862    = (bfd_get_mach (dynobj) == bfd_mach_cris_v32
2863       ? PLT_ENTRY_SIZE_V32 : PLT_ENTRY_SIZE);
2864
2865  /* If this is a function, put it in the procedure linkage table.  We
2866     will fill in the contents of the procedure linkage table later,
2867     when we know the address of the .got section.  */
2868  if (h->type == STT_FUNC
2869      || h->needs_plt)
2870    {
2871      /* If we link a program (not a DSO), we'll get rid of unnecessary
2872	 PLT entries; we point to the actual symbols -- even for pic
2873	 relocs, because a program built with -fpic should have the same
2874	 result as one built without -fpic, specifically considering weak
2875	 symbols.
2876	 FIXME: m68k and i386 differ here, for unclear reasons.  */
2877      if (! bfd_link_pic (info)
2878	  && !h->def_dynamic)
2879	{
2880	  /* This case can occur if we saw a PLT reloc in an input file,
2881	     but the symbol was not defined by a dynamic object.  In such
2882	     a case, we don't actually need to build a procedure linkage
2883	     table, and we can just do an absolute or PC reloc instead, or
2884	     change a .got.plt index to a .got index for GOTPLT relocs.  */
2885	  BFD_ASSERT (h->needs_plt);
2886	  h->needs_plt = 0;
2887	  h->plt.offset = (bfd_vma) -1;
2888	  return
2889	    elf_cris_adjust_gotplt_to_got ((struct
2890					    elf_cris_link_hash_entry *) h,
2891					   info);
2892	}
2893
2894      /* If we had a R_CRIS_GLOB_DAT that didn't have to point to a PLT;
2895	 where a pointer-equivalent symbol was unimportant (i.e. more
2896	 like R_CRIS_JUMP_SLOT after symbol evaluation) we could get rid
2897	 of the PLT.  We can't for the executable, because the GOT
2898	 entries will point to the PLT there (and be constant).  */
2899      if (bfd_link_pic (info)
2900	  && !elf_cris_try_fold_plt_to_got ((struct elf_cris_link_hash_entry*)
2901					    h, info))
2902	return FALSE;
2903
2904      /* GC or folding may have rendered this entry unused.  */
2905      if (h->plt.refcount <= 0)
2906	{
2907	  h->needs_plt = 0;
2908	  h->plt.offset = (bfd_vma) -1;
2909	  return TRUE;
2910	}
2911
2912      /* Make sure this symbol is output as a dynamic symbol.  */
2913      if (h->dynindx == -1)
2914	{
2915	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
2916	    return FALSE;
2917	}
2918
2919      s = htab->root.splt;
2920      BFD_ASSERT (s != NULL);
2921
2922      /* If this is the first .plt entry, make room for the special
2923	 first entry.  */
2924      if (s->size == 0)
2925	s->size += plt_entry_size;
2926
2927      /* If this symbol is not defined in a regular file, and we are
2928	 not generating a shared library, then set the symbol to this
2929	 location in the .plt.  */
2930      if (!bfd_link_pic (info)
2931	  && !h->def_regular)
2932	{
2933	  h->root.u.def.section = s;
2934	  h->root.u.def.value = s->size;
2935	}
2936
2937      /* If there's already a GOT entry, use that, not a .got.plt.  A
2938	 GOT field still has a reference count when we get here; it's
2939	 not yet changed to an offset.  We can't do this for an
2940	 executable, because then the reloc associated with the PLT
2941	 would get a non-PLT reloc pointing to the PLT.  FIXME: Move
2942	 this to elf_cris_try_fold_plt_to_got.  */
2943      if (bfd_link_pic (info) && h->got.refcount > 0)
2944	{
2945	  h->got.refcount += h->plt.refcount;
2946
2947	  /* Mark the PLT offset to use the GOT entry by setting the low
2948	     bit in the plt offset; it is always a multiple of
2949	     plt_entry_size (which is at least a multiple of 2).  */
2950	  BFD_ASSERT ((s->size % plt_entry_size) == 0);
2951
2952	  /* Change the PLT refcount to an offset.  */
2953	  h->plt.offset = s->size;
2954
2955	  /* By not setting gotplt_offset (i.e. it remains at 0), we signal
2956	     that the got entry should be used instead.  */
2957	  BFD_ASSERT (((struct elf_cris_link_hash_entry *)
2958		       h)->gotplt_offset == 0);
2959
2960	  /* Make room for this entry.  */
2961	  s->size += plt_entry_size;
2962
2963	  return TRUE;
2964	}
2965
2966      /* No GOT reference for this symbol; prepare for an ordinary PLT.  */
2967      h->plt.offset = s->size;
2968
2969      /* Make room for this entry.  */
2970      s->size += plt_entry_size;
2971
2972      /* We also need to make an entry in the .got.plt section, which
2973	 will be placed in the .got section by the linker script.  */
2974      ((struct elf_cris_link_hash_entry *) h)->gotplt_offset
2975	= htab->next_gotplt_entry;
2976      htab->next_gotplt_entry += 4;
2977
2978      s = htab->root.sgotplt;
2979      BFD_ASSERT (s != NULL);
2980      s->size += 4;
2981
2982      /* We also need to make an entry in the .rela.plt section.  */
2983
2984      s = htab->root.srelplt;
2985      BFD_ASSERT (s != NULL);
2986      s->size += sizeof (Elf32_External_Rela);
2987
2988      return TRUE;
2989    }
2990
2991  /* Reinitialize the plt offset now that it is not used as a reference
2992     count any more.  */
2993  h->plt.offset = (bfd_vma) -1;
2994
2995  /* If this is a weak symbol, and there is a real definition, the
2996     processor independent code will have arranged for us to see the
2997     real definition first, and we can just use the same value.  */
2998  if (h->u.weakdef != NULL)
2999    {
3000      BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
3001		  || h->u.weakdef->root.type == bfd_link_hash_defweak);
3002      h->root.u.def.section = h->u.weakdef->root.u.def.section;
3003      h->root.u.def.value = h->u.weakdef->root.u.def.value;
3004      return TRUE;
3005    }
3006
3007  /* This is a reference to a symbol defined by a dynamic object which
3008     is not a function.  */
3009
3010  /* If we are creating a shared library, we must presume that the
3011     only references to the symbol are via the global offset table.
3012     For such cases we need not do anything here; the relocations will
3013     be handled correctly by relocate_section.  */
3014  if (bfd_link_pic (info))
3015    return TRUE;
3016
3017  /* If there are no references to this symbol that do not use the
3018     GOT, we don't need to generate a copy reloc.  */
3019  if (!h->non_got_ref)
3020    return TRUE;
3021
3022  /* We must allocate the symbol in our .dynbss section, which will
3023     become part of the .bss section of the executable.  There will be
3024     an entry for this symbol in the .dynsym section.  The dynamic
3025     object will contain position independent code, so all references
3026     from the dynamic object to this symbol will go through the global
3027     offset table.  The dynamic linker will use the .dynsym entry to
3028     determine the address it must put in the global offset table, so
3029     both the dynamic object and the regular object will refer to the
3030     same memory location for the variable.  */
3031
3032  /* We must generate a R_CRIS_COPY reloc to tell the dynamic linker to
3033     copy the initial value out of the dynamic object and into the
3034     runtime process image.  We need to remember the offset into the
3035     .rela.bss section we are going to use.  */
3036
3037  if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
3038    {
3039      s = htab->root.sdynrelro;
3040      srel = htab->root.sreldynrelro;
3041    }
3042  else
3043    {
3044      s = htab->root.sdynbss;
3045      srel = htab->root.srelbss;
3046    }
3047  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
3048    {
3049      BFD_ASSERT (srel != NULL);
3050      srel->size += sizeof (Elf32_External_Rela);
3051      h->needs_copy = 1;
3052    }
3053
3054  BFD_ASSERT (s != NULL);
3055
3056  return _bfd_elf_adjust_dynamic_copy (info, h, s);
3057}
3058
3059/* Adjust our "subclass" elements for an indirect symbol.  */
3060
3061static void
3062elf_cris_copy_indirect_symbol (struct bfd_link_info *info,
3063			       struct elf_link_hash_entry *dir,
3064			       struct elf_link_hash_entry *ind)
3065{
3066  struct elf_cris_link_hash_entry *edir, *eind;
3067
3068  edir = (struct elf_cris_link_hash_entry *) dir;
3069  eind = (struct elf_cris_link_hash_entry *) ind;
3070
3071  /* Only indirect symbols are replaced; we're not interested in
3072     updating any of EIND's fields for other symbols.  */
3073  if (eind->root.root.type != bfd_link_hash_indirect)
3074    {
3075      /* Still, we need to copy flags for e.g. weak definitions.  */
3076      _bfd_elf_link_hash_copy_indirect (info, dir, ind);
3077      return;
3078    }
3079
3080  BFD_ASSERT (edir->gotplt_offset == 0 || eind->gotplt_offset == 0);
3081
3082#define XMOVOPZ(F, OP, Z) edir->F OP eind->F; eind->F = Z
3083#define XMOVE(F) XMOVOPZ (F, +=, 0)
3084  if (eind->pcrel_relocs_copied != NULL)
3085    {
3086      if (edir->pcrel_relocs_copied != NULL)
3087	{
3088	  struct elf_cris_pcrel_relocs_copied **pp;
3089	  struct elf_cris_pcrel_relocs_copied *p;
3090
3091	  /* Add reloc counts against the indirect sym to the direct sym
3092	     list.  Merge any entries against the same section.  */
3093	  for (pp = &eind->pcrel_relocs_copied; *pp != NULL;)
3094	    {
3095	      struct elf_cris_pcrel_relocs_copied *q;
3096	      p = *pp;
3097	      for (q = edir->pcrel_relocs_copied; q != NULL; q = q->next)
3098		if (q->section == p->section)
3099		  {
3100		    q->count += p->count;
3101		    *pp = p->next;
3102		    break;
3103		  }
3104	      if (q == NULL)
3105		pp = &p->next;
3106	    }
3107	  *pp = edir->pcrel_relocs_copied;
3108	}
3109      XMOVOPZ (pcrel_relocs_copied, =, NULL);
3110    }
3111  XMOVE (gotplt_refcount);
3112  XMOVE (gotplt_offset);
3113  XMOVE (reg_got_refcount);
3114  XMOVE (tprel_refcount);
3115  XMOVE (dtp_refcount);
3116#undef XMOVE
3117#undef XMOVOPZ
3118
3119  _bfd_elf_link_hash_copy_indirect (info, dir, ind);
3120}
3121
3122/* Look through the relocs for a section during the first phase.  */
3123
3124static bfd_boolean
3125cris_elf_check_relocs (bfd *abfd,
3126		       struct bfd_link_info *info,
3127		       asection *sec,
3128		       const Elf_Internal_Rela *relocs)
3129{
3130  struct elf_cris_link_hash_table * htab;
3131  bfd *dynobj;
3132  Elf_Internal_Shdr *symtab_hdr;
3133  struct elf_link_hash_entry **sym_hashes;
3134  bfd_signed_vma *local_got_refcounts;
3135  const Elf_Internal_Rela *rel;
3136  const Elf_Internal_Rela *rel_end;
3137  asection *sgot;
3138  asection *srelgot;
3139  asection *sreloc;
3140
3141  if (bfd_link_relocatable (info))
3142    return TRUE;
3143
3144  htab = elf_cris_hash_table (info);
3145  if (htab == NULL)
3146    return FALSE;
3147
3148  dynobj = elf_hash_table (info)->dynobj;
3149  symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
3150  sym_hashes = elf_sym_hashes (abfd);
3151  local_got_refcounts = elf_local_got_refcounts (abfd);
3152
3153  sgot = NULL;
3154  srelgot = NULL;
3155  sreloc = NULL;
3156
3157  rel_end = relocs + sec->reloc_count;
3158  for (rel = relocs; rel < rel_end; rel++)
3159    {
3160      struct elf_link_hash_entry *h;
3161      unsigned long r_symndx;
3162      enum elf_cris_reloc_type r_type;
3163      bfd_signed_vma got_element_size = 4;
3164      unsigned long r_symndx_lgot = INT_MAX;
3165
3166      r_symndx = ELF32_R_SYM (rel->r_info);
3167      if (r_symndx < symtab_hdr->sh_info)
3168	{
3169	  h = NULL;
3170	  r_symndx_lgot = LGOT_REG_NDX (r_symndx);
3171	}
3172      else
3173	{
3174	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
3175	  while (h->root.type == bfd_link_hash_indirect
3176		 || h->root.type == bfd_link_hash_warning)
3177	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
3178
3179	  /* PR15323, ref flags aren't set for references in the same
3180	     object.  */
3181	  h->root.non_ir_ref = 1;
3182	}
3183
3184      r_type = ELF32_R_TYPE (rel->r_info);
3185
3186      /* Some relocs require linker-created sections; we need to hang them
3187	 on the first input bfd we found that contained dynamic relocs.  */
3188      switch (r_type)
3189	{
3190	case R_CRIS_32_DTPREL:
3191	  if ((sec->flags & SEC_ALLOC) == 0)
3192	    /* This'd be a .dtpreld entry in e.g. debug info.  We have
3193	       several different switch statements below, but none of
3194	       that is needed; we need no preparations for resolving
3195	       R_CRIS_32_DTPREL into a non-allocated section (debug
3196	       info), so let's just move on to the next
3197	       relocation.  */
3198	    continue;
3199	  /* Fall through.  */
3200	case R_CRIS_16_DTPREL:
3201	  /* The first .got.plt entry is right after the R_CRIS_DTPMOD
3202	     entry at index 3. */
3203	  if (htab->dtpmod_refcount == 0)
3204	    htab->next_gotplt_entry += 8;
3205
3206	  htab->dtpmod_refcount++;
3207	  /* Fall through.  */
3208
3209	case R_CRIS_32_IE:
3210	case R_CRIS_32_GD:
3211	case R_CRIS_16_GOT_GD:
3212	case R_CRIS_32_GOT_GD:
3213	case R_CRIS_32_GOT_TPREL:
3214	case R_CRIS_16_GOT_TPREL:
3215	case R_CRIS_16_GOT:
3216	case R_CRIS_32_GOT:
3217	case R_CRIS_32_GOTREL:
3218	case R_CRIS_32_PLT_GOTREL:
3219	case R_CRIS_32_PLT_PCREL:
3220	case R_CRIS_16_GOTPLT:
3221	case R_CRIS_32_GOTPLT:
3222	  if (dynobj == NULL)
3223	    {
3224	      elf_hash_table (info)->dynobj = dynobj = abfd;
3225
3226	      /* We could handle this if we can get a handle on the
3227		 output bfd in elf_cris_adjust_dynamic_symbol.  Failing
3228		 that, we must insist on dynobj being a specific mach.  */
3229	      if (bfd_get_mach (dynobj) == bfd_mach_cris_v10_v32)
3230		{
3231		  _bfd_error_handler
3232		    /* xgettext:c-format */
3233		    (_("%B, section %A:\n  v10/v32 compatible object %s"
3234		       " must not contain a PIC relocation"),
3235		     abfd, sec);
3236		  return FALSE;
3237		}
3238	    }
3239
3240	  if (sgot == NULL)
3241	    {
3242	      /* We may have a dynobj but no .got section, if machine-
3243		 independent parts of the linker found a reason to create
3244		 a dynobj.  We want to create the .got section now, so we
3245		 can assume it's always present whenever there's a dynobj.
3246		 It's ok to call this function more than once.  */
3247	      if (!_bfd_elf_create_got_section (dynobj, info))
3248		return FALSE;
3249
3250	      sgot = elf_hash_table (info)->sgot;
3251	      srelgot = elf_hash_table (info)->srelgot;
3252	    }
3253
3254	  if (local_got_refcounts == NULL)
3255	    {
3256	      bfd_size_type amt;
3257
3258	      /* We use index local_got_refcounts[-1] to count all
3259		 GOT-relative relocations that do not have explicit
3260		 GOT entries.  */
3261	      amt = LGOT_ALLOC_NELTS_FOR (symtab_hdr->sh_info) + 1;
3262	      amt *= sizeof (bfd_signed_vma);
3263	      local_got_refcounts = ((bfd_signed_vma *) bfd_zalloc (abfd, amt));
3264	      if (local_got_refcounts == NULL)
3265		return FALSE;
3266
3267	      local_got_refcounts++;
3268	      elf_local_got_refcounts (abfd) = local_got_refcounts;
3269	    }
3270	  break;
3271
3272	default:
3273	  break;
3274	}
3275
3276      /* Warn and error for invalid input.  */
3277      switch (r_type)
3278	{
3279	case R_CRIS_32_IE:
3280	case R_CRIS_32_TPREL:
3281	case R_CRIS_16_TPREL:
3282	case R_CRIS_32_GD:
3283	  if (bfd_link_pic (info))
3284	    {
3285	      _bfd_error_handler
3286		/* xgettext:c-format */
3287		(_("%B, section %A:\n  relocation %s not valid"
3288		   " in a shared object;"
3289		   " typically an option mixup, recompile with -fPIC"),
3290		 abfd,
3291		 sec,
3292		 cris_elf_howto_table[r_type].name);
3293	      /* Don't return FALSE here; we want messages for all of
3294		 these and the error behavior is ungraceful
3295		 anyway.  */
3296	    }
3297	default:
3298	  break;
3299	}
3300
3301      switch (r_type)
3302	{
3303	case R_CRIS_32_GD:
3304	case R_CRIS_16_GOT_GD:
3305	case R_CRIS_32_GOT_GD:
3306	  /* These are requests for tls_index entries, run-time R_CRIS_DTP.  */
3307	  got_element_size = 8;
3308	  r_symndx_lgot = LGOT_DTP_NDX (r_symndx);
3309	  break;
3310
3311	case R_CRIS_16_DTPREL:
3312	case R_CRIS_32_DTPREL:
3313	  /* These two just request for the constant-index
3314	     module-local tls_index-sized GOT entry, which we add
3315	     elsewhere.  */
3316	  break;
3317
3318	case R_CRIS_32_IE:
3319	case R_CRIS_32_GOT_TPREL:
3320	case R_CRIS_16_GOT_TPREL:
3321	  r_symndx_lgot = LGOT_TPREL_NDX (r_symndx);
3322
3323	  /* Those relocs also require that a DSO is of type
3324	     Initial Exec.  Like other targets, we don't reset this
3325	     flag even if the relocs are GC:ed away.  */
3326	  if (bfd_link_pic (info))
3327	    info->flags |= DF_STATIC_TLS;
3328	  break;
3329
3330	  /* Let's list the other assembler-generated TLS-relocs too,
3331	     just to show that they're not forgotten. */
3332	case R_CRIS_16_TPREL:
3333	case R_CRIS_32_TPREL:
3334	default:
3335	  break;
3336	}
3337
3338      switch (r_type)
3339        {
3340	case R_CRIS_16_GOTPLT:
3341	case R_CRIS_32_GOTPLT:
3342	  /* Mark that we need a GOT entry if the PLT entry (and its GOT
3343	     entry) is eliminated.  We can only do this for a non-local
3344	     symbol.  */
3345	  if (h != NULL)
3346	    {
3347	      elf_cris_hash_entry (h)->gotplt_refcount++;
3348	      goto handle_gotplt_reloc;
3349	    }
3350	  /* If h is NULL then this is a local symbol, and we must make a
3351	     GOT entry for it, so handle it like a GOT reloc.  */
3352	  /* Fall through.  */
3353
3354	case R_CRIS_32_IE:
3355	case R_CRIS_32_GD:
3356	case R_CRIS_16_GOT_GD:
3357	case R_CRIS_32_GOT_GD:
3358	case R_CRIS_32_GOT_TPREL:
3359	case R_CRIS_16_GOT_TPREL:
3360	case R_CRIS_16_GOT:
3361	case R_CRIS_32_GOT:
3362	  /* This symbol requires a global offset table entry.  */
3363	  if (h != NULL)
3364	    {
3365	      if (h->got.refcount == 0)
3366		{
3367		  /* Make sure this symbol is output as a dynamic symbol.  */
3368		  if (h->dynindx == -1)
3369		    {
3370		      if (!bfd_elf_link_record_dynamic_symbol (info, h))
3371			return FALSE;
3372		    }
3373		}
3374
3375	      /* Update the sum of reloc counts for this symbol.  */
3376	      h->got.refcount++;
3377
3378	      switch (r_type)
3379		{
3380		case R_CRIS_16_GOT:
3381		case R_CRIS_32_GOT:
3382		  if (elf_cris_hash_entry (h)->reg_got_refcount == 0)
3383		    {
3384		      /* Allocate space in the .got section.  */
3385		      sgot->size += got_element_size;
3386		      /* Allocate relocation space.  */
3387		      srelgot->size += sizeof (Elf32_External_Rela);
3388		    }
3389		  elf_cris_hash_entry (h)->reg_got_refcount++;
3390		  break;
3391
3392		case R_CRIS_32_GD:
3393		case R_CRIS_16_GOT_GD:
3394		case R_CRIS_32_GOT_GD:
3395		  if (elf_cris_hash_entry (h)->dtp_refcount == 0)
3396		    {
3397		      /* Allocate space in the .got section.  */
3398		      sgot->size += got_element_size;
3399		      /* Allocate relocation space.  */
3400		      srelgot->size += sizeof (Elf32_External_Rela);
3401		    }
3402		  elf_cris_hash_entry (h)->dtp_refcount++;
3403		  break;
3404
3405		case R_CRIS_32_IE:
3406		case R_CRIS_32_GOT_TPREL:
3407		case R_CRIS_16_GOT_TPREL:
3408		  if (elf_cris_hash_entry (h)->tprel_refcount == 0)
3409		    {
3410		      /* Allocate space in the .got section.  */
3411		      sgot->size += got_element_size;
3412		      /* Allocate relocation space.  */
3413		      srelgot->size += sizeof (Elf32_External_Rela);
3414		    }
3415		  elf_cris_hash_entry (h)->tprel_refcount++;
3416		  break;
3417
3418		default:
3419		  BFD_FAIL ();
3420		  break;
3421		}
3422	    }
3423	  else
3424	    {
3425	      /* This is a global offset table entry for a local symbol.  */
3426	      if (local_got_refcounts[r_symndx_lgot] == 0)
3427		{
3428		  sgot->size += got_element_size;
3429		  if (bfd_link_pic (info))
3430		    {
3431		      /* If we are generating a shared object, we need
3432			 to output a R_CRIS_RELATIVE reloc so that the
3433			 dynamic linker can adjust this GOT entry.
3434			 Similarly for non-regular got entries.  */
3435		      srelgot->size += sizeof (Elf32_External_Rela);
3436		    }
3437		}
3438	      /* Update the reloc-specific count.  */
3439	      local_got_refcounts[r_symndx_lgot]++;
3440
3441	      /* This one is the sum of all the others.  */
3442	      local_got_refcounts[r_symndx]++;
3443	    }
3444	  break;
3445
3446	case R_CRIS_16_DTPREL:
3447	case R_CRIS_32_DTPREL:
3448	case R_CRIS_32_GOTREL:
3449	  /* This reference requires a global offset table.
3450	     FIXME: The actual refcount isn't used currently; the .got
3451	     section can't be removed if there were any references in the
3452	     input.  */
3453	  local_got_refcounts[-1]++;
3454	  break;
3455
3456	handle_gotplt_reloc:
3457
3458	case R_CRIS_32_PLT_GOTREL:
3459	  /* This reference requires a global offset table.  */
3460	  local_got_refcounts[-1]++;
3461	  /* Fall through.  */
3462
3463	case R_CRIS_32_PLT_PCREL:
3464	  /* This symbol requires a procedure linkage table entry.  We
3465	     actually build the entry in adjust_dynamic_symbol,
3466             because this might be a case of linking PIC code which is
3467             never referenced by a dynamic object, in which case we
3468             don't need to generate a procedure linkage table entry
3469             after all.  */
3470
3471	  /* Beware: if we'd check for visibility of the symbol here
3472	     (and not marking the need for a PLT when non-visible), we'd
3473	     get into trouble with keeping handling consistent with
3474	     regards to relocs found before definition and GOTPLT
3475	     handling.  Eliminable PLT entries will be dealt with later
3476	     anyway.  */
3477	  if (h == NULL)
3478	    continue;
3479
3480	  h->needs_plt = 1;
3481
3482	  /* If the symbol is forced local, the refcount is unavailable.  */
3483	  if (h->plt.refcount != -1)
3484	    h->plt.refcount++;
3485	  break;
3486
3487	case R_CRIS_8:
3488	case R_CRIS_16:
3489	case R_CRIS_32:
3490	  /* Let's help debug shared library creation.  Any of these
3491	     relocs *can* be used in shared libs, but pages containing
3492	     them cannot be shared, so they're not appropriate for
3493	     common use.  Don't warn for sections we don't care about,
3494	     such as debug sections or non-constant sections.  We
3495	     can't help tables of (global) function pointers, for
3496	     example, though they must be emitted in a (writable) data
3497	     section to avoid having impure text sections.  */
3498	  if (bfd_link_pic (info)
3499	      && (sec->flags & SEC_ALLOC) != 0
3500	      && (sec->flags & SEC_READONLY) != 0)
3501	    {
3502	      /* FIXME: How do we make this optionally a warning only?  */
3503	      _bfd_error_handler
3504		/* xgettext:c-format */
3505		(_("%B, section %A:\n  relocation %s should not"
3506		   " be used in a shared object; recompile with -fPIC"),
3507		 abfd,
3508		 sec,
3509		 cris_elf_howto_table[r_type].name);
3510	    }
3511
3512	  /* We don't need to handle relocs into sections not going into
3513	     the "real" output.  */
3514	  if ((sec->flags & SEC_ALLOC) == 0)
3515	    break;
3516
3517	  if (h != NULL)
3518	    {
3519	      h->non_got_ref = 1;
3520
3521	      /* Make sure a plt entry is created for this symbol if it
3522		 turns out to be a function defined by a dynamic object.  */
3523	      if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
3524		h->plt.refcount++;
3525	    }
3526
3527	  /* If we are creating a shared library and this is not a local
3528	     symbol, we need to copy the reloc into the shared library.
3529	     However when linking with -Bsymbolic and this is a global
3530	     symbol which is defined in an object we are including in the
3531	     link (i.e., DEF_REGULAR is set), then we can resolve the
3532	     reloc directly.  At this point we have not seen all the input
3533	     files, so it is possible that DEF_REGULAR is not set now but
3534	     will be set later (it is never cleared).  In case of a weak
3535	     definition, DEF_REGULAR may be cleared later by a strong
3536	     definition in a shared library.  We account for that
3537	     possibility below by storing information in the relocs_copied
3538	     field of the hash table entry.  A similar situation occurs
3539	     when creating shared libraries and symbol visibility changes
3540	     render the symbol local.  */
3541
3542	  /* No need to do anything if we're not creating a shared object.  */
3543	  if (! bfd_link_pic (info))
3544	    break;
3545
3546	  /* We may need to create a reloc section in the dynobj and made room
3547	     for this reloc.  */
3548	  if (sreloc == NULL)
3549	    {
3550	      sreloc = _bfd_elf_make_dynamic_reloc_section
3551		(sec, dynobj, 2, abfd, /*rela?*/ TRUE);
3552
3553	      if (sreloc == NULL)
3554		return FALSE;
3555	    }
3556
3557	  if (sec->flags & SEC_READONLY)
3558	    info->flags |= DF_TEXTREL;
3559
3560	  sreloc->size += sizeof (Elf32_External_Rela);
3561	  break;
3562
3563	case R_CRIS_8_PCREL:
3564	case R_CRIS_16_PCREL:
3565	case R_CRIS_32_PCREL:
3566	  if (h != NULL)
3567	    {
3568	      h->non_got_ref = 1;
3569
3570	      /* Make sure a plt entry is created for this symbol if it
3571		 turns out to be a function defined by a dynamic object.  */
3572	      if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT)
3573		h->plt.refcount++;
3574	    }
3575
3576	  /* If we are creating a shared library and this is not a local
3577	     symbol, we need to copy the reloc into the shared library.
3578	     However when linking with -Bsymbolic and this is a global
3579	     symbol which is defined in an object we are including in the
3580	     link (i.e., DEF_REGULAR is set), then we can resolve the
3581	     reloc directly.  At this point we have not seen all the input
3582	     files, so it is possible that DEF_REGULAR is not set now but
3583	     will be set later (it is never cleared).  In case of a weak
3584	     definition, DEF_REGULAR may be cleared later by a strong
3585	     definition in a shared library.  We account for that
3586	     possibility below by storing information in the relocs_copied
3587	     field of the hash table entry.  A similar situation occurs
3588	     when creating shared libraries and symbol visibility changes
3589	     render the symbol local.  */
3590
3591	  /* No need to do anything if we're not creating a shared object.  */
3592	  if (! bfd_link_pic (info))
3593	    break;
3594
3595	  /* We don't need to handle relocs into sections not going into
3596	     the "real" output.  */
3597	  if ((sec->flags & SEC_ALLOC) == 0)
3598	    break;
3599
3600	  /* If the symbol is local, then we know already we can
3601	     eliminate the reloc.  */
3602	  if (h == NULL || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
3603	    break;
3604
3605	  /* If this is with -Bsymbolic and the symbol isn't weak, and
3606	     is defined by an ordinary object (the ones we include in
3607	     this shared library) then we can also eliminate the
3608	     reloc.  See comment above for more eliminable cases which
3609	     we can't identify at this time.  */
3610	  if (SYMBOLIC_BIND (info, h)
3611	      && h->root.type != bfd_link_hash_defweak
3612	      && h->def_regular)
3613	    break;
3614
3615	  /* We may need to create a reloc section in the dynobj and made room
3616	     for this reloc.  */
3617	  if (sreloc == NULL)
3618	    {
3619	      sreloc = _bfd_elf_make_dynamic_reloc_section
3620		(sec, dynobj, 2, abfd, /*rela?*/ TRUE);
3621
3622	      if (sreloc == NULL)
3623		return FALSE;
3624	    }
3625
3626	  sreloc->size += sizeof (Elf32_External_Rela);
3627
3628	  /* We count the number of PC relative relocations we have
3629	     entered for this symbol, so that we can discard them
3630	     again if the symbol is later defined by a regular object.
3631	     We know that h is really a pointer to an
3632	     elf_cris_link_hash_entry.  */
3633	  {
3634	    struct elf_cris_link_hash_entry *eh;
3635	    struct elf_cris_pcrel_relocs_copied *p;
3636
3637	    eh = elf_cris_hash_entry (h);
3638
3639	    for (p = eh->pcrel_relocs_copied; p != NULL; p = p->next)
3640	      if (p->section == sec)
3641		break;
3642
3643	    if (p == NULL)
3644	      {
3645		p = ((struct elf_cris_pcrel_relocs_copied *)
3646		     bfd_alloc (dynobj, (bfd_size_type) sizeof *p));
3647		if (p == NULL)
3648		  return FALSE;
3649		p->next = eh->pcrel_relocs_copied;
3650		eh->pcrel_relocs_copied = p;
3651		p->section = sec;
3652		p->count = 0;
3653		p->r_type = r_type;
3654	      }
3655
3656	    ++p->count;
3657	  }
3658	  break;
3659
3660        /* This relocation describes the C++ object vtable hierarchy.
3661           Reconstruct it for later use during GC.  */
3662        case R_CRIS_GNU_VTINHERIT:
3663          if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
3664            return FALSE;
3665          break;
3666
3667        /* This relocation describes which C++ vtable entries are actually
3668           used.  Record for later use during GC.  */
3669        case R_CRIS_GNU_VTENTRY:
3670          BFD_ASSERT (h != NULL);
3671          if (h != NULL
3672              && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
3673            return FALSE;
3674          break;
3675
3676	case R_CRIS_16_TPREL:
3677	case R_CRIS_32_TPREL:
3678	  /* Already warned above, when necessary.  */
3679	  break;
3680
3681	default:
3682	  /* Other relocs do not appear here.  */
3683	  bfd_set_error (bfd_error_bad_value);
3684	  return FALSE;
3685        }
3686    }
3687
3688  return TRUE;
3689}
3690
3691/* Set the sizes of the dynamic sections.  */
3692
3693static bfd_boolean
3694elf_cris_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
3695				struct bfd_link_info *info)
3696{
3697  struct elf_cris_link_hash_table * htab;
3698  bfd *dynobj;
3699  asection *s;
3700  bfd_boolean plt;
3701  bfd_boolean relocs;
3702
3703  htab = elf_cris_hash_table (info);
3704  if (htab == NULL)
3705    return FALSE;
3706
3707  dynobj = htab->root.dynobj;
3708  BFD_ASSERT (dynobj != NULL);
3709
3710  if (htab->root.dynamic_sections_created)
3711    {
3712      /* Set the contents of the .interp section to the interpreter.  */
3713      if (bfd_link_executable (info) && !info->nointerp)
3714	{
3715	  s = bfd_get_linker_section (dynobj, ".interp");
3716	  BFD_ASSERT (s != NULL);
3717	  s->size = sizeof ELF_DYNAMIC_INTERPRETER;
3718	  s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER;
3719	}
3720    }
3721  else
3722    {
3723      /* Adjust all expected GOTPLT uses to use a GOT entry instead.  */
3724      elf_cris_link_hash_traverse (htab, elf_cris_adjust_gotplt_to_got,
3725				   info);
3726
3727      /* We may have created entries in the .rela.got section.
3728	 However, if we are not creating the dynamic sections, we will
3729	 not actually use these entries.  Reset the size of .rela.got,
3730	 which will cause it to get stripped from the output file
3731	 below.  */
3732      s = htab->root.srelgot;
3733      if (s != NULL)
3734	s->size = 0;
3735    }
3736
3737  /* If this is a -Bsymbolic shared link, then we need to discard all PC
3738     relative relocs against symbols defined in a regular object.  We
3739     allocated space for them in the check_relocs routine, but we will not
3740     fill them in in the relocate_section routine.  We also discard space
3741     for relocs that have become for local symbols due to symbol
3742     visibility changes.  For programs, we discard space for relocs for
3743     symbols not referenced by any dynamic object.  */
3744  if (bfd_link_pic (info))
3745    elf_cris_link_hash_traverse (htab,
3746				 elf_cris_discard_excess_dso_dynamics,
3747				 info);
3748  else
3749    elf_cris_link_hash_traverse (htab,
3750				 elf_cris_discard_excess_program_dynamics,
3751				 info);
3752
3753  /* The check_relocs and adjust_dynamic_symbol entry points have
3754     determined the sizes of the various dynamic sections.  Allocate
3755     memory for them.  */
3756  plt = FALSE;
3757  relocs = FALSE;
3758  for (s = dynobj->sections; s != NULL; s = s->next)
3759    {
3760      const char *name;
3761
3762      if ((s->flags & SEC_LINKER_CREATED) == 0)
3763	continue;
3764
3765      /* It's OK to base decisions on the section name, because none
3766	 of the dynobj section names depend upon the input files.  */
3767      name = bfd_get_section_name (dynobj, s);
3768
3769      if (strcmp (name, ".plt") == 0)
3770	{
3771	  /* Remember whether there is a PLT.  */
3772	  plt = s->size != 0;
3773	}
3774      else if (strcmp (name, ".got.plt") == 0)
3775	{
3776	  /* The .got.plt contains the .got header as well as the
3777	     actual .got.plt contents.  The .got header may contain a
3778	     R_CRIS_DTPMOD entry at index 3.  */
3779	  s->size += htab->dtpmod_refcount != 0
3780	    ? 8 : 0;
3781	}
3782      else if (CONST_STRNEQ (name, ".rela"))
3783	{
3784	  if (strcmp (name, ".rela.got") == 0
3785	      && htab->dtpmod_refcount != 0
3786	      && bfd_link_pic (info))
3787	    s->size += sizeof (Elf32_External_Rela);
3788
3789	  if (s->size != 0)
3790	    {
3791	      /* Remember whether there are any reloc sections other
3792                 than .rela.plt.  */
3793	      if (strcmp (name, ".rela.plt") != 0)
3794		  relocs = TRUE;
3795
3796	      /* We use the reloc_count field as a counter if we need
3797		 to copy relocs into the output file.  */
3798	      s->reloc_count = 0;
3799	    }
3800	}
3801      else if (! CONST_STRNEQ (name, ".got")
3802	       && strcmp (name, ".dynbss") != 0
3803	       && s != htab->root.sdynrelro)
3804	{
3805	  /* It's not one of our sections, so don't allocate space.  */
3806	  continue;
3807	}
3808
3809      if (s->size == 0)
3810	{
3811	  /* If we don't need this section, strip it from the
3812	     output file.  This is mostly to handle .rela.bss and
3813	     .rela.plt.  We must create both sections in
3814	     create_dynamic_sections, because they must be created
3815	     before the linker maps input sections to output
3816	     sections.  The linker does that before
3817	     adjust_dynamic_symbol is called, and it is that
3818	     function which decides whether anything needs to go
3819	     into these sections.  */
3820	  s->flags |= SEC_EXCLUDE;
3821	  continue;
3822	}
3823
3824      if ((s->flags & SEC_HAS_CONTENTS) == 0)
3825	continue;
3826
3827      /* Allocate memory for the section contents. We use bfd_zalloc here
3828	 in case unused entries are not reclaimed before the section's
3829	 contents are written out.  This should not happen, but this way
3830	 if it does, we will not write out garbage.  For reloc sections,
3831	 this will make entries have the type R_CRIS_NONE.  */
3832      s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
3833      if (s->contents == NULL)
3834	return FALSE;
3835    }
3836
3837  if (elf_hash_table (info)->dynamic_sections_created)
3838    {
3839      /* Add some entries to the .dynamic section.  We fill in the
3840	 values later, in elf_cris_finish_dynamic_sections, but we
3841	 must add the entries now so that we get the correct size for
3842	 the .dynamic section.  The DT_DEBUG entry is filled in by the
3843	 dynamic linker and used by the debugger.  */
3844#define add_dynamic_entry(TAG, VAL) \
3845  _bfd_elf_add_dynamic_entry (info, TAG, VAL)
3846
3847      if (!bfd_link_pic (info))
3848	{
3849	  if (!add_dynamic_entry (DT_DEBUG, 0))
3850	    return FALSE;
3851	}
3852
3853      if (plt)
3854	{
3855	  if (!add_dynamic_entry (DT_PLTGOT, 0)
3856	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
3857	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
3858	      || !add_dynamic_entry (DT_JMPREL, 0))
3859	    return FALSE;
3860	}
3861
3862      if (relocs)
3863	{
3864	  if (!add_dynamic_entry (DT_RELA, 0)
3865	      || !add_dynamic_entry (DT_RELASZ, 0)
3866	      || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela)))
3867	    return FALSE;
3868	}
3869
3870      if ((info->flags & DF_TEXTREL) != 0)
3871	{
3872	  if (!add_dynamic_entry (DT_TEXTREL, 0))
3873	    return FALSE;
3874	  info->flags |= DF_TEXTREL;
3875	}
3876    }
3877#undef add_dynamic_entry
3878
3879  return TRUE;
3880}
3881
3882/* This function is called via elf_cris_link_hash_traverse if we are
3883   creating a shared object.  In the -Bsymbolic case, it discards the
3884   space allocated to copy PC relative relocs against symbols which
3885   are defined in regular objects.  For the normal non-symbolic case,
3886   we also discard space for relocs that have become local due to
3887   symbol visibility changes.  We allocated space for them in the
3888   check_relocs routine, but we won't fill them in in the
3889   relocate_section routine.  */
3890
3891static bfd_boolean
3892elf_cris_discard_excess_dso_dynamics (struct elf_cris_link_hash_entry *h,
3893				      void * inf)
3894{
3895  struct elf_cris_pcrel_relocs_copied *s;
3896  struct bfd_link_info *info = (struct bfd_link_info *) inf;
3897
3898  /* If a symbol has been forced local or we have found a regular
3899     definition for the symbolic link case, then we won't be needing
3900     any relocs.  */
3901  if (h->root.def_regular
3902      && (h->root.forced_local
3903	  || SYMBOLIC_BIND (info, &h->root)))
3904    {
3905      for (s = h->pcrel_relocs_copied; s != NULL; s = s->next)
3906	{
3907	  asection *sreloc
3908	    = _bfd_elf_get_dynamic_reloc_section (elf_hash_table (info)
3909						  ->dynobj,
3910						  s->section,
3911						  /*rela?*/ TRUE);
3912	  sreloc->size -= s->count * sizeof (Elf32_External_Rela);
3913	}
3914      return TRUE;
3915    }
3916
3917  /* If we have accounted for PC-relative relocs for read-only
3918     sections, now is the time to warn for them.  We can't do it in
3919     cris_elf_check_relocs, because we don't know the status of all
3920     symbols at that time (and it's common to force symbols local
3921     late).  */
3922
3923  for (s = h->pcrel_relocs_copied; s != NULL; s = s->next)
3924    if ((s->section->flags & SEC_READONLY) != 0)
3925      {
3926	/* FIXME: How do we make this optionally a warning only?  */
3927	_bfd_error_handler
3928	  /* xgettext:c-format */
3929	  (_("%B, section `%A', to symbol `%s':\n"
3930	     "  relocation %s should not be used"
3931	     " in a shared object; recompile with -fPIC"),
3932	   s->section->owner,
3933	   s->section,
3934	   h->root.root.root.string,
3935	   cris_elf_howto_table[s->r_type].name);
3936
3937	info->flags |= DF_TEXTREL;
3938      }
3939
3940  return TRUE;
3941}
3942
3943/* This function is called via elf_cris_link_hash_traverse if we are *not*
3944   creating a shared object.  We discard space for relocs for symbols put
3945   in the .got, but which we found we do not have to resolve at run-time.  */
3946
3947static bfd_boolean
3948elf_cris_discard_excess_program_dynamics (struct elf_cris_link_hash_entry *h,
3949					  void * inf)
3950{
3951  struct bfd_link_info *info = (struct bfd_link_info *) inf;
3952
3953  /* If we're not creating a shared library and have a symbol which is
3954     referred to by .got references, but the symbol is defined locally,
3955     (or rather, not defined by a DSO) then lose the reloc for the .got
3956     (don't allocate room for it).  Likewise for relocs for something
3957     for which we create a PLT.  */
3958  if (!h->root.def_dynamic
3959      || h->root.plt.refcount > 0)
3960    {
3961      if (h->reg_got_refcount > 0
3962	  /* The size of this section is only valid and in sync with the
3963	     various reference counts if we do dynamic; don't decrement it
3964	     otherwise.  */
3965	  && elf_hash_table (info)->dynamic_sections_created)
3966	{
3967	  bfd *dynobj = elf_hash_table (info)->dynobj;
3968	  asection *srelgot = elf_hash_table (info)->srelgot;
3969
3970	  BFD_ASSERT (dynobj != NULL);
3971	  BFD_ASSERT (srelgot != NULL);
3972
3973	  srelgot->size -= sizeof (Elf32_External_Rela);
3974	}
3975
3976      /* If the locally-defined symbol isn't used by a DSO, then we don't
3977	 have to export it as a dynamic symbol.  This was already done for
3978	 functions; doing this for all symbols would presumably not
3979	 introduce new problems.  Of course we don't do this if we're
3980	 exporting all dynamic symbols, or all data symbols, regardless of
3981	 them being referenced or not.  */
3982      if (! (info->export_dynamic
3983	     || (h->root.type != STT_FUNC && info->dynamic_data))
3984	  && h->root.dynindx != -1
3985	  && !h->root.def_dynamic
3986	  && !h->root.ref_dynamic)
3987	{
3988	  h->root.dynindx = -1;
3989	  _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
3990				  h->root.dynstr_index);
3991	}
3992    }
3993
3994  return TRUE;
3995}
3996
3997/* Reject a file depending on presence and expectation of prefixed
3998   underscores on symbols.  */
3999
4000static bfd_boolean
4001cris_elf_object_p (bfd *abfd)
4002{
4003  if (! cris_elf_set_mach_from_flags (abfd, elf_elfheader (abfd)->e_flags))
4004    return FALSE;
4005
4006  if ((elf_elfheader (abfd)->e_flags & EF_CRIS_UNDERSCORE))
4007    return (bfd_get_symbol_leading_char (abfd) == '_');
4008  else
4009    return (bfd_get_symbol_leading_char (abfd) == 0);
4010}
4011
4012/* Mark presence or absence of leading underscore.  Set machine type
4013   flags from mach type.  */
4014
4015static void
4016cris_elf_final_write_processing (bfd *abfd,
4017				 bfd_boolean linker ATTRIBUTE_UNUSED)
4018{
4019  unsigned long e_flags = elf_elfheader (abfd)->e_flags;
4020
4021  e_flags &= ~EF_CRIS_UNDERSCORE;
4022  if (bfd_get_symbol_leading_char (abfd) == '_')
4023    e_flags |= EF_CRIS_UNDERSCORE;
4024
4025  switch (bfd_get_mach (abfd))
4026    {
4027    case bfd_mach_cris_v0_v10:
4028      e_flags |= EF_CRIS_VARIANT_ANY_V0_V10;
4029      break;
4030
4031    case bfd_mach_cris_v10_v32:
4032      e_flags |= EF_CRIS_VARIANT_COMMON_V10_V32;
4033      break;
4034
4035    case bfd_mach_cris_v32:
4036      e_flags |= EF_CRIS_VARIANT_V32;
4037      break;
4038
4039    default:
4040      _bfd_abort (__FILE__, __LINE__,
4041		  _("Unexpected machine number"));
4042    }
4043
4044  elf_elfheader (abfd)->e_flags = e_flags;
4045}
4046
4047/* Set the mach type from e_flags value.  */
4048
4049static bfd_boolean
4050cris_elf_set_mach_from_flags (bfd *abfd,
4051			      unsigned long flags)
4052{
4053  switch (flags & EF_CRIS_VARIANT_MASK)
4054    {
4055    case EF_CRIS_VARIANT_ANY_V0_V10:
4056      bfd_default_set_arch_mach (abfd, bfd_arch_cris, bfd_mach_cris_v0_v10);
4057      break;
4058
4059    case EF_CRIS_VARIANT_V32:
4060      bfd_default_set_arch_mach (abfd, bfd_arch_cris, bfd_mach_cris_v32);
4061      break;
4062
4063    case EF_CRIS_VARIANT_COMMON_V10_V32:
4064      bfd_default_set_arch_mach (abfd, bfd_arch_cris, bfd_mach_cris_v10_v32);
4065      break;
4066
4067    default:
4068      /* Since we don't recognize them, we obviously can't support them
4069	 with this code; we'd have to require that all future handling
4070	 would be optional.  */
4071      bfd_set_error (bfd_error_wrong_format);
4072      return FALSE;
4073    }
4074
4075  return TRUE;
4076}
4077
4078/* Display the flags field.  */
4079
4080static bfd_boolean
4081cris_elf_print_private_bfd_data (bfd *abfd, void * ptr)
4082{
4083  FILE *file = (FILE *) ptr;
4084
4085  BFD_ASSERT (abfd != NULL && ptr != NULL);
4086
4087  _bfd_elf_print_private_bfd_data (abfd, ptr);
4088
4089  fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
4090
4091  if (elf_elfheader (abfd)->e_flags & EF_CRIS_UNDERSCORE)
4092    fprintf (file, _(" [symbols have a _ prefix]"));
4093  if ((elf_elfheader (abfd)->e_flags & EF_CRIS_VARIANT_MASK)
4094      == EF_CRIS_VARIANT_COMMON_V10_V32)
4095    fprintf (file, _(" [v10 and v32]"));
4096  if ((elf_elfheader (abfd)->e_flags & EF_CRIS_VARIANT_MASK)
4097      == EF_CRIS_VARIANT_V32)
4098    fprintf (file, _(" [v32]"));
4099
4100  fputc ('\n', file);
4101  return TRUE;
4102}
4103
4104/* Don't mix files with and without a leading underscore.  */
4105
4106static bfd_boolean
4107cris_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
4108{
4109  bfd *obfd = info->output_bfd;
4110  int imach, omach;
4111
4112  if (! _bfd_generic_verify_endian_match (ibfd, info))
4113    return FALSE;
4114
4115  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
4116      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
4117    return TRUE;
4118
4119  imach = bfd_get_mach (ibfd);
4120
4121  if (! elf_flags_init (obfd))
4122    {
4123      /* This happens when ld starts out with a 'blank' output file.  */
4124      elf_flags_init (obfd) = TRUE;
4125
4126      /* We ignore the linker-set mach, and instead set it according to
4127	 the first input file.  This would also happen if we could
4128	 somehow filter out the OUTPUT_ARCH () setting from elf.sc.
4129	 This allows us to keep the same linker config across
4130	 cris(v0..v10) and crisv32.  The drawback is that we can't force
4131	 the output type, which might be a sane thing to do for a
4132	 v10+v32 compatibility object.  */
4133      if (! bfd_set_arch_mach (obfd, bfd_arch_cris, imach))
4134	return FALSE;
4135    }
4136
4137  if (bfd_get_symbol_leading_char (ibfd)
4138      != bfd_get_symbol_leading_char (obfd))
4139    {
4140      _bfd_error_handler
4141	(bfd_get_symbol_leading_char (ibfd) == '_'
4142	 ? _("%B: uses _-prefixed symbols, but writing file with non-prefixed symbols")
4143	 : _("%B: uses non-prefixed symbols, but writing file with _-prefixed symbols"),
4144	 ibfd);
4145      bfd_set_error (bfd_error_bad_value);
4146      return FALSE;
4147    }
4148
4149  omach = bfd_get_mach (obfd);
4150
4151  if (imach != omach)
4152    {
4153      /* We can get an incompatible combination only if either is
4154	 bfd_mach_cris_v32, and the other one isn't compatible.  */
4155      if ((imach == bfd_mach_cris_v32
4156	   && omach != bfd_mach_cris_v10_v32)
4157	  || (omach == bfd_mach_cris_v32
4158	      && imach != bfd_mach_cris_v10_v32))
4159	{
4160	  _bfd_error_handler
4161	    ((imach == bfd_mach_cris_v32)
4162	     ? _("%B contains CRIS v32 code, incompatible"
4163		 " with previous objects")
4164	     : _("%B contains non-CRIS-v32 code, incompatible"
4165		 " with previous objects"),
4166	     ibfd);
4167	  bfd_set_error (bfd_error_bad_value);
4168	  return FALSE;
4169	}
4170
4171      /* We don't have to check the case where the input is compatible
4172	 with v10 and v32, because the output is already known to be set
4173	 to the other (compatible) mach.  */
4174      if (omach == bfd_mach_cris_v10_v32
4175	  && ! bfd_set_arch_mach (obfd, bfd_arch_cris, imach))
4176	return FALSE;
4177    }
4178
4179  return TRUE;
4180}
4181
4182/* Do side-effects of e_flags copying to obfd.  */
4183
4184static bfd_boolean
4185cris_elf_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
4186{
4187  if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
4188      || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
4189    return TRUE;
4190
4191  /* Call the base function.  */
4192  if (!_bfd_elf_copy_private_bfd_data (ibfd, obfd))
4193    return FALSE;
4194
4195  /* Do what we really came here for.  */
4196  return bfd_set_arch_mach (obfd, bfd_arch_cris, bfd_get_mach (ibfd));
4197}
4198
4199static enum elf_reloc_type_class
4200elf_cris_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
4201			   const asection *rel_sec ATTRIBUTE_UNUSED,
4202			   const Elf_Internal_Rela *rela)
4203{
4204  enum elf_cris_reloc_type r_type = ELF32_R_TYPE (rela->r_info);
4205  switch (r_type)
4206    {
4207    case R_CRIS_RELATIVE:
4208      return reloc_class_relative;
4209    case R_CRIS_JUMP_SLOT:
4210      return reloc_class_plt;
4211    case R_CRIS_COPY:
4212      return reloc_class_copy;
4213    default:
4214      return reloc_class_normal;
4215    }
4216}
4217
4218/* The elf_backend_got_elt_size worker.  For one symbol, we can have up to
4219   two GOT entries from three types with two different sizes.  We handle
4220   it as a single entry, so we can use the regular offset-calculation
4221   machinery.  */
4222
4223static bfd_vma
4224elf_cris_got_elt_size (bfd *abfd ATTRIBUTE_UNUSED,
4225		       struct bfd_link_info *info ATTRIBUTE_UNUSED,
4226		       struct elf_link_hash_entry *hr,
4227		       bfd *ibfd,
4228		       unsigned long symndx)
4229{
4230  struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) hr;
4231  bfd_vma eltsiz = 0;
4232
4233  /* We may have one regular GOT entry or up to two TLS GOT
4234     entries.  */
4235  if (h == NULL)
4236    {
4237      Elf_Internal_Shdr *symtab_hdr = &elf_tdata (ibfd)->symtab_hdr;
4238      bfd_signed_vma *local_got_refcounts = elf_local_got_refcounts (ibfd);
4239
4240      BFD_ASSERT (local_got_refcounts != NULL);
4241
4242      if (local_got_refcounts[LGOT_REG_NDX (symndx)] > 0)
4243	{
4244	  /* We can't have a variable referred to both as a regular
4245	     variable and through TLS relocs.  */
4246	  BFD_ASSERT (local_got_refcounts[LGOT_DTP_NDX (symndx)] == 0
4247		      && local_got_refcounts[LGOT_TPREL_NDX (symndx)] == 0);
4248	  return 4;
4249	}
4250
4251      if (local_got_refcounts[LGOT_DTP_NDX (symndx)] > 0)
4252	eltsiz += 8;
4253
4254      if (local_got_refcounts[LGOT_TPREL_NDX (symndx)] > 0)
4255	eltsiz += 4;
4256    }
4257  else
4258    {
4259      struct elf_cris_link_hash_entry *hh = elf_cris_hash_entry (h);
4260      if (hh->reg_got_refcount > 0)
4261	{
4262	  /* The actual error-on-input is emitted elsewhere.  */
4263	  BFD_ASSERT (hh->dtp_refcount == 0 && hh->tprel_refcount == 0);
4264	  return 4;
4265	}
4266
4267      if (hh->dtp_refcount > 0)
4268	eltsiz += 8;
4269
4270      if (hh->tprel_refcount > 0)
4271	eltsiz += 4;
4272    }
4273
4274  /* We're only called when h->got.refcount is non-zero, so we must
4275     have a non-zero size.  */
4276  BFD_ASSERT (eltsiz != 0);
4277  return eltsiz;
4278}
4279
4280#define ELF_ARCH		bfd_arch_cris
4281#define ELF_TARGET_ID		CRIS_ELF_DATA
4282#define ELF_MACHINE_CODE	EM_CRIS
4283#define ELF_MAXPAGESIZE		0x2000
4284
4285#define TARGET_LITTLE_SYM	cris_elf32_vec
4286#define TARGET_LITTLE_NAME	"elf32-cris"
4287#define elf_symbol_leading_char 0
4288
4289#define elf_info_to_howto_rel			NULL
4290#define elf_info_to_howto			cris_info_to_howto_rela
4291#define elf_backend_relocate_section		cris_elf_relocate_section
4292#define elf_backend_gc_mark_hook		cris_elf_gc_mark_hook
4293#define elf_backend_gc_sweep_hook		cris_elf_gc_sweep_hook
4294#define elf_backend_plt_sym_val			cris_elf_plt_sym_val
4295#define elf_backend_check_relocs                cris_elf_check_relocs
4296#define elf_backend_grok_prstatus		cris_elf_grok_prstatus
4297#define elf_backend_grok_psinfo			cris_elf_grok_psinfo
4298
4299#define elf_backend_can_gc_sections		1
4300#define elf_backend_can_refcount		1
4301
4302#define elf_backend_object_p			cris_elf_object_p
4303#define elf_backend_final_write_processing \
4304	cris_elf_final_write_processing
4305#define bfd_elf32_bfd_print_private_bfd_data \
4306	cris_elf_print_private_bfd_data
4307#define bfd_elf32_bfd_merge_private_bfd_data \
4308	cris_elf_merge_private_bfd_data
4309#define bfd_elf32_bfd_copy_private_bfd_data \
4310	cris_elf_copy_private_bfd_data
4311
4312#define bfd_elf32_bfd_reloc_type_lookup		cris_reloc_type_lookup
4313#define bfd_elf32_bfd_reloc_name_lookup	cris_reloc_name_lookup
4314
4315#define bfd_elf32_bfd_link_hash_table_create \
4316	elf_cris_link_hash_table_create
4317#define elf_backend_adjust_dynamic_symbol \
4318	elf_cris_adjust_dynamic_symbol
4319#define elf_backend_copy_indirect_symbol \
4320	elf_cris_copy_indirect_symbol
4321#define elf_backend_size_dynamic_sections \
4322	elf_cris_size_dynamic_sections
4323#define elf_backend_init_index_section		_bfd_elf_init_1_index_section
4324#define elf_backend_finish_dynamic_symbol \
4325	elf_cris_finish_dynamic_symbol
4326#define elf_backend_finish_dynamic_sections \
4327	elf_cris_finish_dynamic_sections
4328#define elf_backend_create_dynamic_sections \
4329	_bfd_elf_create_dynamic_sections
4330#define bfd_elf32_bfd_final_link \
4331	bfd_elf_gc_common_final_link
4332#define elf_backend_hide_symbol			elf_cris_hide_symbol
4333#define elf_backend_reloc_type_class		elf_cris_reloc_type_class
4334
4335#define elf_backend_want_got_plt	1
4336#define elf_backend_plt_readonly	1
4337#define elf_backend_want_plt_sym	0
4338#define elf_backend_got_header_size	12
4339#define elf_backend_got_elt_size elf_cris_got_elt_size
4340#define elf_backend_dtrel_excludes_plt	1
4341#define elf_backend_want_dynrelro	1
4342
4343/* Later, we my want to optimize RELA entries into REL entries for dynamic
4344   linking and libraries (if it's a win of any significance).  Until then,
4345   take the easy route.  */
4346#define elf_backend_may_use_rel_p 0
4347#define elf_backend_may_use_rela_p 1
4348#define elf_backend_rela_normal		1
4349
4350#include "elf32-target.h"
4351
4352#undef TARGET_LITTLE_SYM
4353#undef TARGET_LITTLE_NAME
4354#undef elf_symbol_leading_char
4355
4356#define TARGET_LITTLE_SYM cris_elf32_us_vec
4357#define TARGET_LITTLE_NAME "elf32-us-cris"
4358#define elf_symbol_leading_char '_'
4359#undef elf32_bed
4360#define elf32_bed elf32_us_cris_bed
4361
4362#include "elf32-target.h"
4363