76 lines
1.4 KiB
C
76 lines
1.4 KiB
C
|
/* 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_ */
|