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 | ... | ... |