diff options
author | Jens Remus <jremus@linux.ibm.com> | 2025-03-10 13:14:08 +0100 |
---|---|---|
committer | Jens Remus <jremus@linux.ibm.com> | 2025-03-10 13:14:08 +0100 |
commit | 28704396ababc06741fbe97b36e6d6e736553849 (patch) | |
tree | 1d4146f0e6a298f0962660c473df4b0310c4465b | |
parent | 768a8d310ddce93937f850f4bc6d799bd7a1a2ee (diff) | |
download | binutils-28704396ababc06741fbe97b36e6d6e736553849.zip binutils-28704396ababc06741fbe97b36e6d6e736553849.tar.gz binutils-28704396ababc06741fbe97b36e6d6e736553849.tar.bz2 |
ld: Cleanup sframe_decoder_init_func_bfdinfo use of reloc cookie
The loop did set cookie->rel to the i-th relocation twice. At the
beginning using the loop counter. At the end by incrementing. One
approach is sufficient.
Change cookie to pointer-to-const, replace cookie->rel by rel,
initialize before the loop and increment at the end, and merge the
two assertions (for cookie->rel) into one.
While at it change sec to pointer-to-const.
bfd/
* elf-sframe.c (sframe_decoder_init_func_bfdinfo): Cleanup use
of relocation cookie.
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
-rw-r--r-- | bfd/elf-sframe.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/bfd/elf-sframe.c b/bfd/elf-sframe.c index 67ed874..97e0073 100644 --- a/bfd/elf-sframe.c +++ b/bfd/elf-sframe.c @@ -98,12 +98,13 @@ sframe_decoder_set_func_reloc_index (struct sframe_dec_info *sfd_info, static bool sframe_decoder_init_func_bfdinfo (bfd *abfd, - asection *sec, + const asection *sec, struct sframe_dec_info *sfd_info, - struct elf_reloc_cookie *cookie) + const struct elf_reloc_cookie *cookie) { unsigned int fde_count; unsigned int func_bfdinfo_size, i; + const Elf_Internal_Rela *rel; fde_count = sframe_decoder_get_num_fidx (sfd_info->sfd_ctx); sfd_info->sfd_fde_count = fde_count; @@ -118,19 +119,17 @@ sframe_decoder_init_func_bfdinfo (bfd *abfd, if ((sec->flags & SEC_LINKER_CREATED) && cookie->rels == NULL) return true; + BFD_ASSERT (cookie->rels + fde_count == cookie->relend); + rel = cookie->rels; for (i = 0; i < fde_count; i++) { - cookie->rel = cookie->rels + i; - BFD_ASSERT (cookie->rel < cookie->relend); /* Bookkeep the relocation offset and relocation index of each function for later use. */ - sframe_decoder_set_func_r_offset (sfd_info, i, cookie->rel->r_offset); - sframe_decoder_set_func_reloc_index (sfd_info, i, - (cookie->rel - cookie->rels)); + sframe_decoder_set_func_r_offset (sfd_info, i, rel->r_offset); + sframe_decoder_set_func_reloc_index (sfd_info, i, i); - cookie->rel++; + rel++; } - BFD_ASSERT (cookie->rel == cookie->relend); return true; } |