blob: f4d75388c9d8c6014d3bc64cef877bdbef277efd [file] [log] [blame]
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Diagnose 0x500 snippet used for PV interception tests
*
* Copyright (c) 2021 IBM Corp
*
* Authors:
* Janosch Frank <frankja@linux.ibm.com>
*/
#include <asm/asm-offsets.h>
#include "macros.S"
.section .text
/* Clean and pre-load registers that are used for diag 500 */
xgr %r1, %r1
xgr %r2, %r2
xgr %r3, %r3
xgr %r4, %r4
lghi %r1, 1
lghi %r2, 2
lghi %r3, 3
lghi %r4, 4
/* Let's jump to the next label on a PGM */
SET_PSW_NEW_ADDR 5, next, GEN_LC_PGM_NEW_PSW
/* Execute the diag500 */
diag 0, 0, 0x500
/* Should never be executed because of the PGM */
diag 0, 0, 0x44
/* Execute again to test spec PGM injection*/
next:
lh %r1, GEN_LC_PGM_INT_CODE
diag %r1, 0, 0x9c
larl %r5, done
stg %r5, GEN_LC_PGM_NEW_PSW + 8
diag 0, 0, 0x500
/* Should never be executed because of the PGM */
diag 0, 0, 0x44
done:
lh %r1, GEN_LC_PGM_INT_CODE
diag %r1, 0, 0x9c