/* ldctor.c -- constructor support routines
- Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
- 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2011
- Free Software Foundation, Inc.
+ Copyright (C) 1991-2018 Free Software Foundation, Inc.
By Steve Chamberlain <sac@cygnus.com>
This file is part of the GNU Binutils.
{
if (p->reloc != reloc)
{
- einfo (_("%P%X: Different relocs used in set %s\n"),
+ einfo (_("%X%P: different relocs used in set %s\n"),
h->root.string);
return;
}
/* Don't permit a set to be constructed from different object
- file formats. The same reloc may have different results. We
- actually could sometimes handle this, but the case is
- unlikely to ever arise. Sometimes constructor symbols are in
- unusual sections, such as the absolute section--this appears
- to be the case in Linux a.out--and in such cases we just
- assume everything is OK. */
+ file formats. The same reloc may have different results. We
+ actually could sometimes handle this, but the case is
+ unlikely to ever arise. Sometimes constructor symbols are in
+ unusual sections, such as the absolute section--this appears
+ to be the case in Linux a.out--and in such cases we just
+ assume everything is OK. */
if (p->elements != NULL
&& section->owner != NULL
&& p->elements->section->owner != NULL
&& strcmp (bfd_get_target (section->owner),
bfd_get_target (p->elements->section->owner)) != 0)
{
- einfo (_("%P%X: Different object file formats composing set %s\n"),
+ einfo (_("%X%P: different object file formats composing set %s\n"),
h->root.string);
return;
}
while (*name == '_')
++name;
- if (! CONST_STRNEQ (name, "GLOBAL_"))
+ if (!CONST_STRNEQ (name, "GLOBAL_"))
return -1;
name += sizeof "GLOBAL_" - 1;
return -1;
if (name[1] != 'I' && name[1] != 'D')
return -1;
- if (! ISDIGIT (name[3]))
+ if (!ISDIGIT (name[3]))
return -1;
return atoi (name + 3);
static int
ctor_cmp (const void *p1, const void *p2)
{
- const struct set_element * const *pe1 =
- (const struct set_element * const *) p1;
- const struct set_element * const *pe2 =
- (const struct set_element * const *) p2;
+ const struct set_element *const *pe1
+ = (const struct set_element *const *) p1;
+ const struct set_element *const *pe2
+ = (const struct set_element *const *) p2;
const char *n1;
const char *n2;
int prio1;
howto = bfd_reloc_type_lookup (link_info.output_bfd, p->reloc);
if (howto == NULL)
{
- if (link_info.relocatable)
+ if (bfd_link_relocatable (&link_info))
{
- einfo (_("%P%X: %s does not support reloc %s for set %s\n"),
+ einfo (_("%X%P: %s does not support reloc %s for set %s\n"),
bfd_get_target (link_info.output_bfd),
bfd_get_reloc_code_name (p->reloc),
p->h->root.string);
p->reloc);
if (howto == NULL)
{
- einfo (_("%P%X: %s does not support reloc %s for set %s\n"),
- bfd_get_target (p->elements->section->owner),
- bfd_get_reloc_code_name (p->reloc),
- p->h->root.string);
+ /* See PR 20911 for a reproducer. */
+ if (p->elements->section->owner == NULL)
+ einfo (_("%X%P: special section %s does not support reloc %s for set %s\n"),
+ bfd_get_section_name (link_info.output_bfd, p->elements->section),
+ bfd_get_reloc_code_name (p->reloc),
+ p->h->root.string);
+ else
+ einfo (_("%X%P: %s does not support reloc %s for set %s\n"),
+ bfd_get_target (p->elements->section->owner),
+ bfd_get_reloc_code_name (p->reloc),
+ p->h->root.string);
continue;
}
}
size = QUAD;
break;
default:
- einfo (_("%P%X: Unsupported size %d for set %s\n"),
+ einfo (_("%X%P: unsupported size %d for set %s\n"),
bfd_get_reloc_size (howto), p->h->root.string);
size = LONG;
break;
{
int len;
- if (! header_printed)
+ if (!header_printed)
{
minfo (_("\nSet Symbol\n\n"));
header_printed = TRUE;
}
if (e->name != NULL)
- minfo ("%T\n", e->name);
+ minfo ("%pT\n", e->name);
else
minfo ("%G\n", e->section->owner, e->section, e->value);
}
/* Need SEC_KEEP for --gc-sections. */
- if (! bfd_is_abs_section (e->section))
+ if (!bfd_is_abs_section (e->section))
e->section->flags |= SEC_KEEP;
- if (link_info.relocatable)
+ if (bfd_link_relocatable (&link_info))
lang_add_reloc (p->reloc, howto, e->section, e->name,
exp_intop (e->value));
else