objtool: Remove SAVE/RESTORE hints
The SAVE/RESTORE hints are now unused; remove them. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Miroslav Benes <mbenes@suse.cz> Reviewed-by: Alexandre Chartre <alexandre.chartre@oracle.com> Acked-by: Josh Poimboeuf <jpoimboe@redhat.com> Link: https://lkml.kernel.org/r/20200416115118.926738768@infradead.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
9f2dfd61dd
commit
c536ed2fff
|
@ -58,9 +58,7 @@
|
|||
#define ORC_TYPE_CALL 0
|
||||
#define ORC_TYPE_REGS 1
|
||||
#define ORC_TYPE_REGS_IRET 2
|
||||
#define UNWIND_HINT_TYPE_SAVE 3
|
||||
#define UNWIND_HINT_TYPE_RESTORE 4
|
||||
#define UNWIND_HINT_TYPE_RET_OFFSET 5
|
||||
#define UNWIND_HINT_TYPE_RET_OFFSET 3
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
/*
|
||||
|
|
|
@ -86,15 +86,6 @@
|
|||
UNWIND_HINT sp_offset=\sp_offset
|
||||
.endm
|
||||
|
||||
.macro UNWIND_HINT_SAVE
|
||||
UNWIND_HINT type=UNWIND_HINT_TYPE_SAVE
|
||||
.endm
|
||||
|
||||
.macro UNWIND_HINT_RESTORE
|
||||
UNWIND_HINT type=UNWIND_HINT_TYPE_RESTORE
|
||||
.endm
|
||||
|
||||
|
||||
/*
|
||||
* RET_OFFSET: Used on instructions that terminate a function; mostly RETURN
|
||||
* and sibling calls. On these, sp_offset denotes the expected offset from
|
||||
|
@ -104,24 +95,6 @@
|
|||
UNWIND_HINT type=UNWIND_HINT_TYPE_RET_OFFSET sp_offset=\sp_offset
|
||||
.endm
|
||||
|
||||
#else /* !__ASSEMBLY__ */
|
||||
|
||||
#define UNWIND_HINT(sp_reg, sp_offset, type, end) \
|
||||
"987: \n\t" \
|
||||
".pushsection .discard.unwind_hints\n\t" \
|
||||
/* struct unwind_hint */ \
|
||||
".long 987b - .\n\t" \
|
||||
".short " __stringify(sp_offset) "\n\t" \
|
||||
".byte " __stringify(sp_reg) "\n\t" \
|
||||
".byte " __stringify(type) "\n\t" \
|
||||
".byte " __stringify(end) "\n\t" \
|
||||
".balign 4 \n\t" \
|
||||
".popsection\n\t"
|
||||
|
||||
#define UNWIND_HINT_SAVE UNWIND_HINT(0, 0, UNWIND_HINT_TYPE_SAVE, 0)
|
||||
|
||||
#define UNWIND_HINT_RESTORE UNWIND_HINT(0, 0, UNWIND_HINT_TYPE_RESTORE, 0)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* _ASM_X86_UNWIND_HINTS_H */
|
||||
|
|
|
@ -58,9 +58,7 @@
|
|||
#define ORC_TYPE_CALL 0
|
||||
#define ORC_TYPE_REGS 1
|
||||
#define ORC_TYPE_REGS_IRET 2
|
||||
#define UNWIND_HINT_TYPE_SAVE 3
|
||||
#define UNWIND_HINT_TYPE_RESTORE 4
|
||||
#define UNWIND_HINT_TYPE_RET_OFFSET 5
|
||||
#define UNWIND_HINT_TYPE_RET_OFFSET 3
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
/*
|
||||
|
|
|
@ -1254,15 +1254,7 @@ static int read_unwind_hints(struct objtool_file *file)
|
|||
|
||||
cfa = &insn->state.cfa;
|
||||
|
||||
if (hint->type == UNWIND_HINT_TYPE_SAVE) {
|
||||
insn->save = true;
|
||||
continue;
|
||||
|
||||
} else if (hint->type == UNWIND_HINT_TYPE_RESTORE) {
|
||||
insn->restore = true;
|
||||
insn->hint = true;
|
||||
|
||||
} else if (hint->type == UNWIND_HINT_TYPE_RET_OFFSET) {
|
||||
if (hint->type == UNWIND_HINT_TYPE_RET_OFFSET) {
|
||||
insn->ret_offset = hint->sp_offset;
|
||||
continue;
|
||||
}
|
||||
|
@ -2113,37 +2105,9 @@ static int validate_branch(struct objtool_file *file, struct symbol *func,
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (insn->hint) {
|
||||
if (insn->restore) {
|
||||
struct instruction *save_insn, *i;
|
||||
|
||||
i = insn;
|
||||
save_insn = NULL;
|
||||
sym_for_each_insn_continue_reverse(file, func, i) {
|
||||
if (i->save) {
|
||||
save_insn = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!save_insn) {
|
||||
WARN_FUNC("no corresponding CFI save for CFI restore",
|
||||
sec, insn->offset);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!save_insn->visited) {
|
||||
WARN_FUNC("objtool isn't smart enough to handle this CFI save/restore combo",
|
||||
sec, insn->offset);
|
||||
return 1;
|
||||
}
|
||||
|
||||
insn->state = save_insn->state;
|
||||
}
|
||||
|
||||
if (insn->hint)
|
||||
state = insn->state;
|
||||
|
||||
} else
|
||||
else
|
||||
insn->state = state;
|
||||
|
||||
insn->visited |= visited;
|
||||
|
|
|
@ -34,7 +34,7 @@ struct instruction {
|
|||
enum insn_type type;
|
||||
unsigned long immediate;
|
||||
bool alt_group, dead_end, ignore, ignore_alts;
|
||||
bool hint, save, restore;
|
||||
bool hint;
|
||||
bool retpoline_safe;
|
||||
u8 visited;
|
||||
u8 ret_offset;
|
||||
|
|
Loading…
Reference in New Issue