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

ucontext.h (2745B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _ASMARM_UCONTEXT_H
      3#define _ASMARM_UCONTEXT_H
      4
      5#include <asm/fpstate.h>
      6#include <asm/user.h>
      7
      8/*
      9 * struct sigcontext only has room for the basic registers, but struct
     10 * ucontext now has room for all registers which need to be saved and
     11 * restored.  Coprocessor registers are stored in uc_regspace.  Each
     12 * coprocessor's saved state should start with a documented 32-bit magic
     13 * number, followed by a 32-bit word giving the coproccesor's saved size.
     14 * uc_regspace may be expanded if necessary, although this takes some
     15 * coordination with glibc.
     16 */
     17
     18struct ucontext {
     19	unsigned long	  uc_flags;
     20	struct ucontext  *uc_link;
     21	stack_t		  uc_stack;
     22	struct sigcontext uc_mcontext;
     23	sigset_t	  uc_sigmask;
     24	/* Allow for uc_sigmask growth.  Glibc uses a 1024-bit sigset_t.  */
     25	int		  __unused[32 - (sizeof (sigset_t) / sizeof (int))];
     26	/* Last for extensibility.  Eight byte aligned because some
     27	   coprocessors require eight byte alignment.  */
     28 	unsigned long	  uc_regspace[128] __attribute__((__aligned__(8)));
     29};
     30
     31#ifdef __KERNEL__
     32
     33/*
     34 * Coprocessor save state.  The magic values and specific
     35 * coprocessor's layouts are part of the userspace ABI.  Each one of
     36 * these should be a multiple of eight bytes and aligned to eight
     37 * bytes, to prevent unpredictable padding in the signal frame.
     38 */
     39
     40/*
     41 * Dummy padding block: if this magic is encountered, the block should
     42 * be skipped using the corresponding size field.
     43 */
     44#define DUMMY_MAGIC		0xb0d9ed01
     45
     46#ifdef CONFIG_IWMMXT
     47/* iwmmxt_area is 0x98 bytes long, preceded by 8 bytes of signature */
     48#define IWMMXT_MAGIC		0x12ef842a
     49#define IWMMXT_STORAGE_SIZE	(IWMMXT_SIZE + 8)
     50
     51struct iwmmxt_sigframe {
     52	unsigned long	magic;
     53	unsigned long	size;
     54	struct iwmmxt_struct storage;
     55} __attribute__((__aligned__(8)));
     56#endif /* CONFIG_IWMMXT */
     57
     58#ifdef CONFIG_VFP
     59#define VFP_MAGIC		0x56465001
     60
     61struct vfp_sigframe
     62{
     63	unsigned long		magic;
     64	unsigned long		size;
     65	struct user_vfp		ufp;
     66	struct user_vfp_exc	ufp_exc;
     67} __attribute__((__aligned__(8)));
     68
     69/*
     70 *  8 byte for magic and size, 264 byte for ufp, 12 bytes for ufp_exc,
     71 *  4 bytes padding.
     72 */
     73#define VFP_STORAGE_SIZE	sizeof(struct vfp_sigframe)
     74
     75#endif /* CONFIG_VFP */
     76
     77/*
     78 * Auxiliary signal frame.  This saves stuff like FP state.
     79 * The layout of this structure is not part of the user ABI,
     80 * because the config options aren't.  uc_regspace is really
     81 * one of these.
     82 */
     83struct aux_sigframe {
     84#ifdef CONFIG_IWMMXT
     85	struct iwmmxt_sigframe	iwmmxt;
     86#endif
     87#ifdef CONFIG_VFP
     88	struct vfp_sigframe	vfp;
     89#endif
     90	/* Something that isn't a valid magic number for any coprocessor.  */
     91	unsigned long		end_magic;
     92} __attribute__((__aligned__(8)));
     93
     94#endif
     95
     96#endif /* !_ASMARM_UCONTEXT_H */