]> err.no Git - linux-2.6/commitdiff
ppc64: use the merged syscall table
authorStephen Rothwell <sfr@canb.auug.org.au>
Fri, 28 Oct 2005 02:51:45 +0000 (12:51 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Fri, 28 Oct 2005 02:51:45 +0000 (12:51 +1000)
This allows us to also use entry_64.S from the merged tree and reverts
the setup_64.c part of fda262b8978d0089758ef9444508434c74113a61.

Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
arch/powerpc/kernel/Makefile
arch/powerpc/kernel/setup_64.c
arch/ppc64/Makefile
arch/ppc64/kernel/Makefile
arch/ppc64/kernel/entry.S [deleted file]
arch/ppc64/kernel/misc.S

index 68543201df3d5522ca1af359c67792448415e282..0118e516b01fff0098c659954302520a0e0a1dae 100644 (file)
@@ -13,7 +13,7 @@ endif
 obj-y                          := semaphore.o cputable.o ptrace.o syscalls.o \
                                   signal_32.o pmc.o
 obj-$(CONFIG_PPC64)            += setup_64.o binfmt_elf32.o sys_ppc32.o \
-                                  ptrace32.o
+                                  ptrace32.o systbl.o
 obj-$(CONFIG_ALTIVEC)          += vecemu.o vector.o
 obj-$(CONFIG_POWER4)           += idle_power4.o
 obj-$(CONFIG_PPC_OF)           += of_device.o
@@ -28,12 +28,12 @@ extra-$(CONFIG_40x)         := head_4xx.o
 extra-$(CONFIG_44x)            := head_44x.o
 extra-$(CONFIG_FSL_BOOKE)      := head_fsl_booke.o
 extra-$(CONFIG_8xx)            := head_8xx.o
-extra-$(CONFIG_PPC64)          += entry_64.o
 extra-y                                += vmlinux.lds
 
 obj-y                          += process.o init_task.o time.o \
-                                  prom.o systbl.o traps.o setup-common.o
-obj-$(CONFIG_PPC32)            += entry_32.o idle_6xx.o setup_32.o misc_32.o
+                                  prom.o traps.o setup-common.o
+obj-$(CONFIG_PPC32)            += entry_32.o idle_6xx.o setup_32.o misc_32.o \
+                                  systbl.o
 obj-$(CONFIG_PPC64)            += misc_64.o
 obj-$(CONFIG_PPC_OF)           += prom_init.o
 obj-$(CONFIG_MODULES)          += ppc_ksyms.o
@@ -53,3 +53,4 @@ obj-$(CONFIG_PPC64)           += traps.o process.o init_task.o time.o \
 endif
 
 extra-$(CONFIG_PPC_FPU)                += fpu.o
+extra-$(CONFIG_PPC64)          += entry_64.o
index a8f7ff5ab1a4cd74e68bba0ff98c63323cc286de..950e6f0fea985b1d3659f9e2c492025f72947441 100644 (file)
@@ -701,17 +701,6 @@ static void __init emergency_stack_init(void)
                                                limit)) + PAGE_SIZE;
 }
 
