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: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/a450ef3f8653f75e1bd9aaf7a3889d379752f33b.1638446239.git.christophe.leroy@csgroup.eu
This commit is contained in:
committed by
Michael Ellerman
parent
d5937db114
commit
ff14a9c09f
@@ -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)
|
|||||||
|
|
||||||
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)
|
|||||||
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);
|
|
||||||
|
|
||||||
check(!memcmp(code_patching_test1,
|
patch_instruction(iptr, inst);
|
||||||
code_patching_test1_expected,
|
|
||||||
sizeof(unsigned int) *
|
check(!memcmp(iptr, expected, sizeof(expected)));
|
||||||
(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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
/* 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
|
|
||||||
Reference in New Issue
Block a user