PR ld/13049

* elf32-arm.c (STUB_SUFFIX): Avoid collision with user namespace
	symbol names.
	* elf64-ppc.c (STUB_SUFFIX): Likewise.
	* elf32-hppa.c (STUB_SUFFIX): Likewise.
This commit is contained in:
Nick Clifton 2011-10-20 16:27:04 +00:00
parent 27ca1a5b08
commit 9553db3cc3
4 changed files with 42 additions and 9 deletions

View file

@ -1,3 +1,11 @@
2011-10-20 Nick Clifton <nickc@redhat.com>
PR ld/13049
* elf32-arm.c (STUB_SUFFIX): Avoid collision with user namespace
symbol names.
* elf64-ppc.c (STUB_SUFFIX): Likewise.
* elf32-hppa.c (STUB_SUFFIX): Likewise.
2011-10-20 Alan Modra <amodra@gmail.com>
* elf32-i386.c (i386_opcode16): Delete.

View file

@ -2354,9 +2354,32 @@ static const insn_sequence elf32_arm_stub_a8_veneer_blx[] =
ARM_REL_INSN(0xea000000, -8) /* b original_branch_dest. */
};
/* Section name for stubs is the associated section name plus this
string. */
#define STUB_SUFFIX ".stub"
/* For each section group there can be a specially created linker section
to hold the stubs for that group. The name of the stub section is based
upon the name of another section within that group with the suffix below
applied.
PR 13049: STUB_SUFFIX used to be ".stub", but this allowed the user to
create what appeared to be a linker stub section when it actually
contained user code/data. For example, consider this fragment:
const char * stubborn_problems[] = { "np" };
If this is compiled with "-fPIC -fdata-sections" then gcc produces a
section called:
.data.rel.local.stubborn_problems
This then causes problems in arm32_arm_build_stubs() as it triggers:
// Ignore non-stub sections.
if (!strstr (stub_sec->name, STUB_SUFFIX))
continue;
And so the section would be ignored instead of being processed. Hence
the change in definition of STUB_SUFFIX to a name that cannot be a valid
C identifier. */
#define STUB_SUFFIX ".__stub"
/* One entry per long/short branch stub defined above. */
#define DEF_STUBS \
@ -3557,7 +3580,7 @@ arm_type_of_stub (struct bfd_link_info *info,
stub_type = (info->shared | globals->pic_veneer)
/* PIC stubs. */
? ((globals->use_blx
&& (r_type ==R_ARM_THM_CALL))
&& (r_type == R_ARM_THM_CALL))
/* V5T and above. Stub starts with ARM code, so
we must be able to switch mode before
reaching it, which is only possible for 'bl'
@ -3568,7 +3591,7 @@ arm_type_of_stub (struct bfd_link_info *info,
/* non-PIC stubs. */
: ((globals->use_blx
&& (r_type ==R_ARM_THM_CALL))
&& (r_type == R_ARM_THM_CALL))
/* V5T and above. */
? arm_stub_long_branch_any_any
/* V4T. */
@ -3797,7 +3820,9 @@ elf32_arm_create_or_find_stub_sec (asection **link_sec_p, asection *section,
asection *stub_sec;
link_sec = htab->stub_group[section->id].link_sec;
BFD_ASSERT (link_sec != NULL);
stub_sec = htab->stub_group[section->id].stub_sec;
if (stub_sec == NULL)
{
stub_sec = htab->stub_group[link_sec->id].stub_sec;

View file

@ -155,8 +155,8 @@ static const bfd_byte plt_stub[] =
};
/* Section name for stubs is the associated section name plus this
string. */
#define STUB_SUFFIX ".stub"
string. PR 13049: Use a name that is not a valid C identifier. */
#define STUB_SUFFIX ".__stub"
/* We don't need to copy certain PC- or GP-relative dynamic relocs
into a shared object's dynamic section. All the relocs of the

View file

@ -3527,8 +3527,8 @@ must_be_dyn_reloc (struct bfd_link_info *info,
#define ELIMINATE_COPY_RELOCS 1
/* Section name for stubs is the associated section name plus this
string. */
#define STUB_SUFFIX ".stub"
string. PR 13049: Use a name that is not a valid C identifier. */
#define STUB_SUFFIX ".__stub"
/* Linker stubs.
ppc_stub_long_branch: