Message ID | 1438793483-12721-2-git-send-email-cov@codeaurora.org |
---|---|
State | New |
Headers | show |
Christopher Covington <cov@codeaurora.org> writes: > Signed-off-by: Christopher Covington <cov@codeaurora.org> > --- > target-arm/arm-semi.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/target-arm/arm-semi.c b/target-arm/arm-semi.c > index a8b83e6..bcc70ec 100644 > --- a/target-arm/arm-semi.c > +++ b/target-arm/arm-semi.c > @@ -186,8 +186,6 @@ static void arm_semi_flen_cb(CPUState *cs, target_ulong ret, target_ulong err) > #define SET_ARG(n, val) put_user_ual(val, args + (n) * 4) > uint32_t do_arm_semihosting(CPUARMState *env) > { > - ARMCPU *cpu = arm_env_get_cpu(env); > - CPUState *cs = CPU(cpu); > target_ulong args; > target_ulong arg0, arg1, arg2, arg3; > char * s; > @@ -195,6 +193,8 @@ uint32_t do_arm_semihosting(CPUARMState *env) > uint32_t ret; > uint32_t len; > #ifdef CONFIG_USER_ONLY > + ARMCPU *cpu = arm_env_get_cpu(env); > + CPUState *cs = CPU(cpu); > TaskState *ts = cs->opaque; > #else > CPUARMState *ts = env; > @@ -562,7 +562,6 @@ uint32_t do_arm_semihosting(CPUARMState *env) > exit(ret); > default: > fprintf(stderr, "qemu: Unsupported SemiHosting SWI 0x%02x\n", nr); > - cpu_dump_state(cs, stderr, fprintf, 0); > - abort(); > + return -1; Do SemiHosting calls return anything to the guest? If so removing the abort means the guest may go unpredictable if the call is just ignored. If so the argument would be to leave the abort() in and just add the missing semihosting calls. > } > }
Hi Alex, Thanks for taking a look. On 08/06/2015 05:11 AM, Alex Bennée wrote: > > Christopher Covington <cov@codeaurora.org> writes: > >> Signed-off-by: Christopher Covington <cov@codeaurora.org> >> --- >> target-arm/arm-semi.c | 7 +++---- >> 1 file changed, 3 insertions(+), 4 deletions(-) >> >> diff --git a/target-arm/arm-semi.c b/target-arm/arm-semi.c >> index a8b83e6..bcc70ec 100644 >> --- a/target-arm/arm-semi.c >> +++ b/target-arm/arm-semi.c >> @@ -186,8 +186,6 @@ static void arm_semi_flen_cb(CPUState *cs, target_ulong ret, target_ulong err) >> #define SET_ARG(n, val) put_user_ual(val, args + (n) * 4) >> uint32_t do_arm_semihosting(CPUARMState *env) >> { >> - ARMCPU *cpu = arm_env_get_cpu(env); >> - CPUState *cs = CPU(cpu); >> target_ulong args; >> target_ulong arg0, arg1, arg2, arg3; >> char * s; >> @@ -195,6 +193,8 @@ uint32_t do_arm_semihosting(CPUARMState *env) >> uint32_t ret; >> uint32_t len; >> #ifdef CONFIG_USER_ONLY >> + ARMCPU *cpu = arm_env_get_cpu(env); >> + CPUState *cs = CPU(cpu); >> TaskState *ts = cs->opaque; >> #else >> CPUARMState *ts = env; >> @@ -562,7 +562,6 @@ uint32_t do_arm_semihosting(CPUARMState *env) >> exit(ret); >> default: >> fprintf(stderr, "qemu: Unsupported SemiHosting SWI 0x%02x\n", nr); >> - cpu_dump_state(cs, stderr, fprintf, 0); >> - abort(); >> + return -1; > > Do SemiHosting calls return anything to the guest? If so removing the > abort means the guest may go unpredictable if the call is just ignored. > If so the argument would be to leave the abort() in and just add the > missing semihosting calls. If were to pursue this further, I would want to review how external debuggers supporting semihosting on hardware behave. However my current thinking is that there are more commonly used mechanisms than semihosting that we can move to for equivalent functionality. Functionality: standard mechanism Guest-initiated host filesystem access: VirtIO 9P passthrough filesystem Guest-initiated exit: poweroff (PSCI) Guest-initiated instruction counting: perf stat -e instructions:u (PMU) Guest-initiated checkpoint dump: [maybe QMP over guest agent VirtIO serial?] Thanks, Christopher Covington
diff --git a/target-arm/arm-semi.c b/target-arm/arm-semi.c index a8b83e6..bcc70ec 100644 --- a/target-arm/arm-semi.c +++ b/target-arm/arm-semi.c @@ -186,8 +186,6 @@ static void arm_semi_flen_cb(CPUState *cs, target_ulong ret, target_ulong err) #define SET_ARG(n, val) put_user_ual(val, args + (n) * 4) uint32_t do_arm_semihosting(CPUARMState *env) { - ARMCPU *cpu = arm_env_get_cpu(env); - CPUState *cs = CPU(cpu); target_ulong args; target_ulong arg0, arg1, arg2, arg3; char * s; @@ -195,6 +193,8 @@ uint32_t do_arm_semihosting(CPUARMState *env) uint32_t ret; uint32_t len; #ifdef CONFIG_USER_ONLY + ARMCPU *cpu = arm_env_get_cpu(env); + CPUState *cs = CPU(cpu); TaskState *ts = cs->opaque; #else CPUARMState *ts = env; @@ -562,7 +562,6 @@ uint32_t do_arm_semihosting(CPUARMState *env) exit(ret); default: fprintf(stderr, "qemu: Unsupported SemiHosting SWI 0x%02x\n", nr); - cpu_dump_state(cs, stderr, fprintf, 0); - abort(); + return -1; } }
Signed-off-by: Christopher Covington <cov@codeaurora.org> --- target-arm/arm-semi.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)