This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
RL78: Ski0p dynamic section checks if the sections have not been created
- From: Nick Clifton <nickc at redhat dot com>
- To: dj at redhat dot com
- Cc: binutils at sourceware dot org
- Date: Mon, 10 Jun 2013 12:53:46 +0100
- Subject: RL78: Ski0p dynamic section checks if the sections have not been created
Hi DJ,
The patch below fixes a couple of problems with the
el78_elf_finish_dynamic_sections functions. The first was that the
check was being run even if the dynamic sections had not been
created. The second was that the checks were being run only when
relaxation had been run, instead of only when relaxation had not been
run.
OK to apply ?
Cheers
Nick
bfd/ChangeLog
2013-06-10 Nick Clifton <nickc@redhat.com>
* elf32-rl78.c (rl78_elf_finish_dynamic_sections): Only run if the
dynamic sections have been created and relaxation has not been run.
Index: bfd/elf32-rl78.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-rl78.c,v
retrieving revision 1.14
diff -u -3 -p -r1.14 elf32-rl78.c
--- bfd/elf32-rl78.c 2 Apr 2013 23:29:51 -0000 1.14
+++ bfd/elf32-rl78.c 10 Jun 2013 11:51:35 -0000
@@ -1270,24 +1270,28 @@ rl78_elf_finish_dynamic_sections (bfd *a
bfd *dynobj;
asection *splt;
+ if (!elf_hash_table (info)->dynamic_sections_created)
+ return TRUE;
+
/* As an extra sanity check, verify that all plt entries have been
filled in. However, relaxing might have changed the relocs so
that some plt entries don't get filled in, so we have to skip
this check if we're relaxing. Unfortunately, check_relocs is
called before relaxation. */
- if (info->relax_trip > 0)
+ if (info->relax_trip > 0)
+ return TRUE;
+
+ if ((dynobj = elf_hash_table (info)->dynobj) != NULL
+ && (splt = bfd_get_linker_section (dynobj, ".plt")) != NULL)
{
- if ((dynobj = elf_hash_table (info)->dynobj) != NULL
- && (splt = bfd_get_linker_section (dynobj, ".plt")) != NULL)
+ bfd_byte *contents = splt->contents;
+ unsigned int i, size = splt->size;
+
+ for (i = 0; i < size; i += 4)
{
- bfd_byte *contents = splt->contents;
- unsigned int i, size = splt->size;
- for (i = 0; i < size; i += 4)
- {
- unsigned int x = bfd_get_32 (dynobj, contents + i);
- BFD_ASSERT (x != 0);
- }
+ unsigned int x = bfd_get_32 (dynobj, contents + i);
+ BFD_ASSERT (x != 0);
}
}