Rev 2787 | Rev 3424 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2787 | Rev 2921 | ||
---|---|---|---|
Line 326... | Line 326... | ||
326 | static void debug_exception(int n __attribute__((unused)), istate_t *istate) |
326 | static void debug_exception(int n __attribute__((unused)), istate_t *istate) |
327 | { |
327 | { |
328 | unative_t dr6; |
328 | unative_t dr6; |
329 | int i; |
329 | int i; |
330 | 330 | ||
- | 331 | dr6 = read_dr6(); |
|
- | 332 | ||
- | 333 | if (dr6 & DR6_BS) { |
|
- | 334 | if (THREAD && istate_from_uspace(istate)) { |
|
- | 335 | /* |
|
- | 336 | * The userspace thread has TF set and executed |
|
- | 337 | * an instruction |
|
- | 338 | */ |
|
- | 339 | udebug_trap_event(istate->eip); |
|
- | 340 | return; |
|
- | 341 | } |
|
- | 342 | } |
|
- | 343 | ||
331 | /* Set RF to restart the instruction */ |
344 | /* Set RF to restart the instruction */ |
332 | #ifdef amd64 |
345 | #ifdef amd64 |
333 | istate->rflags |= RFLAGS_RF; |
346 | istate->rflags |= RFLAGS_RF; |
334 | #else |
347 | #else |
335 | istate->eflags |= EFLAGS_RF; |
348 | istate->eflags |= EFLAGS_RF; |
336 | #endif |
349 | #endif |
337 | 350 | ||
338 | dr6 = read_dr6(); |
- | |
339 | for (i=0; i < BKPOINTS_MAX; i++) { |
351 | for (i=0; i < BKPOINTS_MAX; i++) { |
340 | if (dr6 & (1 << i)) { |
352 | if (dr6 & (1 << i)) { |
341 | dr6 &= ~ (1 << i); |
353 | dr6 &= ~ (1 << i); |
342 | write_dr6(dr6); |
354 | write_dr6(dr6); |
343 | 355 |