]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
powerpc/sstep: Set NIP in instruction emulation tests
authorJordan Niethe <jniethe5@gmail.com>
Mon, 25 May 2020 02:59:21 +0000 (12:59 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 23 Jul 2020 07:25:15 +0000 (17:25 +1000)
The tests for emulation of compute instructions execute and
emulate an instruction and then compare the results to verify the
emulation. In ISA v3.1 there are instructions that operate relative to
the NIP. Therefore set the NIP in the regs used for the emulated
instruction to the location of the executed instruction so they will
give the same result.

This is a rework of a patch by Balamuruhan S.

Signed-off-by: Jordan Niethe <jniethe5@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200525025923.19843-3-jniethe5@gmail.com
arch/powerpc/lib/test_emulate_step.c

index 0059290f0fed2048faeb580f6ce4f970616f0c4d..857b95ef57131d9b2e5032dfcf7de10a529c8cef 100644 (file)
@@ -1011,11 +1011,14 @@ static struct compute_test compute_tests[] = {
 static int __init emulate_compute_instr(struct pt_regs *regs,
                                        struct ppc_inst instr)
 {
+       extern s32 patch__exec_instr;
        struct instruction_op op;
 
        if (!regs || !ppc_inst_val(instr))
                return -EINVAL;
 
+       regs->nip = patch_site_addr(&patch__exec_instr);
+
        if (analyse_instr(&op, regs, instr) != 1 ||
            GETTYPE(op.type) != COMPUTE) {
                pr_info("emulation failed, instruction = 0x%08x\n", ppc_inst_val(instr));