Rev 3093 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3093 | Rev 3108 | ||
|---|---|---|---|
| Line 44... | Line 44... | ||
| 44 | #include "../../../main.h" |
44 | #include "../../../main.h" |
| 45 | #include "../../../include/arch.h" |
45 | #include "../../../include/arch.h" |
| 46 | 46 | ||
| 47 | #define OPCODE_INT3 0xCC |
47 | #define OPCODE_INT3 0xCC |
| 48 | 48 | ||
| - | 49 | void arch_dthread_initialize(dthread_t *dt) |
|
| - | 50 | { |
|
| - | 51 | dt->arch.singlestep = false; |
|
| - | 52 | } |
|
| - | 53 | ||
| 49 | static int _set_trap_flag(dthread_t *dt, bool enable) |
54 | static int _set_trap_flag(dthread_t *dt, bool enable) |
| 50 | { |
55 | { |
| 51 | static istate_t istate; |
56 | static istate_t istate; |
| 52 | int rc; |
57 | int rc; |
| 53 | 58 | ||
| 54 | rc = udebug_regs_read(app_phone, dt->hash, &istate); |
59 | rc = udebug_regs_read(app_phone, dt->hash, &istate); |
| 55 | if (rc < 0) { printf("regs read failed\n"); return; } |
60 | if (rc < 0) { printf("regs read failed\n"); return -1; } |
| 56 | 61 | ||
| 57 | if (enable) istate.eflags |= 0x0100; /* trap flag */ |
62 | if (enable) istate.eflags |= 0x0100; /* trap flag */ |
| 58 | else if (!active_bkpt) istate.eflags &= ~0x0100; /* trap flag */ |
63 | else if (!active_bkpt) istate.eflags &= ~0x0100; /* trap flag */ |
| 59 | 64 | ||
| 60 | rc = udebug_regs_write(app_phone, dt->hash, &istate); |
65 | rc = udebug_regs_write(app_phone, dt->hash, &istate); |
| 61 | if (rc < 0) { printf("regs write failed\n"); return; } |
66 | if (rc < 0) { printf("regs write failed\n"); return -1; } |
| 62 | 67 | ||
| 63 | return 0; |
68 | return 0; |
| 64 | } |
69 | } |
| 65 | 70 | ||
| 66 | int arch_breakpoint_set(breakpoint_t *b) |
71 | int arch_breakpoint_set(breakpoint_t *b) |