linux/tools/objtool
Josh Poimboeuf e81e072443 objtool: Support Clang non-section symbols in ORC generation
When compiling the kernel with AS=clang, objtool produces a lot of
warnings:

  warning: objtool: missing symbol for section .text
  warning: objtool: missing symbol for section .init.text
  warning: objtool: missing symbol for section .ref.text

It then fails to generate the ORC table.

The problem is that objtool assumes text section symbols always exist.
But the Clang assembler is aggressive about removing them.

When generating relocations for the ORC table, objtool always tries to
reference instructions by their section symbol offset.  If the section
symbol doesn't exist, it bails.

Do a fallback: when a section symbol isn't available, reference a
function symbol instead.

Reported-by: Dmitry Golovin <dima@golovin.in>
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Tested-by: Nathan Chancellor <natechancellor@gmail.com>
Reviewed-by: Miroslav Benes <mbenes@suse.cz>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://github.com/ClangBuiltLinux/linux/issues/669
Link: https://lkml.kernel.org/r/9a9cae7fcf628843aabe5a086b1a3c5bf50f42e8.1585761021.git.jpoimboe@redhat.com
2020-04-14 12:03:42 +02:00
..
arch/x86 objtool: Move x86 insn decoder to a common location 2019-08-31 22:27:52 -03:00
Documentation docs: fix broken documentation links 2019-06-08 13:42:13 -06:00
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
arch.h objtool: Support conditional retpolines 2019-07-18 21:01:10 +02:00
Build objtool: Optimize find_symbol_*() and read_symbols() 2020-03-25 18:28:29 +01:00
builtin-check.c objtool: Add a statistics mode 2020-03-25 18:28:28 +01:00
builtin-orc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 13 2019-05-21 11:28:45 +02:00
builtin.h objtool: Add a statistics mode 2020-03-25 18:28:28 +01:00
cfi.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 13 2019-05-21 11:28:45 +02:00
check.c objtool: Fix CONFIG_UBSAN_TRAP unreachable warnings 2020-04-14 11:55:09 +02:00
check.h objtool: Resize insn_hash 2020-03-25 18:28:30 +01:00
elf.c objtool: Optimize find_rela_by_dest_range() 2020-03-25 18:28:31 +01:00
elf.h objtool: Optimize find_rela_by_dest_range() 2020-03-25 18:28:31 +01:00
Makefile kbuild: support LLVM=1 to switch the default tools to Clang/LLVM 2020-04-09 03:18:21 +09:00
objtool.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 13 2019-05-21 11:28:45 +02:00
orc_dump.c objtool: Support Clang non-section symbols in ORC dump 2020-04-14 11:59:52 +02:00
orc_gen.c objtool: Support Clang non-section symbols in ORC generation 2020-04-14 12:03:42 +02:00
orc.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 13 2019-05-21 11:28:45 +02:00
special.c objtool: Optimize read_sections() 2020-03-25 18:28:30 +01:00
special.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 13 2019-05-21 11:28:45 +02:00
sync-check.sh objtool: Silence build output 2020-01-22 07:54:34 +01:00
warn.h objtool: Rename find_containing_func() 2020-03-25 18:28:29 +01:00