Hide dynamic symbols in discarded sections
authorAlan Modra <amodra@gmail.com>
Tue, 3 Jul 2018 02:48:10 +0000 (12:18 +0930)
committerAlan Modra <amodra@gmail.com>
Tue, 3 Jul 2018 03:01:34 +0000 (12:31 +0930)
commitaf0bfb9c4283ce80fe37ad6360d12cae8ec38696
tree6a33d1283583e37396b906469a95d4a0482286de
parent1825c89e221b1bf80e73e858f1f2afcfe51272dd
Hide dynamic symbols in discarded sections

This is a followup to git commit 97196564c7 "Strip global symbol
defined in discarded section".  If a symbol defined in a discarded
section was dynamic, that patch left .dynsym with holes (ie. all zero
entries).  For example, the following from libstdc++.so:

Symbol table '.dynsym' contains 6090 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 00000000000a74e0     0 SECTION LOCAL  DEFAULT   10
     2: 0000000000264180     0 SECTION LOCAL  DEFAULT   17
     3: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_addUserCommitAction
     4: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_memcpyRtWn
     5: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
readelf: Warning: local symbol 5 found at index >= .dynsym's sh_info value of 3
     6: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
readelf: Warning: local symbol 6 found at index >= .dynsym's sh_info value of 3
[snip]

This patch removes the symbols from .dynsym too.

PR 17550
* elflink.c (_bfd_elf_fix_symbol_flags): Hide dynamic symbols
in discarded sections.
bfd/ChangeLog
bfd/elflink.c