Print this page
9210 remove KMDB branch debugging support
9211 ::crregs could do with cr2/cr3 support
9209 ::ttrace should be able to filter by thread
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/cmd/mdb/common/kmdb/kvm.h
+++ new/usr/src/cmd/mdb/common/kmdb/kvm.h
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
11 11 * and limitations under the License.
12 12 *
13 13 * When distributing Covered Code, include this CDDL HEADER in each
↓ open down ↓ |
13 lines elided |
↑ open up ↑ |
14 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 15 * If applicable, add the following below this CDDL HEADER, with the
16 16 * fields enclosed by brackets "[]" replaced with your own identifying
17 17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 18 *
19 19 * CDDL HEADER END
20 20 */
21 21 /*
22 22 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
23 23 * Use is subject to license terms.
24 + *
25 + * Copyright 2018 Joyent, Inc.
24 26 */
25 27
26 28 #ifndef _KVM_H
27 29 #define _KVM_H
28 30
29 -#pragma ident "%Z%%M% %I% %E% SMI"
30 -
31 31 /*
32 32 * The kmdb target
33 33 */
34 34
35 35 #include <mdb/mdb_modapi.h>
36 36 #include <mdb/mdb_target.h>
37 37 #include <kmdb/kmdb_dpi.h>
38 38 #include <kmdb/kvm_isadep.h>
39 -#include <kmdb/kvm_cpu.h>
40 39
41 40 #include <sys/kobj.h>
42 41
43 42 #ifdef __cplusplus
44 43 extern "C" {
45 44 #endif
46 45
47 46 #define KM_F_PRIMARY 1
48 47
49 48 #define KMT_TRAP_NOTENUM -1 /* Glob for unnamed traps */
50 49 #define KMT_TRAP_ALL -2 /* Glob for all traps */
51 50
52 51 typedef struct kmt_module {
53 52 mdb_list_t km_list; /* List forward/back pointers */
54 53 char *km_name; /* Module name */
55 54 char km_seen;
56 55 GElf_Ehdr km_ehdr;
57 56
58 57 mdb_gelf_symtab_t *km_symtab;
59 58 Shdr km_symtab_hdr;
60 59 Shdr km_strtab_hdr;
61 60 const void *km_symtab_va;
62 61 const void *km_strtab_va;
63 62
64 63 uintptr_t km_text_va;
65 64 size_t km_text_size;
66 65 uintptr_t km_data_va;
67 66 size_t km_data_size;
68 67 uintptr_t km_bss_va;
69 68 size_t km_bss_size;
70 69 const void *km_ctf_va;
71 70 size_t km_ctf_size;
72 71
73 72 ctf_file_t *km_ctfp;
74 73 struct modctl km_modctl;
75 74 struct module km_module;
76 75 int km_flags;
77 76 } kmt_module_t;
78 77
↓ open down ↓ |
29 lines elided |
↑ open up ↑ |
79 78 typedef struct kmt_data {
80 79 const mdb_tgt_regdesc_t *kmt_rds; /* Register description table */
81 80 mdb_nv_t kmt_modules; /* Hash table of modules */
82 81 mdb_list_t kmt_modlist; /* List of mods in load order */
83 82 const char *kmt_rtld_name; /* Module containing krtld */
84 83 caddr_t kmt_writemap; /* Used to map PAs for writes */
85 84 size_t kmt_writemapsz; /* Size of same */
86 85 mdb_map_t kmt_map; /* Persistant map for callers */
87 86 ulong_t *kmt_trapmap;
88 87 size_t kmt_trapmax;
89 - kmt_cpu_t *kmt_cpu; /* CPU-specific plugin */
90 - int kmt_cpu_retry; /* Try CPU detect again? */
91 88 int kmt_symavail; /* Symbol resolution allowed */
92 89 uint_t kmt_narmedbpts; /* Number of armed brkpts */
93 90 #if defined(__i386) || defined(__amd64)
94 91 struct {
95 92 GElf_Sym _kmt_cmnint;
96 93 GElf_Sym _kmt_cmntrap;
97 94 GElf_Sym _kmt_sysenter;
98 95 GElf_Sym _kmt_brand_sysenter;
99 96 #if defined(__amd64)
100 97 GElf_Sym _kmt_syscall;
101 98 GElf_Sym _kmt_brand_syscall;
102 99 #endif
103 100 } kmt_intrsyms;
104 101 #endif
105 102 } kmt_data_t;
106 103
107 104 #if defined(__i386) || defined(__amd64)
108 105 #define kmt_cmnint kmt_intrsyms._kmt_cmnint
109 106 #define kmt_cmntrap kmt_intrsyms._kmt_cmntrap
110 107 #endif
111 108
112 109 typedef struct kmt_defbp {
113 110 mdb_list_t dbp_bplist;
114 111 char *dbp_objname;
115 112 char *dbp_symname;
116 113 int dbp_ref;
117 114 } kmt_defbp_t;
118 115
119 116 typedef struct kmt_brkpt {
120 117 uintptr_t kb_addr; /* Breakpoint address */
121 118 mdb_instr_t kb_oinstr; /* Replaced instruction */
122 119 } kmt_brkpt_t;
123 120
124 121 typedef struct kmt_bparg {
125 122 uintptr_t ka_addr; /* Explicit address */
126 123 char *ka_symbol; /* Symbolic name */
127 124 kmt_defbp_t *ka_defbp;
128 125 } kmt_bparg_t;
129 126
130 127 extern void kmt_printregs(const mdb_tgt_gregset_t *gregs);
131 128
132 129 extern const char *kmt_def_dismode(void);
133 130
134 131 extern void kmt_init_isadep(mdb_tgt_t *);
135 132 extern void kmt_startup_isadep(mdb_tgt_t *);
↓ open down ↓ |
35 lines elided |
↑ open up ↑ |
136 133
137 134 extern ssize_t kmt_write(mdb_tgt_t *, const void *, size_t, uintptr_t);
138 135 extern ssize_t kmt_pwrite(mdb_tgt_t *, const void *, size_t, physaddr_t);
139 136 extern ssize_t kmt_rw(mdb_tgt_t *, void *, size_t, uint64_t,
140 137 ssize_t (*)(void *, size_t, uint64_t));
141 138 extern ssize_t kmt_writer(void *, size_t, uint64_t);
142 139 extern ssize_t kmt_ioread(mdb_tgt_t *, void *, size_t, uintptr_t);
143 140 extern ssize_t kmt_iowrite(mdb_tgt_t *, const void *, size_t, uintptr_t);
144 141
145 142 extern int kmt_step_out(mdb_tgt_t *, uintptr_t *);
146 -extern int kmt_step_branch(mdb_tgt_t *);
147 143 extern int kmt_next(mdb_tgt_t *, uintptr_t *);
148 144
149 145 extern int kmt_stack(uintptr_t, uint_t, int, const mdb_arg_t *);
150 146 extern int kmt_stackv(uintptr_t, uint_t, int, const mdb_arg_t *);
151 147 extern int kmt_stackr(uintptr_t, uint_t, int, const mdb_arg_t *);
152 148 extern int kmt_cpustack(uintptr_t, uint_t, int, const mdb_arg_t *, int, int);
153 149
154 150 extern const char *kmt_trapname(int);
155 151
156 152 #ifdef __cplusplus
157 153 }
158 154 #endif
159 155
160 156 #endif /* _KVM_H */
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX