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