mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-27 22:48:57 +08:00
Fix "FAIL: -Bsymbolic-functions" for cris-linux in ld
* elf32-cris.c (cris_elf_relocate_section) (elf_cris_finish_dynamic_symbol, cris_elf_check_relocs) (elf_cris_discard_excess_dso_dynamics): Use SYMBOLIC_BIND, not just h->symbolic, to check if a symbol should be bound symbolically.
This commit is contained in:
@ -1,3 +1,11 @@
|
|||||||
|
2015-08-03 Hans-Peter Nilsson <hp@axis.com>
|
||||||
|
|
||||||
|
* elf32-cris.c (cris_elf_relocate_section)
|
||||||
|
(elf_cris_finish_dynamic_symbol, cris_elf_check_relocs)
|
||||||
|
(elf_cris_discard_excess_dso_dynamics): Use SYMBOLIC_BIND, not
|
||||||
|
just h->symbolic, to check if a symbol should be bound
|
||||||
|
symbolically.
|
||||||
|
|
||||||
2015-07-30 H.J. Lu <hongjiu.lu@intel.com>
|
2015-07-30 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR ld/18735
|
PR ld/18735
|
||||||
|
@ -1093,7 +1093,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
|
|||||||
h->elf_link_hash_flags test, though it's there in
|
h->elf_link_hash_flags test, though it's there in
|
||||||
other targets. */
|
other targets. */
|
||||||
if (info->shared
|
if (info->shared
|
||||||
&& ((! info->symbolic && h->dynindx != -1)
|
&& ((!SYMBOLIC_BIND (info, h) && h->dynindx != -1)
|
||||||
|| !h->def_regular)
|
|| !h->def_regular)
|
||||||
&& (input_section->flags & SEC_ALLOC) != 0
|
&& (input_section->flags & SEC_ALLOC) != 0
|
||||||
&& (r_type == R_CRIS_8
|
&& (r_type == R_CRIS_8
|
||||||
@ -1212,7 +1212,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
|
|||||||
|| h->type == STT_FUNC
|
|| h->type == STT_FUNC
|
||||||
|| h->needs_plt))
|
|| h->needs_plt))
|
||||||
|| (info->shared
|
|| (info->shared
|
||||||
&& (info->symbolic || h->dynindx == -1)
|
&& (SYMBOLIC_BIND (info, h) || h->dynindx == -1)
|
||||||
&& h->def_regular))
|
&& h->def_regular))
|
||||||
{
|
{
|
||||||
/* This wasn't checked above for ! info->shared, but
|
/* This wasn't checked above for ! info->shared, but
|
||||||
@ -1432,7 +1432,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
|
|||||||
&& ((r_type != R_CRIS_8_PCREL
|
&& ((r_type != R_CRIS_8_PCREL
|
||||||
&& r_type != R_CRIS_16_PCREL
|
&& r_type != R_CRIS_16_PCREL
|
||||||
&& r_type != R_CRIS_32_PCREL)
|
&& r_type != R_CRIS_32_PCREL)
|
||||||
|| (!info->symbolic
|
|| (!SYMBOLIC_BIND (info, h)
|
||||||
|| (h != NULL && !h->def_regular))))
|
|| (h != NULL && !h->def_regular))))
|
||||||
{
|
{
|
||||||
Elf_Internal_Rela outrel;
|
Elf_Internal_Rela outrel;
|
||||||
@ -1484,7 +1484,7 @@ cris_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED,
|
|||||||
/* h->dynindx may be -1 if the symbol was marked to
|
/* h->dynindx may be -1 if the symbol was marked to
|
||||||
become local. */
|
become local. */
|
||||||
else if (h != NULL
|
else if (h != NULL
|
||||||
&& ((! info->symbolic && h->dynindx != -1)
|
&& ((!SYMBOLIC_BIND (info, h) && h->dynindx != -1)
|
||||||
|| !h->def_regular))
|
|| !h->def_regular))
|
||||||
{
|
{
|
||||||
BFD_ASSERT (h->dynindx != -1);
|
BFD_ASSERT (h->dynindx != -1);
|
||||||
@ -2245,7 +2245,7 @@ elf_cris_finish_dynamic_symbol (bfd *output_bfd,
|
|||||||
where = sgot->contents + (h->got.offset &~ (bfd_vma) 1);
|
where = sgot->contents + (h->got.offset &~ (bfd_vma) 1);
|
||||||
if (! elf_hash_table (info)->dynamic_sections_created
|
if (! elf_hash_table (info)->dynamic_sections_created
|
||||||
|| (info->shared
|
|| (info->shared
|
||||||
&& (info->symbolic || h->dynindx == -1)
|
&& (SYMBOLIC_BIND (info, h) || h->dynindx == -1)
|
||||||
&& h->def_regular))
|
&& h->def_regular))
|
||||||
{
|
{
|
||||||
rela.r_info = ELF32_R_INFO (0, R_CRIS_RELATIVE);
|
rela.r_info = ELF32_R_INFO (0, R_CRIS_RELATIVE);
|
||||||
@ -3661,7 +3661,7 @@ cris_elf_check_relocs (bfd *abfd,
|
|||||||
this shared library) then we can also eliminate the
|
this shared library) then we can also eliminate the
|
||||||
reloc. See comment above for more eliminable cases which
|
reloc. See comment above for more eliminable cases which
|
||||||
we can't identify at this time. */
|
we can't identify at this time. */
|
||||||
if (info->symbolic
|
if (SYMBOLIC_BIND (info, h)
|
||||||
&& h->root.type != bfd_link_hash_defweak
|
&& h->root.type != bfd_link_hash_defweak
|
||||||
&& h->def_regular)
|
&& h->def_regular)
|
||||||
break;
|
break;
|
||||||
@ -3953,7 +3953,7 @@ elf_cris_discard_excess_dso_dynamics (struct elf_cris_link_hash_entry *h,
|
|||||||
any relocs. */
|
any relocs. */
|
||||||
if (h->root.def_regular
|
if (h->root.def_regular
|
||||||
&& (h->root.forced_local
|
&& (h->root.forced_local
|
||||||
|| info->symbolic))
|
|| SYMBOLIC_BIND (info, &h->root)))
|
||||||
{
|
{
|
||||||
for (s = h->pcrel_relocs_copied; s != NULL; s = s->next)
|
for (s = h->pcrel_relocs_copied; s != NULL; s = s->next)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user