* 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
@ -26,7 +32,7 @@
(add_input_library): Likewise.
(set_extra_library_path): Likewise.
2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
Apply LD plugin patch series (part 6/6).
* ldlang.c (load_symbols): Handle bfd subsitution when calling the
@ -35,13 +41,13 @@
member to the plugins and if claimed set "subsbfd" output parameter to
point to the dummy IR-only BFD.
2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
Apply LD plugin patch series (part 5/6).
* plugin.c (asymbol_from_plugin_symbol): If the bfd is an ELF bfd,
find the elf symbol data and set the visibility in the st_other field.
2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
Apply LD plugin patch series (part 4/6).
* ldlang.c (lang_process)[ENABLE_PLUGINS]: Move invocation of
@ -69,7 +75,7 @@
(onall_symbols_read): Iterate the list of new files, libs and dirs,
adding them.
2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
Apply LD plugin patch series (part 3/6).
* ldmain.c (notice)[ENABLE_PLUGINS]: Call plugin_notice.
@ -89,7 +95,7 @@
(parse_options): Accept "dumpresolutions".
(onall_symbols_read): Get syms and dump resolutions if it was given.
2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
Apply LD plugin patch series (part 2/6).
* ldfile.c (ldfile_try_open_bfd)[ENABLE_PLUGINS]: Don't return early
@ -132,7 +138,7 @@
(onall_symbols_read): Make static and use TV_MESSAGE.
(oncleanup): Likewise.
2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
2010-10-14 Dave Korn <dave.korn.cygwin@gmail.com>
Apply LD plugin patch series (part 1/6).
* configure.in: Add AC_CHECKs for file io and dlfcn headers and

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,37 +244,35 @@ 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
|| ((output_section->flags & SEC_LOAD) != 0
&& (output_section->flags & SEC_THREAD_LOCAL)))
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 ((i->flags & SEC_NEVER_LOAD) != 0
&& (i->flags & SEC_DEBUGGING) == 0)
{
struct bfd_link_order *link_order;
link_order = bfd_new_link_order (link_info.output_bfd,
output_section);
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. */
link_order->type = bfd_data_link_order;
link_order->u.data.contents = (unsigned char *) "";
link_order->u.data.size = 1;
}
else
{
link_order->type = bfd_indirect_link_order;
link_order->u.indirect.section = i;
ASSERT (i->output_section == output_section);
}
link_order->size = i->size;
link_order->offset = i->output_offset;
/* 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;
}
else
{
link_order->type = bfd_indirect_link_order;
link_order->u.indirect.section = i;
ASSERT (i->output_section == output_section);
}
link_order->size = i->size;
link_order->offset = i->output_offset;
}
}
break;
@ -277,18 +286,19 @@ 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
|| ((output_section->flags & SEC_LOAD) != 0
&& (output_section->flags & SEC_THREAD_LOCAL)))
{
link_order = bfd_new_link_order (link_info.output_bfd,
output_section);
link_order->type = bfd_data_link_order;
link_order->size = statement->padding_statement.size;
link_order->offset = statement->padding_statement.output_offset;
link_order->u.data.contents = statement->padding_statement.fill->data;
link_order->u.data.size = statement->padding_statement.fill->size;
}
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);
link_order->type = bfd_data_link_order;
link_order->size = statement->padding_statement.size;
link_order->offset = statement->padding_statement.output_offset;
link_order->u.data.contents = statement->padding_statement.fill->data;
link_order->u.data.size = statement->padding_statement.fill->size;
}
break;