Annotation of sys/arch/alpha/include/db_machdep.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: db_machdep.h,v 1.19 2005/12/17 07:31:23 miod Exp $ */
! 2:
! 3: /*
! 4: * Copyright (c) 1997 Niklas Hallqvist. All rights reserved.
! 5: *
! 6: * Redistribution and use in source and binary forms, with or without
! 7: * modification, are permitted provided that the following conditions
! 8: * are met:
! 9: * 1. Redistributions of source code must retain the above copyright
! 10: * notice, this list of conditions and the following disclaimer.
! 11: * 2. Redistributions in binary form must reproduce the above copyright
! 12: * notice, this list of conditions and the following disclaimer in the
! 13: * documentation and/or other materials provided with the distribution.
! 14: *
! 15: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
! 16: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
! 17: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
! 18: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
! 19: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
! 20: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
! 21: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
! 22: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
! 23: * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
! 24: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
! 25: */
! 26:
! 27: #ifndef _ALPHA_DB_MACHDEP_H_
! 28: #define _ALPHA_DB_MACHDEP_H_
! 29:
! 30: /* XXX - Need to include vm.h for boolean_t */
! 31: #include <uvm/uvm_extern.h>
! 32:
! 33: /*
! 34: * We use Elf64 symbols in DDB.
! 35: */
! 36: #define DB_ELF_SYMBOLS
! 37: #define DB_ELFSIZE 64
! 38:
! 39: struct opcode {
! 40: enum opc_fmt { OPC_PAL, OPC_RES, OPC_MEM, OPC_OP, OPC_BR } opc_fmt;
! 41: char *opc_name;
! 42: int opc_print;
! 43: };
! 44: extern struct opcode opcode[];
! 45:
! 46: /* types the generic ddb module needs */
! 47: typedef vaddr_t db_addr_t;
! 48: typedef long db_expr_t;
! 49: typedef struct trapframe db_regs_t;
! 50:
! 51: extern db_regs_t ddb_regs;
! 52: #define DDB_REGS (&ddb_regs)
! 53:
! 54: #define PC_REGS(regs) ((db_addr_t)(regs)->tf_regs[FRAME_PC])
! 55: #define SET_PC_REGS(regs, value) (regs)->tf_regs[FRAME_PC] = (unsigned long)(value)
! 56:
! 57: /* Breakpoint related definitions */
! 58: #define BKPT_INST 0x00000080 /* call_pal bpt */
! 59: #define BKPT_SIZE sizeof(int)
! 60: #define BKPT_SET(inst) BKPT_INST
! 61:
! 62: #define IS_BREAKPOINT_TRAP(type, code) \
! 63: ((type) == ALPHA_KENTRY_IF && (code) == ALPHA_IF_CODE_BPT)
! 64: #ifdef notyet
! 65: #define IS_WATCHPOINT_TRAP(type, code) ((type) == ALPHA_KENTRY_MM)
! 66: #else
! 67: #define IS_WATCHPOINT_TRAP(type, code) 0
! 68: #endif
! 69:
! 70: #define FIXUP_PC_AFTER_BREAK(regs) ((regs)->tf_regs[FRAME_PC] -= sizeof(int))
! 71:
! 72: #define SOFTWARE_SSTEP
! 73: #define DB_VALID_BREAKPOINT(addr) db_valid_breakpoint(addr)
! 74:
! 75: /* Hack to skip GCC "unused" warnings. */
! 76: #define inst_trap_return(ins) ((ins) & 0) /* XXX */
! 77: #define inst_return(ins) (((ins) & 0xfc000000) == 0x68000000)
! 78:
! 79: int alpha_debug(unsigned long, unsigned long, unsigned long,
! 80: unsigned long, struct trapframe *);
! 81: db_addr_t db_branch_taken(int, db_addr_t, db_regs_t *);
! 82: boolean_t db_inst_branch(int);
! 83: boolean_t db_inst_call(int);
! 84: boolean_t db_inst_load(int);
! 85: boolean_t db_inst_return(int);
! 86: boolean_t db_inst_store(int);
! 87: boolean_t db_inst_trap_return(int);
! 88: boolean_t db_inst_unconditional_flow_transfer(int);
! 89: u_long db_register_value(db_regs_t *, int);
! 90: int db_valid_breakpoint(db_addr_t);
! 91: int ddb_trap(unsigned long, unsigned long, unsigned long,
! 92: unsigned long, struct trapframe *);
! 93: int kdb_trap(int, int, db_regs_t *);
! 94: db_addr_t next_instr_address(db_addr_t, int);
! 95:
! 96: #if 1
! 97: /* Backwards compatibility until we switch all archs to use the db_ prefix */
! 98: #define branch_taken(ins, pc, fun, regs) db_branch_taken((ins), (pc), (regs))
! 99: #define inst_branch db_inst_branch
! 100: #define inst_call db_inst_call
! 101: #define inst_load db_inst_load
! 102: #define inst_store db_inst_store
! 103: #endif
! 104:
! 105: #endif /* _ALPHA_DB_MACHDEP_H_ */
CVSweb