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

compat.h (3838B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2#ifndef __ASM_COMPAT_H
      3#define __ASM_COMPAT_H
      4
      5#define COMPAT_UTS_MACHINE	"riscv\0\0"
      6
      7/*
      8 * Architecture specific compatibility types
      9 */
     10#include <linux/types.h>
     11#include <linux/sched.h>
     12#include <linux/sched/task_stack.h>
     13#include <asm-generic/compat.h>
     14
     15static inline int is_compat_task(void)
     16{
     17	return test_thread_flag(TIF_32BIT);
     18}
     19
     20struct compat_user_regs_struct {
     21	compat_ulong_t pc;
     22	compat_ulong_t ra;
     23	compat_ulong_t sp;
     24	compat_ulong_t gp;
     25	compat_ulong_t tp;
     26	compat_ulong_t t0;
     27	compat_ulong_t t1;
     28	compat_ulong_t t2;
     29	compat_ulong_t s0;
     30	compat_ulong_t s1;
     31	compat_ulong_t a0;
     32	compat_ulong_t a1;
     33	compat_ulong_t a2;
     34	compat_ulong_t a3;
     35	compat_ulong_t a4;
     36	compat_ulong_t a5;
     37	compat_ulong_t a6;
     38	compat_ulong_t a7;
     39	compat_ulong_t s2;
     40	compat_ulong_t s3;
     41	compat_ulong_t s4;
     42	compat_ulong_t s5;
     43	compat_ulong_t s6;
     44	compat_ulong_t s7;
     45	compat_ulong_t s8;
     46	compat_ulong_t s9;
     47	compat_ulong_t s10;
     48	compat_ulong_t s11;
     49	compat_ulong_t t3;
     50	compat_ulong_t t4;
     51	compat_ulong_t t5;
     52	compat_ulong_t t6;
     53};
     54
     55static inline void regs_to_cregs(struct compat_user_regs_struct *cregs,
     56				 struct pt_regs *regs)
     57{
     58	cregs->pc	= (compat_ulong_t) regs->epc;
     59	cregs->ra	= (compat_ulong_t) regs->ra;
     60	cregs->sp	= (compat_ulong_t) regs->sp;
     61	cregs->gp	= (compat_ulong_t) regs->gp;
     62	cregs->tp	= (compat_ulong_t) regs->tp;
     63	cregs->t0	= (compat_ulong_t) regs->t0;
     64	cregs->t1	= (compat_ulong_t) regs->t1;
     65	cregs->t2	= (compat_ulong_t) regs->t2;
     66	cregs->s0	= (compat_ulong_t) regs->s0;
     67	cregs->s1	= (compat_ulong_t) regs->s1;
     68	cregs->a0	= (compat_ulong_t) regs->a0;
     69	cregs->a1	= (compat_ulong_t) regs->a1;
     70	cregs->a2	= (compat_ulong_t) regs->a2;
     71	cregs->a3	= (compat_ulong_t) regs->a3;
     72	cregs->a4	= (compat_ulong_t) regs->a4;
     73	cregs->a5	= (compat_ulong_t) regs->a5;
     74	cregs->a6	= (compat_ulong_t) regs->a6;
     75	cregs->a7	= (compat_ulong_t) regs->a7;
     76	cregs->s2	= (compat_ulong_t) regs->s2;
     77	cregs->s3	= (compat_ulong_t) regs->s3;
     78	cregs->s4	= (compat_ulong_t) regs->s4;
     79	cregs->s5	= (compat_ulong_t) regs->s5;
     80	cregs->s6	= (compat_ulong_t) regs->s6;
     81	cregs->s7	= (compat_ulong_t) regs->s7;
     82	cregs->s8	= (compat_ulong_t) regs->s8;
     83	cregs->s9	= (compat_ulong_t) regs->s9;
     84	cregs->s10	= (compat_ulong_t) regs->s10;
     85	cregs->s11	= (compat_ulong_t) regs->s11;
     86	cregs->t3	= (compat_ulong_t) regs->t3;
     87	cregs->t4	= (compat_ulong_t) regs->t4;
     88	cregs->t5	= (compat_ulong_t) regs->t5;
     89	cregs->t6	= (compat_ulong_t) regs->t6;
     90};
     91
     92static inline void cregs_to_regs(struct compat_user_regs_struct *cregs,
     93				 struct pt_regs *regs)
     94{
     95	regs->epc	= (unsigned long) cregs->pc;
     96	regs->ra	= (unsigned long) cregs->ra;
     97	regs->sp	= (unsigned long) cregs->sp;
     98	regs->gp	= (unsigned long) cregs->gp;
     99	regs->tp	= (unsigned long) cregs->tp;
    100	regs->t0	= (unsigned long) cregs->t0;
    101	regs->t1	= (unsigned long) cregs->t1;
    102	regs->t2	= (unsigned long) cregs->t2;
    103	regs->s0	= (unsigned long) cregs->s0;
    104	regs->s1	= (unsigned long) cregs->s1;
    105	regs->a0	= (unsigned long) cregs->a0;
    106	regs->a1	= (unsigned long) cregs->a1;
    107	regs->a2	= (unsigned long) cregs->a2;
    108	regs->a3	= (unsigned long) cregs->a3;
    109	regs->a4	= (unsigned long) cregs->a4;
    110	regs->a5	= (unsigned long) cregs->a5;
    111	regs->a6	= (unsigned long) cregs->a6;
    112	regs->a7	= (unsigned long) cregs->a7;
    113	regs->s2	= (unsigned long) cregs->s2;
    114	regs->s3	= (unsigned long) cregs->s3;
    115	regs->s4	= (unsigned long) cregs->s4;
    116	regs->s5	= (unsigned long) cregs->s5;
    117	regs->s6	= (unsigned long) cregs->s6;
    118	regs->s7	= (unsigned long) cregs->s7;
    119	regs->s8	= (unsigned long) cregs->s8;
    120	regs->s9	= (unsigned long) cregs->s9;
    121	regs->s10	= (unsigned long) cregs->s10;
    122	regs->s11	= (unsigned long) cregs->s11;
    123	regs->t3	= (unsigned long) cregs->t3;
    124	regs->t4	= (unsigned long) cregs->t4;
    125	regs->t5	= (unsigned long) cregs->t5;
    126	regs->t6	= (unsigned long) cregs->t6;
    127};
    128
    129#endif /* __ASM_COMPAT_H */