unusual eh_frame memory leak
Checks
Commit Message
This one happens with --gc-sections and a linker script that either
discards some or all .eh_frame sections (eg. ld-elf/pr14265 test) or
maps an input .eh_frame to some other named output section. In that
case the discarded/renamed .eh_frame won't have local_cies freed.
* elf-eh-frame.c (_bfd_elf_parse_eh_frame): Correct comment.
* elf.c (_bfd_elf_free_cached_info): Free eh_frame cies.
@@ -606,7 +606,9 @@ _bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info,
|| (sec->flags & SEC_HAS_CONTENTS) == 0
|| sec->sec_info_type != SEC_INFO_TYPE_NONE)
{
- /* This file does not contain .eh_frame information. */
+ /* This file does not contain .eh_frame information or
+ .eh_frame has already been parsed, as can happen with
+ --gc-sections. */
return;
}
@@ -10134,6 +10134,12 @@ _bfd_elf_free_cached_info (bfd *abfd)
}
free (elf_section_data (sec)->relocs);
elf_section_data (sec)->relocs = NULL;
+ if (sec->sec_info_type == SEC_INFO_TYPE_EH_FRAME)
+ {
+ struct eh_frame_sec_info *sec_info
+ = elf_section_data (sec)->sec_info;
+ free (sec_info->cies);
+ }
}
free (tdata->symtab_hdr.contents);
tdata->symtab_hdr.contents = NULL;