xref: /kvm-unit-tests/s390x/snippets/c/spec_ex.c (revision 610c15284a537484682adfb4b6d6313991ab954f)
149934b5aSJanis Schoetterl-Glausch // SPDX-License-Identifier: GPL-2.0-only
249934b5aSJanis Schoetterl-Glausch /*
349934b5aSJanis Schoetterl-Glausch  * Copyright IBM Corp. 2021
449934b5aSJanis Schoetterl-Glausch  *
549934b5aSJanis Schoetterl-Glausch  * Snippet used by specification exception interception test.
649934b5aSJanis Schoetterl-Glausch  */
749934b5aSJanis Schoetterl-Glausch #include <libcflat.h>
849934b5aSJanis Schoetterl-Glausch #include <bitops.h>
949934b5aSJanis Schoetterl-Glausch #include <asm/arch_def.h>
1049934b5aSJanis Schoetterl-Glausch 
main(void)1149934b5aSJanis Schoetterl-Glausch __attribute__((section(".text"))) int main(void)
1249934b5aSJanis Schoetterl-Glausch {
1349934b5aSJanis Schoetterl-Glausch 	uint64_t bad_psw = 0;
1449934b5aSJanis Schoetterl-Glausch 
1549934b5aSJanis Schoetterl-Glausch 	/* PSW bit 12 has no name or meaning and must be 0 */
16*cd719531SJanis Schoetterl-Glausch 	lowcore.pgm_new_psw.mask = BIT(63 - 12);
17*cd719531SJanis Schoetterl-Glausch 	lowcore.pgm_new_psw.addr = 0xdeadbeee;
1849934b5aSJanis Schoetterl-Glausch 	asm volatile ("lpsw %0" :: "Q"(bad_psw));
1949934b5aSJanis Schoetterl-Glausch 	return 0;
2049934b5aSJanis Schoetterl-Glausch }
21