DEFINED() need to increment this at the start of the traversal. */
int lang_statement_iteration = 0;
-etree_type *base; /* Relocation base - or null */
-
/* Return TRUE if the PATTERN argument is a wildcard pattern.
Although backslashes are treated specially if a pattern contains
wildcards, we do not consider the mere presence of a backslash to
}
lang_statement_iteration++;
print_statements ();
+
+ ldemul_extra_map_file_text (link_info.output_bfd, &link_info, config.map_file);
}
static bfd_boolean
return default_target;
}
-/* Stashed function to free link_info.hash; see open_output. */
-void (*output_bfd_hash_table_free_fn) (struct bfd_link_hash_table *);
-
/* Open the output file. */
static void
if (link_info.hash == NULL)
einfo (_("%P%F: can not create hash table: %E\n"));
- /* We want to please memory leak checkers by deleting link_info.hash.
- We can't do it in lang_finish, as a bfd target may hold references to
- symbols in this table and use them when their _bfd_write_contents
- function is invoked, as part of bfd_close on the output_bfd. But,
- output_bfd is deallocated at bfd_close, so we can't refer to
- output_bfd after that time, and dereferencing it is needed to call
- "bfd_link_hash_table_free". Smash this dependency deadlock and grab
- the function pointer; arrange to call it on link_info.hash in
- ld_cleanup. */
- output_bfd_hash_table_free_fn
- = link_info.output_bfd->xvec->_bfd_link_hash_table_free;
-
bfd_set_gp_size (link_info.output_bfd, g_switch_value);
}
{
lang_input_section_type *is = &((*this_ptr)->input_section);
asection *i = is->section;
+ asection *o = output_section_statement->bfd_section;
- if (i->sec_info_type != SEC_INFO_TYPE_JUST_SYMS
- && (i->flags & SEC_EXCLUDE) == 0)
+ if (i->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
+ i->output_offset = i->vma - o->vma;
+ else if ((i->flags & SEC_EXCLUDE) != 0)
+ i->output_offset = dot - o->vma;
+ else
{
bfd_size_type alignment_needed;
- asection *o;
/* Align this section first to the input sections requirement,
then to the output section's requirement. If this alignment
if (output_section_statement->subsection_alignment != -1)
i->alignment_power = output_section_statement->subsection_alignment;
- o = output_section_statement->bfd_section;
if (o->alignment_power < i->alignment_power)
o->alignment_power = i->alignment_power;
}
/* Remember where in the output section this input section goes. */
-
i->output_offset = dot - o->vma;
/* Mark how big the output section must be to contain this now. */
dot += TO_ADDR (i->size);
o->size = TO_SIZE (dot - o->vma);
}
- else
- {
- i->output_offset = i->vma - output_section_statement->bfd_section->vma;
- }
return dot;
}
/* The BFD linker needs to have a list of all input BFDs involved in
a link. */
- ASSERT (entry->the_bfd->link_next == NULL);
+ ASSERT (entry->the_bfd->link.next == NULL);
ASSERT (entry->the_bfd != link_info.output_bfd);
*link_info.input_bfds_tail = entry->the_bfd;
- link_info.input_bfds_tail = &entry->the_bfd->link_next;
+ link_info.input_bfds_tail = &entry->the_bfd->link.next;
entry->the_bfd->usrdata = entry;
bfd_set_gp_size (entry->the_bfd, g_switch_value);