db_machdep.h 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /* $OpenBSD: db_machdep.h,v 1.16 2014/03/16 20:31:46 guenther Exp $ */
  2. /* $NetBSD: db_machdep.h,v 1.10 1997/08/31 21:23:40 pk Exp $ */
  3. /*
  4. * Mach Operating System
  5. * Copyright (c) 1991,1990 Carnegie Mellon University
  6. * All Rights Reserved.
  7. *
  8. * Permission to use, copy, modify and distribute this software and its
  9. * documentation is hereby granted, provided that both the copyright
  10. * notice and this permission notice appear in all copies of the
  11. * software, derivative works or modified versions, and any portions
  12. * thereof, and that both notices appear in supporting documentation.
  13. *
  14. * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
  15. * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
  16. * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
  17. *
  18. * Carnegie Mellon requests users of this software to return to
  19. *
  20. * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
  21. * School of Computer Science
  22. * Carnegie Mellon University
  23. * Pittsburgh PA 15213-3890
  24. *
  25. * any improvements or extensions that they make and grant Carnegie Mellon
  26. * the rights to redistribute these changes.
  27. */
  28. #ifndef _MACHINE_DB_MACHDEP_H_
  29. #define _MACHINE_DB_MACHDEP_H_
  30. /*
  31. * Machine-dependent defines for new kernel debugger.
  32. */
  33. #include <uvm/uvm_extern.h>
  34. #include <machine/frame.h>
  35. #include <machine/psl.h>
  36. #include <machine/trap.h>
  37. #include <machine/reg.h>
  38. /* end of mangling */
  39. typedef vaddr_t db_addr_t; /* address - unsigned */
  40. typedef long db_expr_t; /* expression - signed */
  41. typedef struct {
  42. struct trapframe db_tf;
  43. struct frame db_fr;
  44. } db_regs_t;
  45. extern db_regs_t ddb_regs; /* register state */
  46. #define DDB_REGS (&ddb_regs)
  47. #define DDB_TF (&ddb_regs.db_tf)
  48. #define DDB_FR (&ddb_regs.db_fr)
  49. #define PC_REGS(regs) ((db_addr_t)(regs)->db_tf.tf_pc)
  50. #define SET_PC_REGS(regs, value) (regs)->db_tf.tf_pc = (int)(value)
  51. #define PC_ADVANCE(regs) do { \
  52. int n = (regs)->db_tf.tf_npc; \
  53. (regs)->db_tf.tf_pc = n; \
  54. (regs)->db_tf.tf_npc = n + 4; \
  55. } while(0)
  56. #define BKPT_INST 0x91d02001 /* breakpoint instruction */
  57. #define BKPT_SIZE (4) /* size of breakpoint inst */
  58. #define BKPT_SET(inst) (BKPT_INST)
  59. #define db_clear_single_step(regs) (void) (0)
  60. #define db_set_single_step(regs) (void) (0)
  61. #define IS_BREAKPOINT_TRAP(type, code) \
  62. ((type) == T_BREAKPOINT || (type) == T_KGDB_EXEC)
  63. #define IS_WATCHPOINT_TRAP(type, code) (0)
  64. #define inst_trap_return(ins) ((ins)&0)
  65. #define inst_return(ins) ((ins)&0)
  66. #define inst_call(ins) ((ins)&0)
  67. #define DB_MACHINE_COMMANDS
  68. void db_machine_init(void);
  69. int kdb_trap(int, struct trapframe *);
  70. /*
  71. * KGDB definitions
  72. */
  73. typedef u_long kgdb_reg_t;
  74. #define KGDB_NUMREGS 72
  75. #define KGDB_BUFLEN 1024
  76. #define KGDB_PREPARE fb_unblank()
  77. #define KGDB_ENTER __asm("ta %0" :: "n" (T_KGDB_EXEC))
  78. #endif /* _MACHINE_DB_MACHDEP_H_ */