cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

test_signals.h (2989B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/* Copyright (C) 2019 ARM Limited */
      3
      4#ifndef __TEST_SIGNALS_H__
      5#define __TEST_SIGNALS_H__
      6
      7#include <signal.h>
      8#include <stdbool.h>
      9#include <ucontext.h>
     10
     11/*
     12 * Using ARCH specific and sanitized Kernel headers installed by KSFT
     13 * framework since we asked for it by setting flag KSFT_KHDR_INSTALL
     14 * in our Makefile.
     15 */
     16#include <asm/ptrace.h>
     17#include <asm/hwcap.h>
     18
     19#define __stringify_1(x...)	#x
     20#define __stringify(x...)	__stringify_1(x)
     21
     22#define get_regval(regname, out)			\
     23{							\
     24	asm volatile("mrs %0, " __stringify(regname)	\
     25	: "=r" (out)					\
     26	:						\
     27	: "memory");					\
     28}
     29
     30/*
     31 * Feature flags used in tdescr.feats_required to specify
     32 * any feature by the test
     33 */
     34enum {
     35	FSSBS_BIT,
     36	FSVE_BIT,
     37	FSME_BIT,
     38	FSME_FA64_BIT,
     39	FMAX_END
     40};
     41
     42#define FEAT_SSBS		(1UL << FSSBS_BIT)
     43#define FEAT_SVE		(1UL << FSVE_BIT)
     44#define FEAT_SME		(1UL << FSME_BIT)
     45#define FEAT_SME_FA64		(1UL << FSME_FA64_BIT)
     46
     47/*
     48 * A descriptor used to describe and configure a test case.
     49 * Fields with a non-trivial meaning are described inline in the following.
     50 */
     51struct tdescr {
     52	/* KEEP THIS FIELD FIRST for easier lookup from assembly */
     53	void			*token;
     54	/* when disabled token based sanity checking is skipped in handler */
     55	bool			sanity_disabled;
     56	/* just a name for the test-case; manadatory field */
     57	char			*name;
     58	char			*descr;
     59	unsigned long		feats_required;
     60	unsigned long		feats_incompatible;
     61	/* bitmask of effectively supported feats: populated at run-time */
     62	unsigned long		feats_supported;
     63	bool			initialized;
     64	unsigned int		minsigstksz;
     65	/* signum used as a test trigger. Zero if no trigger-signal is used */
     66	int			sig_trig;
     67	/*
     68	 * signum considered as a successful test completion.
     69	 * Zero when no signal is expected on success
     70	 */
     71	int			sig_ok;
     72	/* signum expected on unsupported CPU features. */
     73	int			sig_unsupp;
     74	/* a timeout in second for test completion */
     75	unsigned int		timeout;
     76	bool			triggered;
     77	bool			pass;
     78	unsigned int		result;
     79	/* optional sa_flags for the installed handler */
     80	int			sa_flags;
     81	ucontext_t		saved_uc;
     82	/* used by get_current_ctx() */
     83	size_t			live_sz;
     84	ucontext_t		*live_uc;
     85	volatile sig_atomic_t	live_uc_valid;
     86	/* optional test private data */
     87	void			*priv;
     88
     89	/* a custom setup: called alternatively to default_setup */
     90	int (*setup)(struct tdescr *td);
     91	/* a custom init: called by default test init after test_setup */
     92	bool (*init)(struct tdescr *td);
     93	/* a custom cleanup function called before test exits */
     94	void (*cleanup)(struct tdescr *td);
     95	/* an optional function to be used as a trigger for starting test */
     96	int (*trigger)(struct tdescr *td);
     97	/*
     98	 * the actual test-core: invoked differently depending on the
     99	 * presence of the trigger function above; this is mandatory
    100	 */
    101	int (*run)(struct tdescr *td, siginfo_t *si, ucontext_t *uc);
    102	/* an optional function for custom results' processing */
    103	void (*check_result)(struct tdescr *td);
    104};
    105
    106extern struct tdescr tde;
    107#endif