 07e2671120
			
		
	
	
		07e2671120
		
	
	
	
	
		
			
			Added definitions for RISC-V signal handling, including structures and constants for managing signal frames and context Signed-off-by: Mark Corbin <mark@dibsco.co.uk> Signed-off-by: Ajeet Singh <itachis@FreeBSD.org> Co-authored-by: Warner Losh <imp@bsdimp.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-ID: <20240916155119.14610-14-itachis@FreeBSD.org> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *  RISC-V signal definitions
 | |
|  *
 | |
|  *  Copyright (c) 2019 Mark Corbin
 | |
|  *
 | |
|  *  This program is free software; you can redistribute it and/or modify
 | |
|  *  it under the terms of the GNU General Public License as published by
 | |
|  *  the Free Software Foundation; either version 2 of the License, or
 | |
|  *  (at your option) any later version.
 | |
|  *
 | |
|  *  This program is distributed in the hope that it will be useful,
 | |
|  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  *  GNU General Public License for more details.
 | |
|  *
 | |
|  *  You should have received a copy of the GNU General Public License
 | |
|  *  along with this program; if not, see <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| #ifndef TARGET_ARCH_SIGNAL_H
 | |
| #define TARGET_ARCH_SIGNAL_H
 | |
| 
 | |
| #include "cpu.h"
 | |
| 
 | |
| 
 | |
| #define TARGET_INSN_SIZE     4  /* riscv instruction size */
 | |
| 
 | |
| /* Size of the signal trampoline code placed on the stack. */
 | |
| #define TARGET_SZSIGCODE    ((abi_ulong)(7 * TARGET_INSN_SIZE))
 | |
| 
 | |
| /* Compare with riscv/include/_limits.h */
 | |
| #define TARGET_MINSIGSTKSZ  (1024 * 4)
 | |
| #define TARGET_SIGSTKSZ     (TARGET_MINSIGSTKSZ + 32768)
 | |
| 
 | |
| struct target_gpregs {
 | |
|     uint64_t    gp_ra;
 | |
|     uint64_t    gp_sp;
 | |
|     uint64_t    gp_gp;
 | |
|     uint64_t    gp_tp;
 | |
|     uint64_t    gp_t[7];
 | |
|     uint64_t    gp_s[12];
 | |
|     uint64_t    gp_a[8];
 | |
|     uint64_t    gp_sepc;
 | |
|     uint64_t    gp_sstatus;
 | |
| };
 | |
| 
 | |
| struct target_fpregs {
 | |
|     uint64_t        fp_x[32][2];
 | |
|     uint64_t        fp_fcsr;
 | |
|     uint32_t        fp_flags;
 | |
|     uint32_t        pad;
 | |
| };
 | |
| 
 | |
| typedef struct target_mcontext {
 | |
|     struct target_gpregs   mc_gpregs;
 | |
|     struct target_fpregs   mc_fpregs;
 | |
|     uint32_t               mc_flags;
 | |
| #define TARGET_MC_FP_VALID 0x01
 | |
|     uint32_t               mc_pad;
 | |
|     uint64_t               mc_spare[8];
 | |
| } target_mcontext_t;
 | |
| 
 | |
| #define TARGET_MCONTEXT_SIZE 864
 | |
| #define TARGET_UCONTEXT_SIZE 936
 | |
| 
 | |
| #include "target_os_ucontext.h"
 | |
| 
 | |
| struct target_sigframe {
 | |
|     target_ucontext_t   sf_uc; /* = *sf_uncontext */
 | |
|     target_siginfo_t    sf_si; /* = *sf_siginfo (SA_SIGINFO case)*/
 | |
| };
 | |
| 
 | |
| #define TARGET_SIGSTACK_ALIGN 16
 | |
| 
 | |
| #endif /* TARGET_ARCH_SIGNAL_H */
 |