@@ -4090,10 +4090,10 @@ _bfd_riscv_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
#define RISCV_RELAX_GP 0x02U
/* A second format for recording PC-relative hi relocations. This stores the
- information required to relax them to GP-relative addresses. */
+ information required to relax them to other kinds of relative addresses. */
-typedef struct riscv_pcgp_hi_reloc riscv_pcgp_hi_reloc;
-struct riscv_pcgp_hi_reloc
+typedef struct riscv_pc_relax_hi_reloc riscv_pc_relax_hi_reloc;
+struct riscv_pc_relax_hi_reloc
{
bfd_vma hi_sec_off;
bfd_vma hi_addend;
@@ -4101,68 +4101,69 @@ struct riscv_pcgp_hi_reloc
unsigned hi_sym;
asection *sym_sec;
bool undefined_weak;
- riscv_pcgp_hi_reloc *next;
+ riscv_pc_relax_hi_reloc *next;
};
-typedef struct riscv_pcgp_lo_reloc riscv_pcgp_lo_reloc;
-struct riscv_pcgp_lo_reloc
+typedef struct riscv_pc_relax_lo_reloc riscv_pc_relax_lo_reloc;
+struct riscv_pc_relax_lo_reloc
{
bfd_vma hi_sec_off;
- riscv_pcgp_lo_reloc *next;
+ riscv_pc_relax_lo_reloc *next;
};
typedef struct
{
- riscv_pcgp_hi_reloc *hi;
- riscv_pcgp_lo_reloc *lo;
-} riscv_pcgp_relocs;
+ riscv_pc_relax_hi_reloc *hi;
+ riscv_pc_relax_lo_reloc *lo;
+} riscv_pc_relax_relocs;
-/* Initialize the pcgp reloc info in P. */
+/* Initialize the pc relaxation reloc info in P. */
static bool
-riscv_init_pcgp_relocs (riscv_pcgp_relocs *p)
+riscv_init_pc_relax_relocs (riscv_pc_relax_relocs *p)
{
p->hi = NULL;
p->lo = NULL;
return true;
}
-/* Free the pcgp reloc info in P. */
+/* Free the pc relaxation reloc info in P. */
static void
-riscv_free_pcgp_relocs (riscv_pcgp_relocs *p,
- bfd *abfd ATTRIBUTE_UNUSED,
- asection *sec ATTRIBUTE_UNUSED)
+riscv_free_pc_relax_relocs (riscv_pc_relax_relocs *p,
+ bfd *abfd ATTRIBUTE_UNUSED,
+ asection *sec ATTRIBUTE_UNUSED)
{
- riscv_pcgp_hi_reloc *c;
- riscv_pcgp_lo_reloc *l;
+ riscv_pc_relax_hi_reloc *c;
+ riscv_pc_relax_lo_reloc *l;
for (c = p->hi; c != NULL; )
{
- riscv_pcgp_hi_reloc *next = c->next;
+ riscv_pc_relax_hi_reloc *next = c->next;
free (c);
c = next;
}
for (l = p->lo; l != NULL; )
{
- riscv_pcgp_lo_reloc *next = l->next;
+ riscv_pc_relax_lo_reloc *next = l->next;
free (l);
l = next;
}
}
-/* Record pcgp hi part reloc info in P, using HI_SEC_OFF as the lookup index.
- The HI_ADDEND, HI_ADDR, HI_SYM, and SYM_SEC args contain info required to
- relax the corresponding lo part reloc. */
+/* Record pc relaxation hi part reloc info in P, using HI_SEC_OFF as
+ the lookup index. The HI_ADDEND, HI_ADDR, HI_SYM, and SYM_SEC args
+ contain info required to relax the corresponding lo part reloc. */
static bool
-riscv_record_pcgp_hi_reloc (riscv_pcgp_relocs *p, bfd_vma hi_sec_off,
- bfd_vma hi_addend, bfd_vma hi_addr,
- unsigned hi_sym, asection *sym_sec,
- bool undefined_weak)
+riscv_record_pc_relax_hi_reloc (riscv_pc_relax_relocs *p,
+ bfd_vma hi_sec_off,
+ bfd_vma hi_addend, bfd_vma hi_addr,
+ unsigned hi_sym, asection *sym_sec,
+ bool undefined_weak)
{
- riscv_pcgp_hi_reloc *new = bfd_malloc (sizeof (*new));
+ riscv_pc_relax_hi_reloc *new = bfd_malloc (sizeof (*new));
if (!new)
return false;
new->hi_sec_off = hi_sec_off;
@@ -4179,10 +4180,10 @@ riscv_record_pcgp_hi_reloc (riscv_pcgp_relocs *p, bfd_vma hi_sec_off,
/* Look up hi part pcgp reloc info in P, using HI_SEC_OFF as the lookup index.
This is used by a lo part reloc to find the corresponding hi part reloc. */
-static riscv_pcgp_hi_reloc *
-riscv_find_pcgp_hi_reloc (riscv_pcgp_relocs *p, bfd_vma hi_sec_off)
+static riscv_pc_relax_hi_reloc *
+riscv_find_pc_relax_hi_reloc (riscv_pc_relax_relocs *p, bfd_vma hi_sec_off)
{
- riscv_pcgp_hi_reloc *c;
+ riscv_pc_relax_hi_reloc *c;
for (c = p->hi; c != NULL; c = c->next)
if (c->hi_sec_off == hi_sec_off)
@@ -4194,9 +4195,10 @@ riscv_find_pcgp_hi_reloc (riscv_pcgp_relocs *p, bfd_vma hi_sec_off)
This is used to record relocs that can't be relaxed. */
static bool
-riscv_record_pcgp_lo_reloc (riscv_pcgp_relocs *p, bfd_vma hi_sec_off)
+riscv_record_pc_relax_lo_reloc (riscv_pc_relax_relocs *p,
+ bfd_vma hi_sec_off)
{
- riscv_pcgp_lo_reloc *new = bfd_malloc (sizeof (*new));
+ riscv_pc_relax_lo_reloc *new = bfd_malloc (sizeof (*new));
if (!new)
return false;
new->hi_sec_off = hi_sec_off;
@@ -4209,9 +4211,9 @@ riscv_record_pcgp_lo_reloc (riscv_pcgp_relocs *p, bfd_vma hi_sec_off)
This is used by a hi part reloc to find the corresponding lo part reloc. */
static bool
-riscv_find_pcgp_lo_reloc (riscv_pcgp_relocs *p, bfd_vma hi_sec_off)
+riscv_find_pc_relax_lo_reloc (riscv_pc_relax_relocs *p, bfd_vma hi_sec_off)
{
- riscv_pcgp_lo_reloc *c;
+ riscv_pc_relax_lo_reloc *c;
for (c = p->lo; c != NULL; c = c->next)
if (c->hi_sec_off == hi_sec_off)
@@ -4220,14 +4222,16 @@ riscv_find_pcgp_lo_reloc (riscv_pcgp_relocs *p, bfd_vma hi_sec_off)
}
static void
-riscv_update_pcgp_relocs (riscv_pcgp_relocs *p, asection *deleted_sec,
- bfd_vma deleted_addr, size_t deleted_count)
+riscv_update_pc_relax_relocs (riscv_pc_relax_relocs *p,
+ asection *deleted_sec,
+ bfd_vma deleted_addr,
+ size_t deleted_count)
{
/* Bytes have already been deleted and toaddr should match the old section
size for our checks, so adjust it here. */
bfd_vma toaddr = deleted_sec->size + deleted_count;
- riscv_pcgp_lo_reloc *l;
- riscv_pcgp_hi_reloc *h;
+ riscv_pc_relax_lo_reloc *l;
+ riscv_pc_relax_hi_reloc *h;
/* Update section offsets of corresponding pcrel_hi relocs for the pcrel_lo
entries where they occur after the deleted bytes. */
@@ -4258,7 +4262,7 @@ _riscv_relax_delete_bytes (bfd *abfd,
bfd_vma addr,
size_t count,
struct bfd_link_info *link_info,
- riscv_pcgp_relocs *p,
+ riscv_pc_relax_relocs *p,
bfd_vma delete_total,
bfd_vma toaddr)
{
@@ -4287,7 +4291,7 @@ _riscv_relax_delete_bytes (bfd *abfd,
/* Adjust the hi_sec_off, and the hi_addr of any entries in the pcgp relocs
table for which these values occur after the deleted bytes. */
if (p)
- riscv_update_pcgp_relocs (p, sec, addr, count);
+ riscv_update_pc_relax_relocs (p, sec, addr, count);
/* Adjust the local symbols defined in this section. */
for (i = 0; i < symtab_hdr->sh_info; i++)
@@ -4376,7 +4380,7 @@ _riscv_relax_delete_bytes (bfd *abfd,
typedef bool (*relax_delete_t) (bfd *, asection *,
bfd_vma, size_t,
struct bfd_link_info *,
- riscv_pcgp_relocs *,
+ riscv_pc_relax_relocs *,
Elf_Internal_Rela *);
static relax_delete_t riscv_relax_delete_bytes;
@@ -4390,7 +4394,7 @@ _riscv_relax_delete_piecewise (bfd *abfd ATTRIBUTE_UNUSED,
bfd_vma addr,
size_t count,
struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
- riscv_pcgp_relocs *p ATTRIBUTE_UNUSED,
+ riscv_pc_relax_relocs *p ATTRIBUTE_UNUSED,
Elf_Internal_Rela *rel)
{
if (rel == NULL)
@@ -4409,7 +4413,7 @@ _riscv_relax_delete_immediate (bfd *abfd,
bfd_vma addr,
size_t count,
struct bfd_link_info *link_info,
- riscv_pcgp_relocs *p,
+ riscv_pc_relax_relocs *p,
Elf_Internal_Rela *rel)
{
if (rel != NULL)
@@ -4474,7 +4478,7 @@ typedef bool (*relax_func_t) (bfd *, asection *, asection *,
struct bfd_link_info *,
Elf_Internal_Rela *,
bfd_vma, bfd_vma, bfd_vma, bool *,
- riscv_pcgp_relocs *,
+ riscv_pc_relax_relocs *,
bool undefined_weak,
unsigned relax_features);
@@ -4488,7 +4492,7 @@ _bfd_riscv_relax_call (bfd *abfd, asection *sec, asection *sym_sec,
bfd_vma max_alignment,
bfd_vma reserve_size ATTRIBUTE_UNUSED,
bool *again,
- riscv_pcgp_relocs *pcgp_relocs,
+ riscv_pc_relax_relocs *pc_relax_relocs,
bool undefined_weak ATTRIBUTE_UNUSED,
unsigned relax_features)
{
@@ -4554,7 +4558,7 @@ _bfd_riscv_relax_call (bfd *abfd, asection *sec, asection *sym_sec,
/* Delete unnecessary JALR and reuse the R_RISCV_RELAX reloc. */
*again = true;
return riscv_relax_delete_bytes (abfd, sec, rel->r_offset + len, 8 - len,
- link_info, pcgp_relocs, rel + 1);
+ link_info, pc_relax_relocs, rel + 1);
}
/* Traverse all output sections and return the max alignment.
@@ -4596,7 +4600,7 @@ _bfd_riscv_relax_lui (bfd *abfd,
bfd_vma max_alignment,
bfd_vma reserve_size,
bool *again,
- riscv_pcgp_relocs *pcgp_relocs,
+ riscv_pc_relax_relocs *pc_relax_relocs,
bool undefined_weak,
unsigned relax_features)
{
@@ -4658,7 +4662,8 @@ _bfd_riscv_relax_lui (bfd *abfd,
/* Delete unnecessary LUI and reuse the reloc. */
*again = true;
return riscv_relax_delete_bytes (abfd, sec, rel->r_offset, 4,
- link_info, pcgp_relocs, rel);
+ link_info, pc_relax_relocs,
+ rel);
default:
abort ();
@@ -4692,7 +4697,8 @@ _bfd_riscv_relax_lui (bfd *abfd,
/* Delete extra bytes and reuse the R_RISCV_RELAX reloc. */
*again = true;
return riscv_relax_delete_bytes (abfd, sec, rel->r_offset + 2, 2,
- link_info, pcgp_relocs, rel + 1);
+ link_info, pc_relax_relocs,
+ rel + 1);
}
return true;
@@ -4710,7 +4716,7 @@ _bfd_riscv_relax_tls_le (bfd *abfd,
bfd_vma max_alignment ATTRIBUTE_UNUSED,
bfd_vma reserve_size ATTRIBUTE_UNUSED,
bool *again,
- riscv_pcgp_relocs *pcgp_relocs,
+ riscv_pc_relax_relocs *pc_relax_relocs,
bool undefined_weak ATTRIBUTE_UNUSED,
unsigned relax_features ATTRIBUTE_UNUSED)
{
@@ -4734,7 +4740,7 @@ _bfd_riscv_relax_tls_le (bfd *abfd,
/* Delete unnecessary instruction and reuse the reloc. */
*again = true;
return riscv_relax_delete_bytes (abfd, sec, rel->r_offset, 4, link_info,
- pcgp_relocs, rel);
+ pc_relax_relocs, rel);
default:
abort ();
@@ -4753,7 +4759,7 @@ _bfd_riscv_relax_align (bfd *abfd, asection *sec,
bfd_vma max_alignment ATTRIBUTE_UNUSED,
bfd_vma reserve_size ATTRIBUTE_UNUSED,
bool *again ATTRIBUTE_UNUSED,
- riscv_pcgp_relocs *pcgp_relocs ATTRIBUTE_UNUSED,
+ riscv_pc_relax_relocs *pc_relax_relocs ATTRIBUTE_UNUSED,
bool undefined_weak ATTRIBUTE_UNUSED,
unsigned relax_features ATTRIBUTE_UNUSED)
{
@@ -4814,7 +4820,7 @@ _bfd_riscv_relax_pc (bfd *abfd ATTRIBUTE_UNUSED,
bfd_vma max_alignment,
bfd_vma reserve_size,
bool *again,
- riscv_pcgp_relocs *pcgp_relocs,
+ riscv_pc_relax_relocs *pc_relax_relocs,
bool undefined_weak,
unsigned relax_features)
{
@@ -4828,7 +4834,7 @@ _bfd_riscv_relax_pc (bfd *abfd ATTRIBUTE_UNUSED,
/* Chain the _LO relocs to their cooresponding _HI reloc to compute the
actual target address. */
- riscv_pcgp_hi_reloc hi_reloc;
+ riscv_pc_relax_hi_reloc hi_reloc;
memset (&hi_reloc, 0, sizeof (hi_reloc));
switch (ELFNN_R_TYPE (rel->r_info))
{
@@ -4840,11 +4846,11 @@ _bfd_riscv_relax_pc (bfd *abfd ATTRIBUTE_UNUSED,
hi part instruction. So we must subtract it here for the lookup.
It is still used below in the final symbol address. */
bfd_vma hi_sec_off = symval - sec_addr (sym_sec) - rel->r_addend;
- riscv_pcgp_hi_reloc *hi = riscv_find_pcgp_hi_reloc (pcgp_relocs,
- hi_sec_off);
+ riscv_pc_relax_hi_reloc *hi =
+ riscv_find_pc_relax_hi_reloc (pc_relax_relocs, hi_sec_off);
if (hi == NULL)
{
- riscv_record_pcgp_lo_reloc (pcgp_relocs, hi_sec_off);
+ riscv_record_pc_relax_lo_reloc (pc_relax_relocs, hi_sec_off);
return true;
}
@@ -4855,7 +4861,7 @@ _bfd_riscv_relax_pc (bfd *abfd ATTRIBUTE_UNUSED,
/* We can not know whether the undefined weak symbol is referenced
according to the information of R_RISCV_PCREL_LO12_I/S. Therefore,
we have to record the 'undefined_weak' flag when handling the
- corresponding R_RISCV_HI20 reloc in riscv_record_pcgp_hi_reloc. */
+ corresponding R_RISCV_HI20 reloc in riscv_record_pc_relax_hi_reloc. */
undefined_weak = hi_reloc.undefined_weak;
}
break;
@@ -4868,7 +4874,7 @@ _bfd_riscv_relax_pc (bfd *abfd ATTRIBUTE_UNUSED,
/* If the cooresponding lo relocation has already been seen then it's not
safe to relax this relocation. */
- if (riscv_find_pcgp_lo_reloc (pcgp_relocs, rel->r_offset))
+ if (riscv_find_pc_relax_lo_reloc (pc_relax_relocs, rel->r_offset))
return true;
break;
@@ -4924,7 +4930,7 @@ _bfd_riscv_relax_pc (bfd *abfd ATTRIBUTE_UNUSED,
return true;
case R_RISCV_PCREL_HI20:
- riscv_record_pcgp_hi_reloc (pcgp_relocs,
+ riscv_record_pc_relax_hi_reloc (pc_relax_relocs,
rel->r_offset,
rel->r_addend,
symval,
@@ -4934,7 +4940,7 @@ _bfd_riscv_relax_pc (bfd *abfd ATTRIBUTE_UNUSED,
/* Delete unnecessary AUIPC and reuse the reloc. */
*again = true;
riscv_relax_delete_bytes (abfd, sec, rel->r_offset, 4, link_info,
- pcgp_relocs, rel);
+ pc_relax_relocs, rel);
return true;
default:
@@ -4974,7 +4980,7 @@ _bfd_riscv_relax_section (bfd *abfd, asection *sec,
bool ret = false;
unsigned int i;
bfd_vma max_alignment, reserve_size = 0;
- riscv_pcgp_relocs pcgp_relocs;
+ riscv_pc_relax_relocs pc_relax_relocs;
static asection *first_section = NULL;
unsigned relax_features = 0;
@@ -5005,7 +5011,7 @@ _bfd_riscv_relax_section (bfd *abfd, asection *sec,
else if (first_section == sec)
htab->max_alignment_for_gp = -1;
- riscv_init_pcgp_relocs (&pcgp_relocs);
+ riscv_init_pc_relax_relocs (&pc_relax_relocs);
/* Read this BFD's relocs if we haven't done so already. */
if (data->relocs)
@@ -5226,7 +5232,7 @@ _bfd_riscv_relax_section (bfd *abfd, asection *sec,
if (!relax_func (abfd, sec, sym_sec, info, rel, symval,
max_alignment, reserve_size, again,
- &pcgp_relocs, undefined_weak, relax_features))
+ &pc_relax_relocs, undefined_weak, relax_features))
goto fail;
}
@@ -5239,7 +5245,7 @@ _bfd_riscv_relax_section (bfd *abfd, asection *sec,
fail:
if (relocs != data->relocs)
free (relocs);
- riscv_free_pcgp_relocs (&pcgp_relocs, abfd, sec);
+ riscv_free_pc_relax_relocs (&pc_relax_relocs, abfd, sec);
return ret;
}