Annotation of sys/arch/i386/include/db_machdep.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: db_machdep.h,v 1.17 2006/11/29 22:40:13 miod Exp $ */
! 2: /* $NetBSD: db_machdep.h,v 1.9 1996/05/03 19:23:59 christos Exp $ */
! 3:
! 4: /*
! 5: * Mach Operating System
! 6: * Copyright (c) 1991,1990 Carnegie Mellon University
! 7: * All Rights Reserved.
! 8: *
! 9: * Permission to use, copy, modify and distribute this software and its
! 10: * documentation is hereby granted, provided that both the copyright
! 11: * notice and this permission notice appear in all copies of the
! 12: * software, derivative works or modified versions, and any portions
! 13: * thereof, and that both notices appear in supporting documentation.
! 14: *
! 15: * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
! 16: * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
! 17: * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
! 18: *
! 19: * Carnegie Mellon requests users of this software to return to
! 20: *
! 21: * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
! 22: * School of Computer Science
! 23: * Carnegie Mellon University
! 24: * Pittsburgh PA 15213-3890
! 25: *
! 26: * any improvements or extensions that they make and grant Carnegie Mellon
! 27: * the rights to redistribute these changes.
! 28: */
! 29:
! 30: #ifndef _I386_DB_MACHDEP_H_
! 31: #define _I386_DB_MACHDEP_H_
! 32:
! 33: /*
! 34: * Machine-dependent defines for new kernel debugger.
! 35: */
! 36:
! 37: #include <sys/param.h>
! 38: #include <uvm/uvm_extern.h>
! 39: #include <machine/trap.h>
! 40:
! 41: typedef vaddr_t db_addr_t; /* address - unsigned */
! 42: typedef long db_expr_t; /* expression - signed */
! 43:
! 44: typedef struct trapframe db_regs_t;
! 45: extern db_regs_t ddb_regs; /* register state */
! 46: #define DDB_REGS (&ddb_regs)
! 47:
! 48: #define PC_REGS(regs) ((db_addr_t)(regs)->tf_eip)
! 49: #define SET_PC_REGS(regs, value) (regs)->tf_eip = (int)(value)
! 50:
! 51: #define BKPT_INST 0xcc /* breakpoint instruction */
! 52: #define BKPT_SIZE (1) /* size of breakpoint inst */
! 53: #define BKPT_SET(inst) (BKPT_INST)
! 54:
! 55: #define FIXUP_PC_AFTER_BREAK(regs) ((regs)->tf_eip -= BKPT_SIZE)
! 56:
! 57: #define db_clear_single_step(regs) ((regs)->tf_eflags &= ~PSL_T)
! 58: #define db_set_single_step(regs) ((regs)->tf_eflags |= PSL_T)
! 59:
! 60: #define IS_BREAKPOINT_TRAP(type, code) ((type) == T_BPTFLT)
! 61: #define IS_WATCHPOINT_TRAP(type, code) ((type) == T_TRCTRAP && (code) & 15)
! 62:
! 63: #define I_CALL 0xe8
! 64: #define I_CALLI 0xff
! 65: #define I_RET 0xc3
! 66: #define I_IRET 0xcf
! 67:
! 68: #define inst_trap_return(ins) (((ins)&0xff) == I_IRET)
! 69: #define inst_return(ins) (((ins)&0xff) == I_RET)
! 70: #define inst_call(ins) (((ins)&0xff) == I_CALL || \
! 71: (((ins)&0xff) == I_CALLI && \
! 72: ((ins)&0x3800) == 0x1000))
! 73: #define inst_load(ins) 0
! 74: #define inst_store(ins) 0
! 75:
! 76: #define DB_MACHINE_COMMANDS
! 77:
! 78: /* macros for printing OS server dependent task name */
! 79:
! 80: #define DB_TASK_NAME(task) db_task_name(task)
! 81: #define DB_TASK_NAME_TITLE "COMMAND "
! 82: #define DB_TASK_NAME_LEN 23
! 83: #define DB_NULL_TASK_NAME "? "
! 84: #define DB_ELF_SYMBOLS
! 85: #define DB_ELFSIZE 32
! 86:
! 87: /*
! 88: * Constants for KGDB.
! 89: */
! 90: typedef long kgdb_reg_t;
! 91: #define KGDB_NUMREGS 16
! 92: #define KGDB_BUFLEN 512
! 93:
! 94: #define KGDB_ENTER breakpoint()
! 95:
! 96: #if 0
! 97: void db_task_name(/* task_t */);
! 98: #endif
! 99:
! 100: /* macro for checking if a thread has used floating-point */
! 101:
! 102: #define db_thread_fp_used(thread) ((thread)->pcb->ims.ifps != 0)
! 103:
! 104: int kdb_trap(int, int, db_regs_t *);
! 105:
! 106: void db_machine_init(void);
! 107: int db_enter_ddb(void);
! 108: void db_startcpu(int cpu);
! 109: void db_stopcpu(int cpu);
! 110: void i386_ipi_db(struct cpu_info *);
! 111:
! 112: extern struct mutex ddb_mp_mutex;
! 113:
! 114: /* For ddb_state */
! 115: #define DDB_STATE_NOT_RUNNING 0
! 116: #define DDB_STATE_RUNNING 1
! 117: #define DDB_STATE_EXITING 2
! 118:
! 119: #endif /* _I386_DB_MACHDEP_H_ */
CVSweb