lkml.org 
[lkml]   [2022]   [Oct]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: x86/core] objtool: Track init section
    The following commit has been merged into the x86/core branch of tip:

    Commit-ID: 6644ee846cb983437063da8fd24b7cae671fd019
    Gitweb: https://git.kernel.org/tip/6644ee846cb983437063da8fd24b7cae671fd019
    Author: Peter Zijlstra <peterz@infradead.org>
    AuthorDate: Thu, 15 Sep 2022 13:11:08 +02:00
    Committer: Peter Zijlstra <peterz@infradead.org>
    CommitterDate: Mon, 17 Oct 2022 16:41:07 +02:00

    objtool: Track init section

    For future usage of .init.text exclusion track the init section in the
    instruction decoder and use the result in retpoline validation.

    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20220915111145.910334431@infradead.org
    ---
    tools/objtool/check.c | 17 ++++++++++-------
    tools/objtool/include/objtool/elf.h | 2 +-
    2 files changed, 11 insertions(+), 8 deletions(-)

    diff --git a/tools/objtool/check.c b/tools/objtool/check.c
    index 7174bba..bb7c819 100644
    --- a/tools/objtool/check.c
    +++ b/tools/objtool/check.c
    @@ -382,6 +382,15 @@ static int decode_instructions(struct objtool_file *file)
    !strncmp(sec->name, ".text.__x86.", 12))
    sec->noinstr = true;

    + /*
    + * .init.text code is ran before userspace and thus doesn't
    + * strictly need retpolines, except for modules which are
    + * loaded late, they very much do need retpoline in their
    + * .init.text
    + */
    + if (!strcmp(sec->name, ".init.text") && !opts.module)
    + sec->init = true;
    +
    for (offset = 0; offset < sec->sh.sh_size; offset += insn->len) {
    insn = malloc(sizeof(*insn));
    if (!insn) {
    @@ -3748,13 +3757,7 @@ static int validate_retpoline(struct objtool_file *file)
    if (insn->retpoline_safe)
    continue;

    - /*
    - * .init.text code is ran before userspace and thus doesn't
    - * strictly need retpolines, except for modules which are
    - * loaded late, they very much do need retpoline in their
    - * .init.text
    - */
    - if (!strcmp(insn->sec->name, ".init.text") && !opts.module)
    + if (insn->sec->init)
    continue;

    if (insn->type == INSN_RETURN) {
    diff --git a/tools/objtool/include/objtool/elf.h b/tools/objtool/include/objtool/elf.h
    index 16f4067..baa8085 100644
    --- a/tools/objtool/include/objtool/elf.h
    +++ b/tools/objtool/include/objtool/elf.h
    @@ -38,7 +38,7 @@ struct section {
    Elf_Data *data;
    char *name;
    int idx;
    - bool changed, text, rodata, noinstr;
    + bool changed, text, rodata, noinstr, init;
    };

    struct symbol {
    \
     
     \ /
      Last update: 2022-10-17 16:57    [W:2.352 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site