From: Sami Tolvanen Date: Wed, 28 Oct 2020 17:16:26 +0000 (-0700) Subject: objtool: Fix __mcount_loc generation with Clang's assembler X-Git-Tag: v5.15~1626^2~11 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=18a14575ae31c5a97a5e87e961932a5016d369be;p=platform%2Fkernel%2Flinux-starfive.git objtool: Fix __mcount_loc generation with Clang's assembler When objtool generates relocations for the __mcount_loc section, it tries to reference __fentry__ calls by their section symbol offset. However, this fails with Clang's integrated assembler as it may not generate section symbols for every section. This patch looks up a function symbol instead if the section symbol is missing, similarly to commit e81e07244325 ("objtool: Support Clang non-section symbols in ORC generation"). Signed-off-by: Sami Tolvanen --- diff --git a/tools/objtool/check.c b/tools/objtool/check.c index 44e3ee1..ab87fb9 100644 --- a/tools/objtool/check.c +++ b/tools/objtool/check.c @@ -573,8 +573,21 @@ static int create_mcount_loc_sections(struct objtool_file *file) } memset(reloc, 0, sizeof(*reloc)); - reloc->sym = insn->sec->sym; - reloc->addend = insn->offset; + if (insn->sec->sym) { + reloc->sym = insn->sec->sym; + reloc->addend = insn->offset; + } else { + reloc->sym = find_symbol_containing(insn->sec, insn->offset); + + if (!reloc->sym) { + WARN("missing symbol for insn at offset 0x%lx\n", + insn->offset); + return -1; + } + + reloc->addend = insn->offset - reloc->sym->offset; + } + reloc->type = R_X86_64_64; reloc->offset = idx * sizeof(unsigned long); reloc->sec = reloc_sec;