Rev 2921 | Rev 3431 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2921 | Rev 3424 | ||
---|---|---|---|
Line 105... | Line 105... | ||
105 | int cmd_print_breakpoints(cmd_arg_t *argv __attribute__((unused))) |
105 | int cmd_print_breakpoints(cmd_arg_t *argv __attribute__((unused))) |
106 | { |
106 | { |
107 | unsigned int i; |
107 | unsigned int i; |
108 | char *symbol; |
108 | char *symbol; |
109 | 109 | ||
110 | if (sizeof(void *) == 4) { |
110 | #ifdef __32_BITS__ |
111 | printf("# Count Address In symbol\n"); |
111 | printf("# Count Address In symbol\n"); |
112 | printf("-- ----- ---------- ---------\n"); |
112 | printf("-- ----- ---------- ---------\n"); |
113 | } else { |
113 | #endif |
- | 114 | ||
- | 115 | #ifdef __64_BITS__ |
|
114 | printf("# Count Address In symbol\n"); |
116 | printf("# Count Address In symbol\n"); |
115 | printf("-- ----- ------------------ ---------\n"); |
117 | printf("-- ----- ------------------ ---------\n"); |
116 | } |
118 | #endif |
117 | 119 | ||
118 | for (i = 0; i < BKPOINTS_MAX; i++) |
120 | for (i = 0; i < BKPOINTS_MAX; i++) |
119 | if (breakpoints[i].address) { |
121 | if (breakpoints[i].address) { |
120 | symbol = get_symtab_entry(breakpoints[i].address); |
122 | symbol = get_symtab_entry(breakpoints[i].address); |
121 | 123 | ||
122 | if (sizeof(void *) == 4) |
124 | #ifdef __32_BITS__ |
123 | printf("%-2u %-5d %#10zx %s\n", i, breakpoints[i].counter, |
125 | printf("%-2u %-5d %#10zx %s\n", i, |
124 | breakpoints[i].address, symbol); |
126 | breakpoints[i].counter, breakpoints[i].address, |
- | 127 | symbol); |
|
125 | else |
128 | #endif |
- | 129 | ||
- | 130 | #ifdef __64_BITS__ |
|
126 | printf("%-2u %-5d %#18zx %s\n", i, breakpoints[i].counter, |
131 | printf("%-2u %-5d %#18zx %s\n", i, |
127 | breakpoints[i].address, symbol); |
132 | breakpoints[i].counter, breakpoints[i].address, |
- | 133 | symbol); |
|
- | 134 | #endif |
|
- | 135 | ||
128 | } |
136 | } |
129 | return 1; |
137 | return 1; |
130 | } |
138 | } |
131 | 139 | ||
132 | /* Setup DR register according to table */ |
140 | /* Setup DR register according to table */ |
Line 160... | Line 168... | ||
160 | dr7 &= ~ (0x3 << (16 + 4*curidx)); |
168 | dr7 &= ~ (0x3 << (16 + 4*curidx)); |
161 | dr7 &= ~ (0x3 << (18 + 4*curidx)); |
169 | dr7 &= ~ (0x3 << (18 + 4*curidx)); |
162 | if ((flags & BKPOINT_INSTR)) { |
170 | if ((flags & BKPOINT_INSTR)) { |
163 | ; |
171 | ; |
164 | } else { |
172 | } else { |
- | 173 | ||
165 | if (sizeof(int) == 4) |
174 | #ifdef __32_BITS__ |
166 | dr7 |= ((unative_t) 0x3) << (18 + 4*curidx); |
175 | dr7 |= ((unative_t) 0x3) << (18 + 4 * curidx); |
- | 176 | #endif |
|
- | 177 | ||
167 | else /* 8 */ |
178 | #ifdef __64_BITS__ |
168 | dr7 |= ((unative_t) 0x2) << (18 + 4*curidx); |
179 | dr7 |= ((unative_t) 0x2) << (18 + 4 * curidx); |
- | 180 | #endif |
|
169 | 181 | ||
170 | if ((flags & BKPOINT_WRITE)) |
182 | if ((flags & BKPOINT_WRITE)) |
171 | dr7 |= ((unative_t) 0x1) << (16 + 4*curidx); |
183 | dr7 |= ((unative_t) 0x1) << (16 + 4 * curidx); |
172 | else if ((flags & BKPOINT_READ_WRITE)) |
184 | else if ((flags & BKPOINT_READ_WRITE)) |
173 | dr7 |= ((unative_t) 0x3) << (16 + 4*curidx); |
185 | dr7 |= ((unative_t) 0x3) << (16 + 4 * curidx); |
Line 244... | Line 256... | ||
244 | /* Handle zero checker */ |
256 | /* Handle zero checker */ |
245 | if (! (breakpoints[slot].flags & BKPOINT_INSTR)) { |
257 | if (! (breakpoints[slot].flags & BKPOINT_INSTR)) { |
246 | if ((breakpoints[slot].flags & BKPOINT_CHECK_ZERO)) { |
258 | if ((breakpoints[slot].flags & BKPOINT_CHECK_ZERO)) { |
247 | if (*((unative_t *) breakpoints[slot].address) != 0) |
259 | if (*((unative_t *) breakpoints[slot].address) != 0) |
248 | return; |
260 | return; |
249 | printf("**** Found ZERO on address %lx (slot %d) ****\n", |
261 | printf("*** Found ZERO on address %lx (slot %d) ***\n", |
250 | breakpoints[slot].address, slot); |
262 | breakpoints[slot].address, slot); |
251 | } else { |
263 | } else { |
252 | printf("Data watchpoint - new data: %lx\n", |
264 | printf("Data watchpoint - new data: %lx\n", |
253 | *((unative_t *) breakpoints[slot].address)); |
265 | *((unative_t *) breakpoints[slot].address)); |
254 | } |
266 | } |
Line 357... | Line 369... | ||
357 | } |
369 | } |
358 | } |
370 | } |
359 | } |
371 | } |
360 | 372 | ||
361 | #ifdef CONFIG_SMP |
373 | #ifdef CONFIG_SMP |
- | 374 | static void |
|
- | 375 | debug_ipi(int n __attribute__((unused)), |
|
362 | static void debug_ipi(int n __attribute__((unused)), istate_t *istate __attribute__((unused))) |
376 | istate_t *istate __attribute__((unused))) |
363 | { |
377 | { |
364 | int i; |
378 | int i; |
365 | 379 | ||
366 | spinlock_lock(&bkpoint_lock); |
380 | spinlock_lock(&bkpoint_lock); |
367 | for (i = 0; i < BKPOINTS_MAX; i++) |
381 | for (i = 0; i < BKPOINTS_MAX; i++) |
Line 394... | Line 408... | ||
394 | cmd_initialize(&addwatchp_info); |
408 | cmd_initialize(&addwatchp_info); |
395 | if (!cmd_register(&addwatchp_info)) |
409 | if (!cmd_register(&addwatchp_info)) |
396 | panic("could not register command %s\n", addwatchp_info.name); |
410 | panic("could not register command %s\n", addwatchp_info.name); |
397 | #endif |
411 | #endif |
398 | 412 | ||
399 | exc_register(VECTOR_DEBUG, "debugger", |
413 | exc_register(VECTOR_DEBUG, "debugger", debug_exception); |
400 | debug_exception); |
- | |
401 | #ifdef CONFIG_SMP |
414 | #ifdef CONFIG_SMP |
402 | exc_register(VECTOR_DEBUG_IPI, "debugger_smp", |
415 | exc_register(VECTOR_DEBUG_IPI, "debugger_smp", debug_ipi); |
403 | debug_ipi); |
- | |
404 | #endif |
416 | #endif |
405 | } |
417 | } |
406 | 418 | ||
407 | /** @} |
419 | /** @} |
408 | */ |
420 | */ |