Properly convert LTO plugin visibility to ELF visibility.

ld/

2010-12-05  H.J. Lu  <hongjiu.lu@intel.com>

	* plugin.c (asymbol_from_plugin_symbol): Properly convert LTO
	plugin visibility to ELF visibility.
	(is_visible_from_outside): Re-indent.

ld/testsuite/

2010-12-05  H.J. Lu  <hongjiu.lu@intel.com>

	* ld-plugin/plugin-vis-1.d: Updated.
This commit is contained in:
H.J. Lu 2010-12-06 00:00:15 +00:00
parent a2c86c8224
commit cfac8028e4
4 changed files with 39 additions and 8 deletions

View File

@ -1,3 +1,9 @@
2010-12-05 H.J. Lu <hongjiu.lu@intel.com>
* plugin.c (asymbol_from_plugin_symbol): Properly convert LTO
plugin visibility to ELF visibility.
(is_visible_from_outside): Re-indent.
2010-12-04 Alan Modra <amodra@gmail.com> 2010-12-04 Alan Modra <amodra@gmail.com>
* ldlang.c (lang_size_sections_1): Align lma using same alignment * ldlang.c (lang_size_sections_1): Align lma using same alignment

View File

@ -307,10 +307,31 @@ asymbol_from_plugin_symbol (bfd *abfd, asymbol *asym,
if (bfd_get_flavour (abfd) == bfd_target_elf_flavour) if (bfd_get_flavour (abfd) == bfd_target_elf_flavour)
{ {
elf_symbol_type *elfsym = elf_symbol_from (abfd, asym); elf_symbol_type *elfsym = elf_symbol_from (abfd, asym);
unsigned char visibility;
if (!elfsym) if (!elfsym)
einfo (_("%P%F: %s: non-ELF symbol in ELF BFD!"), asym->name); einfo (_("%P%F: %s: non-ELF symbol in ELF BFD!"), asym->name);
elfsym->internal_elf_sym.st_other &= ~3; switch (ldsym->visibility)
elfsym->internal_elf_sym.st_other |= ldsym->visibility; {
default:
einfo (_("%P%F: unknown ELF symbol visibility: %d!"),
ldsym->visibility);
case LDPV_DEFAULT:
visibility = STV_DEFAULT;
break;
case LDPV_PROTECTED:
visibility = STV_PROTECTED;
break;
case LDPV_INTERNAL:
visibility = STV_INTERNAL;
break;
case LDPV_HIDDEN:
visibility = STV_HIDDEN;
break;
}
elfsym->internal_elf_sym.st_other
= (visibility | (elfsym->internal_elf_sym.st_other
& ~ELF_ST_VISIBILITY (-1)));
} }
return LDPS_OK; return LDPS_OK;
@ -416,8 +437,8 @@ is_visible_from_outside (struct ld_plugin_symbol *lsym, asection *section,
opportunities during LTRANS at worst; it will not give false opportunities during LTRANS at worst; it will not give false
negatives, which can lead to the disastrous conclusion that the negatives, which can lead to the disastrous conclusion that the
related symbol is IRONLY. (See GCC PR46319 for an example.) */ related symbol is IRONLY. (See GCC PR46319 for an example.) */
return lsym->visibility == LDPV_DEFAULT return (lsym->visibility == LDPV_DEFAULT
|| lsym->visibility == LDPV_PROTECTED; || lsym->visibility == LDPV_PROTECTED);
} }
return FALSE; return FALSE;
} }

View File

@ -1,3 +1,7 @@
2010-12-05 H.J. Lu <hongjiu.lu@intel.com>
* ld-plugin/plugin-vis-1.d: Updated.
2010-12-04 H.J. Lu <hongjiu.lu@intel.com> 2010-12-04 H.J. Lu <hongjiu.lu@intel.com>
* ld-selective/selective.exp: Don't pass -fvtable-gc to GCC * ld-selective/selective.exp: Don't pass -fvtable-gc to GCC

View File

@ -1,9 +1,9 @@
#... #...
.*(PROTECTED.*func3|DEFAULT.*func|HIDDEN.*func2|INTERNAL.*func1) .*(PROTECTED.*func1|DEFAULT.*func|HIDDEN.*func3|INTERNAL.*func2)
#... #...
.*(PROTECTED.*func3|DEFAULT.*func|HIDDEN.*func2|INTERNAL.*func1) .*(PROTECTED.*func1|DEFAULT.*func|HIDDEN.*func3|INTERNAL.*func2)
#... #...
.*(PROTECTED.*func3|DEFAULT.*func|HIDDEN.*func2|INTERNAL.*func1) .*(PROTECTED.*func1|DEFAULT.*func|HIDDEN.*func3|INTERNAL.*func2)
#... #...
.*(PROTECTED.*func3|DEFAULT.*func|HIDDEN.*func2|INTERNAL.*func1) .*(PROTECTED.*func1|DEFAULT.*func|HIDDEN.*func3|INTERNAL.*func2)
#... #...