xref: /netbsd-src/external/gpl3/binutils.old/dist/bfd/elfnn-riscv.c (revision 901e7e84758515fbf39dfc064cb0b45ab146d8b0)
1 /* RISC-V-specific support for NN-bit ELF.
2    Copyright (C) 2011-2020 Free Software Foundation, Inc.
3 
4    Contributed by Andrew Waterman (andrew@sifive.com).
5    Based on TILE-Gx and MIPS targets.
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; see the file COPYING3. If not,
21    see <http://www.gnu.org/licenses/>.  */
22 
23 /* This file handles RISC-V ELF targets.  */
24 
25 #include "sysdep.h"
26 #include "bfd.h"
27 #include "libbfd.h"
28 #include "bfdlink.h"
29 #include "genlink.h"
30 #include "elf-bfd.h"
31 #include "elfxx-riscv.h"
32 #include "elf/riscv.h"
33 #include "opcode/riscv.h"
34 
35 /* Internal relocations used exclusively by the relaxation pass.  */
36 #define R_RISCV_DELETE (R_RISCV_max + 1)
37 
38 #define ARCH_SIZE NN
39 
40 #define MINUS_ONE ((bfd_vma)0 - 1)
41 
42 #define RISCV_ELF_LOG_WORD_BYTES (ARCH_SIZE == 32 ? 2 : 3)
43 
44 #define RISCV_ELF_WORD_BYTES (1 << RISCV_ELF_LOG_WORD_BYTES)
45 
46 /* The name of the dynamic interpreter.  This is put in the .interp
47    section.  */
48 
49 #define ELF64_DYNAMIC_INTERPRETER "/lib/ld.so.1"
50 #define ELF32_DYNAMIC_INTERPRETER "/lib32/ld.so.1"
51 
52 #define ELF_ARCH			bfd_arch_riscv
53 #define ELF_TARGET_ID			RISCV_ELF_DATA
54 #define ELF_MACHINE_CODE		EM_RISCV
55 #define ELF_MAXPAGESIZE			0x1000
56 #define ELF_COMMONPAGESIZE		0x1000
57 
58 /* RISC-V ELF linker hash entry.  */
59 
60 struct riscv_elf_link_hash_entry
61 {
62   struct elf_link_hash_entry elf;
63 
64   /* Track dynamic relocs copied for this symbol.  */
65   struct elf_dyn_relocs *dyn_relocs;
66 
67 #define GOT_UNKNOWN     0
68 #define GOT_NORMAL      1
69 #define GOT_TLS_GD      2
70 #define GOT_TLS_IE      4
71 #define GOT_TLS_LE      8
72   char tls_type;
73 };
74 
75 #define riscv_elf_hash_entry(ent) \
76   ((struct riscv_elf_link_hash_entry *)(ent))
77 
78 struct _bfd_riscv_elf_obj_tdata
79 {
80   struct elf_obj_tdata root;
81 
82   /* tls_type for each local got entry.  */
83   char *local_got_tls_type;
84 };
85 
86 #define _bfd_riscv_elf_tdata(abfd) \
87   ((struct _bfd_riscv_elf_obj_tdata *) (abfd)->tdata.any)
88 
89 #define _bfd_riscv_elf_local_got_tls_type(abfd) \
90   (_bfd_riscv_elf_tdata (abfd)->local_got_tls_type)
91 
92 #define _bfd_riscv_elf_tls_type(abfd, h, symndx)		\
93   (*((h) != NULL ? &riscv_elf_hash_entry (h)->tls_type		\
94      : &_bfd_riscv_elf_local_got_tls_type (abfd) [symndx]))
95 
96 #define is_riscv_elf(bfd)				\
97   (bfd_get_flavour (bfd) == bfd_target_elf_flavour	\
98    && elf_tdata (bfd) != NULL				\
99    && elf_object_id (bfd) == RISCV_ELF_DATA)
100 
101 #include "elf/common.h"
102 #include "elf/internal.h"
103 
104 struct riscv_elf_link_hash_table
105 {
106   struct elf_link_hash_table elf;
107 
108   /* Short-cuts to get to dynamic linker sections.  */
109   asection *sdyntdata;
110 
111   /* Small local sym to section mapping cache.  */
112   struct sym_cache sym_cache;
113 
114   /* The max alignment of output sections.  */
115   bfd_vma max_alignment;
116 };
117 
118 
119 /* Get the RISC-V ELF linker hash table from a link_info structure.  */
120 #define riscv_elf_hash_table(p) \
121   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
122   == RISCV_ELF_DATA ? ((struct riscv_elf_link_hash_table *) ((p)->hash)) : NULL)
123 
124 static bfd_boolean
125 riscv_info_to_howto_rela (bfd *abfd,
126 			  arelent *cache_ptr,
127 			  Elf_Internal_Rela *dst)
128 {
129   cache_ptr->howto = riscv_elf_rtype_to_howto (abfd, ELFNN_R_TYPE (dst->r_info));
130   return cache_ptr->howto != NULL;
131 }
132 
133 static void
134 riscv_elf_append_rela (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
135 {
136   const struct elf_backend_data *bed;
137   bfd_byte *loc;
138 
139   bed = get_elf_backend_data (abfd);
140   loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rela);
141   bed->s->swap_reloca_out (abfd, rel, loc);
142 }
143 
144 /* PLT/GOT stuff.  */
145 
146 #define PLT_HEADER_INSNS 8
147 #define PLT_ENTRY_INSNS 4
148 #define PLT_HEADER_SIZE (PLT_HEADER_INSNS * 4)
149 #define PLT_ENTRY_SIZE (PLT_ENTRY_INSNS * 4)
150 
151 #define GOT_ENTRY_SIZE RISCV_ELF_WORD_BYTES
152 
153 #define GOTPLT_HEADER_SIZE (2 * GOT_ENTRY_SIZE)
154 
155 #define sec_addr(sec) ((sec)->output_section->vma + (sec)->output_offset)
156 
157 static bfd_vma
158 riscv_elf_got_plt_val (bfd_vma plt_index, struct bfd_link_info *info)
159 {
160   return sec_addr (riscv_elf_hash_table (info)->elf.sgotplt)
161 	 + GOTPLT_HEADER_SIZE + (plt_index * GOT_ENTRY_SIZE);
162 }
163 
164 #if ARCH_SIZE == 32
165 # define MATCH_LREG MATCH_LW
166 #else
167 # define MATCH_LREG MATCH_LD
168 #endif
169 
170 /* Generate a PLT header.  */
171 
172 static bfd_boolean
173 riscv_make_plt_header (bfd *output_bfd, bfd_vma gotplt_addr, bfd_vma addr,
174 		       uint32_t *entry)
175 {
176   bfd_vma gotplt_offset_high = RISCV_PCREL_HIGH_PART (gotplt_addr, addr);
177   bfd_vma gotplt_offset_low = RISCV_PCREL_LOW_PART (gotplt_addr, addr);
178 
179   /* RVE has no t3 register, so this won't work, and is not supported.  */
180   if (elf_elfheader (output_bfd)->e_flags & EF_RISCV_RVE)
181     {
182       _bfd_error_handler (_("%pB: warning: RVE PLT generation not supported"),
183 			  output_bfd);
184       return FALSE;
185     }
186 
187   /* auipc  t2, %hi(.got.plt)
188      sub    t1, t1, t3		     # shifted .got.plt offset + hdr size + 12
189      l[w|d] t3, %lo(.got.plt)(t2)    # _dl_runtime_resolve
190      addi   t1, t1, -(hdr size + 12) # shifted .got.plt offset
191      addi   t0, t2, %lo(.got.plt)    # &.got.plt
192      srli   t1, t1, log2(16/PTRSIZE) # .got.plt offset
193      l[w|d] t0, PTRSIZE(t0)	     # link map
194      jr	    t3 */
195 
196   entry[0] = RISCV_UTYPE (AUIPC, X_T2, gotplt_offset_high);
197   entry[1] = RISCV_RTYPE (SUB, X_T1, X_T1, X_T3);
198   entry[2] = RISCV_ITYPE (LREG, X_T3, X_T2, gotplt_offset_low);
199   entry[3] = RISCV_ITYPE (ADDI, X_T1, X_T1, -(PLT_HEADER_SIZE + 12));
200   entry[4] = RISCV_ITYPE (ADDI, X_T0, X_T2, gotplt_offset_low);
201   entry[5] = RISCV_ITYPE (SRLI, X_T1, X_T1, 4 - RISCV_ELF_LOG_WORD_BYTES);
202   entry[6] = RISCV_ITYPE (LREG, X_T0, X_T0, RISCV_ELF_WORD_BYTES);
203   entry[7] = RISCV_ITYPE (JALR, 0, X_T3, 0);
204 
205   return TRUE;
206 }
207 
208 /* Generate a PLT entry.  */
209 
210 static bfd_boolean
211 riscv_make_plt_entry (bfd *output_bfd, bfd_vma got, bfd_vma addr,
212 		      uint32_t *entry)
213 {
214   /* RVE has no t3 register, so this won't work, and is not supported.  */
215   if (elf_elfheader (output_bfd)->e_flags & EF_RISCV_RVE)
216     {
217       _bfd_error_handler (_("%pB: warning: RVE PLT generation not supported"),
218 			  output_bfd);
219       return FALSE;
220     }
221 
222   /* auipc  t3, %hi(.got.plt entry)
223      l[w|d] t3, %lo(.got.plt entry)(t3)
224      jalr   t1, t3
225      nop */
226 
227   entry[0] = RISCV_UTYPE (AUIPC, X_T3, RISCV_PCREL_HIGH_PART (got, addr));
228   entry[1] = RISCV_ITYPE (LREG,  X_T3, X_T3, RISCV_PCREL_LOW_PART (got, addr));
229   entry[2] = RISCV_ITYPE (JALR, X_T1, X_T3, 0);
230   entry[3] = RISCV_NOP;
231 
232   return TRUE;
233 }
234 
235 /* Create an entry in an RISC-V ELF linker hash table.  */
236 
237 static struct bfd_hash_entry *
238 link_hash_newfunc (struct bfd_hash_entry *entry,
239 		   struct bfd_hash_table *table, const char *string)
240 {
241   /* Allocate the structure if it has not already been allocated by a
242      subclass.  */
243   if (entry == NULL)
244     {
245       entry =
246 	bfd_hash_allocate (table,
247 			   sizeof (struct riscv_elf_link_hash_entry));
248       if (entry == NULL)
249 	return entry;
250     }
251 
252   /* Call the allocation method of the superclass.  */
253   entry = _bfd_elf_link_hash_newfunc (entry, table, string);
254   if (entry != NULL)
255     {
256       struct riscv_elf_link_hash_entry *eh;
257 
258       eh = (struct riscv_elf_link_hash_entry *) entry;
259       eh->dyn_relocs = NULL;
260       eh->tls_type = GOT_UNKNOWN;
261     }
262 
263   return entry;
264 }
265 
266 /* Create a RISC-V ELF linker hash table.  */
267 
268 static struct bfd_link_hash_table *
269 riscv_elf_link_hash_table_create (bfd *abfd)
270 {
271   struct riscv_elf_link_hash_table *ret;
272   bfd_size_type amt = sizeof (struct riscv_elf_link_hash_table);
273 
274   ret = (struct riscv_elf_link_hash_table *) bfd_zmalloc (amt);
275   if (ret == NULL)
276     return NULL;
277 
278   if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd, link_hash_newfunc,
279 				      sizeof (struct riscv_elf_link_hash_entry),
280 				      RISCV_ELF_DATA))
281     {
282       free (ret);
283       return NULL;
284     }
285 
286   ret->max_alignment = (bfd_vma) -1;
287   return &ret->elf.root;
288 }
289 
290 /* Create the .got section.  */
291 
292 static bfd_boolean
293 riscv_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
294 {
295   flagword flags;
296   asection *s, *s_got;
297   struct elf_link_hash_entry *h;
298   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
299   struct elf_link_hash_table *htab = elf_hash_table (info);
300 
301   /* This function may be called more than once.  */
302   if (htab->sgot != NULL)
303     return TRUE;
304 
305   flags = bed->dynamic_sec_flags;
306 
307   s = bfd_make_section_anyway_with_flags (abfd,
308 					  (bed->rela_plts_and_copies_p
309 					   ? ".rela.got" : ".rel.got"),
310 					  (bed->dynamic_sec_flags
311 					   | SEC_READONLY));
312   if (s == NULL
313       || !bfd_set_section_alignment (s, bed->s->log_file_align))
314     return FALSE;
315   htab->srelgot = s;
316 
317   s = s_got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
318   if (s == NULL
319       || !bfd_set_section_alignment (s, bed->s->log_file_align))
320     return FALSE;
321   htab->sgot = s;
322 
323   /* The first bit of the global offset table is the header.  */
324   s->size += bed->got_header_size;
325 
326   if (bed->want_got_plt)
327     {
328       s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
329       if (s == NULL
330 	  || !bfd_set_section_alignment (s, bed->s->log_file_align))
331 	return FALSE;
332       htab->sgotplt = s;
333 
334       /* Reserve room for the header.  */
335       s->size += GOTPLT_HEADER_SIZE;
336     }
337 
338   if (bed->want_got_sym)
339     {
340       /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
341 	 section.  We don't do this in the linker script because we don't want
342 	 to define the symbol if we are not creating a global offset
343 	 table.  */
344       h = _bfd_elf_define_linkage_sym (abfd, info, s_got,
345 				       "_GLOBAL_OFFSET_TABLE_");
346       elf_hash_table (info)->hgot = h;
347       if (h == NULL)
348 	return FALSE;
349     }
350 
351   return TRUE;
352 }
353 
354 /* Create .plt, .rela.plt, .got, .got.plt, .rela.got, .dynbss, and
355    .rela.bss sections in DYNOBJ, and set up shortcuts to them in our
356    hash table.  */
357 
358 static bfd_boolean
359 riscv_elf_create_dynamic_sections (bfd *dynobj,
360 				   struct bfd_link_info *info)
361 {
362   struct riscv_elf_link_hash_table *htab;
363 
364   htab = riscv_elf_hash_table (info);
365   BFD_ASSERT (htab != NULL);
366 
367   if (!riscv_elf_create_got_section (dynobj, info))
368     return FALSE;
369 
370   if (!_bfd_elf_create_dynamic_sections (dynobj, info))
371     return FALSE;
372 
373   if (!bfd_link_pic (info))
374     {
375       /* Technically, this section doesn't have contents.  It is used as the
376 	 target of TLS copy relocs, to copy TLS data from shared libraries into
377 	 the executable.  However, if we don't mark it as loadable, then it
378 	 matches the IS_TBSS test in ldlang.c, and there is no run-time address
379 	 space allocated for it even though it has SEC_ALLOC.  That test is
380 	 correct for .tbss, but not correct for this section.  There is also
381 	 a second problem that having a section with no contents can only work
382 	 if it comes after all sections with contents in the same segment,
383 	 but the linker script does not guarantee that.  This is just mixed in
384 	 with other .tdata.* sections.  We can fix both problems by lying and
385 	 saying that there are contents.  This section is expected to be small
386 	 so this should not cause a significant extra program startup cost.  */
387       htab->sdyntdata =
388 	bfd_make_section_anyway_with_flags (dynobj, ".tdata.dyn",
389 					    (SEC_ALLOC | SEC_THREAD_LOCAL
390 					     | SEC_LOAD | SEC_DATA
391 					     | SEC_HAS_CONTENTS
392 					     | SEC_LINKER_CREATED));
393     }
394 
395   if (!htab->elf.splt || !htab->elf.srelplt || !htab->elf.sdynbss
396       || (!bfd_link_pic (info) && (!htab->elf.srelbss || !htab->sdyntdata)))
397     abort ();
398 
399   return TRUE;
400 }
401 
402 /* Copy the extra info we tack onto an elf_link_hash_entry.  */
403 
404 static void
405 riscv_elf_copy_indirect_symbol (struct bfd_link_info *info,
406 				struct elf_link_hash_entry *dir,
407 				struct elf_link_hash_entry *ind)
408 {
409   struct riscv_elf_link_hash_entry *edir, *eind;
410 
411   edir = (struct riscv_elf_link_hash_entry *) dir;
412   eind = (struct riscv_elf_link_hash_entry *) ind;
413 
414   if (eind->dyn_relocs != NULL)
415     {
416       if (edir->dyn_relocs != NULL)
417 	{
418 	  struct elf_dyn_relocs **pp;
419 	  struct elf_dyn_relocs *p;
420 
421 	  /* Add reloc counts against the indirect sym to the direct sym
422 	     list.  Merge any entries against the same section.  */
423 	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
424 	    {
425 	      struct elf_dyn_relocs *q;
426 
427 	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
428 		if (q->sec == p->sec)
429 		  {
430 		    q->pc_count += p->pc_count;
431 		    q->count += p->count;
432 		    *pp = p->next;
433 		    break;
434 		  }
435 	      if (q == NULL)
436 		pp = &p->next;
437 	    }
438 	  *pp = edir->dyn_relocs;
439 	}
440 
441       edir->dyn_relocs = eind->dyn_relocs;
442       eind->dyn_relocs = NULL;
443     }
444 
445   if (ind->root.type == bfd_link_hash_indirect
446       && dir->got.refcount <= 0)
447     {
448       edir->tls_type = eind->tls_type;
449       eind->tls_type = GOT_UNKNOWN;
450     }
451   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
452 }
453 
454 static bfd_boolean
455 riscv_elf_record_tls_type (bfd *abfd, struct elf_link_hash_entry *h,
456 			   unsigned long symndx, char tls_type)
457 {
458   char *new_tls_type = &_bfd_riscv_elf_tls_type (abfd, h, symndx);
459 
460   *new_tls_type |= tls_type;
461   if ((*new_tls_type & GOT_NORMAL) && (*new_tls_type & ~GOT_NORMAL))
462     {
463       (*_bfd_error_handler)
464 	(_("%pB: `%s' accessed both as normal and thread local symbol"),
465 	 abfd, h ? h->root.root.string : "<local>");
466       return FALSE;
467     }
468   return TRUE;
469 }
470 
471 static bfd_boolean
472 riscv_elf_record_got_reference (bfd *abfd, struct bfd_link_info *info,
473 				struct elf_link_hash_entry *h, long symndx)
474 {
475   struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (info);
476   Elf_Internal_Shdr *symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
477 
478   if (htab->elf.sgot == NULL)
479     {
480       if (!riscv_elf_create_got_section (htab->elf.dynobj, info))
481 	return FALSE;
482     }
483 
484   if (h != NULL)
485     {
486       h->got.refcount += 1;
487       return TRUE;
488     }
489 
490   /* This is a global offset table entry for a local symbol.  */
491   if (elf_local_got_refcounts (abfd) == NULL)
492     {
493       bfd_size_type size = symtab_hdr->sh_info * (sizeof (bfd_vma) + 1);
494       if (!(elf_local_got_refcounts (abfd) = bfd_zalloc (abfd, size)))
495 	return FALSE;
496       _bfd_riscv_elf_local_got_tls_type (abfd)
497 	= (char *) (elf_local_got_refcounts (abfd) + symtab_hdr->sh_info);
498     }
499   elf_local_got_refcounts (abfd) [symndx] += 1;
500 
501   return TRUE;
502 }
503 
504 static bfd_boolean
505 bad_static_reloc (bfd *abfd, unsigned r_type, struct elf_link_hash_entry *h)
506 {
507   reloc_howto_type * r = riscv_elf_rtype_to_howto (abfd, r_type);
508 
509   (*_bfd_error_handler)
510     (_("%pB: relocation %s against `%s' can not be used when making a shared "
511        "object; recompile with -fPIC"),
512      abfd, r ? r->name : _("<unknown>"),
513      h != NULL ? h->root.root.string : "a local symbol");
514   bfd_set_error (bfd_error_bad_value);
515   return FALSE;
516 }
517 /* Look through the relocs for a section during the first phase, and
518    allocate space in the global offset table or procedure linkage
519    table.  */
520 
521 static bfd_boolean
522 riscv_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
523 			asection *sec, const Elf_Internal_Rela *relocs)
524 {
525   struct riscv_elf_link_hash_table *htab;
526   Elf_Internal_Shdr *symtab_hdr;
527   struct elf_link_hash_entry **sym_hashes;
528   const Elf_Internal_Rela *rel;
529   asection *sreloc = NULL;
530 
531   if (bfd_link_relocatable (info))
532     return TRUE;
533 
534   htab = riscv_elf_hash_table (info);
535   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
536   sym_hashes = elf_sym_hashes (abfd);
537 
538   if (htab->elf.dynobj == NULL)
539     htab->elf.dynobj = abfd;
540 
541   for (rel = relocs; rel < relocs + sec->reloc_count; rel++)
542     {
543       unsigned int r_type;
544       unsigned int r_symndx;
545       struct elf_link_hash_entry *h;
546 
547       r_symndx = ELFNN_R_SYM (rel->r_info);
548       r_type = ELFNN_R_TYPE (rel->r_info);
549 
550       if (r_symndx >= NUM_SHDR_ENTRIES (symtab_hdr))
551 	{
552 	  (*_bfd_error_handler) (_("%pB: bad symbol index: %d"),
553 				 abfd, r_symndx);
554 	  return FALSE;
555 	}
556 
557       if (r_symndx < symtab_hdr->sh_info)
558 	h = NULL;
559       else
560 	{
561 	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
562 	  while (h->root.type == bfd_link_hash_indirect
563 		 || h->root.type == bfd_link_hash_warning)
564 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
565 	}
566 
567       switch (r_type)
568 	{
569 	case R_RISCV_TLS_GD_HI20:
570 	  if (!riscv_elf_record_got_reference (abfd, info, h, r_symndx)
571 	      || !riscv_elf_record_tls_type (abfd, h, r_symndx, GOT_TLS_GD))
572 	    return FALSE;
573 	  break;
574 
575 	case R_RISCV_TLS_GOT_HI20:
576 	  if (bfd_link_pic (info))
577 	    info->flags |= DF_STATIC_TLS;
578 	  if (!riscv_elf_record_got_reference (abfd, info, h, r_symndx)
579 	      || !riscv_elf_record_tls_type (abfd, h, r_symndx, GOT_TLS_IE))
580 	    return FALSE;
581 	  break;
582 
583 	case R_RISCV_GOT_HI20:
584 	  if (!riscv_elf_record_got_reference (abfd, info, h, r_symndx)
585 	      || !riscv_elf_record_tls_type (abfd, h, r_symndx, GOT_NORMAL))
586 	    return FALSE;
587 	  break;
588 
589 	case R_RISCV_CALL_PLT:
590 	  /* This symbol requires a procedure linkage table entry.  We
591 	     actually build the entry in adjust_dynamic_symbol,
592 	     because this might be a case of linking PIC code without
593 	     linking in any dynamic objects, in which case we don't
594 	     need to generate a procedure linkage table after all.  */
595 
596 	  if (h != NULL)
597 	    {
598 	      h->needs_plt = 1;
599 	      h->plt.refcount += 1;
600 	    }
601 	  break;
602 
603 	case R_RISCV_CALL:
604 	case R_RISCV_JAL:
605 	case R_RISCV_BRANCH:
606 	case R_RISCV_RVC_BRANCH:
607 	case R_RISCV_RVC_JUMP:
608 	case R_RISCV_PCREL_HI20:
609 	  /* In shared libraries, these relocs are known to bind locally.  */
610 	  if (bfd_link_pic (info))
611 	    break;
612 	  goto static_reloc;
613 
614 	case R_RISCV_TPREL_HI20:
615 	  if (!bfd_link_executable (info))
616 	    return bad_static_reloc (abfd, r_type, h);
617 	  if (h != NULL)
618 	    riscv_elf_record_tls_type (abfd, h, r_symndx, GOT_TLS_LE);
619 	  goto static_reloc;
620 
621 	case R_RISCV_HI20:
622 	  if (bfd_link_pic (info))
623 	    return bad_static_reloc (abfd, r_type, h);
624 	  /* Fall through.  */
625 
626 	case R_RISCV_COPY:
627 	case R_RISCV_JUMP_SLOT:
628 	case R_RISCV_RELATIVE:
629 	case R_RISCV_64:
630 	case R_RISCV_32:
631 	  /* Fall through.  */
632 
633 	static_reloc:
634 	  /* This reloc might not bind locally.  */
635 	  if (h != NULL)
636 	    h->non_got_ref = 1;
637 
638 	  if (h != NULL && !bfd_link_pic (info))
639 	    {
640 	      /* We may need a .plt entry if the function this reloc
641 		 refers to is in a shared lib.  */
642 	      h->plt.refcount += 1;
643 	    }
644 
645 	  /* If we are creating a shared library, and this is a reloc
646 	     against a global symbol, or a non PC relative reloc
647 	     against a local symbol, then we need to copy the reloc
648 	     into the shared library.  However, if we are linking with
649 	     -Bsymbolic, we do not need to copy a reloc against a
650 	     global symbol which is defined in an object we are
651 	     including in the link (i.e., DEF_REGULAR is set).  At
652 	     this point we have not seen all the input files, so it is
653 	     possible that DEF_REGULAR is not set now but will be set
654 	     later (it is never cleared).  In case of a weak definition,
655 	     DEF_REGULAR may be cleared later by a strong definition in
656 	     a shared library.  We account for that possibility below by
657 	     storing information in the relocs_copied field of the hash
658 	     table entry.  A similar situation occurs when creating
659 	     shared libraries and symbol visibility changes render the
660 	     symbol local.
661 
662 	     If on the other hand, we are creating an executable, we
663 	     may need to keep relocations for symbols satisfied by a
664 	     dynamic library if we manage to avoid copy relocs for the
665 	     symbol.  */
666 	  reloc_howto_type * r = riscv_elf_rtype_to_howto (abfd, r_type);
667 
668 	  if ((bfd_link_pic (info)
669 	       && (sec->flags & SEC_ALLOC) != 0
670 	       && ((r != NULL && ! r->pc_relative)
671 		   || (h != NULL
672 		       && (! info->symbolic
673 			   || h->root.type == bfd_link_hash_defweak
674 			   || !h->def_regular))))
675 	      || (!bfd_link_pic (info)
676 		  && (sec->flags & SEC_ALLOC) != 0
677 		  && h != NULL
678 		  && (h->root.type == bfd_link_hash_defweak
679 		      || !h->def_regular)))
680 	    {
681 	      struct elf_dyn_relocs *p;
682 	      struct elf_dyn_relocs **head;
683 
684 	      /* When creating a shared object, we must copy these
685 		 relocs into the output file.  We create a reloc
686 		 section in dynobj and make room for the reloc.  */
687 	      if (sreloc == NULL)
688 		{
689 		  sreloc = _bfd_elf_make_dynamic_reloc_section
690 		    (sec, htab->elf.dynobj, RISCV_ELF_LOG_WORD_BYTES,
691 		    abfd, /*rela?*/ TRUE);
692 
693 		  if (sreloc == NULL)
694 		    return FALSE;
695 		}
696 
697 	      /* If this is a global symbol, we count the number of
698 		 relocations we need for this symbol.  */
699 	      if (h != NULL)
700 		head = &((struct riscv_elf_link_hash_entry *) h)->dyn_relocs;
701 	      else
702 		{
703 		  /* Track dynamic relocs needed for local syms too.
704 		     We really need local syms available to do this
705 		     easily.  Oh well.  */
706 
707 		  asection *s;
708 		  void *vpp;
709 		  Elf_Internal_Sym *isym;
710 
711 		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
712 						abfd, r_symndx);
713 		  if (isym == NULL)
714 		    return FALSE;
715 
716 		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
717 		  if (s == NULL)
718 		    s = sec;
719 
720 		  vpp = &elf_section_data (s)->local_dynrel;
721 		  head = (struct elf_dyn_relocs **) vpp;
722 		}
723 
724 	      p = *head;
725 	      if (p == NULL || p->sec != sec)
726 		{
727 		  bfd_size_type amt = sizeof *p;
728 		  p = ((struct elf_dyn_relocs *)
729 		       bfd_alloc (htab->elf.dynobj, amt));
730 		  if (p == NULL)
731 		    return FALSE;
732 		  p->next = *head;
733 		  *head = p;
734 		  p->sec = sec;
735 		  p->count = 0;
736 		  p->pc_count = 0;
737 		}
738 
739 	      p->count += 1;
740 	      p->pc_count += r == NULL ? 0 : r->pc_relative;
741 	    }
742 
743 	  break;
744 
745 	case R_RISCV_GNU_VTINHERIT:
746 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
747 	    return FALSE;
748 	  break;
749 
750 	case R_RISCV_GNU_VTENTRY:
751 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
752 	    return FALSE;
753 	  break;
754 
755 	default:
756 	  break;
757 	}
758     }
759 
760   return TRUE;
761 }
762 
763 static asection *
764 riscv_elf_gc_mark_hook (asection *sec,
765 			struct bfd_link_info *info,
766 			Elf_Internal_Rela *rel,
767 			struct elf_link_hash_entry *h,
768 			Elf_Internal_Sym *sym)
769 {
770   if (h != NULL)
771     switch (ELFNN_R_TYPE (rel->r_info))
772       {
773       case R_RISCV_GNU_VTINHERIT:
774       case R_RISCV_GNU_VTENTRY:
775 	return NULL;
776       }
777 
778   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
779 }
780 
781 /* Find dynamic relocs for H that apply to read-only sections.  */
782 
783 static asection *
784 readonly_dynrelocs (struct elf_link_hash_entry *h)
785 {
786   struct elf_dyn_relocs *p;
787 
788   for (p = riscv_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next)
789     {
790       asection *s = p->sec->output_section;
791 
792       if (s != NULL && (s->flags & SEC_READONLY) != 0)
793 	return p->sec;
794     }
795   return NULL;
796 }
797 
798 /* Adjust a symbol defined by a dynamic object and referenced by a
799    regular object.  The current definition is in some section of the
800    dynamic object, but we're not including those sections.  We have to
801    change the definition to something the rest of the link can
802    understand.  */
803 
804 static bfd_boolean
805 riscv_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
806 				 struct elf_link_hash_entry *h)
807 {
808   struct riscv_elf_link_hash_table *htab;
809   struct riscv_elf_link_hash_entry * eh;
810   bfd *dynobj;
811   asection *s, *srel;
812 
813   htab = riscv_elf_hash_table (info);
814   BFD_ASSERT (htab != NULL);
815 
816   dynobj = htab->elf.dynobj;
817 
818   /* Make sure we know what is going on here.  */
819   BFD_ASSERT (dynobj != NULL
820 	      && (h->needs_plt
821 		  || h->type == STT_GNU_IFUNC
822 		  || h->is_weakalias
823 		  || (h->def_dynamic
824 		      && h->ref_regular
825 		      && !h->def_regular)));
826 
827   /* If this is a function, put it in the procedure linkage table.  We
828      will fill in the contents of the procedure linkage table later
829      (although we could actually do it here).  */
830   if (h->type == STT_FUNC || h->type == STT_GNU_IFUNC || h->needs_plt)
831     {
832       if (h->plt.refcount <= 0
833 	  || SYMBOL_CALLS_LOCAL (info, h)
834 	  || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
835 	      && h->root.type == bfd_link_hash_undefweak))
836 	{
837 	  /* This case can occur if we saw a R_RISCV_CALL_PLT reloc in an
838 	     input file, but the symbol was never referred to by a dynamic
839 	     object, or if all references were garbage collected.  In such
840 	     a case, we don't actually need to build a PLT entry.  */
841 	  h->plt.offset = (bfd_vma) -1;
842 	  h->needs_plt = 0;
843 	}
844 
845       return TRUE;
846     }
847   else
848     h->plt.offset = (bfd_vma) -1;
849 
850   /* If this is a weak symbol, and there is a real definition, the
851      processor independent code will have arranged for us to see the
852      real definition first, and we can just use the same value.  */
853   if (h->is_weakalias)
854     {
855       struct elf_link_hash_entry *def = weakdef (h);
856       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
857       h->root.u.def.section = def->root.u.def.section;
858       h->root.u.def.value = def->root.u.def.value;
859       return TRUE;
860     }
861 
862   /* This is a reference to a symbol defined by a dynamic object which
863      is not a function.  */
864 
865   /* If we are creating a shared library, we must presume that the
866      only references to the symbol are via the global offset table.
867      For such cases we need not do anything here; the relocations will
868      be handled correctly by relocate_section.  */
869   if (bfd_link_pic (info))
870     return TRUE;
871 
872   /* If there are no references to this symbol that do not use the
873      GOT, we don't need to generate a copy reloc.  */
874   if (!h->non_got_ref)
875     return TRUE;
876 
877   /* If -z nocopyreloc was given, we won't generate them either.  */
878   if (info->nocopyreloc)
879     {
880       h->non_got_ref = 0;
881       return TRUE;
882     }
883 
884   /* If we don't find any dynamic relocs in read-only sections, then
885      we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
886   if (!readonly_dynrelocs (h))
887     {
888       h->non_got_ref = 0;
889       return TRUE;
890     }
891 
892   /* We must allocate the symbol in our .dynbss section, which will
893      become part of the .bss section of the executable.  There will be
894      an entry for this symbol in the .dynsym section.  The dynamic
895      object will contain position independent code, so all references
896      from the dynamic object to this symbol will go through the global
897      offset table.  The dynamic linker will use the .dynsym entry to
898      determine the address it must put in the global offset table, so
899      both the dynamic object and the regular object will refer to the
900      same memory location for the variable.  */
901 
902   /* We must generate a R_RISCV_COPY reloc to tell the dynamic linker
903      to copy the initial value out of the dynamic object and into the
904      runtime process image.  We need to remember the offset into the
905      .rel.bss section we are going to use.  */
906   eh = (struct riscv_elf_link_hash_entry *) h;
907   if (eh->tls_type & ~GOT_NORMAL)
908     {
909       s = htab->sdyntdata;
910       srel = htab->elf.srelbss;
911     }
912   else if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
913     {
914       s = htab->elf.sdynrelro;
915       srel = htab->elf.sreldynrelro;
916     }
917   else
918     {
919       s = htab->elf.sdynbss;
920       srel = htab->elf.srelbss;
921     }
922   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
923     {
924       srel->size += sizeof (ElfNN_External_Rela);
925       h->needs_copy = 1;
926     }
927 
928   return _bfd_elf_adjust_dynamic_copy (info, h, s);
929 }
930 
931 /* Allocate space in .plt, .got and associated reloc sections for
932    dynamic relocs.  */
933 
934 static bfd_boolean
935 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
936 {
937   struct bfd_link_info *info;
938   struct riscv_elf_link_hash_table *htab;
939   struct riscv_elf_link_hash_entry *eh;
940   struct elf_dyn_relocs *p;
941 
942   if (h->root.type == bfd_link_hash_indirect)
943     return TRUE;
944 
945   info = (struct bfd_link_info *) inf;
946   htab = riscv_elf_hash_table (info);
947   BFD_ASSERT (htab != NULL);
948 
949   if (htab->elf.dynamic_sections_created
950       && h->plt.refcount > 0)
951     {
952       /* Make sure this symbol is output as a dynamic symbol.
953 	 Undefined weak syms won't yet be marked as dynamic.  */
954       if (h->dynindx == -1
955 	  && !h->forced_local)
956 	{
957 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
958 	    return FALSE;
959 	}
960 
961       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
962 	{
963 	  asection *s = htab->elf.splt;
964 
965 	  if (s->size == 0)
966 	    s->size = PLT_HEADER_SIZE;
967 
968 	  h->plt.offset = s->size;
969 
970 	  /* Make room for this entry.  */
971 	  s->size += PLT_ENTRY_SIZE;
972 
973 	  /* We also need to make an entry in the .got.plt section.  */
974 	  htab->elf.sgotplt->size += GOT_ENTRY_SIZE;
975 
976 	  /* We also need to make an entry in the .rela.plt section.  */
977 	  htab->elf.srelplt->size += sizeof (ElfNN_External_Rela);
978 
979 	  /* If this symbol is not defined in a regular file, and we are
980 	     not generating a shared library, then set the symbol to this
981 	     location in the .plt.  This is required to make function
982 	     pointers compare as equal between the normal executable and
983 	     the shared library.  */
984 	  if (! bfd_link_pic (info)
985 	      && !h->def_regular)
986 	    {
987 	      h->root.u.def.section = s;
988 	      h->root.u.def.value = h->plt.offset;
989 	    }
990 	}
991       else
992 	{
993 	  h->plt.offset = (bfd_vma) -1;
994 	  h->needs_plt = 0;
995 	}
996     }
997   else
998     {
999       h->plt.offset = (bfd_vma) -1;
1000       h->needs_plt = 0;
1001     }
1002 
1003   if (h->got.refcount > 0)
1004     {
1005       asection *s;
1006       bfd_boolean dyn;
1007       int tls_type = riscv_elf_hash_entry (h)->tls_type;
1008 
1009       /* Make sure this symbol is output as a dynamic symbol.
1010 	 Undefined weak syms won't yet be marked as dynamic.  */
1011       if (h->dynindx == -1
1012 	  && !h->forced_local)
1013 	{
1014 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
1015 	    return FALSE;
1016 	}
1017 
1018       s = htab->elf.sgot;
1019       h->got.offset = s->size;
1020       dyn = htab->elf.dynamic_sections_created;
1021       if (tls_type & (GOT_TLS_GD | GOT_TLS_IE))
1022 	{
1023 	  /* TLS_GD needs two dynamic relocs and two GOT slots.  */
1024 	  if (tls_type & GOT_TLS_GD)
1025 	    {
1026 	      s->size += 2 * RISCV_ELF_WORD_BYTES;
1027 	      htab->elf.srelgot->size += 2 * sizeof (ElfNN_External_Rela);
1028 	    }
1029 
1030 	  /* TLS_IE needs one dynamic reloc and one GOT slot.  */
1031 	  if (tls_type & GOT_TLS_IE)
1032 	    {
1033 	      s->size += RISCV_ELF_WORD_BYTES;
1034 	      htab->elf.srelgot->size += sizeof (ElfNN_External_Rela);
1035 	    }
1036 	}
1037       else
1038 	{
1039 	  s->size += RISCV_ELF_WORD_BYTES;
1040 	  if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
1041 	      && ! UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
1042 	    htab->elf.srelgot->size += sizeof (ElfNN_External_Rela);
1043 	}
1044     }
1045   else
1046     h->got.offset = (bfd_vma) -1;
1047 
1048   eh = (struct riscv_elf_link_hash_entry *) h;
1049   if (eh->dyn_relocs == NULL)
1050     return TRUE;
1051 
1052   /* In the shared -Bsymbolic case, discard space allocated for
1053      dynamic pc-relative relocs against symbols which turn out to be
1054      defined in regular objects.  For the normal shared case, discard
1055      space for pc-relative relocs that have become local due to symbol
1056      visibility changes.  */
1057 
1058   if (bfd_link_pic (info))
1059     {
1060       if (SYMBOL_CALLS_LOCAL (info, h))
1061 	{
1062 	  struct elf_dyn_relocs **pp;
1063 
1064 	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
1065 	    {
1066 	      p->count -= p->pc_count;
1067 	      p->pc_count = 0;
1068 	      if (p->count == 0)
1069 		*pp = p->next;
1070 	      else
1071 		pp = &p->next;
1072 	    }
1073 	}
1074 
1075       /* Also discard relocs on undefined weak syms with non-default
1076 	 visibility.  */
1077       if (eh->dyn_relocs != NULL
1078 	  && h->root.type == bfd_link_hash_undefweak)
1079 	{
1080 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
1081 	      || UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
1082 	    eh->dyn_relocs = NULL;
1083 
1084 	  /* Make sure undefined weak symbols are output as a dynamic
1085 	     symbol in PIEs.  */
1086 	  else if (h->dynindx == -1
1087 		   && !h->forced_local)
1088 	    {
1089 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
1090 		return FALSE;
1091 	    }
1092 	}
1093     }
1094   else
1095     {
1096       /* For the non-shared case, discard space for relocs against
1097 	 symbols which turn out to need copy relocs or are not
1098 	 dynamic.  */
1099 
1100       if (!h->non_got_ref
1101 	  && ((h->def_dynamic
1102 	       && !h->def_regular)
1103 	      || (htab->elf.dynamic_sections_created
1104 		  && (h->root.type == bfd_link_hash_undefweak
1105 		      || h->root.type == bfd_link_hash_undefined))))
1106 	{
1107 	  /* Make sure this symbol is output as a dynamic symbol.
1108 	     Undefined weak syms won't yet be marked as dynamic.  */
1109 	  if (h->dynindx == -1
1110 	      && !h->forced_local)
1111 	    {
1112 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
1113 		return FALSE;
1114 	    }
1115 
1116 	  /* If that succeeded, we know we'll be keeping all the
1117 	     relocs.  */
1118 	  if (h->dynindx != -1)
1119 	    goto keep;
1120 	}
1121 
1122       eh->dyn_relocs = NULL;
1123 
1124     keep: ;
1125     }
1126 
1127   /* Finally, allocate space.  */
1128   for (p = eh->dyn_relocs; p != NULL; p = p->next)
1129     {
1130       asection *sreloc = elf_section_data (p->sec)->sreloc;
1131       sreloc->size += p->count * sizeof (ElfNN_External_Rela);
1132     }
1133 
1134   return TRUE;
1135 }
1136 
1137 /* Set DF_TEXTREL if we find any dynamic relocs that apply to
1138    read-only sections.  */
1139 
1140 static bfd_boolean
1141 maybe_set_textrel (struct elf_link_hash_entry *h, void *info_p)
1142 {
1143   asection *sec;
1144 
1145   if (h->root.type == bfd_link_hash_indirect)
1146     return TRUE;
1147 
1148   sec = readonly_dynrelocs (h);
1149   if (sec != NULL)
1150     {
1151       struct bfd_link_info *info = (struct bfd_link_info *) info_p;
1152 
1153       info->flags |= DF_TEXTREL;
1154       info->callbacks->minfo
1155 	(_("%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"),
1156 	 sec->owner, h->root.root.string, sec);
1157 
1158       /* Not an error, just cut short the traversal.  */
1159       return FALSE;
1160     }
1161   return TRUE;
1162 }
1163 
1164 static bfd_boolean
1165 riscv_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
1166 {
1167   struct riscv_elf_link_hash_table *htab;
1168   bfd *dynobj;
1169   asection *s;
1170   bfd *ibfd;
1171 
1172   htab = riscv_elf_hash_table (info);
1173   BFD_ASSERT (htab != NULL);
1174   dynobj = htab->elf.dynobj;
1175   BFD_ASSERT (dynobj != NULL);
1176 
1177   if (elf_hash_table (info)->dynamic_sections_created)
1178     {
1179       /* Set the contents of the .interp section to the interpreter.  */
1180       if (bfd_link_executable (info) && !info->nointerp)
1181 	{
1182 	  s = bfd_get_linker_section (dynobj, ".interp");
1183 	  BFD_ASSERT (s != NULL);
1184 	  s->size = strlen (ELFNN_DYNAMIC_INTERPRETER) + 1;
1185 	  s->contents = (unsigned char *) ELFNN_DYNAMIC_INTERPRETER;
1186 	}
1187     }
1188 
1189   /* Set up .got offsets for local syms, and space for local dynamic
1190      relocs.  */
1191   for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
1192     {
1193       bfd_signed_vma *local_got;
1194       bfd_signed_vma *end_local_got;
1195       char *local_tls_type;
1196       bfd_size_type locsymcount;
1197       Elf_Internal_Shdr *symtab_hdr;
1198       asection *srel;
1199 
1200       if (! is_riscv_elf (ibfd))
1201 	continue;
1202 
1203       for (s = ibfd->sections; s != NULL; s = s->next)
1204 	{
1205 	  struct elf_dyn_relocs *p;
1206 
1207 	  for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
1208 	    {
1209 	      if (!bfd_is_abs_section (p->sec)
1210 		  && bfd_is_abs_section (p->sec->output_section))
1211 		{
1212 		  /* Input section has been discarded, either because
1213 		     it is a copy of a linkonce section or due to
1214 		     linker script /DISCARD/, so we'll be discarding
1215 		     the relocs too.  */
1216 		}
1217 	      else if (p->count != 0)
1218 		{
1219 		  srel = elf_section_data (p->sec)->sreloc;
1220 		  srel->size += p->count * sizeof (ElfNN_External_Rela);
1221 		  if ((p->sec->output_section->flags & SEC_READONLY) != 0)
1222 		    info->flags |= DF_TEXTREL;
1223 		}
1224 	    }
1225 	}
1226 
1227       local_got = elf_local_got_refcounts (ibfd);
1228       if (!local_got)
1229 	continue;
1230 
1231       symtab_hdr = &elf_symtab_hdr (ibfd);
1232       locsymcount = symtab_hdr->sh_info;
1233       end_local_got = local_got + locsymcount;
1234       local_tls_type = _bfd_riscv_elf_local_got_tls_type (ibfd);
1235       s = htab->elf.sgot;
1236       srel = htab->elf.srelgot;
1237       for (; local_got < end_local_got; ++local_got, ++local_tls_type)
1238 	{
1239 	  if (*local_got > 0)
1240 	    {
1241 	      *local_got = s->size;
1242 	      s->size += RISCV_ELF_WORD_BYTES;
1243 	      if (*local_tls_type & GOT_TLS_GD)
1244 		s->size += RISCV_ELF_WORD_BYTES;
1245 	      if (bfd_link_pic (info)
1246 		  || (*local_tls_type & (GOT_TLS_GD | GOT_TLS_IE)))
1247 		srel->size += sizeof (ElfNN_External_Rela);
1248 	    }
1249 	  else
1250 	    *local_got = (bfd_vma) -1;
1251 	}
1252     }
1253 
1254   /* Allocate global sym .plt and .got entries, and space for global
1255      sym dynamic relocs.  */
1256   elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
1257 
1258   if (htab->elf.sgotplt)
1259     {
1260       struct elf_link_hash_entry *got;
1261       got = elf_link_hash_lookup (elf_hash_table (info),
1262 				  "_GLOBAL_OFFSET_TABLE_",
1263 				  FALSE, FALSE, FALSE);
1264 
1265       /* Don't allocate .got.plt section if there are no GOT nor PLT
1266 	 entries and there is no refeence to _GLOBAL_OFFSET_TABLE_.  */
1267       if ((got == NULL
1268 	   || !got->ref_regular_nonweak)
1269 	  && (htab->elf.sgotplt->size == GOTPLT_HEADER_SIZE)
1270 	  && (htab->elf.splt == NULL
1271 	      || htab->elf.splt->size == 0)
1272 	  && (htab->elf.sgot == NULL
1273 	      || (htab->elf.sgot->size
1274 		  == get_elf_backend_data (output_bfd)->got_header_size)))
1275 	htab->elf.sgotplt->size = 0;
1276     }
1277 
1278   /* The check_relocs and adjust_dynamic_symbol entry points have
1279      determined the sizes of the various dynamic sections.  Allocate
1280      memory for them.  */
1281   for (s = dynobj->sections; s != NULL; s = s->next)
1282     {
1283       if ((s->flags & SEC_LINKER_CREATED) == 0)
1284 	continue;
1285 
1286       if (s == htab->elf.splt
1287 	  || s == htab->elf.sgot
1288 	  || s == htab->elf.sgotplt
1289 	  || s == htab->elf.sdynbss
1290 	  || s == htab->elf.sdynrelro
1291 	  || s == htab->sdyntdata)
1292 	{
1293 	  /* Strip this section if we don't need it; see the
1294 	     comment below.  */
1295 	}
1296       else if (strncmp (s->name, ".rela", 5) == 0)
1297 	{
1298 	  if (s->size != 0)
1299 	    {
1300 	      /* We use the reloc_count field as a counter if we need
1301 		 to copy relocs into the output file.  */
1302 	      s->reloc_count = 0;
1303 	    }
1304 	}
1305       else
1306 	{
1307 	  /* It's not one of our sections.  */
1308 	  continue;
1309 	}
1310 
1311       if (s->size == 0)
1312 	{
1313 	  /* If we don't need this section, strip it from the
1314 	     output file.  This is mostly to handle .rela.bss and
1315 	     .rela.plt.  We must create both sections in
1316 	     create_dynamic_sections, because they must be created
1317 	     before the linker maps input sections to output
1318 	     sections.  The linker does that before
1319 	     adjust_dynamic_symbol is called, and it is that
1320 	     function which decides whether anything needs to go
1321 	     into these sections.  */
1322 	  s->flags |= SEC_EXCLUDE;
1323 	  continue;
1324 	}
1325 
1326       if ((s->flags & SEC_HAS_CONTENTS) == 0)
1327 	continue;
1328 
1329       /* Allocate memory for the section contents.  Zero the memory
1330 	 for the benefit of .rela.plt, which has 4 unused entries
1331 	 at the beginning, and we don't want garbage.  */
1332       s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
1333       if (s->contents == NULL)
1334 	return FALSE;
1335     }
1336 
1337   if (elf_hash_table (info)->dynamic_sections_created)
1338     {
1339       /* Add some entries to the .dynamic section.  We fill in the
1340 	 values later, in riscv_elf_finish_dynamic_sections, but we
1341 	 must add the entries now so that we get the correct size for
1342 	 the .dynamic section.  The DT_DEBUG entry is filled in by the
1343 	 dynamic linker and used by the debugger.  */
1344 #define add_dynamic_entry(TAG, VAL) \
1345   _bfd_elf_add_dynamic_entry (info, TAG, VAL)
1346 
1347       if (bfd_link_executable (info))
1348 	{
1349 	  if (!add_dynamic_entry (DT_DEBUG, 0))
1350 	    return FALSE;
1351 	}
1352 
1353       if (htab->elf.srelplt->size != 0)
1354 	{
1355 	  if (!add_dynamic_entry (DT_PLTGOT, 0)
1356 	      || !add_dynamic_entry (DT_PLTRELSZ, 0)
1357 	      || !add_dynamic_entry (DT_PLTREL, DT_RELA)
1358 	      || !add_dynamic_entry (DT_JMPREL, 0))
1359 	    return FALSE;
1360 	}
1361 
1362       if (!add_dynamic_entry (DT_RELA, 0)
1363 	  || !add_dynamic_entry (DT_RELASZ, 0)
1364 	  || !add_dynamic_entry (DT_RELAENT, sizeof (ElfNN_External_Rela)))
1365 	return FALSE;
1366 
1367       /* If any dynamic relocs apply to a read-only section,
1368 	 then we need a DT_TEXTREL entry.  */
1369       if ((info->flags & DF_TEXTREL) == 0)
1370 	elf_link_hash_traverse (&htab->elf, maybe_set_textrel, info);
1371 
1372       if (info->flags & DF_TEXTREL)
1373 	{
1374 	  if (!add_dynamic_entry (DT_TEXTREL, 0))
1375 	    return FALSE;
1376 	}
1377     }
1378 #undef add_dynamic_entry
1379 
1380   return TRUE;
1381 }
1382 
1383 #define TP_OFFSET 0
1384 #define DTP_OFFSET 0x800
1385 
1386 /* Return the relocation value for a TLS dtp-relative reloc.  */
1387 
1388 static bfd_vma
1389 dtpoff (struct bfd_link_info *info, bfd_vma address)
1390 {
1391   /* If tls_sec is NULL, we should have signalled an error already.  */
1392   if (elf_hash_table (info)->tls_sec == NULL)
1393     return 0;
1394   return address - elf_hash_table (info)->tls_sec->vma - DTP_OFFSET;
1395 }
1396 
1397 /* Return the relocation value for a static TLS tp-relative relocation.  */
1398 
1399 static bfd_vma
1400 tpoff (struct bfd_link_info *info, bfd_vma address)
1401 {
1402   /* If tls_sec is NULL, we should have signalled an error already.  */
1403   if (elf_hash_table (info)->tls_sec == NULL)
1404     return 0;
1405   return address - elf_hash_table (info)->tls_sec->vma - TP_OFFSET;
1406 }
1407 
1408 /* Return the global pointer's value, or 0 if it is not in use.  */
1409 
1410 static bfd_vma
1411 riscv_global_pointer_value (struct bfd_link_info *info)
1412 {
1413   struct bfd_link_hash_entry *h;
1414 
1415   h = bfd_link_hash_lookup (info->hash, RISCV_GP_SYMBOL, FALSE, FALSE, TRUE);
1416   if (h == NULL || h->type != bfd_link_hash_defined)
1417     return 0;
1418 
1419   return h->u.def.value + sec_addr (h->u.def.section);
1420 }
1421 
1422 /* Emplace a static relocation.  */
1423 
1424 static bfd_reloc_status_type
1425 perform_relocation (const reloc_howto_type *howto,
1426 		    const Elf_Internal_Rela *rel,
1427 		    bfd_vma value,
1428 		    asection *input_section,
1429 		    bfd *input_bfd,
1430 		    bfd_byte *contents)
1431 {
1432   if (howto->pc_relative)
1433     value -= sec_addr (input_section) + rel->r_offset;
1434   value += rel->r_addend;
1435 
1436   switch (ELFNN_R_TYPE (rel->r_info))
1437     {
1438     case R_RISCV_HI20:
1439     case R_RISCV_TPREL_HI20:
1440     case R_RISCV_PCREL_HI20:
1441     case R_RISCV_GOT_HI20:
1442     case R_RISCV_TLS_GOT_HI20:
1443     case R_RISCV_TLS_GD_HI20:
1444       if (ARCH_SIZE > 32 && !VALID_UTYPE_IMM (RISCV_CONST_HIGH_PART (value)))
1445 	return bfd_reloc_overflow;
1446       value = ENCODE_UTYPE_IMM (RISCV_CONST_HIGH_PART (value));
1447       break;
1448 
1449     case R_RISCV_LO12_I:
1450     case R_RISCV_GPREL_I:
1451     case R_RISCV_TPREL_LO12_I:
1452     case R_RISCV_TPREL_I:
1453     case R_RISCV_PCREL_LO12_I:
1454       value = ENCODE_ITYPE_IMM (value);
1455       break;
1456 
1457     case R_RISCV_LO12_S:
1458     case R_RISCV_GPREL_S:
1459     case R_RISCV_TPREL_LO12_S:
1460     case R_RISCV_TPREL_S:
1461     case R_RISCV_PCREL_LO12_S:
1462       value = ENCODE_STYPE_IMM (value);
1463       break;
1464 
1465     case R_RISCV_CALL:
1466     case R_RISCV_CALL_PLT:
1467       if (ARCH_SIZE > 32 && !VALID_UTYPE_IMM (RISCV_CONST_HIGH_PART (value)))
1468 	return bfd_reloc_overflow;
1469       value = ENCODE_UTYPE_IMM (RISCV_CONST_HIGH_PART (value))
1470 	      | (ENCODE_ITYPE_IMM (value) << 32);
1471       break;
1472 
1473     case R_RISCV_JAL:
1474       if (!VALID_UJTYPE_IMM (value))
1475 	return bfd_reloc_overflow;
1476       value = ENCODE_UJTYPE_IMM (value);
1477       break;
1478 
1479     case R_RISCV_BRANCH:
1480       if (!VALID_SBTYPE_IMM (value))
1481 	return bfd_reloc_overflow;
1482       value = ENCODE_SBTYPE_IMM (value);
1483       break;
1484 
1485     case R_RISCV_RVC_BRANCH:
1486       if (!VALID_RVC_B_IMM (value))
1487 	return bfd_reloc_overflow;
1488       value = ENCODE_RVC_B_IMM (value);
1489       break;
1490 
1491     case R_RISCV_RVC_JUMP:
1492       if (!VALID_RVC_J_IMM (value))
1493 	return bfd_reloc_overflow;
1494       value = ENCODE_RVC_J_IMM (value);
1495       break;
1496 
1497     case R_RISCV_RVC_LUI:
1498       if (RISCV_CONST_HIGH_PART (value) == 0)
1499 	{
1500 	  /* Linker relaxation can convert an address equal to or greater than
1501 	     0x800 to slightly below 0x800.  C.LUI does not accept zero as a
1502 	     valid immediate.  We can fix this by converting it to a C.LI.  */
1503 	  bfd_vma insn = bfd_get (howto->bitsize, input_bfd,
1504 				  contents + rel->r_offset);
1505 	  insn = (insn & ~MATCH_C_LUI) | MATCH_C_LI;
1506 	  bfd_put (howto->bitsize, input_bfd, insn, contents + rel->r_offset);
1507 	  value = ENCODE_RVC_IMM (0);
1508 	}
1509       else if (!VALID_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (value)))
1510 	return bfd_reloc_overflow;
1511       else
1512 	value = ENCODE_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (value));
1513       break;
1514 
1515     case R_RISCV_32:
1516     case R_RISCV_64:
1517     case R_RISCV_ADD8:
1518     case R_RISCV_ADD16:
1519     case R_RISCV_ADD32:
1520     case R_RISCV_ADD64:
1521     case R_RISCV_SUB6:
1522     case R_RISCV_SUB8:
1523     case R_RISCV_SUB16:
1524     case R_RISCV_SUB32:
1525     case R_RISCV_SUB64:
1526     case R_RISCV_SET6:
1527     case R_RISCV_SET8:
1528     case R_RISCV_SET16:
1529     case R_RISCV_SET32:
1530     case R_RISCV_32_PCREL:
1531     case R_RISCV_TLS_DTPREL32:
1532     case R_RISCV_TLS_DTPREL64:
1533       break;
1534 
1535     case R_RISCV_DELETE:
1536       return bfd_reloc_ok;
1537 
1538     default:
1539       return bfd_reloc_notsupported;
1540     }
1541 
1542   bfd_vma word = bfd_get (howto->bitsize, input_bfd, contents + rel->r_offset);
1543   word = (word & ~howto->dst_mask) | (value & howto->dst_mask);
1544   bfd_put (howto->bitsize, input_bfd, word, contents + rel->r_offset);
1545 
1546   return bfd_reloc_ok;
1547 }
1548 
1549 /* Remember all PC-relative high-part relocs we've encountered to help us
1550    later resolve the corresponding low-part relocs.  */
1551 
1552 typedef struct
1553 {
1554   bfd_vma address;
1555   bfd_vma value;
1556 } riscv_pcrel_hi_reloc;
1557 
1558 typedef struct riscv_pcrel_lo_reloc
1559 {
1560   asection *			 input_section;
1561   struct bfd_link_info *	 info;
1562   reloc_howto_type *		 howto;
1563   const Elf_Internal_Rela *	 reloc;
1564   bfd_vma			 addr;
1565   const char *			 name;
1566   bfd_byte *			 contents;
1567   struct riscv_pcrel_lo_reloc *	 next;
1568 } riscv_pcrel_lo_reloc;
1569 
1570 typedef struct
1571 {
1572   htab_t hi_relocs;
1573   riscv_pcrel_lo_reloc *lo_relocs;
1574 } riscv_pcrel_relocs;
1575 
1576 static hashval_t
1577 riscv_pcrel_reloc_hash (const void *entry)
1578 {
1579   const riscv_pcrel_hi_reloc *e = entry;
1580   return (hashval_t)(e->address >> 2);
1581 }
1582 
1583 static bfd_boolean
1584 riscv_pcrel_reloc_eq (const void *entry1, const void *entry2)
1585 {
1586   const riscv_pcrel_hi_reloc *e1 = entry1, *e2 = entry2;
1587   return e1->address == e2->address;
1588 }
1589 
1590 static bfd_boolean
1591 riscv_init_pcrel_relocs (riscv_pcrel_relocs *p)
1592 {
1593 
1594   p->lo_relocs = NULL;
1595   p->hi_relocs = htab_create (1024, riscv_pcrel_reloc_hash,
1596 			      riscv_pcrel_reloc_eq, free);
1597   return p->hi_relocs != NULL;
1598 }
1599 
1600 static void
1601 riscv_free_pcrel_relocs (riscv_pcrel_relocs *p)
1602 {
1603   riscv_pcrel_lo_reloc *cur = p->lo_relocs;
1604 
1605   while (cur != NULL)
1606     {
1607       riscv_pcrel_lo_reloc *next = cur->next;
1608       free (cur);
1609       cur = next;
1610     }
1611 
1612   htab_delete (p->hi_relocs);
1613 }
1614 
1615 static bfd_boolean
1616 riscv_zero_pcrel_hi_reloc (Elf_Internal_Rela *rel,
1617 			   struct bfd_link_info *info,
1618 			   bfd_vma pc,
1619 			   bfd_vma addr,
1620 			   bfd_byte *contents,
1621 			   const reloc_howto_type *howto,
1622 			   bfd *input_bfd)
1623 {
1624   /* We may need to reference low addreses in PC-relative modes even when the
1625    * PC is far away from these addresses.  For example, undefweak references
1626    * need to produce the address 0 when linked.  As 0 is far from the arbitrary
1627    * addresses that we can link PC-relative programs at, the linker can't
1628    * actually relocate references to those symbols.  In order to allow these
1629    * programs to work we simply convert the PC-relative auipc sequences to
1630    * 0-relative lui sequences.  */
1631   if (bfd_link_pic (info))
1632     return FALSE;
1633 
1634   /* If it's possible to reference the symbol using auipc we do so, as that's
1635    * more in the spirit of the PC-relative relocations we're processing.  */
1636   bfd_vma offset = addr - pc;
1637   if (ARCH_SIZE == 32 || VALID_UTYPE_IMM (RISCV_CONST_HIGH_PART (offset)))
1638     return FALSE;
1639 
1640   /* If it's impossible to reference this with a LUI-based offset then don't
1641    * bother to convert it at all so users still see the PC-relative relocation
1642    * in the truncation message.  */
1643   if (ARCH_SIZE > 32 && !VALID_UTYPE_IMM (RISCV_CONST_HIGH_PART (addr)))
1644     return FALSE;
1645 
1646   rel->r_info = ELFNN_R_INFO(addr, R_RISCV_HI20);
1647 
1648   bfd_vma insn = bfd_get(howto->bitsize, input_bfd, contents + rel->r_offset);
1649   insn = (insn & ~MASK_AUIPC) | MATCH_LUI;
1650   bfd_put(howto->bitsize, input_bfd, insn, contents + rel->r_offset);
1651   return TRUE;
1652 }
1653 
1654 static bfd_boolean
1655 riscv_record_pcrel_hi_reloc (riscv_pcrel_relocs *p, bfd_vma addr,
1656 			     bfd_vma value, bfd_boolean absolute)
1657 {
1658   bfd_vma offset = absolute ? value : value - addr;
1659   riscv_pcrel_hi_reloc entry = {addr, offset};
1660   riscv_pcrel_hi_reloc **slot =
1661     (riscv_pcrel_hi_reloc **) htab_find_slot (p->hi_relocs, &entry, INSERT);
1662 
1663   BFD_ASSERT (*slot == NULL);
1664   *slot = (riscv_pcrel_hi_reloc *) bfd_malloc (sizeof (riscv_pcrel_hi_reloc));
1665   if (*slot == NULL)
1666     return FALSE;
1667   **slot = entry;
1668   return TRUE;
1669 }
1670 
1671 static bfd_boolean
1672 riscv_record_pcrel_lo_reloc (riscv_pcrel_relocs *p,
1673 			     asection *input_section,
1674 			     struct bfd_link_info *info,
1675 			     reloc_howto_type *howto,
1676 			     const Elf_Internal_Rela *reloc,
1677 			     bfd_vma addr,
1678 			     const char *name,
1679 			     bfd_byte *contents)
1680 {
1681   riscv_pcrel_lo_reloc *entry;
1682   entry = (riscv_pcrel_lo_reloc *) bfd_malloc (sizeof (riscv_pcrel_lo_reloc));
1683   if (entry == NULL)
1684     return FALSE;
1685   *entry = (riscv_pcrel_lo_reloc) {input_section, info, howto, reloc, addr,
1686 				   name, contents, p->lo_relocs};
1687   p->lo_relocs = entry;
1688   return TRUE;
1689 }
1690 
1691 static bfd_boolean
1692 riscv_resolve_pcrel_lo_relocs (riscv_pcrel_relocs *p)
1693 {
1694   riscv_pcrel_lo_reloc *r;
1695 
1696   for (r = p->lo_relocs; r != NULL; r = r->next)
1697     {
1698       bfd *input_bfd = r->input_section->owner;
1699 
1700       riscv_pcrel_hi_reloc search = {r->addr, 0};
1701       riscv_pcrel_hi_reloc *entry = htab_find (p->hi_relocs, &search);
1702       if (entry == NULL
1703 	  /* Check for overflow into bit 11 when adding reloc addend.  */
1704 	  || (! (entry->value & 0x800)
1705 	      && ((entry->value + r->reloc->r_addend) & 0x800)))
1706 	{
1707 	  char *string = (entry == NULL
1708 			  ? "%pcrel_lo missing matching %pcrel_hi"
1709 			  : "%pcrel_lo overflow with an addend");
1710 	  (*r->info->callbacks->reloc_dangerous)
1711 	    (r->info, string, input_bfd, r->input_section, r->reloc->r_offset);
1712 	  return TRUE;
1713 	}
1714 
1715       perform_relocation (r->howto, r->reloc, entry->value, r->input_section,
1716 			  input_bfd, r->contents);
1717     }
1718 
1719   return TRUE;
1720 }
1721 
1722 /* Relocate a RISC-V ELF section.
1723 
1724    The RELOCATE_SECTION function is called by the new ELF backend linker
1725    to handle the relocations for a section.
1726 
1727    The relocs are always passed as Rela structures.
1728 
1729    This function is responsible for adjusting the section contents as
1730    necessary, and (if generating a relocatable output file) adjusting
1731    the reloc addend as necessary.
1732 
1733    This function does not have to worry about setting the reloc
1734    address or the reloc symbol index.
1735 
1736    LOCAL_SYMS is a pointer to the swapped in local symbols.
1737 
1738    LOCAL_SECTIONS is an array giving the section in the input file
1739    corresponding to the st_shndx field of each local symbol.
1740 
1741    The global hash table entry for the global symbols can be found
1742    via elf_sym_hashes (input_bfd).
1743 
1744    When generating relocatable output, this function must handle
1745    STB_LOCAL/STT_SECTION symbols specially.  The output symbol is
1746    going to be the section symbol corresponding to the output
1747    section, which means that the addend must be adjusted
1748    accordingly.  */
1749 
1750 static bfd_boolean
1751 riscv_elf_relocate_section (bfd *output_bfd,
1752 			    struct bfd_link_info *info,
1753 			    bfd *input_bfd,
1754 			    asection *input_section,
1755 			    bfd_byte *contents,
1756 			    Elf_Internal_Rela *relocs,
1757 			    Elf_Internal_Sym *local_syms,
1758 			    asection **local_sections)
1759 {
1760   Elf_Internal_Rela *rel;
1761   Elf_Internal_Rela *relend;
1762   riscv_pcrel_relocs pcrel_relocs;
1763   bfd_boolean ret = FALSE;
1764   asection *sreloc = elf_section_data (input_section)->sreloc;
1765   struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (info);
1766   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (input_bfd);
1767   struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd);
1768   bfd_vma *local_got_offsets = elf_local_got_offsets (input_bfd);
1769   bfd_boolean absolute;
1770 
1771   if (!riscv_init_pcrel_relocs (&pcrel_relocs))
1772     return FALSE;
1773 
1774   relend = relocs + input_section->reloc_count;
1775   for (rel = relocs; rel < relend; rel++)
1776     {
1777       unsigned long r_symndx;
1778       struct elf_link_hash_entry *h;
1779       Elf_Internal_Sym *sym;
1780       asection *sec;
1781       bfd_vma relocation;
1782       bfd_reloc_status_type r = bfd_reloc_ok;
1783       const char *name;
1784       bfd_vma off, ie_off;
1785       bfd_boolean unresolved_reloc, is_ie = FALSE;
1786       bfd_vma pc = sec_addr (input_section) + rel->r_offset;
1787       int r_type = ELFNN_R_TYPE (rel->r_info), tls_type;
1788       reloc_howto_type *howto = riscv_elf_rtype_to_howto (input_bfd, r_type);
1789       const char *msg = NULL;
1790       char *msg_buf = NULL;
1791       bfd_boolean resolved_to_zero;
1792 
1793       if (howto == NULL
1794 	  || r_type == R_RISCV_GNU_VTINHERIT || r_type == R_RISCV_GNU_VTENTRY)
1795 	continue;
1796 
1797       /* This is a final link.  */
1798       r_symndx = ELFNN_R_SYM (rel->r_info);
1799       h = NULL;
1800       sym = NULL;
1801       sec = NULL;
1802       unresolved_reloc = FALSE;
1803       if (r_symndx < symtab_hdr->sh_info)
1804 	{
1805 	  sym = local_syms + r_symndx;
1806 	  sec = local_sections[r_symndx];
1807 	  relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
1808 	}
1809       else
1810 	{
1811 	  bfd_boolean warned, ignored;
1812 
1813 	  RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
1814 				   r_symndx, symtab_hdr, sym_hashes,
1815 				   h, sec, relocation,
1816 				   unresolved_reloc, warned, ignored);
1817 	  if (warned)
1818 	    {
1819 	      /* To avoid generating warning messages about truncated
1820 		 relocations, set the relocation's address to be the same as
1821 		 the start of this section.  */
1822 	      if (input_section->output_section != NULL)
1823 		relocation = input_section->output_section->vma;
1824 	      else
1825 		relocation = 0;
1826 	    }
1827 	}
1828 
1829       if (sec != NULL && discarded_section (sec))
1830 	RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
1831 					 rel, 1, relend, howto, 0, contents);
1832 
1833       if (bfd_link_relocatable (info))
1834 	continue;
1835 
1836       if (h != NULL)
1837 	name = h->root.root.string;
1838       else
1839 	{
1840 	  name = (bfd_elf_string_from_elf_section
1841 		  (input_bfd, symtab_hdr->sh_link, sym->st_name));
1842 	  if (name == NULL || *name == '\0')
1843 	    name = bfd_section_name (sec);
1844 	}
1845 
1846       resolved_to_zero = (h != NULL
1847 			  && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h));
1848 
1849       switch (r_type)
1850 	{
1851 	case R_RISCV_NONE:
1852 	case R_RISCV_RELAX:
1853 	case R_RISCV_TPREL_ADD:
1854 	case R_RISCV_COPY:
1855 	case R_RISCV_JUMP_SLOT:
1856 	case R_RISCV_RELATIVE:
1857 	  /* These require nothing of us at all.  */
1858 	  continue;
1859 
1860 	case R_RISCV_HI20:
1861 	case R_RISCV_BRANCH:
1862 	case R_RISCV_RVC_BRANCH:
1863 	case R_RISCV_RVC_LUI:
1864 	case R_RISCV_LO12_I:
1865 	case R_RISCV_LO12_S:
1866 	case R_RISCV_SET6:
1867 	case R_RISCV_SET8:
1868 	case R_RISCV_SET16:
1869 	case R_RISCV_SET32:
1870 	case R_RISCV_32_PCREL:
1871 	case R_RISCV_DELETE:
1872 	  /* These require no special handling beyond perform_relocation.  */
1873 	  break;
1874 
1875 	case R_RISCV_GOT_HI20:
1876 	  if (h != NULL)
1877 	    {
1878 	      bfd_boolean dyn, pic;
1879 
1880 	      off = h->got.offset;
1881 	      BFD_ASSERT (off != (bfd_vma) -1);
1882 	      dyn = elf_hash_table (info)->dynamic_sections_created;
1883 	      pic = bfd_link_pic (info);
1884 
1885 	      if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, pic, h)
1886 		  || (pic && SYMBOL_REFERENCES_LOCAL (info, h)))
1887 		{
1888 		  /* This is actually a static link, or it is a
1889 		     -Bsymbolic link and the symbol is defined
1890 		     locally, or the symbol was forced to be local
1891 		     because of a version file.  We must initialize
1892 		     this entry in the global offset table.  Since the
1893 		     offset must always be a multiple of the word size,
1894 		     we use the least significant bit to record whether
1895 		     we have initialized it already.
1896 
1897 		     When doing a dynamic link, we create a .rela.got
1898 		     relocation entry to initialize the value.  This
1899 		     is done in the finish_dynamic_symbol routine.  */
1900 		  if ((off & 1) != 0)
1901 		    off &= ~1;
1902 		  else
1903 		    {
1904 		      bfd_put_NN (output_bfd, relocation,
1905 				  htab->elf.sgot->contents + off);
1906 		      h->got.offset |= 1;
1907 		    }
1908 		}
1909 	      else
1910 		unresolved_reloc = FALSE;
1911 	    }
1912 	  else
1913 	    {
1914 	      BFD_ASSERT (local_got_offsets != NULL
1915 			  && local_got_offsets[r_symndx] != (bfd_vma) -1);
1916 
1917 	      off = local_got_offsets[r_symndx];
1918 
1919 	      /* The offset must always be a multiple of the word size.
1920 		 So, we can use the least significant bit to record
1921 		 whether we have already processed this entry.  */
1922 	      if ((off & 1) != 0)
1923 		off &= ~1;
1924 	      else
1925 		{
1926 		  if (bfd_link_pic (info))
1927 		    {
1928 		      asection *s;
1929 		      Elf_Internal_Rela outrel;
1930 
1931 		      /* We need to generate a R_RISCV_RELATIVE reloc
1932 			 for the dynamic linker.  */
1933 		      s = htab->elf.srelgot;
1934 		      BFD_ASSERT (s != NULL);
1935 
1936 		      outrel.r_offset = sec_addr (htab->elf.sgot) + off;
1937 		      outrel.r_info =
1938 			ELFNN_R_INFO (0, R_RISCV_RELATIVE);
1939 		      outrel.r_addend = relocation;
1940 		      relocation = 0;
1941 		      riscv_elf_append_rela (output_bfd, s, &outrel);
1942 		    }
1943 
1944 		  bfd_put_NN (output_bfd, relocation,
1945 			      htab->elf.sgot->contents + off);
1946 		  local_got_offsets[r_symndx] |= 1;
1947 		}
1948 	    }
1949 	  relocation = sec_addr (htab->elf.sgot) + off;
1950 	  absolute = riscv_zero_pcrel_hi_reloc (rel,
1951 						info,
1952 						pc,
1953 						relocation,
1954 						contents,
1955 						howto,
1956 						input_bfd);
1957 	  r_type = ELFNN_R_TYPE (rel->r_info);
1958 	  howto = riscv_elf_rtype_to_howto (input_bfd, r_type);
1959 	  if (howto == NULL)
1960 	    r = bfd_reloc_notsupported;
1961 	  else if (!riscv_record_pcrel_hi_reloc (&pcrel_relocs, pc,
1962 						 relocation, absolute))
1963 	    r = bfd_reloc_overflow;
1964 	  break;
1965 
1966 	case R_RISCV_ADD8:
1967 	case R_RISCV_ADD16:
1968 	case R_RISCV_ADD32:
1969 	case R_RISCV_ADD64:
1970 	  {
1971 	    bfd_vma old_value = bfd_get (howto->bitsize, input_bfd,
1972 					 contents + rel->r_offset);
1973 	    relocation = old_value + relocation;
1974 	  }
1975 	  break;
1976 
1977 	case R_RISCV_SUB6:
1978 	case R_RISCV_SUB8:
1979 	case R_RISCV_SUB16:
1980 	case R_RISCV_SUB32:
1981 	case R_RISCV_SUB64:
1982 	  {
1983 	    bfd_vma old_value = bfd_get (howto->bitsize, input_bfd,
1984 					 contents + rel->r_offset);
1985 	    relocation = old_value - relocation;
1986 	  }
1987 	  break;
1988 
1989 	case R_RISCV_CALL:
1990 	case R_RISCV_CALL_PLT:
1991 	  /* Handle a call to an undefined weak function.  This won't be
1992 	     relaxed, so we have to handle it here.  */
1993 	  if (h != NULL && h->root.type == bfd_link_hash_undefweak
1994 	      && (!bfd_link_pic (info) || h->plt.offset == MINUS_ONE))
1995 	    {
1996 	      /* We can use x0 as the base register.  */
1997 	      bfd_vma insn = bfd_get_32 (input_bfd,
1998 					 contents + rel->r_offset + 4);
1999 	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
2000 	      bfd_put_32 (input_bfd, insn, contents + rel->r_offset + 4);
2001 	      /* Set the relocation value so that we get 0 after the pc
2002 		 relative adjustment.  */
2003 	      relocation = sec_addr (input_section) + rel->r_offset;
2004 	    }
2005 	  /* Fall through.  */
2006 
2007 	case R_RISCV_JAL:
2008 	case R_RISCV_RVC_JUMP:
2009 	  /* This line has to match the check in _bfd_riscv_relax_section.  */
2010 	  if (bfd_link_pic (info) && h != NULL && h->plt.offset != MINUS_ONE)
2011 	    {
2012 	      /* Refer to the PLT entry.  */
2013 	      relocation = sec_addr (htab->elf.splt) + h->plt.offset;
2014 	      unresolved_reloc = FALSE;
2015 	    }
2016 	  break;
2017 
2018 	case R_RISCV_TPREL_HI20:
2019 	  relocation = tpoff (info, relocation);
2020 	  break;
2021 
2022 	case R_RISCV_TPREL_LO12_I:
2023 	case R_RISCV_TPREL_LO12_S:
2024 	  relocation = tpoff (info, relocation);
2025 	  break;
2026 
2027 	case R_RISCV_TPREL_I:
2028 	case R_RISCV_TPREL_S:
2029 	  relocation = tpoff (info, relocation);
2030 	  if (VALID_ITYPE_IMM (relocation + rel->r_addend))
2031 	    {
2032 	      /* We can use tp as the base register.  */
2033 	      bfd_vma insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
2034 	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
2035 	      insn |= X_TP << OP_SH_RS1;
2036 	      bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
2037 	    }
2038 	  else
2039 	    r = bfd_reloc_overflow;
2040 	  break;
2041 
2042 	case R_RISCV_GPREL_I:
2043 	case R_RISCV_GPREL_S:
2044 	  {
2045 	    bfd_vma gp = riscv_global_pointer_value (info);
2046 	    bfd_boolean x0_base = VALID_ITYPE_IMM (relocation + rel->r_addend);
2047 	    if (x0_base || VALID_ITYPE_IMM (relocation + rel->r_addend - gp))
2048 	      {
2049 		/* We can use x0 or gp as the base register.  */
2050 		bfd_vma insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
2051 		insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
2052 		if (!x0_base)
2053 		  {
2054 		    rel->r_addend -= gp;
2055 		    insn |= X_GP << OP_SH_RS1;
2056 		  }
2057 		bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
2058 	      }
2059 	    else
2060 	      r = bfd_reloc_overflow;
2061 	    break;
2062 	  }
2063 
2064 	case R_RISCV_PCREL_HI20:
2065 	  absolute = riscv_zero_pcrel_hi_reloc (rel,
2066 						info,
2067 						pc,
2068 						relocation,
2069 						contents,
2070 						howto,
2071 						input_bfd);
2072 	  r_type = ELFNN_R_TYPE (rel->r_info);
2073 	  howto = riscv_elf_rtype_to_howto (input_bfd, r_type);
2074 	  if (howto == NULL)
2075 	    r = bfd_reloc_notsupported;
2076 	  else if (!riscv_record_pcrel_hi_reloc (&pcrel_relocs, pc,
2077 						 relocation + rel->r_addend,
2078 						 absolute))
2079 	    r = bfd_reloc_overflow;
2080 	  break;
2081 
2082 	case R_RISCV_PCREL_LO12_I:
2083 	case R_RISCV_PCREL_LO12_S:
2084 	  /* We don't allow section symbols plus addends as the auipc address,
2085 	     because then riscv_relax_delete_bytes would have to search through
2086 	     all relocs to update these addends.  This is also ambiguous, as
2087 	     we do allow offsets to be added to the target address, which are
2088 	     not to be used to find the auipc address.  */
2089 	  if (((sym != NULL && (ELF_ST_TYPE (sym->st_info) == STT_SECTION))
2090 	       || (h != NULL && h->type == STT_SECTION))
2091 	      && rel->r_addend)
2092 	    {
2093 	      msg = _("%pcrel_lo section symbol with an addend");
2094 	      r = bfd_reloc_dangerous;
2095 	      break;
2096 	    }
2097 
2098 	  if (riscv_record_pcrel_lo_reloc (&pcrel_relocs, input_section, info,
2099 					   howto, rel, relocation, name,
2100 					   contents))
2101 	    continue;
2102 	  r = bfd_reloc_overflow;
2103 	  break;
2104 
2105 	case R_RISCV_TLS_DTPREL32:
2106 	case R_RISCV_TLS_DTPREL64:
2107 	  relocation = dtpoff (info, relocation);
2108 	  break;
2109 
2110 	case R_RISCV_32:
2111 	case R_RISCV_64:
2112 	  if ((input_section->flags & SEC_ALLOC) == 0)
2113 	    break;
2114 
2115 	  if ((bfd_link_pic (info)
2116 	       && (h == NULL
2117 		   || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2118 		       && !resolved_to_zero)
2119 		   || h->root.type != bfd_link_hash_undefweak)
2120 	       && (! howto->pc_relative
2121 		   || !SYMBOL_CALLS_LOCAL (info, h)))
2122 	      || (!bfd_link_pic (info)
2123 		  && h != NULL
2124 		  && h->dynindx != -1
2125 		  && !h->non_got_ref
2126 		  && ((h->def_dynamic
2127 		       && !h->def_regular)
2128 		      || h->root.type == bfd_link_hash_undefweak
2129 		      || h->root.type == bfd_link_hash_undefined)))
2130 	    {
2131 	      Elf_Internal_Rela outrel;
2132 	      bfd_boolean skip_static_relocation, skip_dynamic_relocation;
2133 
2134 	      /* When generating a shared object, these relocations
2135 		 are copied into the output file to be resolved at run
2136 		 time.  */
2137 
2138 	      outrel.r_offset =
2139 		_bfd_elf_section_offset (output_bfd, info, input_section,
2140 					 rel->r_offset);
2141 	      skip_static_relocation = outrel.r_offset != (bfd_vma) -2;
2142 	      skip_dynamic_relocation = outrel.r_offset >= (bfd_vma) -2;
2143 	      outrel.r_offset += sec_addr (input_section);
2144 
2145 	      if (skip_dynamic_relocation)
2146 		memset (&outrel, 0, sizeof outrel);
2147 	      else if (h != NULL && h->dynindx != -1
2148 		       && !(bfd_link_pic (info)
2149 			    && SYMBOLIC_BIND (info, h)
2150 			    && h->def_regular))
2151 		{
2152 		  outrel.r_info = ELFNN_R_INFO (h->dynindx, r_type);
2153 		  outrel.r_addend = rel->r_addend;
2154 		}
2155 	      else
2156 		{
2157 		  outrel.r_info = ELFNN_R_INFO (0, R_RISCV_RELATIVE);
2158 		  outrel.r_addend = relocation + rel->r_addend;
2159 		}
2160 
2161 	      riscv_elf_append_rela (output_bfd, sreloc, &outrel);
2162 	      if (skip_static_relocation)
2163 		continue;
2164 	    }
2165 	  break;
2166 
2167 	case R_RISCV_TLS_GOT_HI20:
2168 	  is_ie = TRUE;
2169 	  /* Fall through.  */
2170 
2171 	case R_RISCV_TLS_GD_HI20:
2172 	  if (h != NULL)
2173 	    {
2174 	      off = h->got.offset;
2175 	      h->got.offset |= 1;
2176 	    }
2177 	  else
2178 	    {
2179 	      off = local_got_offsets[r_symndx];
2180 	      local_got_offsets[r_symndx] |= 1;
2181 	    }
2182 
2183 	  tls_type = _bfd_riscv_elf_tls_type (input_bfd, h, r_symndx);
2184 	  BFD_ASSERT (tls_type & (GOT_TLS_IE | GOT_TLS_GD));
2185 	  /* If this symbol is referenced by both GD and IE TLS, the IE
2186 	     reference's GOT slot follows the GD reference's slots.  */
2187 	  ie_off = 0;
2188 	  if ((tls_type & GOT_TLS_GD) && (tls_type & GOT_TLS_IE))
2189 	    ie_off = 2 * GOT_ENTRY_SIZE;
2190 
2191 	  if ((off & 1) != 0)
2192 	    off &= ~1;
2193 	  else
2194 	    {
2195 	      Elf_Internal_Rela outrel;
2196 	      int indx = 0;
2197 	      bfd_boolean need_relocs = FALSE;
2198 
2199 	      if (htab->elf.srelgot == NULL)
2200 		abort ();
2201 
2202 	      if (h != NULL)
2203 		{
2204 		  bfd_boolean dyn, pic;
2205 		  dyn = htab->elf.dynamic_sections_created;
2206 		  pic = bfd_link_pic (info);
2207 
2208 		  if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, pic, h)
2209 		      && (!pic || !SYMBOL_REFERENCES_LOCAL (info, h)))
2210 		    indx = h->dynindx;
2211 		}
2212 
2213 	      /* The GOT entries have not been initialized yet.  Do it
2214 		 now, and emit any relocations.  */
2215 	      if ((bfd_link_pic (info) || indx != 0)
2216 		  && (h == NULL
2217 		      || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2218 		      || h->root.type != bfd_link_hash_undefweak))
2219 		    need_relocs = TRUE;
2220 
2221 	      if (tls_type & GOT_TLS_GD)
2222 		{
2223 		  if (need_relocs)
2224 		    {
2225 		      outrel.r_offset = sec_addr (htab->elf.sgot) + off;
2226 		      outrel.r_addend = 0;
2227 		      outrel.r_info = ELFNN_R_INFO (indx, R_RISCV_TLS_DTPMODNN);
2228 		      bfd_put_NN (output_bfd, 0,
2229 				  htab->elf.sgot->contents + off);
2230 		      riscv_elf_append_rela (output_bfd, htab->elf.srelgot, &outrel);
2231 		      if (indx == 0)
2232 			{
2233 			  BFD_ASSERT (! unresolved_reloc);
2234 			  bfd_put_NN (output_bfd,
2235 				      dtpoff (info, relocation),
2236 				      (htab->elf.sgot->contents + off +
2237 				       RISCV_ELF_WORD_BYTES));
2238 			}
2239 		      else
2240 			{
2241 			  bfd_put_NN (output_bfd, 0,
2242 				      (htab->elf.sgot->contents + off +
2243 				       RISCV_ELF_WORD_BYTES));
2244 			  outrel.r_info = ELFNN_R_INFO (indx, R_RISCV_TLS_DTPRELNN);
2245 			  outrel.r_offset += RISCV_ELF_WORD_BYTES;
2246 			  riscv_elf_append_rela (output_bfd, htab->elf.srelgot, &outrel);
2247 			}
2248 		    }
2249 		  else
2250 		    {
2251 		      /* If we are not emitting relocations for a
2252 			 general dynamic reference, then we must be in a
2253 			 static link or an executable link with the
2254 			 symbol binding locally.  Mark it as belonging
2255 			 to module 1, the executable.  */
2256 		      bfd_put_NN (output_bfd, 1,
2257 				  htab->elf.sgot->contents + off);
2258 		      bfd_put_NN (output_bfd,
2259 				  dtpoff (info, relocation),
2260 				  (htab->elf.sgot->contents + off +
2261 				   RISCV_ELF_WORD_BYTES));
2262 		   }
2263 		}
2264 
2265 	      if (tls_type & GOT_TLS_IE)
2266 		{
2267 		  if (need_relocs)
2268 		    {
2269 		      bfd_put_NN (output_bfd, 0,
2270 				  htab->elf.sgot->contents + off + ie_off);
2271 		      outrel.r_offset = sec_addr (htab->elf.sgot)
2272 				       + off + ie_off;
2273 		      outrel.r_addend = 0;
2274 		      if (indx == 0)
2275 			outrel.r_addend = tpoff (info, relocation);
2276 		      outrel.r_info = ELFNN_R_INFO (indx, R_RISCV_TLS_TPRELNN);
2277 		      riscv_elf_append_rela (output_bfd, htab->elf.srelgot, &outrel);
2278 		    }
2279 		  else
2280 		    {
2281 		      bfd_put_NN (output_bfd, tpoff (info, relocation),
2282 				  htab->elf.sgot->contents + off + ie_off);
2283 		    }
2284 		}
2285 	    }
2286 
2287 	  BFD_ASSERT (off < (bfd_vma) -2);
2288 	  relocation = sec_addr (htab->elf.sgot) + off + (is_ie ? ie_off : 0);
2289 	  if (!riscv_record_pcrel_hi_reloc (&pcrel_relocs, pc,
2290 					    relocation, FALSE))
2291 	    r = bfd_reloc_overflow;
2292 	  unresolved_reloc = FALSE;
2293 	  break;
2294 
2295 	default:
2296 	  r = bfd_reloc_notsupported;
2297 	}
2298 
2299       /* Dynamic relocs are not propagated for SEC_DEBUGGING sections
2300 	 because such sections are not SEC_ALLOC and thus ld.so will
2301 	 not process them.  */
2302       if (unresolved_reloc
2303 	  && !((input_section->flags & SEC_DEBUGGING) != 0
2304 	       && h->def_dynamic)
2305 	  && _bfd_elf_section_offset (output_bfd, info, input_section,
2306 				      rel->r_offset) != (bfd_vma) -1)
2307 	{
2308 	  switch (r_type)
2309 	    {
2310 	    case R_RISCV_CALL:
2311 	    case R_RISCV_JAL:
2312 	    case R_RISCV_RVC_JUMP:
2313 	      if (asprintf (&msg_buf,
2314 			    _("%%X%%P: relocation %s against `%s' can "
2315 			      "not be used when making a shared object; "
2316 			      "recompile with -fPIC\n"),
2317 			    howto->name,
2318 			    h->root.root.string) == -1)
2319 		msg_buf = NULL;
2320 	      break;
2321 
2322 	    default:
2323 	      if (asprintf (&msg_buf,
2324 			    _("%%X%%P: unresolvable %s relocation against "
2325 			      "symbol `%s'\n"),
2326 			    howto->name,
2327 			    h->root.root.string) == -1)
2328 		msg_buf = NULL;
2329 	      break;
2330 	    }
2331 
2332 	  msg = msg_buf;
2333 	  r = bfd_reloc_notsupported;
2334 	}
2335 
2336       if (r == bfd_reloc_ok)
2337 	r = perform_relocation (howto, rel, relocation, input_section,
2338 				input_bfd, contents);
2339 
2340       /* We should have already detected the error and set message before.
2341 	 If the error message isn't set since the linker runs out of memory
2342 	 or we don't set it before, then we should set the default message
2343 	 with the "internal error" string here.  */
2344       switch (r)
2345 	{
2346 	case bfd_reloc_ok:
2347 	  continue;
2348 
2349 	case bfd_reloc_overflow:
2350 	  info->callbacks->reloc_overflow
2351 	    (info, (h ? &h->root : NULL), name, howto->name,
2352 	     (bfd_vma) 0, input_bfd, input_section, rel->r_offset);
2353 	  break;
2354 
2355 	case bfd_reloc_undefined:
2356 	  info->callbacks->undefined_symbol
2357 	    (info, name, input_bfd, input_section, rel->r_offset,
2358 	     TRUE);
2359 	  break;
2360 
2361 	case bfd_reloc_outofrange:
2362 	  if (msg == NULL)
2363 	    msg = _("%X%P: internal error: out of range error\n");
2364 	  break;
2365 
2366 	case bfd_reloc_notsupported:
2367 	  if (msg == NULL)
2368 	    msg = _("%X%P: internal error: unsupported relocation error\n");
2369 	  break;
2370 
2371 	case bfd_reloc_dangerous:
2372 	  /* The error message should already be set.  */
2373 	  if (msg == NULL)
2374 	    msg = _("dangerous relocation error");
2375 	  info->callbacks->reloc_dangerous
2376 	    (info, msg, input_bfd, input_section, rel->r_offset);
2377 	  break;
2378 
2379 	default:
2380 	  msg = _("%X%P: internal error: unknown error\n");
2381 	  break;
2382 	}
2383 
2384       /* Do not report error message for the dangerous relocation again.  */
2385       if (msg && r != bfd_reloc_dangerous)
2386 	info->callbacks->einfo (msg);
2387 
2388       /* Free the unused `msg_buf` if needed.  */
2389       if (msg_buf)
2390 	free (msg_buf);
2391 
2392       /* We already reported the error via a callback, so don't try to report
2393 	 it again by returning false.  That leads to spurious errors.  */
2394       ret = TRUE;
2395       goto out;
2396     }
2397 
2398   ret = riscv_resolve_pcrel_lo_relocs (&pcrel_relocs);
2399 out:
2400   riscv_free_pcrel_relocs (&pcrel_relocs);
2401   return ret;
2402 }
2403 
2404 /* Finish up dynamic symbol handling.  We set the contents of various
2405    dynamic sections here.  */
2406 
2407 static bfd_boolean
2408 riscv_elf_finish_dynamic_symbol (bfd *output_bfd,
2409 				 struct bfd_link_info *info,
2410 				 struct elf_link_hash_entry *h,
2411 				 Elf_Internal_Sym *sym)
2412 {
2413   struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (info);
2414   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
2415 
2416   if (h->plt.offset != (bfd_vma) -1)
2417     {
2418       /* We've decided to create a PLT entry for this symbol.  */
2419       bfd_byte *loc;
2420       bfd_vma i, header_address, plt_idx, got_address;
2421       uint32_t plt_entry[PLT_ENTRY_INSNS];
2422       Elf_Internal_Rela rela;
2423 
2424       BFD_ASSERT (h->dynindx != -1);
2425 
2426       /* Calculate the address of the PLT header.  */
2427       header_address = sec_addr (htab->elf.splt);
2428 
2429       /* Calculate the index of the entry.  */
2430       plt_idx = (h->plt.offset - PLT_HEADER_SIZE) / PLT_ENTRY_SIZE;
2431 
2432       /* Calculate the address of the .got.plt entry.  */
2433       got_address = riscv_elf_got_plt_val (plt_idx, info);
2434 
2435       /* Find out where the .plt entry should go.  */
2436       loc = htab->elf.splt->contents + h->plt.offset;
2437 
2438       /* Fill in the PLT entry itself.  */
2439       if (! riscv_make_plt_entry (output_bfd, got_address,
2440 				  header_address + h->plt.offset,
2441 				  plt_entry))
2442 	return FALSE;
2443 
2444       for (i = 0; i < PLT_ENTRY_INSNS; i++)
2445 	bfd_put_32 (output_bfd, plt_entry[i], loc + 4*i);
2446 
2447       /* Fill in the initial value of the .got.plt entry.  */
2448       loc = htab->elf.sgotplt->contents
2449 	    + (got_address - sec_addr (htab->elf.sgotplt));
2450       bfd_put_NN (output_bfd, sec_addr (htab->elf.splt), loc);
2451 
2452       /* Fill in the entry in the .rela.plt section.  */
2453       rela.r_offset = got_address;
2454       rela.r_addend = 0;
2455       rela.r_info = ELFNN_R_INFO (h->dynindx, R_RISCV_JUMP_SLOT);
2456 
2457       loc = htab->elf.srelplt->contents + plt_idx * sizeof (ElfNN_External_Rela);
2458       bed->s->swap_reloca_out (output_bfd, &rela, loc);
2459 
2460       if (!h->def_regular)
2461 	{
2462 	  /* Mark the symbol as undefined, rather than as defined in
2463 	     the .plt section.  Leave the value alone.  */
2464 	  sym->st_shndx = SHN_UNDEF;
2465 	  /* If the symbol is weak, we do need to clear the value.
2466 	     Otherwise, the PLT entry would provide a definition for
2467 	     the symbol even if the symbol wasn't defined anywhere,
2468 	     and so the symbol would never be NULL.  */
2469 	  if (!h->ref_regular_nonweak)
2470 	    sym->st_value = 0;
2471 	}
2472     }
2473 
2474   if (h->got.offset != (bfd_vma) -1
2475       && !(riscv_elf_hash_entry (h)->tls_type & (GOT_TLS_GD | GOT_TLS_IE))
2476       && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
2477     {
2478       asection *sgot;
2479       asection *srela;
2480       Elf_Internal_Rela rela;
2481 
2482       /* This symbol has an entry in the GOT.  Set it up.  */
2483 
2484       sgot = htab->elf.sgot;
2485       srela = htab->elf.srelgot;
2486       BFD_ASSERT (sgot != NULL && srela != NULL);
2487 
2488       rela.r_offset = sec_addr (sgot) + (h->got.offset &~ (bfd_vma) 1);
2489 
2490       /* If this is a local symbol reference, we just want to emit a RELATIVE
2491 	 reloc.  This can happen if it is a -Bsymbolic link, or a pie link, or
2492 	 the symbol was forced to be local because of a version file.
2493 	 The entry in the global offset table will already have been
2494 	 initialized in the relocate_section function.  */
2495       if (bfd_link_pic (info)
2496 	  && SYMBOL_REFERENCES_LOCAL (info, h))
2497 	{
2498 	  BFD_ASSERT((h->got.offset & 1) != 0);
2499 	  asection *sec = h->root.u.def.section;
2500 	  rela.r_info = ELFNN_R_INFO (0, R_RISCV_RELATIVE);
2501 	  rela.r_addend = (h->root.u.def.value
2502 			   + sec->output_section->vma
2503 			   + sec->output_offset);
2504 	}
2505       else
2506 	{
2507 	  BFD_ASSERT((h->got.offset & 1) == 0);
2508 	  BFD_ASSERT (h->dynindx != -1);
2509 	  rela.r_info = ELFNN_R_INFO (h->dynindx, R_RISCV_NN);
2510 	  rela.r_addend = 0;
2511 	}
2512 
2513       bfd_put_NN (output_bfd, 0,
2514 		  sgot->contents + (h->got.offset & ~(bfd_vma) 1));
2515       riscv_elf_append_rela (output_bfd, srela, &rela);
2516     }
2517 
2518   if (h->needs_copy)
2519     {
2520       Elf_Internal_Rela rela;
2521       asection *s;
2522 
2523       /* This symbols needs a copy reloc.  Set it up.  */
2524       BFD_ASSERT (h->dynindx != -1);
2525 
2526       rela.r_offset = sec_addr (h->root.u.def.section) + h->root.u.def.value;
2527       rela.r_info = ELFNN_R_INFO (h->dynindx, R_RISCV_COPY);
2528       rela.r_addend = 0;
2529       if (h->root.u.def.section == htab->elf.sdynrelro)
2530 	s = htab->elf.sreldynrelro;
2531       else
2532 	s = htab->elf.srelbss;
2533       riscv_elf_append_rela (output_bfd, s, &rela);
2534     }
2535 
2536   /* Mark some specially defined symbols as absolute.  */
2537   if (h == htab->elf.hdynamic
2538       || (h == htab->elf.hgot || h == htab->elf.hplt))
2539     sym->st_shndx = SHN_ABS;
2540 
2541   return TRUE;
2542 }
2543 
2544 /* Finish up the dynamic sections.  */
2545 
2546 static bfd_boolean
2547 riscv_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
2548 		  bfd *dynobj, asection *sdyn)
2549 {
2550   struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (info);
2551   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
2552   size_t dynsize = bed->s->sizeof_dyn;
2553   bfd_byte *dyncon, *dynconend;
2554 
2555   dynconend = sdyn->contents + sdyn->size;
2556   for (dyncon = sdyn->contents; dyncon < dynconend; dyncon += dynsize)
2557     {
2558       Elf_Internal_Dyn dyn;
2559       asection *s;
2560 
2561       bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
2562 
2563       switch (dyn.d_tag)
2564 	{
2565 	case DT_PLTGOT:
2566 	  s = htab->elf.sgotplt;
2567 	  dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
2568 	  break;
2569 	case DT_JMPREL:
2570 	  s = htab->elf.srelplt;
2571 	  dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
2572 	  break;
2573 	case DT_PLTRELSZ:
2574 	  s = htab->elf.srelplt;
2575 	  dyn.d_un.d_val = s->size;
2576 	  break;
2577 	default:
2578 	  continue;
2579 	}
2580 
2581       bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
2582     }
2583   return TRUE;
2584 }
2585 
2586 static bfd_boolean
2587 riscv_elf_finish_dynamic_sections (bfd *output_bfd,
2588 				   struct bfd_link_info *info)
2589 {
2590   bfd *dynobj;
2591   asection *sdyn;
2592   struct riscv_elf_link_hash_table *htab;
2593 
2594   htab = riscv_elf_hash_table (info);
2595   BFD_ASSERT (htab != NULL);
2596   dynobj = htab->elf.dynobj;
2597 
2598   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
2599 
2600   if (elf_hash_table (info)->dynamic_sections_created)
2601     {
2602       asection *splt;
2603       bfd_boolean ret;
2604 
2605       splt = htab->elf.splt;
2606       BFD_ASSERT (splt != NULL && sdyn != NULL);
2607 
2608       ret = riscv_finish_dyn (output_bfd, info, dynobj, sdyn);
2609 
2610       if (!ret)
2611 	return ret;
2612 
2613       /* Fill in the head and tail entries in the procedure linkage table.  */
2614       if (splt->size > 0)
2615 	{
2616 	  int i;
2617 	  uint32_t plt_header[PLT_HEADER_INSNS];
2618 	  ret = riscv_make_plt_header (output_bfd,
2619 				       sec_addr (htab->elf.sgotplt),
2620 				       sec_addr (splt), plt_header);
2621 	  if (!ret)
2622 	    return ret;
2623 
2624 	  for (i = 0; i < PLT_HEADER_INSNS; i++)
2625 	    bfd_put_32 (output_bfd, plt_header[i], splt->contents + 4*i);
2626 
2627 	  elf_section_data (splt->output_section)->this_hdr.sh_entsize
2628 	    = PLT_ENTRY_SIZE;
2629 	}
2630     }
2631 
2632   if (htab->elf.sgotplt)
2633     {
2634       asection *output_section = htab->elf.sgotplt->output_section;
2635 
2636       if (bfd_is_abs_section (output_section))
2637 	{
2638 	  (*_bfd_error_handler)
2639 	    (_("discarded output section: `%pA'"), htab->elf.sgotplt);
2640 	  return FALSE;
2641 	}
2642 
2643       if (htab->elf.sgotplt->size > 0)
2644 	{
2645 	  /* Write the first two entries in .got.plt, needed for the dynamic
2646 	     linker.  */
2647 	  bfd_put_NN (output_bfd, (bfd_vma) -1, htab->elf.sgotplt->contents);
2648 	  bfd_put_NN (output_bfd, (bfd_vma) 0,
2649 		      htab->elf.sgotplt->contents + GOT_ENTRY_SIZE);
2650 	}
2651 
2652       elf_section_data (output_section)->this_hdr.sh_entsize = GOT_ENTRY_SIZE;
2653     }
2654 
2655   if (htab->elf.sgot)
2656     {
2657       asection *output_section = htab->elf.sgot->output_section;
2658 
2659       if (htab->elf.sgot->size > 0)
2660 	{
2661 	  /* Set the first entry in the global offset table to the address of
2662 	     the dynamic section.  */
2663 	  bfd_vma val = sdyn ? sec_addr (sdyn) : 0;
2664 	  bfd_put_NN (output_bfd, val, htab->elf.sgot->contents);
2665 	}
2666 
2667       elf_section_data (output_section)->this_hdr.sh_entsize = GOT_ENTRY_SIZE;
2668     }
2669 
2670   return TRUE;
2671 }
2672 
2673 /* Return address for Ith PLT stub in section PLT, for relocation REL
2674    or (bfd_vma) -1 if it should not be included.  */
2675 
2676 static bfd_vma
2677 riscv_elf_plt_sym_val (bfd_vma i, const asection *plt,
2678 		       const arelent *rel ATTRIBUTE_UNUSED)
2679 {
2680   return plt->vma + PLT_HEADER_SIZE + i * PLT_ENTRY_SIZE;
2681 }
2682 
2683 static enum elf_reloc_type_class
2684 riscv_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
2685 			const asection *rel_sec ATTRIBUTE_UNUSED,
2686 			const Elf_Internal_Rela *rela)
2687 {
2688   switch (ELFNN_R_TYPE (rela->r_info))
2689     {
2690     case R_RISCV_RELATIVE:
2691       return reloc_class_relative;
2692     case R_RISCV_JUMP_SLOT:
2693       return reloc_class_plt;
2694     case R_RISCV_COPY:
2695       return reloc_class_copy;
2696     default:
2697       return reloc_class_normal;
2698     }
2699 }
2700 
2701 /* Given the ELF header flags in FLAGS, it returns a string that describes the
2702    float ABI.  */
2703 
2704 static const char *
2705 riscv_float_abi_string (flagword flags)
2706 {
2707   switch (flags & EF_RISCV_FLOAT_ABI)
2708     {
2709     case EF_RISCV_FLOAT_ABI_SOFT:
2710       return "soft-float";
2711       break;
2712     case EF_RISCV_FLOAT_ABI_SINGLE:
2713       return "single-float";
2714       break;
2715     case EF_RISCV_FLOAT_ABI_DOUBLE:
2716       return "double-float";
2717       break;
2718     case EF_RISCV_FLOAT_ABI_QUAD:
2719       return "quad-float";
2720       break;
2721     default:
2722       abort ();
2723     }
2724 }
2725 
2726 /* The information of architecture attribute.  */
2727 static riscv_subset_list_t in_subsets;
2728 static riscv_subset_list_t out_subsets;
2729 static riscv_subset_list_t merged_subsets;
2730 
2731 /* Predicator for standard extension.  */
2732 
2733 static bfd_boolean
2734 riscv_std_ext_p (const char *name)
2735 {
2736   return (strlen (name) == 1) && (name[0] != 'x') && (name[0] != 's');
2737 }
2738 
2739 /* Predicator for non-standard extension.  */
2740 
2741 static bfd_boolean
2742 riscv_non_std_ext_p (const char *name)
2743 {
2744   return (strlen (name) >= 2) && (name[0] == 'x');
2745 }
2746 
2747 /* Predicator for standard supervisor extension.  */
2748 
2749 static bfd_boolean
2750 riscv_std_sv_ext_p (const char *name)
2751 {
2752   return (strlen (name) >= 2) && (name[0] == 's') && (name[1] != 'x');
2753 }
2754 
2755 /* Predicator for non-standard supervisor extension.  */
2756 
2757 static bfd_boolean
2758 riscv_non_std_sv_ext_p (const char *name)
2759 {
2760   return (strlen (name) >= 3) && (name[0] == 's') && (name[1] == 'x');
2761 }
2762 
2763 /* Error handler when version mis-match.  */
2764 
2765 static void
2766 riscv_version_mismatch (bfd *ibfd,
2767 			struct riscv_subset_t *in,
2768 			struct riscv_subset_t *out)
2769 {
2770   _bfd_error_handler
2771     (_("error: %pB: Mis-matched ISA version for '%s' extension. "
2772        "%d.%d vs %d.%d"),
2773        ibfd, in->name,
2774        in->major_version, in->minor_version,
2775        out->major_version, out->minor_version);
2776 }
2777 
2778 /* Return true if subset is 'i' or 'e'.  */
2779 
2780 static bfd_boolean
2781 riscv_i_or_e_p (bfd *ibfd,
2782 		const char *arch,
2783 		struct riscv_subset_t *subset)
2784 {
2785   if ((strcasecmp (subset->name, "e") != 0)
2786       && (strcasecmp (subset->name, "i") != 0))
2787     {
2788       _bfd_error_handler
2789 	(_("error: %pB: corrupted ISA string '%s'. "
2790 	   "First letter should be 'i' or 'e' but got '%s'."),
2791 	   ibfd, arch, subset->name);
2792       return FALSE;
2793     }
2794   return TRUE;
2795 }
2796 
2797 /* Merge standard extensions.
2798 
2799    Return Value:
2800      Return FALSE if failed to merge.
2801 
2802    Arguments:
2803      `bfd`: bfd handler.
2804      `in_arch`: Raw arch string for input object.
2805      `out_arch`: Raw arch string for output object.
2806      `pin`: subset list for input object, and it'll skip all merged subset after
2807             merge.
2808      `pout`: Like `pin`, but for output object.  */
2809 
2810 static bfd_boolean
2811 riscv_merge_std_ext (bfd *ibfd,
2812 		     const char *in_arch,
2813 		     const char *out_arch,
2814 		     struct riscv_subset_t **pin,
2815 		     struct riscv_subset_t **pout)
2816 {
2817   const char *standard_exts = riscv_supported_std_ext ();
2818   const char *p;
2819   struct riscv_subset_t *in = *pin;
2820   struct riscv_subset_t *out = *pout;
2821 
2822   /* First letter should be 'i' or 'e'.  */
2823   if (!riscv_i_or_e_p (ibfd, in_arch, in))
2824     return FALSE;
2825 
2826   if (!riscv_i_or_e_p (ibfd, out_arch, out))
2827     return FALSE;
2828 
2829   if (in->name[0] != out->name[0])
2830     {
2831       /* TODO: We might allow merge 'i' with 'e'.  */
2832       _bfd_error_handler
2833 	(_("error: %pB: Mis-matched ISA string to merge '%s' and '%s'."),
2834 	 ibfd, in->name, out->name);
2835       return FALSE;
2836     }
2837   else if ((in->major_version != out->major_version) ||
2838 	   (in->minor_version != out->minor_version))
2839     {
2840       /* TODO: Allow different merge policy.  */
2841       riscv_version_mismatch (ibfd, in, out);
2842       return FALSE;
2843     }
2844   else
2845     riscv_add_subset (&merged_subsets,
2846 		      in->name, in->major_version, in->minor_version);
2847 
2848   in = in->next;
2849   out = out->next;
2850 
2851   /* Handle standard extension first.  */
2852   for (p = standard_exts; *p; ++p)
2853     {
2854       char find_ext[2] = {*p, '\0'};
2855       struct riscv_subset_t *find_in =
2856 	riscv_lookup_subset (&in_subsets, find_ext);
2857       struct riscv_subset_t *find_out =
2858 	riscv_lookup_subset (&out_subsets, find_ext);
2859 
2860       if (find_in == NULL && find_out == NULL)
2861 	continue;
2862 
2863       /* Check version is same or not.  */
2864       /* TODO: Allow different merge policy.  */
2865       if ((find_in != NULL && find_out != NULL)
2866 	  && ((find_in->major_version != find_out->major_version)
2867 	      || (find_in->minor_version != find_out->minor_version)))
2868 	{
2869 	  riscv_version_mismatch (ibfd, in, out);
2870 	  return FALSE;
2871 	}
2872 
2873       struct riscv_subset_t *merged = find_in ? find_in : find_out;
2874       riscv_add_subset (&merged_subsets, merged->name,
2875 			merged->major_version, merged->minor_version);
2876     }
2877 
2878   /* Skip all standard extensions.  */
2879   while ((in != NULL) && riscv_std_ext_p (in->name)) in = in->next;
2880   while ((out != NULL) && riscv_std_ext_p (out->name)) out = out->next;
2881 
2882   *pin = in;
2883   *pout = out;
2884 
2885   return TRUE;
2886 }
2887 
2888 /* Merge non-standard and supervisor extensions.
2889    Return Value:
2890      Return FALSE if failed to merge.
2891 
2892    Arguments:
2893      `bfd`: bfd handler.
2894      `in_arch`: Raw arch string for input object.
2895      `out_arch`: Raw arch string for output object.
2896      `pin`: subset list for input object, and it'll skip all merged subset after
2897             merge.
2898      `pout`: Like `pin`, but for output object. */
2899 
2900 static bfd_boolean
2901 riscv_merge_non_std_and_sv_ext (bfd *ibfd,
2902 				riscv_subset_t **pin,
2903 				riscv_subset_t **pout,
2904 				bfd_boolean (*predicate_func) (const char *))
2905 {
2906   riscv_subset_t *in = *pin;
2907   riscv_subset_t *out = *pout;
2908 
2909   for (in = *pin; in != NULL && predicate_func (in->name); in = in->next)
2910     riscv_add_subset (&merged_subsets, in->name, in->major_version,
2911 		      in->minor_version);
2912 
2913   for (out = *pout; out != NULL && predicate_func (out->name); out = out->next)
2914     {
2915       riscv_subset_t *find_ext =
2916 	riscv_lookup_subset (&merged_subsets, out->name);
2917       if (find_ext != NULL)
2918 	{
2919 	  /* Check version is same or not. */
2920 	  /* TODO: Allow different merge policy.  */
2921 	  if ((find_ext->major_version != out->major_version)
2922 	      || (find_ext->minor_version != out->minor_version))
2923 	    {
2924 	      riscv_version_mismatch (ibfd, find_ext, out);
2925 	      return FALSE;
2926 	    }
2927 	}
2928       else
2929 	riscv_add_subset (&merged_subsets, out->name,
2930 			  out->major_version, out->minor_version);
2931     }
2932 
2933   *pin = in;
2934   *pout = out;
2935   return TRUE;
2936 }
2937 
2938 /* Merge Tag_RISCV_arch attribute.  */
2939 
2940 static char *
2941 riscv_merge_arch_attr_info (bfd *ibfd, char *in_arch, char *out_arch)
2942 {
2943   riscv_subset_t *in, *out;
2944   char *merged_arch_str;
2945 
2946   unsigned xlen_in, xlen_out;
2947   merged_subsets.head = NULL;
2948   merged_subsets.tail = NULL;
2949 
2950   riscv_parse_subset_t rpe_in;
2951   riscv_parse_subset_t rpe_out;
2952 
2953   rpe_in.subset_list = &in_subsets;
2954   rpe_in.error_handler = _bfd_error_handler;
2955   rpe_in.xlen = &xlen_in;
2956 
2957   rpe_out.subset_list = &out_subsets;
2958   rpe_out.error_handler = _bfd_error_handler;
2959   rpe_out.xlen = &xlen_out;
2960 
2961   if (in_arch == NULL && out_arch == NULL)
2962     return NULL;
2963 
2964   if (in_arch == NULL && out_arch != NULL)
2965     return out_arch;
2966 
2967   if (in_arch != NULL && out_arch == NULL)
2968     return in_arch;
2969 
2970   /* Parse subset from arch string.  */
2971   if (!riscv_parse_subset (&rpe_in, in_arch))
2972     return NULL;
2973 
2974   if (!riscv_parse_subset (&rpe_out, out_arch))
2975     return NULL;
2976 
2977   /* Checking XLEN.  */
2978   if (xlen_out != xlen_in)
2979     {
2980       _bfd_error_handler
2981 	(_("error: %pB: ISA string of input (%s) doesn't match "
2982 	   "output (%s)."), ibfd, in_arch, out_arch);
2983       return NULL;
2984     }
2985 
2986   /* Merge subset list.  */
2987   in = in_subsets.head;
2988   out = out_subsets.head;
2989 
2990   /* Merge standard extension.  */
2991   if (!riscv_merge_std_ext (ibfd, in_arch, out_arch, &in, &out))
2992     return NULL;
2993   /* Merge non-standard extension.  */
2994   if (!riscv_merge_non_std_and_sv_ext (ibfd, &in, &out, riscv_non_std_ext_p))
2995     return NULL;
2996   /* Merge standard supervisor extension.  */
2997   if (!riscv_merge_non_std_and_sv_ext (ibfd, &in, &out, riscv_std_sv_ext_p))
2998     return NULL;
2999   /* Merge non-standard supervisor extension.  */
3000   if (!riscv_merge_non_std_and_sv_ext (ibfd, &in, &out, riscv_non_std_sv_ext_p))
3001     return NULL;
3002 
3003   if (xlen_in != xlen_out)
3004     {
3005       _bfd_error_handler
3006 	(_("error: %pB: XLEN of input (%u) doesn't match "
3007 	   "output (%u)."), ibfd, xlen_in, xlen_out);
3008       return NULL;
3009     }
3010 
3011   if (xlen_in != ARCH_SIZE)
3012     {
3013       _bfd_error_handler
3014 	(_("error: %pB: Unsupported XLEN (%u), you might be "
3015 	   "using wrong emulation."), ibfd, xlen_in);
3016       return NULL;
3017     }
3018 
3019   merged_arch_str = riscv_arch_str (ARCH_SIZE, &merged_subsets);
3020 
3021   /* Release the subset lists.  */
3022   riscv_release_subset_list (&in_subsets);
3023   riscv_release_subset_list (&out_subsets);
3024   riscv_release_subset_list (&merged_subsets);
3025 
3026   return merged_arch_str;
3027 }
3028 
3029 /* Merge object attributes from IBFD into output_bfd of INFO.
3030    Raise an error if there are conflicting attributes.  */
3031 
3032 static bfd_boolean
3033 riscv_merge_attributes (bfd *ibfd, struct bfd_link_info *info)
3034 {
3035   bfd *obfd = info->output_bfd;
3036   obj_attribute *in_attr;
3037   obj_attribute *out_attr;
3038   bfd_boolean result = TRUE;
3039   const char *sec_name = get_elf_backend_data (ibfd)->obj_attrs_section;
3040   unsigned int i;
3041 
3042   /* Skip linker created files.  */
3043   if (ibfd->flags & BFD_LINKER_CREATED)
3044     return TRUE;
3045 
3046   /* Skip any input that doesn't have an attribute section.
3047      This enables to link object files without attribute section with
3048      any others.  */
3049   if (bfd_get_section_by_name (ibfd, sec_name) == NULL)
3050     return TRUE;
3051 
3052   if (!elf_known_obj_attributes_proc (obfd)[0].i)
3053     {
3054       /* This is the first object.  Copy the attributes.  */
3055       _bfd_elf_copy_obj_attributes (ibfd, obfd);
3056 
3057       out_attr = elf_known_obj_attributes_proc (obfd);
3058 
3059       /* Use the Tag_null value to indicate the attributes have been
3060 	 initialized.  */
3061       out_attr[0].i = 1;
3062 
3063       return TRUE;
3064     }
3065 
3066   in_attr = elf_known_obj_attributes_proc (ibfd);
3067   out_attr = elf_known_obj_attributes_proc (obfd);
3068 
3069   for (i = LEAST_KNOWN_OBJ_ATTRIBUTE; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
3070     {
3071     switch (i)
3072       {
3073       case Tag_RISCV_arch:
3074 	if (!out_attr[Tag_RISCV_arch].s)
3075 	  out_attr[Tag_RISCV_arch].s = in_attr[Tag_RISCV_arch].s;
3076 	else if (in_attr[Tag_RISCV_arch].s
3077 		 && out_attr[Tag_RISCV_arch].s)
3078 	  {
3079 	    /* Check arch compatible.  */
3080 	    char *merged_arch =
3081 		riscv_merge_arch_attr_info (ibfd,
3082 					    in_attr[Tag_RISCV_arch].s,
3083 					    out_attr[Tag_RISCV_arch].s);
3084 	    if (merged_arch == NULL)
3085 	      {
3086 		result = FALSE;
3087 		out_attr[Tag_RISCV_arch].s = "";
3088 	      }
3089 	    else
3090 	      out_attr[Tag_RISCV_arch].s = merged_arch;
3091 	  }
3092 	break;
3093       case Tag_RISCV_priv_spec:
3094       case Tag_RISCV_priv_spec_minor:
3095       case Tag_RISCV_priv_spec_revision:
3096 	if (out_attr[i].i != in_attr[i].i)
3097 	  {
3098 	    _bfd_error_handler
3099 	      (_("error: %pB: conflicting priv spec version "
3100 		 "(major/minor/revision)."), ibfd);
3101 	    result = FALSE;
3102 	  }
3103 	break;
3104       case Tag_RISCV_unaligned_access:
3105 	out_attr[i].i |= in_attr[i].i;
3106 	break;
3107       case Tag_RISCV_stack_align:
3108 	if (out_attr[i].i == 0)
3109 	  out_attr[i].i = in_attr[i].i;
3110 	else if (in_attr[i].i != 0
3111 		 && out_attr[i].i != 0
3112 		 && out_attr[i].i != in_attr[i].i)
3113 	  {
3114 	    _bfd_error_handler
3115 	      (_("error: %pB use %u-byte stack aligned but the output "
3116 		 "use %u-byte stack aligned."),
3117 	       ibfd, in_attr[i].i, out_attr[i].i);
3118 	    result = FALSE;
3119 	  }
3120 	break;
3121       default:
3122 	result &= _bfd_elf_merge_unknown_attribute_low (ibfd, obfd, i);
3123       }
3124 
3125       /* If out_attr was copied from in_attr then it won't have a type yet.  */
3126       if (in_attr[i].type && !out_attr[i].type)
3127 	out_attr[i].type = in_attr[i].type;
3128     }
3129 
3130   /* Merge Tag_compatibility attributes and any common GNU ones.  */
3131   if (!_bfd_elf_merge_object_attributes (ibfd, info))
3132     return FALSE;
3133 
3134   /* Check for any attributes not known on RISC-V.  */
3135   result &= _bfd_elf_merge_unknown_attribute_list (ibfd, obfd);
3136 
3137   return result;
3138 }
3139 
3140 /* Merge backend specific data from an object file to the output
3141    object file when linking.  */
3142 
3143 static bfd_boolean
3144 _bfd_riscv_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
3145 {
3146   bfd *obfd = info->output_bfd;
3147   flagword new_flags, old_flags;
3148 
3149   if (!is_riscv_elf (ibfd) || !is_riscv_elf (obfd))
3150     return TRUE;
3151 
3152   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
3153     {
3154       (*_bfd_error_handler)
3155 	(_("%pB: ABI is incompatible with that of the selected emulation:\n"
3156 	   "  target emulation `%s' does not match `%s'"),
3157 	 ibfd, bfd_get_target (ibfd), bfd_get_target (obfd));
3158       return FALSE;
3159     }
3160 
3161   if (!_bfd_elf_merge_object_attributes (ibfd, info))
3162     return FALSE;
3163 
3164   if (!riscv_merge_attributes (ibfd, info))
3165     return FALSE;
3166 
3167   new_flags = elf_elfheader (ibfd)->e_flags;
3168   old_flags = elf_elfheader (obfd)->e_flags;
3169 
3170   if (! elf_flags_init (obfd))
3171     {
3172       elf_flags_init (obfd) = TRUE;
3173       elf_elfheader (obfd)->e_flags = new_flags;
3174       return TRUE;
3175     }
3176 
3177   /* Check to see if the input BFD actually contains any sections.  If not,
3178      its flags may not have been initialized either, but it cannot actually
3179      cause any incompatibility.  Do not short-circuit dynamic objects; their
3180      section list may be emptied by elf_link_add_object_symbols.
3181 
3182      Also check to see if there are no code sections in the input.  In this
3183      case, there is no need to check for code specific flags.  */
3184   if (!(ibfd->flags & DYNAMIC))
3185     {
3186       bfd_boolean null_input_bfd = TRUE;
3187       bfd_boolean only_data_sections = TRUE;
3188       asection *sec;
3189 
3190       for (sec = ibfd->sections; sec != NULL; sec = sec->next)
3191 	{
3192 	  if ((bfd_section_flags (sec)
3193 	       & (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
3194 	      == (SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS))
3195 	    only_data_sections = FALSE;
3196 
3197 	  null_input_bfd = FALSE;
3198 	  break;
3199 	}
3200 
3201       if (null_input_bfd || only_data_sections)
3202 	return TRUE;
3203     }
3204 
3205   /* Disallow linking different float ABIs.  */
3206   if ((old_flags ^ new_flags) & EF_RISCV_FLOAT_ABI)
3207     {
3208       (*_bfd_error_handler)
3209 	(_("%pB: can't link %s modules with %s modules"), ibfd,
3210 	 riscv_float_abi_string (new_flags),
3211 	 riscv_float_abi_string (old_flags));
3212       goto fail;
3213     }
3214 
3215   /* Disallow linking RVE and non-RVE.  */
3216   if ((old_flags ^ new_flags) & EF_RISCV_RVE)
3217     {
3218       (*_bfd_error_handler)
3219        (_("%pB: can't link RVE with other target"), ibfd);
3220       goto fail;
3221     }
3222 
3223   /* Allow linking RVC and non-RVC, and keep the RVC flag.  */
3224   elf_elfheader (obfd)->e_flags |= new_flags & EF_RISCV_RVC;
3225 
3226   return TRUE;
3227 
3228 fail:
3229   bfd_set_error (bfd_error_bad_value);
3230   return FALSE;
3231 }
3232 
3233 /* Delete some bytes from a section while relaxing.  */
3234 
3235 static bfd_boolean
3236 riscv_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr, size_t count,
3237 			  struct bfd_link_info *link_info)
3238 {
3239   unsigned int i, symcount;
3240   bfd_vma toaddr = sec->size;
3241   struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (abfd);
3242   Elf_Internal_Shdr *symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
3243   unsigned int sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
3244   struct bfd_elf_section_data *data = elf_section_data (sec);
3245   bfd_byte *contents = data->this_hdr.contents;
3246 
3247   /* Actually delete the bytes.  */
3248   sec->size -= count;
3249   memmove (contents + addr, contents + addr + count, toaddr - addr - count);
3250 
3251   /* Adjust the location of all of the relocs.  Note that we need not
3252      adjust the addends, since all PC-relative references must be against
3253      symbols, which we will adjust below.  */
3254   for (i = 0; i < sec->reloc_count; i++)
3255     if (data->relocs[i].r_offset > addr && data->relocs[i].r_offset < toaddr)
3256       data->relocs[i].r_offset -= count;
3257 
3258   /* Adjust the local symbols defined in this section.  */
3259   for (i = 0; i < symtab_hdr->sh_info; i++)
3260     {
3261       Elf_Internal_Sym *sym = (Elf_Internal_Sym *) symtab_hdr->contents + i;
3262       if (sym->st_shndx == sec_shndx)
3263 	{
3264 	  /* If the symbol is in the range of memory we just moved, we
3265 	     have to adjust its value.  */
3266 	  if (sym->st_value > addr && sym->st_value <= toaddr)
3267 	    sym->st_value -= count;
3268 
3269 	  /* If the symbol *spans* the bytes we just deleted (i.e. its
3270 	     *end* is in the moved bytes but its *start* isn't), then we
3271 	     must adjust its size.
3272 
3273 	     This test needs to use the original value of st_value, otherwise
3274 	     we might accidentally decrease size when deleting bytes right
3275 	     before the symbol.  But since deleted relocs can't span across
3276 	     symbols, we can't have both a st_value and a st_size decrease,
3277 	     so it is simpler to just use an else.  */
3278 	  else if (sym->st_value <= addr
3279 		   && sym->st_value + sym->st_size > addr
3280 		   && sym->st_value + sym->st_size <= toaddr)
3281 	    sym->st_size -= count;
3282 	}
3283     }
3284 
3285   /* Now adjust the global symbols defined in this section.  */
3286   symcount = ((symtab_hdr->sh_size / sizeof (ElfNN_External_Sym))
3287 	      - symtab_hdr->sh_info);
3288 
3289   for (i = 0; i < symcount; i++)
3290     {
3291       struct elf_link_hash_entry *sym_hash = sym_hashes[i];
3292 
3293       /* The '--wrap SYMBOL' option is causing a pain when the object file,
3294 	 containing the definition of __wrap_SYMBOL, includes a direct
3295 	 call to SYMBOL as well. Since both __wrap_SYMBOL and SYMBOL reference
3296 	 the same symbol (which is __wrap_SYMBOL), but still exist as two
3297 	 different symbols in 'sym_hashes', we don't want to adjust
3298 	 the global symbol __wrap_SYMBOL twice.  */
3299       /* The same problem occurs with symbols that are versioned_hidden, as
3300 	 foo becomes an alias for foo@BAR, and hence they need the same
3301 	 treatment.  */
3302       if (link_info->wrap_hash != NULL
3303 	  || sym_hash->versioned == versioned_hidden)
3304 	{
3305 	  struct elf_link_hash_entry **cur_sym_hashes;
3306 
3307 	  /* Loop only over the symbols which have already been checked.  */
3308 	  for (cur_sym_hashes = sym_hashes; cur_sym_hashes < &sym_hashes[i];
3309 	       cur_sym_hashes++)
3310 	    {
3311 	      /* If the current symbol is identical to 'sym_hash', that means
3312 		 the symbol was already adjusted (or at least checked).  */
3313 	      if (*cur_sym_hashes == sym_hash)
3314 		break;
3315 	    }
3316 	  /* Don't adjust the symbol again.  */
3317 	  if (cur_sym_hashes < &sym_hashes[i])
3318 	    continue;
3319 	}
3320 
3321       if ((sym_hash->root.type == bfd_link_hash_defined
3322 	   || sym_hash->root.type == bfd_link_hash_defweak)
3323 	  && sym_hash->root.u.def.section == sec)
3324 	{
3325 	  /* As above, adjust the value if needed.  */
3326 	  if (sym_hash->root.u.def.value > addr
3327 	      && sym_hash->root.u.def.value <= toaddr)
3328 	    sym_hash->root.u.def.value -= count;
3329 
3330 	  /* As above, adjust the size if needed.  */
3331 	  else if (sym_hash->root.u.def.value <= addr
3332 		   && sym_hash->root.u.def.value + sym_hash->size > addr
3333 		   && sym_hash->root.u.def.value + sym_hash->size <= toaddr)
3334 	    sym_hash->size -= count;
3335 	}
3336     }
3337 
3338   return TRUE;
3339 }
3340 
3341 /* A second format for recording PC-relative hi relocations.  This stores the
3342    information required to relax them to GP-relative addresses.  */
3343 
3344 typedef struct riscv_pcgp_hi_reloc riscv_pcgp_hi_reloc;
3345 struct riscv_pcgp_hi_reloc
3346 {
3347   bfd_vma hi_sec_off;
3348   bfd_vma hi_addend;
3349   bfd_vma hi_addr;
3350   unsigned hi_sym;
3351   asection *sym_sec;
3352   bfd_boolean undefined_weak;
3353   riscv_pcgp_hi_reloc *next;
3354 };
3355 
3356 typedef struct riscv_pcgp_lo_reloc riscv_pcgp_lo_reloc;
3357 struct riscv_pcgp_lo_reloc
3358 {
3359   bfd_vma hi_sec_off;
3360   riscv_pcgp_lo_reloc *next;
3361 };
3362 
3363 typedef struct
3364 {
3365   riscv_pcgp_hi_reloc *hi;
3366   riscv_pcgp_lo_reloc *lo;
3367 } riscv_pcgp_relocs;
3368 
3369 /* Initialize the pcgp reloc info in P.  */
3370 
3371 static bfd_boolean
3372 riscv_init_pcgp_relocs (riscv_pcgp_relocs *p)
3373 {
3374   p->hi = NULL;
3375   p->lo = NULL;
3376   return TRUE;
3377 }
3378 
3379 /* Free the pcgp reloc info in P.  */
3380 
3381 static void
3382 riscv_free_pcgp_relocs (riscv_pcgp_relocs *p,
3383 			bfd *abfd ATTRIBUTE_UNUSED,
3384 			asection *sec ATTRIBUTE_UNUSED)
3385 {
3386   riscv_pcgp_hi_reloc *c;
3387   riscv_pcgp_lo_reloc *l;
3388 
3389   for (c = p->hi; c != NULL;)
3390     {
3391       riscv_pcgp_hi_reloc *next = c->next;
3392       free (c);
3393       c = next;
3394     }
3395 
3396   for (l = p->lo; l != NULL;)
3397     {
3398       riscv_pcgp_lo_reloc *next = l->next;
3399       free (l);
3400       l = next;
3401     }
3402 }
3403 
3404 /* Record pcgp hi part reloc info in P, using HI_SEC_OFF as the lookup index.
3405    The HI_ADDEND, HI_ADDR, HI_SYM, and SYM_SEC args contain info required to
3406    relax the corresponding lo part reloc.  */
3407 
3408 static bfd_boolean
3409 riscv_record_pcgp_hi_reloc (riscv_pcgp_relocs *p, bfd_vma hi_sec_off,
3410 			    bfd_vma hi_addend, bfd_vma hi_addr,
3411 			    unsigned hi_sym, asection *sym_sec,
3412 			    bfd_boolean undefined_weak)
3413 {
3414   riscv_pcgp_hi_reloc *new = bfd_malloc (sizeof(*new));
3415   if (!new)
3416     return FALSE;
3417   new->hi_sec_off = hi_sec_off;
3418   new->hi_addend = hi_addend;
3419   new->hi_addr = hi_addr;
3420   new->hi_sym = hi_sym;
3421   new->sym_sec = sym_sec;
3422   new->undefined_weak = undefined_weak;
3423   new->next = p->hi;
3424   p->hi = new;
3425   return TRUE;
3426 }
3427 
3428 /* Look up hi part pcgp reloc info in P, using HI_SEC_OFF as the lookup index.
3429    This is used by a lo part reloc to find the corresponding hi part reloc.  */
3430 
3431 static riscv_pcgp_hi_reloc *
3432 riscv_find_pcgp_hi_reloc(riscv_pcgp_relocs *p, bfd_vma hi_sec_off)
3433 {
3434   riscv_pcgp_hi_reloc *c;
3435 
3436   for (c = p->hi; c != NULL; c = c->next)
3437     if (c->hi_sec_off == hi_sec_off)
3438       return c;
3439   return NULL;
3440 }
3441 
3442 /* Record pcgp lo part reloc info in P, using HI_SEC_OFF as the lookup info.
3443    This is used to record relocs that can't be relaxed.  */
3444 
3445 static bfd_boolean
3446 riscv_record_pcgp_lo_reloc (riscv_pcgp_relocs *p, bfd_vma hi_sec_off)
3447 {
3448   riscv_pcgp_lo_reloc *new = bfd_malloc (sizeof(*new));
3449   if (!new)
3450     return FALSE;
3451   new->hi_sec_off = hi_sec_off;
3452   new->next = p->lo;
3453   p->lo = new;
3454   return TRUE;
3455 }
3456 
3457 /* Look up lo part pcgp reloc info in P, using HI_SEC_OFF as the lookup index.
3458    This is used by a hi part reloc to find the corresponding lo part reloc.  */
3459 
3460 static bfd_boolean
3461 riscv_find_pcgp_lo_reloc (riscv_pcgp_relocs *p, bfd_vma hi_sec_off)
3462 {
3463   riscv_pcgp_lo_reloc *c;
3464 
3465   for (c = p->lo; c != NULL; c = c->next)
3466     if (c->hi_sec_off == hi_sec_off)
3467       return TRUE;
3468   return FALSE;
3469 }
3470 
3471 typedef bfd_boolean (*relax_func_t) (bfd *, asection *, asection *,
3472 				     struct bfd_link_info *,
3473 				     Elf_Internal_Rela *,
3474 				     bfd_vma, bfd_vma, bfd_vma, bfd_boolean *,
3475 				     riscv_pcgp_relocs *,
3476 				     bfd_boolean undefined_weak);
3477 
3478 /* Relax AUIPC + JALR into JAL.  */
3479 
3480 static bfd_boolean
3481 _bfd_riscv_relax_call (bfd *abfd, asection *sec, asection *sym_sec,
3482 		       struct bfd_link_info *link_info,
3483 		       Elf_Internal_Rela *rel,
3484 		       bfd_vma symval,
3485 		       bfd_vma max_alignment,
3486 		       bfd_vma reserve_size ATTRIBUTE_UNUSED,
3487 		       bfd_boolean *again,
3488 		       riscv_pcgp_relocs *pcgp_relocs ATTRIBUTE_UNUSED,
3489 		       bfd_boolean undefined_weak ATTRIBUTE_UNUSED)
3490 {
3491   bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
3492   bfd_signed_vma foff = symval - (sec_addr (sec) + rel->r_offset);
3493   bfd_boolean near_zero = (symval + RISCV_IMM_REACH/2) < RISCV_IMM_REACH;
3494   bfd_vma auipc, jalr;
3495   int rd, r_type, len = 4, rvc = elf_elfheader (abfd)->e_flags & EF_RISCV_RVC;
3496 
3497   /* If the call crosses section boundaries, an alignment directive could
3498      cause the PC-relative offset to later increase, so we need to add in the
3499      max alignment of any section inclusive from the call to the target.
3500      Otherwise, we only need to use the alignment of the current section.  */
3501   if (VALID_UJTYPE_IMM (foff))
3502     {
3503       if (sym_sec->output_section == sec->output_section
3504 	  && sym_sec->output_section != bfd_abs_section_ptr)
3505 	max_alignment = (bfd_vma) 1 << sym_sec->output_section->alignment_power;
3506       foff += (foff < 0 ? -max_alignment : max_alignment);
3507     }
3508 
3509   /* See if this function call can be shortened.  */
3510   if (!VALID_UJTYPE_IMM (foff) && !(!bfd_link_pic (link_info) && near_zero))
3511     return TRUE;
3512 
3513   /* Shorten the function call.  */
3514   BFD_ASSERT (rel->r_offset + 8 <= sec->size);
3515 
3516   auipc = bfd_get_32 (abfd, contents + rel->r_offset);
3517   jalr = bfd_get_32 (abfd, contents + rel->r_offset + 4);
3518   rd = (jalr >> OP_SH_RD) & OP_MASK_RD;
3519   rvc = rvc && VALID_RVC_J_IMM (foff);
3520 
3521   /* C.J exists on RV32 and RV64, but C.JAL is RV32-only.  */
3522   rvc = rvc && (rd == 0 || (rd == X_RA && ARCH_SIZE == 32));
3523 
3524   if (rvc)
3525     {
3526       /* Relax to C.J[AL] rd, addr.  */
3527       r_type = R_RISCV_RVC_JUMP;
3528       auipc = rd == 0 ? MATCH_C_J : MATCH_C_JAL;
3529       len = 2;
3530     }
3531   else if (VALID_UJTYPE_IMM (foff))
3532     {
3533       /* Relax to JAL rd, addr.  */
3534       r_type = R_RISCV_JAL;
3535       auipc = MATCH_JAL | (rd << OP_SH_RD);
3536     }
3537   else /* near_zero */
3538     {
3539       /* Relax to JALR rd, x0, addr.  */
3540       r_type = R_RISCV_LO12_I;
3541       auipc = MATCH_JALR | (rd << OP_SH_RD);
3542     }
3543 
3544   /* Replace the R_RISCV_CALL reloc.  */
3545   rel->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel->r_info), r_type);
3546   /* Replace the AUIPC.  */
3547   bfd_put (8 * len, abfd, auipc, contents + rel->r_offset);
3548 
3549   /* Delete unnecessary JALR.  */
3550   *again = TRUE;
3551   return riscv_relax_delete_bytes (abfd, sec, rel->r_offset + len, 8 - len,
3552 				   link_info);
3553 }
3554 
3555 /* Traverse all output sections and return the max alignment.  */
3556 
3557 static bfd_vma
3558 _bfd_riscv_get_max_alignment (asection *sec)
3559 {
3560   unsigned int max_alignment_power = 0;
3561   asection *o;
3562 
3563   for (o = sec->output_section->owner->sections; o != NULL; o = o->next)
3564     {
3565       if (o->alignment_power > max_alignment_power)
3566 	max_alignment_power = o->alignment_power;
3567     }
3568 
3569   return (bfd_vma) 1 << max_alignment_power;
3570 }
3571 
3572 /* Relax non-PIC global variable references.  */
3573 
3574 static bfd_boolean
3575 _bfd_riscv_relax_lui (bfd *abfd,
3576 		      asection *sec,
3577 		      asection *sym_sec,
3578 		      struct bfd_link_info *link_info,
3579 		      Elf_Internal_Rela *rel,
3580 		      bfd_vma symval,
3581 		      bfd_vma max_alignment,
3582 		      bfd_vma reserve_size,
3583 		      bfd_boolean *again,
3584 		      riscv_pcgp_relocs *pcgp_relocs ATTRIBUTE_UNUSED,
3585 		      bfd_boolean undefined_weak)
3586 {
3587   bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
3588   bfd_vma gp = riscv_global_pointer_value (link_info);
3589   int use_rvc = elf_elfheader (abfd)->e_flags & EF_RISCV_RVC;
3590 
3591   BFD_ASSERT (rel->r_offset + 4 <= sec->size);
3592 
3593   if (gp)
3594     {
3595       /* If gp and the symbol are in the same output section, which is not the
3596 	 abs section, then consider only that output section's alignment.  */
3597       struct bfd_link_hash_entry *h =
3598 	bfd_link_hash_lookup (link_info->hash, RISCV_GP_SYMBOL, FALSE, FALSE,
3599 			      TRUE);
3600       if (h->u.def.section->output_section == sym_sec->output_section
3601 	  && sym_sec->output_section != bfd_abs_section_ptr)
3602 	max_alignment = (bfd_vma) 1 << sym_sec->output_section->alignment_power;
3603     }
3604 
3605   /* Is the reference in range of x0 or gp?
3606      Valid gp range conservatively because of alignment issue.  */
3607   if (undefined_weak
3608       || (VALID_ITYPE_IMM (symval)
3609 	  || (symval >= gp
3610 	      && VALID_ITYPE_IMM (symval - gp + max_alignment + reserve_size))
3611 	  || (symval < gp
3612 	      && VALID_ITYPE_IMM (symval - gp - max_alignment - reserve_size))))
3613     {
3614       unsigned sym = ELFNN_R_SYM (rel->r_info);
3615       switch (ELFNN_R_TYPE (rel->r_info))
3616 	{
3617 	case R_RISCV_LO12_I:
3618 	  if (undefined_weak)
3619 	    {
3620 	      /* Change the RS1 to zero.  */
3621 	      bfd_vma insn = bfd_get_32 (abfd, contents + rel->r_offset);
3622 	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
3623 	      bfd_put_32 (abfd, insn, contents + rel->r_offset);
3624 	    }
3625 	  else
3626 	    rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_I);
3627 	  return TRUE;
3628 
3629 	case R_RISCV_LO12_S:
3630 	  if (undefined_weak)
3631 	    {
3632 	      /* Change the RS1 to zero.  */
3633 	      bfd_vma insn = bfd_get_32 (abfd, contents + rel->r_offset);
3634 	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
3635 	      bfd_put_32 (abfd, insn, contents + rel->r_offset);
3636 	    }
3637 	  else
3638 	    rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_S);
3639 	  return TRUE;
3640 
3641 	case R_RISCV_HI20:
3642 	  /* We can delete the unnecessary LUI and reloc.  */
3643 	  rel->r_info = ELFNN_R_INFO (0, R_RISCV_NONE);
3644 	  *again = TRUE;
3645 	  return riscv_relax_delete_bytes (abfd, sec, rel->r_offset, 4,
3646 					   link_info);
3647 
3648 	default:
3649 	  abort ();
3650 	}
3651     }
3652 
3653   /* Can we relax LUI to C.LUI?  Alignment might move the section forward;
3654      account for this assuming page alignment at worst. In the presence of
3655      RELRO segment the linker aligns it by one page size, therefore sections
3656      after the segment can be moved more than one page. */
3657 
3658   if (use_rvc
3659       && ELFNN_R_TYPE (rel->r_info) == R_RISCV_HI20
3660       && VALID_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (symval))
3661       && VALID_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (symval)
3662 			    + (link_info->relro ? 2 * ELF_MAXPAGESIZE
3663 			       : ELF_MAXPAGESIZE)))
3664     {
3665       /* Replace LUI with C.LUI if legal (i.e., rd != x0 and rd != x2/sp).  */
3666       bfd_vma lui = bfd_get_32 (abfd, contents + rel->r_offset);
3667       unsigned rd = ((unsigned)lui >> OP_SH_RD) & OP_MASK_RD;
3668       if (rd == 0 || rd == X_SP)
3669 	return TRUE;
3670 
3671       lui = (lui & (OP_MASK_RD << OP_SH_RD)) | MATCH_C_LUI;
3672       bfd_put_32 (abfd, lui, contents + rel->r_offset);
3673 
3674       /* Replace the R_RISCV_HI20 reloc.  */
3675       rel->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel->r_info), R_RISCV_RVC_LUI);
3676 
3677       *again = TRUE;
3678       return riscv_relax_delete_bytes (abfd, sec, rel->r_offset + 2, 2,
3679 				       link_info);
3680     }
3681 
3682   return TRUE;
3683 }
3684 
3685 /* Relax non-PIC TLS references.  */
3686 
3687 static bfd_boolean
3688 _bfd_riscv_relax_tls_le (bfd *abfd,
3689 			 asection *sec,
3690 			 asection *sym_sec ATTRIBUTE_UNUSED,
3691 			 struct bfd_link_info *link_info,
3692 			 Elf_Internal_Rela *rel,
3693 			 bfd_vma symval,
3694 			 bfd_vma max_alignment ATTRIBUTE_UNUSED,
3695 			 bfd_vma reserve_size ATTRIBUTE_UNUSED,
3696 			 bfd_boolean *again,
3697 			 riscv_pcgp_relocs *prcel_relocs ATTRIBUTE_UNUSED,
3698 			 bfd_boolean undefined_weak ATTRIBUTE_UNUSED)
3699 {
3700   /* See if this symbol is in range of tp.  */
3701   if (RISCV_CONST_HIGH_PART (tpoff (link_info, symval)) != 0)
3702     return TRUE;
3703 
3704   BFD_ASSERT (rel->r_offset + 4 <= sec->size);
3705   switch (ELFNN_R_TYPE (rel->r_info))
3706     {
3707     case R_RISCV_TPREL_LO12_I:
3708       rel->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel->r_info), R_RISCV_TPREL_I);
3709       return TRUE;
3710 
3711     case R_RISCV_TPREL_LO12_S:
3712       rel->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel->r_info), R_RISCV_TPREL_S);
3713       return TRUE;
3714 
3715     case R_RISCV_TPREL_HI20:
3716     case R_RISCV_TPREL_ADD:
3717       /* We can delete the unnecessary instruction and reloc.  */
3718       rel->r_info = ELFNN_R_INFO (0, R_RISCV_NONE);
3719       *again = TRUE;
3720       return riscv_relax_delete_bytes (abfd, sec, rel->r_offset, 4, link_info);
3721 
3722     default:
3723       abort ();
3724     }
3725 }
3726 
3727 /* Implement R_RISCV_ALIGN by deleting excess alignment NOPs.  */
3728 
3729 static bfd_boolean
3730 _bfd_riscv_relax_align (bfd *abfd, asection *sec,
3731 			asection *sym_sec,
3732 			struct bfd_link_info *link_info,
3733 			Elf_Internal_Rela *rel,
3734 			bfd_vma symval,
3735 			bfd_vma max_alignment ATTRIBUTE_UNUSED,
3736 			bfd_vma reserve_size ATTRIBUTE_UNUSED,
3737 			bfd_boolean *again ATTRIBUTE_UNUSED,
3738 			riscv_pcgp_relocs *pcrel_relocs ATTRIBUTE_UNUSED,
3739 			bfd_boolean undefined_weak ATTRIBUTE_UNUSED)
3740 {
3741   bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
3742   bfd_vma alignment = 1, pos;
3743   while (alignment <= rel->r_addend)
3744     alignment *= 2;
3745 
3746   symval -= rel->r_addend;
3747   bfd_vma aligned_addr = ((symval - 1) & ~(alignment - 1)) + alignment;
3748   bfd_vma nop_bytes = aligned_addr - symval;
3749 
3750   /* Once we've handled an R_RISCV_ALIGN, we can't relax anything else.  */
3751   sec->sec_flg0 = TRUE;
3752 
3753   /* Make sure there are enough NOPs to actually achieve the alignment.  */
3754   if (rel->r_addend < nop_bytes)
3755     {
3756       _bfd_error_handler
3757 	(_("%pB(%pA+%#" PRIx64 "): %" PRId64 " bytes required for alignment "
3758 	   "to %" PRId64 "-byte boundary, but only %" PRId64 " present"),
3759 	 abfd, sym_sec, (uint64_t) rel->r_offset,
3760 	 (int64_t) nop_bytes, (int64_t) alignment, (int64_t) rel->r_addend);
3761       bfd_set_error (bfd_error_bad_value);
3762       return FALSE;
3763     }
3764 
3765   /* Delete the reloc.  */
3766   rel->r_info = ELFNN_R_INFO (0, R_RISCV_NONE);
3767 
3768   /* If the number of NOPs is already correct, there's nothing to do.  */
3769   if (nop_bytes == rel->r_addend)
3770     return TRUE;
3771 
3772   /* Write as many RISC-V NOPs as we need.  */
3773   for (pos = 0; pos < (nop_bytes & -4); pos += 4)
3774     bfd_put_32 (abfd, RISCV_NOP, contents + rel->r_offset + pos);
3775 
3776   /* Write a final RVC NOP if need be.  */
3777   if (nop_bytes % 4 != 0)
3778     bfd_put_16 (abfd, RVC_NOP, contents + rel->r_offset + pos);
3779 
3780   /* Delete the excess bytes.  */
3781   return riscv_relax_delete_bytes (abfd, sec, rel->r_offset + nop_bytes,
3782 				   rel->r_addend - nop_bytes, link_info);
3783 }
3784 
3785 /* Relax PC-relative references to GP-relative references.  */
3786 
3787 static bfd_boolean
3788 _bfd_riscv_relax_pc  (bfd *abfd ATTRIBUTE_UNUSED,
3789 		      asection *sec,
3790 		      asection *sym_sec,
3791 		      struct bfd_link_info *link_info,
3792 		      Elf_Internal_Rela *rel,
3793 		      bfd_vma symval,
3794 		      bfd_vma max_alignment,
3795 		      bfd_vma reserve_size,
3796 		      bfd_boolean *again ATTRIBUTE_UNUSED,
3797 		      riscv_pcgp_relocs *pcgp_relocs,
3798 		      bfd_boolean undefined_weak)
3799 {
3800   bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
3801   bfd_vma gp = riscv_global_pointer_value (link_info);
3802 
3803   BFD_ASSERT (rel->r_offset + 4 <= sec->size);
3804 
3805   /* Chain the _LO relocs to their cooresponding _HI reloc to compute the
3806    * actual target address.  */
3807   riscv_pcgp_hi_reloc hi_reloc;
3808   memset (&hi_reloc, 0, sizeof (hi_reloc));
3809   switch (ELFNN_R_TYPE (rel->r_info))
3810     {
3811     case R_RISCV_PCREL_LO12_I:
3812     case R_RISCV_PCREL_LO12_S:
3813       {
3814 	/* If the %lo has an addend, it isn't for the label pointing at the
3815 	   hi part instruction, but rather for the symbol pointed at by the
3816 	   hi part instruction.  So we must subtract it here for the lookup.
3817 	   It is still used below in the final symbol address.  */
3818 	bfd_vma hi_sec_off = symval - sec_addr (sym_sec) - rel->r_addend;
3819 	riscv_pcgp_hi_reloc *hi = riscv_find_pcgp_hi_reloc (pcgp_relocs,
3820 							    hi_sec_off);
3821 	if (hi == NULL)
3822 	  {
3823 	    riscv_record_pcgp_lo_reloc (pcgp_relocs, hi_sec_off);
3824 	    return TRUE;
3825 	  }
3826 
3827 	hi_reloc = *hi;
3828 	symval = hi_reloc.hi_addr;
3829 	sym_sec = hi_reloc.sym_sec;
3830 
3831 	/* We can not know whether the undefined weak symbol is referenced
3832 	   according to the information of R_RISCV_PCREL_LO12_I/S.  Therefore,
3833 	   we have to record the 'undefined_weak' flag when handling the
3834 	   corresponding R_RISCV_HI20 reloc in riscv_record_pcgp_hi_reloc.  */
3835 	undefined_weak = hi_reloc.undefined_weak;
3836       }
3837       break;
3838 
3839     case R_RISCV_PCREL_HI20:
3840       /* Mergeable symbols and code might later move out of range.  */
3841       if (! undefined_weak
3842 	  && sym_sec->flags & (SEC_MERGE | SEC_CODE))
3843 	return TRUE;
3844 
3845       /* If the cooresponding lo relocation has already been seen then it's not
3846        * safe to relax this relocation.  */
3847       if (riscv_find_pcgp_lo_reloc (pcgp_relocs, rel->r_offset))
3848 	return TRUE;
3849 
3850       break;
3851 
3852     default:
3853       abort ();
3854     }
3855 
3856   if (gp)
3857     {
3858       /* If gp and the symbol are in the same output section, which is not the
3859 	 abs section, then consider only that output section's alignment.  */
3860       struct bfd_link_hash_entry *h =
3861 	bfd_link_hash_lookup (link_info->hash, RISCV_GP_SYMBOL, FALSE, FALSE,
3862 			      TRUE);
3863       if (h->u.def.section->output_section == sym_sec->output_section
3864 	  && sym_sec->output_section != bfd_abs_section_ptr)
3865 	max_alignment = (bfd_vma) 1 << sym_sec->output_section->alignment_power;
3866     }
3867 
3868   /* Is the reference in range of x0 or gp?
3869      Valid gp range conservatively because of alignment issue.  */
3870   if (undefined_weak
3871       || (VALID_ITYPE_IMM (symval)
3872 	  || (symval >= gp
3873 	      && VALID_ITYPE_IMM (symval - gp + max_alignment + reserve_size))
3874 	  || (symval < gp
3875 	      && VALID_ITYPE_IMM (symval - gp - max_alignment - reserve_size))))
3876     {
3877       unsigned sym = hi_reloc.hi_sym;
3878       switch (ELFNN_R_TYPE (rel->r_info))
3879 	{
3880 	case R_RISCV_PCREL_LO12_I:
3881 	  if (undefined_weak)
3882 	    {
3883 	      /* Change the RS1 to zero, and then modify the relocation
3884 		 type to R_RISCV_LO12_I.  */
3885 	      bfd_vma insn = bfd_get_32 (abfd, contents + rel->r_offset);
3886 	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
3887 	      bfd_put_32 (abfd, insn, contents + rel->r_offset);
3888 	      rel->r_info = ELFNN_R_INFO (sym, R_RISCV_LO12_I);
3889 	      rel->r_addend = hi_reloc.hi_addend;
3890 	    }
3891 	  else
3892 	    {
3893 	      rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_I);
3894 	      rel->r_addend += hi_reloc.hi_addend;
3895 	    }
3896 	  return TRUE;
3897 
3898 	case R_RISCV_PCREL_LO12_S:
3899 	  if (undefined_weak)
3900 	    {
3901 	      /* Change the RS1 to zero, and then modify the relocation
3902 		 type to R_RISCV_LO12_S.  */
3903 	      bfd_vma insn = bfd_get_32 (abfd, contents + rel->r_offset);
3904 	      insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
3905 	      bfd_put_32 (abfd, insn, contents + rel->r_offset);
3906 	      rel->r_info = ELFNN_R_INFO (sym, R_RISCV_LO12_S);
3907 	      rel->r_addend = hi_reloc.hi_addend;
3908 	    }
3909 	  else
3910 	    {
3911 	      rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_S);
3912 	      rel->r_addend += hi_reloc.hi_addend;
3913 	    }
3914 	  return TRUE;
3915 
3916 	case R_RISCV_PCREL_HI20:
3917 	  riscv_record_pcgp_hi_reloc (pcgp_relocs,
3918 				      rel->r_offset,
3919 				      rel->r_addend,
3920 				      symval,
3921 				      ELFNN_R_SYM(rel->r_info),
3922 				      sym_sec,
3923 				      undefined_weak);
3924 	  /* We can delete the unnecessary AUIPC and reloc.  */
3925 	  rel->r_info = ELFNN_R_INFO (0, R_RISCV_DELETE);
3926 	  rel->r_addend = 4;
3927 	  return TRUE;
3928 
3929 	default:
3930 	  abort ();
3931 	}
3932     }
3933 
3934   return TRUE;
3935 }
3936 
3937 /* Relax PC-relative references to GP-relative references.  */
3938 
3939 static bfd_boolean
3940 _bfd_riscv_relax_delete (bfd *abfd,
3941 			 asection *sec,
3942 			 asection *sym_sec ATTRIBUTE_UNUSED,
3943 			 struct bfd_link_info *link_info,
3944 			 Elf_Internal_Rela *rel,
3945 			 bfd_vma symval ATTRIBUTE_UNUSED,
3946 			 bfd_vma max_alignment ATTRIBUTE_UNUSED,
3947 			 bfd_vma reserve_size ATTRIBUTE_UNUSED,
3948 			 bfd_boolean *again ATTRIBUTE_UNUSED,
3949 			 riscv_pcgp_relocs *pcgp_relocs ATTRIBUTE_UNUSED,
3950 			 bfd_boolean undefined_weak ATTRIBUTE_UNUSED)
3951 {
3952   if (!riscv_relax_delete_bytes(abfd, sec, rel->r_offset, rel->r_addend,
3953 				link_info))
3954     return FALSE;
3955   rel->r_info = ELFNN_R_INFO(0, R_RISCV_NONE);
3956   return TRUE;
3957 }
3958 
3959 /* Relax a section.  Pass 0 shortens code sequences unless disabled.  Pass 1
3960    deletes the bytes that pass 0 made obselete.  Pass 2, which cannot be
3961    disabled, handles code alignment directives.  */
3962 
3963 static bfd_boolean
3964 _bfd_riscv_relax_section (bfd *abfd, asection *sec,
3965 			  struct bfd_link_info *info,
3966 			  bfd_boolean *again)
3967 {
3968   Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (abfd);
3969   struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (info);
3970   struct bfd_elf_section_data *data = elf_section_data (sec);
3971   Elf_Internal_Rela *relocs;
3972   bfd_boolean ret = FALSE;
3973   unsigned int i;
3974   bfd_vma max_alignment, reserve_size = 0;
3975   riscv_pcgp_relocs pcgp_relocs;
3976 
3977   *again = FALSE;
3978 
3979   if (bfd_link_relocatable (info)
3980       || sec->sec_flg0
3981       || (sec->flags & SEC_RELOC) == 0
3982       || sec->reloc_count == 0
3983       || (info->disable_target_specific_optimizations
3984 	  && info->relax_pass == 0))
3985     return TRUE;
3986 
3987   riscv_init_pcgp_relocs (&pcgp_relocs);
3988 
3989   /* Read this BFD's relocs if we haven't done so already.  */
3990   if (data->relocs)
3991     relocs = data->relocs;
3992   else if (!(relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
3993 						 info->keep_memory)))
3994     goto fail;
3995 
3996   if (htab)
3997     {
3998       max_alignment = htab->max_alignment;
3999       if (max_alignment == (bfd_vma) -1)
4000 	{
4001 	  max_alignment = _bfd_riscv_get_max_alignment (sec);
4002 	  htab->max_alignment = max_alignment;
4003 	}
4004     }
4005   else
4006     max_alignment = _bfd_riscv_get_max_alignment (sec);
4007 
4008   /* Examine and consider relaxing each reloc.  */
4009   for (i = 0; i < sec->reloc_count; i++)
4010     {
4011       asection *sym_sec;
4012       Elf_Internal_Rela *rel = relocs + i;
4013       relax_func_t relax_func;
4014       int type = ELFNN_R_TYPE (rel->r_info);
4015       bfd_vma symval;
4016       char symtype;
4017       bfd_boolean undefined_weak = FALSE;
4018 
4019       relax_func = NULL;
4020       if (info->relax_pass == 0)
4021 	{
4022 	  if (type == R_RISCV_CALL || type == R_RISCV_CALL_PLT)
4023 	    relax_func = _bfd_riscv_relax_call;
4024 	  else if (type == R_RISCV_HI20
4025 		   || type == R_RISCV_LO12_I
4026 		   || type == R_RISCV_LO12_S)
4027 	    relax_func = _bfd_riscv_relax_lui;
4028 	  else if (!bfd_link_pic(info)
4029 		   && (type == R_RISCV_PCREL_HI20
4030 		   || type == R_RISCV_PCREL_LO12_I
4031 		   || type == R_RISCV_PCREL_LO12_S))
4032 	    relax_func = _bfd_riscv_relax_pc;
4033 	  else if (type == R_RISCV_TPREL_HI20
4034 		   || type == R_RISCV_TPREL_ADD
4035 		   || type == R_RISCV_TPREL_LO12_I
4036 		   || type == R_RISCV_TPREL_LO12_S)
4037 	    relax_func = _bfd_riscv_relax_tls_le;
4038 	  else
4039 	    continue;
4040 
4041 	  /* Only relax this reloc if it is paired with R_RISCV_RELAX.  */
4042 	  if (i == sec->reloc_count - 1
4043 	      || ELFNN_R_TYPE ((rel + 1)->r_info) != R_RISCV_RELAX
4044 	      || rel->r_offset != (rel + 1)->r_offset)
4045 	    continue;
4046 
4047 	  /* Skip over the R_RISCV_RELAX.  */
4048 	  i++;
4049 	}
4050       else if (info->relax_pass == 1 && type == R_RISCV_DELETE)
4051 	relax_func = _bfd_riscv_relax_delete;
4052       else if (info->relax_pass == 2 && type == R_RISCV_ALIGN)
4053 	relax_func = _bfd_riscv_relax_align;
4054       else
4055 	continue;
4056 
4057       data->relocs = relocs;
4058 
4059       /* Read this BFD's contents if we haven't done so already.  */
4060       if (!data->this_hdr.contents
4061 	  && !bfd_malloc_and_get_section (abfd, sec, &data->this_hdr.contents))
4062 	goto fail;
4063 
4064       /* Read this BFD's symbols if we haven't done so already.  */
4065       if (symtab_hdr->sh_info != 0
4066 	  && !symtab_hdr->contents
4067 	  && !(symtab_hdr->contents =
4068 	       (unsigned char *) bfd_elf_get_elf_syms (abfd, symtab_hdr,
4069 						       symtab_hdr->sh_info,
4070 						       0, NULL, NULL, NULL)))
4071 	goto fail;
4072 
4073       /* Get the value of the symbol referred to by the reloc.  */
4074       if (ELFNN_R_SYM (rel->r_info) < symtab_hdr->sh_info)
4075 	{
4076 	  /* A local symbol.  */
4077 	  Elf_Internal_Sym *isym = ((Elf_Internal_Sym *) symtab_hdr->contents
4078 				    + ELFNN_R_SYM (rel->r_info));
4079 	  reserve_size = (isym->st_size - rel->r_addend) > isym->st_size
4080 	    ? 0 : isym->st_size - rel->r_addend;
4081 
4082 	  if (isym->st_shndx == SHN_UNDEF)
4083 	    sym_sec = sec, symval = rel->r_offset;
4084 	  else
4085 	    {
4086 	      BFD_ASSERT (isym->st_shndx < elf_numsections (abfd));
4087 	      sym_sec = elf_elfsections (abfd)[isym->st_shndx]->bfd_section;
4088 #if 0
4089 	      /* The purpose of this code is unknown.  It breaks linker scripts
4090 		 for embedded development that place sections at address zero.
4091 		 This code is believed to be unnecessary.  Disabling it but not
4092 		 yet removing it, in case something breaks.  */
4093 	      if (sec_addr (sym_sec) == 0)
4094 		continue;
4095 #endif
4096 	      symval = isym->st_value;
4097 	    }
4098 	  symtype = ELF_ST_TYPE (isym->st_info);
4099 	}
4100       else
4101 	{
4102 	  unsigned long indx;
4103 	  struct elf_link_hash_entry *h;
4104 
4105 	  indx = ELFNN_R_SYM (rel->r_info) - symtab_hdr->sh_info;
4106 	  h = elf_sym_hashes (abfd)[indx];
4107 
4108 	  while (h->root.type == bfd_link_hash_indirect
4109 		 || h->root.type == bfd_link_hash_warning)
4110 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
4111 
4112 	  if (h->root.type == bfd_link_hash_undefweak
4113 	      && (relax_func == _bfd_riscv_relax_lui
4114 		  || relax_func == _bfd_riscv_relax_pc))
4115 	    {
4116 	      /* For the lui and auipc relaxations, since the symbol
4117 		 value of an undefined weak symbol is always be zero,
4118 		 we can optimize the patterns into a single LI/MV/ADDI
4119 		 instruction.
4120 
4121 		 Note that, creating shared libraries and pie output may
4122 		 break the rule above.  Fortunately, since we do not relax
4123 		 pc relocs when creating shared libraries and pie output,
4124 		 and the absolute address access for R_RISCV_HI20 isn't
4125 		 allowed when "-fPIC" is set, the problem of creating shared
4126 		 libraries can not happen currently.  Once we support the
4127 		 auipc relaxations when creating shared libraries, then we will
4128 		 need the more rigorous checking for this optimization.  */
4129 	      undefined_weak = TRUE;
4130 	    }
4131 
4132 	  /* This line has to match the check in riscv_elf_relocate_section
4133 	     in the R_RISCV_CALL[_PLT] case.  */
4134 	  if (bfd_link_pic (info) && h->plt.offset != MINUS_ONE)
4135 	    {
4136 	      sym_sec = htab->elf.splt;
4137 	      symval = h->plt.offset;
4138 	    }
4139 	  else if (undefined_weak)
4140 	    {
4141 	      symval = 0;
4142 	      sym_sec = bfd_und_section_ptr;
4143 	    }
4144 	  else if (h->root.u.def.section->output_section == NULL
4145 		   || (h->root.type != bfd_link_hash_defined
4146 		       && h->root.type != bfd_link_hash_defweak))
4147 	    continue;
4148 	  else
4149 	    {
4150 	      symval = h->root.u.def.value;
4151 	      sym_sec = h->root.u.def.section;
4152 	    }
4153 
4154 	  if (h->type != STT_FUNC)
4155 	    reserve_size =
4156 	      (h->size - rel->r_addend) > h->size ? 0 : h->size - rel->r_addend;
4157 	  symtype = h->type;
4158 	}
4159 
4160       if (sym_sec->sec_info_type == SEC_INFO_TYPE_MERGE
4161           && (sym_sec->flags & SEC_MERGE))
4162 	{
4163 	  /* At this stage in linking, no SEC_MERGE symbol has been
4164 	     adjusted, so all references to such symbols need to be
4165 	     passed through _bfd_merged_section_offset.  (Later, in
4166 	     relocate_section, all SEC_MERGE symbols *except* for
4167 	     section symbols have been adjusted.)
4168 
4169 	     gas may reduce relocations against symbols in SEC_MERGE
4170 	     sections to a relocation against the section symbol when
4171 	     the original addend was zero.  When the reloc is against
4172 	     a section symbol we should include the addend in the
4173 	     offset passed to _bfd_merged_section_offset, since the
4174 	     location of interest is the original symbol.  On the
4175 	     other hand, an access to "sym+addend" where "sym" is not
4176 	     a section symbol should not include the addend;  Such an
4177 	     access is presumed to be an offset from "sym";  The
4178 	     location of interest is just "sym".  */
4179 	   if (symtype == STT_SECTION)
4180 	     symval += rel->r_addend;
4181 
4182 	   symval = _bfd_merged_section_offset (abfd, &sym_sec,
4183 						elf_section_data (sym_sec)->sec_info,
4184 						symval);
4185 
4186 	   if (symtype != STT_SECTION)
4187 	     symval += rel->r_addend;
4188 	}
4189       else
4190 	symval += rel->r_addend;
4191 
4192       symval += sec_addr (sym_sec);
4193 
4194       if (!relax_func (abfd, sec, sym_sec, info, rel, symval,
4195 		       max_alignment, reserve_size, again,
4196 		       &pcgp_relocs, undefined_weak))
4197 	goto fail;
4198     }
4199 
4200   ret = TRUE;
4201 
4202 fail:
4203   if (relocs != data->relocs)
4204     free (relocs);
4205   riscv_free_pcgp_relocs(&pcgp_relocs, abfd, sec);
4206 
4207   return ret;
4208 }
4209 
4210 #if ARCH_SIZE == 32
4211 # define PRSTATUS_SIZE			204
4212 # define PRSTATUS_OFFSET_PR_CURSIG	12
4213 # define PRSTATUS_OFFSET_PR_PID		24
4214 # define PRSTATUS_OFFSET_PR_REG		72
4215 # define ELF_GREGSET_T_SIZE		128
4216 # define PRPSINFO_SIZE			128
4217 # define PRPSINFO_OFFSET_PR_PID		16
4218 # define PRPSINFO_OFFSET_PR_FNAME	32
4219 # define PRPSINFO_OFFSET_PR_PSARGS	48
4220 #else
4221 # define PRSTATUS_SIZE			376
4222 # define PRSTATUS_OFFSET_PR_CURSIG	12
4223 # define PRSTATUS_OFFSET_PR_PID		32
4224 # define PRSTATUS_OFFSET_PR_REG		112
4225 # define ELF_GREGSET_T_SIZE		256
4226 # define PRPSINFO_SIZE			136
4227 # define PRPSINFO_OFFSET_PR_PID		24
4228 # define PRPSINFO_OFFSET_PR_FNAME	40
4229 # define PRPSINFO_OFFSET_PR_PSARGS	56
4230 #endif
4231 
4232 /* Support for core dump NOTE sections.  */
4233 
4234 static bfd_boolean
4235 riscv_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
4236 {
4237   switch (note->descsz)
4238     {
4239       default:
4240 	return FALSE;
4241 
4242       case PRSTATUS_SIZE:  /* sizeof(struct elf_prstatus) on Linux/RISC-V.  */
4243 	/* pr_cursig */
4244 	elf_tdata (abfd)->core->signal
4245 	  = bfd_get_16 (abfd, note->descdata + PRSTATUS_OFFSET_PR_CURSIG);
4246 
4247 	/* pr_pid */
4248 	elf_tdata (abfd)->core->lwpid
4249 	  = bfd_get_32 (abfd, note->descdata + PRSTATUS_OFFSET_PR_PID);
4250 	break;
4251     }
4252 
4253   /* Make a ".reg/999" section.  */
4254   return _bfd_elfcore_make_pseudosection (abfd, ".reg", ELF_GREGSET_T_SIZE,
4255 					  note->descpos + PRSTATUS_OFFSET_PR_REG);
4256 }
4257 
4258 static bfd_boolean
4259 riscv_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
4260 {
4261   switch (note->descsz)
4262     {
4263       default:
4264 	return FALSE;
4265 
4266       case PRPSINFO_SIZE: /* sizeof(struct elf_prpsinfo) on Linux/RISC-V.  */
4267 	/* pr_pid */
4268 	elf_tdata (abfd)->core->pid
4269 	  = bfd_get_32 (abfd, note->descdata + PRPSINFO_OFFSET_PR_PID);
4270 
4271 	/* pr_fname */
4272 	elf_tdata (abfd)->core->program = _bfd_elfcore_strndup
4273 	  (abfd, note->descdata + PRPSINFO_OFFSET_PR_FNAME, 16);
4274 
4275 	/* pr_psargs */
4276 	elf_tdata (abfd)->core->command = _bfd_elfcore_strndup
4277 	  (abfd, note->descdata + PRPSINFO_OFFSET_PR_PSARGS, 80);
4278 	break;
4279     }
4280 
4281   /* Note that for some reason, a spurious space is tacked
4282      onto the end of the args in some (at least one anyway)
4283      implementations, so strip it off if it exists.  */
4284 
4285   {
4286     char *command = elf_tdata (abfd)->core->command;
4287     int n = strlen (command);
4288 
4289     if (0 < n && command[n - 1] == ' ')
4290       command[n - 1] = '\0';
4291   }
4292 
4293   return TRUE;
4294 }
4295 
4296 /* Set the right mach type.  */
4297 static bfd_boolean
4298 riscv_elf_object_p (bfd *abfd)
4299 {
4300   /* There are only two mach types in RISCV currently.  */
4301   if (strcmp (abfd->xvec->name, "elf32-littleriscv") == 0)
4302     bfd_default_set_arch_mach (abfd, bfd_arch_riscv, bfd_mach_riscv32);
4303   else
4304     bfd_default_set_arch_mach (abfd, bfd_arch_riscv, bfd_mach_riscv64);
4305 
4306   return TRUE;
4307 }
4308 
4309 /* Determine whether an object attribute tag takes an integer, a
4310    string or both.  */
4311 
4312 static int
4313 riscv_elf_obj_attrs_arg_type (int tag)
4314 {
4315   return (tag & 1) != 0 ? ATTR_TYPE_FLAG_STR_VAL : ATTR_TYPE_FLAG_INT_VAL;
4316 }
4317 
4318 #define TARGET_LITTLE_SYM		riscv_elfNN_vec
4319 #define TARGET_LITTLE_NAME		"elfNN-littleriscv"
4320 
4321 #define elf_backend_reloc_type_class	     riscv_reloc_type_class
4322 
4323 #define bfd_elfNN_bfd_reloc_name_lookup	     riscv_reloc_name_lookup
4324 #define bfd_elfNN_bfd_link_hash_table_create riscv_elf_link_hash_table_create
4325 #define bfd_elfNN_bfd_reloc_type_lookup	     riscv_reloc_type_lookup
4326 #define bfd_elfNN_bfd_merge_private_bfd_data \
4327   _bfd_riscv_elf_merge_private_bfd_data
4328 
4329 #define elf_backend_copy_indirect_symbol     riscv_elf_copy_indirect_symbol
4330 #define elf_backend_create_dynamic_sections  riscv_elf_create_dynamic_sections
4331 #define elf_backend_check_relocs	     riscv_elf_check_relocs
4332 #define elf_backend_adjust_dynamic_symbol    riscv_elf_adjust_dynamic_symbol
4333 #define elf_backend_size_dynamic_sections    riscv_elf_size_dynamic_sections
4334 #define elf_backend_relocate_section	     riscv_elf_relocate_section
4335 #define elf_backend_finish_dynamic_symbol    riscv_elf_finish_dynamic_symbol
4336 #define elf_backend_finish_dynamic_sections  riscv_elf_finish_dynamic_sections
4337 #define elf_backend_gc_mark_hook	     riscv_elf_gc_mark_hook
4338 #define elf_backend_plt_sym_val		     riscv_elf_plt_sym_val
4339 #define elf_backend_grok_prstatus	     riscv_elf_grok_prstatus
4340 #define elf_backend_grok_psinfo		     riscv_elf_grok_psinfo
4341 #define elf_backend_object_p		     riscv_elf_object_p
4342 #define elf_info_to_howto_rel		     NULL
4343 #define elf_info_to_howto		     riscv_info_to_howto_rela
4344 #define bfd_elfNN_bfd_relax_section	     _bfd_riscv_relax_section
4345 
4346 #define elf_backend_init_index_section	     _bfd_elf_init_1_index_section
4347 
4348 #define elf_backend_can_gc_sections	1
4349 #define elf_backend_can_refcount	1
4350 #define elf_backend_want_got_plt	1
4351 #define elf_backend_plt_readonly	1
4352 #define elf_backend_plt_alignment	4
4353 #define elf_backend_want_plt_sym	1
4354 #define elf_backend_got_header_size	(ARCH_SIZE / 8)
4355 #define elf_backend_want_dynrelro	1
4356 #define elf_backend_rela_normal		1
4357 #define elf_backend_default_execstack	0
4358 
4359 #undef  elf_backend_obj_attrs_vendor
4360 #define elf_backend_obj_attrs_vendor            "riscv"
4361 #undef  elf_backend_obj_attrs_arg_type
4362 #define elf_backend_obj_attrs_arg_type          riscv_elf_obj_attrs_arg_type
4363 #undef  elf_backend_obj_attrs_section_type
4364 #define elf_backend_obj_attrs_section_type      SHT_RISCV_ATTRIBUTES
4365 #undef  elf_backend_obj_attrs_section
4366 #define elf_backend_obj_attrs_section           ".riscv.attributes"
4367 
4368 #include "elfNN-target.h"
4369