aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
Diffstat (limited to 'bfd')
-rw-r--r--bfd/elf.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/bfd/elf.c b/bfd/elf.c
index 08b6df5..db45d1a 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -9433,7 +9433,6 @@ bool
_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;
@@ -9476,7 +9475,6 @@ _bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver)
if (contents == NULL)
goto error_return_verref;
- free_contents = true;
verneed_size = hdr->sh_size;
verneed_count = hdr->sh_info;
}
@@ -9605,7 +9603,7 @@ _bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver)
}
elf_tdata (abfd)->cverrefs = i;
- if (free_contents)
+ if (contents != elf_tdata (abfd)->dt_verneed)
free (contents);
contents = NULL;
}
@@ -9652,7 +9650,6 @@ _bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver)
if (contents == NULL)
goto error_return_verdef;
- free_contents = true;
BFD_ASSERT (sizeof (Elf_External_Verdef)
>= sizeof (Elf_External_Verdaux));
@@ -9802,7 +9799,7 @@ _bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver)
((bfd_byte *) everdef + iverdef->vd_next));
}
- if (free_contents)
+ if (contents != elf_tdata (abfd)->dt_verdef)
free (contents);
contents = NULL;
}
@@ -9858,7 +9855,8 @@ _bfd_elf_slurp_version_tables (bfd *abfd, bool default_imported_symver)
return true;
error_return:
- if (free_contents)
+ if (contents != elf_tdata (abfd)->dt_verneed
+ && contents != elf_tdata (abfd)->dt_verdef)
free (contents);
return false;
}