Commit 90cb94935228cc064f99fe98e70a8ea5deefb689
1 parent
db6e6ed7
s390 bits
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1530 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
27 additions
and
0 deletions
cpu-exec.c
| @@ -1280,6 +1280,23 @@ int cpu_signal_handler(int host_signum, struct siginfo *info, void *puc) | @@ -1280,6 +1280,23 @@ int cpu_signal_handler(int host_signum, struct siginfo *info, void *puc) | ||
| 1280 | &uc->uc_sigmask, puc); | 1280 | &uc->uc_sigmask, puc); |
| 1281 | } | 1281 | } |
| 1282 | 1282 | ||
| 1283 | +#elif defined(__s390__) | ||
| 1284 | + | ||
| 1285 | +int cpu_signal_handler(int host_signum, struct siginfo *info, | ||
| 1286 | + void *puc) | ||
| 1287 | +{ | ||
| 1288 | + struct ucontext *uc = puc; | ||
| 1289 | + unsigned long pc; | ||
| 1290 | + int is_write; | ||
| 1291 | + | ||
| 1292 | + pc = uc->uc_mcontext.psw.addr; | ||
| 1293 | + /* XXX: compute is_write */ | ||
| 1294 | + is_write = 0; | ||
| 1295 | + return handle_cpu_signal(pc, (unsigned long)info->si_addr, | ||
| 1296 | + is_write, | ||
| 1297 | + &uc->uc_sigmask, puc); | ||
| 1298 | +} | ||
| 1299 | + | ||
| 1283 | #else | 1300 | #else |
| 1284 | 1301 | ||
| 1285 | #error host CPU specific signal handler needed | 1302 | #error host CPU specific signal handler needed |
dyngen-exec.h
| @@ -218,6 +218,7 @@ extern int __op_jmp0, __op_jmp1, __op_jmp2, __op_jmp3; | @@ -218,6 +218,7 @@ extern int __op_jmp0, __op_jmp1, __op_jmp2, __op_jmp3; | ||
| 218 | #endif | 218 | #endif |
| 219 | #ifdef __s390__ | 219 | #ifdef __s390__ |
| 220 | #define EXIT_TB() asm volatile ("br %r14") | 220 | #define EXIT_TB() asm volatile ("br %r14") |
| 221 | +#define GOTO_LABEL_PARAM(n) asm volatile ("b " ASM_NAME(__op_gen_label) #n) | ||
| 221 | #endif | 222 | #endif |
| 222 | #ifdef __alpha__ | 223 | #ifdef __alpha__ |
| 223 | #define EXIT_TB() asm volatile ("ret") | 224 | #define EXIT_TB() asm volatile ("ret") |
vl.c
| @@ -532,6 +532,15 @@ int64_t cpu_get_real_ticks(void) | @@ -532,6 +532,15 @@ int64_t cpu_get_real_ticks(void) | ||
| 532 | return val; | 532 | return val; |
| 533 | } | 533 | } |
| 534 | 534 | ||
| 535 | +#elif defined(__s390__) | ||
| 536 | + | ||
| 537 | +int64_t cpu_get_real_ticks(void) | ||
| 538 | +{ | ||
| 539 | + int64_t val; | ||
| 540 | + asm volatile("stck 0(%1)" : "=m" (val) : "a" (&val) : "cc"); | ||
| 541 | + return val; | ||
| 542 | +} | ||
| 543 | + | ||
| 535 | #else | 544 | #else |
| 536 | #error unsupported CPU | 545 | #error unsupported CPU |
| 537 | #endif | 546 | #endif |