+2021-02-17 Timm Bäder <tbaeder@redhat.com>
+
+ * unstrip.c (adjust_relocs): Move adjust_reloc function to...
+ (adjust_reloc): ... here as static top-level function taking
+ a map array and size as extra arguments.
+
2021-02-17 Timm Bäder <tbaeder@redhat.com>
* elflint.c (check_attributes): Rename and move left function...
update_shdr (outscn, newshdr);
}
+static inline void
+adjust_reloc (GElf_Xword *info,
+ size_t map[], size_t map_size)
+{
+ size_t ndx = GELF_R_SYM (*info);
+ if (ndx != STN_UNDEF)
+ {
+ if (ndx > map_size)
+ error (EXIT_FAILURE, 0, "bad symbol ndx section");
+ *info = GELF_R_INFO (map[ndx - 1], GELF_R_TYPE (*info));
+ }
+}
+
/* Update relocation sections using the symbol table. */
static void
adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const GElf_Shdr *shdr,
{
Elf_Data *data = elf_getdata (outscn, NULL);
- inline void adjust_reloc (GElf_Xword *info)
- {
- size_t ndx = GELF_R_SYM (*info);
- if (ndx != STN_UNDEF)
- {
- if (ndx > map_size)
- error (EXIT_FAILURE, 0, "bad symbol ndx section");
- *info = GELF_R_INFO (map[ndx - 1], GELF_R_TYPE (*info));
- }
- }
-
switch (shdr->sh_type)
{
case SHT_REL:
{
GElf_Rel rel_mem;
GElf_Rel *rel = gelf_getrel (data, i, &rel_mem);
- adjust_reloc (&rel->r_info);
+ adjust_reloc (&rel->r_info, map, map_size);
ELF_CHECK (gelf_update_rel (data, i, rel),
_("cannot update relocation: %s"));
}
{
GElf_Rela rela_mem;
GElf_Rela *rela = gelf_getrela (data, i, &rela_mem);
- adjust_reloc (&rela->r_info);
+ adjust_reloc (&rela->r_info, map, map_size);
ELF_CHECK (gelf_update_rela (data, i, rela),
_("cannot update relocation: %s"));
}