* elf32-s390.c (allocate_dynrelocs): For undef weak syms with
non-default visibility, a) don't make them dynamic, b) discard space for dynamic relocs. (elf_s390_relocate_section): Initialize the GOT entries and skip R_390_{8,16,32}/R_390_PC{16,16DBL,32DBL,32} for weak undefined symbols with non-default visibility. * elf64-s390.c: Likewise.
This commit is contained in:
parent
8373f9713f
commit
82058a735b
3 changed files with 52 additions and 8 deletions
|
@ -1,3 +1,13 @@
|
||||||
|
2003-05-09 Martin Schwidefsky <schwidefsky@de.ibm.com>
|
||||||
|
|
||||||
|
* elf32-s390.c (allocate_dynrelocs): For undef weak syms with
|
||||||
|
non-default visibility, a) don't make them dynamic, b) discard
|
||||||
|
space for dynamic relocs.
|
||||||
|
(elf_s390_relocate_section): Initialize the GOT entries and skip
|
||||||
|
R_390_{8,16,32}/R_390_PC{16,16DBL,32DBL,32} for weak undefined
|
||||||
|
symbols with non-default visibility.
|
||||||
|
* elf64-s390.c: Likewise.
|
||||||
|
|
||||||
2003-05-09 Alan Modra <amodra@bigpond.net.au>
|
2003-05-09 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
* cpu-arm.c (arm_check_note): Warning fix.
|
* cpu-arm.c (arm_check_note): Warning fix.
|
||||||
|
|
|
@ -1651,7 +1651,9 @@ allocate_dynrelocs (h, inf)
|
||||||
htab = elf_s390_hash_table (info);
|
htab = elf_s390_hash_table (info);
|
||||||
|
|
||||||
if (htab->elf.dynamic_sections_created
|
if (htab->elf.dynamic_sections_created
|
||||||
&& h->plt.refcount > 0)
|
&& h->plt.refcount > 0
|
||||||
|
&& (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|
|| h->root.type != bfd_link_hash_undefweak))
|
||||||
{
|
{
|
||||||
/* Make sure this symbol is output as a dynamic symbol.
|
/* Make sure this symbol is output as a dynamic symbol.
|
||||||
Undefined weak syms won't yet be marked as dynamic. */
|
Undefined weak syms won't yet be marked as dynamic. */
|
||||||
|
@ -1662,7 +1664,8 @@ allocate_dynrelocs (h, inf)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info, h))
|
if (info->shared
|
||||||
|
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info, h))
|
||||||
{
|
{
|
||||||
asection *s = htab->splt;
|
asection *s = htab->splt;
|
||||||
|
|
||||||
|
@ -1758,7 +1761,10 @@ allocate_dynrelocs (h, inf)
|
||||||
htab->srelgot->_raw_size += sizeof (Elf32_External_Rela);
|
htab->srelgot->_raw_size += sizeof (Elf32_External_Rela);
|
||||||
else if (tls_type == GOT_TLS_GD)
|
else if (tls_type == GOT_TLS_GD)
|
||||||
htab->srelgot->_raw_size += 2 * sizeof (Elf32_External_Rela);
|
htab->srelgot->_raw_size += 2 * sizeof (Elf32_External_Rela);
|
||||||
else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info, h))
|
else if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|
|| h->root.type != bfd_link_hash_undefweak)
|
||||||
|
&& (info->shared
|
||||||
|
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
|
||||||
htab->srelgot->_raw_size += sizeof (Elf32_External_Rela);
|
htab->srelgot->_raw_size += sizeof (Elf32_External_Rela);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1792,6 +1798,12 @@ allocate_dynrelocs (h, inf)
|
||||||
pp = &p->next;
|
pp = &p->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Also discard relocs on undefined weak syms with non-default
|
||||||
|
visibility. */
|
||||||
|
if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
|
||||||
|
&& h->root.type == bfd_link_hash_undefweak)
|
||||||
|
eh->dyn_relocs = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2306,7 +2318,9 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||||
&& (info->symbolic
|
&& (info->symbolic
|
||||||
|| h->dynindx == -1
|
|| h->dynindx == -1
|
||||||
|| (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL))
|
|| (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL))
|
||||||
&& (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
|
&& (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR))
|
||||||
|
|| (ELF_ST_VISIBILITY (h->other)
|
||||||
|
&& h->root.type == bfd_link_hash_undefweak))
|
||||||
{
|
{
|
||||||
/* This is actually a static link, or it is a
|
/* This is actually a static link, or it is a
|
||||||
-Bsymbolic link and the symbol is defined
|
-Bsymbolic link and the symbol is defined
|
||||||
|
@ -2471,6 +2485,9 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if ((info->shared
|
if ((info->shared
|
||||||
|
&& (h == NULL
|
||||||
|
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|
|| h->root.type != bfd_link_hash_undefweak)
|
||||||
&& ((r_type != R_390_PC16
|
&& ((r_type != R_390_PC16
|
||||||
&& r_type != R_390_PC16DBL
|
&& r_type != R_390_PC16DBL
|
||||||
&& r_type != R_390_PC32DBL
|
&& r_type != R_390_PC32DBL
|
||||||
|
|
|
@ -1623,7 +1623,9 @@ allocate_dynrelocs (h, inf)
|
||||||
htab = elf_s390_hash_table (info);
|
htab = elf_s390_hash_table (info);
|
||||||
|
|
||||||
if (htab->elf.dynamic_sections_created
|
if (htab->elf.dynamic_sections_created
|
||||||
&& h->plt.refcount > 0)
|
&& h->plt.refcount > 0
|
||||||
|
&& (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|
|| h->root.type != bfd_link_hash_undefweak))
|
||||||
{
|
{
|
||||||
/* Make sure this symbol is output as a dynamic symbol.
|
/* Make sure this symbol is output as a dynamic symbol.
|
||||||
Undefined weak syms won't yet be marked as dynamic. */
|
Undefined weak syms won't yet be marked as dynamic. */
|
||||||
|
@ -1634,7 +1636,8 @@ allocate_dynrelocs (h, inf)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info, h))
|
if (info->shared
|
||||||
|
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info, h))
|
||||||
{
|
{
|
||||||
asection *s = htab->splt;
|
asection *s = htab->splt;
|
||||||
|
|
||||||
|
@ -1730,7 +1733,10 @@ allocate_dynrelocs (h, inf)
|
||||||
htab->srelgot->_raw_size += sizeof (Elf64_External_Rela);
|
htab->srelgot->_raw_size += sizeof (Elf64_External_Rela);
|
||||||
else if (tls_type == GOT_TLS_GD)
|
else if (tls_type == GOT_TLS_GD)
|
||||||
htab->srelgot->_raw_size += 2 * sizeof (Elf64_External_Rela);
|
htab->srelgot->_raw_size += 2 * sizeof (Elf64_External_Rela);
|
||||||
else if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info, h))
|
else if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|
|| h->root.type != bfd_link_hash_undefweak)
|
||||||
|
&& (info->shared
|
||||||
|
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
|
||||||
htab->srelgot->_raw_size += sizeof (Elf64_External_Rela);
|
htab->srelgot->_raw_size += sizeof (Elf64_External_Rela);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1764,6 +1770,12 @@ allocate_dynrelocs (h, inf)
|
||||||
pp = &p->next;
|
pp = &p->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Also discard relocs on undefined weak syms with non-default
|
||||||
|
visibility. */
|
||||||
|
if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
|
||||||
|
&& h->root.type == bfd_link_hash_undefweak)
|
||||||
|
eh->dyn_relocs = NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -2279,7 +2291,9 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||||
&& (info->symbolic
|
&& (info->symbolic
|
||||||
|| h->dynindx == -1
|
|| h->dynindx == -1
|
||||||
|| (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL))
|
|| (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL))
|
||||||
&& (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
|
&& (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR))
|
||||||
|
|| (ELF_ST_VISIBILITY (h->other)
|
||||||
|
&& h->root.type == bfd_link_hash_undefweak))
|
||||||
{
|
{
|
||||||
/* This is actually a static link, or it is a
|
/* This is actually a static link, or it is a
|
||||||
-Bsymbolic link and the symbol is defined
|
-Bsymbolic link and the symbol is defined
|
||||||
|
@ -2449,6 +2463,9 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if ((info->shared
|
if ((info->shared
|
||||||
|
&& (h == NULL
|
||||||
|
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|
|| h->root.type != bfd_link_hash_undefweak)
|
||||||
&& ((r_type != R_390_PC16
|
&& ((r_type != R_390_PC16
|
||||||
&& r_type != R_390_PC16DBL
|
&& r_type != R_390_PC16DBL
|
||||||
&& r_type != R_390_PC32
|
&& r_type != R_390_PC32
|
||||||
|
|
Loading…
Reference in a new issue