mcontext.h revision 1.12
11.12Schristos/* $NetBSD: mcontext.h,v 1.12 2024/11/30 01:04:13 christos Exp $ */ 21.1Smatt 31.1Smatt/*- 41.1Smatt * Copyright (c) 2014 The NetBSD Foundation, Inc. 51.1Smatt * All rights reserved. 61.1Smatt * 71.1Smatt * This code is derived from software contributed to The NetBSD Foundation 81.1Smatt * by Matt Thomas of 3am Software Foundry. 91.1Smatt * 101.1Smatt * Redistribution and use in source and binary forms, with or without 111.1Smatt * modification, are permitted provided that the following conditions 121.1Smatt * are met: 131.1Smatt * 1. Redistributions of source code must retain the above copyright 141.1Smatt * notice, this list of conditions and the following disclaimer. 151.1Smatt * 2. Redistributions in binary form must reproduce the above copyright 161.1Smatt * notice, this list of conditions and the following disclaimer in the 171.1Smatt * documentation and/or other materials provided with the distribution. 181.1Smatt * 191.1Smatt * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 201.1Smatt * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 211.1Smatt * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 221.1Smatt * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 231.1Smatt * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 241.1Smatt * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 251.1Smatt * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 261.1Smatt * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 271.1Smatt * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 281.1Smatt * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 291.1Smatt * POSSIBILITY OF SUCH DAMAGE. 301.1Smatt */ 311.1Smatt#ifndef _RISCV_MCONTEXT_H_ 321.1Smatt#define _RISCV_MCONTEXT_H_ 331.1Smatt 341.1Smatt/* 351.1Smatt */ 361.1Smatt 371.1Smatt#define _NGREG 32 /* GR1-31 */ 381.1Smatt#define _NFREG 33 /* F0-31, FCSR */ 391.1Smatt 401.1Smatt/* 411.6Sskrll * This fragment is common to <riscv/mcontext.h> and <riscv/reg.h> 421.1Smatt */ 431.1Smatt#ifndef _BSD_FPREG_T_ 441.1Smattunion __fpreg { 451.1Smatt __uint64_t u_u64; 461.1Smatt double u_d; 471.1Smatt}; 481.1Smatt#define _BSD_FPREG_T_ union __fpreg 491.1Smatt#endif 501.1Smatt 511.8Sskrlltypedef long __greg_t; 521.1Smatttypedef __greg_t __gregset_t[_NGREG]; 531.1Smatttypedef __uint32_t __greg32_t; 541.1Smatttypedef __greg32_t __gregset32_t[_NGREG]; 551.1Smatttypedef _BSD_FPREG_T_ __fregset_t[_NFREG]; 561.1Smatt 571.1Smatt#define _REG_X1 0 581.1Smatt#define _REG_X2 1 591.1Smatt#define _REG_X3 2 601.1Smatt#define _REG_X4 3 611.1Smatt#define _REG_X5 4 621.1Smatt#define _REG_X6 5 631.1Smatt#define _REG_X7 6 641.1Smatt#define _REG_X8 7 651.1Smatt#define _REG_X9 8 661.1Smatt#define _REG_X10 9 671.1Smatt#define _REG_X11 10 681.1Smatt#define _REG_X12 11 691.1Smatt#define _REG_X13 12 701.1Smatt#define _REG_X14 13 711.1Smatt#define _REG_X15 14 721.1Smatt#define _REG_X16 15 731.1Smatt#define _REG_X17 16 741.1Smatt#define _REG_X18 17 751.1Smatt#define _REG_X19 18 761.1Smatt#define _REG_X20 19 771.1Smatt#define _REG_X21 20 781.1Smatt#define _REG_X22 21 791.1Smatt#define _REG_X23 22 801.1Smatt#define _REG_X24 23 811.1Smatt#define _REG_X25 24 821.1Smatt#define _REG_X26 25 831.1Smatt#define _REG_X27 26 841.1Smatt#define _REG_X28 27 851.1Smatt#define _REG_X29 28 861.1Smatt#define _REG_X30 29 871.1Smatt#define _REG_X31 30 881.1Smatt#define _REG_PC 31 891.1Smatt 901.1Smatt#define _REG_RA _REG_X1 911.3Smatt#define _REG_SP _REG_X2 921.3Smatt#define _REG_GP _REG_X3 931.3Smatt#define _REG_TP _REG_X4 941.9Sskrll#define _REG_T0 _REG_X5 951.9Sskrll#define _REG_T1 _REG_X6 961.9Sskrll#define _REG_T2 _REG_X7 971.4Smatt#define _REG_S0 _REG_X8 981.9Sskrll#define _REG_S1 _REG_X9 991.3Smatt#define _REG_RV _REG_X10 1001.3Smatt#define _REG_A0 _REG_X10 1011.9Sskrll#define _REG_A1 _REG_X11 1021.9Sskrll#define _REG_A2 _REG_X12 1031.9Sskrll#define _REG_A3 _REG_X13 1041.9Sskrll#define _REG_A4 _REG_X14 1051.9Sskrll#define _REG_A5 _REG_X15 1061.9Sskrll#define _REG_A6 _REG_X16 1071.9Sskrll#define _REG_A7 _REG_X17 1081.9Sskrll#define _REG_S2 _REG_X18 1091.9Sskrll#define _REG_S3 _REG_X19 1101.9Sskrll#define _REG_S4 _REG_X20 1111.9Sskrll#define _REG_S5 _REG_X21 1121.9Sskrll#define _REG_S6 _REG_X22 1131.9Sskrll#define _REG_S7 _REG_X23 1141.9Sskrll#define _REG_S8 _REG_X24 1151.9Sskrll#define _REG_S9 _REG_X25 1161.9Sskrll#define _REG_S10 _REG_X26 1171.9Sskrll#define _REG_S11 _REG_X27 1181.9Sskrll#define _REG_T3 _REG_X28 1191.9Sskrll#define _REG_T4 _REG_X29 1201.9Sskrll#define _REG_T5 _REG_X30 1211.9Sskrll#define _REG_T6 _REG_X31 1221.1Smatt 1231.1Smatt#define _REG_F0 0 1241.1Smatt#define _REG_FPCSR 32 1251.1Smatt 1261.1Smatttypedef struct { 1271.1Smatt __gregset_t __gregs; /* General Purpose Register set */ 1281.1Smatt __fregset_t __fregs; /* Floating Point Register set */ 1291.7Sskrll __greg_t __spare[7]; /* future proof */ 1301.1Smatt} mcontext_t; 1311.1Smatt 1321.1Smatttypedef struct { 1331.1Smatt __gregset32_t __gregs; /* General Purpose Register set */ 1341.1Smatt __fregset_t __fregs; /* Floating Point Register set */ 1351.7Sskrll __greg32_t __spare[7]; /* future proof */ 1361.1Smatt} mcontext32_t; 1371.1Smatt 1381.1Smatt/* Machine-dependent uc_flags */ 1391.1Smatt#define _UC_SETSTACK 0x00010000 /* see <sys/ucontext.h> */ 1401.1Smatt#define _UC_CLRSTACK 0x00020000 /* see <sys/ucontext.h> */ 1411.1Smatt#define _UC_TLSBASE 0x00080000 /* see <sys/ucontext.h> */ 1421.1Smatt 1431.7Sskrll#define _UC_MACHINE_SP(uc) ((uc)->uc_mcontext.__gregs[_REG_SP]) 1441.7Sskrll#define _UC_MACHINE_FP(uc) ((uc)->uc_mcontext.__gregs[_REG_S0]) 1451.7Sskrll#define _UC_MACHINE_PC(uc) ((uc)->uc_mcontext.__gregs[_REG_PC]) 1461.7Sskrll#define _UC_MACHINE_INTRV(uc) ((uc)->uc_mcontext.__gregs[_REG_RV]) 1471.1Smatt 1481.1Smatt#define _UC_MACHINE_SET_PC(uc, pc) _UC_MACHINE_PC(uc) = (pc) 1491.1Smatt 1501.1Smatt#endif /* !_RISCV_MCONTEXT_H_ */ 151