mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-30 12:44:10 +08:00
nds32, sh, kvx: DT_JMPREL/DT_PLTRELSZ
As commit fa4f2d46f9
did for x86, there a few other targets that
wrongly use the output section rather than the dynamic section for
DT_JMPREL and others.
* elfnn-kvx.c (elfNN_kvx_finish_dynamic_sections): Use input
section for DT_JMPREL.
* elf32-sh.c (sh_elf_finish_dynamic_sections): Use input
section for DT_JMPREL and DT_PLTRELSZ.
* elf32-nds32.c (nds32_elf_finish_dynamic_sections): Likewise,
and for DT_PLTGOT and when adjusting DT_RELA.
This commit is contained in:
parent
8eb7b3a7db
commit
fb9b7fbf17
@ -6385,18 +6385,18 @@ nds32_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
|
||||
|
||||
case DT_PLTGOT:
|
||||
/* name = ".got"; */
|
||||
s = ehtab->sgot->output_section;
|
||||
s = ehtab->sgot;
|
||||
goto get_vma;
|
||||
case DT_JMPREL:
|
||||
s = ehtab->srelplt->output_section;
|
||||
s = ehtab->srelplt;
|
||||
get_vma:
|
||||
BFD_ASSERT (s != NULL);
|
||||
dyn.d_un.d_ptr = s->vma;
|
||||
dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
|
||||
bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
|
||||
break;
|
||||
|
||||
case DT_PLTRELSZ:
|
||||
s = ehtab->srelplt->output_section;
|
||||
s = ehtab->srelplt;
|
||||
BFD_ASSERT (s != NULL);
|
||||
dyn.d_un.d_val = s->size;
|
||||
bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
|
||||
@ -6414,7 +6414,7 @@ nds32_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
|
||||
about changing the DT_RELA entry. */
|
||||
if (ehtab->srelplt != NULL)
|
||||
{
|
||||
s = ehtab->srelplt->output_section;
|
||||
s = ehtab->srelplt;
|
||||
dyn.d_un.d_val -= s->size;
|
||||
}
|
||||
bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
|
||||
|
@ -6291,15 +6291,13 @@ sh_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info)
|
||||
break;
|
||||
|
||||
case DT_JMPREL:
|
||||
s = htab->root.srelplt->output_section;
|
||||
BFD_ASSERT (s != NULL);
|
||||
dyn.d_un.d_ptr = s->vma;
|
||||
s = htab->root.srelplt;
|
||||
dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
|
||||
bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
|
||||
break;
|
||||
|
||||
case DT_PLTRELSZ:
|
||||
s = htab->root.srelplt->output_section;
|
||||
BFD_ASSERT (s != NULL);
|
||||
s = htab->root.srelplt;
|
||||
dyn.d_un.d_val = s->size;
|
||||
bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
|
||||
break;
|
||||
|
@ -4589,7 +4589,8 @@ elfNN_kvx_finish_dynamic_sections (bfd *output_bfd,
|
||||
break;
|
||||
|
||||
case DT_JMPREL:
|
||||
dyn.d_un.d_ptr = htab->root.srelplt->output_section->vma;
|
||||
s = htab->root.srelplt;
|
||||
dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
|
||||
break;
|
||||
|
||||
case DT_PLTRELSZ:
|
||||
|
Loading…
Reference in New Issue
Block a user