HomePhabricator

[lldb] Make symbol list output from `image dump symtab` not depend on internal…

Authored by teemperor on Sep 3 2020, 1:26 AM.

Description

[lldb] Make symbol list output from image dump symtab not depend on internal ordering of DenseMap

image dump symtab seems to output the symbols in whatever order they appear in
the DenseMap that is used to filter out symbols with non-unique addresses. As
DenseMap is a hash map this order can change at any time so the output of this
command is pretty unstable. This also causes the Breakpad/symtab.test to fail
with enabled reverse iteration (which reverses the DenseMap order to find issues
like this).

This patch makes the DenseMap a std::vector and uses a separate DenseSet to do
the address filtering. The output order is now dependent on the order in which
the symbols are read (which should be deterministic). It might also avoid a bit
of work as all the work for creating the Symbol constructor parameters is only
done when we can actually emplace a new Symbol.

Reviewed By: labath

Differential Revision: https://reviews.llvm.org/D87036