Commit fd4a43e4e28a594a20beefe78b0fe7ecd34bd981
1 parent
ad1a5b78
ia64 fixes
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1846 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
6 changed files
with
9 additions
and
40 deletions
Makefile.target
cpu-exec.c
| ... | ... | @@ -1363,7 +1363,6 @@ int cpu_signal_handler(int host_signum, struct siginfo *info, |
| 1363 | 1363 | #ifndef __ISR_VALID |
| 1364 | 1364 | /* This ought to be in <bits/siginfo.h>... */ |
| 1365 | 1365 | # define __ISR_VALID 1 |
| 1366 | -# define si_flags _sifields._sigfault._si_pad0 | |
| 1367 | 1366 | #endif |
| 1368 | 1367 | |
| 1369 | 1368 | int cpu_signal_handler(int host_signum, struct siginfo *info, void *puc) |
| ... | ... | @@ -1379,7 +1378,7 @@ int cpu_signal_handler(int host_signum, struct siginfo *info, void *puc) |
| 1379 | 1378 | case SIGSEGV: |
| 1380 | 1379 | case SIGBUS: |
| 1381 | 1380 | case SIGTRAP: |
| 1382 | - if (info->si_code && (info->si_flags & __ISR_VALID)) | |
| 1381 | + if (info->si_code && (info->si_segvflags & __ISR_VALID)) | |
| 1383 | 1382 | /* ISR.W (write-access) is bit 33: */ |
| 1384 | 1383 | is_write = (info->si_isr >> 33) & 1; |
| 1385 | 1384 | break; | ... | ... |
dyngen.c
| ... | ... | @@ -2475,10 +2475,12 @@ fprintf(outfile, |
| 2475 | 2475 | ); |
| 2476 | 2476 | #ifdef HOST_IA64 |
| 2477 | 2477 | fprintf(outfile, |
| 2478 | - " ia64_apply_fixes(&gen_code_ptr, ltoff_fixes, " | |
| 2478 | + " {\n" | |
| 2479 | + " extern char code_gen_buffer[];\n" | |
| 2480 | + " ia64_apply_fixes(&gen_code_ptr, ltoff_fixes, " | |
| 2479 | 2481 | "(uint64_t) code_gen_buffer + 2*(1<<20), plt_fixes,\n\t\t\t" |
| 2480 | 2482 | "sizeof(plt_target)/sizeof(plt_target[0]),\n\t\t\t" |
| 2481 | - "plt_target, plt_offset);\n"); | |
| 2483 | + "plt_target, plt_offset);\n }\n"); | |
| 2482 | 2484 | #endif |
| 2483 | 2485 | |
| 2484 | 2486 | /* generate some code patching */ | ... | ... |
dyngen.h
| ... | ... | @@ -420,6 +420,9 @@ static inline void ia64_apply_fixes (uint8_t **gen_code_pp, |
| 420 | 420 | } |
| 421 | 421 | ia64_imm22(fixup->addr, (long) vp - gp); |
| 422 | 422 | } |
| 423 | + /* Keep code ptr aligned. */ | |
| 424 | + if ((long) gen_code_ptr & 15) | |
| 425 | + gen_code_ptr += 8; | |
| 423 | 426 | *gen_code_pp = gen_code_ptr; |
| 424 | 427 | } |
| 425 | 428 | ... | ... |
ia64-syscall.S deleted
100644 → 0
| 1 | -/* derived from glibc sysdeps/unix/sysv/linux/ia64/sysdep.S */ | |
| 2 | - | |
| 3 | -#define __ASSEMBLY__ | |
| 4 | - | |
| 5 | -#include <asm/asmmacro.h> | |
| 6 | -#include <asm/unistd.h> | |
| 7 | - | |
| 8 | -ENTRY(__syscall_error) | |
| 9 | - .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(0) | |
| 10 | - alloc r33=ar.pfs, 0, 4, 0, 0 | |
| 11 | - mov r32=rp | |
| 12 | - .body | |
| 13 | - mov r35=r8 | |
| 14 | - mov r34=r1 | |
| 15 | - ;; | |
| 16 | - br.call.sptk.many b0 = __errno_location | |
| 17 | -.Lret0: /* force new bundle */ | |
| 18 | - st4 [r8]=r35 | |
| 19 | - mov r1=r34 | |
| 20 | - mov rp=r32 | |
| 21 | - mov r8=-1 | |
| 22 | - mov ar.pfs=r33 | |
| 23 | - br.ret.sptk.few b0 | |
| 24 | -END(__syscall_error) | |
| 25 | - | |
| 26 | -GLOBAL_ENTRY(__ia64_syscall) | |
| 27 | - mov r15=r37 /* syscall number */ | |
| 28 | - break __BREAK_SYSCALL | |
| 29 | - cmp.eq p6,p0=-1,r10 /* r10 = -1 on error */ | |
| 30 | -(p6) br.cond.spnt.few __syscall_error | |
| 31 | - br.ret.sptk.few b0 | |
| 32 | -.endp __ia64_syscall |
linux-user/syscall.c
| ... | ... | @@ -1623,7 +1623,7 @@ int do_fork(CPUState *env, unsigned int flags, unsigned long newsp) |
| 1623 | 1623 | #endif |
| 1624 | 1624 | new_env->opaque = ts; |
| 1625 | 1625 | #ifdef __ia64__ |
| 1626 | - ret = clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); | |
| 1626 | + ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); | |
| 1627 | 1627 | #else |
| 1628 | 1628 | ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env); |
| 1629 | 1629 | #endif | ... | ... |