diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2010-04-01 10:02:27 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@codesourcery.com> | 2010-04-01 10:02:27 +0000 |
commit | 70106466464e05c89403fe47fff8328adf621702 (patch) | |
tree | 0abce2007351c9fa998d8cfd5284b4a4ed9b2088 /bfd/elf32-ppc.c | |
parent | 053dc88b3991f981f5b0611ea2dc1463e4f584fc (diff) | |
download | binutils-redhat-70106466464e05c89403fe47fff8328adf621702.tar.gz |
bfd/
* elf32-ppc.c (apuinfo_set): New static var.
(ppc_elf_begin_write_processing): Set it here, always create an
APUinfo section if there were any in the inputs.
(ppc_elf_write_section): Check apuinfo_set.
(ppc_elf_final_write_processing): Likewise.
ld/testsuite/
* ld-powerpc/apuinfo-nul.rd: New.
* ld-powerpc/apuinfo-nul1.s: New.
* ld-powerpc/powerpc.exp: Add it.
Diffstat (limited to 'bfd/elf32-ppc.c')
-rw-r--r-- | bfd/elf32-ppc.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index 2c42464ee9..28274c4043 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -2077,12 +2077,13 @@ typedef struct apuinfo_list apuinfo_list; static apuinfo_list *head; - +static bfd_boolean apuinfo_set; static void apuinfo_list_init (void) { head = NULL; + apuinfo_set = FALSE; } static void @@ -2162,7 +2163,6 @@ ppc_elf_begin_write_processing (bfd *abfd, struct bfd_link_info *link_info) char *buffer = NULL; bfd_size_type largest_input_size = 0; unsigned i; - unsigned num_entries; unsigned long length; const char *error_message = NULL; @@ -2185,6 +2185,7 @@ ppc_elf_begin_write_processing (bfd *abfd, struct bfd_link_info *link_info) if (length < 20) goto fail; + apuinfo_set = TRUE; if (largest_input_size < asec->size) { if (buffer) @@ -2228,13 +2229,14 @@ ppc_elf_begin_write_processing (bfd *abfd, struct bfd_link_info *link_info) error_message = NULL; - /* Compute the size of the output section. */ - num_entries = apuinfo_list_length (); - - if (num_entries) + if (apuinfo_set) { + /* Compute the size of the output section. */ + unsigned num_entries = apuinfo_list_length (); + /* Set the output section size, if it exists. */ asec = bfd_get_section_by_name (abfd, APUINFO_SECTION_NAME); + if (asec && ! bfd_set_section_size (abfd, asec, 20 + num_entries * 4)) { ibfd = abfd; @@ -2259,8 +2261,7 @@ ppc_elf_write_section (bfd *abfd ATTRIBUTE_UNUSED, asection *asec, bfd_byte *contents ATTRIBUTE_UNUSED) { - return (apuinfo_list_length () - && strcmp (asec->name, APUINFO_SECTION_NAME) == 0); + return apuinfo_set && strcmp (asec->name, APUINFO_SECTION_NAME) == 0; } /* Finally we can generate the output section. */ @@ -2278,7 +2279,7 @@ ppc_elf_final_write_processing (bfd *abfd, bfd_boolean linker ATTRIBUTE_UNUSED) if (asec == NULL) return; - if (apuinfo_list_length () == 0) + if (!apuinfo_set) return; length = asec->size; |