This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: ld scripts: overlay of input sections ???
- From: Alan Modra <amodra at bigpond dot net dot au>
- To: binutils at sources dot redhat dot com
- Date: Sat, 21 Sep 2002 19:41:06 +0930
- Subject: Re: ld scripts: overlay of input sections ???
- References: <000b01c23880$67c83aa0$61f6fea9@cisco.com>
See http://sources.redhat.com/ml/binutils/2002-07/msg00786.html
* elf32-ppc.c (ppc_elf_relocate_section): Allow ".sbss.*" and
".sdata.*" for R_PPC_SDAREL16, ".sbss2*" and ".sdata2*" for
R_PPC_EMB_SDA2REL. Similarly for R_PPC_EMB_SDA21 and
R_PPC_EMB_RELSDA.
Index: bfd/elf32-ppc.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-ppc.c,v
retrieving revision 1.51
diff -u -p -r1.51 elf32-ppc.c
--- bfd/elf32-ppc.c 20 Sep 2002 05:54:41 -0000 1.51
+++ bfd/elf32-ppc.c 21 Sep 2002 09:25:28 -0000
@@ -3483,8 +3483,10 @@ ppc_elf_relocate_section (output_bfd, in
BFD_ASSERT (sec != (asection *) 0);
name = bfd_get_section_name (abfd, sec->output_section);
- if (strcmp (name, ".sdata") != 0
- && strcmp (name, ".sbss") != 0)
+ if (! ((strncmp (name, ".sdata", 6) == 0
+ && (name[6] == 0 || name[6] == '.'))
+ || (strncmp (name, ".sbss", 5) == 0
+ && (name[5] == 0 || name[5] == '.'))))
{
(*_bfd_error_handler) (_("%s: The target (%s) of a %s relocation is in the wrong output section (%s)"),
bfd_archive_filename (input_bfd),
@@ -3505,7 +3507,8 @@ ppc_elf_relocate_section (output_bfd, in
BFD_ASSERT (sec != (asection *) 0);
name = bfd_get_section_name (abfd, sec->output_section);
- if (strcmp (name, ".sdata2") != 0 && strcmp (name, ".sbss2") != 0)
+ if (! (strncmp (name, ".sdata2", 7) == 0
+ || strncmp (name, ".sbss2", 6) == 0))
{
(*_bfd_error_handler) (_("%s: The target (%s) of a %s relocation is in the wrong output section (%s)"),
bfd_archive_filename (input_bfd),
@@ -3532,7 +3535,10 @@ ppc_elf_relocate_section (output_bfd, in
BFD_ASSERT (sec != (asection *) 0);
name = bfd_get_section_name (abfd, sec->output_section);
- if (strcmp (name, ".sdata") == 0 || strcmp (name, ".sbss") == 0)
+ if (((strncmp (name, ".sdata", 6) == 0
+ && (name[6] == 0 || name[6] == '.'))
+ || (strncmp (name, ".sbss", 5) == 0
+ && (name[5] == 0 || name[5] == '.'))))
{
reg = 13;
addend -= (sdata->sym_hash->root.u.def.value
@@ -3540,8 +3546,8 @@ ppc_elf_relocate_section (output_bfd, in
+ sdata->sym_hash->root.u.def.section->output_offset);
}
- else if (strcmp (name, ".sdata2") == 0
- || strcmp (name, ".sbss2") == 0)
+ else if (strncmp (name, ".sdata2", 7) == 0
+ || strncmp (name, ".sbss2", 6) == 0)
{
reg = 2;
addend -= (sdata2->sym_hash->root.u.def.value
--
Alan Modra
IBM OzLabs - Linux Technology Centre