Commit 2ad207d4a0522fa0ea64abe93c4334f87444e45e
1 parent
eea589cc
Thumb semihosting fixes.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3729 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
10 additions
and
1 deletions
target-arm/helper.c
| ... | ... | @@ -602,6 +602,15 @@ void do_interrupt_v7m(CPUARMState *env) |
| 602 | 602 | armv7m_nvic_set_pending(env->v7m.nvic, ARMV7M_EXCP_MEM); |
| 603 | 603 | return; |
| 604 | 604 | case EXCP_BKPT: |
| 605 | + if (semihosting_enabled) { | |
| 606 | + int nr; | |
| 607 | + nr = lduw_code(env->regs[15]) & 0xff; | |
| 608 | + if (nr == 0xab) { | |
| 609 | + env->regs[15] += 2; | |
| 610 | + env->regs[0] = do_arm_semihosting(env); | |
| 611 | + return; | |
| 612 | + } | |
| 613 | + } | |
| 605 | 614 | armv7m_nvic_set_pending(env->v7m.nvic, ARMV7M_EXCP_DEBUG); |
| 606 | 615 | return; |
| 607 | 616 | case EXCP_IRQ: |
| ... | ... | @@ -687,7 +696,7 @@ void do_interrupt(CPUARMState *env) |
| 687 | 696 | break; |
| 688 | 697 | case EXCP_BKPT: |
| 689 | 698 | /* See if this is a semihosting syscall. */ |
| 690 | - if (env->thumb) { | |
| 699 | + if (env->thumb && semihosting_enabled) { | |
| 691 | 700 | mask = lduw_code(env->regs[15]) & 0xff; |
| 692 | 701 | if (mask == 0xab |
| 693 | 702 | && (env->uncached_cpsr & CPSR_M) != ARM_CPU_MODE_USR) { | ... | ... |