struct elf_link_hash_table *htab;
struct eh_frame_hdr_info *hdr_info;
asection *sec;
- bool retval = true;
+ bool retval = false;
htab = elf_hash_table (info);
hdr_info = &htab->eh_info;
size += 4 + hdr_info->u.dwarf.fde_count * 8;
contents = (bfd_byte *) bfd_malloc (size);
if (contents == NULL)
- return false;
+ goto out;
eh_frame_sec = bfd_get_section_by_name (abfd, ".eh_frame");
if (eh_frame_sec == NULL)
- {
- free (contents);
- return false;
- }
+ goto out;
memset (contents, 0, EH_FRAME_HDR_SIZE);
/* Version. */
}
bfd_put_32 (abfd, encoded_eh_frame, contents + 4);
+ retval = true;
if (contents[2] != DW_EH_PE_omit)
{
unsigned int i;
(file_ptr) sec->output_offset,
sec->size))
retval = false;
+ out:
free (contents);
-
free (hdr_info->u.dwarf.array);
+ hdr_info->u.dwarf.array = NULL;
return retval;
}
bfd_hash_table_free (htab->first_hash);
free (htab->first_hash);
}
+ if (htab->eh_info.frame_hdr_is_compact)
+ free (htab->eh_info.u.compact.entries);
+ else
+ free (htab->eh_info.u.dwarf.array);
_bfd_generic_link_hash_table_free (obfd);
}