objtool: Optimize find_symbol_*() and read_symbols()
authorPeter Zijlstra <peterz@infradead.org>
Thu, 12 Mar 2020 08:34:42 +0000 (09:34 +0100)
committerPeter Zijlstra <peterz@infradead.org>
Wed, 25 Mar 2020 17:28:29 +0000 (18:28 +0100)
commit2a362ecc3ec9632aeea4b9a9062db91b2bd9975a
tree862c13b17b3b80cd22d5e7d82a9c16254720b494
parentae358196fac3a0b4d2a7d47a4f401e3421027b03
objtool: Optimize find_symbol_*() and read_symbols()

All of:

  read_symbols(), find_symbol_by_offset(), find_symbol_containing(),
  find_containing_func()

do a linear search of the symbols. Add an RB tree to make it go
faster.

This about halves objtool runtime on vmlinux.o, from 34s to 18s.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Miroslav Benes <mbenes@suse.cz>
Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
Link: https://lkml.kernel.org/r/20200324160924.499016559@infradead.org
tools/objtool/Build
tools/objtool/elf.c
tools/objtool/elf.h