-extern unsigned long *sys_call_table;
-extern unsigned long sys_ni_syscall;
-#ifdef CONFIG_PPC_MERGE
-#define SYS_CALL_ENTRY64(i)    sys_call_table[(i) * 2]
-#define SYS_CALL_ENTRY32(i)    sys_call_table[(i) * 2 + 1]
-#else
-extern unsigned long *sys_call_table32;
-#define SYS_CALL_ENTRY64(i)    sys_call_table[(i)]
-#define SYS_CALL_ENTRY32(i)    sys_call_table32[(i)]
-#endif
-
 /*
  * Called from setup_arch to initialize the bitmap of available
  * syscalls in the systemcfg page
@@ -719,14 +708,17 @@ extern unsigned long *sys_call_table32;
 void __init setup_syscall_map(void)
 {
        unsigned int i, count64 = 0, count32 = 0;
+       extern unsigned long *sys_call_table;
+       extern unsigned long sys_ni_syscall;
+
 
        for (i = 0; i < __NR_syscalls; i++) {
-               if (SYS_CALL_ENTRY64(i) != sys_ni_syscall) {
+               if (sys_call_table[i*2] != sys_ni_syscall) {
                        count64++;
                        systemcfg->syscall_map_64[i >> 5] |=
                                0x80000000UL >> (i & 0x1f);
                }
-               if (SYS_CALL_ENTRY32(i) != sys_ni_syscall) {
+               if (sys_call_table[i*2+1] != sys_ni_syscall) {
                        count32++;
                        systemcfg->syscall_map_32[i >> 5] |=
                                0x80000000UL >> (i & 0x1f);
index ba59225fd3734f03a6790700cb6830964b849653..66ee04f13b2663756e3967ddc63b49c8e1c656f7 100644 (file)
@@ -81,6 +81,7 @@ CFLAGS += $(call cc-option,-funit-at-a-time)
 
 head-y := arch/ppc64/kernel/head.o
 head-y += arch/powerpc/kernel/fpu.o
+head-y += arch/powerpc/kernel/entry_64.o
 
 libs-y                         += arch/ppc64/lib/
 core-y                         += arch/ppc64/kernel/ arch/powerpc/kernel/
index 863bd7d746fb156b6e5fd5387a54170528187a3d..a20a305b825daca24a87f1a7405b31351463ef17 100644 (file)
@@ -7,7 +7,7 @@ ifneq ($(CONFIG_PPC_MERGE),y)
 EXTRA_CFLAGS   += -mno-minimal-toc
 extra-y                := head.o vmlinux.lds
 
-obj-y               := entry.o misc.o prom.o
+obj-y               := misc.o prom.o
 
 endif
 
diff --git a/arch/ppc64/kernel/entry.S b/arch/ppc64/kernel/entry.S
deleted file mode 100644 (file)
index 5d2fcbe..0000000
+++ /dev/null
@@ -1,845 +0,0 @@
-/*
- *  arch/ppc64/kernel/entry.S
- *
- *  PowerPC version 
- *    Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org)
- *  Rewritten by Cort Dougan (cort@cs.nmt.edu) for PReP
- *    Copyright (C) 1996 Cort Dougan <cort@cs.nmt.edu>
- *  Adapted for Power Macintosh by Paul Mackerras.
- *  Low-level exception handlers and MMU support
- *  rewritten by Paul Mackerras.
- *    Copyright (C) 1996 Paul Mackerras.
- *  MPC8xx modifications Copyright (C) 1997 Dan Malek (dmalek@jlc.net).
- *
- *  This file contains the system call entry code, context switch
- *  code, and exception/interrupt return code for PowerPC.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU General Public License
- *  as published by the Free Software Foundation; either version
- *  2 of the License, or (at your option) any later version.
- */
-
-#include <linux/config.h>
-#include <linux/errno.h>
-#include <asm/unistd.h>
-#include <asm/processor.h>
-#include <asm/page.h>
-#include <asm/mmu.h>
-#include <asm/thread_info.h>
-#include <asm/ppc_asm.h>
-#include <asm/asm-offsets.h>
-#include <asm/cputable.h>
-
-#ifdef CONFIG_PPC_ISERIES
-#define DO_SOFT_DISABLE
-#endif
-
-/*
- * System calls.
- */
-       .section        ".toc","aw"
-.SYS_CALL_TABLE:
-       .tc .sys_call_table[TC],.sys_call_table
-
-.SYS_CALL_TABLE32:
-       .tc .sys_call_table32[TC],.sys_call_table32
-
-/* This value is used to mark exception frames on the stack. */
-exception_marker:
-       .tc     ID_72656773_68657265[TC],0x7265677368657265
-
-       .section        ".text"
-       .align 7
-
-#undef SHOW_SYSCALLS
-
-       .globl system_call_common
-system_call_common:
-       andi.   r10,r12,MSR_PR
-       mr      r10,r1
-       addi    r1,r1,-INT_FRAME_SIZE
-       beq-    1f
-       ld      r1,PACAKSAVE(r13)
-1:     std     r10,0(r1)
-       std     r11,_NIP(r1)
-       std     r12,_MSR(r1)
-       std     r0,GPR0(r1)
-       std     r10,GPR1(r1)
-       std     r2,GPR2(r1)
-       std     r3,GPR3(r1)
-       std     r4,GPR4(r1)
-       std     r5,GPR5(r1)
-       std     r6,GPR6(r1)
-       std     r7,GPR7(r1)
-       std     r8,GPR8(r1)
-       li      r11,0
-       std     r11,GPR9(r1)
-       std     r11,GPR10(r1)
-       std     r11,GPR11(r1)
-       std     r11,GPR12(r1)
-       std     r9,GPR13(r1)
-       crclr   so
-       mfcr    r9
-       mflr    r10
-       li      r11,0xc01
-       std     r9,_CCR(r1)
-       std     r10,_LINK(r1)
-       std     r11,_TRAP(r1)
-       mfxer   r9
-       mfctr   r10
-       std     r9,_XER(r1)
-       std     r10,_CTR(r1)
-       std     r3,ORIG_GPR3(r1)
-       ld      r2,PACATOC(r13)
-       addi    r9,r1,STACK_FRAME_OVERHEAD
-       ld      r11,exception_marker@toc(r2)
-       std     r11,-16(r9)             /* "regshere" marker */
-#ifdef CONFIG_PPC_ISERIES
-       /* Hack for handling interrupts when soft-enabling on iSeries */
-       cmpdi   cr1,r0,0x5555           /* syscall 0x5555 */
-       andi.   r10,r12,MSR_PR          /* from kernel */
-       crand   4*cr0+eq,4*cr1+eq,4*cr0+eq
-       beq     hardware_interrupt_entry
-       lbz     r10,PACAPROCENABLED(r13)
-       std     r10,SOFTE(r1)
-#endif
-       mfmsr   r11
-       ori     r11,r11,MSR_EE
-       mtmsrd  r11,1
-
-#ifdef SHOW_SYSCALLS
-       bl      .do_show_syscall
-       REST_GPR(0,r1)
-       REST_4GPRS(3,r1)
-       REST_2GPRS(7,r1)
-       addi    r9,r1,STACK_FRAME_OVERHEAD
-#endif
-       clrrdi  r11,r1,THREAD_SHIFT
-       li      r12,0
-       ld      r10,TI_FLAGS(r11)
-       stb     r12,TI_SC_NOERR(r11)
-       andi.   r11,r10,_TIF_SYSCALL_T_OR_A
-       bne-    syscall_dotrace
-syscall_dotrace_cont:
-       cmpldi  0,r0,NR_syscalls
-       bge-    syscall_enosys
-
-system_call:                   /* label this so stack traces look sane */
-/*
- * Need to vector to 32 Bit or default sys_call_table here,
- * based on caller's run-mode / personality.
- */
-       ld      r11,.SYS_CALL_TABLE@toc(2)
-       andi.   r10,r10,_TIF_32BIT
-       beq     15f
-       ld      r11,.SYS_CALL_TABLE32@toc(2)
-       clrldi  r3,r3,32
-       clrldi  r4,r4,32
-       clrldi  r5,r5,32
-       clrldi  r6,r6,32
-       clrldi  r7,r7,32
-       clrldi  r8,r8,32
-15:
-       slwi    r0,r0,3
-       ldx     r10,r11,r0      /* Fetch system call handler [ptr] */
-       mtctr   r10
-       bctrl                   /* Call handler */
-
-syscall_exit:
-#ifdef SHOW_SYSCALLS
-       std     r3,GPR3(r1)
-       bl      .do_show_syscall_exit
-       ld      r3,GPR3(r1)
-#endif
-       std     r3,RESULT(r1)
-       ld      r5,_CCR(r1)
-       li      r10,-_LAST_ERRNO
-       cmpld   r3,r10
-       clrrdi  r12,r1,THREAD_SHIFT
-       bge-    syscall_error
-syscall_error_cont:
-
-       /* check for syscall tracing or audit */
-       ld      r9,TI_FLAGS(r12)
-       andi.   r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP)
-       bne-    syscall_exit_trace
-syscall_exit_trace_cont:
-
-       /* disable interrupts so current_thread_info()->flags can't change,
-          and so that we don't get interrupted after loading SRR0/1. */
-       ld      r8,_MSR(r1)
-       andi.   r10,r8,MSR_RI
-       beq-    unrecov_restore
-       mfmsr   r10
-       rldicl  r10,r10,48,1
-       rotldi  r10,r10,16
-       mtmsrd  r10,1
-       ld      r9,TI_FLAGS(r12)
-       andi.   r0,r9,(_TIF_SYSCALL_T_OR_A|_TIF_SIGPENDING|_TIF_NEED_RESCHED)
-       bne-    syscall_exit_work
-       ld      r7,_NIP(r1)
-       stdcx.  r0,0,r1                 /* to clear the reservation */
-       andi.   r6,r8,MSR_PR
-       ld      r4,_LINK(r1)
-       beq-    1f                      /* only restore r13 if */
-       ld      r13,GPR13(r1)           /* returning to usermode */
-1:     ld      r2,GPR2(r1)
-       li      r12,MSR_RI
-       andc    r10,r10,r12
-       mtmsrd  r10,1                   /* clear MSR.RI */
-       ld      r1,GPR1(r1)
-       mtlr    r4
-       mtcr    r5
-       mtspr   SPRN_SRR0,r7
-       mtspr   SPRN_SRR1,r8
-       rfid
-       b       .       /* prevent speculative execution */
-
-syscall_enosys:
-       li      r3,-ENOSYS
-       std     r3,RESULT(r1)
-       clrrdi  r12,r1,THREAD_SHIFT
-       ld      r5,_CCR(r1)
-
-syscall_error:
-       lbz     r11,TI_SC_NOERR(r12)
-       cmpwi   0,r11,0
-       bne-    syscall_error_cont
-       neg     r3,r3
-       oris    r5,r5,0x1000    /* Set SO bit in CR */
-       std     r5,_CCR(r1)
-       b       syscall_error_cont
-        
-/* Traced system call support */
-syscall_dotrace:
-       bl      .save_nvgprs
-       addi    r3,r1,STACK_FRAME_OVERHEAD
-       bl      .do_syscall_trace_enter
-       ld      r0,GPR0(r1)     /* Restore original registers */
-       ld      r3,GPR3(r1)
-       ld      r4,GPR4(r1)
-       ld      r5,GPR5(r1)
-       ld      r6,GPR6(r1)
-       ld      r7,GPR7(r1)
-       ld      r8,GPR8(r1)
-       addi    r9,r1,STACK_FRAME_OVERHEAD
-       clrrdi  r10,r1,THREAD_SHIFT
-       ld      r10,TI_FLAGS(r10)
-       b       syscall_dotrace_cont
-
-syscall_exit_trace:
-       std     r3,GPR3(r1)
-       bl      .save_nvgprs
-       addi    r3,r1,STACK_FRAME_OVERHEAD
-       bl      .do_syscall_trace_leave
-       REST_NVGPRS(r1)
-       ld      r3,GPR3(r1)
-       ld      r5,_CCR(r1)
-       clrrdi  r12,r1,THREAD_SHIFT
-       b       syscall_exit_trace_cont
-
-/* Stuff to do on exit from a system call. */
-syscall_exit_work:
-       std     r3,GPR3(r1)
-       std     r5,_CCR(r1)
-       b       .ret_from_except_lite
-
-/* Save non-volatile GPRs, if not already saved. */
-_GLOBAL(save_nvgprs)
-       ld      r11,_TRAP(r1)
-       andi.   r0,r11,1
-       beqlr-
-       SAVE_NVGPRS(r1)
-       clrrdi  r0,r11,1
-       std     r0,_TRAP(r1)
-       blr
-
-/*
- * The sigsuspend and rt_sigsuspend system calls can call do_signal
- * and thus put the process into the stopped state where we might
- * want to examine its user state with ptrace.  Therefore we need
- * to save all the nonvolatile registers (r14 - r31) before calling
- * the C code.  Similarly, fork, vfork and clone need the full
- * register state on the stack so that it can be copied to the child.
- */
-_GLOBAL(ppc32_sigsuspend)
-       bl      .save_nvgprs
-       bl      .compat_sys_sigsuspend
-       b       70f
-
-_GLOBAL(ppc64_rt_sigsuspend)
-       bl      .save_nvgprs
-       bl      .sys_rt_sigsuspend
-       b       70f
-
-_GLOBAL(ppc32_rt_sigsuspend)
-       bl      .save_nvgprs
-       bl      .compat_sys_rt_sigsuspend
-70:    cmpdi   0,r3,0
-       /* If it returned an error, we need to return via syscall_exit to set
-          the SO bit in cr0 and potentially stop for ptrace. */
-       bne     syscall_exit
-       /* If sigsuspend() returns zero, we are going into a signal handler. We
-          may need to call audit_syscall_exit() to mark the exit from sigsuspend() */
-#ifdef CONFIG_AUDIT
-       ld      r3,PACACURRENT(r13)
-       ld      r4,AUDITCONTEXT(r3)
-       cmpdi   0,r4,0
-       beq     .ret_from_except        /* No audit_context: Leave immediately. */
-       li      r4, 2                   /* AUDITSC_FAILURE */
-       li      r5,-4                   /* It's always -EINTR */
-       bl      .audit_syscall_exit
-#endif
-       b       .ret_from_except
-
-_GLOBAL(ppc_fork)
-       bl      .save_nvgprs
-       bl      .sys_fork
-       b       syscall_exit
-
-_GLOBAL(ppc_vfork)
-       bl      .save_nvgprs
-       bl      .sys_vfork
-       b       syscall_exit
-
-_GLOBAL(ppc_clone)
-       bl      .save_nvgprs
-       bl      .sys_clone
-       b       syscall_exit
-
-_GLOBAL(ppc32_swapcontext)
-       bl      .save_nvgprs
-       bl      .compat_sys_swapcontext
-       b       80f
-       
-_GLOBAL(ppc64_swapcontext)
-       bl      .save_nvgprs
-       bl      .sys_swapcontext
-       b       80f
-
-_GLOBAL(ppc32_sigreturn)
-       bl      .compat_sys_sigreturn
-       b       80f
-
-_GLOBAL(ppc32_rt_sigreturn)
-       bl      .compat_sys_rt_sigreturn
-       b       80f
-
-_GLOBAL(ppc64_rt_sigreturn)
-       bl      .sys_rt_sigreturn
-
-80:    cmpdi   0,r3,0
-       blt     syscall_exit
-       clrrdi  r4,r1,THREAD_SHIFT
-       ld      r4,TI_FLAGS(r4)
-       andi.   r4,r4,(_TIF_SYSCALL_T_OR_A|_TIF_SINGLESTEP)
-       beq+    81f
-       addi    r3,r1,STACK_FRAME_OVERHEAD
-       bl      .do_syscall_trace_leave
-81:    b       .ret_from_except
-
-_GLOBAL(ret_from_fork)
-       bl      .schedule_tail
-       REST_NVGPRS(r1)
-       li      r3,0
-       b       syscall_exit
-
-/*
- * This routine switches between two different tasks.  The process
- * state of one is saved on its kernel stack.  Then the state
- * of the other is restored from its kernel stack.  The memory
- * management hardware is updated to the second process's state.
- * Finally, we can return to the second process, via ret_from_except.
- * On entry, r3 points to the THREAD for the current task, r4
- * points to the THREAD for the new task.
- *
- * Note: there are two ways to get to the "going out" portion
- * of this code; either by coming in via the entry (_switch)
- * or via "fork" which must set up an environment equivalent
- * to the "_switch" path.  If you change this you'll have to change
- * the fork code also.
- *
- * The code which creates the new task context is in 'copy_thread'
- * in arch/ppc64/kernel/process.c
- */
-       .align  7
-_GLOBAL(_switch)
-       mflr    r0
-       std     r0,16(r1)
-       stdu    r1,-SWITCH_FRAME_SIZE(r1)
-       /* r3-r13 are caller saved -- Cort */
-       SAVE_8GPRS(14, r1)
-       SAVE_10GPRS(22, r1)
-       mflr    r20             /* Return to switch caller */
-       mfmsr   r22
-       li      r0, MSR_FP
-#ifdef CONFIG_ALTIVEC
-BEGIN_FTR_SECTION
-       oris    r0,r0,MSR_VEC@h /* Disable altivec */
-       mfspr   r24,SPRN_VRSAVE /* save vrsave register value */
-       std     r24,THREAD_VRSAVE(r3)
-END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
-#endif /* CONFIG_ALTIVEC */
-       and.    r0,r0,r22
-       beq+    1f
-       andc    r22,r22,r0
-       mtmsrd  r22
-       isync
-1:     std     r20,_NIP(r1)
-       mfcr    r23
-       std     r23,_CCR(r1)
-       std     r1,KSP(r3)      /* Set old stack pointer */
-
-#ifdef CONFIG_SMP
-       /* We need a sync somewhere here to make sure that if the
-        * previous task gets rescheduled on another CPU, it sees all
-        * stores it has performed on this one.
-        */
-       sync
-#endif /* CONFIG_SMP */
-
-       addi    r6,r4,-THREAD   /* Convert THREAD to 'current' */
-       std     r6,PACACURRENT(r13)     /* Set new 'current' */
-
-       ld      r8,KSP(r4)      /* new stack pointer */
-BEGIN_FTR_SECTION
-       clrrdi  r6,r8,28        /* get its ESID */
-       clrrdi  r9,r1,28        /* get current sp ESID */
-       clrldi. r0,r6,2         /* is new ESID c00000000? */
-       cmpd    cr1,r6,r9       /* or is new ESID the same as current ESID? */
-       cror    eq,4*cr1+eq,eq
-       beq     2f              /* if yes, don't slbie it */
-
-       /* Bolt in the new stack SLB entry */
-       ld      r7,KSP_VSID(r4) /* Get new stack's VSID */
-       oris    r0,r6,(SLB_ESID_V)@h
-       ori     r0,r0,(SLB_NUM_BOLTED-1)@l
-       slbie   r6
-       slbie   r6              /* Workaround POWER5 < DD2.1 issue */
-       slbmte  r7,r0
-       isync
-
-2:
-END_FTR_SECTION_IFSET(CPU_FTR_SLB)
-       clrrdi  r7,r8,THREAD_SHIFT      /* base of new stack */
-       /* Note: this uses SWITCH_FRAME_SIZE rather than INT_FRAME_SIZE
-          because we don't need to leave the 288-byte ABI gap at the
-          top of the kernel stack. */
-       addi    r7,r7,THREAD_SIZE-SWITCH_FRAME_SIZE
-
-       mr      r1,r8           /* start using new stack pointer */
-       std     r7,PACAKSAVE(r13)
-
-       ld      r6,_CCR(r1)
-       mtcrf   0xFF,r6
-
-#ifdef CONFIG_ALTIVEC
-BEGIN_FTR_SECTION
-       ld      r0,THREAD_VRSAVE(r4)
-       mtspr   SPRN_VRSAVE,r0          /* if G4, restore VRSAVE reg */
-END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC)
-#endif /* CONFIG_ALTIVEC */
-
-       /* r3-r13 are destroyed -- Cort */
-       REST_8GPRS(14, r1)
-       REST_10GPRS(22, r1)
-
-       /* convert old thread to its task_struct for return value */
-       addi    r3,r3,-THREAD
-       ld      r7,_NIP(r1)     /* Return to _switch caller in new task */
-       mtlr    r7
-       addi    r1,r1,SWITCH_FRAME_SIZE
-       blr
-
-       .align  7
-_GLOBAL(ret_from_except)
-       ld      r11,_TRAP(r1)
-       andi.   r0,r11,1
-       bne     .ret_from_except_lite
-       REST_NVGPRS(r1)
-
-_GLOBAL(ret_from_except_lite)
-       /*
-        * Disable interrupts so that current_thread_info()->flags
-        * can't change between when we test it and when we return
-        * from the interrupt.
-        */
-       mfmsr   r10             /* Get current interrupt state */
-       rldicl  r9,r10,48,1     /* clear MSR_EE */
-       rotldi  r9,r9,16
-       mtmsrd  r9,1            /* Update machine state */
-
-#ifdef CONFIG_PREEMPT
-       clrrdi  r9,r1,THREAD_SHIFT      /* current_thread_info() */
-       li      r0,_TIF_NEED_RESCHED    /* bits to check */
-       ld      r3,_MSR(r1)
-       ld      r4,TI_FLAGS(r9)
-       /* Move MSR_PR bit in r3 to _TIF_SIGPENDING position in r0 */
-       rlwimi  r0,r3,32+TIF_SIGPENDING-MSR_PR_LG,_TIF_SIGPENDING
-       and.    r0,r4,r0        /* check NEED_RESCHED and maybe SIGPENDING */
-       bne     do_work
-
-#else /* !CONFIG_PREEMPT */
-       ld      r3,_MSR(r1)     /* Returning to user mode? */
-       andi.   r3,r3,MSR_PR
-       beq     restore         /* if not, just restore regs and return */
-
-       /* Check current_thread_info()->flags */
-       clrrdi  r9,r1,THREAD_SHIFT
-       ld      r4,TI_FLAGS(r9)
-       andi.   r0,r4,_TIF_USER_WORK_MASK
-       bne     do_work
-#endif
-
-restore:
-#ifdef CONFIG_PPC_ISERIES
-       ld      r5,SOFTE(r1)
-       cmpdi   0,r5,0
-       beq     4f
-       /* Check for pending interrupts (iSeries) */
-       ld      r3,PACALPPACA+LPPACAANYINT(r13)
-       cmpdi   r3,0
-       beq+    4f                      /* skip do_IRQ if no interrupts */
-
-       li      r3,0
-       stb     r3,PACAPROCENABLED(r13) /* ensure we are soft-disabled */
-       ori     r10,r10,MSR_EE
-       mtmsrd  r10                     /* hard-enable again */
-       addi    r3,r1,STACK_FRAME_OVERHEAD
-       bl      .do_IRQ
-       b       .ret_from_except_lite           /* loop back and handle more */
-
-4:     stb     r5,PACAPROCENABLED(r13)
-#endif
-
-       ld      r3,_MSR(r1)
-       andi.   r0,r3,MSR_RI
-       beq-    unrecov_restore
-
-       andi.   r0,r3,MSR_PR
-
-       /*
-        * r13 is our per cpu area, only restore it if we are returning to
-        * userspace
-        */
-       beq     1f
-       REST_GPR(13, r1)
-1:
-       ld      r3,_CTR(r1)
-       ld      r0,_LINK(r1)
-       mtctr   r3
-       mtlr    r0
-       ld      r3,_XER(r1)
-       mtspr   SPRN_XER,r3
-
-       REST_8GPRS(5, r1)
-
-       stdcx.  r0,0,r1         /* to clear the reservation */
-
-       mfmsr   r0
-       li      r2, MSR_RI
-       andc    r0,r0,r2
-       mtmsrd  r0,1
-
-       ld      r0,_MSR(r1)
-       mtspr   SPRN_SRR1,r0
-
-       ld      r2,_CCR(r1)
-       mtcrf   0xFF,r2
-       ld      r2,_NIP(r1)
-       mtspr   SPRN_SRR0,r2
-
-       ld      r0,GPR0(r1)
-       ld      r2,GPR2(r1)
-       ld      r3,GPR3(r1)
-       ld      r4,GPR4(r1)
-       ld      r1,GPR1(r1)
-
-       rfid
-       b       .       /* prevent speculative execution */
-
-/* Note: this must change if we start using the TIF_NOTIFY_RESUME bit */
-do_work:
-#ifdef CONFIG_PREEMPT
-       andi.   r0,r3,MSR_PR    /* Returning to user mode? */
-       bne     user_work
-       /* Check that preempt_count() == 0 and interrupts are enabled */
-       lwz     r8,TI_PREEMPT(r9)
-       cmpwi   cr1,r8,0
-#ifdef CONFIG_PPC_ISERIES
-       ld      r0,SOFTE(r1)
-       cmpdi   r0,0
-#else
-       andi.   r0,r3,MSR_EE
-#endif
-       crandc  eq,cr1*4+eq,eq
-       bne     restore
-       /* here we are preempting the current task */
-1:
-#ifdef CONFIG_PPC_ISERIES
-       li      r0,1
-       stb     r0,PACAPROCENABLED(r13)
-#endif
-       ori     r10,r10,MSR_EE
-       mtmsrd  r10,1           /* reenable interrupts */
-       bl      .preempt_schedule
-       mfmsr   r10
-       clrrdi  r9,r1,THREAD_SHIFT
-       rldicl  r10,r10,48,1    /* disable interrupts again */
-       rotldi  r10,r10,16
-       mtmsrd  r10,1
-       ld      r4,TI_FLAGS(r9)
-       andi.   r0,r4,_TIF_NEED_RESCHED
-       bne     1b
-       b       restore
-
-user_work:
-#endif
-       /* Enable interrupts */
-       ori     r10,r10,MSR_EE
-       mtmsrd  r10,1
-
-       andi.   r0,r4,_TIF_NEED_RESCHED
-       beq     1f
-       bl      .schedule
-       b       .ret_from_except_lite
-
-1:     bl      .save_nvgprs
-       li      r3,0
-       addi    r4,r1,STACK_FRAME_OVERHEAD
-       bl      .do_signal
-       b       .ret_from_except
-
-unrecov_restore:
-       addi    r3,r1,STACK_FRAME_OVERHEAD
-       bl      .unrecoverable_exception
-       b       unrecov_restore
-
-#ifdef CONFIG_PPC_RTAS
-/*
- * On CHRP, the Run-Time Abstraction Services (RTAS) have to be
- * called with the MMU off.
- *
- * In addition, we need to be in 32b mode, at least for now.
- * 
- * Note: r3 is an input parameter to rtas, so don't trash it...
- */
-_GLOBAL(enter_rtas)
-       mflr    r0
-       std     r0,16(r1)
-        stdu   r1,-RTAS_FRAME_SIZE(r1) /* Save SP and create stack space. */
-
-       /* Because RTAS is running in 32b mode, it clobbers the high order half
-        * of all registers that it saves.  We therefore save those registers
-        * RTAS might touch to the stack.  (r0, r3-r13 are caller saved)
-        */
-       SAVE_GPR(2, r1)                 /* Save the TOC */
-       SAVE_GPR(13, r1)                /* Save paca */
-       SAVE_8GPRS(14, r1)              /* Save the non-volatiles */
-       SAVE_10GPRS(22, r1)             /* ditto */
-
-       mfcr    r4
-       std     r4,_CCR(r1)
-       mfctr   r5
-       std     r5,_CTR(r1)
-       mfspr   r6,SPRN_XER
-       std     r6,_XER(r1)
-       mfdar   r7
-       std     r7,_DAR(r1)
-       mfdsisr r8
-       std     r8,_DSISR(r1)
-       mfsrr0  r9
-       std     r9,_SRR0(r1)
-       mfsrr1  r10
-       std     r10,_SRR1(r1)
-
-       /* There is no way it is acceptable to get here with interrupts enabled,
-        * check it with the asm equivalent of WARN_ON
-        */
-       mfmsr   r6
-       andi.   r0,r6,MSR_EE
-1:     tdnei   r0,0
-.section __bug_table,"a"
-       .llong  1b,__LINE__ + 0x1000000, 1f, 2f
-.previous
-.section .rodata,"a"
-1:     .asciz  __FILE__
-2:     .asciz "enter_rtas"
-.previous
-       
-       /* Unfortunately, the stack pointer and the MSR are also clobbered,
-        * so they are saved in the PACA which allows us to restore
-        * our original state after RTAS returns.
-         */
-       std     r1,PACAR1(r13)
-        std    r6,PACASAVEDMSR(r13)
-
-       /* Setup our real return addr */        
-       SET_REG_TO_LABEL(r4,.rtas_return_loc)
-       SET_REG_TO_CONST(r9,KERNELBASE)
-       sub     r4,r4,r9
-               mtlr    r4
-
-       li      r0,0
-       ori     r0,r0,MSR_EE|MSR_SE|MSR_BE|MSR_RI
-       andc    r0,r6,r0
-       
-        li      r9,1
-        rldicr  r9,r9,MSR_SF_LG,(63-MSR_SF_LG)
-       ori     r9,r9,MSR_IR|MSR_DR|MSR_FE0|MSR_FE1|MSR_FP
-       andc    r6,r0,r9
-       ori     r6,r6,MSR_RI
-       sync                            /* disable interrupts so SRR0/1 */
-       mtmsrd  r0                      /* don't get trashed */
-
-       SET_REG_TO_LABEL(r4,rtas)
-       ld      r5,RTASENTRY(r4)        /* get the rtas->entry value */
-       ld      r4,RTASBASE(r4)         /* get the rtas->base value */
-       
-       mtspr   SPRN_SRR0,r5
-       mtspr   SPRN_SRR1,r6
-       rfid
-       b       .       /* prevent speculative execution */
-
-_STATIC(rtas_return_loc)
-       /* relocation is off at this point */
-       mfspr   r4,SPRN_SPRG3           /* Get PACA */
-       SET_REG_TO_CONST(r5, KERNELBASE)
-        sub     r4,r4,r5                /* RELOC the PACA base pointer */
-
-       mfmsr   r6
-       li      r0,MSR_RI
-       andc    r6,r6,r0
-       sync    
-       mtmsrd  r6
-        
-        ld     r1,PACAR1(r4)           /* Restore our SP */
-       LOADADDR(r3,.rtas_restore_regs)
-        ld     r4,PACASAVEDMSR(r4)     /* Restore our MSR */
-
-       mtspr   SPRN_SRR0,r3
-       mtspr   SPRN_SRR1,r4
-       rfid
-       b       .       /* prevent speculative execution */
-
-_STATIC(rtas_restore_regs)
-       /* relocation is on at this point */
-       REST_GPR(2, r1)                 /* Restore the TOC */
-       REST_GPR(13, r1)                /* Restore paca */
-       REST_8GPRS(14, r1)              /* Restore the non-volatiles */
-       REST_10GPRS(22, r1)             /* ditto */
-
-       mfspr   r13,SPRN_SPRG3
-
-       ld      r4,_CCR(r1)
-       mtcr    r4
-       ld      r5,_CTR(r1)
-       mtctr   r5
-       ld      r6,_XER(r1)
-       mtspr   SPRN_XER,r6
-       ld      r7,_DAR(r1)
-       mtdar   r7
-       ld      r8,_DSISR(r1)
-       mtdsisr r8
-       ld      r9,_SRR0(r1)
-       mtsrr0  r9
-       ld      r10,_SRR1(r1)
-       mtsrr1  r10
-
-        addi   r1,r1,RTAS_FRAME_SIZE   /* Unstack our frame */
-       ld      r0,16(r1)               /* get return address */
-
-       mtlr    r0
-        blr                            /* return to caller */
-
-#endif /* CONFIG_PPC_RTAS */
-
-#ifdef CONFIG_PPC_MULTIPLATFORM
-
-_GLOBAL(enter_prom)
-       mflr    r0
-       std     r0,16(r1)
-        stdu   r1,-PROM_FRAME_SIZE(r1) /* Save SP and create stack space */
-
-       /* Because PROM is running in 32b mode, it clobbers the high order half
-        * of all registers that it saves.  We therefore save those registers
-        * PROM might touch to the stack.  (r0, r3-r13 are caller saved)
-        */
-       SAVE_8GPRS(2, r1)
-       SAVE_GPR(13, r1)
-       SAVE_8GPRS(14, r1)
-       SAVE_10GPRS(22, r1)
-       mfcr    r4
-       std     r4,_CCR(r1)
-       mfctr   r5
-       std     r5,_CTR(r1)
-       mfspr   r6,SPRN_XER
-       std     r6,_XER(r1)
-       mfdar   r7
-       std     r7,_DAR(r1)
-       mfdsisr r8
-       std     r8,_DSISR(r1)
-       mfsrr0  r9
-       std     r9,_SRR0(r1)
-       mfsrr1  r10
-       std     r10,_SRR1(r1)
-       mfmsr   r11
-       std     r11,_MSR(r1)
-
-       /* Get the PROM entrypoint */
-       ld      r0,GPR4(r1)
-       mtlr    r0
-
-       /* Switch MSR to 32 bits mode
-        */
-        mfmsr   r11
-        li      r12,1
-        rldicr  r12,r12,MSR_SF_LG,(63-MSR_SF_LG)
-        andc    r11,r11,r12
-        li      r12,1
-        rldicr  r12,r12,MSR_ISF_LG,(63-MSR_ISF_LG)
-        andc    r11,r11,r12
-        mtmsrd  r11
-        isync
-
-       /* Restore arguments & enter PROM here... */
-       ld      r3,GPR3(r1)
-       blrl
-
-       /* Just make sure that r1 top 32 bits didn't get
-        * corrupt by OF
-        */
-       rldicl  r1,r1,0,32
-
-       /* Restore the MSR (back to 64 bits) */
-       ld      r0,_MSR(r1)
-       mtmsrd  r0
-        isync
-
-       /* Restore other registers */
-       REST_GPR(2, r1)
-       REST_GPR(13, r1)
-       REST_8GPRS(14, r1)
-       REST_10GPRS(22, r1)
-       ld      r4,_CCR(r1)
-       mtcr    r4
-       ld      r5,_CTR(r1)
-       mtctr   r5
-       ld      r6,_XER(r1)
-       mtspr   SPRN_XER,r6
-       ld      r7,_DAR(r1)
-       mtdar   r7
-       ld      r8,_DSISR(r1)
-       mtdsisr r8
-       ld      r9,_SRR0(r1)
-       mtsrr0  r9
-       ld      r10,_SRR1(r1)
-       mtsrr1  r10
-       
-        addi   r1,r1,PROM_FRAME_SIZE
-       ld      r0,16(r1)
-       mtlr    r0
-        blr
-       
-#endif /* CONFIG_PPC_MULTIPLATFORM */
index 9cae3d5c40e680e6a4d0d5aa83d2e7ceff21029f..077507ffbab80e1601b69e037ccb970d0956f6c6 100644 (file)
@@ -867,566 +867,3 @@ _GLOBAL(kexec_sequence)
        li      r5,0
        blr     /* image->start(physid, image->start, 0); */
 #endif /* CONFIG_KEXEC */
