~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/sparc/kernel/entry.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/sparc/kernel/entry.S (Version linux-6.12-rc7) and /arch/i386/kernel/entry.S (Version linux-2.6.0)


  1 /* SPDX-License-Identifier: GPL-2.0 */         !!   1 /*
  2 /* arch/sparc/kernel/entry.S:  Sparc trap low- !!   2  *  linux/arch/i386/entry.S
  3  *                                                  3  *
  4  * Copyright (C) 1995, 2007 David S. Miller (d !!   4  *  Copyright (C) 1991, 1992  Linus Torvalds
  5  * Copyright (C) 1996 Eddie C. Dost   (ecd@sky << 
  6  * Copyright (C) 1996 Miguel de Icaza (miguel@ << 
  7  * Copyright (C) 1996-1999 Jakub Jelinek   (jj << 
  8  * Copyright (C) 1997 Anton Blanchard (anton@p << 
  9  */                                                 5  */
 10                                                     6 
 11 #include <linux/export.h>                      !!   7 /*
 12 #include <linux/linkage.h>                     !!   8  * entry.S contains the system-call and fault low-level handling routines.
 13 #include <linux/errno.h>                       !!   9  * This also contains the timer-interrupt handler, as well as all interrupts
 14 #include <linux/pgtable.h>                     !!  10  * and faults that can result in a task-switch.
                                                   >>  11  *
                                                   >>  12  * NOTE: This code handles signal-recognition, which happens every time
                                                   >>  13  * after a timer-interrupt and after each system call.
                                                   >>  14  *
                                                   >>  15  * I changed all the .align's to 4 (16 byte alignment), as that's faster
                                                   >>  16  * on a 486.
                                                   >>  17  *
                                                   >>  18  * Stack layout in 'ret_from_system_call':
                                                   >>  19  *      ptrace needs to have all regs on the stack.
                                                   >>  20  *      if the order here is changed, it needs to be
                                                   >>  21  *      updated in fork.c:copy_process, signal.c:do_signal,
                                                   >>  22  *      ptrace.c and ptrace.h
                                                   >>  23  *
                                                   >>  24  *       0(%esp) - %ebx
                                                   >>  25  *       4(%esp) - %ecx
                                                   >>  26  *       8(%esp) - %edx
                                                   >>  27  *       C(%esp) - %esi
                                                   >>  28  *      10(%esp) - %edi
                                                   >>  29  *      14(%esp) - %ebp
                                                   >>  30  *      18(%esp) - %eax
                                                   >>  31  *      1C(%esp) - %ds
                                                   >>  32  *      20(%esp) - %es
                                                   >>  33  *      24(%esp) - orig_eax
                                                   >>  34  *      28(%esp) - %eip
                                                   >>  35  *      2C(%esp) - %cs
                                                   >>  36  *      30(%esp) - %eflags
                                                   >>  37  *      34(%esp) - %oldesp
                                                   >>  38  *      38(%esp) - %oldss
                                                   >>  39  *
                                                   >>  40  * "current" is in register %ebx during any slow entries.
                                                   >>  41  */
 15                                                    42 
 16 #include <asm/head.h>                          !!  43 #include <linux/config.h>
 17 #include <asm/asi.h>                           !!  44 #include <linux/linkage.h>
                                                   >>  45 #include <asm/thread_info.h>
                                                   >>  46 #include <asm/errno.h>
                                                   >>  47 #include <asm/segment.h>
 18 #include <asm/smp.h>                               48 #include <asm/smp.h>
 19 #include <asm/contregs.h>                      << 
 20 #include <asm/ptrace.h>                        << 
 21 #include <asm/asm-offsets.h>                   << 
 22 #include <asm/psr.h>                           << 
 23 #include <asm/vaddrs.h>                        << 
 24 #include <asm/page.h>                              49 #include <asm/page.h>
 25 #include <asm/winmacro.h>                      !!  50 #include "irq_vectors.h"
 26 #include <asm/signal.h>                        << 
 27 #include <asm/obio.h>                          << 
 28 #include <asm/mxcc.h>                          << 
 29 #include <asm/thread_info.h>                   << 
 30 #include <asm/param.h>                         << 
 31 #include <asm/unistd.h>                        << 
 32                                                    51 
 33 #include <asm/asmmacro.h>                      !!  52 #define nr_syscalls ((syscall_table_size)/4)
 34                                                    53 
 35 #define curptr      g6                         !!  54 EBX             = 0x00
                                                   >>  55 ECX             = 0x04
                                                   >>  56 EDX             = 0x08
                                                   >>  57 ESI             = 0x0C
                                                   >>  58 EDI             = 0x10
                                                   >>  59 EBP             = 0x14
                                                   >>  60 EAX             = 0x18
                                                   >>  61 DS              = 0x1C
                                                   >>  62 ES              = 0x20
                                                   >>  63 ORIG_EAX        = 0x24
                                                   >>  64 EIP             = 0x28
                                                   >>  65 CS              = 0x2C
                                                   >>  66 EFLAGS          = 0x30
                                                   >>  67 OLDESP          = 0x34
                                                   >>  68 OLDSS           = 0x38
                                                   >>  69 
                                                   >>  70 CF_MASK         = 0x00000001
                                                   >>  71 TF_MASK         = 0x00000100
                                                   >>  72 IF_MASK         = 0x00000200
                                                   >>  73 DF_MASK         = 0x00000400 
                                                   >>  74 NT_MASK         = 0x00004000
                                                   >>  75 VM_MASK         = 0x00020000
                                                   >>  76 
                                                   >>  77 /*
                                                   >>  78  * ESP0 is at offset 4. 0x200 is the size of the TSS, and
                                                   >>  79  * also thus the top-of-stack pointer offset of SYSENTER_ESP
                                                   >>  80  */
                                                   >>  81 TSS_ESP0_OFFSET = (4 - 0x200)
 36                                                    82 
 37 /* These are just handy. */                    !!  83 #ifdef CONFIG_PREEMPT
 38 #define _SV     save    %sp, -STACKFRAME_SZ, % !!  84 #define preempt_stop            cli
 39 #define _RS     restore                        !!  85 #else
 40                                                !!  86 #define preempt_stop
 41 #define FLUSH_ALL_KERNEL_WINDOWS \             !!  87 #define resume_kernel           restore_all
 42         _SV; _SV; _SV; _SV; _SV; _SV; _SV; \   << 
 43         _RS; _RS; _RS; _RS; _RS; _RS; _RS;     << 
 44                                                << 
 45         .text                                  << 
 46                                                << 
 47 #ifdef CONFIG_KGDB                             << 
 48         .align  4                              << 
 49         .globl          arch_kgdb_breakpoint   << 
 50         .type           arch_kgdb_breakpoint,# << 
 51 arch_kgdb_breakpoint:                          << 
 52         ta              0x7d                   << 
 53         retl                                   << 
 54          nop                                   << 
 55         .size           arch_kgdb_breakpoint,. << 
 56 #endif                                             88 #endif
 57                                                    89 
 58 #if defined(CONFIG_BLK_DEV_FD) || defined(CONF !!  90 #define SAVE_ALL \
 59         .align  4                              !!  91         cld; \
 60         .globl  floppy_hardint                 !!  92         pushl %es; \
 61 floppy_hardint:                                !!  93         pushl %ds; \
 62         /*                                     !!  94         pushl %eax; \
 63          * This code cannot touch registers %l !!  95         pushl %ebp; \
 64          * because SAVE_ALL depends on their v !!  96         pushl %edi; \
 65          * on %l3 also, but we regenerate it b !!  97         pushl %esi; \
 66          * Other registers are:                !!  98         pushl %edx; \
 67          * %l3 -- base address of fdc register !!  99         pushl %ecx; \
 68          * %l4 -- pdma_vaddr                   !! 100         pushl %ebx; \
 69          * %l5 -- scratch for ld/st address    !! 101         movl $(__USER_DS), %edx; \
 70          * %l6 -- pdma_size                    !! 102         movl %edx, %ds; \
 71          * %l7 -- scratch [floppy byte, ld/st  !! 103         movl %edx, %es;
 72          */                                    !! 104 
 73                                                !! 105 #define RESTORE_INT_REGS \
 74         /* Do we have work to do? */           !! 106         popl %ebx;      \
 75         sethi   %hi(doing_pdma), %l7           !! 107         popl %ecx;      \
 76         ld      [%l7 + %lo(doing_pdma)], %l7   !! 108         popl %edx;      \
 77         cmp     %l7, 0                         !! 109         popl %esi;      \
 78         be      floppy_dosoftint               !! 110         popl %edi;      \
 79          nop                                   !! 111         popl %ebp;      \
 80                                                !! 112         popl %eax
 81         /* Load fdc register base */           !! 113 
 82         sethi   %hi(fdc_status), %l3           !! 114 #define RESTORE_REGS    \
 83         ld      [%l3 + %lo(fdc_status)], %l3   !! 115         RESTORE_INT_REGS; \
 84                                                !! 116 1:      popl %ds;       \
 85         /* Setup register addresses */         !! 117 2:      popl %es;       \
 86         sethi   %hi(pdma_vaddr), %l5    ! tran !! 118 .section .fixup,"ax";   \
 87         ld      [%l5 + %lo(pdma_vaddr)], %l4   !! 119 3:      movl $0,(%esp); \
 88         sethi   %hi(pdma_size), %l5     ! byte !! 120         jmp 1b;         \
 89         ld      [%l5 + %lo(pdma_size)], %l6    !! 121 4:      movl $0,(%esp); \
 90 next_byte:                                     !! 122         jmp 2b;         \
 91         ldub    [%l3], %l7                     !! 123 .previous;              \
 92                                                !! 124 .section __ex_table,"a";\
 93         andcc   %l7, 0x80, %g0          ! Does !! 125         .align 4;       \
 94         bz      floppy_fifo_emptied     ! fifo !! 126         .long 1b,3b;    \
 95          andcc  %l7, 0x20, %g0          ! in n !! 127         .long 2b,4b;    \
 96         bz      floppy_overrun          ! nope !! 128 .previous
 97          andcc  %l7, 0x40, %g0          ! 0=wr !! 129 
 98         bz      floppy_write                   !! 130 
 99          sub    %l6, 0x1, %l6                  !! 131 #define RESTORE_ALL     \
