aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2010-10-21 23:28:06 +0000
committerAlan Modra <amodra@gmail.com>2010-10-21 23:28:06 +0000
commit2b42b063f3a3b0268d5ac52d3fe09dd3b8964924 (patch)
tree80f361d7c61b43c77d30564115d0aa318f45c435
parent46bd4bff3c67cf28dc79687e75807e2aefc055d3 (diff)
downloadgdb-2b42b063f3a3b0268d5ac52d3fe09dd3b8964924.zip
gdb-2b42b063f3a3b0268d5ac52d3fe09dd3b8964924.tar.gz
gdb-2b42b063f3a3b0268d5ac52d3fe09dd3b8964924.tar.bz2
* 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.
-rw-r--r--ld/ChangeLog18
-rw-r--r--ld/ldwrite.c86
2 files changed, 60 insertions, 44 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 5f7885b..09a1f71 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -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
diff --git a/ld/ldwrite.c b/ld/ldwrite.c
index d0616fc..b7a1469 100644
--- a/ld/ldwrite.c
+++ b/ld/ldwrite.c
@@ -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)))
- {
- struct bfd_link_order *link_order;
+ 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 = 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;
+ 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;
}
}
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;