--- cpu-exec.c +++ cpu-exec.c @@ -1029,6 +1029,23 @@ &uc->uc_sigmask, puc); } +#elif defined(__s390__) + +int cpu_signal_handler(int host_signum, struct siginfo *info, + void *puc) +{ + struct ucontext *uc = puc; + unsigned long pc; + int is_write; + + pc = uc->uc_mcontext.psw.addr; + /* XXX: compute is_write */ + is_write = 0; + return handle_cpu_signal(pc, (unsigned long)info->si_addr, + is_write, + &uc->uc_sigmask, puc); +} + #else #error host CPU specific signal handler needed --- vl.c +++ vl.c @@ -505,6 +505,15 @@ return val; } +#elif defined(__s390__) + +int64_t cpu_get_real_ticks(void) +{ + int64_t val; + asm volatile("stck 0(%1)" : "=m" (val) : "a" (&tick) : "cc"); + return val; +} + #else #error unsupported CPU #endif --- vl.c +++ vl.c @@ -510,7 +510,7 @@ int64_t cpu_get_real_ticks(void) { int64_t val; - asm volatile("stck 0(%1)" : "=m" (val) : "a" (&tick) : "cc"); + asm volatile("stck 0(%1)" : "=m" (val) : "a" (&val) : "cc"); return val; } --- Makefile.target +++ Makefile.target @@ -50,6 +50,10 @@ PROGS+=$(QEMU_SYSTEM) endif +ifeq ($(ARCH), s390) +PROGS+=$(QEMU_SYSTEM) +endif + ifeq ($(ARCH), i386) ifdef CONFIG_SOFTMMU PROGS+=$(QEMU_SYSTEM) @@ -70,6 +74,10 @@ PROGS+=$(QEMU_SYSTEM) endif +ifeq ($(ARCH), s390) +PROGS+=$(QEMU_SYSTEM) +endif + ifeq ($(ARCH), i386) ifdef CONFIG_SOFTMMU PROGS+=$(QEMU_SYSTEM)