+2017-12-19 Alan Modra <amodra@gmail.com>
+
+ PR 22626
+ * elflink.c (_bfd_elf_link_renumber_dynsyms): Don't set section
+ dynindx when section_sym_count is NULL.
+ (bfd_elf_size_dynamic_sections): Pass NULL section_sym_count to
+ preliminary _bfd_elf_link_renumber_dynsyms call.
+
2017-12-15 Nick Clifton <nickc@redhat.com>
PR 22571
symbol for each output section, which come first. Next come symbols
which have been forced to local binding. Then all of the back-end
allocated local dynamic syms, followed by the rest of the global
- symbols. */
+ symbols. If SECTION_SYM_COUNT is NULL, section dynindx is not set.
+ (This prevents the early call before elf_backend_init_index_section
+ and strip_excluded_output_sections setting dynindx for sections
+ that are stripped.) */
static unsigned long
_bfd_elf_link_renumber_dynsyms (bfd *output_bfd,
unsigned long *section_sym_count)
{
unsigned long dynsymcount = 0;
+ bfd_boolean do_sec = section_sym_count != NULL;
if (bfd_link_pic (info)
|| elf_hash_table (info)->is_relocatable_executable)
if ((p->flags & SEC_EXCLUDE) == 0
&& (p->flags & SEC_ALLOC) != 0
&& !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
- elf_section_data (p)->dynindx = ++dynsymcount;
- else
+ {
+ ++dynsymcount;
+ if (do_sec)
+ elf_section_data (p)->dynindx = dynsymcount;
+ }
+ else if (do_sec)
elf_section_data (p)->dynindx = 0;
}
- *section_sym_count = dynsymcount;
+ if (do_sec)
+ *section_sym_count = dynsymcount;
elf_link_hash_traverse (elf_hash_table (info),
elf_link_renumber_local_hash_table_dynsyms,
if (dynobj != NULL && elf_hash_table (info)->dynamic_sections_created)
{
- unsigned long section_sym_count;
-
if (elf_tdata (output_bfd)->cverdefs)
{
unsigned int crefs = elf_tdata (output_bfd)->cverdefs;
if ((elf_tdata (output_bfd)->cverrefs == 0
&& elf_tdata (output_bfd)->cverdefs == 0)
- || _bfd_elf_link_renumber_dynsyms (output_bfd, info,
- §ion_sym_count) <= 1)
+ || _bfd_elf_link_renumber_dynsyms (output_bfd, info, NULL) <= 1)
{
asection *s;