summaryrefslogtreecommitdiff
path: root/sys/arch/pc532/include/db_machdep.h
blob: a20ea5465d0a3944250d4893bd7a22250d6475c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*	$NetBSD: db_machdep.h,v 1.3 1994/10/26 08:24:24 cgd Exp $	*/

/* 
 * Mach Operating System
 * Copyright (c) 1992 Carnegie Mellon University
 * Copyright (c) 1992 Helsinki University of Technology
 * All Rights Reserved.
 * 
 * Permission to use, copy, modify and distribute this software and its
 * documentation is hereby granted, provided that both the copyright
 * notice and this permission notice appear in all copies of the
 * software, derivative works or modified versions, and any portions
 * thereof, and that both notices appear in supporting documentation.
 * 
 * CARNEGIE MELLON AND HELSINKI UNIVERSITY OF TECHNOLOGY ALLOW FREE USE
 * OF THIS SOFTWARE IN ITS "AS IS" CONDITION.  CARNEGIE MELLON AND
 * HELSINKI UNIVERSITY OF TECHNOLOGY DISCLAIM ANY LIABILITY OF ANY KIND
 * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
 * 
 * Carnegie Mellon requests users of this software to return to
 * 
 *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
 *  School of Computer Science
 *  Carnegie Mellon University
 *  Pittsburgh PA 15213-3890
 * 
 * any improvements or extensions that they make and grant Carnegie Mellon 
 * the rights to redistribute these changes.
 */
/*
 * HISTORY
 * 11-May-92  Tero Kivinen (kivinen) at Helsinki University of Technology
 *	Created.
 *
 */
/*
 * 	File: ns532/db_machdep.h
 *	Author: Tero Kivinen, Helsinki University of Technology 1992.
 *
 *	Machine-dependent defines for kernel debugger.
 *
 *   modified by Phil Nelson for inclusion in 532bsd.
 *
 */

#ifndef	_MACHINE_DB_MACHDEP_H_
#define	_MACHINE_DB_MACHDEP_H_

/* #include <mach/ns532/vm_types.h> */
/* #include <mach/ns532/vm_param.h> */
#include <vm/vm_prot.h>
#include <vm/vm_param.h>
#include <vm/vm_inherit.h>
#include <vm/lock.h>

/* #include <ns532/thread.h>		/* for thread_status */
#include <machine/frame.h>	/* For struct trapframe */

#include <machine/psl.h>
#include <machine/trap.h>

typedef	vm_offset_t	db_addr_t;	/* address - unsigned */
typedef	int		db_expr_t;	/* expression - signed */

typedef struct ns532_saved_state	db_regs_t;
db_regs_t  	ddb_regs;		/* register state */
#define DDB_REGS	(&ddb_regs)

#define PC_REGS(regs)	((db_addr_t)(regs)->pc)

#define	BKPT_INST	0xf2		/* breakpoint instruction */
#define	BKPT_SIZE	(1)		/* size of breakpoint inst */
#define	BKPT_SET(inst)	(BKPT_INST)

/* #define	FIXUP_PC_AFTER_BREAK	ddb_regs.pc -= 1; */

#define	db_clear_single_step(regs)	((regs)->psr &= ~PSR_T)
#define	db_set_single_step(regs)	((regs)->psr |=  PSR_T)

#define	IS_BREAKPOINT_TRAP(type, code)	((type) == T_BPT)
#define IS_WATCHPOINT_TRAP(type, code)	((type) == T_WATCHPOINT)

#define I_BSR		0x02
#define I_JSR		0x7f /* and low 3 bits of next byte are 0x6 */
#define I_RET		0x12
#define I_RETT		0x42
#define I_RETI		0x52

#define	inst_trap_return(ins)	(((ins)&0xff) == I_RETT || \
				 ((ins)&0xff) == I_RETI)
#define	inst_return(ins)	(((ins)&0xff) == I_RET)
#define	inst_call(ins)		(((ins)&0xff) == I_BSR || \
				 (((ins)&0xff) == I_JSR && \
				  ((ins)&0x0700) == 0x0600))

#define inst_load(ins)	0
#define inst_store(ins)	0

extern int db_active_ipl;

/* access capability and access macros */

#define DB_ACCESS_LEVEL		2	/* access any space */
#define DB_CHECK_ACCESS(addr,size,task)				\
	db_check_access(addr,size,task)
#define DB_PHYS_EQ(task1,addr1,task2,addr2)			\
	db_phys_eq(task1,addr1,task2,addr2)
#define DB_VALID_KERN_ADDR(addr)				\
	((addr) >= VM_MIN_KERNEL_ADDRESS && 			\
	 (addr) < VM_MAX_KERNEL_ADDRESS)
#define DB_VALID_ADDRESS(addr,user)				\
	((!(user) && DB_VALID_KERN_ADDR(addr)) ||		\
	 ((user) && (addr) < VM_MIN_KERNEL_ADDRESS))

boolean_t 	db_check_access(/* vm_offset_t, int, task_t */);
boolean_t	db_phys_eq(/* task_t, vm_offset_t, task_t, vm_offset_t */);

/* macros for printing OS server dependent task name */

#define DB_TASK_NAME(task)	db_task_name(task)
#define DB_TASK_NAME_TITLE	"COMMAND                "
#define DB_TASK_NAME_LEN	23
#define DB_NULL_TASK_NAME	"?                      "

void		db_task_name(/* task_t */);

/* macro for checking if a thread has used floating point */

#define db_thread_fp_used(thread)	((thread)->pcb->fps && (thread)->pcb->fps->valid)

#endif