Rev 3149 | Rev 4337 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3149 | Rev 3153 | ||
---|---|---|---|
Line 120... | Line 120... | ||
120 | for (i = 0; i < BKPOINTS_MAX; i++) |
120 | for (i = 0; i < BKPOINTS_MAX; i++) |
121 | if (breakpoints[i].address) { |
121 | if (breakpoints[i].address) { |
122 | symbol = get_symtab_entry(breakpoints[i].address); |
122 | symbol = get_symtab_entry(breakpoints[i].address); |
123 | 123 | ||
124 | #ifdef __32_BITS__ |
124 | #ifdef __32_BITS__ |
125 | printf("%-2u %-5d %#10zx %s\n", i, breakpoints[i].counter, |
125 | printf("%-2u %-5d %#10zx %s\n", i, |
126 | breakpoints[i].address, symbol); |
126 | breakpoints[i].counter, breakpoints[i].address, |
- | 127 | symbol); |
|
127 | #endif |
128 | #endif |
128 | 129 | ||
129 | #ifdef __64_BITS__ |
130 | #ifdef __64_BITS__ |
130 | printf("%-2u %-5d %#18zx %s\n", i, breakpoints[i].counter, |
131 | printf("%-2u %-5d %#18zx %s\n", i, |
131 | breakpoints[i].address, symbol); |
132 | breakpoints[i].counter, breakpoints[i].address, |
- | 133 | symbol); |
|
132 | #endif |
134 | #endif |
133 | 135 | ||
134 | } |
136 | } |
135 | return 1; |
137 | return 1; |
136 | } |
138 | } |
Line 182... | Line 184... | ||
182 | else if ((flags & BKPOINT_READ_WRITE)) |
184 | else if ((flags & BKPOINT_READ_WRITE)) |
183 | dr7 |= ((unative_t) 0x3) << (16 + 4 * curidx); |
185 | dr7 |= ((unative_t) 0x3) << (16 + 4 * curidx); |
184 | } |
186 | } |
185 | 187 | ||
186 | /* Enable global breakpoint */ |
188 | /* Enable global breakpoint */ |
187 | dr7 |= 0x2 << (curidx*2); |
189 | dr7 |= 0x2 << (curidx * 2); |
188 | 190 | ||
189 | write_dr7(dr7); |
191 | write_dr7(dr7); |
190 | 192 | ||
191 | } |
193 | } |
192 | } |
194 | } |
Line 254... | Line 256... | ||
254 | /* Handle zero checker */ |
256 | /* Handle zero checker */ |
255 | if (! (breakpoints[slot].flags & BKPOINT_INSTR)) { |
257 | if (! (breakpoints[slot].flags & BKPOINT_INSTR)) { |
256 | if ((breakpoints[slot].flags & BKPOINT_CHECK_ZERO)) { |
258 | if ((breakpoints[slot].flags & BKPOINT_CHECK_ZERO)) { |
257 | if (*((unative_t *) breakpoints[slot].address) != 0) |
259 | if (*((unative_t *) breakpoints[slot].address) != 0) |
258 | return; |
260 | return; |
259 | printf("**** Found ZERO on address %lx (slot %d) ****\n", |
261 | printf("*** Found ZERO on address %lx (slot %d) ***\n", |
260 | breakpoints[slot].address, slot); |
262 | breakpoints[slot].address, slot); |
261 | } else { |
263 | } else { |
262 | printf("Data watchpoint - new data: %lx\n", |
264 | printf("Data watchpoint - new data: %lx\n", |
263 | *((unative_t *) breakpoints[slot].address)); |
265 | *((unative_t *) breakpoints[slot].address)); |
264 | } |
266 | } |
265 | } |
267 | } |
266 | printf("Reached breakpoint %d:%lx(%s)\n", slot, getip(istate), |
268 | printf("Reached breakpoint %d:%lx(%s)\n", slot, getip(istate), |
267 | get_symtab_entry(getip(istate))); |
269 | get_symtab_entry(getip(istate))); |
268 | printf("***Type 'exit' to exit kconsole.\n"); |
270 | printf("***Type 'exit' to exit kconsole.\n"); |
269 | atomic_set(&haltstate,1); |
271 | atomic_set(&haltstate,1); |
270 | kconsole((void *) "debug"); |
272 | kconsole((void *) "debug"); |
271 | atomic_set(&haltstate,0); |
273 | atomic_set(&haltstate,0); |
272 | } |
274 | } |
Line 355... | Line 357... | ||
355 | } |
357 | } |
356 | } |
358 | } |
357 | } |
359 | } |
358 | 360 | ||
359 | #ifdef CONFIG_SMP |
361 | #ifdef CONFIG_SMP |
- | 362 | static void |
|
- | 363 | debug_ipi(int n __attribute__((unused)), |
|
360 | static void debug_ipi(int n __attribute__((unused)), istate_t *istate __attribute__((unused))) |
364 | istate_t *istate __attribute__((unused))) |
361 | { |
365 | { |
362 | int i; |
366 | int i; |
363 | 367 | ||
364 | spinlock_lock(&bkpoint_lock); |
368 | spinlock_lock(&bkpoint_lock); |
365 | for (i = 0; i < BKPOINTS_MAX; i++) |
369 | for (i = 0; i < BKPOINTS_MAX; i++) |
Line 371... | Line 375... | ||
371 | /** Initialize debugger */ |
375 | /** Initialize debugger */ |
372 | void debugger_init() |
376 | void debugger_init() |
373 | { |
377 | { |
374 | int i; |
378 | int i; |
375 | 379 | ||
376 | for (i=0; i<BKPOINTS_MAX; i++) |
380 | for (i = 0; i < BKPOINTS_MAX; i++) |
377 | breakpoints[i].address = NULL; |
381 | breakpoints[i].address = NULL; |
378 | 382 | ||
379 | cmd_initialize(&bkpts_info); |
383 | cmd_initialize(&bkpts_info); |
380 | if (!cmd_register(&bkpts_info)) |
384 | if (!cmd_register(&bkpts_info)) |
381 | panic("could not register command %s\n", bkpts_info.name); |
385 | panic("could not register command %s\n", bkpts_info.name); |
Line 392... | Line 396... | ||
392 | cmd_initialize(&addwatchp_info); |
396 | cmd_initialize(&addwatchp_info); |
393 | if (!cmd_register(&addwatchp_info)) |
397 | if (!cmd_register(&addwatchp_info)) |
394 | panic("could not register command %s\n", addwatchp_info.name); |
398 | panic("could not register command %s\n", addwatchp_info.name); |
395 | #endif |
399 | #endif |
396 | 400 | ||
397 | exc_register(VECTOR_DEBUG, "debugger", |
401 | exc_register(VECTOR_DEBUG, "debugger", debug_exception); |
398 | debug_exception); |
- | |
399 | #ifdef CONFIG_SMP |
402 | #ifdef CONFIG_SMP |
400 | exc_register(VECTOR_DEBUG_IPI, "debugger_smp", |
403 | exc_register(VECTOR_DEBUG_IPI, "debugger_smp", debug_ipi); |
401 | debug_ipi); |
- | |
402 | #endif |
404 | #endif |
403 | } |
405 | } |
404 | 406 | ||
405 | /** @} |
407 | /** @} |
406 | */ |
408 | */ |