Add support for RISC-V architecture.
[deliverable/binutils-gdb.git] / bfd / elfnn-riscv.c
CommitLineData
e23eba97
NC
1/* RISC-V-specific support for NN-bit ELF.
2 Copyright 2011-2016 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#define ARCH_SIZE NN
36
37#define MINUS_ONE ((bfd_vma)0 - 1)
38
39#define RISCV_ELF_LOG_WORD_BYTES (ARCH_SIZE == 32 ? 2 : 3)
40
41#define RISCV_ELF_WORD_BYTES (1 << RISCV_ELF_LOG_WORD_BYTES)
42
43/* The name of the dynamic interpreter. This is put in the .interp
44 section. */
45
46#define ELF64_DYNAMIC_INTERPRETER "/lib/ld.so.1"
47#define ELF32_DYNAMIC_INTERPRETER "/lib32/ld.so.1"
48
49#define ELF_ARCH bfd_arch_riscv
50#define ELF_TARGET_ID RISCV_ELF_DATA
51#define ELF_MACHINE_CODE EM_RISCV
52#define ELF_MAXPAGESIZE 0x1000
53#define ELF_COMMONPAGESIZE 0x1000
54
55/* The RISC-V linker needs to keep track of the number of relocs that it
56 decides to copy as dynamic relocs in check_relocs for each symbol.
57 This is so that it can later discard them if they are found to be
58 unnecessary. We store the information in a field extending the
59 regular ELF linker hash table. */
60
61struct riscv_elf_dyn_relocs
62{
63 struct riscv_elf_dyn_relocs *next;
64
65 /* The input section of the reloc. */
66 asection *sec;
67
68 /* Total number of relocs copied for the input section. */
69 bfd_size_type count;
70
71 /* Number of pc-relative relocs copied for the input section. */
72 bfd_size_type pc_count;
73};
74
75/* RISC-V ELF linker hash entry. */
76
77struct riscv_elf_link_hash_entry
78{
79 struct elf_link_hash_entry elf;
80
81 /* Track dynamic relocs copied for this symbol. */
82 struct riscv_elf_dyn_relocs *dyn_relocs;
83
84#define GOT_UNKNOWN 0
85#define GOT_NORMAL 1
86#define GOT_TLS_GD 2
87#define GOT_TLS_IE 4
88#define GOT_TLS_LE 8
89 char tls_type;
90};
91
92#define riscv_elf_hash_entry(ent) \
93 ((struct riscv_elf_link_hash_entry *)(ent))
94
95struct _bfd_riscv_elf_obj_tdata
96{
97 struct elf_obj_tdata root;
98
99 /* tls_type for each local got entry. */
100 char *local_got_tls_type;
101};
102
103#define _bfd_riscv_elf_tdata(abfd) \
104 ((struct _bfd_riscv_elf_obj_tdata *) (abfd)->tdata.any)
105
106#define _bfd_riscv_elf_local_got_tls_type(abfd) \
107 (_bfd_riscv_elf_tdata (abfd)->local_got_tls_type)
108
109#define _bfd_riscv_elf_tls_type(abfd, h, symndx) \
110 (*((h) != NULL ? &riscv_elf_hash_entry (h)->tls_type \
111 : &_bfd_riscv_elf_local_got_tls_type (abfd) [symndx]))
112
113#define is_riscv_elf(bfd) \
114 (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
115 && elf_tdata (bfd) != NULL \
116 && elf_object_id (bfd) == RISCV_ELF_DATA)
117
118#include "elf/common.h"
119#include "elf/internal.h"
120
121struct riscv_elf_link_hash_table
122{
123 struct elf_link_hash_table elf;
124
125 /* Short-cuts to get to dynamic linker sections. */
126 asection *sdynbss;
127 asection *srelbss;
128 asection *sdyntdata;
129
130 /* Small local sym to section mapping cache. */
131 struct sym_cache sym_cache;
132};
133
134
135/* Get the RISC-V ELF linker hash table from a link_info structure. */
136#define riscv_elf_hash_table(p) \
137 (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
138 == RISCV_ELF_DATA ? ((struct riscv_elf_link_hash_table *) ((p)->hash)) : NULL)
139
140static void
141riscv_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
142 arelent *cache_ptr,
143 Elf_Internal_Rela *dst)
144{
145 cache_ptr->howto = riscv_elf_rtype_to_howto (ELFNN_R_TYPE (dst->r_info));
146}
147
148static void
149riscv_elf_append_rela (bfd *abfd, asection *s, Elf_Internal_Rela *rel)
150{
151 const struct elf_backend_data *bed;
152 bfd_byte *loc;
153
154 bed = get_elf_backend_data (abfd);
155 loc = s->contents + (s->reloc_count++ * bed->s->sizeof_rela);
156 bed->s->swap_reloca_out (abfd, rel, loc);
157}
158
159/* PLT/GOT stuff. */
160
161#define PLT_HEADER_INSNS 8
162#define PLT_ENTRY_INSNS 4
163#define PLT_HEADER_SIZE (PLT_HEADER_INSNS * 4)
164#define PLT_ENTRY_SIZE (PLT_ENTRY_INSNS * 4)
165
166#define GOT_ENTRY_SIZE RISCV_ELF_WORD_BYTES
167
168#define GOTPLT_HEADER_SIZE (2 * GOT_ENTRY_SIZE)
169
170#define sec_addr(sec) ((sec)->output_section->vma + (sec)->output_offset)
171
172static bfd_vma
173riscv_elf_got_plt_val (bfd_vma plt_index, struct bfd_link_info *info)
174{
175 return sec_addr (riscv_elf_hash_table (info)->elf.sgotplt)
176 + GOTPLT_HEADER_SIZE + (plt_index * GOT_ENTRY_SIZE);
177}
178
179#if ARCH_SIZE == 32
180# define MATCH_LREG MATCH_LW
181#else
182# define MATCH_LREG MATCH_LD
183#endif
184
185/* Generate a PLT header. */
186
187static void
188riscv_make_plt_header (bfd_vma gotplt_addr, bfd_vma addr, uint32_t *entry)
189{
190 bfd_vma gotplt_offset_high = RISCV_PCREL_HIGH_PART (gotplt_addr, addr);
191 bfd_vma gotplt_offset_low = RISCV_PCREL_LOW_PART (gotplt_addr, addr);
192
193 /* auipc t2, %hi(.got.plt)
194 sub t1, t1, t3 # shifted .got.plt offset + hdr size + 12
195 l[w|d] t3, %lo(.got.plt)(t2) # _dl_runtime_resolve
196 addi t1, t1, -(hdr size + 12) # shifted .got.plt offset
197 addi t0, t2, %lo(.got.plt) # &.got.plt
198 srli t1, t1, log2(16/PTRSIZE) # .got.plt offset
199 l[w|d] t0, PTRSIZE(t0) # link map
200 jr t3 */
201
202 entry[0] = RISCV_UTYPE (AUIPC, X_T2, gotplt_offset_high);
203 entry[1] = RISCV_RTYPE (SUB, X_T1, X_T1, X_T3);
204 entry[2] = RISCV_ITYPE (LREG, X_T3, X_T2, gotplt_offset_low);
205 entry[3] = RISCV_ITYPE (ADDI, X_T1, X_T1, -(PLT_HEADER_SIZE + 12));
206 entry[4] = RISCV_ITYPE (ADDI, X_T0, X_T2, gotplt_offset_low);
207 entry[5] = RISCV_ITYPE (SRLI, X_T1, X_T1, 4 - RISCV_ELF_LOG_WORD_BYTES);
208 entry[6] = RISCV_ITYPE (LREG, X_T0, X_T0, RISCV_ELF_WORD_BYTES);
209 entry[7] = RISCV_ITYPE (JALR, 0, X_T3, 0);
210}
211
212/* Generate a PLT entry. */
213
214static void
215riscv_make_plt_entry (bfd_vma got, bfd_vma addr, uint32_t *entry)
216{
217 /* auipc t3, %hi(.got.plt entry)
218 l[w|d] t3, %lo(.got.plt entry)(t3)
219 jalr t1, t3
220 nop */
221
222 entry[0] = RISCV_UTYPE (AUIPC, X_T3, RISCV_PCREL_HIGH_PART (got, addr));
223 entry[1] = RISCV_ITYPE (LREG, X_T3, X_T3, RISCV_PCREL_LOW_PART(got, addr));
224 entry[2] = RISCV_ITYPE (JALR, X_T1, X_T3, 0);
225 entry[3] = RISCV_NOP;
226}
227
228/* Create an entry in an RISC-V ELF linker hash table. */
229
230static struct bfd_hash_entry *
231link_hash_newfunc (struct bfd_hash_entry *entry,
232 struct bfd_hash_table *table, const char *string)
233{
234 /* Allocate the structure if it has not already been allocated by a
235 subclass. */
236 if (entry == NULL)
237 {
238 entry =
239 bfd_hash_allocate (table,
240 sizeof (struct riscv_elf_link_hash_entry));
241 if (entry == NULL)
242 return entry;
243 }
244
245 /* Call the allocation method of the superclass. */
246 entry = _bfd_elf_link_hash_newfunc (entry, table, string);
247 if (entry != NULL)
248 {
249 struct riscv_elf_link_hash_entry *eh;
250
251 eh = (struct riscv_elf_link_hash_entry *) entry;
252 eh->dyn_relocs = NULL;
253 eh->tls_type = GOT_UNKNOWN;
254 }
255
256 return entry;
257}
258
259/* Create a RISC-V ELF linker hash table. */
260
261static struct bfd_link_hash_table *
262riscv_elf_link_hash_table_create (bfd *abfd)
263{
264 struct riscv_elf_link_hash_table *ret;
265 bfd_size_type amt = sizeof (struct riscv_elf_link_hash_table);
266
267 ret = (struct riscv_elf_link_hash_table *) bfd_zmalloc (amt);
268 if (ret == NULL)
269 return NULL;
270
271 if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd, link_hash_newfunc,
272 sizeof (struct riscv_elf_link_hash_entry),
273 RISCV_ELF_DATA))
274 {
275 free (ret);
276 return NULL;
277 }
278
279 return &ret->elf.root;
280}
281
282/* Create the .got section. */
283
284static bfd_boolean
285riscv_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
286{
287 flagword flags;
288 asection *s, *s_got;
289 struct elf_link_hash_entry *h;
290 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
291 struct elf_link_hash_table *htab = elf_hash_table (info);
292
293 /* This function may be called more than once. */
294 s = bfd_get_linker_section (abfd, ".got");
295 if (s != NULL)
296 return TRUE;
297
298 flags = bed->dynamic_sec_flags;
299
300 s = bfd_make_section_anyway_with_flags (abfd,
301 (bed->rela_plts_and_copies_p
302 ? ".rela.got" : ".rel.got"),
303 (bed->dynamic_sec_flags
304 | SEC_READONLY));
305 if (s == NULL
306 || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
307 return FALSE;
308 htab->srelgot = s;
309
310 s = s_got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
311 if (s == NULL
312 || !bfd_set_section_alignment (abfd, s, bed->s->log_file_align))
313 return FALSE;
314 htab->sgot = s;
315
316 /* The first bit of the global offset table is the header. */
317 s->size += bed->got_header_size;
318
319 if (bed->want_got_plt)
320 {
321 s = bfd_make_section_anyway_with_flags (abfd, ".got.plt", flags);
322 if (s == NULL
323 || !bfd_set_section_alignment (abfd, s,
324 bed->s->log_file_align))
325 return FALSE;
326 htab->sgotplt = s;
327
328 /* Reserve room for the header. */
329 s->size += GOTPLT_HEADER_SIZE;
330 }
331
332 if (bed->want_got_sym)
333 {
334 /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got
335 section. We don't do this in the linker script because we don't want
336 to define the symbol if we are not creating a global offset
337 table. */
338 h = _bfd_elf_define_linkage_sym (abfd, info, s_got,
339 "_GLOBAL_OFFSET_TABLE_");
340 elf_hash_table (info)->hgot = h;
341 if (h == NULL)
342 return FALSE;
343 }
344
345 return TRUE;
346}
347
348/* Create .plt, .rela.plt, .got, .got.plt, .rela.got, .dynbss, and
349 .rela.bss sections in DYNOBJ, and set up shortcuts to them in our
350 hash table. */
351
352static bfd_boolean
353riscv_elf_create_dynamic_sections (bfd *dynobj,
354 struct bfd_link_info *info)
355{
356 struct riscv_elf_link_hash_table *htab;
357
358 htab = riscv_elf_hash_table (info);
359 BFD_ASSERT (htab != NULL);
360
361 if (!riscv_elf_create_got_section (dynobj, info))
362 return FALSE;
363
364 if (!_bfd_elf_create_dynamic_sections (dynobj, info))
365 return FALSE;
366
367 htab->sdynbss = bfd_get_linker_section (dynobj, ".dynbss");
368 if (!bfd_link_pic (info))
369 {
370 htab->srelbss = bfd_get_linker_section (dynobj, ".rela.bss");
371 htab->sdyntdata =
372 bfd_make_section_anyway_with_flags (dynobj, ".tdata.dyn",
373 SEC_ALLOC | SEC_THREAD_LOCAL);
374 }
375
376 if (!htab->elf.splt || !htab->elf.srelplt || !htab->sdynbss
377 || (!bfd_link_pic (info) && (!htab->srelbss || !htab->sdyntdata)))
378 abort ();
379
380 return TRUE;
381}
382
383/* Copy the extra info we tack onto an elf_link_hash_entry. */
384
385static void
386riscv_elf_copy_indirect_symbol (struct bfd_link_info *info,
387 struct elf_link_hash_entry *dir,
388 struct elf_link_hash_entry *ind)
389{
390 struct riscv_elf_link_hash_entry *edir, *eind;
391
392 edir = (struct riscv_elf_link_hash_entry *) dir;
393 eind = (struct riscv_elf_link_hash_entry *) ind;
394
395 if (eind->dyn_relocs != NULL)
396 {
397 if (edir->dyn_relocs != NULL)
398 {
399 struct riscv_elf_dyn_relocs **pp;
400 struct riscv_elf_dyn_relocs *p;
401
402 /* Add reloc counts against the indirect sym to the direct sym
403 list. Merge any entries against the same section. */
404 for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
405 {
406 struct riscv_elf_dyn_relocs *q;
407
408 for (q = edir->dyn_relocs; q != NULL; q = q->next)
409 if (q->sec == p->sec)
410 {
411 q->pc_count += p->pc_count;
412 q->count += p->count;
413 *pp = p->next;
414 break;
415 }
416 if (q == NULL)
417 pp = &p->next;
418 }
419 *pp = edir->dyn_relocs;
420 }
421
422 edir->dyn_relocs = eind->dyn_relocs;
423 eind->dyn_relocs = NULL;
424 }
425
426 if (ind->root.type == bfd_link_hash_indirect
427 && dir->got.refcount <= 0)
428 {
429 edir->tls_type = eind->tls_type;
430 eind->tls_type = GOT_UNKNOWN;
431 }
432 _bfd_elf_link_hash_copy_indirect (info, dir, ind);
433}
434
435static bfd_boolean
436riscv_elf_record_tls_type (bfd *abfd, struct elf_link_hash_entry *h,
437 unsigned long symndx, char tls_type)
438{
439 char *new_tls_type = &_bfd_riscv_elf_tls_type (abfd, h, symndx);
440
441 *new_tls_type |= tls_type;
442 if ((*new_tls_type & GOT_NORMAL) && (*new_tls_type & ~GOT_NORMAL))
443 {
444 (*_bfd_error_handler)
445 (_("%B: `%s' accessed both as normal and thread local symbol"),
446 abfd, h ? h->root.root.string : "<local>");
447 return FALSE;
448 }
449 return TRUE;
450}
451
452static bfd_boolean
453riscv_elf_record_got_reference (bfd *abfd, struct bfd_link_info *info,
454 struct elf_link_hash_entry *h, long symndx)
455{
456 struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (info);
457 Elf_Internal_Shdr *symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
458
459 if (htab->elf.sgot == NULL)
460 {
461 if (!riscv_elf_create_got_section (htab->elf.dynobj, info))
462 return FALSE;
463 }
464
465 if (h != NULL)
466 {
467 h->got.refcount += 1;
468 return TRUE;
469 }
470
471 /* This is a global offset table entry for a local symbol. */
472 if (elf_local_got_refcounts (abfd) == NULL)
473 {
474 bfd_size_type size = symtab_hdr->sh_info * (sizeof (bfd_vma) + 1);
475 if (!(elf_local_got_refcounts (abfd) = bfd_zalloc (abfd, size)))
476 return FALSE;
477 _bfd_riscv_elf_local_got_tls_type (abfd)
478 = (char *) (elf_local_got_refcounts (abfd) + symtab_hdr->sh_info);
479 }
480 elf_local_got_refcounts (abfd) [symndx] += 1;
481
482 return TRUE;
483}
484
485static bfd_boolean
486bad_static_reloc (bfd *abfd, unsigned r_type, struct elf_link_hash_entry *h)
487{
488 (*_bfd_error_handler)
489 (_("%B: relocation %s against `%s' can not be used when making a shared "
490 "object; recompile with -fPIC"),
491 abfd, riscv_elf_rtype_to_howto (r_type)->name,
492 h != NULL ? h->root.root.string : "a local symbol");
493 bfd_set_error (bfd_error_bad_value);
494 return FALSE;
495}
496/* Look through the relocs for a section during the first phase, and
497 allocate space in the global offset table or procedure linkage
498 table. */
499
500static bfd_boolean
501riscv_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
502 asection *sec, const Elf_Internal_Rela *relocs)
503{
504 struct riscv_elf_link_hash_table *htab;
505 Elf_Internal_Shdr *symtab_hdr;
506 struct elf_link_hash_entry **sym_hashes;
507 const Elf_Internal_Rela *rel;
508 asection *sreloc = NULL;
509
510 if (bfd_link_relocatable (info))
511 return TRUE;
512
513 htab = riscv_elf_hash_table (info);
514 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
515 sym_hashes = elf_sym_hashes (abfd);
516
517 if (htab->elf.dynobj == NULL)
518 htab->elf.dynobj = abfd;
519
520 for (rel = relocs; rel < relocs + sec->reloc_count; rel++)
521 {
522 unsigned int r_type;
523 unsigned long r_symndx;
524 struct elf_link_hash_entry *h;
525
526 r_symndx = ELFNN_R_SYM (rel->r_info);
527 r_type = ELFNN_R_TYPE (rel->r_info);
528
529 if (r_symndx >= NUM_SHDR_ENTRIES (symtab_hdr))
530 {
531 (*_bfd_error_handler) (_("%B: bad symbol index: %d"),
532 abfd, r_symndx);
533 return FALSE;
534 }
535
536 if (r_symndx < symtab_hdr->sh_info)
537 h = NULL;
538 else
539 {
540 h = sym_hashes[r_symndx - symtab_hdr->sh_info];
541 while (h->root.type == bfd_link_hash_indirect
542 || h->root.type == bfd_link_hash_warning)
543 h = (struct elf_link_hash_entry *) h->root.u.i.link;
544
545 /* PR15323, ref flags aren't set for references in the same
546 object. */
547 h->root.non_ir_ref = 1;
548 }
549
550 switch (r_type)
551 {
552 case R_RISCV_TLS_GD_HI20:
553 if (!riscv_elf_record_got_reference (abfd, info, h, r_symndx)
554 || !riscv_elf_record_tls_type (abfd, h, r_symndx, GOT_TLS_GD))
555 return FALSE;
556 break;
557
558 case R_RISCV_TLS_GOT_HI20:
559 if (bfd_link_pic (info))
560 info->flags |= DF_STATIC_TLS;
561 if (!riscv_elf_record_got_reference (abfd, info, h, r_symndx)
562 || !riscv_elf_record_tls_type (abfd, h, r_symndx, GOT_TLS_IE))
563 return FALSE;
564 break;
565
566 case R_RISCV_GOT_HI20:
567 if (!riscv_elf_record_got_reference (abfd, info, h, r_symndx)
568 || !riscv_elf_record_tls_type (abfd, h, r_symndx, GOT_NORMAL))
569 return FALSE;
570 break;
571
572 case R_RISCV_CALL_PLT:
573 /* This symbol requires a procedure linkage table entry. We
574 actually build the entry in adjust_dynamic_symbol,
575 because this might be a case of linking PIC code without
576 linking in any dynamic objects, in which case we don't
577 need to generate a procedure linkage table after all. */
578
579 if (h != NULL)
580 {
581 h->needs_plt = 1;
582 h->plt.refcount += 1;
583 }
584 break;
585
586 case R_RISCV_CALL:
587 case R_RISCV_JAL:
588 case R_RISCV_BRANCH:
589 case R_RISCV_RVC_BRANCH:
590 case R_RISCV_RVC_JUMP:
591 case R_RISCV_PCREL_HI20:
592 /* In shared libraries, these relocs are known to bind locally. */
593 if (bfd_link_pic (info))
594 break;
595 goto static_reloc;
596
597 case R_RISCV_TPREL_HI20:
598 if (!bfd_link_executable (info))
599 return bad_static_reloc (abfd, r_type, h);
600 if (h != NULL)
601 riscv_elf_record_tls_type (abfd, h, r_symndx, GOT_TLS_LE);
602 goto static_reloc;
603
604 case R_RISCV_HI20:
605 if (bfd_link_pic (info))
606 return bad_static_reloc (abfd, r_type, h);
607 /* Fall through. */
608
609 case R_RISCV_COPY:
610 case R_RISCV_JUMP_SLOT:
611 case R_RISCV_RELATIVE:
612 case R_RISCV_64:
613 case R_RISCV_32:
614 /* Fall through. */
615
616 static_reloc:
617 /* This reloc might not bind locally. */
618 if (h != NULL)
619 h->non_got_ref = 1;
620
621 if (h != NULL && !bfd_link_pic (info))
622 {
623 /* We may need a .plt entry if the function this reloc
624 refers to is in a shared lib. */
625 h->plt.refcount += 1;
626 }
627
628 /* If we are creating a shared library, and this is a reloc
629 against a global symbol, or a non PC relative reloc
630 against a local symbol, then we need to copy the reloc
631 into the shared library. However, if we are linking with
632 -Bsymbolic, we do not need to copy a reloc against a
633 global symbol which is defined in an object we are
634 including in the link (i.e., DEF_REGULAR is set). At
635 this point we have not seen all the input files, so it is
636 possible that DEF_REGULAR is not set now but will be set
637 later (it is never cleared). In case of a weak definition,
638 DEF_REGULAR may be cleared later by a strong definition in
639 a shared library. We account for that possibility below by
640 storing information in the relocs_copied field of the hash
641 table entry. A similar situation occurs when creating
642 shared libraries and symbol visibility changes render the
643 symbol local.
644
645 If on the other hand, we are creating an executable, we
646 may need to keep relocations for symbols satisfied by a
647 dynamic library if we manage to avoid copy relocs for the
648 symbol. */
649 if ((bfd_link_pic (info)
650 && (sec->flags & SEC_ALLOC) != 0
651 && (! riscv_elf_rtype_to_howto (r_type)->pc_relative
652 || (h != NULL
653 && (! info->symbolic
654 || h->root.type == bfd_link_hash_defweak
655 || !h->def_regular))))
656 || (!bfd_link_pic (info)
657 && (sec->flags & SEC_ALLOC) != 0
658 && h != NULL
659 && (h->root.type == bfd_link_hash_defweak
660 || !h->def_regular)))
661 {
662 struct riscv_elf_dyn_relocs *p;
663 struct riscv_elf_dyn_relocs **head;
664
665 /* When creating a shared object, we must copy these
666 relocs into the output file. We create a reloc
667 section in dynobj and make room for the reloc. */
668 if (sreloc == NULL)
669 {
670 sreloc = _bfd_elf_make_dynamic_reloc_section
671 (sec, htab->elf.dynobj, RISCV_ELF_LOG_WORD_BYTES,
672 abfd, /*rela?*/ TRUE);
673
674 if (sreloc == NULL)
675 return FALSE;
676 }
677
678 /* If this is a global symbol, we count the number of
679 relocations we need for this symbol. */
680 if (h != NULL)
681 head = &((struct riscv_elf_link_hash_entry *) h)->dyn_relocs;
682 else
683 {
684 /* Track dynamic relocs needed for local syms too.
685 We really need local syms available to do this
686 easily. Oh well. */
687
688 asection *s;
689 void *vpp;
690 Elf_Internal_Sym *isym;
691
692 isym = bfd_sym_from_r_symndx (&htab->sym_cache,
693 abfd, r_symndx);
694 if (isym == NULL)
695 return FALSE;
696
697 s = bfd_section_from_elf_index (abfd, isym->st_shndx);
698 if (s == NULL)
699 s = sec;
700
701 vpp = &elf_section_data (s)->local_dynrel;
702 head = (struct riscv_elf_dyn_relocs **) vpp;
703 }
704
705 p = *head;
706 if (p == NULL || p->sec != sec)
707 {
708 bfd_size_type amt = sizeof *p;
709 p = ((struct riscv_elf_dyn_relocs *)
710 bfd_alloc (htab->elf.dynobj, amt));
711 if (p == NULL)
712 return FALSE;
713 p->next = *head;
714 *head = p;
715 p->sec = sec;
716 p->count = 0;
717 p->pc_count = 0;
718 }
719
720 p->count += 1;
721 p->pc_count += riscv_elf_rtype_to_howto (r_type)->pc_relative;
722 }
723
724 break;
725
726 case R_RISCV_GNU_VTINHERIT:
727 if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
728 return FALSE;
729 break;
730
731 case R_RISCV_GNU_VTENTRY:
732 if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
733 return FALSE;
734 break;
735
736 default:
737 break;
738 }
739 }
740
741 return TRUE;
742}
743
744static asection *
745riscv_elf_gc_mark_hook (asection *sec,
746 struct bfd_link_info *info,
747 Elf_Internal_Rela *rel,
748 struct elf_link_hash_entry *h,
749 Elf_Internal_Sym *sym)
750{
751 if (h != NULL)
752 switch (ELFNN_R_TYPE (rel->r_info))
753 {
754 case R_RISCV_GNU_VTINHERIT:
755 case R_RISCV_GNU_VTENTRY:
756 return NULL;
757 }
758
759 return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
760}
761
762/* Update the got entry reference counts for the section being removed. */
763
764static bfd_boolean
765riscv_elf_gc_sweep_hook (bfd *abfd,
766 struct bfd_link_info *info,
767 asection *sec,
768 const Elf_Internal_Rela *relocs)
769{
770 const Elf_Internal_Rela *rel, *relend;
771 Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (abfd);
772 struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (abfd);
773 bfd_signed_vma *local_got_refcounts = elf_local_got_refcounts (abfd);
774
775 if (bfd_link_relocatable (info))
776 return TRUE;
777
778 elf_section_data (sec)->local_dynrel = NULL;
779
780 for (rel = relocs, relend = relocs + sec->reloc_count; rel < relend; rel++)
781 {
782 unsigned long r_symndx;
783 struct elf_link_hash_entry *h = NULL;
784
785 r_symndx = ELFNN_R_SYM (rel->r_info);
786 if (r_symndx >= symtab_hdr->sh_info)
787 {
788 struct riscv_elf_link_hash_entry *eh;
789 struct riscv_elf_dyn_relocs **pp;
790 struct riscv_elf_dyn_relocs *p;
791
792 h = sym_hashes[r_symndx - symtab_hdr->sh_info];
793 while (h->root.type == bfd_link_hash_indirect
794 || h->root.type == bfd_link_hash_warning)
795 h = (struct elf_link_hash_entry *) h->root.u.i.link;
796 eh = (struct riscv_elf_link_hash_entry *) h;
797 for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next)
798 if (p->sec == sec)
799 {
800 /* Everything must go for SEC. */
801 *pp = p->next;
802 break;
803 }
804 }
805
806 switch (ELFNN_R_TYPE (rel->r_info))
807 {
808 case R_RISCV_GOT_HI20:
809 case R_RISCV_TLS_GOT_HI20:
810 case R_RISCV_TLS_GD_HI20:
811 if (h != NULL)
812 {
813 if (h->got.refcount > 0)
814 h->got.refcount--;
815 }
816 else
817 {
818 if (local_got_refcounts &&
819 local_got_refcounts[r_symndx] > 0)
820 local_got_refcounts[r_symndx]--;
821 }
822 break;
823
824 case R_RISCV_HI20:
825 case R_RISCV_PCREL_HI20:
826 case R_RISCV_COPY:
827 case R_RISCV_JUMP_SLOT:
828 case R_RISCV_RELATIVE:
829 case R_RISCV_64:
830 case R_RISCV_32:
831 case R_RISCV_BRANCH:
832 case R_RISCV_CALL:
833 case R_RISCV_JAL:
834 case R_RISCV_RVC_BRANCH:
835 case R_RISCV_RVC_JUMP:
836 if (bfd_link_pic (info))
837 break;
838 /* Fall through. */
839
840 case R_RISCV_CALL_PLT:
841 if (h != NULL)
842 {
843 if (h->plt.refcount > 0)
844 h->plt.refcount--;
845 }
846 break;
847
848 default:
849 break;
850 }
851 }
852
853 return TRUE;
854}
855
856/* Adjust a symbol defined by a dynamic object and referenced by a
857 regular object. The current definition is in some section of the
858 dynamic object, but we're not including those sections. We have to
859 change the definition to something the rest of the link can
860 understand. */
861
862static bfd_boolean
863riscv_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
864 struct elf_link_hash_entry *h)
865{
866 struct riscv_elf_link_hash_table *htab;
867 struct riscv_elf_link_hash_entry * eh;
868 struct riscv_elf_dyn_relocs *p;
869 bfd *dynobj;
870 asection *s;
871
872 htab = riscv_elf_hash_table (info);
873 BFD_ASSERT (htab != NULL);
874
875 dynobj = htab->elf.dynobj;
876
877 /* Make sure we know what is going on here. */
878 BFD_ASSERT (dynobj != NULL
879 && (h->needs_plt
880 || h->type == STT_GNU_IFUNC
881 || h->u.weakdef != NULL
882 || (h->def_dynamic
883 && h->ref_regular
884 && !h->def_regular)));
885
886 /* If this is a function, put it in the procedure linkage table. We
887 will fill in the contents of the procedure linkage table later
888 (although we could actually do it here). */
889 if (h->type == STT_FUNC || h->type == STT_GNU_IFUNC || h->needs_plt)
890 {
891 if (h->plt.refcount <= 0
892 || SYMBOL_CALLS_LOCAL (info, h)
893 || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
894 && h->root.type == bfd_link_hash_undefweak))
895 {
896 /* This case can occur if we saw a R_RISCV_CALL_PLT reloc in an
897 input file, but the symbol was never referred to by a dynamic
898 object, or if all references were garbage collected. In such
899 a case, we don't actually need to build a PLT entry. */
900 h->plt.offset = (bfd_vma) -1;
901 h->needs_plt = 0;
902 }
903
904 return TRUE;
905 }
906 else
907 h->plt.offset = (bfd_vma) -1;
908
909 /* If this is a weak symbol, and there is a real definition, the
910 processor independent code will have arranged for us to see the
911 real definition first, and we can just use the same value. */
912 if (h->u.weakdef != NULL)
913 {
914 BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
915 || h->u.weakdef->root.type == bfd_link_hash_defweak);
916 h->root.u.def.section = h->u.weakdef->root.u.def.section;
917 h->root.u.def.value = h->u.weakdef->root.u.def.value;
918 return TRUE;
919 }
920
921 /* This is a reference to a symbol defined by a dynamic object which
922 is not a function. */
923
924 /* If we are creating a shared library, we must presume that the
925 only references to the symbol are via the global offset table.
926 For such cases we need not do anything here; the relocations will
927 be handled correctly by relocate_section. */
928 if (bfd_link_pic (info))
929 return TRUE;
930
931 /* If there are no references to this symbol that do not use the
932 GOT, we don't need to generate a copy reloc. */
933 if (!h->non_got_ref)
934 return TRUE;
935
936 /* If -z nocopyreloc was given, we won't generate them either. */
937 if (info->nocopyreloc)
938 {
939 h->non_got_ref = 0;
940 return TRUE;
941 }
942
943 eh = (struct riscv_elf_link_hash_entry *) h;
944 for (p = eh->dyn_relocs; p != NULL; p = p->next)
945 {
946 s = p->sec->output_section;
947 if (s != NULL && (s->flags & SEC_READONLY) != 0)
948 break;
949 }
950
951 /* If we didn't find any dynamic relocs in read-only sections, then
952 we'll be keeping the dynamic relocs and avoiding the copy reloc. */
953 if (p == NULL)
954 {
955 h->non_got_ref = 0;
956 return TRUE;
957 }
958
959 /* We must allocate the symbol in our .dynbss section, which will
960 become part of the .bss section of the executable. There will be
961 an entry for this symbol in the .dynsym section. The dynamic
962 object will contain position independent code, so all references
963 from the dynamic object to this symbol will go through the global
964 offset table. The dynamic linker will use the .dynsym entry to
965 determine the address it must put in the global offset table, so
966 both the dynamic object and the regular object will refer to the
967 same memory location for the variable. */
968
969 /* We must generate a R_RISCV_COPY reloc to tell the dynamic linker
970 to copy the initial value out of the dynamic object and into the
971 runtime process image. We need to remember the offset into the
972 .rel.bss section we are going to use. */
973 if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
974 {
975 htab->srelbss->size += sizeof (ElfNN_External_Rela);
976 h->needs_copy = 1;
977 }
978
979 if (eh->tls_type & ~GOT_NORMAL)
980 return _bfd_elf_adjust_dynamic_copy (info, h, htab->sdyntdata);
981
982 return _bfd_elf_adjust_dynamic_copy (info, h, htab->sdynbss);
983}
984
985/* Allocate space in .plt, .got and associated reloc sections for
986 dynamic relocs. */
987
988static bfd_boolean
989allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
990{
991 struct bfd_link_info *info;
992 struct riscv_elf_link_hash_table *htab;
993 struct riscv_elf_link_hash_entry *eh;
994 struct riscv_elf_dyn_relocs *p;
995
996 if (h->root.type == bfd_link_hash_indirect)
997 return TRUE;
998
999 info = (struct bfd_link_info *) inf;
1000 htab = riscv_elf_hash_table (info);
1001 BFD_ASSERT (htab != NULL);
1002
1003 if (htab->elf.dynamic_sections_created
1004 && h->plt.refcount > 0)
1005 {
1006 /* Make sure this symbol is output as a dynamic symbol.
1007 Undefined weak syms won't yet be marked as dynamic. */
1008 if (h->dynindx == -1
1009 && !h->forced_local)
1010 {
1011 if (! bfd_elf_link_record_dynamic_symbol (info, h))
1012 return FALSE;
1013 }
1014
1015 if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, bfd_link_pic (info), h))
1016 {
1017 asection *s = htab->elf.splt;
1018
1019 if (s->size == 0)
1020 s->size = PLT_HEADER_SIZE;
1021
1022 h->plt.offset = s->size;
1023
1024 /* Make room for this entry. */
1025 s->size += PLT_ENTRY_SIZE;
1026
1027 /* We also need to make an entry in the .got.plt section. */
1028 htab->elf.sgotplt->size += GOT_ENTRY_SIZE;
1029
1030 /* We also need to make an entry in the .rela.plt section. */
1031 htab->elf.srelplt->size += sizeof (ElfNN_External_Rela);
1032
1033 /* If this symbol is not defined in a regular file, and we are
1034 not generating a shared library, then set the symbol to this
1035 location in the .plt. This is required to make function
1036 pointers compare as equal between the normal executable and
1037 the shared library. */
1038 if (! bfd_link_pic (info)
1039 && !h->def_regular)
1040 {
1041 h->root.u.def.section = s;
1042 h->root.u.def.value = h->plt.offset;
1043 }
1044 }
1045 else
1046 {
1047 h->plt.offset = (bfd_vma) -1;
1048 h->needs_plt = 0;
1049 }
1050 }
1051 else
1052 {
1053 h->plt.offset = (bfd_vma) -1;
1054 h->needs_plt = 0;
1055 }
1056
1057 if (h->got.refcount > 0)
1058 {
1059 asection *s;
1060 bfd_boolean dyn;
1061 int tls_type = riscv_elf_hash_entry (h)->tls_type;
1062
1063 /* Make sure this symbol is output as a dynamic symbol.
1064 Undefined weak syms won't yet be marked as dynamic. */
1065 if (h->dynindx == -1
1066 && !h->forced_local)
1067 {
1068 if (! bfd_elf_link_record_dynamic_symbol (info, h))
1069 return FALSE;
1070 }
1071
1072 s = htab->elf.sgot;
1073 h->got.offset = s->size;
1074 dyn = htab->elf.dynamic_sections_created;
1075 if (tls_type & (GOT_TLS_GD | GOT_TLS_IE))
1076 {
1077 /* TLS_GD needs two dynamic relocs and two GOT slots. */
1078 if (tls_type & GOT_TLS_GD)
1079 {
1080 s->size += 2 * RISCV_ELF_WORD_BYTES;
1081 htab->elf.srelgot->size += 2 * sizeof (ElfNN_External_Rela);
1082 }
1083
1084 /* TLS_IE needs one dynamic reloc and one GOT slot. */
1085 if (tls_type & GOT_TLS_IE)
1086 {
1087 s->size += RISCV_ELF_WORD_BYTES;
1088 htab->elf.srelgot->size += sizeof (ElfNN_External_Rela);
1089 }
1090 }
1091 else
1092 {
1093 s->size += RISCV_ELF_WORD_BYTES;
1094 if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h))
1095 htab->elf.srelgot->size += sizeof (ElfNN_External_Rela);
1096 }
1097 }
1098 else
1099 h->got.offset = (bfd_vma) -1;
1100
1101 eh = (struct riscv_elf_link_hash_entry *) h;
1102 if (eh->dyn_relocs == NULL)
1103 return TRUE;
1104
1105 /* In the shared -Bsymbolic case, discard space allocated for
1106 dynamic pc-relative relocs against symbols which turn out to be
1107 defined in regular objects. For the normal shared case, discard
1108 space for pc-relative relocs that have become local due to symbol
1109 visibility changes. */
1110
1111 if (bfd_link_pic (info))
1112 {
1113 if (SYMBOL_CALLS_LOCAL (info, h))
1114 {
1115 struct riscv_elf_dyn_relocs **pp;
1116
1117 for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
1118 {
1119 p->count -= p->pc_count;
1120 p->pc_count = 0;
1121 if (p->count == 0)
1122 *pp = p->next;
1123 else
1124 pp = &p->next;
1125 }
1126 }
1127
1128 /* Also discard relocs on undefined weak syms with non-default
1129 visibility. */
1130 if (eh->dyn_relocs != NULL
1131 && h->root.type == bfd_link_hash_undefweak)
1132 {
1133 if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
1134 eh->dyn_relocs = NULL;
1135
1136 /* Make sure undefined weak symbols are output as a dynamic
1137 symbol in PIEs. */
1138 else if (h->dynindx == -1
1139 && !h->forced_local)
1140 {
1141 if (! bfd_elf_link_record_dynamic_symbol (info, h))
1142 return FALSE;
1143 }
1144 }
1145 }
1146 else
1147 {
1148 /* For the non-shared case, discard space for relocs against
1149 symbols which turn out to need copy relocs or are not
1150 dynamic. */
1151
1152 if (!h->non_got_ref
1153 && ((h->def_dynamic
1154 && !h->def_regular)
1155 || (htab->elf.dynamic_sections_created
1156 && (h->root.type == bfd_link_hash_undefweak
1157 || h->root.type == bfd_link_hash_undefined))))
1158 {
1159 /* Make sure this symbol is output as a dynamic symbol.
1160 Undefined weak syms won't yet be marked as dynamic. */
1161 if (h->dynindx == -1
1162 && !h->forced_local)
1163 {
1164 if (! bfd_elf_link_record_dynamic_symbol (info, h))
1165 return FALSE;
1166 }
1167
1168 /* If that succeeded, we know we'll be keeping all the
1169 relocs. */
1170 if (h->dynindx != -1)
1171 goto keep;
1172 }
1173
1174 eh->dyn_relocs = NULL;
1175
1176 keep: ;
1177 }
1178
1179 /* Finally, allocate space. */
1180 for (p = eh->dyn_relocs; p != NULL; p = p->next)
1181 {
1182 asection *sreloc = elf_section_data (p->sec)->sreloc;
1183 sreloc->size += p->count * sizeof (ElfNN_External_Rela);
1184 }
1185
1186 return TRUE;
1187}
1188
1189/* Find any dynamic relocs that apply to read-only sections. */
1190
1191static bfd_boolean
1192readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf)
1193{
1194 struct riscv_elf_link_hash_entry *eh;
1195 struct riscv_elf_dyn_relocs *p;
1196
1197 eh = (struct riscv_elf_link_hash_entry *) h;
1198 for (p = eh->dyn_relocs; p != NULL; p = p->next)
1199 {
1200 asection *s = p->sec->output_section;
1201
1202 if (s != NULL && (s->flags & SEC_READONLY) != 0)
1203 {
1204 ((struct bfd_link_info *) inf)->flags |= DF_TEXTREL;
1205 return FALSE;
1206 }
1207 }
1208 return TRUE;
1209}
1210
1211static bfd_boolean
1212riscv_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
1213{
1214 struct riscv_elf_link_hash_table *htab;
1215 bfd *dynobj;
1216 asection *s;
1217 bfd *ibfd;
1218
1219 htab = riscv_elf_hash_table (info);
1220 BFD_ASSERT (htab != NULL);
1221 dynobj = htab->elf.dynobj;
1222 BFD_ASSERT (dynobj != NULL);
1223
1224 if (elf_hash_table (info)->dynamic_sections_created)
1225 {
1226 /* Set the contents of the .interp section to the interpreter. */
1227 if (bfd_link_executable (info) && !info->nointerp)
1228 {
1229 s = bfd_get_linker_section (dynobj, ".interp");
1230 BFD_ASSERT (s != NULL);
1231 s->size = strlen (ELFNN_DYNAMIC_INTERPRETER) + 1;
1232 s->contents = (unsigned char *) ELFNN_DYNAMIC_INTERPRETER;
1233 }
1234 }
1235
1236 /* Set up .got offsets for local syms, and space for local dynamic
1237 relocs. */
1238 for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
1239 {
1240 bfd_signed_vma *local_got;
1241 bfd_signed_vma *end_local_got;
1242 char *local_tls_type;
1243 bfd_size_type locsymcount;
1244 Elf_Internal_Shdr *symtab_hdr;
1245 asection *srel;
1246
1247 if (! is_riscv_elf (ibfd))
1248 continue;
1249
1250 for (s = ibfd->sections; s != NULL; s = s->next)
1251 {
1252 struct riscv_elf_dyn_relocs *p;
1253
1254 for (p = elf_section_data (s)->local_dynrel; p != NULL; p = p->next)
1255 {
1256 if (!bfd_is_abs_section (p->sec)
1257 && bfd_is_abs_section (p->sec->output_section))
1258 {
1259 /* Input section has been discarded, either because
1260 it is a copy of a linkonce section or due to
1261 linker script /DISCARD/, so we'll be discarding
1262 the relocs too. */
1263 }
1264 else if (p->count != 0)
1265 {
1266 srel = elf_section_data (p->sec)->sreloc;
1267 srel->size += p->count * sizeof (ElfNN_External_Rela);
1268 if ((p->sec->output_section->flags & SEC_READONLY) != 0)
1269 info->flags |= DF_TEXTREL;
1270 }
1271 }
1272 }
1273
1274 local_got = elf_local_got_refcounts (ibfd);
1275 if (!local_got)
1276 continue;
1277
1278 symtab_hdr = &elf_symtab_hdr (ibfd);
1279 locsymcount = symtab_hdr->sh_info;
1280 end_local_got = local_got + locsymcount;
1281 local_tls_type = _bfd_riscv_elf_local_got_tls_type (ibfd);
1282 s = htab->elf.sgot;
1283 srel = htab->elf.srelgot;
1284 for (; local_got < end_local_got; ++local_got, ++local_tls_type)
1285 {
1286 if (*local_got > 0)
1287 {
1288 *local_got = s->size;
1289 s->size += RISCV_ELF_WORD_BYTES;
1290 if (*local_tls_type & GOT_TLS_GD)
1291 s->size += RISCV_ELF_WORD_BYTES;
1292 if (bfd_link_pic (info)
1293 || (*local_tls_type & (GOT_TLS_GD | GOT_TLS_IE)))
1294 srel->size += sizeof (ElfNN_External_Rela);
1295 }
1296 else
1297 *local_got = (bfd_vma) -1;
1298 }
1299 }
1300
1301 /* Allocate global sym .plt and .got entries, and space for global
1302 sym dynamic relocs. */
1303 elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info);
1304
1305 if (htab->elf.sgotplt)
1306 {
1307 struct elf_link_hash_entry *got;
1308 got = elf_link_hash_lookup (elf_hash_table (info),
1309 "_GLOBAL_OFFSET_TABLE_",
1310 FALSE, FALSE, FALSE);
1311
1312 /* Don't allocate .got.plt section if there are no GOT nor PLT
1313 entries and there is no refeence to _GLOBAL_OFFSET_TABLE_. */
1314 if ((got == NULL
1315 || !got->ref_regular_nonweak)
1316 && (htab->elf.sgotplt->size == GOTPLT_HEADER_SIZE)
1317 && (htab->elf.splt == NULL
1318 || htab->elf.splt->size == 0)
1319 && (htab->elf.sgot == NULL
1320 || (htab->elf.sgot->size
1321 == get_elf_backend_data (output_bfd)->got_header_size)))
1322 htab->elf.sgotplt->size = 0;
1323 }
1324
1325 /* The check_relocs and adjust_dynamic_symbol entry points have
1326 determined the sizes of the various dynamic sections. Allocate
1327 memory for them. */
1328 for (s = dynobj->sections; s != NULL; s = s->next)
1329 {
1330 if ((s->flags & SEC_LINKER_CREATED) == 0)
1331 continue;
1332
1333 if (s == htab->elf.splt
1334 || s == htab->elf.sgot
1335 || s == htab->elf.sgotplt
1336 || s == htab->sdynbss)
1337 {
1338 /* Strip this section if we don't need it; see the
1339 comment below. */
1340 }
1341 else if (strncmp (s->name, ".rela", 5) == 0)
1342 {
1343 if (s->size != 0)
1344 {
1345 /* We use the reloc_count field as a counter if we need
1346 to copy relocs into the output file. */
1347 s->reloc_count = 0;
1348 }
1349 }
1350 else
1351 {
1352 /* It's not one of our sections. */
1353 continue;
1354 }
1355
1356 if (s->size == 0)
1357 {
1358 /* If we don't need this section, strip it from the
1359 output file. This is mostly to handle .rela.bss and
1360 .rela.plt. We must create both sections in
1361 create_dynamic_sections, because they must be created
1362 before the linker maps input sections to output
1363 sections. The linker does that before
1364 adjust_dynamic_symbol is called, and it is that
1365 function which decides whether anything needs to go
1366 into these sections. */
1367 s->flags |= SEC_EXCLUDE;
1368 continue;
1369 }
1370
1371 if ((s->flags & SEC_HAS_CONTENTS) == 0)
1372 continue;
1373
1374 /* Allocate memory for the section contents. Zero the memory
1375 for the benefit of .rela.plt, which has 4 unused entries
1376 at the beginning, and we don't want garbage. */
1377 s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
1378 if (s->contents == NULL)
1379 return FALSE;
1380 }
1381
1382 if (elf_hash_table (info)->dynamic_sections_created)
1383 {
1384 /* Add some entries to the .dynamic section. We fill in the
1385 values later, in riscv_elf_finish_dynamic_sections, but we
1386 must add the entries now so that we get the correct size for
1387 the .dynamic section. The DT_DEBUG entry is filled in by the
1388 dynamic linker and used by the debugger. */
1389#define add_dynamic_entry(TAG, VAL) \
1390 _bfd_elf_add_dynamic_entry (info, TAG, VAL)
1391
1392 if (bfd_link_executable (info))
1393 {
1394 if (!add_dynamic_entry (DT_DEBUG, 0))
1395 return FALSE;
1396 }
1397
1398 if (htab->elf.srelplt->size != 0)
1399 {
1400 if (!add_dynamic_entry (DT_PLTGOT, 0)
1401 || !add_dynamic_entry (DT_PLTRELSZ, 0)
1402 || !add_dynamic_entry (DT_PLTREL, DT_RELA)
1403 || !add_dynamic_entry (DT_JMPREL, 0))
1404 return FALSE;
1405 }
1406
1407 if (!add_dynamic_entry (DT_RELA, 0)
1408 || !add_dynamic_entry (DT_RELASZ, 0)
1409 || !add_dynamic_entry (DT_RELAENT, sizeof (ElfNN_External_Rela)))
1410 return FALSE;
1411
1412 /* If any dynamic relocs apply to a read-only section,
1413 then we need a DT_TEXTREL entry. */
1414 if ((info->flags & DF_TEXTREL) == 0)
1415 elf_link_hash_traverse (&htab->elf, readonly_dynrelocs, info);
1416
1417 if (info->flags & DF_TEXTREL)
1418 {
1419 if (!add_dynamic_entry (DT_TEXTREL, 0))
1420 return FALSE;
1421 }
1422 }
1423#undef add_dynamic_entry
1424
1425 return TRUE;
1426}
1427
1428#define TP_OFFSET 0
1429#define DTP_OFFSET 0x800
1430
1431/* Return the relocation value for a TLS dtp-relative reloc. */
1432
1433static bfd_vma
1434dtpoff (struct bfd_link_info *info, bfd_vma address)
1435{
1436 /* If tls_sec is NULL, we should have signalled an error already. */
1437 if (elf_hash_table (info)->tls_sec == NULL)
1438 return 0;
1439 return address - elf_hash_table (info)->tls_sec->vma - DTP_OFFSET;
1440}
1441
1442/* Return the relocation value for a static TLS tp-relative relocation. */
1443
1444static bfd_vma
1445tpoff (struct bfd_link_info *info, bfd_vma address)
1446{
1447 /* If tls_sec is NULL, we should have signalled an error already. */
1448 if (elf_hash_table (info)->tls_sec == NULL)
1449 return 0;
1450 return address - elf_hash_table (info)->tls_sec->vma - TP_OFFSET;
1451}
1452
1453/* Return the global pointer's value, or 0 if it is not in use. */
1454
1455static bfd_vma
1456riscv_global_pointer_value (struct bfd_link_info *info)
1457{
1458 struct bfd_link_hash_entry *h;
1459
1460 h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
1461 if (h == NULL || h->type != bfd_link_hash_defined)
1462 return 0;
1463
1464 return h->u.def.value + sec_addr (h->u.def.section);
1465}
1466
1467/* Emplace a static relocation. */
1468
1469static bfd_reloc_status_type
1470perform_relocation (const reloc_howto_type *howto,
1471 const Elf_Internal_Rela *rel,
1472 bfd_vma value,
1473 asection *input_section,
1474 bfd *input_bfd,
1475 bfd_byte *contents)
1476{
1477 if (howto->pc_relative)
1478 value -= sec_addr (input_section) + rel->r_offset;
1479 value += rel->r_addend;
1480
1481 switch (ELFNN_R_TYPE (rel->r_info))
1482 {
1483 case R_RISCV_HI20:
1484 case R_RISCV_TPREL_HI20:
1485 case R_RISCV_PCREL_HI20:
1486 case R_RISCV_GOT_HI20:
1487 case R_RISCV_TLS_GOT_HI20:
1488 case R_RISCV_TLS_GD_HI20:
1489 if (ARCH_SIZE > 32 && !VALID_UTYPE_IMM (RISCV_CONST_HIGH_PART (value)))
1490 return bfd_reloc_overflow;
1491 value = ENCODE_UTYPE_IMM (RISCV_CONST_HIGH_PART (value));
1492 break;
1493
1494 case R_RISCV_LO12_I:
1495 case R_RISCV_GPREL_I:
1496 case R_RISCV_TPREL_LO12_I:
1497 case R_RISCV_PCREL_LO12_I:
1498 value = ENCODE_ITYPE_IMM (value);
1499 break;
1500
1501 case R_RISCV_LO12_S:
1502 case R_RISCV_GPREL_S:
1503 case R_RISCV_TPREL_LO12_S:
1504 case R_RISCV_PCREL_LO12_S:
1505 value = ENCODE_STYPE_IMM (value);
1506 break;
1507
1508 case R_RISCV_CALL:
1509 case R_RISCV_CALL_PLT:
1510 if (ARCH_SIZE > 32 && !VALID_UTYPE_IMM (RISCV_CONST_HIGH_PART (value)))
1511 return bfd_reloc_overflow;
1512 value = ENCODE_UTYPE_IMM (RISCV_CONST_HIGH_PART (value))
1513 | (ENCODE_ITYPE_IMM (value) << 32);
1514 break;
1515
1516 case R_RISCV_JAL:
1517 if (!VALID_UJTYPE_IMM (value))
1518 return bfd_reloc_overflow;
1519 value = ENCODE_UJTYPE_IMM (value);
1520 break;
1521
1522 case R_RISCV_BRANCH:
1523 if (!VALID_SBTYPE_IMM (value))
1524 return bfd_reloc_overflow;
1525 value = ENCODE_SBTYPE_IMM (value);
1526 break;
1527
1528 case R_RISCV_RVC_BRANCH:
1529 if (!VALID_RVC_B_IMM (value))
1530 return bfd_reloc_overflow;
1531 value = ENCODE_RVC_B_IMM (value);
1532 break;
1533
1534 case R_RISCV_RVC_JUMP:
1535 if (!VALID_RVC_J_IMM (value))
1536 return bfd_reloc_overflow;
1537 value = ENCODE_RVC_J_IMM (value);
1538 break;
1539
1540 case R_RISCV_RVC_LUI:
1541 if (!VALID_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (value)))
1542 return bfd_reloc_overflow;
1543 value = ENCODE_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (value));
1544 break;
1545
1546 case R_RISCV_32:
1547 case R_RISCV_64:
1548 case R_RISCV_ADD8:
1549 case R_RISCV_ADD16:
1550 case R_RISCV_ADD32:
1551 case R_RISCV_ADD64:
1552 case R_RISCV_SUB8:
1553 case R_RISCV_SUB16:
1554 case R_RISCV_SUB32:
1555 case R_RISCV_SUB64:
1556 case R_RISCV_TLS_DTPREL32:
1557 case R_RISCV_TLS_DTPREL64:
1558 break;
1559
1560 default:
1561 return bfd_reloc_notsupported;
1562 }
1563
1564 bfd_vma word = bfd_get (howto->bitsize, input_bfd, contents + rel->r_offset);
1565 word = (word & ~howto->dst_mask) | (value & howto->dst_mask);
1566 bfd_put (howto->bitsize, input_bfd, word, contents + rel->r_offset);
1567
1568 return bfd_reloc_ok;
1569}
1570
1571/* Remember all PC-relative high-part relocs we've encountered to help us
1572 later resolve the corresponding low-part relocs. */
1573
1574typedef struct
1575{
1576 bfd_vma address;
1577 bfd_vma value;
1578} riscv_pcrel_hi_reloc;
1579
1580typedef struct riscv_pcrel_lo_reloc
1581{
1582 asection * input_section;
1583 struct bfd_link_info * info;
1584 reloc_howto_type * howto;
1585 const Elf_Internal_Rela * reloc;
1586 bfd_vma addr;
1587 const char * name;
1588 bfd_byte * contents;
1589 struct riscv_pcrel_lo_reloc * next;
1590} riscv_pcrel_lo_reloc;
1591
1592typedef struct
1593{
1594 htab_t hi_relocs;
1595 riscv_pcrel_lo_reloc *lo_relocs;
1596} riscv_pcrel_relocs;
1597
1598static hashval_t
1599riscv_pcrel_reloc_hash (const void *entry)
1600{
1601 const riscv_pcrel_hi_reloc *e = entry;
1602 return (hashval_t)(e->address >> 2);
1603}
1604
1605static bfd_boolean
1606riscv_pcrel_reloc_eq (const void *entry1, const void *entry2)
1607{
1608 const riscv_pcrel_hi_reloc *e1 = entry1, *e2 = entry2;
1609 return e1->address == e2->address;
1610}
1611
1612static bfd_boolean
1613riscv_init_pcrel_relocs (riscv_pcrel_relocs *p)
1614{
1615
1616 p->lo_relocs = NULL;
1617 p->hi_relocs = htab_create (1024, riscv_pcrel_reloc_hash,
1618 riscv_pcrel_reloc_eq, free);
1619 return p->hi_relocs != NULL;
1620}
1621
1622static void
1623riscv_free_pcrel_relocs (riscv_pcrel_relocs *p)
1624{
1625 riscv_pcrel_lo_reloc *cur = p->lo_relocs;
1626
1627 while (cur != NULL)
1628 {
1629 riscv_pcrel_lo_reloc *next = cur->next;
1630 free (cur);
1631 cur = next;
1632 }
1633
1634 htab_delete (p->hi_relocs);
1635}
1636
1637static bfd_boolean
1638riscv_record_pcrel_hi_reloc (riscv_pcrel_relocs *p, bfd_vma addr, bfd_vma value)
1639{
1640 riscv_pcrel_hi_reloc entry = {addr, value - addr};
1641 riscv_pcrel_hi_reloc **slot =
1642 (riscv_pcrel_hi_reloc **) htab_find_slot (p->hi_relocs, &entry, INSERT);
1643
1644 BFD_ASSERT (*slot == NULL);
1645 *slot = (riscv_pcrel_hi_reloc *) bfd_malloc (sizeof (riscv_pcrel_hi_reloc));
1646 if (*slot == NULL)
1647 return FALSE;
1648 **slot = entry;
1649 return TRUE;
1650}
1651
1652static bfd_boolean
1653riscv_record_pcrel_lo_reloc (riscv_pcrel_relocs *p,
1654 asection *input_section,
1655 struct bfd_link_info *info,
1656 reloc_howto_type *howto,
1657 const Elf_Internal_Rela *reloc,
1658 bfd_vma addr,
1659 const char *name,
1660 bfd_byte *contents)
1661{
1662 riscv_pcrel_lo_reloc *entry;
1663 entry = (riscv_pcrel_lo_reloc *) bfd_malloc (sizeof (riscv_pcrel_lo_reloc));
1664 if (entry == NULL)
1665 return FALSE;
1666 *entry = (riscv_pcrel_lo_reloc) {input_section, info, howto, reloc, addr,
1667 name, contents, p->lo_relocs};
1668 p->lo_relocs = entry;
1669 return TRUE;
1670}
1671
1672static bfd_boolean
1673riscv_resolve_pcrel_lo_relocs (riscv_pcrel_relocs *p)
1674{
1675 riscv_pcrel_lo_reloc *r;
1676
1677 for (r = p->lo_relocs; r != NULL; r = r->next)
1678 {
1679 bfd *input_bfd = r->input_section->owner;
1680
1681 riscv_pcrel_hi_reloc search = {r->addr, 0};
1682 riscv_pcrel_hi_reloc *entry = htab_find (p->hi_relocs, &search);
1683 if (entry == NULL)
1684 {
1685 ((*r->info->callbacks->reloc_overflow)
1686 (r->info, NULL, r->name, r->howto->name, (bfd_vma) 0,
1687 input_bfd, r->input_section, r->reloc->r_offset));
1688 return TRUE;
1689 }
1690
1691 perform_relocation (r->howto, r->reloc, entry->value, r->input_section,
1692 input_bfd, r->contents);
1693 }
1694
1695 return TRUE;
1696}
1697
1698/* Relocate a RISC-V ELF section.
1699
1700 The RELOCATE_SECTION function is called by the new ELF backend linker
1701 to handle the relocations for a section.
1702
1703 The relocs are always passed as Rela structures.
1704
1705 This function is responsible for adjusting the section contents as
1706 necessary, and (if generating a relocatable output file) adjusting
1707 the reloc addend as necessary.
1708
1709 This function does not have to worry about setting the reloc
1710 address or the reloc symbol index.
1711
1712 LOCAL_SYMS is a pointer to the swapped in local symbols.
1713
1714 LOCAL_SECTIONS is an array giving the section in the input file
1715 corresponding to the st_shndx field of each local symbol.
1716
1717 The global hash table entry for the global symbols can be found
1718 via elf_sym_hashes (input_bfd).
1719
1720 When generating relocatable output, this function must handle
1721 STB_LOCAL/STT_SECTION symbols specially. The output symbol is
1722 going to be the section symbol corresponding to the output
1723 section, which means that the addend must be adjusted
1724 accordingly. */
1725
1726static bfd_boolean
1727riscv_elf_relocate_section (bfd *output_bfd,
1728 struct bfd_link_info *info,
1729 bfd *input_bfd,
1730 asection *input_section,
1731 bfd_byte *contents,
1732 Elf_Internal_Rela *relocs,
1733 Elf_Internal_Sym *local_syms,
1734 asection **local_sections)
1735{
1736 Elf_Internal_Rela *rel;
1737 Elf_Internal_Rela *relend;
1738 riscv_pcrel_relocs pcrel_relocs;
1739 bfd_boolean ret = FALSE;
1740 asection *sreloc = elf_section_data (input_section)->sreloc;
1741 struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (info);
1742 Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (input_bfd);
1743 struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd);
1744 bfd_vma *local_got_offsets = elf_local_got_offsets (input_bfd);
1745
1746 if (!riscv_init_pcrel_relocs (&pcrel_relocs))
1747 return FALSE;
1748
1749 relend = relocs + input_section->reloc_count;
1750 for (rel = relocs; rel < relend; rel++)
1751 {
1752 unsigned long r_symndx;
1753 struct elf_link_hash_entry *h;
1754 Elf_Internal_Sym *sym;
1755 asection *sec;
1756 bfd_vma relocation;
1757 bfd_reloc_status_type r = bfd_reloc_ok;
1758 const char *name;
1759 bfd_vma off, ie_off;
1760 bfd_boolean unresolved_reloc, is_ie = FALSE;
1761 bfd_vma pc = sec_addr (input_section) + rel->r_offset;
1762 int r_type = ELFNN_R_TYPE (rel->r_info), tls_type;
1763 reloc_howto_type *howto = riscv_elf_rtype_to_howto (r_type);
1764 const char *msg = NULL;
1765
1766 if (r_type == R_RISCV_GNU_VTINHERIT || r_type == R_RISCV_GNU_VTENTRY)
1767 continue;
1768
1769 /* This is a final link. */
1770 r_symndx = ELFNN_R_SYM (rel->r_info);
1771 h = NULL;
1772 sym = NULL;
1773 sec = NULL;
1774 unresolved_reloc = FALSE;
1775 if (r_symndx < symtab_hdr->sh_info)
1776 {
1777 sym = local_syms + r_symndx;
1778 sec = local_sections[r_symndx];
1779 relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
1780 }
1781 else
1782 {
1783 bfd_boolean warned, ignored;
1784
1785 RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel,
1786 r_symndx, symtab_hdr, sym_hashes,
1787 h, sec, relocation,
1788 unresolved_reloc, warned, ignored);
1789 if (warned)
1790 {
1791 /* To avoid generating warning messages about truncated
1792 relocations, set the relocation's address to be the same as
1793 the start of this section. */
1794 if (input_section->output_section != NULL)
1795 relocation = input_section->output_section->vma;
1796 else
1797 relocation = 0;
1798 }
1799 }
1800
1801 if (sec != NULL && discarded_section (sec))
1802 RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
1803 rel, 1, relend, howto, 0, contents);
1804
1805 if (bfd_link_relocatable (info))
1806 continue;
1807
1808 if (h != NULL)
1809 name = h->root.root.string;
1810 else
1811 {
1812 name = (bfd_elf_string_from_elf_section
1813 (input_bfd, symtab_hdr->sh_link, sym->st_name));
1814 if (name == NULL || *name == '\0')
1815 name = bfd_section_name (input_bfd, sec);
1816 }
1817
1818 switch (r_type)
1819 {
1820 case R_RISCV_NONE:
1821 case R_RISCV_TPREL_ADD:
1822 case R_RISCV_COPY:
1823 case R_RISCV_JUMP_SLOT:
1824 case R_RISCV_RELATIVE:
1825 /* These require nothing of us at all. */
1826 continue;
1827
1828 case R_RISCV_HI20:
1829 case R_RISCV_BRANCH:
1830 case R_RISCV_RVC_BRANCH:
1831 case R_RISCV_RVC_LUI:
1832 case R_RISCV_LO12_I:
1833 case R_RISCV_LO12_S:
1834 /* These require no special handling beyond perform_relocation. */
1835 break;
1836
1837 case R_RISCV_GOT_HI20:
1838 if (h != NULL)
1839 {
1840 bfd_boolean dyn, pic;
1841
1842 off = h->got.offset;
1843 BFD_ASSERT (off != (bfd_vma) -1);
1844 dyn = elf_hash_table (info)->dynamic_sections_created;
1845 pic = bfd_link_pic (info);
1846
1847 if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, pic, h)
1848 || (pic && SYMBOL_REFERENCES_LOCAL (info, h)))
1849 {
1850 /* This is actually a static link, or it is a
1851 -Bsymbolic link and the symbol is defined
1852 locally, or the symbol was forced to be local
1853 because of a version file. We must initialize
1854 this entry in the global offset table. Since the
1855 offset must always be a multiple of the word size,
1856 we use the least significant bit to record whether
1857 we have initialized it already.
1858
1859 When doing a dynamic link, we create a .rela.got
1860 relocation entry to initialize the value. This
1861 is done in the finish_dynamic_symbol routine. */
1862 if ((off & 1) != 0)
1863 off &= ~1;
1864 else
1865 {
1866 bfd_put_NN (output_bfd, relocation,
1867 htab->elf.sgot->contents + off);
1868 h->got.offset |= 1;
1869 }
1870 }
1871 else
1872 unresolved_reloc = FALSE;
1873 }
1874 else
1875 {
1876 BFD_ASSERT (local_got_offsets != NULL
1877 && local_got_offsets[r_symndx] != (bfd_vma) -1);
1878
1879 off = local_got_offsets[r_symndx];
1880
1881 /* The offset must always be a multiple of the word size.
1882 So, we can use the least significant bit to record
1883 whether we have already processed this entry. */
1884 if ((off & 1) != 0)
1885 off &= ~1;
1886 else
1887 {
1888 if (bfd_link_pic (info))
1889 {
1890 asection *s;
1891 Elf_Internal_Rela outrel;
1892
1893 /* We need to generate a R_RISCV_RELATIVE reloc
1894 for the dynamic linker. */
1895 s = htab->elf.srelgot;
1896 BFD_ASSERT (s != NULL);
1897
1898 outrel.r_offset = sec_addr (htab->elf.sgot) + off;
1899 outrel.r_info =
1900 ELFNN_R_INFO (0, R_RISCV_RELATIVE);
1901 outrel.r_addend = relocation;
1902 relocation = 0;
1903 riscv_elf_append_rela (output_bfd, s, &outrel);
1904 }
1905
1906 bfd_put_NN (output_bfd, relocation,
1907 htab->elf.sgot->contents + off);
1908 local_got_offsets[r_symndx] |= 1;
1909 }
1910 }
1911 relocation = sec_addr (htab->elf.sgot) + off;
1912 if (!riscv_record_pcrel_hi_reloc (&pcrel_relocs, pc, relocation))
1913 r = bfd_reloc_overflow;
1914 break;
1915
1916 case R_RISCV_ADD8:
1917 case R_RISCV_ADD16:
1918 case R_RISCV_ADD32:
1919 case R_RISCV_ADD64:
1920 {
1921 bfd_vma old_value = bfd_get (howto->bitsize, input_bfd,
1922 contents + rel->r_offset);
1923 relocation = old_value + relocation;
1924 }
1925 break;
1926
1927 case R_RISCV_SUB8:
1928 case R_RISCV_SUB16:
1929 case R_RISCV_SUB32:
1930 case R_RISCV_SUB64:
1931 {
1932 bfd_vma old_value = bfd_get (howto->bitsize, input_bfd,
1933 contents + rel->r_offset);
1934 relocation = old_value - relocation;
1935 }
1936 break;
1937
1938 case R_RISCV_CALL_PLT:
1939 case R_RISCV_CALL:
1940 case R_RISCV_JAL:
1941 case R_RISCV_RVC_JUMP:
1942 if (bfd_link_pic (info) && h != NULL && h->plt.offset != MINUS_ONE)
1943 {
1944 /* Refer to the PLT entry. */
1945 relocation = sec_addr (htab->elf.splt) + h->plt.offset;
1946 unresolved_reloc = FALSE;
1947 }
1948 break;
1949
1950 case R_RISCV_TPREL_HI20:
1951 relocation = tpoff (info, relocation);
1952 break;
1953
1954 case R_RISCV_TPREL_LO12_I:
1955 case R_RISCV_TPREL_LO12_S:
1956 relocation = tpoff (info, relocation);
1957 if (VALID_ITYPE_IMM (relocation + rel->r_addend))
1958 {
1959 /* We can use tp as the base register. */
1960 bfd_vma insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
1961 insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
1962 insn |= X_TP << OP_SH_RS1;
1963 bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
1964 }
1965 break;
1966
1967 case R_RISCV_GPREL_I:
1968 case R_RISCV_GPREL_S:
1969 {
1970 bfd_vma gp = riscv_global_pointer_value (info);
1971 bfd_boolean x0_base = VALID_ITYPE_IMM (relocation + rel->r_addend);
1972 if (x0_base || VALID_ITYPE_IMM (relocation + rel->r_addend - gp))
1973 {
1974 /* We can use x0 or gp as the base register. */
1975 bfd_vma insn = bfd_get_32 (input_bfd, contents + rel->r_offset);
1976 insn &= ~(OP_MASK_RS1 << OP_SH_RS1);
1977 if (!x0_base)
1978 {
1979 rel->r_addend -= gp;
1980 insn |= X_GP << OP_SH_RS1;
1981 }
1982 bfd_put_32 (input_bfd, insn, contents + rel->r_offset);
1983 }
1984 else
1985 r = bfd_reloc_overflow;
1986 break;
1987 }
1988
1989 case R_RISCV_PCREL_HI20:
1990 if (!riscv_record_pcrel_hi_reloc (&pcrel_relocs, pc,
1991 relocation + rel->r_addend))
1992 r = bfd_reloc_overflow;
1993 break;
1994
1995 case R_RISCV_PCREL_LO12_I:
1996 case R_RISCV_PCREL_LO12_S:
1997 if (riscv_record_pcrel_lo_reloc (&pcrel_relocs, input_section, info,
1998 howto, rel, relocation, name,
1999 contents))
2000 continue;
2001 r = bfd_reloc_overflow;
2002 break;
2003
2004 case R_RISCV_TLS_DTPREL32:
2005 case R_RISCV_TLS_DTPREL64:
2006 relocation = dtpoff (info, relocation);
2007 break;
2008
2009 case R_RISCV_32:
2010 case R_RISCV_64:
2011 if ((input_section->flags & SEC_ALLOC) == 0)
2012 break;
2013
2014 if ((bfd_link_pic (info)
2015 && (h == NULL
2016 || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2017 || h->root.type != bfd_link_hash_undefweak)
2018 && (! howto->pc_relative
2019 || !SYMBOL_CALLS_LOCAL (info, h)))
2020 || (!bfd_link_pic (info)
2021 && h != NULL
2022 && h->dynindx != -1
2023 && !h->non_got_ref
2024 && ((h->def_dynamic
2025 && !h->def_regular)
2026 || h->root.type == bfd_link_hash_undefweak
2027 || h->root.type == bfd_link_hash_undefined)))
2028 {
2029 Elf_Internal_Rela outrel;
2030 bfd_boolean skip_static_relocation, skip_dynamic_relocation;
2031
2032 /* When generating a shared object, these relocations
2033 are copied into the output file to be resolved at run
2034 time. */
2035
2036 outrel.r_offset =
2037 _bfd_elf_section_offset (output_bfd, info, input_section,
2038 rel->r_offset);
2039 skip_static_relocation = outrel.r_offset != (bfd_vma) -2;
2040 skip_dynamic_relocation = outrel.r_offset >= (bfd_vma) -2;
2041 outrel.r_offset += sec_addr (input_section);
2042
2043 if (skip_dynamic_relocation)
2044 memset (&outrel, 0, sizeof outrel);
2045 else if (h != NULL && h->dynindx != -1
2046 && !(bfd_link_pic (info)
2047 && SYMBOLIC_BIND (info, h)
2048 && h->def_regular))
2049 {
2050 outrel.r_info = ELFNN_R_INFO (h->dynindx, r_type);
2051 outrel.r_addend = rel->r_addend;
2052 }
2053 else
2054 {
2055 outrel.r_info = ELFNN_R_INFO (0, R_RISCV_RELATIVE);
2056 outrel.r_addend = relocation + rel->r_addend;
2057 }
2058
2059 riscv_elf_append_rela (output_bfd, sreloc, &outrel);
2060 if (skip_static_relocation)
2061 continue;
2062 }
2063 break;
2064
2065 case R_RISCV_TLS_GOT_HI20:
2066 is_ie = TRUE;
2067 /* Fall through. */
2068
2069 case R_RISCV_TLS_GD_HI20:
2070 if (h != NULL)
2071 {
2072 off = h->got.offset;
2073 h->got.offset |= 1;
2074 }
2075 else
2076 {
2077 off = local_got_offsets[r_symndx];
2078 local_got_offsets[r_symndx] |= 1;
2079 }
2080
2081 tls_type = _bfd_riscv_elf_tls_type (input_bfd, h, r_symndx);
2082 BFD_ASSERT (tls_type & (GOT_TLS_IE | GOT_TLS_GD));
2083 /* If this symbol is referenced by both GD and IE TLS, the IE
2084 reference's GOT slot follows the GD reference's slots. */
2085 ie_off = 0;
2086 if ((tls_type & GOT_TLS_GD) && (tls_type & GOT_TLS_IE))
2087 ie_off = 2 * GOT_ENTRY_SIZE;
2088
2089 if ((off & 1) != 0)
2090 off &= ~1;
2091 else
2092 {
2093 Elf_Internal_Rela outrel;
2094 int indx = 0;
2095 bfd_boolean need_relocs = FALSE;
2096
2097 if (htab->elf.srelgot == NULL)
2098 abort ();
2099
2100 if (h != NULL)
2101 {
2102 bfd_boolean dyn, pic;
2103 dyn = htab->elf.dynamic_sections_created;
2104 pic = bfd_link_pic (info);
2105
2106 if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, pic, h)
2107 && (!pic || !SYMBOL_REFERENCES_LOCAL (info, h)))
2108 indx = h->dynindx;
2109 }
2110
2111 /* The GOT entries have not been initialized yet. Do it
2112 now, and emit any relocations. */
2113 if ((bfd_link_pic (info) || indx != 0)
2114 && (h == NULL
2115 || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2116 || h->root.type != bfd_link_hash_undefweak))
2117 need_relocs = TRUE;
2118
2119 if (tls_type & GOT_TLS_GD)
2120 {
2121 if (need_relocs)
2122 {
2123 outrel.r_offset = sec_addr (htab->elf.sgot) + off;
2124 outrel.r_addend = 0;
2125 outrel.r_info = ELFNN_R_INFO (indx, R_RISCV_TLS_DTPMODNN);
2126 bfd_put_NN (output_bfd, 0,
2127 htab->elf.sgot->contents + off);
2128 riscv_elf_append_rela (output_bfd, htab->elf.srelgot, &outrel);
2129 if (indx == 0)
2130 {
2131 BFD_ASSERT (! unresolved_reloc);
2132 bfd_put_NN (output_bfd,
2133 dtpoff (info, relocation),
2134 (htab->elf.sgot->contents + off +
2135 RISCV_ELF_WORD_BYTES));
2136 }
2137 else
2138 {
2139 bfd_put_NN (output_bfd, 0,
2140 (htab->elf.sgot->contents + off +
2141 RISCV_ELF_WORD_BYTES));
2142 outrel.r_info = ELFNN_R_INFO (indx, R_RISCV_TLS_DTPRELNN);
2143 outrel.r_offset += RISCV_ELF_WORD_BYTES;
2144 riscv_elf_append_rela (output_bfd, htab->elf.srelgot, &outrel);
2145 }
2146 }
2147 else
2148 {
2149 /* If we are not emitting relocations for a
2150 general dynamic reference, then we must be in a
2151 static link or an executable link with the
2152 symbol binding locally. Mark it as belonging
2153 to module 1, the executable. */
2154 bfd_put_NN (output_bfd, 1,
2155 htab->elf.sgot->contents + off);
2156 bfd_put_NN (output_bfd,
2157 dtpoff (info, relocation),
2158 (htab->elf.sgot->contents + off +
2159 RISCV_ELF_WORD_BYTES));
2160 }
2161 }
2162
2163 if (tls_type & GOT_TLS_IE)
2164 {
2165 if (need_relocs)
2166 {
2167 bfd_put_NN (output_bfd, 0,
2168 htab->elf.sgot->contents + off + ie_off);
2169 outrel.r_offset = sec_addr (htab->elf.sgot)
2170 + off + ie_off;
2171 outrel.r_addend = 0;
2172 if (indx == 0)
2173 outrel.r_addend = tpoff (info, relocation);
2174 outrel.r_info = ELFNN_R_INFO (indx, R_RISCV_TLS_TPRELNN);
2175 riscv_elf_append_rela (output_bfd, htab->elf.srelgot, &outrel);
2176 }
2177 else
2178 {
2179 bfd_put_NN (output_bfd, tpoff (info, relocation),
2180 htab->elf.sgot->contents + off + ie_off);
2181 }
2182 }
2183 }
2184
2185 BFD_ASSERT (off < (bfd_vma) -2);
2186 relocation = sec_addr (htab->elf.sgot) + off + (is_ie ? ie_off : 0);
2187 if (!riscv_record_pcrel_hi_reloc (&pcrel_relocs, pc, relocation))
2188 r = bfd_reloc_overflow;
2189 unresolved_reloc = FALSE;
2190 break;
2191
2192 default:
2193 r = bfd_reloc_notsupported;
2194 }
2195
2196 /* Dynamic relocs are not propagated for SEC_DEBUGGING sections
2197 because such sections are not SEC_ALLOC and thus ld.so will
2198 not process them. */
2199 if (unresolved_reloc
2200 && !((input_section->flags & SEC_DEBUGGING) != 0
2201 && h->def_dynamic)
2202 && _bfd_elf_section_offset (output_bfd, info, input_section,
2203 rel->r_offset) != (bfd_vma) -1)
2204 {
2205 (*_bfd_error_handler)
2206 (_("%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'"),
2207 input_bfd,
2208 input_section,
2209 (long) rel->r_offset,
2210 howto->name,
2211 h->root.root.string);
2212 continue;
2213 }
2214
2215 if (r == bfd_reloc_ok)
2216 r = perform_relocation (howto, rel, relocation, input_section,
2217 input_bfd, contents);
2218
2219 switch (r)
2220 {
2221 case bfd_reloc_ok:
2222 continue;
2223
2224 case bfd_reloc_overflow:
2225 info->callbacks->reloc_overflow
2226 (info, (h ? &h->root : NULL), name, howto->name,
2227 (bfd_vma) 0, input_bfd, input_section, rel->r_offset);
2228 break;
2229
2230 case bfd_reloc_undefined:
2231 info->callbacks->undefined_symbol
2232 (info, name, input_bfd, input_section, rel->r_offset,
2233 TRUE);
2234 break;
2235
2236 case bfd_reloc_outofrange:
2237 msg = _("internal error: out of range error");
2238 break;
2239
2240 case bfd_reloc_notsupported:
2241 msg = _("internal error: unsupported relocation error");
2242 break;
2243
2244 case bfd_reloc_dangerous:
2245 msg = _("internal error: dangerous relocation");
2246 break;
2247
2248 default:
2249 msg = _("internal error: unknown error");
2250 break;
2251 }
2252
2253 if (msg)
2254 info->callbacks->warning
2255 (info, msg, name, input_bfd, input_section, rel->r_offset);
2256 goto out;
2257 }
2258
2259 ret = riscv_resolve_pcrel_lo_relocs (&pcrel_relocs);
2260out:
2261 riscv_free_pcrel_relocs (&pcrel_relocs);
2262 return ret;
2263}
2264
2265/* Finish up dynamic symbol handling. We set the contents of various
2266 dynamic sections here. */
2267
2268static bfd_boolean
2269riscv_elf_finish_dynamic_symbol (bfd *output_bfd,
2270 struct bfd_link_info *info,
2271 struct elf_link_hash_entry *h,
2272 Elf_Internal_Sym *sym)
2273{
2274 struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (info);
2275 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
2276
2277 if (h->plt.offset != (bfd_vma) -1)
2278 {
2279 /* We've decided to create a PLT entry for this symbol. */
2280 bfd_byte *loc;
2281 bfd_vma i, header_address, plt_idx, got_address;
2282 uint32_t plt_entry[PLT_ENTRY_INSNS];
2283 Elf_Internal_Rela rela;
2284
2285 BFD_ASSERT (h->dynindx != -1);
2286
2287 /* Calculate the address of the PLT header. */
2288 header_address = sec_addr (htab->elf.splt);
2289
2290 /* Calculate the index of the entry. */
2291 plt_idx = (h->plt.offset - PLT_HEADER_SIZE) / PLT_ENTRY_SIZE;
2292
2293 /* Calculate the address of the .got.plt entry. */
2294 got_address = riscv_elf_got_plt_val (plt_idx, info);
2295
2296 /* Find out where the .plt entry should go. */
2297 loc = htab->elf.splt->contents + h->plt.offset;
2298
2299 /* Fill in the PLT entry itself. */
2300 riscv_make_plt_entry (got_address, header_address + h->plt.offset,
2301 plt_entry);
2302 for (i = 0; i < PLT_ENTRY_INSNS; i++)
2303 bfd_put_32 (output_bfd, plt_entry[i], loc + 4*i);
2304
2305 /* Fill in the initial value of the .got.plt entry. */
2306 loc = htab->elf.sgotplt->contents
2307 + (got_address - sec_addr (htab->elf.sgotplt));
2308 bfd_put_NN (output_bfd, sec_addr (htab->elf.splt), loc);
2309
2310 /* Fill in the entry in the .rela.plt section. */
2311 rela.r_offset = got_address;
2312 rela.r_addend = 0;
2313 rela.r_info = ELFNN_R_INFO (h->dynindx, R_RISCV_JUMP_SLOT);
2314
2315 loc = htab->elf.srelplt->contents + plt_idx * sizeof (ElfNN_External_Rela);
2316 bed->s->swap_reloca_out (output_bfd, &rela, loc);
2317
2318 if (!h->def_regular)
2319 {
2320 /* Mark the symbol as undefined, rather than as defined in
2321 the .plt section. Leave the value alone. */
2322 sym->st_shndx = SHN_UNDEF;
2323 /* If the symbol is weak, we do need to clear the value.
2324 Otherwise, the PLT entry would provide a definition for
2325 the symbol even if the symbol wasn't defined anywhere,
2326 and so the symbol would never be NULL. */
2327 if (!h->ref_regular_nonweak)
2328 sym->st_value = 0;
2329 }
2330 }
2331
2332 if (h->got.offset != (bfd_vma) -1
2333 && !(riscv_elf_hash_entry(h)->tls_type & (GOT_TLS_GD | GOT_TLS_IE)))
2334 {
2335 asection *sgot;
2336 asection *srela;
2337 Elf_Internal_Rela rela;
2338
2339 /* This symbol has an entry in the GOT. Set it up. */
2340
2341 sgot = htab->elf.sgot;
2342 srela = htab->elf.srelgot;
2343 BFD_ASSERT (sgot != NULL && srela != NULL);
2344
2345 rela.r_offset = sec_addr (sgot) + (h->got.offset &~ (bfd_vma) 1);
2346
2347 /* If this is a -Bsymbolic link, and the symbol is defined
2348 locally, we just want to emit a RELATIVE reloc. Likewise if
2349 the symbol was forced to be local because of a version file.
2350 The entry in the global offset table will already have been
2351 initialized in the relocate_section function. */
2352 if (bfd_link_pic (info)
2353 && (info->symbolic || h->dynindx == -1)
2354 && h->def_regular)
2355 {
2356 asection *sec = h->root.u.def.section;
2357 rela.r_info = ELFNN_R_INFO (0, R_RISCV_RELATIVE);
2358 rela.r_addend = (h->root.u.def.value
2359 + sec->output_section->vma
2360 + sec->output_offset);
2361 }
2362 else
2363 {
2364 BFD_ASSERT (h->dynindx != -1);
2365 rela.r_info = ELFNN_R_INFO (h->dynindx, R_RISCV_NN);
2366 rela.r_addend = 0;
2367 }
2368
2369 bfd_put_NN (output_bfd, 0,
2370 sgot->contents + (h->got.offset & ~(bfd_vma) 1));
2371 riscv_elf_append_rela (output_bfd, srela, &rela);
2372 }
2373
2374 if (h->needs_copy)
2375 {
2376 Elf_Internal_Rela rela;
2377
2378 /* This symbols needs a copy reloc. Set it up. */
2379 BFD_ASSERT (h->dynindx != -1);
2380
2381 rela.r_offset = sec_addr (h->root.u.def.section) + h->root.u.def.value;
2382 rela.r_info = ELFNN_R_INFO (h->dynindx, R_RISCV_COPY);
2383 rela.r_addend = 0;
2384 riscv_elf_append_rela (output_bfd, htab->srelbss, &rela);
2385 }
2386
2387 /* Mark some specially defined symbols as absolute. */
2388 if (h == htab->elf.hdynamic
2389 || (h == htab->elf.hgot || h == htab->elf.hplt))
2390 sym->st_shndx = SHN_ABS;
2391
2392 return TRUE;
2393}
2394
2395/* Finish up the dynamic sections. */
2396
2397static bfd_boolean
2398riscv_finish_dyn (bfd *output_bfd, struct bfd_link_info *info,
2399 bfd *dynobj, asection *sdyn)
2400{
2401 struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (info);
2402 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
2403 size_t dynsize = bed->s->sizeof_dyn;
2404 bfd_byte *dyncon, *dynconend;
2405
2406 dynconend = sdyn->contents + sdyn->size;
2407 for (dyncon = sdyn->contents; dyncon < dynconend; dyncon += dynsize)
2408 {
2409 Elf_Internal_Dyn dyn;
2410 asection *s;
2411
2412 bed->s->swap_dyn_in (dynobj, dyncon, &dyn);
2413
2414 switch (dyn.d_tag)
2415 {
2416 case DT_PLTGOT:
2417 s = htab->elf.sgotplt;
2418 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
2419 break;
2420 case DT_JMPREL:
2421 s = htab->elf.srelplt;
2422 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
2423 break;
2424 case DT_PLTRELSZ:
2425 s = htab->elf.srelplt;
2426 dyn.d_un.d_val = s->size;
2427 break;
2428 default:
2429 continue;
2430 }
2431
2432 bed->s->swap_dyn_out (output_bfd, &dyn, dyncon);
2433 }
2434 return TRUE;
2435}
2436
2437static bfd_boolean
2438riscv_elf_finish_dynamic_sections (bfd *output_bfd,
2439 struct bfd_link_info *info)
2440{
2441 bfd *dynobj;
2442 asection *sdyn;
2443 struct riscv_elf_link_hash_table *htab;
2444
2445 htab = riscv_elf_hash_table (info);
2446 BFD_ASSERT (htab != NULL);
2447 dynobj = htab->elf.dynobj;
2448
2449 sdyn = bfd_get_linker_section (dynobj, ".dynamic");
2450
2451 if (elf_hash_table (info)->dynamic_sections_created)
2452 {
2453 asection *splt;
2454 bfd_boolean ret;
2455
2456 splt = htab->elf.splt;
2457 BFD_ASSERT (splt != NULL && sdyn != NULL);
2458
2459 ret = riscv_finish_dyn (output_bfd, info, dynobj, sdyn);
2460
2461 if (ret != TRUE)
2462 return ret;
2463
2464 /* Fill in the head and tail entries in the procedure linkage table. */
2465 if (splt->size > 0)
2466 {
2467 int i;
2468 uint32_t plt_header[PLT_HEADER_INSNS];
2469 riscv_make_plt_header (sec_addr (htab->elf.sgotplt),
2470 sec_addr (splt), plt_header);
2471
2472 for (i = 0; i < PLT_HEADER_INSNS; i++)
2473 bfd_put_32 (output_bfd, plt_header[i], splt->contents + 4*i);
2474 }
2475
2476 elf_section_data (splt->output_section)->this_hdr.sh_entsize
2477 = PLT_ENTRY_SIZE;
2478 }
2479
2480 if (htab->elf.sgotplt)
2481 {
2482 asection *output_section = htab->elf.sgotplt->output_section;
2483
2484 if (bfd_is_abs_section (output_section))
2485 {
2486 (*_bfd_error_handler)
2487 (_("discarded output section: `%A'"), htab->elf.sgotplt);
2488 return FALSE;
2489 }
2490
2491 if (htab->elf.sgotplt->size > 0)
2492 {
2493 /* Write the first two entries in .got.plt, needed for the dynamic
2494 linker. */
2495 bfd_put_NN (output_bfd, (bfd_vma) -1, htab->elf.sgotplt->contents);
2496 bfd_put_NN (output_bfd, (bfd_vma) 0,
2497 htab->elf.sgotplt->contents + GOT_ENTRY_SIZE);
2498 }
2499
2500 elf_section_data (output_section)->this_hdr.sh_entsize = GOT_ENTRY_SIZE;
2501 }
2502
2503 if (htab->elf.sgot)
2504 {
2505 asection *output_section = htab->elf.sgot->output_section;
2506
2507 if (htab->elf.sgot->size > 0)
2508 {
2509 /* Set the first entry in the global offset table to the address of
2510 the dynamic section. */
2511 bfd_vma val = sdyn ? sec_addr (sdyn) : 0;
2512 bfd_put_NN (output_bfd, val, htab->elf.sgot->contents);
2513 }
2514
2515 elf_section_data (output_section)->this_hdr.sh_entsize = GOT_ENTRY_SIZE;
2516 }
2517
2518 return TRUE;
2519}
2520
2521/* Return address for Ith PLT stub in section PLT, for relocation REL
2522 or (bfd_vma) -1 if it should not be included. */
2523
2524static bfd_vma
2525riscv_elf_plt_sym_val (bfd_vma i, const asection *plt,
2526 const arelent *rel ATTRIBUTE_UNUSED)
2527{
2528 return plt->vma + PLT_HEADER_SIZE + i * PLT_ENTRY_SIZE;
2529}
2530
2531static enum elf_reloc_type_class
2532riscv_reloc_type_class (const struct bfd_link_info *info ATTRIBUTE_UNUSED,
2533 const asection *rel_sec ATTRIBUTE_UNUSED,
2534 const Elf_Internal_Rela *rela)
2535{
2536 switch (ELFNN_R_TYPE (rela->r_info))
2537 {
2538 case R_RISCV_RELATIVE:
2539 return reloc_class_relative;
2540 case R_RISCV_JUMP_SLOT:
2541 return reloc_class_plt;
2542 case R_RISCV_COPY:
2543 return reloc_class_copy;
2544 default:
2545 return reloc_class_normal;
2546 }
2547}
2548
2549/* Merge backend specific data from an object file to the output
2550 object file when linking. */
2551
2552static bfd_boolean
2553_bfd_riscv_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
2554{
2555 bfd *obfd = info->output_bfd;
2556 flagword new_flags = elf_elfheader (ibfd)->e_flags;
2557 flagword old_flags = elf_elfheader (obfd)->e_flags;
2558
2559 if (!is_riscv_elf (ibfd) || !is_riscv_elf (obfd))
2560 return TRUE;
2561
2562 if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
2563 {
2564 (*_bfd_error_handler)
2565 (_("%B: ABI is incompatible with that of the selected emulation"),
2566 ibfd);
2567 return FALSE;
2568 }
2569
2570 if (!_bfd_elf_merge_object_attributes (ibfd, info))
2571 return FALSE;
2572
2573 if (! elf_flags_init (obfd))
2574 {
2575 elf_flags_init (obfd) = TRUE;
2576 elf_elfheader (obfd)->e_flags = new_flags;
2577 return TRUE;
2578 }
2579
2580 /* Disallow linking soft-float and hard-float. */
2581 if ((old_flags ^ new_flags) & EF_RISCV_SOFT_FLOAT)
2582 {
2583 (*_bfd_error_handler)
2584 (_("%B: can't link hard-float modules with soft-float modules"), ibfd);
2585 goto fail;
2586 }
2587
2588 /* Allow linking RVC and non-RVC, and keep the RVC flag. */
2589 elf_elfheader (obfd)->e_flags |= new_flags & EF_RISCV_RVC;
2590
2591 return TRUE;
2592
2593fail:
2594 bfd_set_error (bfd_error_bad_value);
2595 return FALSE;
2596}
2597
2598/* Delete some bytes from a section while relaxing. */
2599
2600static bfd_boolean
2601riscv_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr, size_t count)
2602{
2603 unsigned int i, symcount;
2604 bfd_vma toaddr = sec->size;
2605 struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (abfd);
2606 Elf_Internal_Shdr *symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
2607 unsigned int sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
2608 struct bfd_elf_section_data *data = elf_section_data (sec);
2609 bfd_byte *contents = data->this_hdr.contents;
2610
2611 /* Actually delete the bytes. */
2612 sec->size -= count;
2613 memmove (contents + addr, contents + addr + count, toaddr - addr - count);
2614
2615 /* Adjust the location of all of the relocs. Note that we need not
2616 adjust the addends, since all PC-relative references must be against
2617 symbols, which we will adjust below. */
2618 for (i = 0; i < sec->reloc_count; i++)
2619 if (data->relocs[i].r_offset > addr && data->relocs[i].r_offset < toaddr)
2620 data->relocs[i].r_offset -= count;
2621
2622 /* Adjust the local symbols defined in this section. */
2623 for (i = 0; i < symtab_hdr->sh_info; i++)
2624 {
2625 Elf_Internal_Sym *sym = (Elf_Internal_Sym *) symtab_hdr->contents + i;
2626 if (sym->st_shndx == sec_shndx)
2627 {
2628 /* If the symbol is in the range of memory we just moved, we
2629 have to adjust its value. */
2630 if (sym->st_value > addr && sym->st_value <= toaddr)
2631 sym->st_value -= count;
2632
2633 /* If the symbol *spans* the bytes we just deleted (i.e. its
2634 *end* is in the moved bytes but its *start* isn't), then we
2635 must adjust its size. */
2636 if (sym->st_value <= addr
2637 && sym->st_value + sym->st_size > addr
2638 && sym->st_value + sym->st_size <= toaddr)
2639 sym->st_size -= count;
2640 }
2641 }
2642
2643 /* Now adjust the global symbols defined in this section. */
2644 symcount = ((symtab_hdr->sh_size / sizeof (ElfNN_External_Sym))
2645 - symtab_hdr->sh_info);
2646
2647 for (i = 0; i < symcount; i++)
2648 {
2649 struct elf_link_hash_entry *sym_hash = sym_hashes[i];
2650
2651 if ((sym_hash->root.type == bfd_link_hash_defined
2652 || sym_hash->root.type == bfd_link_hash_defweak)
2653 && sym_hash->root.u.def.section == sec)
2654 {
2655 /* As above, adjust the value if needed. */
2656 if (sym_hash->root.u.def.value > addr
2657 && sym_hash->root.u.def.value <= toaddr)
2658 sym_hash->root.u.def.value -= count;
2659
2660 /* As above, adjust the size if needed. */
2661 if (sym_hash->root.u.def.value <= addr
2662 && sym_hash->root.u.def.value + sym_hash->size > addr
2663 && sym_hash->root.u.def.value + sym_hash->size <= toaddr)
2664 sym_hash->size -= count;
2665 }
2666 }
2667
2668 return TRUE;
2669}
2670
2671/* Relax AUIPC + JALR into JAL. */
2672
2673static bfd_boolean
2674_bfd_riscv_relax_call (bfd *abfd, asection *sec, asection *sym_sec,
2675 struct bfd_link_info *link_info,
2676 Elf_Internal_Rela *rel,
2677 bfd_vma symval,
2678 unsigned int max_alignment,
2679 bfd_boolean *again)
2680{
2681 bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
2682 bfd_signed_vma foff = symval - (sec_addr (sec) + rel->r_offset);
2683 bfd_boolean near_zero = (symval + RISCV_IMM_REACH/2) < RISCV_IMM_REACH;
2684 bfd_vma auipc, jalr;
2685 int rd, r_type, len = 4, rvc = elf_elfheader (abfd)->e_flags & EF_RISCV_RVC;
2686
2687 /* If the call crosses section boundaries, an alignment directive could
2688 cause the PC-relative offset to later increase. */
2689 if (VALID_UJTYPE_IMM (foff) && sym_sec->output_section != sec->output_section)
2690 foff += (foff < 0 ? -max_alignment : max_alignment);
2691
2692 /* See if this function call can be shortened. */
2693 if (!VALID_UJTYPE_IMM (foff) && !(!bfd_link_pic (link_info) && near_zero))
2694 return TRUE;
2695
2696 /* Shorten the function call. */
2697 BFD_ASSERT (rel->r_offset + 8 <= sec->size);
2698
2699 auipc = bfd_get_32 (abfd, contents + rel->r_offset);
2700 jalr = bfd_get_32 (abfd, contents + rel->r_offset + 4);
2701 rd = (jalr >> OP_SH_RD) & OP_MASK_RD;
2702 rvc = rvc && VALID_RVC_J_IMM (foff) && ARCH_SIZE == 32;
2703
2704 if (rvc && (rd == 0 || rd == X_RA))
2705 {
2706 /* Relax to C.J[AL] rd, addr. */
2707 r_type = R_RISCV_RVC_JUMP;
2708 auipc = rd == 0 ? MATCH_C_J : MATCH_C_JAL;
2709 len = 2;
2710 }
2711 else if (VALID_UJTYPE_IMM (foff))
2712 {
2713 /* Relax to JAL rd, addr. */
2714 r_type = R_RISCV_JAL;
2715 auipc = MATCH_JAL | (rd << OP_SH_RD);
2716 }
2717 else /* near_zero */
2718 {
2719 /* Relax to JALR rd, x0, addr. */
2720 r_type = R_RISCV_LO12_I;
2721 auipc = MATCH_JALR | (rd << OP_SH_RD);
2722 }
2723
2724 /* Replace the R_RISCV_CALL reloc. */
2725 rel->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel->r_info), r_type);
2726 /* Replace the AUIPC. */
2727 bfd_put (8 * len, abfd, auipc, contents + rel->r_offset);
2728
2729 /* Delete unnecessary JALR. */
2730 *again = TRUE;
2731 return riscv_relax_delete_bytes (abfd, sec, rel->r_offset + len, 8 - len);
2732}
2733
2734/* Traverse all output sections and return the max alignment. */
2735
2736static unsigned int
2737_bfd_riscv_get_max_alignment (asection *sec)
2738{
2739 unsigned int max_alignment_power = 0;
2740 asection *o;
2741
2742 for (o = sec->output_section->owner->sections; o != NULL; o = o->next)
2743 {
2744 if (o->alignment_power > max_alignment_power)
2745 max_alignment_power = o->alignment_power;
2746 }
2747
2748 return 1 << max_alignment_power;
2749}
2750
2751/* Relax non-PIC global variable references. */
2752
2753static bfd_boolean
2754_bfd_riscv_relax_lui (bfd *abfd,
2755 asection *sec,
2756 asection *sym_sec,
2757 struct bfd_link_info *link_info,
2758 Elf_Internal_Rela *rel,
2759 bfd_vma symval,
2760 unsigned int max_alignment,
2761 bfd_boolean *again)
2762{
2763 bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
2764 bfd_vma gp = riscv_global_pointer_value (link_info);
2765 int use_rvc = elf_elfheader (abfd)->e_flags & EF_RISCV_RVC;
2766
2767 /* Mergeable symbols and code might later move out of range. */
2768 if (sym_sec->flags & (SEC_MERGE | SEC_CODE))
2769 return TRUE;
2770
2771 BFD_ASSERT (rel->r_offset + 4 <= sec->size);
2772
2773 /* Is the reference in range of x0 or gp?
2774 Valid gp range conservatively because of alignment issue. */
2775 if (VALID_ITYPE_IMM (symval)
2776 || (symval >= gp && VALID_ITYPE_IMM (symval - gp + max_alignment))
2777 || (symval < gp && VALID_ITYPE_IMM (symval - gp - max_alignment)))
2778 {
2779 unsigned sym = ELFNN_R_SYM (rel->r_info);
2780 switch (ELFNN_R_TYPE (rel->r_info))
2781 {
2782 case R_RISCV_LO12_I:
2783 rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_I);
2784 return TRUE;
2785
2786 case R_RISCV_LO12_S:
2787 rel->r_info = ELFNN_R_INFO (sym, R_RISCV_GPREL_S);
2788 return TRUE;
2789
2790 case R_RISCV_HI20:
2791 /* We can delete the unnecessary LUI and reloc. */
2792 rel->r_info = ELFNN_R_INFO (0, R_RISCV_NONE);
2793 *again = TRUE;
2794 return riscv_relax_delete_bytes (abfd, sec, rel->r_offset, 4);
2795
2796 default:
2797 abort ();
2798 }
2799 }
2800
2801 /* Can we relax LUI to C.LUI? Alignment might move the section forward;
2802 account for this assuming page alignment at worst. */
2803 if (use_rvc
2804 && ELFNN_R_TYPE (rel->r_info) == R_RISCV_HI20
2805 && VALID_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (symval))
2806 && VALID_RVC_LUI_IMM (RISCV_CONST_HIGH_PART (symval + ELF_MAXPAGESIZE)))
2807 {
2808 /* Replace LUI with C.LUI if legal (i.e., rd != x2/sp). */
2809 bfd_vma lui = bfd_get_32 (abfd, contents + rel->r_offset);
2810 if (((lui >> OP_SH_RD) & OP_MASK_RD) == X_SP)
2811 return TRUE;
2812
2813 lui = (lui & (OP_MASK_RD << OP_SH_RD)) | MATCH_C_LUI;
2814 bfd_put_32 (abfd, lui, contents + rel->r_offset);
2815
2816 /* Replace the R_RISCV_HI20 reloc. */
2817 rel->r_info = ELFNN_R_INFO (ELFNN_R_SYM (rel->r_info), R_RISCV_RVC_LUI);
2818
2819 *again = TRUE;
2820 return riscv_relax_delete_bytes (abfd, sec, rel->r_offset + 2, 2);
2821 }
2822
2823 return TRUE;
2824}
2825
2826/* Relax non-PIC TLS references. */
2827
2828static bfd_boolean
2829_bfd_riscv_relax_tls_le (bfd *abfd,
2830 asection *sec,
2831 asection *sym_sec ATTRIBUTE_UNUSED,
2832 struct bfd_link_info *link_info,
2833 Elf_Internal_Rela *rel,
2834 bfd_vma symval,
2835 unsigned int max_alignment ATTRIBUTE_UNUSED,
2836 bfd_boolean *again)
2837{
2838 /* See if this symbol is in range of tp. */
2839 if (RISCV_CONST_HIGH_PART (tpoff (link_info, symval)) != 0)
2840 return TRUE;
2841
2842 /* We can delete the unnecessary LUI and tp add. The LO12 reloc will be
2843 made directly tp-relative. */
2844 BFD_ASSERT (rel->r_offset + 4 <= sec->size);
2845 rel->r_info = ELFNN_R_INFO (0, R_RISCV_NONE);
2846
2847 *again = TRUE;
2848 return riscv_relax_delete_bytes (abfd, sec, rel->r_offset, 4);
2849}
2850
2851/* Implement R_RISCV_ALIGN by deleting excess alignment NOPs. */
2852
2853static bfd_boolean
2854_bfd_riscv_relax_align (bfd *abfd, asection *sec,
2855 asection *sym_sec ATTRIBUTE_UNUSED,
2856 struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
2857 Elf_Internal_Rela *rel,
2858 bfd_vma symval,
2859 unsigned int max_alignment ATTRIBUTE_UNUSED,
2860 bfd_boolean *again ATTRIBUTE_UNUSED)
2861{
2862 bfd_byte *contents = elf_section_data (sec)->this_hdr.contents;
2863 bfd_vma alignment = 1, pos;
2864 while (alignment <= rel->r_addend)
2865 alignment *= 2;
2866
2867 symval -= rel->r_addend;
2868 bfd_vma aligned_addr = ((symval - 1) & ~(alignment - 1)) + alignment;
2869 bfd_vma nop_bytes = aligned_addr - symval;
2870
2871 /* Once we've handled an R_RISCV_ALIGN, we can't relax anything else. */
2872 sec->sec_flg0 = TRUE;
2873
2874 /* Make sure there are enough NOPs to actually achieve the alignment. */
2875 if (rel->r_addend < nop_bytes)
2876 return FALSE;
2877
2878 /* Delete the reloc. */
2879 rel->r_info = ELFNN_R_INFO (0, R_RISCV_NONE);
2880
2881 /* If the number of NOPs is already correct, there's nothing to do. */
2882 if (nop_bytes == rel->r_addend)
2883 return TRUE;
2884
2885 /* Write as many RISC-V NOPs as we need. */
2886 for (pos = 0; pos < (nop_bytes & -4); pos += 4)
2887 bfd_put_32 (abfd, RISCV_NOP, contents + rel->r_offset + pos);
2888
2889 /* Write a final RVC NOP if need be. */
2890 if (nop_bytes % 4 != 0)
2891 bfd_put_16 (abfd, RVC_NOP, contents + rel->r_offset + pos);
2892
2893 /* Delete the excess bytes. */
2894 return riscv_relax_delete_bytes (abfd, sec, rel->r_offset + nop_bytes,
2895 rel->r_addend - nop_bytes);
2896}
2897
2898/* Relax a section. Pass 0 shortens code sequences unless disabled.
2899 Pass 1, which cannot be disabled, handles code alignment directives. */
2900
2901static bfd_boolean
2902_bfd_riscv_relax_section (bfd *abfd, asection *sec,
2903 struct bfd_link_info *info,
2904 bfd_boolean *again)
2905{
2906 Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (abfd);
2907 struct riscv_elf_link_hash_table *htab = riscv_elf_hash_table (info);
2908 struct bfd_elf_section_data *data = elf_section_data (sec);
2909 Elf_Internal_Rela *relocs;
2910 bfd_boolean ret = FALSE;
2911 unsigned int i;
2912 unsigned int max_alignment;
2913
2914 *again = FALSE;
2915
2916 if (bfd_link_relocatable (info)
2917 || sec->sec_flg0
2918 || (sec->flags & SEC_RELOC) == 0
2919 || sec->reloc_count == 0
2920 || (info->disable_target_specific_optimizations
2921 && info->relax_pass == 0))
2922 return TRUE;
2923
2924 /* Read this BFD's relocs if we haven't done so already. */
2925 if (data->relocs)
2926 relocs = data->relocs;
2927 else if (!(relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
2928 info->keep_memory)))
2929 goto fail;
2930
2931 max_alignment = _bfd_riscv_get_max_alignment (sec);
2932
2933 /* Examine and consider relaxing each reloc. */
2934 for (i = 0; i < sec->reloc_count; i++)
2935 {
2936 asection *sym_sec;
2937 Elf_Internal_Rela *rel = relocs + i;
2938 typeof (&_bfd_riscv_relax_call) relax_func = NULL;
2939 int type = ELFNN_R_TYPE (rel->r_info);
2940 bfd_vma symval;
2941
2942 if (info->relax_pass == 0)
2943 {
2944 if (type == R_RISCV_CALL || type == R_RISCV_CALL_PLT)
2945 relax_func = _bfd_riscv_relax_call;
2946 else if (type == R_RISCV_HI20
2947 || type == R_RISCV_LO12_I
2948 || type == R_RISCV_LO12_S)
2949 relax_func = _bfd_riscv_relax_lui;
2950 else if (type == R_RISCV_TPREL_HI20 || type == R_RISCV_TPREL_ADD)
2951 relax_func = _bfd_riscv_relax_tls_le;
2952 }
2953 else if (type == R_RISCV_ALIGN)
2954 relax_func = _bfd_riscv_relax_align;
2955
2956 if (!relax_func)
2957 continue;
2958
2959 data->relocs = relocs;
2960
2961 /* Read this BFD's contents if we haven't done so already. */
2962 if (!data->this_hdr.contents
2963 && !bfd_malloc_and_get_section (abfd, sec, &data->this_hdr.contents))
2964 goto fail;
2965
2966 /* Read this BFD's symbols if we haven't done so already. */
2967 if (symtab_hdr->sh_info != 0
2968 && !symtab_hdr->contents
2969 && !(symtab_hdr->contents =
2970 (unsigned char *) bfd_elf_get_elf_syms (abfd, symtab_hdr,
2971 symtab_hdr->sh_info,
2972 0, NULL, NULL, NULL)))
2973 goto fail;
2974
2975 /* Get the value of the symbol referred to by the reloc. */
2976 if (ELFNN_R_SYM (rel->r_info) < symtab_hdr->sh_info)
2977 {
2978 /* A local symbol. */
2979 Elf_Internal_Sym *isym = ((Elf_Internal_Sym *) symtab_hdr->contents
2980 + ELFNN_R_SYM (rel->r_info));
2981
2982 if (isym->st_shndx == SHN_UNDEF)
2983 sym_sec = sec, symval = sec_addr (sec) + rel->r_offset;
2984 else
2985 {
2986 BFD_ASSERT (isym->st_shndx < elf_numsections (abfd));
2987 sym_sec = elf_elfsections (abfd)[isym->st_shndx]->bfd_section;
2988 if (sec_addr (sym_sec) == 0)
2989 continue;
2990 symval = sec_addr (sym_sec) + isym->st_value;
2991 }
2992 }
2993 else
2994 {
2995 unsigned long indx;
2996 struct elf_link_hash_entry *h;
2997
2998 indx = ELFNN_R_SYM (rel->r_info) - symtab_hdr->sh_info;
2999 h = elf_sym_hashes (abfd)[indx];
3000
3001 while (h->root.type == bfd_link_hash_indirect
3002 || h->root.type == bfd_link_hash_warning)
3003 h = (struct elf_link_hash_entry *) h->root.u.i.link;
3004
3005 if (h->plt.offset != MINUS_ONE)
3006 symval = sec_addr (htab->elf.splt) + h->plt.offset;
3007 else if (h->root.u.def.section->output_section == NULL
3008 || (h->root.type != bfd_link_hash_defined
3009 && h->root.type != bfd_link_hash_defweak))
3010 continue;
3011 else
3012 symval = sec_addr (h->root.u.def.section) + h->root.u.def.value;
3013
3014 sym_sec = h->root.u.def.section;
3015 }
3016
3017 symval += rel->r_addend;
3018
3019 if (!relax_func (abfd, sec, sym_sec, info, rel, symval,
3020 max_alignment, again))
3021 goto fail;
3022 }
3023
3024 ret = TRUE;
3025
3026fail:
3027 if (relocs != data->relocs)
3028 free (relocs);
3029
3030 return ret;
3031}
3032
3033#if ARCH_SIZE == 32
3034# define PRSTATUS_SIZE 0 /* FIXME */
3035# define PRSTATUS_OFFSET_PR_CURSIG 12
3036# define PRSTATUS_OFFSET_PR_PID 24
3037# define PRSTATUS_OFFSET_PR_REG 72
3038# define ELF_GREGSET_T_SIZE 128
3039# define PRPSINFO_SIZE 128
3040# define PRPSINFO_OFFSET_PR_PID 16
3041# define PRPSINFO_OFFSET_PR_FNAME 32
3042# define PRPSINFO_OFFSET_PR_PSARGS 48
3043#else
3044# define PRSTATUS_SIZE 376
3045# define PRSTATUS_OFFSET_PR_CURSIG 12
3046# define PRSTATUS_OFFSET_PR_PID 32
3047# define PRSTATUS_OFFSET_PR_REG 112
3048# define ELF_GREGSET_T_SIZE 256
3049# define PRPSINFO_SIZE 136
3050# define PRPSINFO_OFFSET_PR_PID 24
3051# define PRPSINFO_OFFSET_PR_FNAME 40
3052# define PRPSINFO_OFFSET_PR_PSARGS 56
3053#endif
3054
3055/* Support for core dump NOTE sections. */
3056
3057static bfd_boolean
3058riscv_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
3059{
3060 switch (note->descsz)
3061 {
3062 default:
3063 return FALSE;
3064
3065 case PRSTATUS_SIZE: /* sizeof(struct elf_prstatus) on Linux/RISC-V. */
3066 /* pr_cursig */
3067 elf_tdata (abfd)->core->signal
3068 = bfd_get_16 (abfd, note->descdata + PRSTATUS_OFFSET_PR_CURSIG);
3069
3070 /* pr_pid */
3071 elf_tdata (abfd)->core->lwpid
3072 = bfd_get_32 (abfd, note->descdata + PRSTATUS_OFFSET_PR_PID);
3073 break;
3074 }
3075
3076 /* Make a ".reg/999" section. */
3077 return _bfd_elfcore_make_pseudosection (abfd, ".reg", ELF_GREGSET_T_SIZE,
3078 note->descpos + PRSTATUS_OFFSET_PR_REG);
3079}
3080
3081static bfd_boolean
3082riscv_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
3083{
3084 switch (note->descsz)
3085 {
3086 default:
3087 return FALSE;
3088
3089 case PRPSINFO_SIZE: /* sizeof(struct elf_prpsinfo) on Linux/RISC-V. */
3090 /* pr_pid */
3091 elf_tdata (abfd)->core->pid
3092 = bfd_get_32 (abfd, note->descdata + PRPSINFO_OFFSET_PR_PID);
3093
3094 /* pr_fname */
3095 elf_tdata (abfd)->core->program = _bfd_elfcore_strndup
3096 (abfd, note->descdata + PRPSINFO_OFFSET_PR_FNAME, 16);
3097
3098 /* pr_psargs */
3099 elf_tdata (abfd)->core->command = _bfd_elfcore_strndup
3100 (abfd, note->descdata + PRPSINFO_OFFSET_PR_PSARGS, 80);
3101 break;
3102 }
3103
3104 /* Note that for some reason, a spurious space is tacked
3105 onto the end of the args in some (at least one anyway)
3106 implementations, so strip it off if it exists. */
3107
3108 {
3109 char *command = elf_tdata (abfd)->core->command;
3110 int n = strlen (command);
3111
3112 if (0 < n && command[n - 1] == ' ')
3113 command[n - 1] = '\0';
3114 }
3115
3116 return TRUE;
3117}
3118
3119
3120#define TARGET_LITTLE_SYM riscv_elfNN_vec
3121#define TARGET_LITTLE_NAME "elfNN-littleriscv"
3122
3123#define elf_backend_reloc_type_class riscv_reloc_type_class
3124
3125#define bfd_elfNN_bfd_reloc_name_lookup riscv_reloc_name_lookup
3126#define bfd_elfNN_bfd_link_hash_table_create riscv_elf_link_hash_table_create
3127#define bfd_elfNN_bfd_reloc_type_lookup riscv_reloc_type_lookup
3128#define bfd_elfNN_bfd_merge_private_bfd_data \
3129 _bfd_riscv_elf_merge_private_bfd_data
3130
3131#define elf_backend_copy_indirect_symbol riscv_elf_copy_indirect_symbol
3132#define elf_backend_create_dynamic_sections riscv_elf_create_dynamic_sections
3133#define elf_backend_check_relocs riscv_elf_check_relocs
3134#define elf_backend_adjust_dynamic_symbol riscv_elf_adjust_dynamic_symbol
3135#define elf_backend_size_dynamic_sections riscv_elf_size_dynamic_sections
3136#define elf_backend_relocate_section riscv_elf_relocate_section
3137#define elf_backend_finish_dynamic_symbol riscv_elf_finish_dynamic_symbol
3138#define elf_backend_finish_dynamic_sections riscv_elf_finish_dynamic_sections
3139#define elf_backend_gc_mark_hook riscv_elf_gc_mark_hook
3140#define elf_backend_gc_sweep_hook riscv_elf_gc_sweep_hook
3141#define elf_backend_plt_sym_val riscv_elf_plt_sym_val
3142#define elf_backend_grok_prstatus riscv_elf_grok_prstatus
3143#define elf_backend_grok_psinfo riscv_elf_grok_psinfo
3144#define elf_info_to_howto_rel NULL
3145#define elf_info_to_howto riscv_info_to_howto_rela
3146#define bfd_elfNN_bfd_relax_section _bfd_riscv_relax_section
3147
3148#define elf_backend_init_index_section _bfd_elf_init_1_index_section
3149
3150#define elf_backend_can_gc_sections 1
3151#define elf_backend_can_refcount 1
3152#define elf_backend_want_got_plt 1
3153#define elf_backend_plt_readonly 1
3154#define elf_backend_plt_alignment 4
3155#define elf_backend_want_plt_sym 1
3156#define elf_backend_got_header_size (ARCH_SIZE / 8)
3157#define elf_backend_rela_normal 1
3158#define elf_backend_default_execstack 0
3159
3160#include "elfNN-target.h"
This page took 0.139194 seconds and 4 git commands to generate.