1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (C) 2021 ARM Limited 4 * 5 * Verify that using an instruction not supported in streaming mode 6 * traps when in streaming mode. 7 */ 8 9 #include <signal.h> 10 #include <ucontext.h> 11 #include <sys/prctl.h> 12 13 #include "test_signals_utils.h" 14 #include "testcases.h" 15 16 int sme_trap_non_streaming_trigger(struct tdescr *td) 17 { 18 /* 19 * The framework will handle SIGILL so we need to exit SM to 20 * stop any other code triggering a further SIGILL down the 21 * line from using a streaming-illegal instruction. 22 */ 23 asm volatile(".inst 0xd503437f; /* SMSTART ZA */ \ 24 cnt v0.16b, v0.16b; \ 25 .inst 0xd503447f /* SMSTOP ZA */"); 26 27 return 0; 28 } 29 30 int sme_trap_non_streaming_run(struct tdescr *td, siginfo_t *si, ucontext_t *uc) 31 { 32 return 1; 33 } 34 35 struct tdescr tde = { 36 .name = "SME SM trap unsupported instruction", 37 .descr = "Check that we get a SIGILL if we use an unsupported instruction in streaming mode", 38 .feats_required = FEAT_SME, 39 .feats_incompatible = FEAT_SME_FA64, 40 .timeout = 3, 41 .sanity_disabled = true, 42 .trigger = sme_trap_non_streaming_trigger, 43 .run = sme_trap_non_streaming_run, 44 .sig_ok = SIGILL, 45 }; 46