]> git.baikalelectronics.ru Git - kernel.git/commit
objtool: Introduce CFI hash
authorPeter Zijlstra <peterz@infradead.org>
Thu, 24 Jun 2021 09:41:01 +0000 (11:41 +0200)
committerPeter Zijlstra <peterz@infradead.org>
Wed, 15 Sep 2021 13:51:45 +0000 (15:51 +0200)
commit8dc5c196cc9ad02b13702dc3134124f67d0ee58a
tree79c8ef923e5195931b09fae2e27a54e913d85237
parent5ba6a68ea32132850f589f547aef0ea55c6e8e6d
objtool: Introduce CFI hash

Andi reported that objtool on vmlinux.o consumes more memory than his
system has, leading to horrific performance.

This is in part because we keep a struct instruction for every
instruction in the file in-memory. Shrink struct instruction by
removing the CFI state (which includes full register state) from it
and demand allocating it.

Given most instructions don't actually change CFI state, there's lots
of repetition there, so add a hash table to find previous CFI
instances.

Reduces memory consumption (and runtime) for processing an
x86_64-allyesconfig:

  pre:  4:40.84 real,   143.99 user,    44.18 sys,      30624988 mem
  post: 2:14.61 real,   108.58 user,    25.04 sys,      16396184 mem

Suggested-by: Andi Kleen <andi@firstfloor.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/r/20210624095147.756759107@infradead.org
tools/objtool/arch/x86/decode.c
tools/objtool/check.c
tools/objtool/include/objtool/arch.h
tools/objtool/include/objtool/cfi.h
tools/objtool/include/objtool/check.h
tools/objtool/orc_gen.c