mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2024-12-28 16:52:18 +00:00
objtool: Collapse annotate sequences
Reduce read_annotate() runs by collapsing subsequent runs into a single call. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Josh Poimboeuf <jpoimboe@kernel.org> Link: https://lore.kernel.org/r/20241128094311.688871544@infradead.org
This commit is contained in:
parent
112765ca1c
commit
a8a330dd99
@ -2381,21 +2381,24 @@ static int read_annotate(struct objtool_file *file,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __annotate_ignore_alts(struct objtool_file *file, int type, struct instruction *insn)
|
||||
static int __annotate_early(struct objtool_file *file, int type, struct instruction *insn)
|
||||
{
|
||||
if (type != ANNOTYPE_IGNORE_ALTS)
|
||||
return 0;
|
||||
switch (type) {
|
||||
case ANNOTYPE_IGNORE_ALTS:
|
||||
insn->ignore_alts = true;
|
||||
break;
|
||||
|
||||
insn->ignore_alts = true;
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
* Must be before read_unwind_hints() since that needs insn->noendbr.
|
||||
*/
|
||||
case ANNOTYPE_NOENDBR:
|
||||
insn->noendbr = 1;
|
||||
break;
|
||||
|
||||
static int __annotate_noendbr(struct objtool_file *file, int type, struct instruction *insn)
|
||||
{
|
||||
if (type != ANNOTYPE_NOENDBR)
|
||||
return 0;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
insn->noendbr = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2429,26 +2432,21 @@ static int __annotate_ifc(struct objtool_file *file, int type, struct instructio
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __annotate_retpoline_safe(struct objtool_file *file, int type, struct instruction *insn)
|
||||
{
|
||||
if (type != ANNOTYPE_RETPOLINE_SAFE)
|
||||
return 0;
|
||||
|
||||
if (insn->type != INSN_JUMP_DYNAMIC &&
|
||||
insn->type != INSN_CALL_DYNAMIC &&
|
||||
insn->type != INSN_RETURN &&
|
||||
insn->type != INSN_NOP) {
|
||||
WARN_INSN(insn, "retpoline_safe hint not an indirect jump/call/ret/nop");
|
||||
return -1;
|
||||
}
|
||||
|
||||
insn->retpoline_safe = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __annotate_instr(struct objtool_file *file, int type, struct instruction *insn)
|
||||
static int __annotate_late(struct objtool_file *file, int type, struct instruction *insn)
|
||||
{
|
||||
switch (type) {
|
||||
case ANNOTYPE_RETPOLINE_SAFE:
|
||||
if (insn->type != INSN_JUMP_DYNAMIC &&
|
||||
insn->type != INSN_CALL_DYNAMIC &&
|
||||
insn->type != INSN_RETURN &&
|
||||
insn->type != INSN_NOP) {
|
||||
WARN_INSN(insn, "retpoline_safe hint not an indirect jump/call/ret/nop");
|
||||
return -1;
|
||||
}
|
||||
|
||||
insn->retpoline_safe = true;
|
||||
break;
|
||||
|
||||
case ANNOTYPE_INSTR_BEGIN:
|
||||
insn->instr++;
|
||||
break;
|
||||
@ -2457,6 +2455,10 @@ static int __annotate_instr(struct objtool_file *file, int type, struct instruct
|
||||
insn->instr--;
|
||||
break;
|
||||
|
||||
case ANNOTYPE_UNRET_BEGIN:
|
||||
insn->unret = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -2464,16 +2466,6 @@ static int __annotate_instr(struct objtool_file *file, int type, struct instruct
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __annotate_unret(struct objtool_file *file, int type, struct instruction *insn)
|
||||
{
|
||||
if (type != ANNOTYPE_UNRET_BEGIN)
|
||||
return 0;
|
||||
|
||||
insn->unret = 1;
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Return true if name matches an instrumentation function, where calls to that
|
||||
* function from noinstr code can safely be removed, but compilers won't do so.
|
||||
@ -2583,14 +2575,7 @@ static int decode_sections(struct objtool_file *file)
|
||||
add_ignores(file);
|
||||
add_uaccess_safe(file);
|
||||
|
||||
ret = read_annotate(file, __annotate_ignore_alts);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Must be before read_unwind_hints() since that needs insn->noendbr.
|
||||
*/
|
||||
ret = read_annotate(file, __annotate_noendbr);
|
||||
ret = read_annotate(file, __annotate_early);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -2636,15 +2621,7 @@ static int decode_sections(struct objtool_file *file)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = read_annotate(file, __annotate_retpoline_safe);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = read_annotate(file, __annotate_instr);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = read_annotate(file, __annotate_unret);
|
||||
ret = read_annotate(file, __annotate_late);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user