lkml.org 
[lkml]   [2022]   [Mar]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: linux-next: build warnings after merge of the tip tree
    On Tue, Mar 22, 2022 at 11:46:04AM +0100, Peter Zijlstra wrote:
    > On Mon, Mar 21, 2022 at 01:55:49PM +0100, Peter Zijlstra wrote:

    > > > arch/x86/crypto/poly1305-x86_64.o: warning: objtool: poly1305_blocks_avx() falls through to next function poly1305_blocks_x86_64()
    > > > arch/x86/crypto/poly1305-x86_64.o: warning: objtool: poly1305_emit_avx() falls through to next function poly1305_emit_x86_64()
    > > > arch/x86/crypto/poly1305-x86_64.o: warning: objtool: poly1305_blocks_avx2() falls through to next function poly1305_blocks_x86_64()
    > >
    > > Yes, those are somewhere on the todo list, lemme bump them.

    The poly one is a little more involved since it's a perl script writing
    asm O_O

    Looking at the generated asm tough, the these are conditional tail-calls
    and objtool *should* recognise them but doesn't...

    This seems to cure.

    ---
    tools/objtool/check.c | 19 ++++++++++++++-----
    1 file changed, 14 insertions(+), 5 deletions(-)

    diff --git a/tools/objtool/check.c b/tools/objtool/check.c
    index 6de5085e3e5a..b848e1ddd5d8 100644
    --- a/tools/objtool/check.c
    +++ b/tools/objtool/check.c
    @@ -1239,11 +1239,20 @@ static bool same_function(struct instruction *insn1, struct instruction *insn2)
    return insn1->func->pfunc == insn2->func->pfunc;
    }

    -static bool is_first_func_insn(struct instruction *insn)
    +static bool is_first_func_insn(struct objtool_file *file, struct instruction *insn)
    {
    - return insn->offset == insn->func->offset ||
    - (insn->type == INSN_ENDBR &&
    - insn->offset == insn->func->offset + insn->len);
    + if (insn->offset == insn->func->offset)
    + return true;
    +
    + if (ibt) {
    + struct instruction *prev = prev_insn_same_sym(file, insn);
    +
    + if (prev && prev->type == INSN_ENDBR &&
    + insn->offset == insn->func->offset + prev->len)
    + return true;
    + }
    +
    + return false;
    }

    /*
    @@ -1327,7 +1336,7 @@ static int add_jump_destinations(struct objtool_file *file)
    insn->jump_dest->func->pfunc = insn->func;

    } else if (!same_function(insn, insn->jump_dest) &&
    - is_first_func_insn(insn->jump_dest)) {
    + is_first_func_insn(file, insn->jump_dest)) {
    /* internal sibling call (without reloc) */
    add_call_dest(file, insn, insn->jump_dest->func, true);
    }
    \
     
     \ /
      Last update: 2022-03-22 11:59    [W:4.342 / U:1.328 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site