Skip to content
  • James Henderson's avatar
    [llvm-readelf]Revert --dyn-symbols behaviour to make it GNU compatible, and... · 5fc812f1
    James Henderson authored
    [llvm-readelf]Revert --dyn-symbols behaviour to make it GNU compatible, and add new --hash-symbols switch for old behaviour
    
    In r287786, the behaviour of --dyn-symbols in llvm-readelf (but not
    llvm-readobj) was changed to print the dynamic symbols as derived from
    the hash table, rather than to print the dynamic symbol table contents
    directly. The original change was initially submitted without review,
    and some comments were made on the commit mailing list implying that the
    new behavious is GNU compatible. I argue that it is not:
    
      1) It does not include a null symbol.
      2) It prints the symbols based on an order derived from the hash
         table.
      3) It prints an extra column indicating which bucket it came from.
         This could break parsers that expect a fixed number of columns,
         with the first column being the symbol index.
      4) If the input happens to have both .hash and .gnu.hash section, it
         prints interpretations of them both, resulting in most symbols
         being printed twice.
      5) There is no way of just printing the raw dynamic symbol table,
         because --symbols also prints the static symbol table.
    
    This patch reverts the --dyn-symbols behaviour back to its old behaviour
    of just printing the contents of the dynamic symbol table, similar to
    what is printed by --symbols. As the hashed interpretation is still
    desirable to validate the hash table, it puts it under a new switch
    "--hash-symbols". This is a no-op on all output forms except for GNU
    output style for ELF. If there is no hash table, it does nothing,
    unlike the previous behaviour which printed the raw dynamic symbol
    table, since the raw dynsym is available under --dyn-symbols.
    
    The yaml input for the test is based on that in
    test/tools/llvm-readobj/demangle.test, but stripped down to the bare
    minimum to provide a valid dynamic symbol.
    
    Note: some LLD tests needed updating. I will commit a separate patch for
    those.
    
    Reviewed by: grimar, rupprecht
    
    Differential Revision: https://reviews.llvm.org/D56910
    
    llvm-svn: 351789
    5fc812f1
Loading