/* Return true if the dynamic symbol for a given section should be
omitted when creating a shared library. */
bfd_boolean
-_bfd_elf_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED,
- struct bfd_link_info *info,
- asection *p)
+_bfd_elf_omit_section_dynsym_default (bfd *output_bfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info,
+ asection *p)
{
struct elf_link_hash_table *htab;
asection *ip;
}
}
+bfd_boolean
+_bfd_elf_omit_section_dynsym_all
+ (bfd *output_bfd ATTRIBUTE_UNUSED,
+ struct bfd_link_info *info ATTRIBUTE_UNUSED,
+ asection *p ATTRIBUTE_UNUSED)
+{
+ return TRUE;
+}
+
/* Assign dynsym indices. In a shared library we generate a section
symbol for each output section, which come first. Next come symbols
which have been forced to local binding. Then all of the back-end
if (tdef && ntdef)
_bfd_error_handler
/* xgettext:c-format */
- (_("%s: TLS definition in %B section %A "
- "mismatches non-TLS definition in %B section %A"),
+ (_("%s: TLS definition in %pB section %pA "
+ "mismatches non-TLS definition in %pB section %pA"),
h->root.root.string, tbfd, tsec, ntbfd, ntsec);
else if (!tdef && !ntdef)
_bfd_error_handler
/* xgettext:c-format */
- (_("%s: TLS reference in %B "
- "mismatches non-TLS reference in %B"),
+ (_("%s: TLS reference in %pB "
+ "mismatches non-TLS reference in %pB"),
h->root.root.string, tbfd, ntbfd);
else if (tdef)
_bfd_error_handler
/* xgettext:c-format */
- (_("%s: TLS definition in %B section %A "
- "mismatches non-TLS reference in %B"),
+ (_("%s: TLS definition in %pB section %pA "
+ "mismatches non-TLS reference in %pB"),
h->root.root.string, tbfd, tsec, ntbfd);
else
_bfd_error_handler
/* xgettext:c-format */
- (_("%s: TLS reference in %B "
- "mismatches non-TLS definition in %B section %A"),
+ (_("%s: TLS reference in %pB "
+ "mismatches non-TLS definition in %pB section %pA"),
h->root.root.string, tbfd, ntbfd, ntsec);
bfd_set_error (bfd_error_bad_value);
&& hi->root.type != bfd_link_hash_defweak)
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: unexpected redefinition of indirect versioned symbol `%s'"),
+ (_("%pB: unexpected redefinition of indirect versioned symbol `%s'"),
abfd, shortname);
}
else
generating a shared archive. Return an error. */
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: version node not found for symbol %s"),
+ (_("%pB: version node not found for symbol %s"),
info->output_bfd, h->root.root.string);
bfd_set_error (bfd_error_bad_value);
sinfo->failed = TRUE;
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: bad reloc symbol index (%#Lx >= %#lx)"
- " for offset %#Lx in section `%A'"),
- abfd, r_symndx, (unsigned long) nsyms,
- irela->r_offset, sec);
+ (_("%pB: bad reloc symbol index (%#" PRIx64 " >= %#lx)"
+ " for offset %#" PRIx64 " in section `%pA'"),
+ abfd, (uint64_t) r_symndx, (unsigned long) nsyms,
+ (uint64_t) irela->r_offset, sec);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: non-zero symbol index (%#Lx)"
- " for offset %#Lx in section `%A'"
+ (_("%pB: non-zero symbol index (%#" PRIx64 ")"
+ " for offset %#" PRIx64 " in section `%pA'"
" when the object file has no symbol table"),
- abfd, r_symndx,
- irela->r_offset, sec);
+ abfd, (uint64_t) r_symndx,
+ (uint64_t) irela->r_offset, sec);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: relocation size mismatch in %B section %A"),
+ (_("%pB: relocation size mismatch in %pB section %pA"),
output_bfd, input_section->owner, input_section);
bfd_set_error (bfd_error_wrong_format);
return FALSE;
|| (info->extern_protected_data < 0
&& !get_elf_backend_data (dynbss->owner)->extern_protected_data)))
info->callbacks->einfo
- (_("%P: copy reloc against protected `%T' is dangerous\n"),
+ (_("%P: copy reloc against protected `%pT' is dangerous\n"),
h->root.root.string);
return TRUE;
&& ehdr->e_machine == bed->elf_machine_alt1)
|| (bed->elf_machine_alt2 != 0
&& ehdr->e_machine == bed->elf_machine_alt2)))
- info->callbacks->einfo
+ _bfd_error_handler
/* xgettext:c-format */
- (_("%P: alternate ELF machine code found (%d) in %B, expecting %d\n"),
+ (_("alternate ELF machine code found (%d) in %pB, expecting %d"),
ehdr->e_machine, abfd, bed->elf_machine_code);
/* As a GNU extension, any input sections which are named
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: %s: invalid version %u (max %d)"),
+ (_("%pB: %s: invalid version %u (max %d)"),
abfd, name, vernum,
elf_tdata (abfd)->cverdefs);
bfd_set_error (bfd_error_bad_value);
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: %s: invalid needed version %d"),
+ (_("%pB: %s: invalid needed version %d"),
abfd, name, vernum);
bfd_set_error (bfd_error_bad_value);
goto error_free_vers;
if (normal_bfd == NULL)
_bfd_error_handler
/* xgettext:c-format */
- (_("Warning: alignment %u of common symbol `%s' in %B is"
- " greater than the alignment (%u) of its section %A"),
+ (_("warning: alignment %u of common symbol `%s' in %pB is"
+ " greater than the alignment (%u) of its section %pA"),
1 << common_align, name, common_bfd,
1 << normal_align, h->root.u.def.section);
else
_bfd_error_handler
/* xgettext:c-format */
- (_("Warning: alignment %u of symbol `%s' in %B"
- " is smaller than %u in %B"),
+ (_("warning: alignment %u of symbol `%s' in %pB"
+ " is smaller than %u in %pB"),
1 << normal_align, name, normal_bfd,
1 << common_align, common_bfd);
}
&& ! size_change_ok)
_bfd_error_handler
/* xgettext:c-format */
- (_("Warning: size of symbol `%s' changed"
- " from %Lu in %B to %Lu in %B"),
- name, h->size, old_bfd, isym->st_size, abfd);
+ (_("warning: size of symbol `%s' changed"
+ " from %" PRIu64 " in %pB to %" PRIu64 " in %pB"),
+ name, (uint64_t) h->size, old_bfd,
+ (uint64_t) isym->st_size, abfd);
h->size = isym->st_size;
}
if (h->type != STT_NOTYPE && ! type_change_ok)
/* xgettext:c-format */
_bfd_error_handler
- (_("Warning: type of symbol `%s' changed"
- " from %d to %d in %B"),
+ (_("warning: type of symbol `%s' changed"
+ " from %d to %d in %pB"),
name, h->type, type, abfd);
h->type = type;
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: undefined reference to symbol '%s'"),
+ (_("%pB: undefined reference to symbol '%s'"),
old_bfd, name);
bfd_set_error (bfd_error_missing_dso);
goto error_free_vers;
h->type = STT_OBJECT;
if (info->stacksize)
/* xgettext:c-format */
- _bfd_error_handler (_("%B: stack size specified and %s set"),
+ _bfd_error_handler (_("%pB: stack size specified and %s set"),
output_bfd, legacy_symbol);
else if (h->root.u.def.section != bfd_abs_section_ptr)
/* xgettext:c-format */
- _bfd_error_handler (_("%B: %s not absolute"),
+ _bfd_error_handler (_("%pB: %s not absolute"),
output_bfd, legacy_symbol);
else
info->stacksize = h->root.u.def.value;
== SHT_PREINIT_ARRAY)
{
_bfd_error_handler
- (_("%B: .preinit_array section is not allowed in DSO"),
+ (_("%pB: .preinit_array section is not allowed in DSO"),
sub);
break;
}
for (s = output_bfd->sections; s != NULL; s = s->next)
if ((s->flags & (SEC_EXCLUDE | SEC_ALLOC)) == SEC_ALLOC
- && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
+ && !_bfd_elf_omit_section_dynsym_default (output_bfd, info, s))
{
elf_hash_table (info)->text_index_section = s;
break;
_bfd_elf_link_omit_section_dynsym. */
for (s = output_bfd->sections; s != NULL; s = s->next)
if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY)) == SEC_ALLOC)
- && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
+ && !_bfd_elf_omit_section_dynsym_default (output_bfd, info, s))
{
elf_hash_table (info)->data_index_section = s;
break;
for (s = output_bfd->sections; s != NULL; s = s->next)
if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY))
== (SEC_ALLOC | SEC_READONLY))
- && !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
+ && !_bfd_elf_omit_section_dynsym_default (output_bfd, info, s))
{
elf_hash_table (info)->text_index_section = s;
break;
&& ! info->gc_keep_exported)
{
/* PR 21524: Let the user know if a symbol was removed by garbage collection. */
- _bfd_error_handler (_("%B:%A: error: relocation references symbol %s which was removed by garbage collection."),
+ _bfd_error_handler (_("%pB:%pA: error: relocation references symbol %s which was removed by garbage collection"),
abfd, sec,
(*rel_hash)->root.root.string);
- _bfd_error_handler (_("%B:%A: error: try relinking with --gc-keep-exported enabled."),
+ _bfd_error_handler (_("%pB:%pA: error: try relinking with --gc-keep-exported enabled"),
abfd, sec);
bfd_set_error (bfd_error_invalid_operation);
return FALSE;
/* Section size is only divisible by rela. */
if (use_rela_initialised && !use_rela)
{
- _bfd_error_handler (_("%B: Unable to sort relocs - "
+ _bfd_error_handler (_("%pB: unable to sort relocs - "
"they are in more than one size"),
abfd);
bfd_set_error (bfd_error_invalid_operation);
/* Section size is only divisible by rel. */
if (use_rela_initialised && use_rela)
{
- _bfd_error_handler (_("%B: Unable to sort relocs - "
+ _bfd_error_handler (_("%pB: unable to sort relocs - "
"they are in more than one size"),
abfd);
bfd_set_error (bfd_error_invalid_operation);
{
/* The section size is not divisible by either -
something is wrong. */
- _bfd_error_handler (_("%B: Unable to sort relocs - "
+ _bfd_error_handler (_("%pB: unable to sort relocs - "
"they are of an unknown size"), abfd);
bfd_set_error (bfd_error_invalid_operation);
return 0;
/* Section size is only divisible by rela. */
if (use_rela_initialised && !use_rela)
{
- _bfd_error_handler (_("%B: Unable to sort relocs - "
+ _bfd_error_handler (_("%pB: unable to sort relocs - "
"they are in more than one size"),
abfd);
bfd_set_error (bfd_error_invalid_operation);
/* Section size is only divisible by rel. */
if (use_rela_initialised && use_rela)
{
- _bfd_error_handler (_("%B: Unable to sort relocs - "
+ _bfd_error_handler (_("%pB: unable to sort relocs - "
"they are in more than one size"),
abfd);
bfd_set_error (bfd_error_invalid_operation);
{
/* The section size is not divisible by either -
something is wrong. */
- _bfd_error_handler (_("%B: Unable to sort relocs - "
+ _bfd_error_handler (_("%pB: unable to sort relocs - "
"they are of an unknown size"), abfd);
bfd_set_error (bfd_error_invalid_operation);
return 0;
if (sort == NULL)
{
(*info->callbacks->warning)
- (info, _("Not enough memory to sort relocations"), 0, abfd, 0, 0);
+ (info, _("not enough memory to sort relocations"), 0, abfd, 0, 0);
return 0;
}
beyond 64k. */
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: Too many sections: %d (>= %d)"),
+ (_("%pB: too many sections: %d (>= %d)"),
abfd, bfd_count_sections (abfd), SHN_LORESERVE & 0xffff);
bfd_set_error (bfd_error_nonrepresentable_section);
return FALSE;
if (ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)
/* xgettext:c-format */
- msg = _("%B: internal symbol `%s' in %B is referenced by DSO");
+ msg = _("%pB: internal symbol `%s' in %pB is referenced by DSO");
else if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN)
/* xgettext:c-format */
- msg = _("%B: hidden symbol `%s' in %B is referenced by DSO");
+ msg = _("%pB: hidden symbol `%s' in %pB is referenced by DSO");
else
/* xgettext:c-format */
- msg = _("%B: local symbol `%s' in %B is referenced by DSO");
+ msg = _("%pB: local symbol `%s' in %pB is referenced by DSO");
def_bfd = flinfo->output_bfd;
if (hi->root.u.def.section != bfd_abs_section_ptr)
def_bfd = hi->root.u.def.section->owner;
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: could not find output section %A for input section %A"),
+ (_("%pB: could not find output section %pA for input section %pA"),
flinfo->output_bfd, input_sec->output_section, input_sec);
bfd_set_error (bfd_error_nonrepresentable_section);
eoinfo->failed = TRUE;
if (ELF_ST_VISIBILITY (sym.st_other) == STV_PROTECTED)
/* xgettext:c-format */
- msg = _("%B: protected symbol `%s' isn't defined");
+ msg = _("%pB: protected symbol `%s' isn't defined");
else if (ELF_ST_VISIBILITY (sym.st_other) == STV_INTERNAL)
/* xgettext:c-format */
- msg = _("%B: internal symbol `%s' isn't defined");
+ msg = _("%pB: internal symbol `%s' isn't defined");
else
/* xgettext:c-format */
- msg = _("%B: hidden symbol `%s' isn't defined");
+ msg = _("%pB: hidden symbol `%s' isn't defined");
_bfd_error_handler (msg, flinfo->output_bfd, h->root.root.string);
bfd_set_error (bfd_error_bad_value);
eoinfo->failed = TRUE;
{
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: No symbol version section for versioned symbol `%s'"),
+ (_("%pB: no symbol version section for versioned symbol `%s'"),
flinfo->output_bfd, h->root.root.string);
eoinfo->failed = TRUE;
return FALSE;
{
_bfd_error_handler
/* xgettext:c-format */
- (_("error: %B: size of section %A is not "
+ (_("error: %pB: size of section %pA is not "
"multiple of address size"),
input_bfd, o);
bfd_set_error (bfd_error_bad_value);
{
_bfd_error_handler
/* xgettext:c-format */
- (_("error: %B contains a reloc (%#Lx) for section %A "
+ (_("error: %pB contains a reloc (%#" PRIx64 ") for section %pA "
"that references a non-existent global symbol"),
- input_bfd, rel->r_info, o);
+ input_bfd, (uint64_t) rel->r_info, o);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
if (action_discarded & COMPLAIN)
(*flinfo->info->callbacks->einfo)
/* xgettext:c-format */
- (_("%X`%s' referenced in section `%A' of %B: "
- "defined in discarded section `%A' of %B\n"),
+ (_("%X`%s' referenced in section `%pA' of %pB: "
+ "defined in discarded section `%pA' of %pB\n"),
sym_name, o, input_bfd, sec, sec->owner);
/* Try to do the best we can to support buggy old
if (bed->link_order_error_handler)
bed->link_order_error_handler
/* xgettext:c-format */
- (_("%B: warning: sh_link not set for section `%A'"), s->owner, s);
+ (_("%pB: warning: sh_link not set for section `%pA'"), s->owner, s);
return 0;
}
else
if (other_sec && linkorder_sec)
_bfd_error_handler
/* xgettext:c-format */
- (_("%A has both ordered [`%A' in %B] "
- "and unordered [`%A' in %B] sections"),
+ (_("%pA has both ordered [`%pA' in %pB] "
+ "and unordered [`%pA' in %pB] sections"),
o, linkorder_sec, linkorder_sec->owner,
other_sec, other_sec->owner);
else
_bfd_error_handler
- (_("%A has both ordered and unordered sections"), o);
+ (_("%pA has both ordered and unordered sections"), o);
bfd_set_error (bfd_error_bad_value);
return FALSE;
}
if (symcount == 0)
{
bfd_set_error (bfd_error_no_symbols);
- _bfd_error_handler (_("%B: no symbol found for import library"),
+ _bfd_error_handler (_("%pB: no symbol found for import library"),
implib_bfd);
goto free_sym_buf;
}
else
o->flags |= SEC_EXCLUDE;
}
+ else if ((o->flags & SEC_GROUP) != 0 && o->size == 0)
+ {
+ /* Remove empty group section from linker output. */
+ o->flags |= SEC_EXCLUDE;
+ bfd_section_list_remove (abfd, o);
+ abfd->section_count--;
+ }
}
/* Count up the number of relocations we will output for each output
bfd_set_error (bfd_error_wrong_format);
_bfd_error_handler
/* xgettext:c-format */
- (_("%B: file class %s incompatible with %s"),
+ (_("%pB: file class %s incompatible with %s"),
sub, iclass, oclass);
}
if (info->out_implib_bfd && !elf_output_implib (abfd, info))
{
- _bfd_error_handler (_("%B: failed to generate import library"),
+ _bfd_error_handler (_("%pB: failed to generate import library"),
info->out_implib_bfd);
return FALSE;
}
{
if (info->error_textrel)
info->callbacks->einfo
- (_("%P%X: read-only segment has dynamic relocations.\n"));
+ (_("%P%X: read-only segment has dynamic relocations\n"));
else
info->callbacks->einfo
- (_("%P: warning: creating a DT_TEXTREL in a shared object.\n"));
+ (_("%P: warning: creating a DT_TEXTREL in a shared object\n"));
break;
}
}
h = cookie->sym_hashes[r_symndx - cookie->extsymoff];
if (h == NULL)
{
- info->callbacks->einfo (_("%F%P: corrupt input: %B\n"),
+ info->callbacks->einfo (_("%F%P: corrupt input: %pB\n"),
sec->owner);
return NULL;
}
if (info->print_gc_sections && o->size != 0)
/* xgettext:c-format */
- _bfd_error_handler (_("Removing unused section '%A' in file '%B'"),
+ _bfd_error_handler (_("removing unused section '%pA' in file '%pB'"),
o, sub);
}
}
if (!bed->can_gc_sections
|| !is_elf_hash_table (info->hash))
{
- _bfd_error_handler(_("Warning: gc-sections option ignored"));
+ _bfd_error_handler(_("warning: gc-sections option ignored"));
return TRUE;
}
}
/* xgettext:c-format */
- _bfd_error_handler (_("%B: %A+%#Lx: No symbol found for INHERIT"),
- abfd, sec, offset);
+ _bfd_error_handler (_("%pB: %pA+%#" PRIx64 ": no symbol found for INHERIT"),
+ abfd, sec, (uint64_t) offset);
bfd_set_error (bfd_error_invalid_operation);
return FALSE;
if (!tf->valid)
{
info->callbacks->einfo
- (_("Unrecognized INPUT_SECTION_FLAG %s\n"), tf->name);
+ (_("unrecognized INPUT_SECTION_FLAG %s\n"), tf->name);
return FALSE;
}
}