| /* SPDX-License-Identifier: GPL-2.0 */ | |
| #ifndef _MCSAFE_TEST_H_ | |
| #define _MCSAFE_TEST_H_ | |
| #ifndef __ASSEMBLY__ | |
| #ifdef CONFIG_MCSAFE_TEST | |
| extern unsigned long mcsafe_test_src; | |
| extern unsigned long mcsafe_test_dst; | |
| static inline void mcsafe_inject_src(void *addr) | |
| { | |
| if (addr) | |
| mcsafe_test_src = (unsigned long) addr; | |
| else | |
| mcsafe_test_src = ~0UL; | |
| } | |
| static inline void mcsafe_inject_dst(void *addr) | |
| { | |
| if (addr) | |
| mcsafe_test_dst = (unsigned long) addr; | |
| else | |
| mcsafe_test_dst = ~0UL; | |
| } | |
| #else /* CONFIG_MCSAFE_TEST */ | |
| static inline void mcsafe_inject_src(void *addr) | |
| { | |
| } | |
| static inline void mcsafe_inject_dst(void *addr) | |
| { | |
| } | |
| #endif /* CONFIG_MCSAFE_TEST */ | |
| #else /* __ASSEMBLY__ */ | |
| #include <asm/export.h> | |
| #ifdef CONFIG_MCSAFE_TEST | |
| .macro MCSAFE_TEST_CTL | |
| .pushsection .data | |
| .align 8 | |
| .globl mcsafe_test_src | |
| mcsafe_test_src: | |
| .quad 0 | |
| EXPORT_SYMBOL_GPL(mcsafe_test_src) | |
| .globl mcsafe_test_dst | |
| mcsafe_test_dst: | |
| .quad 0 | |
| EXPORT_SYMBOL_GPL(mcsafe_test_dst) | |
| .popsection | |
| .endm | |
| .macro MCSAFE_TEST_SRC reg count target | |
| leaq \count(\reg), %r9 | |
| cmp mcsafe_test_src, %r9 | |
| ja \target | |
| .endm | |
| .macro MCSAFE_TEST_DST reg count target | |
| leaq \count(\reg), %r9 | |
| cmp mcsafe_test_dst, %r9 | |
| ja \target | |
| .endm | |
| #else | |
| .macro MCSAFE_TEST_CTL | |
| .endm | |
| .macro MCSAFE_TEST_SRC reg count target | |
| .endm | |
| .macro MCSAFE_TEST_DST reg count target | |
| .endm | |
| #endif /* CONFIG_MCSAFE_TEST */ | |
| #endif /* __ASSEMBLY__ */ | |
| #endif /* _MCSAFE_TEST_H_ */ |