PR binutils/2735

* elflink.c (elf_link_add_object_symbols): Fix the warning message about
  mismatched alignments to allow for the case where the common alignment
  has been deduced from the section alignment.
* bfd.c (_bfd_default_error_handler): Update comment to explain why bfd
  and asection varargs are out of order.
  Explicitly catch and abort on NULL bfd and asection arguments.
This commit is contained in:
Nick Clifton 2006-06-12 11:12:51 +00:00
parent 13dce8ef13
commit d07676f875
3 changed files with 52 additions and 7 deletions

View File

@ -1,3 +1,13 @@
2006-06-12 Nick Clifton <nickc@redhat.com>
PR binutils/2735
* elflink.c (elf_link_add_object_symbols): Fix the warning message
about mismatched alignments to allow for the case where the common
alignment has been deduced from the section alignment.
* bfd.c (_bfd_default_error_handler): Update comment to explain
why bfd and asection varargs are out of order. Explicitly catch
and abort on NULL bfd and asection arguments.
2006-06-11 Richard Sandiford <richard@codesourcery.com>
Thiemo Seufer <ths@mips.com>

View File

@ -419,6 +419,23 @@ static const char *_bfd_error_program_name;
%A section name from section. For group components, print group name too.
%B file name from bfd. For archive components, prints archive too.
Note - because these two extra format specifiers require special handling
they are scanned for and processed in this function, before calling
vfprintf. This means that the *arguments* for these format specifiers
must be the first ones in the variable argument list, regardless of where
the specifiers appear in the format string. Thus for example calling
this function with a format string of:
"blah %s blah %A blah %d blah %B"
would involve passing the arguments as:
"blah %s blah %A blah %d blah %B",
asection_for_the_%A,
bfd_for_the_%B,
string_for_the_%s,
integer_for_the_%d);
*/
void
@ -483,7 +500,11 @@ _bfd_default_error_handler (const char *fmt, ...)
if (p[1] == 'B')
{
bfd *abfd = va_arg (ap, bfd *);
if (abfd->my_archive)
if (abfd == NULL)
/* Invoking %B with a null bfd pointer is an internal error. */
abort ();
else if (abfd->my_archive)
snprintf (bufp, avail, "%s(%s)",
abfd->my_archive->filename, abfd->filename);
else
@ -492,10 +513,14 @@ _bfd_default_error_handler (const char *fmt, ...)
else
{
asection *sec = va_arg (ap, asection *);
bfd *abfd = sec->owner;
bfd *abfd;
const char *group = NULL;
struct coff_comdat_info *ci;
if (sec == NULL)
/* Invoking %A with a null section pointer is an internal error. */
abort ();
abfd = sec->owner;
if (abfd != NULL
&& bfd_get_flavour (abfd) == bfd_target_elf_flavour
&& elf_next_in_group (sec) != NULL

View File

@ -3922,12 +3922,22 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
}
if (normal_align < common_align)
{
/* PR binutils/2735 */
if (normal_bfd == NULL)
(*_bfd_error_handler)
(_("Warning: alignment %u of common symbol `%s' in %B"
" is greater than the alignment (%u) of its section %A"),
common_bfd, h->root.u.def.section,
1 << common_align, name, 1 << normal_align);
else
(*_bfd_error_handler)
(_("Warning: alignment %u of symbol `%s' in %B"
" is smaller than %u in %B"),
normal_bfd, common_bfd,
1 << normal_align, name, 1 << common_align);
}
}
/* Remember the symbol size and type. */
if (isym->st_size != 0