if (s == NULL
|| !bfd_set_section_alignment (s, bed->s->log_file_align))
return false;
+ elf_hash_table (info)->dynamic = s;
/* The special symbol _DYNAMIC is always set to the start of the
.dynamic section. We could set _DYNAMIC in a linker script, but we
hash_table->dynamic_relocs = true;
bed = get_elf_backend_data (hash_table->dynobj);
- s = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
+ s = hash_table->dynamic;
BFD_ASSERT (s != NULL);
newsize = s->size + bed->s->sizeof_dyn;
if (!hash_table->dynobj)
return true;
- sdynamic= bfd_get_linker_section (hash_table->dynobj, ".dynamic");
+ sdynamic= hash_table->dynamic;
if (!sdynamic)
return true;
bfd_byte *extdyn;
bed = get_elf_backend_data (hash_table->dynobj);
- sdyn = bfd_get_linker_section (hash_table->dynobj, ".dynamic");
+ sdyn = hash_table->dynamic;
if (sdyn != NULL && sdyn->size != 0)
for (extdyn = sdyn->contents;
extdyn < sdyn->contents + sdyn->size;
info->callbacks->examine_strtab (dynstr);
bed = get_elf_backend_data (dynobj);
- sdyn = bfd_get_linker_section (dynobj, ".dynamic");
+ sdyn = hash_table->dynamic;
BFD_ASSERT (sdyn != NULL);
/* Update all .dynamic entries referencing .dynstr strings. */
if (htab->dynstr != NULL)
_bfd_elf_strtab_free (htab->dynstr);
_bfd_merge_sections_free (htab->merge_info);
+ /* NB: htab->dynamic->contents is always allocated by bfd_realloc. */
+ if (htab->dynamic != NULL)
+ free (htab->dynamic->contents);
if (htab->first_hash != NULL)
{
bfd_hash_table_free (htab->first_hash);
bfd_byte *dyncon, *dynconend;
/* Fix up .dynamic entries. */
- o = bfd_get_linker_section (dynobj, ".dynamic");
+ o = htab->dynamic;
BFD_ASSERT (o != NULL);
dyncon = o->contents;
/* Check for DT_TEXTREL (late, in case the backend removes it). */
if (bfd_link_textrel_check (info)
- && (o = bfd_get_linker_section (dynobj, ".dynamic")) != NULL
+ && (o = htab->dynamic) != NULL
&& o->size != 0)
{
bfd_byte *dyncon, *dynconend;