46 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (C) 2021 ARM Limited4 *5 * Verify that using an instruction not supported in streaming mode6 * 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 16int sme_trap_non_streaming_trigger(struct tdescr *td)17{18 /*19 * The framework will handle SIGILL so we need to exit SM to20 * stop any other code triggering a further SIGILL down the21 * 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 30int sme_trap_non_streaming_run(struct tdescr *td, siginfo_t *si, ucontext_t *uc)31{32 return 1;33}34 35struct 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