Commit f77f8ff7 authored by Jordan Niethe's avatar Jordan Niethe Committed by Michael Ellerman
Browse files

powerpc: Test prefixed code patching



Expand the code-patching self-tests to includes tests for patching
prefixed instructions.

Signed-off-by: default avatarJordan Niethe <jniethe5@gmail.com>
[mpe: Use CONFIG_PPC64 not __powerpc64__]
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200506034050.24806-25-jniethe5@gmail.com
parent 650b55b7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -16,7 +16,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 inst.o
obj-y += alloc.o code-patching.o feature-fixups.o pmem.o inst.o test_code-patching.o

ifndef CONFIG_KASAN
obj-y	+=	string.o memcmp_$(BITS).o
+21 −0
Original line number Diff line number Diff line
@@ -708,6 +708,26 @@ 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[];

	__patch_instruction((struct ppc_inst *)code_patching_test1,
			    ppc_inst_prefix(OP_PREFIX << 26, 0x00000000),
			    (struct ppc_inst *)code_patching_test1);

	check(!memcmp(code_patching_test1,
		      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)
{
	printk(KERN_DEBUG "Running code patching self-tests ...\n");
@@ -716,6 +736,7 @@ static int __init test_code_patching(void)
	test_branch_bform();
	test_create_function_call();
	test_translate_branch();
	test_prefixed_patching();

	return 0;
}
+20 −0
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