-
-/* Why isn't this a) automatic, b) written in 'C'? */  
-       .balign 8
-_GLOBAL(sys_call_table32)
-       .llong .sys_restart_syscall     /* 0 */
-       .llong .sys_exit
-       .llong .ppc_fork
-       .llong .sys_read
-       .llong .sys_write
-       .llong .compat_sys_open         /* 5 */
-       .llong .sys_close
-       .llong .compat_sys_waitpid
-       .llong .compat_sys_creat
-       .llong .sys_link
-       .llong .sys_unlink              /* 10 */
-       .llong .compat_sys_execve
-       .llong .sys_chdir
-       .llong .compat_sys_time
-       .llong .sys_mknod
-       .llong .sys_chmod               /* 15 */
-       .llong .sys_lchown
-       .llong .sys_ni_syscall          /* old break syscall */
-       .llong .sys_ni_syscall          /* old stat syscall */
-       .llong .ppc32_lseek
-       .llong .sys_getpid              /* 20 */
-       .llong .compat_sys_mount
-       .llong .sys_oldumount
-       .llong .sys_setuid
-       .llong .sys_getuid
-       .llong .compat_sys_stime        /* 25 */
-       .llong .compat_sys_ptrace
-       .llong .sys_alarm
-       .llong .sys_ni_syscall          /* old fstat syscall */
-       .llong .compat_sys_pause
-       .llong .compat_sys_utime        /* 30 */
-       .llong .sys_ni_syscall          /* old stty syscall */
-       .llong .sys_ni_syscall          /* old gtty syscall */
-       .llong .compat_sys_access
-       .llong .compat_sys_nice
-       .llong .sys_ni_syscall          /* 35 - old ftime syscall */
-       .llong .sys_sync
-       .llong .compat_sys_kill
-       .llong .sys_rename
-       .llong .compat_sys_mkdir
-       .llong .sys_rmdir               /* 40 */
-       .llong .sys_dup
-       .llong .sys_pipe
-       .llong .compat_sys_times
-       .llong .sys_ni_syscall          /* old prof syscall */
-       .llong .sys_brk                 /* 45 */
-       .llong .sys_setgid
-       .llong .sys_getgid
-       .llong .sys_signal
-       .llong .sys_geteuid
-       .llong .sys_getegid             /* 50 */
-       .llong .sys_acct
-       .llong .sys_umount
-       .llong .sys_ni_syscall          /* old lock syscall */
-       .llong .compat_sys_ioctl
-       .llong .compat_sys_fcntl                /* 55 */
-       .llong .sys_ni_syscall          /* old mpx syscall */
-       .llong .compat_sys_setpgid
-       .llong .sys_ni_syscall          /* old ulimit syscall */
-       .llong .sys_olduname
-       .llong .compat_sys_umask        /* 60 */
-       .llong .sys_chroot
-       .llong .sys_ustat
-       .llong .sys_dup2
-       .llong .sys_getppid
-       .llong .sys_getpgrp             /* 65 */
-       .llong .sys_setsid
-       .llong .compat_sys_sigaction
-       .llong .sys_sgetmask
-       .llong .compat_sys_ssetmask
-       .llong .sys_setreuid            /* 70 */
-       .llong .sys_setregid
-       .llong .ppc32_sigsuspend
-       .llong .compat_sys_sigpending
-       .llong .compat_sys_sethostname
-       .llong .compat_sys_setrlimit    /* 75 */
-       .llong .compat_sys_old_getrlimit
-       .llong .compat_sys_getrusage
-       .llong .compat_sys_gettimeofday
-       .llong .compat_sys_settimeofday
-       .llong .compat_sys_getgroups    /* 80 */
-       .llong .compat_sys_setgroups
-       .llong .sys_ni_syscall          /* old select syscall */
-       .llong .sys_symlink
-       .llong .sys_ni_syscall          /* old lstat syscall */
-       .llong .compat_sys_readlink     /* 85 */
-       .llong .sys_uselib
-       .llong .sys_swapon
-       .llong .sys_reboot
-       .llong .old32_readdir
-       .llong .sys_mmap                /* 90 */
-       .llong .sys_munmap
-       .llong .sys_truncate
-       .llong .sys_ftruncate
-       .llong .sys_fchmod
-       .llong .sys_fchown              /* 95 */
-       .llong .compat_sys_getpriority
-       .llong .compat_sys_setpriority
-       .llong .sys_ni_syscall          /* old profil syscall */
-       .llong .compat_sys_statfs
-       .llong .compat_sys_fstatfs      /* 100 */
-       .llong .sys_ni_syscall          /* old ioperm syscall */
-       .llong .compat_sys_socketcall
-       .llong .compat_sys_syslog
-       .llong .compat_sys_setitimer
-       .llong .compat_sys_getitimer    /* 105 */
-       .llong .compat_sys_newstat
-       .llong .compat_sys_newlstat
-       .llong .compat_sys_newfstat
-       .llong .sys_uname
-       .llong .sys_ni_syscall          /* 110 old iopl syscall */
-       .llong .sys_vhangup
-       .llong .sys_ni_syscall          /* old idle syscall */
-       .llong .sys_ni_syscall          /* old vm86 syscall */
-       .llong .compat_sys_wait4
-       .llong .sys_swapoff             /* 115 */
-       .llong .compat_sys_sysinfo
-       .llong .sys32_ipc
-       .llong .sys_fsync
-       .llong .ppc32_sigreturn
-       .llong .ppc_clone               /* 120 */
-       .llong .compat_sys_setdomainname
-       .llong .ppc_newuname
-       .llong .sys_ni_syscall          /* old modify_ldt syscall */
-       .llong .compat_sys_adjtimex
-       .llong .sys_mprotect            /* 125 */
-       .llong .compat_sys_sigprocmask
-       .llong .sys_ni_syscall          /* old create_module syscall */
-       .llong .sys_init_module
-       .llong .sys_delete_module
-       .llong .sys_ni_syscall          /* 130 old get_kernel_syms syscall */
-       .llong .sys_quotactl
-       .llong .compat_sys_getpgid
-       .llong .sys_fchdir
-       .llong .sys_bdflush
-       .llong .compat_sys_sysfs        /* 135 */
-       .llong .ppc64_personality
-       .llong .sys_ni_syscall          /* for afs_syscall */
-       .llong .sys_setfsuid
-       .llong .sys_setfsgid
-       .llong .sys_llseek              /* 140 */
-        .llong .compat_sys_getdents
-       .llong .ppc32_select
-       .llong .sys_flock
-       .llong .sys_msync
-       .llong .compat_sys_readv        /* 145 */
-       .llong .compat_sys_writev
-       .llong .compat_sys_getsid
-       .llong .sys_fdatasync
-       .llong .compat_sys_sysctl
-       .llong .sys_mlock               /* 150 */
-       .llong .sys_munlock
-       .llong .sys_mlockall
-       .llong .sys_munlockall
-       .llong .compat_sys_sched_setparam
-       .llong .compat_sys_sched_getparam       /* 155 */
-       .llong .compat_sys_sched_setscheduler
-       .llong .compat_sys_sched_getscheduler
-       .llong .sys_sched_yield
-       .llong .compat_sys_sched_get_priority_max
-       .llong .compat_sys_sched_get_priority_min  /* 160 */
-       .llong .compat_sys_sched_rr_get_interval
-       .llong .compat_sys_nanosleep
-       .llong .sys_mremap
-       .llong .sys_setresuid
-       .llong .sys_getresuid           /* 165 */
-       .llong .sys_ni_syscall          /* old query_module syscall */
-       .llong .sys_poll
-       .llong .compat_sys_nfsservctl
-       .llong .sys_setresgid
-       .llong .sys_getresgid           /* 170 */
-       .llong .compat_sys_prctl
-       .llong .ppc32_rt_sigreturn
-       .llong .compat_sys_rt_sigaction
-       .llong .compat_sys_rt_sigprocmask
-       .llong .compat_sys_rt_sigpending     /* 175 */
-       .llong .compat_sys_rt_sigtimedwait
-       .llong .compat_sys_rt_sigqueueinfo
-       .llong .ppc32_rt_sigsuspend
-       .llong .compat_sys_pread64
-       .llong .compat_sys_pwrite64     /* 180 */
-       .llong .sys_chown
-       .llong .sys_getcwd
-       .llong .sys_capget
-       .llong .sys_capset
-       .llong .compat_sys_sigaltstack  /* 185 */
-       .llong .compat_sys_sendfile
-       .llong .sys_ni_syscall          /* reserved for streams1 */
-       .llong .sys_ni_syscall          /* reserved for streams2 */
-       .llong .ppc_vfork
-       .llong .compat_sys_getrlimit            /* 190 */
-       .llong .compat_sys_readahead
-       .llong .compat_sys_mmap2
-       .llong .compat_sys_truncate64
-       .llong .compat_sys_ftruncate64
-       .llong .sys_stat64              /* 195 */
-       .llong .sys_lstat64
-       .llong .sys_fstat64
-       .llong .compat_sys_pciconfig_read
-       .llong .compat_sys_pciconfig_write
-       .llong .compat_sys_pciconfig_iobase     /* 200 - pciconfig_iobase */
-       .llong .sys_ni_syscall          /* reserved for MacOnLinux */
-       .llong .sys_getdents64
-       .llong .sys_pivot_root
-       .llong .compat_sys_fcntl64
-       .llong .sys_madvise             /* 205 */
-       .llong .sys_mincore
-       .llong .sys_gettid
-       .llong .sys_tkill
-       .llong .sys_setxattr
-       .llong .sys_lsetxattr           /* 210 */
-       .llong .sys_fsetxattr
-       .llong .sys_getxattr
-       .llong .sys_lgetxattr
-       .llong .sys_fgetxattr
-       .llong .sys_listxattr           /* 215 */
-       .llong .sys_llistxattr
-       .llong .sys_flistxattr
-       .llong .sys_removexattr
-       .llong .sys_lremovexattr
-       .llong .sys_fremovexattr        /* 220 */
-       .llong .compat_sys_futex
-       .llong .compat_sys_sched_setaffinity
-       .llong .compat_sys_sched_getaffinity
-       .llong .sys_ni_syscall
-       .llong .sys_ni_syscall          /* 225 - reserved for tux */
-       .llong .compat_sys_sendfile64
-       .llong .compat_sys_io_setup
-       .llong .sys_io_destroy
-       .llong .compat_sys_io_getevents
-       .llong .compat_sys_io_submit
-       .llong .sys_io_cancel
-       .llong .sys_set_tid_address
-       .llong .ppc32_fadvise64
-       .llong .sys_exit_group
-       .llong .ppc32_lookup_dcookie    /* 235 */
-       .llong .sys_epoll_create
-       .llong .sys_epoll_ctl
-       .llong .sys_epoll_wait
-       .llong .sys_remap_file_pages
-       .llong .ppc32_timer_create      /* 240 */
-       .llong .compat_sys_timer_settime
-       .llong .compat_sys_timer_gettime
-       .llong .sys_timer_getoverrun
-       .llong .sys_timer_delete
-       .llong .compat_sys_clock_settime/* 245 */
-       .llong .compat_sys_clock_gettime
-       .llong .compat_sys_clock_getres
-       .llong .compat_sys_clock_nanosleep
-       .llong .ppc32_swapcontext
-       .llong .compat_sys_tgkill       /* 250 */
-       .llong .compat_sys_utimes
-       .llong .compat_sys_statfs64
-       .llong .compat_sys_fstatfs64
-       .llong .ppc_fadvise64_64        /* 32bit only fadvise64_64 */
-       .llong .ppc_rtas                /* 255 */
-       .llong .sys_ni_syscall          /* 256 reserved for sys_debug_setcontext */
-       .llong .sys_ni_syscall          /* 257 reserved for vserver */
-       .llong .sys_ni_syscall          /* 258 reserved for new sys_remap_file_pages */
-       .llong .compat_sys_mbind
-       .llong .compat_sys_get_mempolicy        /* 260 */
-       .llong .compat_sys_set_mempolicy
-       .llong .compat_sys_mq_open
-       .llong .sys_mq_unlink
-       .llong .compat_sys_mq_timedsend
-       .llong .compat_sys_mq_timedreceive /* 265 */
-       .llong .compat_sys_mq_notify
-       .llong .compat_sys_mq_getsetattr
-       .llong .compat_sys_kexec_load
-       .llong .compat_sys_add_key
-       .llong .compat_sys_request_key  /* 270 */
-       .llong .compat_sys_keyctl
-       .llong .compat_sys_waitid
-       .llong .compat_sys_ioprio_set
-       .llong .compat_sys_ioprio_get
-       .llong .sys_inotify_init        /* 275 */
-       .llong .sys_inotify_add_watch
-       .llong .sys_inotify_rm_watch
-
-       .balign 8
-_GLOBAL(sys_call_table)
-       .llong .sys_restart_syscall     /* 0 */
-       .llong .sys_exit
-       .llong .ppc_fork
-       .llong .sys_read
-       .llong .sys_write
-       .llong .sys_open                /* 5 */
-       .llong .sys_close
-       .llong .sys_waitpid
-       .llong .sys_creat
-       .llong .sys_link
-       .llong .sys_unlink              /* 10 */
-       .llong .sys_execve
-       .llong .sys_chdir
-       .llong .sys64_time
-       .llong .sys_mknod
-       .llong .sys_chmod               /* 15 */
-       .llong .sys_lchown
-       .llong .sys_ni_syscall          /* old break syscall */
-       .llong .sys_ni_syscall          /* old stat syscall */
-       .llong .sys_lseek
-       .llong .sys_getpid              /* 20 */
-       .llong .sys_mount
-       .llong .sys_ni_syscall          /* old umount syscall */
-       .llong .sys_setuid
-       .llong .sys_getuid
-       .llong .sys_stime               /* 25 */
-       .llong .sys_ptrace
-       .llong .sys_alarm
-       .llong .sys_ni_syscall          /* old fstat syscall */
-       .llong .sys_pause
-       .llong .sys_utime               /* 30 */
-       .llong .sys_ni_syscall          /* old stty syscall */
-       .llong .sys_ni_syscall          /* old gtty syscall */
-       .llong .sys_access
-       .llong .sys_nice
-       .llong .sys_ni_syscall          /* 35 - old ftime syscall */
-       .llong .sys_sync
-       .llong .sys_kill
-       .llong .sys_rename
-       .llong .sys_mkdir
-       .llong .sys_rmdir               /* 40 */
-       .llong .sys_dup
-       .llong .sys_pipe
-       .llong .sys_times
-       .llong .sys_ni_syscall          /* old prof syscall */
-       .llong .sys_brk                 /* 45 */
-       .llong .sys_setgid
-       .llong .sys_getgid
-       .llong .sys_signal
-       .llong .sys_geteuid
-       .llong .sys_getegid             /* 50 */
-       .llong .sys_acct
-       .llong .sys_umount
-       .llong .sys_ni_syscall          /* old lock syscall */
-       .llong .sys_ioctl
-       .llong .sys_fcntl               /* 55 */
-       .llong .sys_ni_syscall          /* old mpx syscall */
-       .llong .sys_setpgid
-       .llong .sys_ni_syscall          /* old ulimit syscall */
-       .llong .sys_ni_syscall          /* old uname syscall */
-       .llong .sys_umask               /* 60 */
-       .llong .sys_chroot
-       .llong .sys_ustat
-       .llong .sys_dup2
-       .llong .sys_getppid
-       .llong .sys_getpgrp             /* 65 */
-       .llong .sys_setsid
-       .llong .sys_ni_syscall
-       .llong .sys_sgetmask
-       .llong .sys_ssetmask
-       .llong .sys_setreuid            /* 70 */
-       .llong .sys_setregid
-       .llong .sys_ni_syscall
-       .llong .sys_ni_syscall
-       .llong .sys_sethostname
-       .llong .sys_setrlimit           /* 75 */
-       .llong .sys_ni_syscall          /* old getrlimit syscall */
-       .llong .sys_getrusage
-       .llong .sys_gettimeofday
-       .llong .sys_settimeofday
-       .llong .sys_getgroups           /* 80 */
-       .llong .sys_setgroups
-       .llong .sys_ni_syscall          /* old select syscall */
-       .llong .sys_symlink
-       .llong .sys_ni_syscall          /* old lstat syscall */
-       .llong .sys_readlink            /* 85 */
-       .llong .sys_uselib
-       .llong .sys_swapon
-       .llong .sys_reboot
-       .llong .sys_ni_syscall          /* old readdir syscall */
-       .llong .sys_mmap                /* 90 */
-       .llong .sys_munmap
-       .llong .sys_truncate
-       .llong .sys_ftruncate
-       .llong .sys_fchmod
-       .llong .sys_fchown              /* 95 */
-       .llong .sys_getpriority
-       .llong .sys_setpriority
-       .llong .sys_ni_syscall          /* old profil syscall holder */
-       .llong .sys_statfs
-       .llong .sys_fstatfs             /* 100 */
-       .llong .sys_ni_syscall          /* old ioperm syscall */
-       .llong .sys_socketcall
-       .llong .sys_syslog
-       .llong .sys_setitimer
-       .llong .sys_getitimer           /* 105 */
-       .llong .sys_newstat
-       .llong .sys_newlstat
-       .llong .sys_newfstat
-       .llong .sys_ni_syscall          /* old uname syscall */
-       .llong .sys_ni_syscall          /* 110 old iopl syscall */
-       .llong .sys_vhangup
-       .llong .sys_ni_syscall          /* old idle syscall */
-       .llong .sys_ni_syscall          /* old vm86 syscall */
-       .llong .sys_wait4
-       .llong .sys_swapoff             /* 115 */
-       .llong .sys_sysinfo
-       .llong .sys_ipc
-       .llong .sys_fsync
-       .llong .sys_ni_syscall
-       .llong .ppc_clone               /* 120 */
-       .llong .sys_setdomainname
-       .llong .ppc_newuname
-       .llong .sys_ni_syscall          /* old modify_ldt syscall */
-       .llong .sys_adjtimex
-       .llong .sys_mprotect            /* 125 */
-       .llong .sys_ni_syscall
-       .llong .sys_ni_syscall          /* old create_module syscall */
-       .llong .sys_init_module
-       .llong .sys_delete_module
-       .llong .sys_ni_syscall          /* 130 old get_kernel_syms syscall */
-       .llong .sys_quotactl
-       .llong .sys_getpgid
-       .llong .sys_fchdir
-       .llong .sys_bdflush
-       .llong .sys_sysfs               /* 135 */
-       .llong .ppc64_personality
-       .llong .sys_ni_syscall          /* for afs_syscall */
-       .llong .sys_setfsuid
-       .llong .sys_setfsgid
-       .llong .sys_llseek              /* 140 */
-        .llong .sys_getdents
-       .llong .sys_select
-       .llong .sys_flock
-       .llong .sys_msync
-       .llong .sys_readv               /* 145 */
-       .llong .sys_writev
-       .llong .sys_getsid
-       .llong .sys_fdatasync
-       .llong .sys_sysctl
-       .llong .sys_mlock               /* 150 */
-       .llong .sys_munlock
-       .llong .sys_mlockall
-       .llong .sys_munlockall
-       .llong .sys_sched_setparam
-       .llong .sys_sched_getparam      /* 155 */
-       .llong .sys_sched_setscheduler
-       .llong .sys_sched_getscheduler
-       .llong .sys_sched_yield
-       .llong .sys_sched_get_priority_max
-       .llong .sys_sched_get_priority_min  /* 160 */
-       .llong .sys_sched_rr_get_interval
-       .llong .sys_nanosleep
-       .llong .sys_mremap
-       .llong .sys_setresuid
-       .llong .sys_getresuid           /* 165 */
-       .llong .sys_ni_syscall          /* old query_module syscall */
-       .llong .sys_poll
-       .llong .sys_nfsservctl
-       .llong .sys_setresgid
-       .llong .sys_getresgid           /* 170 */
-       .llong .sys_prctl
-       .llong .ppc64_rt_sigreturn
-       .llong .sys_rt_sigaction
-       .llong .sys_rt_sigprocmask      
-       .llong .sys_rt_sigpending       /* 175 */
-       .llong .sys_rt_sigtimedwait
-       .llong .sys_rt_sigqueueinfo
-       .llong .ppc64_rt_sigsuspend
-       .llong .sys_pread64
-       .llong .sys_pwrite64            /* 180 */
-       .llong .sys_chown
-       .llong .sys_getcwd
-       .llong .sys_capget
-       .llong .sys_capset
-       .llong .sys_sigaltstack         /* 185 */
-       .llong .sys_sendfile64
-       .llong .sys_ni_syscall          /* reserved for streams1 */
-       .llong .sys_ni_syscall          /* reserved for streams2 */
-       .llong .ppc_vfork
-       .llong .sys_getrlimit           /* 190 */
-       .llong .sys_readahead
-       .llong .sys_ni_syscall          /* 32bit only mmap2 */
-       .llong .sys_ni_syscall          /* 32bit only truncate64 */
-       .llong .sys_ni_syscall          /* 32bit only ftruncate64 */
-       .llong .sys_ni_syscall          /* 195 - 32bit only stat64 */
-       .llong .sys_ni_syscall          /* 32bit only lstat64 */
-       .llong .sys_ni_syscall          /* 32bit only fstat64 */
-       .llong .sys_pciconfig_read
-       .llong .sys_pciconfig_write
-       .llong .sys_pciconfig_iobase    /* 200 - pciconfig_iobase */
-       .llong .sys_ni_syscall          /* reserved for MacOnLinux */
-       .llong .sys_getdents64
-       .llong .sys_pivot_root
-       .llong .sys_ni_syscall          /* 32bit only fcntl64 */
-       .llong .sys_madvise             /* 205 */
-       .llong .sys_mincore
-       .llong .sys_gettid
-       .llong .sys_tkill
-       .llong .sys_setxattr
-       .llong .sys_lsetxattr           /* 210 */
-       .llong .sys_fsetxattr
-       .llong .sys_getxattr
-       .llong .sys_lgetxattr
-       .llong .sys_fgetxattr
-       .llong .sys_listxattr           /* 215 */
-       .llong .sys_llistxattr
-       .llong .sys_flistxattr
-       .llong .sys_removexattr
-       .llong .sys_lremovexattr
-       .llong .sys_fremovexattr        /* 220 */
-       .llong .sys_futex
-       .llong .sys_sched_setaffinity
-       .llong .sys_sched_getaffinity
-       .llong .sys_ni_syscall
-       .llong .sys_ni_syscall          /* 225 - reserved for tux */
-       .llong .sys_ni_syscall          /* 32bit only sendfile64 */
-       .llong .sys_io_setup
-       .llong .sys_io_destroy
-       .llong .sys_io_getevents
-       .llong .sys_io_submit           /* 230 */
-       .llong .sys_io_cancel
-       .llong .sys_set_tid_address
-       .llong .sys_fadvise64
-       .llong .sys_exit_group
-       .llong .sys_lookup_dcookie      /* 235 */
-       .llong .sys_epoll_create
-       .llong .sys_epoll_ctl
-       .llong .sys_epoll_wait
-       .llong .sys_remap_file_pages
-       .llong .sys_timer_create        /* 240 */
-       .llong .sys_timer_settime
-       .llong .sys_timer_gettime
-       .llong .sys_timer_getoverrun
-       .llong .sys_timer_delete
-       .llong .sys_clock_settime       /* 245 */
-       .llong .sys_clock_gettime
-       .llong .sys_clock_getres
-       .llong .sys_clock_nanosleep
-       .llong .ppc64_swapcontext
-       .llong .sys_tgkill              /* 250 */
-       .llong .sys_utimes
-       .llong .sys_statfs64
-       .llong .sys_fstatfs64
-       .llong .sys_ni_syscall          /* 32bit only fadvise64_64 */
-       .llong .ppc_rtas                /* 255 */
-       .llong .sys_ni_syscall          /* 256 reserved for sys_debug_setcontext */
-       .llong .sys_ni_syscall          /* 257 reserved for vserver */
-       .llong .sys_ni_syscall          /* 258 reserved for new sys_remap_file_pages */
-       .llong .sys_mbind
-       .llong .sys_get_mempolicy       /* 260 */
-       .llong .sys_set_mempolicy
-       .llong .sys_mq_open
-       .llong .sys_mq_unlink
-       .llong .sys_mq_timedsend
-       .llong .sys_mq_timedreceive     /* 265 */
-       .llong .sys_mq_notify
-       .llong .sys_mq_getsetattr
-       .llong .sys_kexec_load
-       .llong .sys_add_key
-       .llong .sys_request_key         /* 270 */
-       .llong .sys_keyctl
-       .llong .sys_waitid
-       .llong .sys_ioprio_set
-       .llong .sys_ioprio_get
-       .llong .sys_inotify_init        /* 275 */
-       .llong .sys_inotify_add_watch
-       .llong .sys_inotify_rm_watch