_bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver)
{
bfd_byte *contents = NULL;
- bool free_contents = false;
unsigned int freeidx = 0;
size_t amt;
if (contents == NULL)
goto error_return_verref;
- free_contents = true;
verneed_size = hdr->sh_size;
verneed_count = hdr->sh_info;
}
}
elf_tdata (abfd)->cverrefs = i;
- if (free_contents)
+ if (contents != elf_tdata (abfd)->dt_verneed)
free (contents);
contents = NULL;
}
if (contents == NULL)
goto error_return_verdef;
- free_contents = true;
BFD_ASSERT (sizeof (Elf_External_Verdef)
>= sizeof (Elf_External_Verdaux));
((bfd_byte *) everdef + iverdef->vd_next));
}
- if (free_contents)
+ if (contents != elf_tdata (abfd)->dt_verdef)
free (contents);
contents = NULL;
}
return true;
error_return:
- if (free_contents)
+ if (contents != elf_tdata (abfd)->dt_verneed
+ && contents != elf_tdata (abfd)->dt_verdef)
free (contents);
return false;
}