mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-16 07:24:39 +08:00
Revert "x86/orc: Make it callthunk aware"
Commit396e0b8e09
("x86/orc: Make it callthunk aware") attempted to deal with the fact that function prefix code didn't have ORC coverage. However, it didn't work as advertised. Use of the "null" ORC entry just caused affected unwinds to end early. The root cause has now been fixed with commit5743654f5e
("objtool: Generate ORC data for __pfx code"). Revert most of commit396e0b8e09
("x86/orc: Make it callthunk aware"). The is_callthunk() function remains as it's now used by other code. Link: https://lore.kernel.org/r/a05b916ef941da872cbece1ab3593eceabd05a79.1684245404.git.jpoimboe@kernel.org Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
This commit is contained in:
parent
4a03aa3443
commit
020126239b
@ -113,7 +113,6 @@ extern void callthunks_patch_builtin_calls(void);
|
||||
extern void callthunks_patch_module_calls(struct callthunk_sites *sites,
|
||||
struct module *mod);
|
||||
extern void *callthunks_translate_call_dest(void *dest);
|
||||
extern bool is_callthunk(void *addr);
|
||||
extern int x86_call_depth_emit_accounting(u8 **pprog, void *func);
|
||||
#else
|
||||
static __always_inline void callthunks_patch_builtin_calls(void) {}
|
||||
@ -124,10 +123,6 @@ static __always_inline void *callthunks_translate_call_dest(void *dest)
|
||||
{
|
||||
return dest;
|
||||
}
|
||||
static __always_inline bool is_callthunk(void *addr)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
static __always_inline int x86_call_depth_emit_accounting(u8 **pprog,
|
||||
void *func)
|
||||
{
|
||||
|
@ -293,7 +293,7 @@ void *callthunks_translate_call_dest(void *dest)
|
||||
return target ? : dest;
|
||||
}
|
||||
|
||||
bool is_callthunk(void *addr)
|
||||
static bool is_callthunk(void *addr)
|
||||
{
|
||||
unsigned int tmpl_size = SKL_TMPL_SIZE;
|
||||
void *tmpl = skl_call_thunk_template;
|
||||
|
@ -183,21 +183,6 @@ static struct orc_entry null_orc_entry = {
|
||||
.type = ORC_TYPE_CALL
|
||||
};
|
||||
|
||||
#ifdef CONFIG_CALL_THUNKS
|
||||
static struct orc_entry *orc_callthunk_find(unsigned long ip)
|
||||
{
|
||||
if (!is_callthunk((void *)ip))
|
||||
return NULL;
|
||||
|
||||
return &null_orc_entry;
|
||||
}
|
||||
#else
|
||||
static struct orc_entry *orc_callthunk_find(unsigned long ip)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Fake frame pointer entry -- used as a fallback for generated code */
|
||||
static struct orc_entry orc_fp_entry = {
|
||||
.type = ORC_TYPE_CALL,
|
||||
@ -250,11 +235,7 @@ static struct orc_entry *orc_find(unsigned long ip)
|
||||
if (orc)
|
||||
return orc;
|
||||
|
||||
orc = orc_ftrace_find(ip);
|
||||
if (orc)
|
||||
return orc;
|
||||
|
||||
return orc_callthunk_find(ip);
|
||||
return orc_ftrace_find(ip);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MODULES
|
||||
|
Loading…
Reference in New Issue
Block a user