xref: /openbsd-src/sys/arch/powerpc64/include/db_machdep.h (revision 42cc995287453fe7fb6ceff91e03eacadaa32611)
1*42cc9952Sjasper /*	$OpenBSD: db_machdep.h,v 1.6 2021/08/30 08:11:12 jasper Exp $*/
26fbfd68bSgkoehler /*	$NetBSD: db_machdep.h,v 1.13 1996/04/29 20:50:08 leo Exp $	*/
313861200Skettenis 
46fbfd68bSgkoehler /*
56fbfd68bSgkoehler  * Mach Operating System
66fbfd68bSgkoehler  * Copyright (c) 1992 Carnegie Mellon University
76fbfd68bSgkoehler  * All Rights Reserved.
86fbfd68bSgkoehler  *
96fbfd68bSgkoehler  * Permission to use, copy, modify and distribute this software and its
106fbfd68bSgkoehler  * documentation is hereby granted, provided that both the copyright
116fbfd68bSgkoehler  * notice and this permission notice appear in all copies of the
126fbfd68bSgkoehler  * software, derivative works or modified versions, and any portions
136fbfd68bSgkoehler  * thereof, and that both notices appear in supporting documentation.
146fbfd68bSgkoehler  *
156fbfd68bSgkoehler  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
166fbfd68bSgkoehler  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
176fbfd68bSgkoehler  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
186fbfd68bSgkoehler  *
196fbfd68bSgkoehler  * Carnegie Mellon requests users of this software to return to
206fbfd68bSgkoehler  *
216fbfd68bSgkoehler  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
226fbfd68bSgkoehler  *  School of Computer Science
236fbfd68bSgkoehler  *  Carnegie Mellon University
246fbfd68bSgkoehler  *  Pittsburgh PA 15213-3890
256fbfd68bSgkoehler  *
266fbfd68bSgkoehler  * any improvements or extensions that they make and grant Carnegie Mellon
276fbfd68bSgkoehler  * the rights to redistribute these changes.
286fbfd68bSgkoehler  */
2913861200Skettenis 
306fbfd68bSgkoehler /*
316fbfd68bSgkoehler  * Machine-dependent defines for new kernel debugger.
326fbfd68bSgkoehler  */
336fbfd68bSgkoehler #ifndef _MACHINE_DB_MACHDEP_H_
346fbfd68bSgkoehler #define _MACHINE_DB_MACHDEP_H_
3513861200Skettenis 
366fbfd68bSgkoehler #include <sys/types.h>
376fbfd68bSgkoehler #include <uvm/uvm_param.h>
38fe9bb682Sgkoehler #include <machine/psl.h>
396fbfd68bSgkoehler #include <machine/trap.h>
4013861200Skettenis 
416fbfd68bSgkoehler typedef long		db_expr_t;	/* expression - signed */
426fbfd68bSgkoehler typedef struct trapframe db_regs_t;
436fbfd68bSgkoehler extern db_regs_t ddb_regs;		/* register state */
4413861200Skettenis 
456fbfd68bSgkoehler #define PC_REGS(regs)	((regs)->srr0)
466fbfd68bSgkoehler #define SET_PC_REGS(regs, value)	PC_REGS(regs) = (value)
4706db26f9Sgkoehler 
486fbfd68bSgkoehler #define BKPT_INST	0x7C810808	/* breakpoint instruction */
4906db26f9Sgkoehler 
506fbfd68bSgkoehler #define BKPT_SIZE	(4)		/* size of breakpoint inst */
516fbfd68bSgkoehler #define BKPT_SET(inst)	(BKPT_INST)
5213861200Skettenis 
53fe9bb682Sgkoehler #define db_clear_single_step(regs)	((regs)->srr1 &= ~PSL_SE)
54fe9bb682Sgkoehler #define db_set_single_step(regs)	((regs)->srr1 |=  PSL_SE)
556fbfd68bSgkoehler 
566fbfd68bSgkoehler #define T_BREAKPOINT	0xffff
576fbfd68bSgkoehler #define IS_BREAKPOINT_TRAP(type, code)	((type) == T_BREAKPOINT)
586fbfd68bSgkoehler #define IS_WATCHPOINT_TRAP(type, code)	0
596fbfd68bSgkoehler 
606fbfd68bSgkoehler #define M_RTS		0xfc0007fe
616fbfd68bSgkoehler #define I_RTS		0x4c000020
626fbfd68bSgkoehler #define M_BC		0xfc000000
636fbfd68bSgkoehler #define I_BC		0x40000000
646fbfd68bSgkoehler #define M_B		0xfc000000
656fbfd68bSgkoehler #define I_B		0x50000000
666fbfd68bSgkoehler #define M_RFI		0xfc0007fe
676fbfd68bSgkoehler #define I_RFI		0x4c000064
686fbfd68bSgkoehler 
696fbfd68bSgkoehler #define inst_trap_return(ins)	(((ins)&M_RFI) == I_RFI)
706fbfd68bSgkoehler #define inst_return(ins)	(((ins)&M_RTS) == I_RTS)
716fbfd68bSgkoehler #define inst_call(ins)		(((ins)&M_BC ) == I_BC  || \
726fbfd68bSgkoehler 				 ((ins)&M_B  ) == I_B )
736fbfd68bSgkoehler 
746fbfd68bSgkoehler struct trapframe;
756fbfd68bSgkoehler void db_ktrap(int, db_regs_t *);
766fbfd68bSgkoehler 
77284a504dSkettenis #define DDB_STATE_NOT_RUNNING	0
78284a504dSkettenis #define DDB_STATE_RUNNING	1
79284a504dSkettenis #define DDB_STATE_EXITING	2
80284a504dSkettenis 
81284a504dSkettenis /*
82284a504dSkettenis  * We define some of our own commands
83284a504dSkettenis  */
84284a504dSkettenis #define DB_MACHINE_COMMANDS
85284a504dSkettenis 
866fbfd68bSgkoehler #endif /* _MACHINE_DB_MACHDEP_H_ */
87