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:
parent
a2c86c8224
commit
cfac8028e4
4 changed files with 39 additions and 8 deletions
|
@ -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
|
||||||
|
|
29
ld/plugin.c
29
ld/plugin.c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
#...
|
#...
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue