* ldwrite.c (build_link_order <lang_data_statement_enum>): Don't

output when section has no contents.
	(build_link_order <lang_reloc_statement_enum>): Likewise.
This commit is contained in:
Alan Modra 2010-10-21 23:28:06 +00:00
parent 46bd4bff3c
commit 2b42b063f3
2 changed files with 61 additions and 45 deletions

View File

@ -1,3 +1,9 @@
2010-10-22 Alan Modra <amodra@gmail.com>
* ldwrite.c (build_link_order <lang_data_statement_enum>): Don't
output when section has no contents.
(build_link_order <lang_reloc_statement_enum>): Likewise.
2010-10-21 Joseph Myers <joseph@codesourcery.com>
* emulparams/elf32_tic6x_le.sh (ATTRS_SECTIONS): Use

View File

@ -1,6 +1,7 @@
/* ldwrite.c -- write out the linked file
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2002,
2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
2003, 2004, 2005, 2006, 2007, 2008, 2010
Free Software Foundation, Inc.
Written by Steve Chamberlain sac@cygnus.com
This file is part of the GNU Binutils.
@ -51,6 +52,11 @@ build_link_order (lang_statement_union_type *statement)
output_section = statement->data_statement.output_section;
ASSERT (output_section->owner == link_info.output_bfd);
if (!((output_section->flags & SEC_HAS_CONTENTS) != 0
|| ((output_section->flags & SEC_LOAD) != 0
&& (output_section->flags & SEC_THREAD_LOCAL))))
break;
link_order = bfd_new_link_order (link_info.output_bfd, output_section);
if (link_order == NULL)
einfo (_("%P%F: bfd_new_link_order failed\n"));
@ -191,6 +197,11 @@ build_link_order (lang_statement_union_type *statement)
output_section = rs->output_section;
ASSERT (output_section->owner == link_info.output_bfd);
if (!((output_section->flags & SEC_HAS_CONTENTS) != 0
|| ((output_section->flags & SEC_LOAD) != 0
&& (output_section->flags & SEC_THREAD_LOCAL))))
break;
link_order = bfd_new_link_order (link_info.output_bfd, output_section);
if (link_order == NULL)
einfo (_("%P%F: bfd_new_link_order failed\n"));
@ -233,14 +244,14 @@ build_link_order (lang_statement_union_type *statement)
&& (i->flags & SEC_EXCLUDE) == 0)
{
asection *output_section = i->output_section;
struct bfd_link_order *link_order;
ASSERT (output_section->owner == link_info.output_bfd);
if ((output_section->flags & SEC_HAS_CONTENTS) != 0
if (!((output_section->flags & SEC_HAS_CONTENTS) != 0
|| ((output_section->flags & SEC_LOAD) != 0
&& (output_section->flags & SEC_THREAD_LOCAL)))
{
struct bfd_link_order *link_order;
&& (output_section->flags & SEC_THREAD_LOCAL))))
break;
link_order = bfd_new_link_order (link_info.output_bfd,
output_section);
@ -248,9 +259,8 @@ build_link_order (lang_statement_union_type *statement)
if ((i->flags & SEC_NEVER_LOAD) != 0
&& (i->flags & SEC_DEBUGGING) == 0)
{
/* We've got a never load section inside one which
is going to be output, we'll change it into a
fill. */
/* We've got a never load section inside one which is
going to be output, we'll change it into a fill. */
link_order->type = bfd_data_link_order;
link_order->u.data.contents = (unsigned char *) "";
link_order->u.data.size = 1;
@ -265,7 +275,6 @@ build_link_order (lang_statement_union_type *statement)
link_order->offset = i->output_offset;
}
}
}
break;
case lang_padding_statement_enum:
@ -277,10 +286,12 @@ build_link_order (lang_statement_union_type *statement)
output_section = statement->padding_statement.output_section;
ASSERT (statement->padding_statement.output_section->owner
== link_info.output_bfd);
if ((output_section->flags & SEC_HAS_CONTENTS) != 0
if (!((output_section->flags & SEC_HAS_CONTENTS) != 0
|| ((output_section->flags & SEC_LOAD) != 0
&& (output_section->flags & SEC_THREAD_LOCAL)))
{
&& (output_section->flags & SEC_THREAD_LOCAL))))
break;
link_order = bfd_new_link_order (link_info.output_bfd,
output_section);
link_order->type = bfd_data_link_order;
@ -289,7 +300,6 @@ build_link_order (lang_statement_union_type *statement)
link_order->u.data.contents = statement->padding_statement.fill->data;
link_order->u.data.size = statement->padding_statement.fill->size;
}
}
break;
default: