PARAMS ((unsigned int, unsigned int, unsigned int));
#endif
-
/* ELF/PA relocation howto entries. */
static reloc_howto_type elf_hppa_howto_table[ELF_HOWTO_TABLE_SIZE] =
}
break;
-
case R_HPPA_GOTOFF:
switch (format)
{
}
break;
-
case R_HPPA_PCREL_CALL:
switch (format)
{
return true;
}
-
static boolean
elf_hppa_remark_useless_dynamic_symbols (h, data)
struct elf_link_hash_entry *h;
{
struct elf64_hppa_link_hash_table *hppa_info;
bfd_vma value;
-
+
hppa_info = (struct elf64_hppa_link_hash_table *)data;
value = section->vma - section->filepos;
else
{
asection *sec;
-
/* First look for a .plt section. If found, then __gp is the
address of the .plt + gp_offset.
return true;
}
-
/* Compute the value for a relocation (REL) during a final link stage,
- then insert the value into the proper location in CONTENTS.
+ then insert the value into the proper location in CONTENTS.
VALUE is a tentative value for the relocation and may be overridden
and modified here based on the specific relocation to be performed.
For example we do conversions for PC-relative branches in this routine
- or redirection of calls to external routines to stubs.
+ or redirection of calls to external routines to stubs.
The work of actually applying the relocation is left to a helper
routine in an attempt to reduce the complexity and size of this
if (sym_sec == NULL || sym_sec->output_section == NULL)
value = (dyn_h->stub_offset + hppa_info->stub_sec->output_offset
+ hppa_info->stub_sec->output_section->vma);
-
+
/* Turn VALUE into a proper PC relative address. */
value -= (offset + input_section->output_offset
+ input_section->output_section->vma);
if (sym_sec == NULL || sym_sec->output_section == NULL)
value = (dyn_h->stub_offset + hppa_info->stub_sec->output_offset
+ hppa_info->stub_sec->output_section->vma);
-
+
/* Turn VALUE into a proper PC relative address. */
value -= (offset + input_section->output_offset
+ input_section->output_section->vma);
to the local symbol's value).
So, if this is a local symbol (h == NULL), then we need to
- fill in its DLT entry.
+ fill in its DLT entry.
Similarly we may still need to set up an entry in .opd for
a local function which had its address taken. */
if (sym_sec == NULL || sym_sec->output_section == NULL)
value = (dyn_h->stub_offset + hppa_info->stub_sec->output_offset
+ hppa_info->stub_sec->output_section->vma);
-
+
/* Turn VALUE into a proper PC relative address. */
value -= (offset + input_section->output_offset
+ input_section->output_section->vma);
if (sym_sec == NULL || sym_sec->output_section == NULL)
value = (dyn_h->stub_offset + hppa_info->stub_sec->output_offset
+ hppa_info->stub_sec->output_section->vma);
-
-
+
/* Turn VALUE into a proper PC relative address. */
value -= (offset + input_section->output_offset
+ input_section->output_section->vma);
return bfd_reloc_ok;
}
-
case R_PARISC_FPTR64:
{
/* We may still need to create the FPTR itself if it was for
value = (dyn_h->opd_offset
+ hppa_info->opd_sec->output_offset
+ hppa_info->opd_sec->output_section->vma);
-
+
bfd_put_64 (input_bfd, value + addend, hit_data);
return bfd_reloc_ok;
}
bfd_put_64 (input_bfd, value, hit_data);
return bfd_reloc_ok;
}
-
/* Something we don't know how to handle. */
default: