1diff -ur qemu/arm-semi.c qemu-0.9.0/arm-semi.c 2--- qemu/arm-semi.c 2007-02-06 00:01:54.000000000 +0100 3+++ qemu-0.9.0/arm-semi.c 2007-07-03 21:52:52.000000000 +0200 4@@ -196,7 +196,7 @@ 5 6 #define ARG(n) tget32(args + (n) * 4) 7 #define SET_ARG(n, val) tput32(args + (n) * 4,val) 8-uint32_t do_arm_semihosting(CPUState *env) 9+int do_arm_semihosting(CPUState *env, uint32_t mask) 10 { 11 target_ulong args; 12 char * s; 13diff -ur qemu/linux-user/arm/syscall.h qemu-0.9.0/linux-user/arm/syscall.h 14--- qemu/linux-user/arm/syscall.h 2007-02-06 00:01:54.000000000 +0100 15+++ qemu-0.9.0/linux-user/arm/syscall.h 2007-07-03 21:54:32.000000000 +0200 16@@ -39,4 +39,4 @@ 17 #define UNAME_MACHINE "armv5tel" 18 #endif 19 20-uint32_t do_arm_semihosting(CPUState *); 21+int do_arm_semihosting(CPUState *, uint32_t); 22diff -ur qemu/target-arm/helper.c qemu-0.9.0/target-arm/helper.c 23--- qemu/target-arm/helper.c 2007-02-06 00:01:54.000000000 +0100 24+++ qemu-0.9.0/target-arm/helper.c 2007-07-21 11:44:15.000000000 +0200 25@@ -5,6 +5,8 @@ 26 #include "cpu.h" 27 #include "exec-all.h" 28 29+extern int do_arm_semihosting(CPUARMState *env, uint32_t mask); 30+ 31 void cpu_reset(CPUARMState *env) 32 { 33 #if defined (CONFIG_USER_ONLY) 34@@ -184,14 +184,8 @@ 35 } else { 36 mask = ldl_code(env->regs[15] - 4) & 0xffffff; 37 } 38- /* Only intercept calls from privileged modes, to provide some 39- semblance of security. */ 40- if (((mask == 0x123456 && !env->thumb) 41- || (mask == 0xab && env->thumb)) 42- && (env->uncached_cpsr & CPSR_M) != ARM_CPU_MODE_USR) { 43- env->regs[0] = do_arm_semihosting(env); 44- return; 45- } 46+ if (do_arm_semihosting(env, mask)) 47+ return; 48 } 49 new_mode = ARM_CPU_MODE_SVC; 50 addr = 0x08; 51