100                                                !! 132         RESTORE_REGS    \
101         /* Ok, actually read this byte */      !! 133         addl $4, %esp;  \
102         ldub    [%l3 + 1], %l7                 !! 134 1:      iret;           \
103         orcc    %g0, %l6, %g0                  !! 135 .section .fixup,"ax";   \
104         stb     %l7, [%l4]                     !! 136 2:      sti;            \
105         bne     next_byte                      !! 137         movl $(__USER_DS), %edx; \
106          add    %l4, 0x1, %l4                  !! 138         movl %edx, %ds; \
107                                                !! 139         movl %edx, %es; \
108         b       floppy_tdone                   !! 140         pushl $11;      \
109          nop                                   !! 141         call do_exit;   \
110                                                !! 142 .previous;              \
111 floppy_write:                                  !! 143 .section __ex_table,"a";\
112         /* Ok, actually write this byte */     !! 144         .align 4;       \
113         ldub    [%l4], %l7                     !! 145         .long 1b,2b;    \
114         orcc    %g0, %l6, %g0                  !! 146 .previous
115         stb     %l7, [%l3 + 1]                 !! 147 
116         bne     next_byte                      !! 148 
117          add    %l4, 0x1, %l4                  !! 149 
118                                                !! 150 ENTRY(lcall7)
119         /* fall through... */                  !! 151         pushfl                  # We get a different stack layout with call
120 floppy_tdone:                                  !! 152                                 # gates, which has to be cleaned up later..
121         sethi   %hi(pdma_vaddr), %l5           !! 153         pushl %eax
122         st      %l4, [%l5 + %lo(pdma_vaddr)]   !! 154         SAVE_ALL
123         sethi   %hi(pdma_size), %l5            !! 155         movl %esp, %ebp
124         st      %l6, [%l5 + %lo(pdma_size)]    !! 156         pushl %ebp
125         /* Flip terminal count pin */          !! 157         pushl $0x7
126         set     auxio_register, %l7            !! 158 do_lcall:
127         ld      [%l7], %l7                     !! 159         movl EIP(%ebp), %eax    # due to call gates, this is eflags, not eip..
128                                                !! 160         movl CS(%ebp), %edx     # this is eip..
129         ldub    [%l7], %l5                     !! 161         movl EFLAGS(%ebp), %ecx # and this is cs..
130                                                !! 162         movl %eax,EFLAGS(%ebp)  #
131         or      %l5, 0xc2, %l5                 !! 163         movl %edx,EIP(%ebp)     # Now we move them to their "normal" places
132         stb     %l5, [%l7]                     !! 164         movl %ecx,CS(%ebp)      #
133         andn    %l5, 0x02, %l5                 !! 165         andl $-8192, %ebp       # GET_THREAD_INFO
134                                                !! 166         movl TI_EXEC_DOMAIN(%ebp), %edx # Get the execution domain
135 2:                                             !! 167         call *4(%edx)           # Call the lcall7 handler for the domain
136         /* Kill some time so the bits set */   !! 168         addl $4, %esp
137         WRITE_PAUSE                            !! 169         popl %eax
138         WRITE_PAUSE                            !! 170         jmp resume_userspace
139                                                !! 171 
140         stb     %l5, [%l7]                     !! 172 ENTRY(lcall27)
141                                                !! 173         pushfl                  # We get a different stack layout with call
142         /* Prevent recursion */                !! 174                                 # gates, which has to be cleaned up later..
143         sethi   %hi(doing_pdma), %l7           !! 175         pushl %eax
144         b       floppy_dosoftint               !! 176         SAVE_ALL
145          st     %g0, [%l7 + %lo(doing_pdma)]   !! 177         movl %esp, %ebp
146                                                !! 178         pushl %ebp
147         /* We emptied the FIFO, but we haven't !! 179         pushl $0x27
148          * as of yet.  Store the current trans !! 180         jmp do_lcall
149          * bytes left to read so we can contin !! 181 
150          * fast IRQ comes in.                  !! 182 
151          */                                    !! 183 ENTRY(ret_from_fork)
152 floppy_fifo_emptied:                           !! 184         pushl %eax
153         sethi   %hi(pdma_vaddr), %l5           !! 185         call schedule_tail
154         st      %l4, [%l5 + %lo(pdma_vaddr)]   !! 186         GET_THREAD_INFO(%ebp)
155         sethi   %hi(pdma_size), %l7            !! 187         popl %eax
156         st      %l6, [%l7 + %lo(pdma_size)]    !! 188         jmp syscall_exit
157                                                !! 189 
158         /* Restore condition codes */          !! 190 /*
159         wr      %l0, 0x0, %psr                 !! 191  * Return to user mode is not as complex as all this looks,
160         WRITE_PAUSE                            !! 192  * but we want the default path for a system call return to
161                                                !! 193  * go as quickly as possible which is why some of this is
162         jmp     %l1                            !! 194  * less clear than it otherwise should be.
163         rett    %l2                            << 
164                                                << 
165 floppy_overrun:                                << 
166         sethi   %hi(pdma_vaddr), %l5           << 
167         st      %l4, [%l5 + %lo(pdma_vaddr)]   << 
168         sethi   %hi(pdma_size), %l5            << 
169         st      %l6, [%l5 + %lo(pdma_size)]    << 
170         /* Prevent recursion */                << 
171         sethi   %hi(doing_pdma), %l7           << 
172         st      %g0, [%l7 + %lo(doing_pdma)]   << 
173                                                << 
174         /* fall through... */                  << 
175 floppy_dosoftint:                              << 
176         rd      %wim, %l3                      << 
177         SAVE_ALL                               << 
178                                                << 
179         /* Set all IRQs off. */                << 
180         or      %l0, PSR_PIL, %l4              << 
181         wr      %l4, 0x0, %psr                 << 
182         WRITE_PAUSE                            << 
183         wr      %l4, PSR_ET, %psr              << 
184         WRITE_PAUSE                            << 
185                                                << 
186         mov     11, %o0                 ! flop << 
187         mov     %g0, %o1                ! devi << 
188         call    sparc_floppy_irq               << 
189          add    %sp, STACKFRAME_SZ, %o2 ! stru << 
190                                                << 
191         RESTORE_ALL                            << 
192                                                << 
193 #endif /* (CONFIG_BLK_DEV_FD) */               << 
194                                                << 
195         /* Bad trap handler */                 << 
196         .globl  bad_trap_handler               << 
197 bad_trap_handler:                              << 
198         SAVE_ALL                               << 
199                                                << 
200         wr      %l0, PSR_ET, %psr              << 
201         WRITE_PAUSE                            << 
202                                                << 
203         add     %sp, STACKFRAME_SZ, %o0 ! pt_r << 
204         call    do_hw_interrupt                << 
205          mov    %l7, %o1                ! trap << 
206                                                << 
207         RESTORE_ALL                            << 
208                                                << 
209 /* For now all IRQ's not registered get sent h << 
210  * see if a routine is registered to handle th << 
211  * it will say so on the console.              << 
212  */                                               195  */
213                                                   196 
214         .align  4                              !! 197         # userspace resumption stub bypassing syscall exit tracing
215         .globl  real_irq_entry, patch_handler_ !! 198         ALIGN
216 real_irq_entry:                                !! 199 ret_from_exception:
217         SAVE_ALL                               !! 200         preempt_stop
218                                                !! 201 ret_from_intr:
219 #ifdef CONFIG_SMP                              !! 202         GET_THREAD_INFO(%ebp)
220         .globl  patchme_maybe_smp_msg          !! 203         movl EFLAGS(%esp), %eax         # mix EFLAGS and CS
221                                                !! 204         movb CS(%esp), %al
222         cmp     %l7, 11                        !! 205         testl $(VM_MASK | 3), %eax
223 patchme_maybe_smp_msg:                         !! 206         jz resume_kernel                # returning to kernel or vm86-space
224         bgu     maybe_smp4m_msg                !! 207 ENTRY(resume_userspace)
225          nop                                   !! 208         cli                             # make sure we don't miss an interrupt
                                                   >> 209                                         # setting need_resched or sigpending
                                                   >> 210                                         # between sampling and the iret
                                                   >> 211         movl TI_FLAGS(%ebp), %ecx
                                                   >> 212         andl $_TIF_WORK_MASK, %ecx      # is there any work to be done on
                                                   >> 213                                         # int/exception return?
                                                   >> 214         jne work_pending
                                                   >> 215         jmp restore_all
                                                   >> 216 
                                                   >> 217 #ifdef CONFIG_PREEMPT
                                                   >> 218 ENTRY(resume_kernel)
                                                   >> 219         cmpl $0,TI_PRE_COUNT(%ebp)      # non-zero preempt_count ?
                                                   >> 220         jnz restore_all
                                                   >> 221 need_resched:
                                                   >> 222         movl TI_FLAGS(%ebp), %ecx       # need_resched set ?
                                                   >> 223         testb $_TIF_NEED_RESCHED, %cl
                                                   >> 224         jz restore_all
                                                   >> 225         testl $IF_MASK,EFLAGS(%esp)     # interrupts off (exception path) ?
                                                   >> 226         jz restore_all
                                                   >> 227         movl $PREEMPT_ACTIVE,TI_PRE_COUNT(%ebp)
                                                   >> 228         sti
                                                   >> 229         call schedule
                                                   >> 230         movl $0,TI_PRE_COUNT(%ebp)
                                                   >> 231         cli
                                                   >> 232         jmp need_resched
