123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- From f82863d797e461b936dff2b659a3aa65088ee87e Mon Sep 17 00:00:00 2001
- From: Max Filippov <jcmvbkbc@gmail.com>
- Date: Sun, 22 Jul 2018 18:59:11 -0700
- Subject: [PATCH] xtensa: move dynamic relocations sections consistency
- check
- The function elf_xtensa_finish_dynamic_sections checks that sizes of
- sections .rela.dyn and .rela.plt match number of corresponding relocation
- records, but the check is only done when .rela.plt is non-empty, so, e.g.
- it is never run for the static PIE.
- Rearrange the test so that .rela.dyn and .rela.plt are checked always.
- bfd/
- 2018-07-23 Max Filippov <jcmvbkbc@gmail.com>
- * elf32-xtensa.c (elf_xtensa_finish_dynamic_sections): Move
- relocation sections consistency check to always check both
- .rela.dyn and .rela.plt when they exist. Rearrange variable
- definition and assignment places.
- Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
- Backported from: f82863d797e461b936dff2b659a3aa65088ee87e
- ---
- bfd/elf32-xtensa.c | 22 +++++++++++-----------
- 1 file changed, 11 insertions(+), 11 deletions(-)
- diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c
- index a4b046e445f1..cf085b7b0751 100644
- --- a/bfd/elf32-xtensa.c
- +++ b/bfd/elf32-xtensa.c
- @@ -3156,7 +3156,7 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
- {
- struct elf_xtensa_link_hash_table *htab;
- bfd *dynobj;
- - asection *sdyn, *srelplt, *sgot, *sxtlit, *sgotloc;
- + asection *sdyn, *srelplt, *srelgot, *sgot, *sxtlit, *sgotloc;
- Elf32_External_Dyn *dyncon, *dynconend;
- int num_xtlit_entries = 0;
-
- @@ -3186,15 +3186,15 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
- }
-
- srelplt = htab->elf.srelplt;
- + srelgot = htab->elf.srelgot;
- if (srelplt && srelplt->size != 0)
- {
- - asection *sgotplt, *srelgot, *spltlittbl;
- + asection *sgotplt, *spltlittbl;
- int chunk, plt_chunks, plt_entries;
- Elf_Internal_Rela irela;
- bfd_byte *loc;
- unsigned rtld_reloc;
-
- - srelgot = htab->elf.srelgot;
- spltlittbl = htab->spltlittbl;
- BFD_ASSERT (srelgot != NULL && spltlittbl != NULL);
-
- @@ -3260,14 +3260,6 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
- spltlittbl->contents + (chunk * 8) + 4);
- }
-
- - /* All the dynamic relocations have been emitted at this point.
- - Make sure the relocation sections are the correct size. */
- - if (srelgot->size != (sizeof (Elf32_External_Rela)
- - * srelgot->reloc_count)
- - || srelplt->size != (sizeof (Elf32_External_Rela)
- - * srelplt->reloc_count))
- - abort ();
- -
- /* The .xt.lit.plt section has just been modified. This must
- happen before the code below which combines adjacent literal
- table entries, and the .xt.lit.plt contents have to be forced to
- @@ -3282,6 +3274,14 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd,
- spltlittbl->flags &= ~SEC_HAS_CONTENTS;
- }
-
- + /* All the dynamic relocations have been emitted at this point.
- + Make sure the relocation sections are the correct size. */
- + if ((srelgot && srelgot->size != (sizeof (Elf32_External_Rela)
- + * srelgot->reloc_count))
- + || (srelplt && srelplt->size != (sizeof (Elf32_External_Rela)
- + * srelplt->reloc_count)))
- + abort ();
- +
- /* Combine adjacent literal table entries. */
- BFD_ASSERT (! bfd_link_relocatable (info));
- sxtlit = bfd_get_section_by_name (output_bfd, ".xt.lit");
- --
- 2.11.0
|