root/arch/i386/include/db_machdep.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    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_ */

/* [<][>][^][v][top][bottom][index][help] */