Commit ff14a9c0 authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman
Browse files

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: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/a450ef3f8653f75e1bd9aaf7a3889d379752f33b.1638446239.git.christophe.leroy@csgroup.eu
parent d5937db1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ CFLAGS_code-patching.o += -DDISABLE_BRANCH_PROFILING
CFLAGS_feature-fixups.o += -DDISABLE_BRANCH_PROFILING
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
obj-y	+=	string.o memcmp_$(BITS).o
+9 −15
Original line number Diff line number Diff line
@@ -399,7 +399,7 @@ static int __init instr_is_branch_to_addr(const u32 *instr, unsigned long addr)

static void __init test_trampoline(void)
{
	asm ("nop;\n");
	asm ("nop;nop;\n");
}

#define check(x)	do {	\
@@ -708,25 +708,19 @@ static void __init test_translate_branch(void)
	vfree(buf);
}

#ifdef CONFIG_PPC64
static void __init test_prefixed_patching(void)
{
	extern unsigned int code_patching_test1[];
	extern unsigned int code_patching_test1_expected[];
	extern unsigned int end_code_patching_test1[];
	u32 *iptr = (u32 *)ppc_function_entry(test_trampoline);
	u32 expected[2] = {OP_PREFIX << 26, 0};
	ppc_inst_t inst = ppc_inst_prefix(OP_PREFIX << 26, 0);

	__patch_instruction(code_patching_test1,
			    ppc_inst_prefix(OP_PREFIX << 26, 0x00000000),
			    code_patching_test1);
	if (!IS_ENABLED(CONFIG_PPC64))
		return;

	patch_instruction(iptr, inst);

	check(!memcmp(code_patching_test1,
		      code_patching_test1_expected,
		      sizeof(unsigned int) *
		      (end_code_patching_test1 - code_patching_test1)));
	check(!memcmp(iptr, expected, sizeof(expected)));
}
#else
static inline void test_prefixed_patching(void) {}
#endif

static int __init test_code_patching(void)
{
+0 −20
Original line number Diff line number Diff line
/* 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