提交 ff14a9c0 编写于 作者: C Christophe Leroy 提交者: Michael Ellerman

powerpc/code-patching: Use test_trampoline for prefixed patch test

Use the dedicated test_trampoline function for testing prefixed
patching like other tests and remove the hand coded assembly stuff.
Signed-off-by: NChristophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/a450ef3f8653f75e1bd9aaf7a3889d379752f33b.1638446239.git.christophe.leroy@csgroup.eu
上级 d5937db1
...@@ -19,7 +19,7 @@ CFLAGS_code-patching.o += -DDISABLE_BRANCH_PROFILING ...@@ -19,7 +19,7 @@ CFLAGS_code-patching.o += -DDISABLE_BRANCH_PROFILING
CFLAGS_feature-fixups.o += -DDISABLE_BRANCH_PROFILING CFLAGS_feature-fixups.o += -DDISABLE_BRANCH_PROFILING
endif endif
obj-y += alloc.o code-patching.o feature-fixups.o pmem.o test_code-patching.o obj-y += alloc.o code-patching.o feature-fixups.o pmem.o
ifndef CONFIG_KASAN ifndef CONFIG_KASAN
obj-y += string.o memcmp_$(BITS).o obj-y += string.o memcmp_$(BITS).o
......
...@@ -399,7 +399,7 @@ static int __init instr_is_branch_to_addr(const u32 *instr, unsigned long addr) ...@@ -399,7 +399,7 @@ static int __init instr_is_branch_to_addr(const u32 *instr, unsigned long addr)
static void __init test_trampoline(void) static void __init test_trampoline(void)
{ {
asm ("nop;\n"); asm ("nop;nop;\n");
} }
#define check(x) do { \ #define check(x) do { \
...@@ -708,25 +708,19 @@ static void __init test_translate_branch(void) ...@@ -708,25 +708,19 @@ static void __init test_translate_branch(void)
vfree(buf); vfree(buf);
} }
#ifdef CONFIG_PPC64
static void __init test_prefixed_patching(void) static void __init test_prefixed_patching(void)
{ {
extern unsigned int code_patching_test1[]; u32 *iptr = (u32 *)ppc_function_entry(test_trampoline);
extern unsigned int code_patching_test1_expected[]; u32 expected[2] = {OP_PREFIX << 26, 0};
extern unsigned int end_code_patching_test1[]; ppc_inst_t inst = ppc_inst_prefix(OP_PREFIX << 26, 0);
__patch_instruction(code_patching_test1, if (!IS_ENABLED(CONFIG_PPC64))
ppc_inst_prefix(OP_PREFIX << 26, 0x00000000), return;
code_patching_test1);
patch_instruction(iptr, inst);
check(!memcmp(code_patching_test1, check(!memcmp(iptr, expected, sizeof(expected)));
code_patching_test1_expected,
sizeof(unsigned int) *
(end_code_patching_test1 - code_patching_test1)));
} }
#else
static inline void test_prefixed_patching(void) {}
#endif
static int __init test_code_patching(void) static int __init test_code_patching(void)
{ {
......
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (C) 2020 IBM Corporation
*/
#include <asm/ppc-opcode.h>
.text
#define globl(x) \
.globl x; \
x:
globl(code_patching_test1)
nop
nop
globl(end_code_patching_test1)
globl(code_patching_test1_expected)
.long OP_PREFIX << 26
.long 0x0000000
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册