LoongArch: Mark some assembler symbols as non-kprobe-able
Some assembler symbols are not kprobe safe, such as handle_syscall (used as syscall exception handler), *memset*/*memcpy*/*memmove* (may cause recursive exceptions), they can not be instrumented, just blacklist them for kprobing. Here is a related problem and discussion: Link: https://lore.kernel.org/lkml/20230114143859.7ccc45c1c5d9ce302113ab0a@kernel.org/ Tested-by: Jeff Xie <xiehuan09@gmail.com> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
This commit is contained in:
parent
09e679c28a
commit
fcf77d0162
|
@ -188,4 +188,14 @@
|
||||||
#define PTRLOG 3
|
#define PTRLOG 3
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Annotate a function as being unsuitable for kprobes. */
|
||||||
|
#ifdef CONFIG_KPROBES
|
||||||
|
#define _ASM_NOKPROBE(name) \
|
||||||
|
.pushsection "_kprobe_blacklist", "aw"; \
|
||||||
|
.quad name; \
|
||||||
|
.popsection
|
||||||
|
#else
|
||||||
|
#define _ASM_NOKPROBE(name)
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* __ASM_ASM_H */
|
#endif /* __ASM_ASM_H */
|
||||||
|
|
|
@ -67,6 +67,7 @@ SYM_FUNC_START(handle_syscall)
|
||||||
|
|
||||||
RESTORE_ALL_AND_RET
|
RESTORE_ALL_AND_RET
|
||||||
SYM_FUNC_END(handle_syscall)
|
SYM_FUNC_END(handle_syscall)
|
||||||
|
_ASM_NOKPROBE(handle_syscall)
|
||||||
|
|
||||||
SYM_CODE_START(ret_from_fork)
|
SYM_CODE_START(ret_from_fork)
|
||||||
bl schedule_tail # a0 = struct task_struct *prev
|
bl schedule_tail # a0 = struct task_struct *prev
|
||||||
|
|
|
@ -17,6 +17,7 @@ SYM_FUNC_START(memcpy)
|
||||||
ALTERNATIVE "b __memcpy_generic", \
|
ALTERNATIVE "b __memcpy_generic", \
|
||||||
"b __memcpy_fast", CPU_FEATURE_UAL
|
"b __memcpy_fast", CPU_FEATURE_UAL
|
||||||
SYM_FUNC_END(memcpy)
|
SYM_FUNC_END(memcpy)
|
||||||
|
_ASM_NOKPROBE(memcpy)
|
||||||
|
|
||||||
EXPORT_SYMBOL(memcpy)
|
EXPORT_SYMBOL(memcpy)
|
||||||
|
|
||||||
|
@ -41,6 +42,7 @@ SYM_FUNC_START(__memcpy_generic)
|
||||||
2: move a0, a3
|
2: move a0, a3
|
||||||
jr ra
|
jr ra
|
||||||
SYM_FUNC_END(__memcpy_generic)
|
SYM_FUNC_END(__memcpy_generic)
|
||||||
|
_ASM_NOKPROBE(__memcpy_generic)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* void *__memcpy_fast(void *dst, const void *src, size_t n)
|
* void *__memcpy_fast(void *dst, const void *src, size_t n)
|
||||||
|
@ -93,3 +95,4 @@ SYM_FUNC_START(__memcpy_fast)
|
||||||
3: move a0, a3
|
3: move a0, a3
|
||||||
jr ra
|
jr ra
|
||||||
SYM_FUNC_END(__memcpy_fast)
|
SYM_FUNC_END(__memcpy_fast)
|
||||||
|
_ASM_NOKPROBE(__memcpy_fast)
|
||||||
|
|
|
@ -29,6 +29,7 @@ SYM_FUNC_START(memmove)
|
||||||
b rmemcpy
|
b rmemcpy
|
||||||
4: b __rmemcpy_generic
|
4: b __rmemcpy_generic
|
||||||
SYM_FUNC_END(memmove)
|
SYM_FUNC_END(memmove)
|
||||||
|
_ASM_NOKPROBE(memmove)
|
||||||
|
|
||||||
EXPORT_SYMBOL(memmove)
|
EXPORT_SYMBOL(memmove)
|
||||||
|
|
||||||
|
@ -39,6 +40,7 @@ SYM_FUNC_START(rmemcpy)
|
||||||
ALTERNATIVE "b __rmemcpy_generic", \
|
ALTERNATIVE "b __rmemcpy_generic", \
|
||||||
"b __rmemcpy_fast", CPU_FEATURE_UAL
|
"b __rmemcpy_fast", CPU_FEATURE_UAL
|
||||||
SYM_FUNC_END(rmemcpy)
|
SYM_FUNC_END(rmemcpy)
|
||||||
|
_ASM_NOKPROBE(rmemcpy)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* void *__rmemcpy_generic(void *dst, const void *src, size_t n)
|
* void *__rmemcpy_generic(void *dst, const void *src, size_t n)
|
||||||
|
@ -64,6 +66,7 @@ SYM_FUNC_START(__rmemcpy_generic)
|
||||||
2: move a0, a3
|
2: move a0, a3
|
||||||
jr ra
|
jr ra
|
||||||
SYM_FUNC_END(__rmemcpy_generic)
|
SYM_FUNC_END(__rmemcpy_generic)
|
||||||
|
_ASM_NOKPROBE(__rmemcpy_generic)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* void *__rmemcpy_fast(void *dst, const void *src, size_t n)
|
* void *__rmemcpy_fast(void *dst, const void *src, size_t n)
|
||||||
|
@ -119,3 +122,4 @@ SYM_FUNC_START(__rmemcpy_fast)
|
||||||
3: move a0, a3
|
3: move a0, a3
|
||||||
jr ra
|
jr ra
|
||||||
SYM_FUNC_END(__rmemcpy_fast)
|
SYM_FUNC_END(__rmemcpy_fast)
|
||||||
|
_ASM_NOKPROBE(__rmemcpy_fast)
|
||||||
|
|
|
@ -23,6 +23,7 @@ SYM_FUNC_START(memset)
|
||||||
ALTERNATIVE "b __memset_generic", \
|
ALTERNATIVE "b __memset_generic", \
|
||||||
"b __memset_fast", CPU_FEATURE_UAL
|
"b __memset_fast", CPU_FEATURE_UAL
|
||||||
SYM_FUNC_END(memset)
|
SYM_FUNC_END(memset)
|
||||||
|
_ASM_NOKPROBE(memset)
|
||||||
|
|
||||||
EXPORT_SYMBOL(memset)
|
EXPORT_SYMBOL(memset)
|
||||||
|
|
||||||
|
@ -45,6 +46,7 @@ SYM_FUNC_START(__memset_generic)
|
||||||
2: move a0, a3
|
2: move a0, a3
|
||||||
jr ra
|
jr ra
|
||||||
SYM_FUNC_END(__memset_generic)
|
SYM_FUNC_END(__memset_generic)
|
||||||
|
_ASM_NOKPROBE(__memset_generic)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* void *__memset_fast(void *s, int c, size_t n)
|
* void *__memset_fast(void *s, int c, size_t n)
|
||||||
|
@ -89,3 +91,4 @@ SYM_FUNC_START(__memset_fast)
|
||||||
3: move a0, a3
|
3: move a0, a3
|
||||||
jr ra
|
jr ra
|
||||||
SYM_FUNC_END(__memset_fast)
|
SYM_FUNC_END(__memset_fast)
|
||||||
|
_ASM_NOKPROBE(__memset_fast)
|
||||||
|
|
Loading…
Reference in New Issue