From: Anton Blanchard Here are the ppc64 specific gcc 3.5 fixes. Signed-off-by: Anton Blanchard Signed-off-by: Andrew Morton --- 25-akpm/arch/ppc64/kernel/open_pic_defs.h | 2 -- 25-akpm/arch/ppc64/kernel/signal32.c | 25 +++++++++++++++++-------- 2 files changed, 17 insertions(+), 10 deletions(-) diff -puN arch/ppc64/kernel/open_pic_defs.h~ppc64-gcc-35-fixes-2 arch/ppc64/kernel/open_pic_defs.h --- 25/arch/ppc64/kernel/open_pic_defs.h~ppc64-gcc-35-fixes-2 2004-07-04 00:19:17.620362888 -0700 +++ 25-akpm/arch/ppc64/kernel/open_pic_defs.h 2004-07-04 00:19:17.626361976 -0700 @@ -172,8 +172,6 @@ struct OpenPIC { OpenPIC_Processor Processor[OPENPIC_MAX_PROCESSORS]; }; -extern volatile struct OpenPIC *OpenPIC; - /* * Current Task Priority Register diff -puN arch/ppc64/kernel/signal32.c~ppc64-gcc-35-fixes-2 arch/ppc64/kernel/signal32.c --- 25/arch/ppc64/kernel/signal32.c~ppc64-gcc-35-fixes-2 2004-07-04 00:19:17.622362584 -0700 +++ 25-akpm/arch/ppc64/kernel/signal32.c 2004-07-04 00:19:17.627361824 -0700 @@ -298,12 +298,15 @@ long sys32_sigaction(int sig, struct old if (act) { compat_old_sigset_t mask; + compat_uptr_t handler, restorer; - if (get_user((long)new_ka.sa.sa_handler, &act->sa_handler) || - __get_user((long)new_ka.sa.sa_restorer, &act->sa_restorer) || + if (get_user(handler, &act->sa_handler) || + __get_user(restorer, &act->sa_restorer) || __get_user(new_ka.sa.sa_flags, &act->sa_flags) || __get_user(mask, &act->sa_mask)) return -EFAULT; + new_ka.sa.sa_handler = compat_ptr(handler); + new_ka.sa.sa_restorer = compat_ptr(restorer); siginitset(&new_ka.sa.sa_mask, mask); } @@ -354,7 +357,10 @@ long sys32_rt_sigaction(int sig, const s return -EINVAL; if (act) { - ret = get_user((long)new_ka.sa.sa_handler, &act->sa_handler); + compat_uptr_t handler; + + ret = get_user(handler, &act->sa_handler); + new_ka.sa.sa_handler = compat_ptr(handler); ret |= __copy_from_user(&set32, &act->sa_mask, sizeof(compat_sigset_t)); sigset_from_compat(&new_ka.sa.sa_mask, &set32); @@ -596,6 +602,7 @@ int sys32_sigaltstack(u32 __new, u32 __o int ret; mm_segment_t old_fs; unsigned long sp; + compat_uptr_t ss_sp; /* * set sp to the user stack on entry to the system call @@ -604,11 +611,13 @@ int sys32_sigaltstack(u32 __new, u32 __o sp = regs->gpr[1]; /* Put new stack info in local 64 bit stack struct */ - if (newstack && - (get_user((long)uss.ss_sp, &newstack->ss_sp) || - __get_user(uss.ss_flags, &newstack->ss_flags) || - __get_user(uss.ss_size, &newstack->ss_size))) - return -EFAULT; + if (newstack) { + if (get_user(ss_sp, &newstack->ss_sp) || + __get_user(uss.ss_flags, &newstack->ss_flags) || + __get_user(uss.ss_size, &newstack->ss_size)) + return -EFAULT; + uss.ss_sp = compat_ptr(ss_sp); + } old_fs = get_fs(); set_fs(KERNEL_DS); _