11.4Srin/* $NetBSD: netbsd32_machdep.h,v 1.4 2020/07/02 13:04:47 rin Exp $ */ 21.1Sryo 31.1Sryo#ifndef _MACHINE_NETBSD32_H_ 41.1Sryo#define _MACHINE_NETBSD32_H_ 51.1Sryo 61.1Sryo#include <sys/ucontext.h> 71.1Sryo#include <compat/sys/ucontext.h> 81.1Sryo#include <compat/sys/siginfo.h> 91.1Sryo 101.4Srin/* 111.4Srin * arm ptrace constants 121.4Srin * Please keep in sync with sys/arch/arm/include/ptrace.h. 131.4Srin */ 141.4Srin#define PT32_STEP (PT_FIRSTMACH + 0) /* Not implemented */ 151.4Srin#define PT32_GETREGS (PT_FIRSTMACH + 1) 161.4Srin#define PT32_SETREGS (PT_FIRSTMACH + 2) 171.4Srin#define PT32_GETFPREGS (PT_FIRSTMACH + 5) 181.4Srin#define PT32_SETFPREGS (PT_FIRSTMACH + 6) 191.4Srin#define PT32_SETSTEP (PT_FIRSTMACH + 7) /* Not implemented */ 201.4Srin#define PT32_CLEARSTEP (PT_FIRSTMACH + 8) /* Not implemented */ 211.4Srin 221.1Sryo#define NETBSD32_POINTER_TYPE uint32_t 231.1Sryotypedef struct { NETBSD32_POINTER_TYPE i32; } netbsd32_pointer_t; 241.1Sryo 251.1Sryo/* earm has 64bit aligned 64bit integers */ 261.1Sryo#define NETBSD32_INT64_ALIGN __attribute__((__aligned__(8))) 271.1Sryo 281.1Sryotypedef netbsd32_pointer_t netbsd32_sigcontextp_t; 291.1Sryo 301.1Sryostruct netbsd32_sigcontext13 { 311.1Sryo int32_t sc_onstack; /* sigstack state to restore */ 321.1Sryo int32_t __sc_mask13; /* signal mask to restore (old style) */ 331.1Sryo 341.1Sryo uint32_t sc_spsr; 351.1Sryo uint32_t sc_r0; 361.1Sryo uint32_t sc_r1; 371.1Sryo uint32_t sc_r2; 381.1Sryo uint32_t sc_r3; 391.1Sryo uint32_t sc_r4; 401.1Sryo uint32_t sc_r5; 411.1Sryo uint32_t sc_r6; 421.1Sryo uint32_t sc_r7; 431.1Sryo uint32_t sc_r8; 441.1Sryo uint32_t sc_r9; 451.1Sryo uint32_t sc_r10; 461.1Sryo uint32_t sc_r11; 471.1Sryo uint32_t sc_r12; 481.1Sryo uint32_t sc_usr_sp; 491.1Sryo uint32_t sc_usr_lr; 501.1Sryo uint32_t sc_svc_lr; 511.1Sryo uint32_t sc_pc; 521.1Sryo}; 531.1Sryo 541.1Sryostruct netbsd32_sigcontext { 551.1Sryo int32_t sc_onstack; /* sigstack state to restore */ 561.1Sryo int32_t __sc_mask13; /* signal mask to restore (old style) */ 571.1Sryo 581.1Sryo uint32_t sc_spsr; 591.1Sryo uint32_t sc_r0; 601.1Sryo uint32_t sc_r1; 611.1Sryo uint32_t sc_r2; 621.1Sryo uint32_t sc_r3; 631.1Sryo uint32_t sc_r4; 641.1Sryo uint32_t sc_r5; 651.1Sryo uint32_t sc_r6; 661.1Sryo uint32_t sc_r7; 671.1Sryo uint32_t sc_r8; 681.1Sryo uint32_t sc_r9; 691.1Sryo uint32_t sc_r10; 701.1Sryo uint32_t sc_r11; 711.1Sryo uint32_t sc_r12; 721.1Sryo uint32_t sc_usr_sp; 731.1Sryo uint32_t sc_usr_lr; 741.1Sryo uint32_t sc_svc_lr; 751.1Sryo uint32_t sc_pc; 761.1Sryo 771.1Sryo sigset_t sc_mask; /* signal mask to restore (new style) */ 781.1Sryo}; 791.1Sryo 801.2Sryostruct netbsd32_sigframe_siginfo { 811.2Sryo siginfo32_t sf_si; 821.2Sryo ucontext32_t sf_uc; 831.2Sryo}; 841.2Sryo 851.2Sryostruct reg32 { 861.2Sryo uint32_t r[13]; 871.2Sryo uint32_t r_sp; 881.2Sryo uint32_t r_lr; 891.2Sryo uint32_t r_pc; 901.2Sryo uint32_t r_cpsr; 911.2Sryo}; 921.2Sryo 931.2Sryostruct vfpreg32 { 941.2Sryo uint32_t vfp_fpexc; 951.2Sryo uint32_t vfp_fpscr; 961.2Sryo uint32_t vfp_fpinst; 971.2Sryo uint32_t vfp_fpinst2; 981.2Sryo uint64_t vfp_regs[33]; /* In case we need fstmx format. */ 991.2Sryo}; 1001.2Sryo 1011.2Sryostruct fpreg32 { 1021.2Sryo struct vfpreg32 fpr_vfp; 1031.2Sryo}; 1041.2Sryo 1051.2Sryo/* same as cpustate in arm/arm/core_machdep.c */ 1061.2Sryostruct netbsd32_cpustate { 1071.2Sryo struct reg32 regs; 1081.2Sryo struct fpreg32 fpregs; 1091.2Sryo}; 1101.2Sryo 1111.2Sryo/* compat netbsd/arm sysarch(2) */ 1121.2Sryo#define ARM_SYNC_ICACHE 0 1131.2Sryo#define ARM_DRAIN_WRITEBUF 1 1141.2Sryo#define ARM_VFP_FPSCR 2 1151.2Sryo#define ARM_FPU_USED 3 1161.2Sryo 1171.2Sryostruct netbsd32_arm_sync_icache_args { 1181.4Srin uint32_t addr; /* Virtual start address */ 1191.4Srin uint32_t len; /* Region size */ 1201.2Sryo}; 1211.1Sryo 1221.3Srin/* Support varying ABI names for netbsd32 */ 1231.3Srin#define PROC_MACHINE_ARCH32(P) ((P)->p_md.md_march32) 1241.3Srin 1251.4Srin/* Translate ptrace() PT_* request from 32-bit userland to kernel. */ 1261.4Srinint netbsd32_ptrace_translate_request(int); 1271.4Srin 1281.4Srinint netbsd32_process_read_regs(struct lwp *, struct reg32 *); 1291.4Srinint netbsd32_process_read_fpregs(struct lwp *, struct fpreg32 *, size_t *); 1301.4Srin 1311.4Srinint netbsd32_process_write_regs(struct lwp *, const struct reg32 *); 1321.4Srinint netbsd32_process_write_fpregs(struct lwp *, const struct fpreg32 *, size_t); 1331.4Srin 1341.1Sryo#endif /* _MACHINE_NETBSD32_H_ */ 135