* elf32-i386.c (allocate_dynrelocs): Use SYMBOL_CALLS_LOCAL.

(elf_i386_relocate_section): Likewise.
	* elf32-ppc.c (allocate_dynrelocs): Likewise.
	(ppc_elf_relocate_section): Likewise.
	* elf64-ppc.c (allocate_dynrelocs): Likewise.
	(ppc64_elf_relocate_section): Likewise.
This commit is contained in:
Alan Modra 2003-05-15 06:35:43 +00:00
parent 40f62fa0b5
commit 09695f5689
4 changed files with 34 additions and 6 deletions

View file

@ -1,3 +1,13 @@
2003-05-15 Alan Modra <amodra@bigpond.net.au>
H.J. Lu <hongjiu.lu@intel.com>
* elf32-i386.c (allocate_dynrelocs): Use SYMBOL_CALLS_LOCAL.
(elf_i386_relocate_section): Likewise.
* elf32-ppc.c (allocate_dynrelocs): Likewise.
(ppc_elf_relocate_section): Likewise.
* elf64-ppc.c (allocate_dynrelocs): Likewise.
(ppc64_elf_relocate_section): Likewise.
2003-05-15 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
* elf32-mips.c (gprel32_with_gp): Remove useless N64 ABI case.

View file

@ -1679,7 +1679,13 @@ allocate_dynrelocs (h, inf)
if (info->shared)
{
if (SYMBOL_REFERENCES_LOCAL (info, h))
/* The only reloc that uses pc_count is R_386_PC32, which will
appear on a call or on something like ".long foo - .". We
want calls to protected symbols to resolve directly to the
function rather than going via the plt. If people want
function pointer comparisons to work as expected then they
should avoid writing assembly like ".long foo - .". */
if (SYMBOL_CALLS_LOCAL (info, h))
{
struct elf_i386_dyn_relocs **pp;
@ -2434,7 +2440,7 @@ elf_i386_relocate_section (output_bfd, info, input_bfd, input_section,
|| h->root.type != bfd_link_hash_undefweak)
&& (r_type != R_386_PC32
|| (h != NULL
&& !SYMBOL_REFERENCES_LOCAL (info, h))))
&& !SYMBOL_CALLS_LOCAL (info, h))))
|| (ELIMINATE_COPY_RELOCS
&& !info->shared
&& h != NULL

View file

@ -2799,7 +2799,13 @@ allocate_dynrelocs (h, inf)
if (info->shared)
{
if (SYMBOL_REFERENCES_LOCAL (info, h))
/* Relocs that use pc_count are those that appear on a call
insn, or certain REL relocs (see MUST_BE_DYN_RELOC) that can
generated via assembly. We want calls to protected symbols
to resolve directly to the function rather than going via the
plt. If people want function pointer comparisons to work as
expected then they should avoid writing weird assembly. */
if (SYMBOL_CALLS_LOCAL (info, h))
{
struct ppc_elf_dyn_relocs **pp;
@ -4991,7 +4997,7 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
|| h->root.type != bfd_link_hash_undefweak)
&& (MUST_BE_DYN_RELOC (r_type)
|| (h != NULL
&& !SYMBOL_REFERENCES_LOCAL (info, h))))
&& !SYMBOL_CALLS_LOCAL (info, h))))
|| (ELIMINATE_COPY_RELOCS
&& !info->shared
&& (input_section->flags & SEC_ALLOC) != 0

View file

@ -5621,7 +5621,13 @@ allocate_dynrelocs (h, inf)
if (info->shared)
{
if (SYMBOL_REFERENCES_LOCAL (info, h))
/* Relocs that use pc_count are those that appear on a call
insn, or certain REL relocs (see MUST_BE_DYN_RELOC) that can
generated via assembly. We want calls to protected symbols
to resolve directly to the function rather than going via the
plt. If people want function pointer comparisons to work as
expected then they should avoid writing weird assembly. */
if (SYMBOL_CALLS_LOCAL (info, h))
{
struct ppc_dyn_relocs **pp;
@ -7874,7 +7880,7 @@ ppc64_elf_relocate_section (output_bfd, info, input_bfd, input_section,
|| h->root.type != bfd_link_hash_undefweak)
&& (MUST_BE_DYN_RELOC (r_type)
|| (h != NULL
&& !SYMBOL_REFERENCES_LOCAL (info, h))))
&& !SYMBOL_CALLS_LOCAL (info, h))))
|| (ELIMINATE_COPY_RELOCS
&& !info->shared
&& h != NULL