mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-14 22:44:27 +08:00
c608906165
Avoid adding kprobes to any of the kernel entry/exit or startup assembly code, or code in the identity-mapped region. This code does not conform to the standard C conventions, which means that the expectations of the kprobes code is not forfilled. Placing kprobes at some of these locations results in the kernel trying to return to userspace addresses while retaining the CPU in kernel mode. Tested-by: Naresh Kamboju <naresh.kamboju@linaro.org> Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
38 lines
911 B
C
38 lines
911 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASMARM_TRAP_H
|
|
#define _ASMARM_TRAP_H
|
|
|
|
#include <linux/list.h>
|
|
|
|
struct pt_regs;
|
|
struct task_struct;
|
|
|
|
struct undef_hook {
|
|
struct list_head node;
|
|
u32 instr_mask;
|
|
u32 instr_val;
|
|
u32 cpsr_mask;
|
|
u32 cpsr_val;
|
|
int (*fn)(struct pt_regs *regs, unsigned int instr);
|
|
};
|
|
|
|
void register_undef_hook(struct undef_hook *hook);
|
|
void unregister_undef_hook(struct undef_hook *hook);
|
|
|
|
static inline int __in_irqentry_text(unsigned long ptr)
|
|
{
|
|
extern char __irqentry_text_start[];
|
|
extern char __irqentry_text_end[];
|
|
|
|
return ptr >= (unsigned long)&__irqentry_text_start &&
|
|
ptr < (unsigned long)&__irqentry_text_end;
|
|
}
|
|
|
|
extern void __init early_trap_init(void *);
|
|
extern void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long frame);
|
|
extern void ptrace_break(struct task_struct *tsk, struct pt_regs *regs);
|
|
|
|
extern void *vectors_page;
|
|
|
|
#endif
|