[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <6c555096-3f20-0ae5-d04a-20eb30ebf7c7@redhat.com>
Date: Mon, 13 Jan 2020 10:20:15 +0000
From: Julien Thierry <jthierry@...hat.com>
To: linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org
Cc: jpoimboe@...hat.com, peterz@...radead.org, raphael.gault@....com,
catalin.marinas@....com, will@...nel.org
Subject: Re: [RFC v5 14/57] objtool: Do not look for STT_NOTYPE symbols
On 1/9/20 4:02 PM, Julien Thierry wrote:
> ELF symbols can have type STT_NOTYPE which have no standard semantics.
>
> Arm64 objects will contain STT_NOTYPE symbols at the beginning of each
> section which aren't of any use to generic objtool code. Those symbols
> unfortunately overlap with the first function of the section.
>
> Skip symbols with type STT_NOTYPE when looking up symbols.
>
Turns out some x86 callable objects have STT_NOTYPE (in the current case
error_entry in arch/x86/entry/entry_64.S, and it seems to be the case
for all asm symbols annotated with SYM_CODE_START_LOCAL).
A solution that works both for x86 and arm64 is that if the symbol has
STT_NOTYPE, continue looking for another symbol at the same offset. If
none is available, return the STT_NOTYPE symbol.
I'll fix that in next iteration.
> Suggested-by: Raphael Gault <raphael.gault@....com>
> Signed-off-by: Julien Thierry <jthierry@...hat.com>
> ---
> tools/objtool/elf.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/tools/objtool/elf.c b/tools/objtool/elf.c
> index edba4745f25a..c6ac0b771b73 100644
> --- a/tools/objtool/elf.c
> +++ b/tools/objtool/elf.c
> @@ -62,7 +62,8 @@ struct symbol *find_symbol_by_offset(struct section *sec, unsigned long offset)
> struct symbol *sym;
>
> list_for_each_entry(sym, &sec->symbol_list, list)
> - if (sym->type != STT_SECTION &&
> + if (sym->type != STT_NOTYPE &&
> + sym->type != STT_SECTION &&
> sym->offset == offset)
> return sym;
>
>
--
Julien Thierry
Powered by blists - more mailing lists