226 #endif                                            233 #endif
227                                                   234 
228 real_irq_continue:                             !! 235 /* SYSENTER_RETURN points to after the "sysenter" instruction in
229         or      %l0, PSR_PIL, %g2              !! 236    the vsyscall page.  See vsyscall-sysentry.S, which defines the symbol.  */
230         wr      %g2, 0x0, %psr                 << 
231         WRITE_PAUSE                            << 
232         wr      %g2, PSR_ET, %psr              << 
233         WRITE_PAUSE                            << 
234         mov     %l7, %o0                ! irq  << 
235 patch_handler_irq:                             << 
236         call    handler_irq                    << 
237          add    %sp, STACKFRAME_SZ, %o1 ! pt_r << 
238         or      %l0, PSR_PIL, %g2       ! rest << 
239         wr      %g2, PSR_ET, %psr       ! keep << 
240         WRITE_PAUSE                            << 
241                                                << 
242         RESTORE_ALL                            << 
243                                                << 
244 #ifdef CONFIG_SMP                              << 
245         /* SMP per-cpu ticker interrupts are h << 
246 smp4m_ticker:                                  << 
247         bne     real_irq_continue+4            << 
248          or     %l0, PSR_PIL, %g2              << 
249         wr      %g2, 0x0, %psr                 << 
250         WRITE_PAUSE                            << 
251         wr      %g2, PSR_ET, %psr              << 
252         WRITE_PAUSE                            << 
253         call    smp4m_percpu_timer_interrupt   << 
254          add    %sp, STACKFRAME_SZ, %o0        << 
255         wr      %l0, PSR_ET, %psr              << 
256         WRITE_PAUSE                            << 
257         RESTORE_ALL                            << 
258                                                << 
259 #define GET_PROCESSOR4M_ID(reg) \              << 
260         rd      %tbr, %reg;     \              << 
261         srl     %reg, 12, %reg; \              << 
262         and     %reg, 3, %reg;                 << 
263                                                << 
264         /* Here is where we check for possible << 
265          * on some level other than 15 which i << 
266          * for cross calls.  That has a separa << 
267          *                                     << 
268          * IPIs are sent on Level 12, 13 and 1 << 
269          */                                    << 
270 maybe_smp4m_msg:                               << 
271         GET_PROCESSOR4M_ID(o3)                 << 
272         sethi   %hi(sun4m_irq_percpu), %l5     << 
273         sll     %o3, 2, %o3                    << 
274         or      %l5, %lo(sun4m_irq_percpu), %o << 
275         sethi   %hi(0x70000000), %o2    ! Chec << 
276         ld      [%o5 + %o3], %o1               << 
277         ld      [%o1 + 0x00], %o3       ! sun4 << 
278         andcc   %o3, %o2, %g0                  << 
279         be,a    smp4m_ticker                   << 
280          cmp    %l7, 14                        << 
281         /* Soft-IRQ IPI */                     << 
282         st      %o2, [%o1 + 0x04]       ! sun4 << 
283         WRITE_PAUSE                            << 
284         ld      [%o1 + 0x00], %g0       ! sun4 << 
285         WRITE_PAUSE                            << 
286         or      %l0, PSR_PIL, %l4              << 
287         wr      %l4, 0x0, %psr                 << 
288         WRITE_PAUSE                            << 
289         wr      %l4, PSR_ET, %psr              << 
290         WRITE_PAUSE                            << 
291         srl     %o3, 28, %o2            ! shif << 
292 maybe_smp4m_msg_check_single:                  << 
293         andcc   %o2, 0x1, %g0                  << 
294         beq,a   maybe_smp4m_msg_check_mask     << 
295          andcc  %o2, 0x2, %g0                  << 
296         call    smp_call_function_single_inter << 
297          nop                                   << 
298         andcc   %o2, 0x2, %g0                  << 
299 maybe_smp4m_msg_check_mask:                    << 
300         beq,a   maybe_smp4m_msg_check_resched  << 
301          andcc  %o2, 0x4, %g0                  << 
302         call    smp_call_function_interrupt    << 
303          nop                                   << 
304         andcc   %o2, 0x4, %g0                  << 
305 maybe_smp4m_msg_check_resched:                 << 
306         /* rescheduling is done in RESTORE_ALL << 
307         beq,a   maybe_smp4m_msg_out            << 
308          nop                                   << 
309         call    smp_resched_interrupt          << 
310          nop                                   << 
311 maybe_smp4m_msg_out:                           << 
312         RESTORE_ALL                            << 
313                                                << 
314         .align  4                              << 
315         .globl  linux_trap_ipi15_sun4m         << 
316 linux_trap_ipi15_sun4m:                        << 
317         SAVE_ALL                               << 
318         sethi   %hi(0x80000000), %o2           << 
319         GET_PROCESSOR4M_ID(o0)                 << 
320         sethi   %hi(sun4m_irq_percpu), %l5     << 
321         or      %l5, %lo(sun4m_irq_percpu), %o << 
322         sll     %o0, 2, %o0                    << 
323         ld      [%o5 + %o0], %o5               << 
324         ld      [%o5 + 0x00], %o3       ! sun4 << 
325         andcc   %o3, %o2, %g0                  << 
326         be      sun4m_nmi_error         ! Must << 
327          st     %o2, [%o5 + 0x04]       ! sun4 << 
328         WRITE_PAUSE                            << 
329         ld      [%o5 + 0x00], %g0       ! sun4 << 
330         WRITE_PAUSE                            << 
331         or      %l0, PSR_PIL, %l4              << 
332         wr      %l4, 0x0, %psr                 << 
333         WRITE_PAUSE                            << 
334         wr      %l4, PSR_ET, %psr              << 
335         WRITE_PAUSE                            << 
336         call    smp4m_cross_call_irq           << 
337          nop                                   << 
338         b       ret_trap_lockless_ipi          << 
339          clr    %l6                            << 
340                                                << 
341         .globl  smp4d_ticker                   << 
342         /* SMP per-cpu ticker interrupts are h << 
343 smp4d_ticker:                                  << 
344         SAVE_ALL                               << 
345         or      %l0, PSR_PIL, %g2              << 
346         sethi   %hi(CC_ICLR), %o0              << 
347         sethi   %hi(1 << 14), %o1              << 
348         or      %o0, %lo(CC_ICLR), %o0         << 
349         stha    %o1, [%o0] ASI_M_MXCC   /* Cle << 
350         wr      %g2, 0x0, %psr                 << 
351         WRITE_PAUSE                            << 
352         wr      %g2, PSR_ET, %psr              << 
353         WRITE_PAUSE                            << 
354         call    smp4d_percpu_timer_interrupt   << 
355          add    %sp, STACKFRAME_SZ, %o0        << 
356         wr      %l0, PSR_ET, %psr              << 
357         WRITE_PAUSE                            << 
358         RESTORE_ALL                            << 
359                                                << 
360         .align  4                              << 
361         .globl  linux_trap_ipi15_sun4d         << 
362 linux_trap_ipi15_sun4d:                        << 
363         SAVE_ALL                               << 
364         sethi   %hi(CC_BASE), %o4              << 
365         sethi   %hi(MXCC_ERR_ME|MXCC_ERR_PEW|M << 
366         or      %o4, (CC_EREG - CC_BASE), %o0  << 
367         ldda    [%o0] ASI_M_MXCC, %o0          << 
368         andcc   %o0, %o2, %g0                  << 
369         bne     1f                             << 
370          sethi  %hi(BB_STAT2), %o2             << 
371         lduba   [%o2] ASI_M_CTL, %o2           << 
372         andcc   %o2, BB_STAT2_MASK, %g0        << 
373         bne     2f                             << 
374          or     %o4, (CC_ICLR - CC_BASE), %o0  << 
375         sethi   %hi(1 << 15), %o1              << 
376         stha    %o1, [%o0] ASI_M_MXCC   /* Cle << 
377         or      %l0, PSR_PIL, %l4              << 
378         wr      %l4, 0x0, %psr                 << 
379         WRITE_PAUSE                            << 
380         wr      %l4, PSR_ET, %psr              << 
381         WRITE_PAUSE                            << 
382         call    smp4d_cross_call_irq           << 
383          nop                                   << 
384         b       ret_trap_lockless_ipi          << 
385          clr    %l6                            << 
386                                                << 
387 1:      /* MXCC error */                       << 
388 2:      /* BB error */                         << 
389         /* Disable PIL 15 */                   << 
390         set     CC_IMSK, %l4                   << 
391         lduha   [%l4] ASI_M_MXCC, %l5          << 
392         sethi   %hi(1 << 15), %l7              << 
393         or      %l5, %l7, %l5                  << 
394         stha    %l5, [%l4] ASI_M_MXCC          << 
395         /* FIXME */                            << 
396 1:      b,a     1b                             << 
397                                                << 
398         .globl  smpleon_ipi                    << 
399         .extern leon_ipi_interrupt             << 
400         /* SMP per-cpu IPI interrupts are hand << 
401 smpleon_ipi:                                   << 
402         SAVE_ALL                               << 
403         or      %l0, PSR_PIL, %g2              << 
404         wr      %g2, 0x0, %psr                 << 
405         WRITE_PAUSE                            << 
406         wr      %g2, PSR_ET, %psr              << 
407         WRITE_PAUSE                            << 
408         call    leonsmp_ipi_interrupt          << 
409          add    %sp, STACKFRAME_SZ, %o1 ! pt_r << 
410         wr      %l0, PSR_ET, %psr              << 
411         WRITE_PAUSE                            << 
412         RESTORE_ALL                            << 
413                                                << 
414         .align  4                              << 
415         .globl  linux_trap_ipi15_leon          << 
416 linux_trap_ipi15_leon:                         << 
417         SAVE_ALL                               << 
418         or      %l0, PSR_PIL, %l4              << 
419         wr      %l4, 0x0, %psr                 << 
420         WRITE_PAUSE                            << 
421         wr      %l4, PSR_ET, %psr              << 
422         WRITE_PAUSE                            << 
423         call    leon_cross_call_irq            << 
424          nop                                   << 
425         b       ret_trap_lockless_ipi          << 
426          clr    %l6                            << 
427                                                << 
428 #endif /* CONFIG_SMP */                        << 
429                                                << 
430         /* This routine handles illegal instru << 
431          * instruction attempts from user code << 
432          */                                    << 
433         .align  4                              << 
434         .globl  bad_instruction                << 
435 bad_instruction:                               << 
436         sethi   %hi(0xc1f80000), %l4           << 
437         ld      [%l1], %l5                     << 
438         sethi   %hi(0x81d80000), %l7           << 
439         and     %l5, %l4, %l5                  << 
440         cmp     %l5, %l7                       << 
441         be      1f                             << 
442         SAVE_ALL                               << 
443                                                << 
444         wr      %l0, PSR_ET, %psr              << 
445         WRITE_PAUSE                            << 
446                                                << 
447         add     %sp, STACKFRAME_SZ, %o0        << 
448         mov     %l1, %o1                       << 
449         mov     %l2, %o2                       << 
450         call    do_illegal_instruction         << 
451          mov    %l0, %o3                       << 
452                                                << 
453         RESTORE_ALL                            << 
454                                                << 
455 1:      /* unimplemented flush - just skip */  << 
456         jmpl    %l2, %g0                       << 
457          rett   %l2 + 4                        << 
458                                                << 
459         .align  4                              << 
460         .globl  priv_instruction               << 
461 priv_instruction:                              << 
462         SAVE_ALL                               << 
463                                                << 
464         wr      %l0, PSR_ET, %psr              << 
465         WRITE_PAUSE                            << 
466                                                << 
467         add     %sp, STACKFRAME_SZ, %o0        << 
468         mov     %l1, %o1                       << 
469         mov     %l2, %o2                       << 
470         call    do_priv_instruction            << 
471          mov    %l0, %o3                       << 
472                                                << 
473         RESTORE_ALL                            << 
474                                                << 
475         /* This routine handles unaligned data << 
476         .align  4                              << 
477         .globl  mna_handler                    << 
478 mna_handler:                                   << 
479         andcc   %l0, PSR_PS, %g0               << 
480         be      mna_fromuser                   << 
481          nop                                   << 
482                                                << 
483         SAVE_ALL                               << 
484                                                << 
485         wr      %l0, PSR_ET, %psr              << 
486         WRITE_PAUSE                            << 
487                                                << 
488         ld      [%l1], %o1                     << 
489         call    kernel_unaligned_trap          << 
490          add    %sp, STACKFRAME_SZ, %o0        << 
491                                                << 
492         RESTORE_ALL                            << 
493                                                << 
494 mna_fromuser:                                  << 
495         SAVE_ALL                               << 
496                                                << 
497         wr      %l0, PSR_ET, %psr              << 
498         WRITE_PAUSE                            << 
499                                                << 
500         ld      [%l1], %o1                     << 
501         call    user_unaligned_trap            << 
502          add    %sp, STACKFRAME_SZ, %o0        << 
503                                                << 
504         RESTORE_ALL                            << 
505                                                << 
506         /* This routine handles floating point << 
507         .align  4                              << 
508         .globl  fpd_trap_handler               << 
509 fpd_trap_handler:                              << 
510         SAVE_ALL                               << 
511                                                << 
512         wr      %l0, PSR_ET, %psr              << 
513         WRITE_PAUSE                            << 
514                                                << 
515         add     %sp, STACKFRAME_SZ, %o0        << 
516         mov     %l1, %o1                       << 
517         mov     %l2, %o2                       << 
518         call    do_fpd_trap                    << 
519          mov    %l0, %o3                       << 
520                                                << 
521         RESTORE_ALL                            << 
522                                                << 
523         /* This routine handles Floating Point << 
524         .align  4                              << 
525         .globl  fpe_trap_handler               << 
526 fpe_trap_handler:                              << 
527         set     fpsave_magic, %l5              << 
528         cmp     %l1, %l5                       << 
529         be      1f                             << 
530          sethi  %hi(fpsave), %l5               << 
531         or      %l5, %lo(fpsave), %l5          << 
532         cmp     %l1, %l5                       << 
533         bne     2f                             << 
534          sethi  %hi(fpsave_catch2), %l5        << 
535         or      %l5, %lo(fpsave_catch2), %l5   << 
536         wr      %l0, 0x0, %psr                 << 
537         WRITE_PAUSE                            << 
538         jmp     %l5                            << 
539          rett   %l5 + 4                        << 
540 1:                                             << 
541         sethi   %hi(fpsave_catch), %l5         << 
542         or      %l5, %lo(fpsave_catch), %l5    << 
543         wr      %l0, 0x0, %psr                 << 
544         WRITE_PAUSE                            << 
545         jmp     %l5                            << 
546          rett   %l5 + 4                        << 
547                                                << 
548 2:                                             << 
549         SAVE_ALL                               << 
550                                                << 
551         wr      %l0, PSR_ET, %psr              << 
552         WRITE_PAUSE                            << 
553                                                << 
554         add     %sp, STACKFRAME_SZ, %o0        << 
555         mov     %l1, %o1                       << 
556         mov     %l2, %o2                       << 
557         call    do_fpe_trap                    << 
558          mov    %l0, %o3                       << 
559                                                << 
560         RESTORE_ALL                            << 
561                                                << 
562         /* This routine handles Tag Overflow E << 
563         .align  4                              << 
564         .globl  do_tag_overflow                << 
565 do_tag_overflow:                               << 
566         SAVE_ALL                               << 
567                                                << 
568         wr      %l0, PSR_ET, %psr              << 
569         WRITE_PAUSE                            << 
570                                                << 
571         add     %sp, STACKFRAME_SZ, %o0        << 
572         mov     %l1, %o1                       << 
573         mov     %l2, %o2                       << 
574         call    handle_tag_overflow            << 
575          mov    %l0, %o3                       << 
576                                                << 
577         RESTORE_ALL                            << 
578                                                << 
579         /* This routine handles Watchpoint Exc << 
580         .align  4                              << 
581         .globl  do_watchpoint                  << 
582 do_watchpoint:                                 << 
583         SAVE_ALL                               << 
584                                                << 
585         wr      %l0, PSR_ET, %psr              << 
586         WRITE_PAUSE                            << 
587                                                << 
588         add     %sp, STACKFRAME_SZ, %o0        << 
589         mov     %l1, %o1                       << 
590         mov     %l2, %o2                       << 
591         call    handle_watchpoint              << 
592          mov    %l0, %o3                       << 
593                                                << 
594         RESTORE_ALL                            << 
595                                                << 
596         /* This routine handles Register Acces << 
597         .align  4                              << 
598         .globl  do_reg_access                  << 
599 do_reg_access:                                 << 
600         SAVE_ALL                               << 
601                                                << 
602         wr      %l0, PSR_ET, %psr              << 
603         WRITE_PAUSE                            << 
604                                                << 
605         add     %sp, STACKFRAME_SZ, %o0        << 
606         mov     %l1, %o1                       << 
607         mov     %l2, %o2                       << 
608         call    handle_reg_access              << 
609          mov    %l0, %o3                       << 
610                                                << 
611         RESTORE_ALL                            << 
612                                                << 
613         /* This routine handles Co-Processor D << 
614         .align  4                              << 
615         .globl  do_cp_disabled                 << 
616 do_cp_disabled:                                << 
617         SAVE_ALL                               << 
618                                                << 
619         wr      %l0, PSR_ET, %psr              << 
620         WRITE_PAUSE                            << 
621                                                << 
622         add     %sp, STACKFRAME_SZ, %o0        << 
623         mov     %l1, %o1                       << 
624         mov     %l2, %o2                       << 
625         call    handle_cp_disabled             << 
626          mov    %l0, %o3                       << 
627                                                << 
628         RESTORE_ALL                            << 
629                                                << 
630         /* This routine handles Co-Processor E << 
631         .align  4                              << 
632         .globl  do_cp_exception                << 
633 do_cp_exception:                               << 
634         SAVE_ALL                               << 
635                                                << 
636         wr      %l0, PSR_ET, %psr              << 
637         WRITE_PAUSE                            << 
638                                                << 
639         add     %sp, STACKFRAME_SZ, %o0        << 
640         mov     %l1, %o1                       << 
641         mov     %l2, %o2                       << 
642         call    handle_cp_exception            << 
643          mov    %l0, %o3                       << 
644                                                << 
645         RESTORE_ALL                            << 
646                                                << 
647         /* This routine handles Hardware Divid << 
648         .align  4                              << 
649         .globl  do_hw_divzero                  << 
650 do_hw_divzero:                                 << 
651         SAVE_ALL                               << 
652                                                << 
653         wr      %l0, PSR_ET, %psr              << 
654         WRITE_PAUSE                            << 
655                                                << 
656         add     %sp, STACKFRAME_SZ, %o0        << 
657         mov     %l1, %o1                       << 
658         mov     %l2, %o2                       << 
659         call    handle_hw_divzero              << 
660          mov    %l0, %o3                       << 
661                                                << 
662         RESTORE_ALL                            << 
663                                                << 
664         .align  4                              << 
665         .globl  do_flush_windows               << 
666 do_flush_windows:                              << 
667         SAVE_ALL                               << 
668                                                << 
669         wr      %l0, PSR_ET, %psr              << 
670         WRITE_PAUSE                            << 
671                                                << 
672         andcc   %l0, PSR_PS, %g0               << 
673         bne     dfw_kernel                     << 
674          nop                                   << 
675                                                << 
676         call    flush_user_windows             << 
677          nop                                   << 
678                                                << 
679         /* Advance over the trap instruction.  << 
680         ld      [%sp + STACKFRAME_SZ + PT_NPC] << 
681         add     %l1, 0x4, %l2                  << 
682         st      %l1, [%sp + STACKFRAME_SZ + PT << 
683         st      %l2, [%sp + STACKFRAME_SZ + PT << 
684                                                << 
685         RESTORE_ALL                            << 
686                                                << 
687         .globl  flush_patch_one                << 
688                                                << 
689         /* We get these for debugging routines << 
690 dfw_kernel:                                    << 
691 flush_patch_one:                               << 
692         FLUSH_ALL_KERNEL_WINDOWS               << 
693                                                << 
694         /* Advance over the trap instruction.  << 
695         ld      [%sp + STACKFRAME_SZ + PT_NPC] << 
696         add     %l1, 0x4, %l2                  << 
697         st      %l1, [%sp + STACKFRAME_SZ + PT << 
698         st      %l2, [%sp + STACKFRAME_SZ + PT << 
699                                                << 
700         RESTORE_ALL                            << 
701                                                << 
702         /* The getcc software trap.  The user  << 
703          * the %psr in register %g1.           << 
704          */                                    << 
705                                                << 
706         .align  4                              << 
707         .globl  getcc_trap_handler             << 
708 getcc_trap_handler:                            << 
709         srl     %l0, 20, %g1    ! give user    << 
710         and     %g1, 0xf, %g1   ! only ICC bit << 
711         jmp     %l2             ! advance over << 
712         rett    %l2 + 0x4       ! like this... << 
713                                                << 
714         /* The setcc software trap.  The user  << 
715          * that it would like placed in the %p << 
716          * any unintentional bits!             << 
717          */                                    << 
718                                                << 
719         .align  4                              << 
720         .globl  setcc_trap_handler             << 
721 setcc_trap_handler:                            << 
722         sll     %g1, 0x14, %l4                 << 
723         set     PSR_ICC, %l5                   << 
724         andn    %l0, %l5, %l0   ! clear ICC bi << 
725         and     %l4, %l5, %l4   ! clear non-IC << 
726         or      %l4, %l0, %l4   ! or them in.. << 
727                                                << 
728         wr      %l4, 0x0, %psr  ! set new %psr << 
729         WRITE_PAUSE             ! TI scumbags. << 
730                                                << 
731         jmp     %l2             ! advance over << 
732         rett    %l2 + 0x4       ! like this... << 
733                                                << 
734 sun4m_nmi_error:                               << 
735         /* NMI async memory error handling. */ << 
736         sethi   %hi(0x80000000), %l4           << 
737         sethi   %hi(sun4m_irq_global), %o5     << 
738         ld      [%o5 + %lo(sun4m_irq_global)], << 
739         st      %l4, [%l5 + 0x0c]       ! sun4 << 
740         WRITE_PAUSE                            << 
741         ld      [%l5 + 0x00], %g0       ! sun4 << 
742         WRITE_PAUSE                            << 
743         or      %l0, PSR_PIL, %l4              << 
744         wr      %l4, 0x0, %psr                 << 
745         WRITE_PAUSE                            << 
746         wr      %l4, PSR_ET, %psr              << 
747         WRITE_PAUSE                            << 
748         call    sun4m_nmi                      << 
749          nop                                   << 
750         st      %l4, [%l5 + 0x08]       ! sun4 << 
751         WRITE_PAUSE                            << 
752         ld      [%l5 + 0x00], %g0       ! sun4 << 
753         WRITE_PAUSE                            << 
754         RESTORE_ALL                            << 
755                                                << 
756 #ifndef CONFIG_SMP                             << 
757         .align  4                              << 
758         .globl  linux_trap_ipi15_sun4m         << 
759 linux_trap_ipi15_sun4m:                        << 
760         SAVE_ALL                               << 
761                                                << 
762         ba      sun4m_nmi_error                << 
763          nop                                   << 
764 #endif /* CONFIG_SMP */                        << 
765                                                << 
766         .align  4                              << 
767         .globl  srmmu_fault                    << 
768 srmmu_fault:                                   << 
769         mov     0x400, %l5                     << 
770         mov     0x300, %l4                     << 
771                                                << 
772 LEON_PI(lda     [%l5] ASI_LEON_MMUREGS, %l6)   << 
773 SUN_PI_(lda     [%l5] ASI_M_MMUREGS, %l6)      << 
774                                                << 
775 LEON_PI(lda     [%l4] ASI_LEON_MMUREGS, %l5)   << 
776 SUN_PI_(lda     [%l4] ASI_M_MMUREGS, %l5)      << 
777                                                   237 
778         andn    %l6, 0xfff, %l6                !! 238         # sysenter call handler stub
779         srl     %l5, 6, %l5                    !! 239 ENTRY(sysenter_entry)
780                                                !! 240         movl TSS_ESP0_OFFSET(%esp),%esp
781         and     %l5, 2, %l5                    !! 241 sysenter_past_esp:
782         or      %l5, %l6, %l6                  !! 242         sti
783                                                !! 243         pushl $(__USER_DS)
784         or      %l6, %l7, %l7                  !! 244         pushl %ebp
785                                                !! 245         pushfl
786         SAVE_ALL                               !! 246         pushl $(__USER_CS)
787                                                !! 247         pushl $SYSENTER_RETURN
788         mov     %l7, %o1                       !! 248 
789         mov     %l7, %o2                       !! 249 /*
790         and     %o1, 1, %o1             ! arg2 !! 250  * Load the potential sixth argument from user stack.
791         mov     %l7, %o3                       !! 251  * Careful about security.
792         and     %o2, 2, %o2             ! arg3 << 
793         andn    %o3, 0xfff, %o3         ! arg4 << 
794                                                << 
795         wr      %l0, PSR_ET, %psr              << 
796         WRITE_PAUSE                            << 
797                                                << 
798         call    do_sparc_fault                 << 
799          add    %sp, STACKFRAME_SZ, %o0 ! arg1 << 
800                                                << 
801         RESTORE_ALL                            << 
802                                                << 
803         .align  4                              << 
804 sunos_execv:                                   << 
805         .globl  sunos_execv                    << 
806         b       sys_execve                     << 
807          clr    %i2                            << 
808                                                << 
809         .align  4                              << 
810         .globl  sys_sigstack                   << 
811 sys_sigstack:                                  << 
812         mov     %o7, %l5                       << 
813         mov     %fp, %o2                       << 
814         call    do_sys_sigstack                << 
815          mov    %l5, %o7                       << 
816                                                << 
817         .align  4                              << 
818         .globl  sys_sigreturn                  << 
819 sys_sigreturn:                                 << 
820         call    do_sigreturn                   << 
821          add    %sp, STACKFRAME_SZ, %o0        << 
822                                                << 
823         ld      [%curptr + TI_FLAGS], %l5      << 
824         andcc   %l5, _TIF_SYSCALL_TRACE, %g0   << 
825         be      1f                             << 
826          nop                                   << 
827                                                << 
828         call    syscall_trace                  << 
829          mov    1, %o1                         << 
830                                                << 
831 1:                                             << 
832         /* We don't want to muck with user reg << 
833          * normal syscall, just return.        << 
834          */                                    << 
835         RESTORE_ALL                            << 
836                                                << 
837         .align  4                              << 
838         .globl  sys_rt_sigreturn               << 
839 sys_rt_sigreturn:                              << 
840         call    do_rt_sigreturn                << 
841          add    %sp, STACKFRAME_SZ, %o0        << 
842                                                << 
843         ld      [%curptr + TI_FLAGS], %l5      << 
844         andcc   %l5, _TIF_SYSCALL_TRACE, %g0   << 
845         be      1f                             << 
846          nop                                   << 
847                                                << 
848         add     %sp, STACKFRAME_SZ, %o0        << 
849         call    syscall_trace                  << 
850          mov    1, %o1                         << 
851                                                << 
852 1:                                             << 
853         /* We are returning to a signal handle << 
854         RESTORE_ALL                            << 
855                                                << 
856         /* Now that we have a real sys_clone,  << 
857          * implemented in terms of it.  Our _r << 
858          * of SunOS vfork() will use sys_vfork << 
859          *                                     << 
860          * XXX These three should be consolida << 
861          * XXX code just like on sparc64... -D << 
862          */                                    << 
863         .align  4                              << 
864         .globl  sys_fork, flush_patch_two      << 
865 sys_fork:                                      << 
866         mov     %o7, %l5                       << 
867 flush_patch_two:                               << 
868         FLUSH_ALL_KERNEL_WINDOWS;              << 
869         ld      [%curptr + TI_TASK], %o4       << 
870         rd      %psr, %g4                      << 
871         WRITE_PAUSE                            << 
872         rd      %wim, %g5                      << 
873         WRITE_PAUSE                            << 
874         std     %g4, [%o4 + AOFF_task_thread + << 
875         add     %sp, STACKFRAME_SZ, %o0        << 
876         call    sparc_fork                     << 
877          mov    %l5, %o7                       << 
878                                                << 
879         /* Whee, kernel threads! */            << 
880         .globl  sys_clone, flush_patch_three   << 
881 sys_clone:                                     << 
882         mov     %o7, %l5                       << 
883 flush_patch_three:                             << 
884         FLUSH_ALL_KERNEL_WINDOWS;              << 
885         ld      [%curptr + TI_TASK], %o4       << 
886         rd      %psr, %g4                      << 
887         WRITE_PAUSE                            << 
888         rd      %wim, %g5                      << 
889         WRITE_PAUSE                            << 
890         std     %g4, [%o4 + AOFF_task_thread + << 
891         add     %sp, STACKFRAME_SZ, %o0        << 
892         call    sparc_clone                    << 
893          mov    %l5, %o7                       << 
894                                                << 
895         /* Whee, real vfork! */                << 
896         .globl  sys_vfork, flush_patch_four    << 
897 sys_vfork:                                     << 
898 flush_patch_four:                              << 
899         FLUSH_ALL_KERNEL_WINDOWS;              << 
900         ld      [%curptr + TI_TASK], %o4       << 
901         rd      %psr, %g4                      << 
902         WRITE_PAUSE                            << 
903         rd      %wim, %g5                      << 
904         WRITE_PAUSE                            << 
905         std     %g4, [%o4 + AOFF_task_thread + << 
906         sethi   %hi(sparc_vfork), %l1          << 
907         jmpl    %l1 + %lo(sparc_vfork), %g0    << 
908          add    %sp, STACKFRAME_SZ, %o0        << 
909                                                << 
910         .align  4                              << 
911 linux_sparc_ni_syscall:                        << 
912         sethi   %hi(sys_ni_syscall), %l7       << 
913         b       do_syscall                     << 
914          or     %l7, %lo(sys_ni_syscall), %l7  << 
915                                                << 
916 linux_syscall_trace:                           << 
917         add     %sp, STACKFRAME_SZ, %o0        << 
918         call    syscall_trace                  << 
919          mov    0, %o1                         << 
920         cmp     %o0, 0                         << 
921         bne     3f                             << 
922          mov    -ENOSYS, %o0                   << 
923                                                << 
924         /* Syscall tracing can modify the regi << 
925         ld      [%sp + STACKFRAME_SZ + PT_G1], << 
926         sethi   %hi(sys_call_table), %l7       << 
927         ld      [%sp + STACKFRAME_SZ + PT_I0], << 
928         or      %l7, %lo(sys_call_table), %l7  << 
929         ld      [%sp + STACKFRAME_SZ + PT_I1], << 
930         ld      [%sp + STACKFRAME_SZ + PT_I2], << 
931         ld      [%sp + STACKFRAME_SZ + PT_I3], << 
932         ld      [%sp + STACKFRAME_SZ + PT_I4], << 
933         ld      [%sp + STACKFRAME_SZ + PT_I5], << 
934         cmp     %g1, NR_syscalls               << 
935         bgeu    3f                             << 
936          mov    -ENOSYS, %o0                   << 
937                                                << 
938         sll     %g1, 2, %l4                    << 
939         mov     %i0, %o0                       << 
940         ld      [%l7 + %l4], %l7               << 
941         mov     %i1, %o1                       << 
942         mov     %i2, %o2                       << 
943         mov     %i3, %o3                       << 
944         b       2f                             << 
945          mov    %i4, %o4                       << 
946                                                << 
947         .globl  ret_from_fork                  << 
948 ret_from_fork:                                 << 
949         call    schedule_tail                  << 
950          ld     [%g3 + TI_TASK], %o0           << 
951         b       ret_sys_call                   << 
952          ld     [%sp + STACKFRAME_SZ + PT_I0], << 
953                                                << 
954         .globl  ret_from_kernel_thread         << 
955 ret_from_kernel_thread:                        << 
956         call    schedule_tail                  << 
957          ld     [%g3 + TI_TASK], %o0           << 
958         ld      [%sp + STACKFRAME_SZ + PT_G1], << 
959         call    %l0                            << 
960          ld     [%sp + STACKFRAME_SZ + PT_G2], << 
961         rd      %psr, %l1                      << 
962         ld      [%sp + STACKFRAME_SZ + PT_PSR] << 
963         andn    %l0, PSR_CWP, %l0              << 
964         nop                                    << 
965         and     %l1, PSR_CWP, %l1              << 
966         or      %l0, %l1, %l0                  << 
967         st      %l0, [%sp + STACKFRAME_SZ + PT << 
968         b       ret_sys_call                   << 
969          mov    0, %o0                         << 
970                                                << 
971         /* Linux native system calls enter her << 
972         .align  4                              << 
973         .globl  linux_sparc_syscall            << 
974 linux_sparc_syscall:                           << 
975         sethi   %hi(PSR_SYSCALL), %l4          << 
976         or      %l0, %l4, %l0                  << 
977         /* Direct access to user regs, must fa << 
978         cmp     %g1, NR_syscalls               << 
979         bgeu    linux_sparc_ni_syscall         << 
980          sll    %g1, 2, %l4                    << 
981         ld      [%l7 + %l4], %l7               << 
982                                                << 
983 do_syscall:                                    << 
984         SAVE_ALL_HEAD                          << 
985          rd     %wim, %l3                      << 
986                                                << 
987         wr      %l0, PSR_ET, %psr              << 
988         mov     %i0, %o0                       << 
989         mov     %i1, %o1                       << 
990         mov     %i2, %o2                       << 
991                                                << 
992         ld      [%curptr + TI_FLAGS], %l5      << 
993         mov     %i3, %o3                       << 
994         andcc   %l5, _TIF_SYSCALL_TRACE, %g0   << 
995         mov     %i4, %o4                       << 
996         bne     linux_syscall_trace            << 
997          mov    %i0, %l6                       << 
998 2:                                             << 
999         call    %l7                            << 
1000          mov    %i5, %o5                      << 
1001                                               << 
1002 3:                                            << 
1003         st      %o0, [%sp + STACKFRAME_SZ + P << 
1004                                               << 
1005 ret_sys_call:                                 << 
1006         ld      [%curptr + TI_FLAGS], %l5     << 
1007         cmp     %o0, -ERESTART_RESTARTBLOCK   << 
1008         ld      [%sp + STACKFRAME_SZ + PT_PSR << 
1009         set     PSR_C, %g2                    << 
1010         bgeu    1f                            << 
1011          andcc  %l5, _TIF_SYSCALL_TRACE, %g0  << 
1012                                               << 
1013         /* System call success, clear Carry c << 
1014         andn    %g3, %g2, %g3                 << 
1015         st      %g3, [%sp + STACKFRAME_SZ + P << 
1016         bne     linux_syscall_trace2          << 
1017          ld     [%sp + STACKFRAME_SZ + PT_NPC << 
1018         add     %l1, 0x4, %l2                 << 
1019         st      %l1, [%sp + STACKFRAME_SZ + P << 
1020         b       ret_trap_entry                << 
1021          st     %l2, [%sp + STACKFRAME_SZ + P << 
1022 1:                                            << 
1023         /* System call failure, set Carry con << 
1024          * Also, get abs(errno) to return to  << 
1025          */                                   << 
1026         sub     %g0, %o0, %o0                 << 
1027         or      %g3, %g2, %g3                 << 
1028         st      %o0, [%sp + STACKFRAME_SZ + P << 
1029         st      %g3, [%sp + STACKFRAME_SZ + P << 
1030         bne     linux_syscall_trace2          << 
1031          ld     [%sp + STACKFRAME_SZ + PT_NPC << 
1032         add     %l1, 0x4, %l2                 << 
1033         st      %l1, [%sp + STACKFRAME_SZ + P << 
1034         b       ret_trap_entry                << 
1035          st     %l2, [%sp + STACKFRAME_SZ + P << 
1036                                               << 
1037 linux_syscall_trace2:                         << 
1038         add     %sp, STACKFRAME_SZ, %o0       << 
1039         mov     1, %o1                        << 
1040         call    syscall_trace                 << 
1041          add    %l1, 0x4, %l2                 << 
1042         st      %l1, [%sp + STACKFRAME_SZ + P << 
1043         b       ret_trap_entry                << 
1044          st     %l2, [%sp + STACKFRAME_SZ + P << 
1045                                               << 
1046                                               << 
1047 /* Saving and restoring the FPU state is best << 
1048  *                                            << 
1049  * void fpsave(unsigned long *fpregs, unsigne << 
1050  *             void *fpqueue, unsigned long * << 
1051  */                                              252  */
1052                                               !! 253         cmpl $__PAGE_OFFSET-3,%ebp
1053         .globl  fpsave                        !! 254         jae syscall_fault
1054 fpsave:                                       !! 255 1:      movl (%ebp),%ebp
1055         st      %fsr, [%o1]     ! this can tr !! 256 .section __ex_table,"a"
1056         ld      [%o1], %g1                    << 
1057         set     0x2000, %g4                   << 
1058         andcc   %g1, %g4, %g0                 << 
1059         be      2f                            << 
1060          mov    0, %g2                        << 
1061                                               << 
1062         /* We have an fpqueue to save. */     << 
1063 1:                                            << 
1064         std     %fq, [%o2]                    << 
1065 fpsave_magic:                                 << 
1066         st      %fsr, [%o1]                   << 
1067         ld      [%o1], %g3                    << 
1068         andcc   %g3, %g4, %g0                 << 
1069         add     %g2, 1, %g2                   << 
1070         bne     1b                            << 
1071          add    %o2, 8, %o2                   << 
1072                                               << 
1073 2:                                            << 
1074         st      %g2, [%o3]                    << 
1075                                               << 
1076         std     %f0, [%o0 + 0x00]             << 
1077         std     %f2, [%o0 + 0x08]             << 
1078         std     %f4, [%o0 + 0x10]             << 
1079         std     %f6, [%o0 + 0x18]             << 
1080         std     %f8, [%o0 + 0x20]             << 
1081         std     %f10, [%o0 + 0x28]            << 
1082         std     %f12, [%o0 + 0x30]            << 
1083         std     %f14, [%o0 + 0x38]            << 
1084         std     %f16, [%o0 + 0x40]            << 
1085         std     %f18, [%o0 + 0x48]            << 
1086         std     %f20, [%o0 + 0x50]            << 
1087         std     %f22, [%o0 + 0x58]            << 
1088         std     %f24, [%o0 + 0x60]            << 
1089         std     %f26, [%o0 + 0x68]            << 
1090         std     %f28, [%o0 + 0x70]            << 
1091         retl                                  << 
1092          std    %f30, [%o0 + 0x78]            << 
1093                                               << 
1094         /* Thanks for Theo Deraadt and the au << 
1095          * code for pointing out this possibl << 
1096          * above we could trap on the fsr sto << 
1097          * code has to know how to deal with  << 
1098          */                                   << 
1099 fpsave_catch:                                 << 
1100         b       fpsave_magic + 4              << 
1101          st     %fsr, [%o1]                   << 
1102                                               << 
1103 fpsave_catch2:                                << 
1104         b       fpsave + 4                    << 
1105          st     %fsr, [%o1]                   << 
1106                                               << 
1107         /* void fpload(unsigned long *fpregs, << 
1108                                               << 
1109         .globl  fpload                        << 
1110 fpload:                                       << 
1111         ldd     [%o0 + 0x00], %f0             << 
1112         ldd     [%o0 + 0x08], %f2             << 
1113         ldd     [%o0 + 0x10], %f4             << 
1114         ldd     [%o0 + 0x18], %f6             << 
1115         ldd     [%o0 + 0x20], %f8             << 
1116         ldd     [%o0 + 0x28], %f10            << 
1117         ldd     [%o0 + 0x30], %f12            << 
1118         ldd     [%o0 + 0x38], %f14            << 
1119         ldd     [%o0 + 0x40], %f16            << 
1120         ldd     [%o0 + 0x48], %f18            << 
1121         ldd     [%o0 + 0x50], %f20            << 
1122         ldd     [%o0 + 0x58], %f22            << 
1123         ldd     [%o0 + 0x60], %f24            << 
1124         ldd     [%o0 + 0x68], %f26            << 
1125         ldd     [%o0 + 0x70], %f28            << 
1126         ldd     [%o0 + 0x78], %f30            << 
1127         ld      [%o1], %fsr                   << 
1128         retl                                  << 
1129          nop                                  << 
1130                                               << 
1131         /* __ndelay and __udelay take two arg << 
1132          * 0 - nsecs or usecs to delay        << 
1133          * 1 - per_cpu udelay_val (loops per  << 
1134          *                                    << 
1135          * Note that ndelay gives HZ times hi << 
1136          * limit.  udelay can handle up to 1s << 
1137          */                                   << 
1138         .globl  __ndelay                      << 
1139 __ndelay:                                     << 
1140         save    %sp, -STACKFRAME_SZ, %sp      << 
1141         mov     %i0, %o0                ! rou << 
1142         mov     0x1ae, %o1              ! 2** << 
1143         umul    %o0, %o1, %o0                 << 
1144         rd      %y, %o1                       << 
1145         mov     %i1, %o1                ! ude << 
1146         umul    %o0, %o1, %o0                 << 
1147         rd      %y, %o1                       << 
1148         ba      delay_continue                << 
1149          mov    %o1, %o0                ! >>3 << 
1150                                               << 
1151         .globl  __udelay                      << 
1152 __udelay:                                     << 
1153         save    %sp, -STACKFRAME_SZ, %sp      << 
1154         mov     %i0, %o0                      << 
1155         sethi   %hi(0x10c7), %o1        ! rou << 
1156         or      %o1, %lo(0x10c7), %o1   ! 2** << 
1157         umul    %o0, %o1, %o0                 << 
1158         rd      %y, %o1                       << 
1159         mov     %i1, %o1                ! ude << 
1160         umul    %o0, %o1, %o0                 << 
1161         rd      %y, %o1                       << 
1162         sethi   %hi(0x028f4b62), %l0    ! Add << 
1163         or      %g0, %lo(0x028f4b62), %l0     << 
1164         addcc   %o0, %l0, %o0           ! 2** << 
1165         bcs,a   3f                            << 
1166          add    %o1, 0x01, %o1                << 
1167 3:                                            << 
1168         mov     HZ, %o0                 ! >>3 << 
1169         umul    %o0, %o1, %o0                 << 
1170         rd      %y, %o1                       << 
1171                                               << 
1172 delay_continue:                               << 
1173         cmp     %o0, 0x0                      << 
1174 1:                                            << 
1175         bne     1b                            << 
1176          subcc  %o0, 1, %o0                   << 
1177                                               << 
1178         ret                                   << 
1179         restore                               << 
1180 EXPORT_SYMBOL(__udelay)                       << 
1181 EXPORT_SYMBOL(__ndelay)                       << 
1182                                               << 
1183         /* Handle a software breakpoint */    << 
1184         /* We have to inform parent that chil << 
1185         .align 4                                 257         .align 4
1186         .globl breakpoint_trap                !! 258         .long 1b,syscall_fault
1187 breakpoint_trap:                              !! 259 .previous
1188         rd      %wim,%l3                      << 
1189         SAVE_ALL                              << 
1190         wr      %l0, PSR_ET, %psr             << 
1191         WRITE_PAUSE                           << 
1192                                               << 
1193         st      %i0, [%sp + STACKFRAME_SZ + P << 
1194         call    sparc_breakpoint              << 
1195          add    %sp, STACKFRAME_SZ, %o0       << 
1196                                                  260 
1197         RESTORE_ALL                           !! 261         pushl %eax
1198                                               << 
1199 #ifdef CONFIG_KGDB                            << 
1200         ENTRY(kgdb_trap_low)                  << 
1201         rd      %wim,%l3                      << 
1202         SAVE_ALL                                 262         SAVE_ALL
1203         wr      %l0, PSR_ET, %psr             !! 263         GET_THREAD_INFO(%ebp)
1204         WRITE_PAUSE                           !! 264         cmpl $(nr_syscalls), %eax
1205                                               !! 265         jae syscall_badsys
1206         mov     %l7, %o0                ! tra !! 266 
1207         call    kgdb_trap                     !! 267         testb $_TIF_SYSCALL_TRACE,TI_FLAGS(%ebp)
1208          add    %sp, STACKFRAME_SZ, %o1 ! str !! 268         jnz syscall_trace_entry
1209                                               !! 269         call *sys_call_table(,%eax,4)
1210         RESTORE_ALL                           !! 270         movl %eax,EAX(%esp)
1211         ENDPROC(kgdb_trap_low)                !! 271         cli
                                                   >> 272         movl TI_FLAGS(%ebp), %ecx
                                                   >> 273         testw $_TIF_ALLWORK_MASK, %cx
                                                   >> 274         jne syscall_exit_work
                                                   >> 275 /* if something modifies registers it must also disable sysexit */
                                                   >> 276         movl EIP(%esp), %edx
                                                   >> 277         movl OLDESP(%esp), %ecx
                                                   >> 278         sti
                                                   >> 279         sysexit
                                                   >> 280 
                                                   >> 281 
                                                   >> 282         # system call handler stub
                                                   >> 283 ENTRY(system_call)
                                                   >> 284         pushl %eax                      # save orig_eax
                                                   >> 285         SAVE_ALL
                                                   >> 286         GET_THREAD_INFO(%ebp)
                                                   >> 287         cmpl $(nr_syscalls), %eax
                                                   >> 288         jae syscall_badsys
                                                   >> 289                                         # system call tracing in operation
                                                   >> 290         testb $_TIF_SYSCALL_TRACE,TI_FLAGS(%ebp)
                                                   >> 291         jnz syscall_trace_entry
                                                   >> 292 syscall_call:
                                                   >> 293         call *sys_call_table(,%eax,4)
                                                   >> 294         movl %eax,EAX(%esp)             # store the return value
                                                   >> 295 syscall_exit:
                                                   >> 296         cli                             # make sure we don't miss an interrupt
                                                   >> 297                                         # setting need_resched or sigpending
                                                   >> 298                                         # between sampling and the iret
                                                   >> 299         movl TI_FLAGS(%ebp), %ecx
                                                   >> 300         testw $_TIF_ALLWORK_MASK, %cx   # current->work
                                                   >> 301         jne syscall_exit_work
                                                   >> 302 restore_all:
                                                   >> 303         RESTORE_ALL
                                                   >> 304 
                                                   >> 305         # perform work that needs to be done immediately before resumption
                                                   >> 306         ALIGN
                                                   >> 307 work_pending:
                                                   >> 308         testb $_TIF_NEED_RESCHED, %cl
                                                   >> 309         jz work_notifysig
                                                   >> 310 work_resched:
                                                   >> 311         call schedule
                                                   >> 312         cli                             # make sure we don't miss an interrupt
                                                   >> 313                                         # setting need_resched or sigpending
                                                   >> 314                                         # between sampling and the iret
                                                   >> 315         movl TI_FLAGS(%ebp), %ecx
                                                   >> 316         andl $_TIF_WORK_MASK, %ecx      # is there any work to be done other
                                                   >> 317                                         # than syscall tracing?
                                                   >> 318         jz restore_all
                                                   >> 319         testb $_TIF_NEED_RESCHED, %cl
                                                   >> 320         jnz work_resched
                                                   >> 321 
                                                   >> 322 work_notifysig:                         # deal with pending signals and
                                                   >> 323                                         # notify-resume requests
                                                   >> 324         testl $VM_MASK, EFLAGS(%esp)
                                                   >> 325         movl %esp, %eax
                                                   >> 326         jne work_notifysig_v86          # returning to kernel-space or
                                                   >> 327                                         # vm86-space
                                                   >> 328         xorl %edx, %edx
                                                   >> 329         call do_notify_resume
                                                   >> 330         jmp restore_all
                                                   >> 331 
                                                   >> 332         ALIGN
                                                   >> 333 work_notifysig_v86:
                                                   >> 334         pushl %ecx
                                                   >> 335         call save_v86_state
                                                   >> 336         popl %ecx
                                                   >> 337         movl %eax, %esp
                                                   >> 338         xorl %edx, %edx
                                                   >> 339         call do_notify_resume
                                                   >> 340         jmp restore_all
                                                   >> 341 
                                                   >> 342         # perform syscall exit tracing
                                                   >> 343         ALIGN
                                                   >> 344 syscall_trace_entry:
                                                   >> 345         movl $-ENOSYS,EAX(%esp)
                                                   >> 346         movl %esp, %eax
                                                   >> 347         xorl %edx,%edx
                                                   >> 348         call do_syscall_trace
                                                   >> 349         movl ORIG_EAX(%esp), %eax
                                                   >> 350         cmpl $(nr_syscalls), %eax
                                                   >> 351         jnae syscall_call
                                                   >> 352         jmp syscall_exit
                                                   >> 353 
                                                   >> 354         # perform syscall exit tracing
                                                   >> 355         ALIGN
                                                   >> 356 syscall_exit_work:
                                                   >> 357         testb $_TIF_SYSCALL_TRACE, %cl
                                                   >> 358         jz work_pending
                                                   >> 359         sti                             # could let do_syscall_trace() call
                                                   >> 360                                         # schedule() instead
                                                   >> 361         movl %esp, %eax
                                                   >> 362         movl $1, %edx
                                                   >> 363         call do_syscall_trace
                                                   >> 364         jmp resume_userspace
                                                   >> 365 
                                                   >> 366         ALIGN
                                                   >> 367 syscall_fault:
                                                   >> 368         pushl %eax                      # save orig_eax
                                                   >> 369         SAVE_ALL
                                                   >> 370         GET_THREAD_INFO(%ebp)
                                                   >> 371         movl $-EFAULT,EAX(%esp)
                                                   >> 372         jmp resume_userspace
                                                   >> 373 
                                                   >> 374         ALIGN
                                                   >> 375 syscall_badsys:
                                                   >> 376         movl $-ENOSYS,EAX(%esp)
                                                   >> 377         jmp resume_userspace
                                                   >> 378 
                                                   >> 379 /*
                                                   >> 380  * Build the entry stubs and pointer table with
                                                   >> 381  * some assembler magic.
                                                   >> 382  */
                                                   >> 383 .data
                                                   >> 384 ENTRY(interrupt)
                                                   >> 385 .text
                                                   >> 386 
                                                   >> 387 vector=0
                                                   >> 388 ENTRY(irq_entries_start)
                                                   >> 389 .rept NR_IRQS
                                                   >> 390         ALIGN
                                                   >> 391 1:      pushl $vector-256
                                                   >> 392         jmp common_interrupt
                                                   >> 393 .data
                                                   >> 394         .long 1b
                                                   >> 395 .text
                                                   >> 396 vector=vector+1
                                                   >> 397 .endr
                                                   >> 398 
                                                   >> 399         ALIGN
                                                   >> 400 common_interrupt:
                                                   >> 401         SAVE_ALL
                                                   >> 402         call do_IRQ
                                                   >> 403         jmp ret_from_intr
                                                   >> 404 
                                                   >> 405 #define BUILD_INTERRUPT(name, nr)       \
                                                   >> 406 ENTRY(name)                             \
                                                   >> 407         pushl $nr-256;                  \
                                                   >> 408         SAVE_ALL                        \
                                                   >> 409         call smp_/**/name;      \
                                                   >> 410         jmp ret_from_intr;
                                                   >> 411 
                                                   >> 412 /* The include is where all of the SMP etc. interrupts come from */
                                                   >> 413 #include "entry_arch.h"
                                                   >> 414 
                                                   >> 415 ENTRY(divide_error)
                                                   >> 416         pushl $0                        # no error code
                                                   >> 417         pushl $do_divide_error
                                                   >> 418         ALIGN
                                                   >> 419 error_code:
                                                   >> 420         pushl %ds
                                                   >> 421         pushl %eax
                                                   >> 422         xorl %eax, %eax
                                                   >> 423         pushl %ebp
                                                   >> 424         pushl %edi
                                                   >> 425         pushl %esi
                                                   >> 426         pushl %edx
                                                   >> 427         decl %eax                       # eax = -1
                                                   >> 428         pushl %ecx
                                                   >> 429         pushl %ebx
                                                   >> 430         cld
                                                   >> 431         movl %es, %ecx
                                                   >> 432         movl ORIG_EAX(%esp), %esi       # get the error code
                                                   >> 433         movl ES(%esp), %edi             # get the function address
                                                   >> 434         movl %eax, ORIG_EAX(%esp)
                                                   >> 435         movl %ecx, ES(%esp)
                                                   >> 436         movl %esp, %edx
                                                   >> 437         pushl %esi                      # push the error code
                                                   >> 438         pushl %edx                      # push the pt_regs pointer
                                                   >> 439         movl $(__USER_DS), %edx
                                                   >> 440         movl %edx, %ds
                                                   >> 441         movl %edx, %es
                                                   >> 442         call *%edi
                                                   >> 443         addl $8, %esp
                                                   >> 444         jmp ret_from_exception
                                                   >> 445 
                                                   >> 446 ENTRY(coprocessor_error)
                                                   >> 447         pushl $0
                                                   >> 448         pushl $do_coprocessor_error
                                                   >> 449         jmp error_code
                                                   >> 450 
                                                   >> 451 ENTRY(simd_coprocessor_error)
                                                   >> 452         pushl $0
                                                   >> 453         pushl $do_simd_coprocessor_error
                                                   >> 454         jmp error_code
                                                   >> 455 
                                                   >> 456 ENTRY(device_not_available)
                                                   >> 457         pushl $-1                       # mark this as an int
                                                   >> 458         SAVE_ALL
                                                   >> 459         movl %cr0, %eax
                                                   >> 460         testl $0x4, %eax                # EM (math emulation bit)
                                                   >> 461         jne device_not_available_emulate
                                                   >> 462         preempt_stop
                                                   >> 463         call math_state_restore
                                                   >> 464         jmp ret_from_exception
                                                   >> 465 device_not_available_emulate:
                                                   >> 466         pushl $0                        # temporary storage for ORIG_EIP
                                                   >> 467         call math_emulate
                                                   >> 468         addl $4, %esp
                                                   >> 469         jmp ret_from_exception
                                                   >> 470 
                                                   >> 471 /*
                                                   >> 472  * Debug traps and NMI can happen at the one SYSENTER instruction
                                                   >> 473  * that sets up the real kernel stack. Check here, since we can't
                                                   >> 474  * allow the wrong stack to be used.
                                                   >> 475  *
                                                   >> 476  * "TSS_ESP0_OFFSET+12" is because the NMI/debug handler will have
                                                   >> 477  * already pushed 3 words if it hits on the sysenter instruction:
                                                   >> 478  * eflags, cs and eip.
                                                   >> 479  *
                                                   >> 480  * We just load the right stack, and push the three (known) values
                                                   >> 481  * by hand onto the new stack - while updating the return eip past
                                                   >> 482  * the instruction that would have done it for sysenter.
                                                   >> 483  */
                                                   >> 484 #define FIX_STACK(offset, ok, label)            \
                                                   >> 485         cmpw $__KERNEL_CS,4(%esp);              \
                                                   >> 486         jne ok;                                 \
                                                   >> 487 label:                                          \
                                                   >> 488         movl TSS_ESP0_OFFSET+offset(%esp),%esp; \
                                                   >> 489         pushfl;                                 \
                                                   >> 490         pushl $__KERNEL_CS;                     \
                                                   >> 491         pushl $sysenter_past_esp
                                                   >> 492 
                                                   >> 493 ENTRY(debug)
                                                   >> 494         cmpl $sysenter_entry,(%esp)
                                                   >> 495         jne debug_stack_correct
                                                   >> 496         FIX_STACK(12, debug_stack_correct, debug_esp_fix_insn)
                                                   >> 497 debug_stack_correct:
                                                   >> 498         pushl $0
                                                   >> 499         pushl $do_debug
                                                   >> 500         jmp error_code
                                                   >> 501 
                                                   >> 502 /*
                                                   >> 503  * NMI is doubly nasty. It can happen _while_ we're handling
                                                   >> 504  * a debug fault, and the debug fault hasn't yet been able to
                                                   >> 505  * clear up the stack. So we first check whether we got  an
                                                   >> 506  * NMI on the sysenter entry path, but after that we need to
                                                   >> 507  * check whether we got an NMI on the debug path where the debug
                                                   >> 508  * fault happened on the sysenter path.
                                                   >> 509  */
                                                   >> 510 ENTRY(nmi)
                                                   >> 511         cmpl $sysenter_entry,(%esp)
                                                   >> 512         je nmi_stack_fixup
                                                   >> 513         pushl %eax
                                                   >> 514         movl %esp,%eax
                                                   >> 515         /* Do not access memory above the end of our stack page,
                                                   >> 516          * it might not exist.
                                                   >> 517          */
                                                   >> 518         andl $0x1fff,%eax
                                                   >> 519         cmpl $0x1fec,%eax
                                                   >> 520         popl %eax
                                                   >> 521         jae nmi_stack_correct
                                                   >> 522         cmpl $sysenter_entry,12(%esp)
                                                   >> 523         je nmi_debug_stack_check
                                                   >> 524 nmi_stack_correct:
                                                   >> 525         pushl %eax
                                                   >> 526         SAVE_ALL
                                                   >> 527         movl %esp, %edx
                                                   >> 528         pushl $0
                                                   >> 529         pushl %edx
                                                   >> 530         call do_nmi
                                                   >> 531         addl $8, %esp
                                                   >> 532         RESTORE_ALL
                                                   >> 533 
                                                   >> 534 nmi_stack_fixup:
                                                   >> 535         FIX_STACK(12,nmi_stack_correct, 1)
                                                   >> 536         jmp nmi_stack_correct
                                                   >> 537 nmi_debug_stack_check:
                                                   >> 538         cmpw $__KERNEL_CS,16(%esp)
                                                   >> 539         jne nmi_stack_correct
                                                   >> 540         cmpl $debug - 1,(%esp)
                                                   >> 541         jle nmi_stack_correct
                                                   >> 542         cmpl $debug_esp_fix_insn,(%esp)
                                                   >> 543         jle nmi_debug_stack_fixup
                                                   >> 544 nmi_debug_stack_fixup:
                                                   >> 545         FIX_STACK(24,nmi_stack_correct, 1)
                                                   >> 546         jmp nmi_stack_correct
                                                   >> 547 
                                                   >> 548 ENTRY(int3)
                                                   >> 549         pushl $0
                                                   >> 550         pushl $do_int3
                                                   >> 551         jmp error_code
                                                   >> 552 
                                                   >> 553 ENTRY(overflow)
                                                   >> 554         pushl $0
                                                   >> 555         pushl $do_overflow
                                                   >> 556         jmp error_code
                                                   >> 557 
                                                   >> 558 ENTRY(bounds)
                                                   >> 559         pushl $0
                                                   >> 560         pushl $do_bounds
                                                   >> 561         jmp error_code
                                                   >> 562 
                                                   >> 563 ENTRY(invalid_op)
                                                   >> 564         pushl $0
                                                   >> 565         pushl $do_invalid_op
                                                   >> 566         jmp error_code
                                                   >> 567 
                                                   >> 568 ENTRY(coprocessor_segment_overrun)
                                                   >> 569         pushl $0
                                                   >> 570         pushl $do_coprocessor_segment_overrun
                                                   >> 571         jmp error_code
                                                   >> 572 
                                                   >> 573 ENTRY(invalid_TSS)
                                                   >> 574         pushl $do_invalid_TSS
                                                   >> 575         jmp error_code
                                                   >> 576 
                                                   >> 577 ENTRY(segment_not_present)
                                                   >> 578         pushl $do_segment_not_present
                                                   >> 579         jmp error_code
                                                   >> 580 
                                                   >> 581 ENTRY(stack_segment)
                                                   >> 582         pushl $do_stack_segment
                                                   >> 583         jmp error_code
                                                   >> 584 
                                                   >> 585 ENTRY(general_protection)
                                                   >> 586         pushl $do_general_protection
                                                   >> 587         jmp error_code
                                                   >> 588 
                                                   >> 589 ENTRY(alignment_check)
                                                   >> 590         pushl $do_alignment_check
                                                   >> 591         jmp error_code
                                                   >> 592 
                                                   >> 593 ENTRY(page_fault)
                                                   >> 594         pushl $do_page_fault
                                                   >> 595         jmp error_code
                                                   >> 596 
                                                   >> 597 #ifdef CONFIG_X86_MCE
                                                   >> 598 ENTRY(machine_check)
                                                   >> 599         pushl $0
                                                   >> 600         pushl machine_check_vector
                                                   >> 601         jmp error_code
1212 #endif                                           602 #endif
1213                                                  603 
1214         .align  4                             !! 604 ENTRY(spurious_interrupt_bug)
1215         .globl  flush_patch_exception         !! 605         pushl $0
1216 flush_patch_exception:                        !! 606         pushl $do_spurious_interrupt_bug
1217         FLUSH_ALL_KERNEL_WINDOWS;             !! 607         jmp error_code
1218         ldd     [%o0], %o6                    !! 608 
1219         jmpl    %o7 + 0xc, %g0                !! 609 .data
1220          mov    1, %g1                        !! 610 ENTRY(sys_call_table)
1221                                               !! 611         .long sys_restart_syscall       /* 0 - old "setup()" system call, used for restarting */
1222         .align  4                             !! 612         .long sys_exit
1223         .globl  kill_user_windows, kuw_patch1 !! 613         .long sys_fork
1224         .globl  kuw_patch1                    !! 614         .long sys_read
1225 kuw_patch1_7win:        sll     %o3, 6, %o3   !! 615         .long sys_write
1226                                               !! 616         .long sys_open          /* 5 */
1227         /* No matter how much overhead this r !! 617         .long sys_close
1228          * case scenario, it is several times !! 618         .long sys_waitpid
1229          * traps with the old method of just  !! 619         .long sys_creat
1230          */                                   !! 620         .long sys_link
1231 kill_user_windows:                            !! 621         .long sys_unlink        /* 10 */
1232         ld      [%g6 + TI_UWINMASK], %o0      !! 622         .long sys_execve
1233         orcc    %g0, %o0, %g0                 !! 623         .long sys_chdir
1234         be      3f                            !! 624         .long sys_time
1235          rd     %psr, %o5                     !! 625         .long sys_mknod
1236         or      %o5, PSR_PIL, %o4             !! 626         .long sys_chmod         /* 15 */
1237         wr      %o4, 0x0, %psr                !! 627         .long sys_lchown16
1238         WRITE_PAUSE                           !! 628         .long sys_ni_syscall    /* old break syscall holder */
1239 1:                                            !! 629         .long sys_stat
1240         ld      [%g6 + TI_UWINMASK], %o0      !! 630         .long sys_lseek
1241         orcc    %g0, %o0, %g0                 !! 631         .long sys_getpid        /* 20 */
1242         be      4f                            !! 632         .long sys_mount
1243          rd     %wim, %o3                     !! 633         .long sys_oldumount
1244         srl     %o3, 1, %o4                   !! 634         .long sys_setuid16
1245 kuw_patch1:                                   !! 635         .long sys_getuid16
1246         sll     %o3, 7, %o3                   !! 636         .long sys_stime         /* 25 */
1247         or      %o4, %o3, %o3                 !! 637         .long sys_ptrace
1248         andncc  %o0, %o3, %o0                 !! 638         .long sys_alarm
1249         bne     kuw_patch1                    !! 639         .long sys_fstat
1250          srl    %o3, 1, %o4                   !! 640         .long sys_pause
1251         wr      %o3, 0x0, %wim                !! 641         .long sys_utime         /* 30 */
1252         st      %g0, [%g6 + TI_UWINMASK]      !! 642         .long sys_ni_syscall    /* old stty syscall holder */
1253 4:                                            !! 643         .long sys_ni_syscall    /* old gtty syscall holder */
1254         wr      %o5, 0x0, %psr                !! 644         .long sys_access
1255         WRITE_PAUSE                           !! 645         .long sys_nice
1256 3:                                            !! 646         .long sys_ni_syscall    /* 35 - old ftime syscall holder */
1257         retl                                  !! 647         .long sys_sync
1258          st     %g0, [%g6 + TI_W_SAVED]       !! 648         .long sys_kill
1259                                               !! 649         .long sys_rename
1260         .align  4                             !! 650         .long sys_mkdir
1261         .globl  restore_current               !! 651         .long sys_rmdir         /* 40 */
1262 restore_current:                              !! 652         .long sys_dup
1263         LOAD_CURRENT(g6, o0)                  !! 653         .long sys_pipe
1264         retl                                  !! 654         .long sys_times
1265          nop                                  !! 655         .long sys_ni_syscall    /* old prof syscall holder */
1266                                               !! 656         .long sys_brk           /* 45 */
1267 #ifdef CONFIG_PCIC_PCI                        !! 657         .long sys_setgid16
1268 #include <asm/pcic.h>                         !! 658         .long sys_getgid16
1269                                               !! 659         .long sys_signal
1270         .align  4                             !! 660         .long sys_geteuid16
1271         .globl  linux_trap_ipi15_pcic         !! 661         .long sys_getegid16     /* 50 */
1272 linux_trap_ipi15_pcic:                        !! 662         .long sys_acct
1273         rd      %wim, %l3                     !! 663         .long sys_umount        /* recycled never used phys() */
1274         SAVE_ALL                              !! 664         .long sys_ni_syscall    /* old lock syscall holder */
1275                                               !! 665         .long sys_ioctl
1276         /*                                    !! 666         .long sys_fcntl         /* 55 */
1277          * First deactivate NMI               !! 667         .long sys_ni_syscall    /* old mpx syscall holder */
1278          * or we cannot drop ET, cannot get w !! 668         .long sys_setpgid
1279          * The busy loop is necessary because !! 669         .long sys_ni_syscall    /* old ulimit syscall holder */
1280          * sometimes does not go away quickly !! 670         .long sys_olduname
1281          */                                   !! 671         .long sys_umask         /* 60 */
1282         sethi   %hi(pcic_regs), %o1           !! 672         .long sys_chroot
1283         ld      [%o1 + %lo(pcic_regs)], %o2   !! 673         .long sys_ustat
1284                                               !! 674         .long sys_dup2
1285         ! Get pending status for printouts la !! 675         .long sys_getppid
1286         ld      [%o2 + PCI_SYS_INT_PENDING],  !! 676         .long sys_getpgrp       /* 65 */
1287                                               !! 677         .long sys_setsid
1288         mov     PCI_SYS_INT_PENDING_CLEAR_ALL !! 678         .long sys_sigaction
1289         stb     %o1, [%o2 + PCI_SYS_INT_PENDI !! 679         .long sys_sgetmask
1290 1:                                            !! 680         .long sys_ssetmask
1291         ld      [%o2 + PCI_SYS_INT_PENDING],  !! 681         .long sys_setreuid16    /* 70 */
1292         andcc   %o1, ((PCI_SYS_INT_PENDING_PI !! 682         .long sys_setregid16
1293         bne     1b                            !! 683         .long sys_sigsuspend
1294          nop                                  !! 684         .long sys_sigpending
1295                                               !! 685         .long sys_sethostname
1296         or      %l0, PSR_PIL, %l4             !! 686         .long sys_setrlimit     /* 75 */
1297         wr      %l4, 0x0, %psr                !! 687         .long sys_old_getrlimit
1298         WRITE_PAUSE                           !! 688         .long sys_getrusage
1299         wr      %l4, PSR_ET, %psr             !! 689         .long sys_gettimeofday
1300         WRITE_PAUSE                           !! 690         .long sys_settimeofday
1301                                               !! 691         .long sys_getgroups16   /* 80 */
1302         call    pcic_nmi                      !! 692         .long sys_setgroups16
1303          add    %sp, STACKFRAME_SZ, %o1 ! str !! 693         .long old_select
1304         RESTORE_ALL                           !! 694         .long sys_symlink
1305                                               !! 695         .long sys_lstat
1306         .globl  pcic_nmi_trap_patch           !! 696         .long sys_readlink      /* 85 */
1307 pcic_nmi_trap_patch:                          !! 697         .long sys_uselib
1308         sethi   %hi(linux_trap_ipi15_pcic), % !! 698         .long sys_swapon
1309         jmpl    %l3 + %lo(linux_trap_ipi15_pc !! 699         .long sys_reboot
1310          rd     %psr, %l0                     !! 700         .long old_readdir
1311         .word   0                             !! 701         .long old_mmap          /* 90 */
1312                                               !! 702         .long sys_munmap
1313 #endif /* CONFIG_PCIC_PCI */                  !! 703         .long sys_truncate
1314                                               !! 704         .long sys_ftruncate
1315         .globl  flushw_all                    !! 705         .long sys_fchmod
1316 flushw_all:                                   !! 706         .long sys_fchown16      /* 95 */
1317         save    %sp, -0x40, %sp               !! 707         .long sys_getpriority
1318         save    %sp, -0x40, %sp               !! 708         .long sys_setpriority
1319         save    %sp, -0x40, %sp               !! 709         .long sys_ni_syscall    /* old profil syscall holder */
1320         save    %sp, -0x40, %sp               !! 710         .long sys_statfs
1321         save    %sp, -0x40, %sp               !! 711         .long sys_fstatfs       /* 100 */
1322         save    %sp, -0x40, %sp               !! 712         .long sys_ioperm
1323         save    %sp, -0x40, %sp               !! 713         .long sys_socketcall
1324         restore                               !! 714         .long sys_syslog
1325         restore                               !! 715         .long sys_setitimer
1326         restore                               !! 716         .long sys_getitimer     /* 105 */
1327         restore                               !! 717         .long sys_newstat
1328         restore                               !! 718         .long sys_newlstat
1329         restore                               !! 719         .long sys_newfstat
1330         ret                                   !! 720         .long sys_uname
1331          restore                              !! 721         .long sys_iopl          /* 110 */
1332                                               !! 722         .long sys_vhangup
1333 #ifdef CONFIG_SMP                             !! 723         .long sys_ni_syscall    /* old "idle" system call */
1334 ENTRY(hard_smp_processor_id)                  !! 724         .long sys_vm86old
1335 661:    rd              %tbr, %g1             !! 725         .long sys_wait4
1336         srl             %g1, 12, %o0          !! 726         .long sys_swapoff       /* 115 */
1337         and             %o0, 3, %o0           !! 727         .long sys_sysinfo
1338         .section        .cpuid_patch, "ax"    !! 728         .long sys_ipc
1339         /* Instruction location. */           !! 729         .long sys_fsync
1340         .word           661b                  !! 730         .long sys_sigreturn
1341         /* SUN4D implementation. */           !! 731         .long sys_clone         /* 120 */
1342         lda             [%g0] ASI_M_VIKING_TM !! 732         .long sys_setdomainname
1343         nop                                   !! 733         .long sys_newuname
1344         nop                                   !! 734         .long sys_modify_ldt
1345         /* LEON implementation. */            !! 735         .long sys_adjtimex
1346         rd              %asr17, %o0           !! 736         .long sys_mprotect      /* 125 */
1347         srl             %o0, 0x1c, %o0        !! 737         .long sys_sigprocmask
1348         nop                                   !! 738         .long sys_ni_syscall    /* old "create_module" */ 
1349         .previous                             !! 739         .long sys_init_module
1350         retl                                  !! 740         .long sys_delete_module
1351          nop                                  !! 741         .long sys_ni_syscall    /* 130: old "get_kernel_syms" */
1352 ENDPROC(hard_smp_processor_id)                !! 742         .long sys_quotactl
1353 #endif                                        !! 743         .long sys_getpgid
                                                   >> 744         .long sys_fchdir
                                                   >> 745         .long sys_bdflush
                                                   >> 746         .long sys_sysfs         /* 135 */
                                                   >> 747         .long sys_personality
                                                   >> 748         .long sys_ni_syscall    /* reserved for afs_syscall */
                                                   >> 749         .long sys_setfsuid16
                                                   >> 750         .long sys_setfsgid16
                                                   >> 751         .long sys_llseek        /* 140 */
                                                   >> 752         .long sys_getdents
                                                   >> 753         .long sys_select
                                                   >> 754         .long sys_flock
                                                   >> 755         .long sys_msync
                                                   >> 756         .long sys_readv         /* 145 */
                                                   >> 757         .long sys_writev
                                                   >> 758         .long sys_getsid
                                                   >> 759         .long sys_fdatasync
                                                   >> 760         .long sys_sysctl
                                                   >> 761         .long sys_mlock         /* 150 */
                                                   >> 762         .long sys_munlock
                                                   >> 763         .long sys_mlockall
                                                   >> 764         .long sys_munlockall
                                                   >> 765         .long sys_sched_setparam
                                                   >> 766         .long sys_sched_getparam   /* 155 */
                                                   >> 767         .long sys_sched_setscheduler
                                                   >> 768         .long sys_sched_getscheduler
                                                   >> 769         .long sys_sched_yield
                                                   >> 770         .long sys_sched_get_priority_max
                                                   >> 771         .long sys_sched_get_priority_min  /* 160 */
                                                   >> 772         .long sys_sched_rr_get_interval
                                                   >> 773         .long sys_nanosleep
                                                   >> 774         .long sys_mremap
                                                   >> 775         .long sys_setresuid16
                                                   >> 776         .long sys_getresuid16   /* 165 */
                                                   >> 777         .long sys_vm86
                                                   >> 778         .long sys_ni_syscall    /* Old sys_query_module */
                                                   >> 779         .long sys_poll
                                                   >> 780         .long sys_nfsservctl
                                                   >> 781         .long sys_setresgid16   /* 170 */
                                                   >> 782         .long sys_getresgid16
                                                   >> 783         .long sys_prctl
                                                   >> 784         .long sys_rt_sigreturn
                                                   >> 785         .long sys_rt_sigaction
                                                   >> 786         .long sys_rt_sigprocmask        /* 175 */
                                                   >> 787         .long sys_rt_sigpending
                                                   >> 788         .long sys_rt_sigtimedwait
                                                   >> 789         .long sys_rt_sigqueueinfo
                                                   >> 790         .long sys_rt_sigsuspend
                                                   >> 791         .long sys_pread64       /* 180 */
                                                   >> 792         .long sys_pwrite64
                                                   >> 793         .long sys_chown16
                                                   >> 794         .long sys_getcwd
                                                   >> 795         .long sys_capget
                                                   >> 796         .long sys_capset        /* 185 */
                                                   >> 797         .long sys_sigaltstack
                                                   >> 798         .long sys_sendfile
                                                   >> 799         .long sys_ni_syscall    /* reserved for streams1 */
                                                   >> 800         .long sys_ni_syscall    /* reserved for streams2 */
                                                   >> 801         .long sys_vfork         /* 190 */
                                                   >> 802         .long sys_getrlimit
                                                   >> 803         .long sys_mmap2
                                                   >> 804         .long sys_truncate64
                                                   >> 805         .long sys_ftruncate64
                                                   >> 806         .long sys_stat64        /* 195 */
                                                   >> 807         .long sys_lstat64
                                                   >> 808         .long sys_fstat64
                                                   >> 809         .long sys_lchown
                                                   >> 810         .long sys_getuid
                                                   >> 811         .long sys_getgid        /* 200 */
                                                   >> 812         .long sys_geteuid
                                                   >> 813         .long sys_getegid
                                                   >> 814         .long sys_setreuid
                                                   >> 815         .long sys_setregid
                                                   >> 816         .long sys_getgroups     /* 205 */
                                                   >> 817         .long sys_setgroups
                                                   >> 818         .long sys_fchown
                                                   >> 819         .long sys_setresuid
                                                   >> 820         .long sys_getresuid
                                                   >> 821         .long sys_setresgid     /* 210 */
                                                   >> 822         .long sys_getresgid
                                                   >> 823         .long sys_chown
                                                   >> 824         .long sys_setuid
                                                   >> 825         .long sys_setgid
                                                   >> 826         .long sys_setfsuid      /* 215 */
                                                   >> 827         .long sys_setfsgid
                                                   >> 828         .long sys_pivot_root
                                                   >> 829         .long sys_mincore
                                                   >> 830         .long sys_madvise
                                                   >> 831         .long sys_getdents64    /* 220 */
                                                   >> 832         .long sys_fcntl64
                                                   >> 833         .long sys_ni_syscall    /* reserved for TUX */
                                                   >> 834         .long sys_ni_syscall
                                                   >> 835         .long sys_gettid
                                                   >> 836         .long sys_readahead     /* 225 */
                                                   >> 837         .long sys_setxattr
                                                   >> 838         .long sys_lsetxattr
                                                   >> 839         .long sys_fsetxattr
                                                   >> 840         .long sys_getxattr
                                                   >> 841         .long sys_lgetxattr     /* 230 */
                                                   >> 842         .long sys_fgetxattr
                                                   >> 843         .long sys_listxattr
                                                   >> 844         .long sys_llistxattr
                                                   >> 845         .long sys_flistxattr
                                                   >> 846         .long sys_removexattr   /* 235 */
                                                   >> 847         .long sys_lremovexattr
                                                   >> 848         .long sys_fremovexattr
                                                   >> 849         .long sys_tkill
                                                   >> 850         .long sys_sendfile64
                                                   >> 851         .long sys_futex         /* 240 */
                                                   >> 852         .long sys_sched_setaffinity
                                                   >> 853         .long sys_sched_getaffinity
                                                   >> 854         .long sys_set_thread_area
                                                   >> 855         .long sys_get_thread_area
                                                   >> 856         .long sys_io_setup      /* 245 */
                                                   >> 857         .long sys_io_destroy
                                                   >> 858         .long sys_io_getevents
                                                   >> 859         .long sys_io_submit
                                                   >> 860         .long sys_io_cancel
                                                   >> 861         .long sys_fadvise64     /* 250 */
                                                   >> 862         .long sys_ni_syscall
                                                   >> 863         .long sys_exit_group
                                                   >> 864         .long sys_lookup_dcookie
                                                   >> 865         .long sys_epoll_create
                                                   >> 866         .long sys_epoll_ctl     /* 255 */
                                                   >> 867         .long sys_epoll_wait
                                                   >> 868         .long sys_remap_file_pages
                                                   >> 869         .long sys_set_tid_address
                                                   >> 870         .long sys_timer_create
                                                   >> 871         .long sys_timer_settime         /* 260 */
                                                   >> 872         .long sys_timer_gettime
                                                   >> 873         .long sys_timer_getoverrun
                                                   >> 874         .long sys_timer_delete
                                                   >> 875         .long sys_clock_settime
                                                   >> 876         .long sys_clock_gettime         /* 265 */
                                                   >> 877         .long sys_clock_getres
                                                   >> 878         .long sys_clock_nanosleep
                                                   >> 879         .long sys_statfs64
                                                   >> 880         .long sys_fstatfs64     
                                                   >> 881         .long sys_tgkill        /* 270 */
                                                   >> 882         .long sys_utimes
                                                   >> 883         .long sys_fadvise64_64
                                                   >> 884         .long sys_ni_syscall    /* sys_vserver */
1354                                                  885 
1355 /* End of entry.S */                          !! 886 syscall_table_size=(.-sys_call_table)
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php