|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* ! 23: * @OSF_COPYRIGHT@ ! 24: */ ! 25: /* ! 26: * Mach Operating System ! 27: * Copyright (c) 1991,1990 Carnegie Mellon University ! 28: * All Rights Reserved. ! 29: * ! 30: * Permission to use, copy, modify and distribute this software and its ! 31: * documentation is hereby granted, provided that both the copyright ! 32: * notice and this permission notice appear in all copies of the ! 33: * software, derivative works or modified versions, and any portions ! 34: * thereof, and that both notices appear in supporting documentation. ! 35: * ! 36: * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" ! 37: * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR ! 38: * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. ! 39: * ! 40: * Carnegie Mellon requests users of this software to return to ! 41: * ! 42: * Software Distribution Coordinator or [email protected] ! 43: * School of Computer Science ! 44: * Carnegie Mellon University ! 45: * Pittsburgh PA 15213-3890 ! 46: * ! 47: * any improvements or extensions that they make and grant Carnegie Mellon ! 48: * the rights to redistribute these changes. ! 49: */ ! 50: /* ! 51: */ ! 52: ! 53: #ifndef _PPC_DB_MACHDEP_H_ ! 54: #define _PPC_DB_MACHDEP_H_ ! 55: ! 56: /* ! 57: * Machine-dependent defines for new kernel debugger. ! 58: */ ! 59: ! 60: #include <kern/kern_types.h> ! 61: #include <mach/ppc/vm_types.h> ! 62: #include <mach/ppc/vm_param.h> ! 63: #include <ppc/thread.h> /* for thread_status */ ! 64: #include <ppc/trap.h> ! 65: #include <ppc/proc_reg.h> ! 66: ! 67: typedef vm_offset_t db_addr_t; /* address - unsigned */ ! 68: typedef int db_expr_t; /* expression - signed */ ! 69: ! 70: typedef struct ppc_saved_state db_regs_t; ! 71: db_regs_t ddb_regs; /* register state */ ! 72: #define DDB_REGS (&ddb_regs) ! 73: extern int db_active; /* ddb is active */ ! 74: ! 75: #define PC_REGS(regs) ((db_addr_t)(regs)->srr0) ! 76: ! 77: #define BKPT_INST 0x7c810808 /* breakpoint instruction */ ! 78: #define BKPT_SIZE (4) /* size of breakpoint inst */ ! 79: #define BKPT_SET(inst) (BKPT_INST) ! 80: ! 81: #define db_clear_single_step(regs) ((regs)->srr1 &= ~MASK(MSR_SE)) ! 82: #define db_set_single_step(regs) ((regs)->srr1 |= MASK(MSR_SE)) ! 83: ! 84: #define IS_BREAKPOINT_TRAP(type, code) (FALSE) ! 85: #define IS_WATCHPOINT_TRAP(type, code) (FALSE) ! 86: ! 87: #define inst_trap_return(ins) (FALSE) ! 88: #define inst_return(ins) (FALSE) ! 89: #define inst_call(ins) (FALSE) ! 90: ! 91: int db_inst_load(unsigned long); ! 92: int db_inst_store(unsigned long); ! 93: ! 94: /* access capability and access macros */ ! 95: ! 96: #define DB_ACCESS_LEVEL DB_ACCESS_ANY /* any space */ ! 97: #define DB_CHECK_ACCESS(addr,size,task) \ ! 98: db_check_access(addr,size,task) ! 99: #define DB_PHYS_EQ(task1,addr1,task2,addr2) \ ! 100: db_phys_eq(task1,addr1,task2,addr2) ! 101: #define DB_VALID_KERN_ADDR(addr) \ ! 102: ((addr) >= VM_MIN_KERNEL_ADDRESS && \ ! 103: (addr) < VM_MAX_KERNEL_ADDRESS) ! 104: #define DB_VALID_ADDRESS(addr,user) \ ! 105: ((!(user) && DB_VALID_KERN_ADDR(addr)) || \ ! 106: ((user) && (addr) < VM_MAX_ADDRESS)) ! 107: ! 108: /* ! 109: * Given pointer to ppc_saved_state, determine if it represents ! 110: * a thread executing a) in user space, b) in the kernel, or c) ! 111: * in a kernel-loaded task. Return true for cases a) and c). ! 112: */ ! 113: #define IS_USER_TRAP(regs) \ ! 114: (USER_MODE(regs->srr1)) ! 115: ! 116: extern boolean_t db_check_access( ! 117: vm_offset_t addr, ! 118: int size, ! 119: task_t task); ! 120: extern boolean_t db_phys_eq( ! 121: task_t task1, ! 122: vm_offset_t addr1, ! 123: task_t task2, ! 124: vm_offset_t addr2); ! 125: extern db_addr_t db_disasm( ! 126: db_addr_t loc, ! 127: boolean_t altfmt, ! 128: task_t task); ! 129: extern vm_offset_t db_kvtophys( ! 130: space_t space, ! 131: vm_offset_t va); ! 132: ! 133: extern void db_read_bytes( ! 134: vm_offset_t addr, ! 135: int size, ! 136: char *data, ! 137: task_t task); ! 138: extern void db_write_bytes( ! 139: vm_offset_t addr, ! 140: int size, ! 141: char *data, ! 142: task_t task); ! 143: extern void db_stack_trace_cmd( ! 144: db_expr_t addr, ! 145: boolean_t have_addr, ! 146: db_expr_t count, ! 147: char *modif); ! 148: extern void db_reboot( ! 149: db_expr_t addr, ! 150: boolean_t have_addr, ! 151: db_expr_t count, ! 152: char *modif); ! 153: extern void db_low_trace( ! 154: db_expr_t addr, ! 155: int have_addr, ! 156: db_expr_t count, ! 157: char *modif); ! 158: extern void db_to_gdb( ! 159: void); ! 160: ! 161: ! 162: /* macros for printing OS server dependent task name */ ! 163: ! 164: #define DB_TASK_NAME(task) db_task_name(task) ! 165: #define DB_TASK_NAME_TITLE "COMMAND " ! 166: #define DB_TASK_NAME_LEN 39 ! 167: #define DB_NULL_TASK_NAME "? " ! 168: ! 169: extern void db_task_name( ! 170: task_t task); ! 171: ! 172: /* macro for checking if a thread has used floating-point */ ! 173: ! 174: #define db_act_fp_used(act) (FALSE) ! 175: ! 176: extern void kdb_trap( ! 177: int type, ! 178: struct ppc_saved_state *regs); ! 179: extern boolean_t db_trap_from_asm( ! 180: struct ppc_saved_state *regs); ! 181: extern void kdb_on( ! 182: int cpu); ! 183: extern void cnpollc( ! 184: boolean_t on); ! 185: ! 186: extern void kdb_kintr(void); ! 187: ! 188: extern void db_phys_copy( ! 189: vm_offset_t, ! 190: vm_offset_t, ! 191: vm_size_t); ! 192: ! 193: extern boolean_t db_phys_cmp( ! 194: vm_offset_t, ! 195: vm_offset_t, ! 196: vm_size_t); ! 197: ! 198: #endif /* _PPC_DB_MACHDEP_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.