diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2010-12-06 00:00:15 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2010-12-06 00:00:15 +0000 |
commit | cfac8028e44df8140ee4fa9a3d554b1df23e0c0c (patch) | |
tree | da8a750660637a52b1547ccf9531ccc41a51a7eb /ld | |
parent | a2c86c822472bcc1bbe8002946432b2bff666948 (diff) | |
download | gdb-cfac8028e44df8140ee4fa9a3d554b1df23e0c0c.zip gdb-cfac8028e44df8140ee4fa9a3d554b1df23e0c0c.tar.gz gdb-cfac8028e44df8140ee4fa9a3d554b1df23e0c0c.tar.bz2 |
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.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 6 | ||||
-rw-r--r-- | ld/plugin.c | 29 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-plugin/plugin-vis-1.d | 8 |
4 files changed, 39 insertions, 8 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 66aee40..c1e59bf 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -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 diff --git a/ld/plugin.c b/ld/plugin.c index 6afc14b..ae9c378 100644 --- a/ld/plugin.c +++ b/ld/plugin.c @@ -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; } diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index f0d81d3..6920a37 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -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 diff --git a/ld/testsuite/ld-plugin/plugin-vis-1.d b/ld/testsuite/ld-plugin/plugin-vis-1.d index 41f4971..02c0e22 100644 --- a/ld/testsuite/ld-plugin/plugin-vis-1.d +++ b/ld/testsuite/ld-plugin/plugin-vis-1.d @@ -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) #... |