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