Annotation of sys/arch/amd64/include/db_machdep.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: db_machdep.h,v 1.6 2006/03/15 15:50:41 mickey Exp $ */
! 2: /* $NetBSD: db_machdep.h,v 1.2 2003/04/29 17:06:04 scw 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: #include <sys/mutex.h>
! 41:
! 42: typedef vaddr_t db_addr_t; /* address - unsigned */
! 43: typedef long db_expr_t; /* expression - signed */
! 44:
! 45: typedef struct trapframe db_regs_t;
! 46:
! 47: extern db_regs_t ddb_regs; /* register state */
! 48: #define DDB_REGS (&ddb_regs)
! 49:
! 50: #define PC_REGS(regs) ((db_addr_t)(regs)->tf_rip)
! 51: #define SET_PC_REGS(regs, value) (regs)->tf_rip = (int64_t)(value)
! 52:
! 53: #define BKPT_ADDR(addr) (addr) /* breakpoint address */
! 54: #define BKPT_INST 0xcc /* breakpoint instruction */
! 55: #define BKPT_SIZE (1) /* size of breakpoint inst */
! 56: #define BKPT_SET(inst) (BKPT_INST)
! 57:
! 58: #define FIXUP_PC_AFTER_BREAK(regs) ((regs)->tf_rip -= BKPT_SIZE)
! 59:
! 60: #define db_clear_single_step(regs) ((regs)->tf_rflags &= ~PSL_T)
! 61: #define db_set_single_step(regs) ((regs)->tf_rflags |= PSL_T)
! 62:
! 63: #define IS_BREAKPOINT_TRAP(type, code) ((type) == T_BPTFLT)
! 64: #define IS_WATCHPOINT_TRAP(type, code) ((type) == T_TRCTRAP && (code) & 15)
! 65:
! 66: #define I_CALL 0xe8
! 67: #define I_CALLI 0xff
! 68: #define I_RET 0xc3
! 69: #define I_IRET 0xcf
! 70:
! 71: #define inst_trap_return(ins) (((ins)&0xff) == I_IRET)
! 72: #define inst_return(ins) (((ins)&0xff) == I_RET)
! 73: #define inst_call(ins) (((ins)&0xff) == I_CALL || \
! 74: (((ins)&0xff) == I_CALLI && \
! 75: ((ins)&0x3800) == 0x1000))
! 76: #define inst_load(ins) 0
! 77: #define inst_store(ins) 0
! 78:
! 79: /* macros for printing OS server dependent task name */
! 80:
! 81: #define DB_TASK_NAME(task) db_task_name(task)
! 82: #define DB_TASK_NAME_TITLE "COMMAND "
! 83: #define DB_TASK_NAME_LEN 23
! 84: #define DB_NULL_TASK_NAME "? "
! 85:
! 86: /*
! 87: * Constants for KGDB.
! 88: */
! 89: typedef long kgdb_reg_t;
! 90: #define KGDB_NUMREGS 20
! 91: #define KGDB_BUFLEN 512
! 92:
! 93: #define KGDB_ENTER breakpoint()
! 94:
! 95: #if 0
! 96: void db_task_name(/* task_t */);
! 97: #endif
! 98:
! 99: /* macro for checking if a thread has used floating-point */
! 100:
! 101: #define db_thread_fp_used(thread) ((thread)->pcb->ims.ifps != 0)
! 102:
! 103: int kdb_trap(int, int, db_regs_t *);
! 104:
! 105: void db_machine_init(void);
! 106: int db_enter_ddb(void);
! 107: void db_startcpu(int cpu);
! 108: void db_stopcpu(int cpu);
! 109: void x86_ipi_db(struct cpu_info *);
! 110:
! 111: extern struct mutex ddb_mp_mutex;
! 112:
! 113: #define DDB_STATE_NOT_RUNNING 0
! 114: #define DDB_STATE_RUNNING 1
! 115: #define DDB_STATE_EXITING 2
! 116:
! 117: /*
! 118: * We define some of our own commands
! 119: */
! 120: #define DB_MACHINE_COMMANDS
! 121:
! 122: #define DB_ELF_SYMBOLS
! 123: #define DB_ELFSIZE 64
! 124:
! 125: extern void db_machine_init(void);
! 126:
! 127: extern void cpu_debug_dump(void);
! 128:
! 129: #endif /* _I386_DB_MACHDEP_H_ */
CVSweb