brintos

brintos / linux-shallow public Read only

0
0
Text · 1.3 KiB · aa835ac Raw
69 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * Copyright (C) 2021 ARM Limited4 *5 * Check that the SVE vector length reported in signal contexts is the6 * expected one.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 16struct fake_sigframe sf;17unsigned int vl;18 19static bool get_sve_vl(struct tdescr *td)20{21	int ret = prctl(PR_SVE_GET_VL);22	if (ret == -1)23		return false;24 25	vl = ret;26 27	return true;28}29 30static int sve_vl(struct tdescr *td, siginfo_t *si, ucontext_t *uc)31{32	size_t resv_sz, offset;33	struct _aarch64_ctx *head = GET_SF_RESV_HEAD(sf);34	struct sve_context *sve;35 36	/* Get a signal context which should have a SVE frame in it */37	if (!get_current_context(td, &sf.uc, sizeof(sf.uc)))38		return 1;39 40	resv_sz = GET_SF_RESV_SIZE(sf);41	head = get_header(head, SVE_MAGIC, resv_sz, &offset);42	if (!head) {43		fprintf(stderr, "No SVE context\n");44		return 1;45	}46	sve = (struct sve_context *)head;47 48	if (sve->vl != vl) {49		fprintf(stderr, "sigframe VL %u, expected %u\n",50			sve->vl, vl);51		return 1;52	} else {53		fprintf(stderr, "got expected VL %u\n", vl);54	}55 56	td->pass = 1;57 58	return 0;59}60 61struct tdescr tde = {62	.name = "SVE VL",63	.descr = "Check that we get the right SVE VL reported",64	.feats_required = FEAT_SVE,65	.timeout = 3,66	.init = get_sve_vl,67	.run = sve_vl,68};69