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>
* 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)
{
elf_symbol_type *elfsym = elf_symbol_from (abfd, asym);
unsigned char visibility;
if (!elfsym)
einfo (_("%P%F: %s: non-ELF symbol in ELF BFD!"), asym->name);
elfsym->internal_elf_sym.st_other &= ~3;
elfsym->internal_elf_sym.st_other |= ldsym->visibility;
switch (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;
@ -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
negatives, which can lead to the disastrous conclusion that the
related symbol is IRONLY. (See GCC PR46319 for an example.) */
return lsym->visibility == LDPV_DEFAULT
|| lsym->visibility == LDPV_PROTECTED;
return (lsym->visibility == LDPV_DEFAULT
|| lsym->visibility == LDPV_PROTECTED);
}
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>
* 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)
#...