Skip to content
  • Alan Modra's avatar
    Hide dynamic symbols in discarded sections · ae0e76dc
    Alan Modra authored
    This is a followup to git commit 97196564 "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.
    
    (cherry picked from commit af0bfb9c)
    ae0e76dc