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