~ [ 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.4.37.11)


  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/sys.h>
                                                   >>  45 #include <linux/linkage.h>
                                                   >>  46 #include <asm/segment.h>
 18 #include <asm/smp.h>                               47 #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>                          << 
 25 #include <asm/winmacro.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                                                << 
 33 #include <asm/asmmacro.h>                      << 
 34                                                << 
 35 #define curptr      g6                         << 
 36                                                << 
 37 /* These are just handy. */                    << 
 38 #define _SV     save    %sp, -STACKFRAME_SZ, % << 
 39 #define _RS     restore                        << 
 40                                                << 
 41 #define FLUSH_ALL_KERNEL_WINDOWS \             << 
 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                                         << 
 57                                                << 
 58 #if defined(CONFIG_BLK_DEV_FD) || defined(CONF << 
 59         .align  4                              << 
 60         .globl  floppy_hardint                 << 
 61 floppy_hardint:                                << 
 62         /*                                     << 
 63          * This code cannot touch registers %l << 
 64          * because SAVE_ALL depends on their v << 
 65          * on %l3 also, but we regenerate it b << 
 66          * Other registers are:                << 
 67          * %l3 -- base address of fdc register << 
 68          * %l4 -- pdma_vaddr                   << 
 69          * %l5 -- scratch for ld/st address    << 
 70          * %l6 -- pdma_size                    << 
 71          * %l7 -- scratch [floppy byte, ld/st  << 
 72          */                                    << 
 73                                                << 
 74         /* Do we have work to do? */           << 
 75         sethi   %hi(doing_pdma), %l7           << 
 76         ld      [%l7 + %lo(doing_pdma)], %l7   << 
 77         cmp     %l7, 0                         << 
 78         be      floppy_dosoftint               << 
 79          nop                                   << 
 80                                                << 
 81         /* Load fdc register base */           << 
 82         sethi   %hi(fdc_status), %l3           << 
 83         ld      [%l3 + %lo(fdc_status)], %l3   << 
 84                                                << 
 85         /* Setup register addresses */         << 
 86         sethi   %hi(pdma_vaddr), %l5    ! tran << 
 87         ld      [%l5 + %lo(pdma_vaddr)], %l4   << 
 88         sethi   %hi(pdma_size), %l5     ! byte << 
 89         ld      [%l5 + %lo(pdma_size)], %l6    << 
 90 next_byte:                                     << 
 91         ldub    [%l3], %l7                     << 
 92                                                << 
 93         andcc   %l7, 0x80, %g0          ! Does << 
 94         bz      floppy_fifo_emptied     ! fifo << 
 95          andcc  %l7, 0x20, %g0          ! in n << 
 96         bz      floppy_overrun          ! nope << 
 97          andcc  %l7, 0x40, %g0          ! 0=wr << 
 98         bz      floppy_write                   << 
 99          sub    %l6, 0x1, %l6                  << 
100                                                << 
101         /* Ok, actually read this byte */      << 
102         ldub    [%l3 + 1], %l7                 << 
103         orcc    %g0, %l6, %g0                  << 
104         stb     %l7, [%l4]                     << 
105         bne     next_byte                      << 
106          add    %l4, 0x1, %l4                  << 
107                                                << 
108         b       floppy_tdone                   << 
109          nop                                   << 
110                                                << 
111 floppy_write:                                  << 
112         /* Ok, actually write this byte */     << 
113         ldub    [%l4], %l7                     << 
114         orcc    %g0, %l6, %g0                  << 
115         stb     %l7, [%l3 + 1]                 << 
116         bne     next_byte                      << 
117          add    %l4, 0x1, %l4                  << 
118                                                << 
119         /* fall through... */                  << 
120 floppy_tdone:                                  << 
121         sethi   %hi(pdma_vaddr), %l5           << 
122         st      %l4, [%l5 + %lo(pdma_vaddr)]   << 
123         sethi   %hi(pdma_size), %l5            << 
124         st      %l6, [%l5 + %lo(pdma_size)]    << 
125         /* Flip terminal count pin */          << 
126         set     auxio_register, %l7            << 
127         ld      [%l7], %l7                     << 
128                                                << 
129         ldub    [%l7], %l5                     << 
130                                                << 
131         or      %l5, 0xc2, %l5                 << 
132         stb     %l5, [%l7]                     << 
133         andn    %l5, 0x02, %l5                 << 
134                                                << 
135 2:                                             << 
136         /* Kill some time so the bits set */   << 
137         WRITE_PAUSE                            << 
138         WRITE_PAUSE                            << 
139                                                << 
140         stb     %l5, [%l7]                     << 
141                                                << 
142         /* Prevent recursion */                << 
143         sethi   %hi(doing_pdma), %l7           << 
144         b       floppy_dosoftint               << 
145          st     %g0, [%l7 + %lo(doing_pdma)]   << 
146                                                << 
147         /* We emptied the FIFO, but we haven't << 
148          * as of yet.  Store the current trans << 
149          * bytes left to read so we can contin << 
150          * fast IRQ comes in.                  << 
151          */                                    << 
152 floppy_fifo_emptied:                           << 
153         sethi   %hi(pdma_vaddr), %l5           << 
154         st      %l4, [%l5 + %lo(pdma_vaddr)]   << 
155         sethi   %hi(pdma_size), %l7            << 
156         st      %l6, [%l7 + %lo(pdma_size)]    << 
157                                                << 
158         /* Restore condition codes */          << 
159         wr      %l0, 0x0, %psr                 << 
160         WRITE_PAUSE                            << 
161                                                << 
162         jmp     %l1                            << 
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                                                    48 
191         RESTORE_ALL                            !!  49 EBX             = 0x00
192                                                !!  50 ECX             = 0x04
193 #endif /* (CONFIG_BLK_DEV_FD) */               !!  51 EDX             = 0x08
194                                                !!  52 ESI             = 0x0C
195         /* Bad trap handler */                 !!  53 EDI             = 0x10
196         .globl  bad_trap_handler               !!  54 EBP             = 0x14
197 bad_trap_handler:                              !!  55 EAX             = 0x18
198         SAVE_ALL                               !!  56 DS              = 0x1C
199                                                !!  57 ES              = 0x20
200         wr      %l0, PSR_ET, %psr              !!  58 ORIG_EAX        = 0x24
201         WRITE_PAUSE                            !!  59 EIP             = 0x28
202                                                !!  60 CS              = 0x2C
203         add     %sp, STACKFRAME_SZ, %o0 ! pt_r !!  61 EFLAGS          = 0x30
204         call    do_hw_interrupt                !!  62 OLDESP          = 0x34
205          mov    %l7, %o1                ! trap !!  63 OLDSS           = 0x38
                                                   >>  64 
                                                   >>  65 CF_MASK         = 0x00000001
                                                   >>  66 TF_MASK         = 0x00000100
                                                   >>  67 IF_MASK         = 0x00000200
                                                   >>  68 DF_MASK         = 0x00000400
                                                   >>  69 NT_MASK         = 0x00004000
                                                   >>  70 VM_MASK         = 0x00020000
206                                                    71 
207         RESTORE_ALL                            !!  72 /*
208                                                !!  73  * these are offsets into the task-struct.
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  */                                                74  */
213                                                !!  75 state           =  0
214         .align  4                              !!  76 flags           =  4
215         .globl  real_irq_entry, patch_handler_ !!  77 sigpending      =  8
216 real_irq_entry:                                !!  78 addr_limit      = 12
217         SAVE_ALL                               !!  79 exec_domain     = 16
218                                                !!  80 need_resched    = 20
219 #ifdef CONFIG_SMP                              !!  81 tsk_ptrace      = 24
220         .globl  patchme_maybe_smp_msg          !!  82 processor       = 52
221                                                !!  83 
222         cmp     %l7, 11                        !!  84 ENOSYS = 38
223 patchme_maybe_smp_msg:                         !!  85 
224         bgu     maybe_smp4m_msg                !!  86 
225          nop                                   !!  87 #define SAVE_ALL \
226 #endif                                         !!  88         cld; \
227                                                !!  89         pushl %es; \
228 real_irq_continue:                             !!  90         pushl %ds; \
229         or      %l0, PSR_PIL, %g2              !!  91         pushl %eax; \
230         wr      %g2, 0x0, %psr                 !!  92         pushl %ebp; \
231         WRITE_PAUSE                            !!  93         pushl %edi; \
232         wr      %g2, PSR_ET, %psr              !!  94         pushl %esi; \
233         WRITE_PAUSE                            !!  95         pushl %edx; \
234         mov     %l7, %o0                ! irq  !!  96         pushl %ecx; \
235 patch_handler_irq:                             !!  97         pushl %ebx; \
236         call    handler_irq                    !!  98         movl $(__KERNEL_DS),%edx; \
237          add    %sp, STACKFRAME_SZ, %o1 ! pt_r !!  99         movl %edx,%ds; \
238         or      %l0, PSR_PIL, %g2       ! rest !! 100         movl %edx,%es;
239         wr      %g2, PSR_ET, %psr       ! keep !! 101 
240         WRITE_PAUSE                            !! 102 #define RESTORE_ALL     \
241                                                !! 103         popl %ebx;      \
242         RESTORE_ALL                            !! 104         popl %ecx;      \
243                                                !! 105         popl %edx;      \
244 #ifdef CONFIG_SMP                              !! 106         popl %esi;      \
245         /* SMP per-cpu ticker interrupts are h !! 107         popl %edi;      \
246 smp4m_ticker:                                  !! 108         popl %ebp;      \
247         bne     real_irq_continue+4            !! 109         popl %eax;      \
248          or     %l0, PSR_PIL, %g2              !! 110 1:      popl %ds;       \
249         wr      %g2, 0x0, %psr                 !! 111 2:      popl %es;       \
250         WRITE_PAUSE                            !! 112         addl $4,%esp;   \
251         wr      %g2, PSR_ET, %psr              !! 113 3:      iret;           \
252         WRITE_PAUSE                            !! 114 .section .fixup,"ax";   \
253         call    smp4m_percpu_timer_interrupt   !! 115 4:      movl $0,(%esp); \
254          add    %sp, STACKFRAME_SZ, %o0        !! 116         jmp 1b;         \
255         wr      %l0, PSR_ET, %psr              !! 117 5:      movl $0,(%esp); \
256         WRITE_PAUSE                            !! 118         jmp 2b;         \
257         RESTORE_ALL                            !! 119 6:      pushl %ss;      \
258                                                !! 120         popl %ds;       \
259 #define GET_PROCESSOR4M_ID(reg) \              !! 121         pushl %ss;      \
260         rd      %tbr, %reg;     \              !! 122         popl %es;       \
261         srl     %reg, 12, %reg; \              !! 123         pushl $11;      \
262         and     %reg, 3, %reg;                 !! 124         call do_exit;   \
263                                                !! 125 .previous;              \
264         /* Here is where we check for possible !! 126 .section __ex_table,"a";\
265          * on some level other than 15 which i !! 127         .align 4;       \
266          * for cross calls.  That has a separa !! 128         .long 1b,4b;    \
267          *                                     !! 129         .long 2b,5b;    \
268          * IPIs are sent on Level 12, 13 and 1 !! 130         .long 3b,6b;    \
269          */                                    !! 131 .previous
270 maybe_smp4m_msg:                               !! 132 
271         GET_PROCESSOR4M_ID(o3)                 !! 133 #define GET_CURRENT(reg) \
272         sethi   %hi(sun4m_irq_percpu), %l5     !! 134         movl $-8192, reg; \
273         sll     %o3, 2, %o3                    !! 135         andl %esp, reg
274         or      %l5, %lo(sun4m_irq_percpu), %o !! 136 
275         sethi   %hi(0x70000000), %o2    ! Chec !! 137 ENTRY(lcall7)
276         ld      [%o5 + %o3], %o1               !! 138         pushfl                  # We get a different stack layout with call gates,
277         ld      [%o1 + 0x00], %o3       ! sun4 !! 139         pushl %eax              # which has to be cleaned up later..
278         andcc   %o3, %o2, %g0                  !! 140         SAVE_ALL
279         be,a    smp4m_ticker                   !! 141         movl EIP(%esp),%eax     # due to call gates, this is eflags, not eip..
280          cmp    %l7, 14                        !! 142         movl CS(%esp),%edx      # this is eip..
281         /* Soft-IRQ IPI */                     !! 143         movl EFLAGS(%esp),%ecx  # and this is cs..
282         st      %o2, [%o1 + 0x04]       ! sun4 !! 144         movl %eax,EFLAGS(%esp)  #
283         WRITE_PAUSE                            !! 145         andl $~(NT_MASK|TF_MASK|DF_MASK), %eax
284         ld      [%o1 + 0x00], %g0       ! sun4 !! 146         pushl %eax
285         WRITE_PAUSE                            !! 147         popfl
286         or      %l0, PSR_PIL, %l4              !! 148         movl %edx,EIP(%esp)     # Now we move them to their "normal" places
287         wr      %l4, 0x0, %psr                 !! 149         movl %ecx,CS(%esp)      #
288         WRITE_PAUSE                            !! 150         movl %esp,%ebx
289         wr      %l4, PSR_ET, %psr              !! 151         pushl %ebx
290         WRITE_PAUSE                            !! 152         andl $-8192,%ebx        # GET_CURRENT
291         srl     %o3, 28, %o2            ! shif !! 153         movl exec_domain(%ebx),%edx     # Get the execution domain
292 maybe_smp4m_msg_check_single:                  !! 154         movl 4(%edx),%edx       # Get the lcall7 handler for the domain
293         andcc   %o2, 0x1, %g0                  !! 155         pushl $0x7
294         beq,a   maybe_smp4m_msg_check_mask     !! 156         call *%edx
295          andcc  %o2, 0x2, %g0                  !! 157         addl $4, %esp
296         call    smp_call_function_single_inter !! 158         popl %eax
297          nop                                   !! 159         jmp ret_from_sys_call
298         andcc   %o2, 0x2, %g0                  !! 160 
299 maybe_smp4m_msg_check_mask:                    !! 161 ENTRY(lcall27)
300         beq,a   maybe_smp4m_msg_check_resched  !! 162         pushfl                  # We get a different stack layout with call gates,
301          andcc  %o2, 0x4, %g0                  !! 163         pushl %eax              # which has to be cleaned up later..
302         call    smp_call_function_interrupt    !! 164         SAVE_ALL
303          nop                                   !! 165         movl EIP(%esp),%eax     # due to call gates, this is eflags, not eip..
304         andcc   %o2, 0x4, %g0                  !! 166         movl CS(%esp),%edx      # this is eip..
305 maybe_smp4m_msg_check_resched:                 !! 167         movl EFLAGS(%esp),%ecx  # and this is cs..
306         /* rescheduling is done in RESTORE_ALL !! 168         movl %eax,EFLAGS(%esp)  #
307         beq,a   maybe_smp4m_msg_out            !! 169         andl $~(NT_MASK|TF_MASK|DF_MASK), %eax
308          nop                                   !! 170         pushl %eax
309         call    smp_resched_interrupt          !! 171         popfl
310          nop                                   !! 172         movl %edx,EIP(%esp)     # Now we move them to their "normal" places
311 maybe_smp4m_msg_out:                           !! 173         movl %ecx,CS(%esp)      #
312         RESTORE_ALL                            !! 174         movl %esp,%ebx
313                                                !! 175         pushl %ebx
314         .align  4                              !! 176         andl $-8192,%ebx        # GET_CURRENT
315         .globl  linux_trap_ipi15_sun4m         !! 177         movl exec_domain(%ebx),%edx     # Get the execution domain
316 linux_trap_ipi15_sun4m:                        !! 178         movl 4(%edx),%edx       # Get the lcall7 handler for the domain
317         SAVE_ALL                               !! 179         pushl $0x27
318         sethi   %hi(0x80000000), %o2           !! 180         call *%edx
319         GET_PROCESSOR4M_ID(o0)                 !! 181         addl $4, %esp
320         sethi   %hi(sun4m_irq_percpu), %l5     !! 182         popl %eax
321         or      %l5, %lo(sun4m_irq_percpu), %o !! 183         jmp ret_from_sys_call
322         sll     %o0, 2, %o0                    !! 184 
323         ld      [%o5 + %o0], %o5               !! 185 
324         ld      [%o5 + 0x00], %o3       ! sun4 !! 186 ENTRY(ret_from_fork)
325         andcc   %o3, %o2, %g0                  !! 187         pushl %ebx
326         be      sun4m_nmi_error         ! Must !! 188         call SYMBOL_NAME(schedule_tail)
327          st     %o2, [%o5 + 0x04]       ! sun4 !! 189         addl $4, %esp
328         WRITE_PAUSE                            !! 190         GET_CURRENT(%ebx)
329         ld      [%o5 + 0x00], %g0       ! sun4 !! 191         testb $0x02,tsk_ptrace(%ebx)    # PT_TRACESYS
330         WRITE_PAUSE                            !! 192         jne tracesys_exit
331         or      %l0, PSR_PIL, %l4              !! 193         jmp     ret_from_sys_call
332         wr      %l4, 0x0, %psr                 !! 194 
333         WRITE_PAUSE                            !! 195 /*
334         wr      %l4, PSR_ET, %psr              !! 196  * Return to user mode is not as complex as all this looks,
335         WRITE_PAUSE                            !! 197  * but we want the default path for a system call return to
336         call    smp4m_cross_call_irq           !! 198  * go as quickly as possible which is why some of this is
337          nop                                   !! 199  * less clear than it otherwise should be.
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                                                << 
778         andn    %l6, 0xfff, %l6                << 
779         srl     %l5, 6, %l5                    << 
780                                                << 
781         and     %l5, 2, %l5                    << 
782         or      %l5, %l6, %l6                  << 
783                                                << 
784         or      %l6, %l7, %l7                  << 
785                                                << 
786         SAVE_ALL                               << 
787                                                << 
788         mov     %l7, %o1                       << 
789         mov     %l7, %o2                       << 
790         and     %o1, 1, %o1             ! arg2 << 
791         mov     %l7, %o3                       << 
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  */                                              200  */
1052                                                  201 
1053         .globl  fpsave                        !! 202 ENTRY(system_call)
1054 fpsave:                                       !! 203         pushl %eax                      # save orig_eax
1055         st      %fsr, [%o1]     ! this can tr << 
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                              << 
1186         .globl breakpoint_trap                << 
1187 breakpoint_trap:                              << 
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                                               << 
1197         RESTORE_ALL                           << 
1198                                               << 
1199 #ifdef CONFIG_KGDB                            << 
1200         ENTRY(kgdb_trap_low)                  << 
1201         rd      %wim,%l3                      << 
1202         SAVE_ALL                                 204         SAVE_ALL
1203         wr      %l0, PSR_ET, %psr             !! 205         GET_CURRENT(%ebx)
1204         WRITE_PAUSE                           !! 206         testb $0x02,tsk_ptrace(%ebx)    # PT_TRACESYS
1205                                               !! 207         jne tracesys
1206         mov     %l7, %o0                ! tra !! 208         cmpl $(NR_syscalls),%eax
1207         call    kgdb_trap                     !! 209         jae badsys
1208          add    %sp, STACKFRAME_SZ, %o1 ! str !! 210         call *SYMBOL_NAME(sys_call_table)(,%eax,4)
1209                                               !! 211         movl %eax,EAX(%esp)             # save the return value
1210         RESTORE_ALL                           !! 212 ENTRY(ret_from_sys_call)
1211         ENDPROC(kgdb_trap_low)                !! 213         cli                             # need_resched and signals atomic test
1212 #endif                                        !! 214         cmpl $0,need_resched(%ebx)
1213                                               !! 215         jne reschedule
1214         .align  4                             !! 216         cmpl $0,sigpending(%ebx)
1215         .globl  flush_patch_exception         !! 217         jne signal_return
1216 flush_patch_exception:                        !! 218 restore_all:
1217         FLUSH_ALL_KERNEL_WINDOWS;             !! 219         RESTORE_ALL
1218         ldd     [%o0], %o6                    !! 220 
1219         jmpl    %o7 + 0xc, %g0                !! 221         ALIGN
1220          mov    1, %g1                        !! 222 signal_return:
1221                                               !! 223         sti                             # we can get here from an interrupt handler
1222         .align  4                             !! 224         testl $(VM_MASK),EFLAGS(%esp)
1223         .globl  kill_user_windows, kuw_patch1 !! 225         movl %esp,%eax
1224         .globl  kuw_patch1                    !! 226         jne v86_signal_return
1225 kuw_patch1_7win:        sll     %o3, 6, %o3   !! 227         xorl %edx,%edx
1226                                               !! 228         call SYMBOL_NAME(do_signal)
1227         /* No matter how much overhead this r !! 229         jmp restore_all
1228          * case scenario, it is several times !! 230 
1229          * traps with the old method of just  !! 231         ALIGN
1230          */                                   !! 232 v86_signal_return:
1231 kill_user_windows:                            !! 233         call SYMBOL_NAME(save_v86_state)
1232         ld      [%g6 + TI_UWINMASK], %o0      !! 234         movl %eax,%esp
1233         orcc    %g0, %o0, %g0                 !! 235         xorl %edx,%edx
1234         be      3f                            !! 236         call SYMBOL_NAME(do_signal)
1235          rd     %psr, %o5                     !! 237         jmp restore_all
1236         or      %o5, PSR_PIL, %o4             !! 238 
1237         wr      %o4, 0x0, %psr                !! 239         ALIGN
1238         WRITE_PAUSE                           !! 240 tracesys:
1239 1:                                            !! 241         movl $-ENOSYS,EAX(%esp)
1240         ld      [%g6 + TI_UWINMASK], %o0      !! 242         call SYMBOL_NAME(syscall_trace)
1241         orcc    %g0, %o0, %g0                 !! 243         movl ORIG_EAX(%esp),%eax
1242         be      4f                            !! 244         cmpl $(NR_syscalls),%eax
1243          rd     %wim, %o3                     !! 245         jae tracesys_exit
1244         srl     %o3, 1, %o4                   !! 246         call *SYMBOL_NAME(sys_call_table)(,%eax,4)
1245 kuw_patch1:                                   !! 247         movl %eax,EAX(%esp)             # save the return value
1246         sll     %o3, 7, %o3                   !! 248 tracesys_exit:
1247         or      %o4, %o3, %o3                 !! 249         call SYMBOL_NAME(syscall_trace)
1248         andncc  %o0, %o3, %o0                 !! 250         jmp ret_from_sys_call
1249         bne     kuw_patch1                    !! 251 badsys:
1250          srl    %o3, 1, %o4                   !! 252         movl $-ENOSYS,EAX(%esp)
1251         wr      %o3, 0x0, %wim                !! 253         jmp ret_from_sys_call
1252         st      %g0, [%g6 + TI_UWINMASK]      !! 254 
1253 4:                                            !! 255         ALIGN
1254         wr      %o5, 0x0, %psr                !! 256 ENTRY(ret_from_intr)
1255         WRITE_PAUSE                           !! 257         GET_CURRENT(%ebx)
1256 3:                                            !! 258 ret_from_exception:
1257         retl                                  !! 259         movl EFLAGS(%esp),%eax          # mix EFLAGS and CS
1258          st     %g0, [%g6 + TI_W_SAVED]       !! 260         movb CS(%esp),%al
1259                                               !! 261         testl $(VM_MASK | 3),%eax       # return to VM86 mode or non-supervisor?
1260         .align  4                             !! 262         jne ret_from_sys_call
1261         .globl  restore_current               !! 263         jmp restore_all
1262 restore_current:                              !! 264 
1263         LOAD_CURRENT(g6, o0)                  !! 265         ALIGN
1264         retl                                  !! 266 reschedule:
1265          nop                                  !! 267         call SYMBOL_NAME(schedule)    # test
1266                                               !! 268         jmp ret_from_sys_call
1267 #ifdef CONFIG_PCIC_PCI                        !! 269 
1268 #include <asm/pcic.h>                         !! 270 ENTRY(divide_error)
1269                                               !! 271         pushl $0                # no error code
1270         .align  4                             !! 272         pushl $ SYMBOL_NAME(do_divide_error)
1271         .globl  linux_trap_ipi15_pcic         !! 273         ALIGN
1272 linux_trap_ipi15_pcic:                        !! 274 error_code:
1273         rd      %wim, %l3                     !! 275         pushl %ds
1274         SAVE_ALL                              !! 276         pushl %eax
1275                                               !! 277         xorl %eax,%eax
1276         /*                                    !! 278         pushl %ebp
1277          * First deactivate NMI               !! 279         pushl %edi
1278          * or we cannot drop ET, cannot get w !! 280         pushl %esi
1279          * The busy loop is necessary because !! 281         pushl %edx
1280          * sometimes does not go away quickly !! 282         decl %eax                       # eax = -1
1281          */                                   !! 283         pushl %ecx
1282         sethi   %hi(pcic_regs), %o1           !! 284         pushl %ebx
1283         ld      [%o1 + %lo(pcic_regs)], %o2   !! 285         cld
1284                                               !! 286         movl %es,%ecx
1285         ! Get pending status for printouts la !! 287         movl ORIG_EAX(%esp), %esi       # get the error code
1286         ld      [%o2 + PCI_SYS_INT_PENDING],  !! 288         movl ES(%esp), %edi             # get the function address
1287                                               !! 289         movl %eax, ORIG_EAX(%esp)
1288         mov     PCI_SYS_INT_PENDING_CLEAR_ALL !! 290         movl %ecx, ES(%esp)
1289         stb     %o1, [%o2 + PCI_SYS_INT_PENDI !! 291         movl %esp,%edx
1290 1:                                            !! 292         pushl %esi                      # push the error code
1291         ld      [%o2 + PCI_SYS_INT_PENDING],  !! 293         pushl %edx                      # push the pt_regs pointer
1292         andcc   %o1, ((PCI_SYS_INT_PENDING_PI !! 294         movl $(__KERNEL_DS),%edx
1293         bne     1b                            !! 295         movl %edx,%ds
1294          nop                                  !! 296         movl %edx,%es
1295                                               !! 297         GET_CURRENT(%ebx)
1296         or      %l0, PSR_PIL, %l4             !! 298         call *%edi
1297         wr      %l4, 0x0, %psr                !! 299         addl $8,%esp
1298         WRITE_PAUSE                           !! 300         jmp ret_from_exception
1299         wr      %l4, PSR_ET, %psr             !! 301 
1300         WRITE_PAUSE                           !! 302 ENTRY(coprocessor_error)
1301                                               !! 303         pushl $0
1302         call    pcic_nmi                      !! 304         pushl $ SYMBOL_NAME(do_coprocessor_error)
1303          add    %sp, STACKFRAME_SZ, %o1 ! str !! 305         jmp error_code
1304         RESTORE_ALL                           !! 306 
1305                                               !! 307 ENTRY(simd_coprocessor_error)
1306         .globl  pcic_nmi_trap_patch           !! 308         pushl $0
1307 pcic_nmi_trap_patch:                          !! 309         pushl $ SYMBOL_NAME(do_simd_coprocessor_error)
1308         sethi   %hi(linux_trap_ipi15_pcic), % !! 310         jmp error_code
1309         jmpl    %l3 + %lo(linux_trap_ipi15_pc !! 311 
1310          rd     %psr, %l0                     !! 312 ENTRY(device_not_available)
1311         .word   0                             !! 313         pushl $-1               # mark this as an int
1312                                               !! 314         SAVE_ALL
1313 #endif /* CONFIG_PCIC_PCI */                  !! 315         GET_CURRENT(%ebx)
1314                                               !! 316         movl %cr0,%eax
1315         .globl  flushw_all                    !! 317         testl $0x4,%eax                 # EM (math emulation bit)
1316 flushw_all:                                   !! 318         jne device_not_available_emulate
1317         save    %sp, -0x40, %sp               !! 319         call SYMBOL_NAME(math_state_restore)
1318         save    %sp, -0x40, %sp               !! 320         jmp ret_from_exception
1319         save    %sp, -0x40, %sp               !! 321 device_not_available_emulate:
1320         save    %sp, -0x40, %sp               !! 322         pushl $0                # temporary storage for ORIG_EIP
1321         save    %sp, -0x40, %sp               !! 323         call  SYMBOL_NAME(math_emulate)
1322         save    %sp, -0x40, %sp               !! 324         addl $4,%esp
1323         save    %sp, -0x40, %sp               !! 325         jmp ret_from_exception
1324         restore                               !! 326 
1325         restore                               !! 327 ENTRY(debug)
1326         restore                               !! 328         pushl $0
1327         restore                               !! 329         pushl $ SYMBOL_NAME(do_debug)
1328         restore                               !! 330         jmp error_code
1329         restore                               !! 331 
1330         ret                                   !! 332 ENTRY(nmi)
1331          restore                              !! 333         pushl %eax
1332                                               !! 334         SAVE_ALL
1333 #ifdef CONFIG_SMP                             !! 335         movl %esp,%edx
1334 ENTRY(hard_smp_processor_id)                  !! 336         pushl $0
1335 661:    rd              %tbr, %g1             !! 337         pushl %edx
1336         srl             %g1, 12, %o0          !! 338         call SYMBOL_NAME(do_nmi)
1337         and             %o0, 3, %o0           !! 339         addl $8,%esp
1338         .section        .cpuid_patch, "ax"    !! 340         RESTORE_ALL
1339         /* Instruction location. */           !! 341 
1340         .word           661b                  !! 342 ENTRY(int3)
1341         /* SUN4D implementation. */           !! 343         pushl $0
1342         lda             [%g0] ASI_M_VIKING_TM !! 344         pushl $ SYMBOL_NAME(do_int3)
1343         nop                                   !! 345         jmp error_code
1344         nop                                   !! 346 
1345         /* LEON implementation. */            !! 347 ENTRY(overflow)
1346         rd              %asr17, %o0           !! 348         pushl $0
1347         srl             %o0, 0x1c, %o0        !! 349         pushl $ SYMBOL_NAME(do_overflow)
1348         nop                                   !! 350         jmp error_code
1349         .previous                             !! 351 
1350         retl                                  !! 352 ENTRY(bounds)
1351          nop                                  !! 353         pushl $0
1352 ENDPROC(hard_smp_processor_id)                !! 354         pushl $ SYMBOL_NAME(do_bounds)
1353 #endif                                        !! 355         jmp error_code
1354                                               !! 356 
1355 /* End of entry.S */                          !! 357 ENTRY(invalid_op)
                                                   >> 358         pushl $0
                                                   >> 359         pushl $ SYMBOL_NAME(do_invalid_op)
                                                   >> 360         jmp error_code
                                                   >> 361 
                                                   >> 362 ENTRY(coprocessor_segment_overrun)
                                                   >> 363         pushl $0
                                                   >> 364         pushl $ SYMBOL_NAME(do_coprocessor_segment_overrun)
                                                   >> 365         jmp error_code
                                                   >> 366 
                                                   >> 367 ENTRY(double_fault)
                                                   >> 368         pushl $ SYMBOL_NAME(do_double_fault)
                                                   >> 369         jmp error_code
                                                   >> 370 
                                                   >> 371 ENTRY(invalid_TSS)
                                                   >> 372         pushl $ SYMBOL_NAME(do_invalid_TSS)
                                                   >> 373         jmp error_code
                                                   >> 374 
                                                   >> 375 ENTRY(segment_not_present)
                                                   >> 376         pushl $ SYMBOL_NAME(do_segment_not_present)
                                                   >> 377         jmp error_code
                                                   >> 378 
                                                   >> 379 ENTRY(stack_segment)
                                                   >> 380         pushl $ SYMBOL_NAME(do_stack_segment)
                                                   >> 381         jmp error_code
                                                   >> 382 
                                                   >> 383 ENTRY(general_protection)
                                                   >> 384         pushl $ SYMBOL_NAME(do_general_protection)
                                                   >> 385         jmp error_code
                                                   >> 386 
                                                   >> 387 ENTRY(alignment_check)
                                                   >> 388         pushl $ SYMBOL_NAME(do_alignment_check)
                                                   >> 389         jmp error_code
                                                   >> 390 
                                                   >> 391 ENTRY(page_fault)
                                                   >> 392         pushl $ SYMBOL_NAME(do_page_fault)
                                                   >> 393         jmp error_code
                                                   >> 394 
                                                   >> 395 ENTRY(machine_check)
                                                   >> 396         pushl $0
                                                   >> 397         pushl $ SYMBOL_NAME(do_machine_check)
                                                   >> 398         jmp error_code
                                                   >> 399 
                                                   >> 400 ENTRY(spurious_interrupt_bug)
                                                   >> 401         pushl $0
                                                   >> 402         pushl $ SYMBOL_NAME(do_spurious_interrupt_bug)
                                                   >> 403         jmp error_code
                                                   >> 404 
                                                   >> 405 .data
                                                   >> 406 ENTRY(sys_call_table)
                                                   >> 407         .long SYMBOL_NAME(sys_ni_syscall)       /* 0  -  old "setup()" system call*/
                                                   >> 408         .long SYMBOL_NAME(sys_exit)
                                                   >> 409         .long SYMBOL_NAME(sys_fork)
                                                   >> 410         .long SYMBOL_NAME(sys_read)
                                                   >> 411         .long SYMBOL_NAME(sys_write)
                                                   >> 412         .long SYMBOL_NAME(sys_open)             /* 5 */
                                                   >> 413         .long SYMBOL_NAME(sys_close)
                                                   >> 414         .long SYMBOL_NAME(sys_waitpid)
                                                   >> 415         .long SYMBOL_NAME(sys_creat)
                                                   >> 416         .long SYMBOL_NAME(sys_link)
                                                   >> 417         .long SYMBOL_NAME(sys_unlink)           /* 10 */
                                                   >> 418         .long SYMBOL_NAME(sys_execve)
                                                   >> 419         .long SYMBOL_NAME(sys_chdir)
                                                   >> 420         .long SYMBOL_NAME(sys_time)
                                                   >> 421         .long SYMBOL_NAME(sys_mknod)
                                                   >> 422         .long SYMBOL_NAME(sys_chmod)            /* 15 */
                                                   >> 423         .long SYMBOL_NAME(sys_lchown16)
                                                   >> 424         .long SYMBOL_NAME(sys_ni_syscall)                               /* old break syscall holder */
                                                   >> 425         .long SYMBOL_NAME(sys_stat)
                                                   >> 426         .long SYMBOL_NAME(sys_lseek)
                                                   >> 427         .long SYMBOL_NAME(sys_getpid)           /* 20 */
                                                   >> 428         .long SYMBOL_NAME(sys_mount)
                                                   >> 429         .long SYMBOL_NAME(sys_oldumount)
                                                   >> 430         .long SYMBOL_NAME(sys_setuid16)
                                                   >> 431         .long SYMBOL_NAME(sys_getuid16)
                                                   >> 432         .long SYMBOL_NAME(sys_stime)            /* 25 */
                                                   >> 433         .long SYMBOL_NAME(sys_ptrace)
                                                   >> 434         .long SYMBOL_NAME(sys_alarm)
                                                   >> 435         .long SYMBOL_NAME(sys_fstat)
                                                   >> 436         .long SYMBOL_NAME(sys_pause)
                                                   >> 437         .long SYMBOL_NAME(sys_utime)            /* 30 */
                                                   >> 438         .long SYMBOL_NAME(sys_ni_syscall)                               /* old stty syscall holder */
                                                   >> 439         .long SYMBOL_NAME(sys_ni_syscall)                               /* old gtty syscall holder */
                                                   >> 440         .long SYMBOL_NAME(sys_access)
                                                   >> 441         .long SYMBOL_NAME(sys_nice)
                                                   >> 442         .long SYMBOL_NAME(sys_ni_syscall)       /* 35 */                /* old ftime syscall holder */
                                                   >> 443         .long SYMBOL_NAME(sys_sync)
                                                   >> 444         .long SYMBOL_NAME(sys_kill)
                                                   >> 445         .long SYMBOL_NAME(sys_rename)
                                                   >> 446         .long SYMBOL_NAME(sys_mkdir)
                                                   >> 447         .long SYMBOL_NAME(sys_rmdir)            /* 40 */
                                                   >> 448         .long SYMBOL_NAME(sys_dup)
                                                   >> 449         .long SYMBOL_NAME(sys_pipe)
                                                   >> 450         .long SYMBOL_NAME(sys_times)
                                                   >> 451         .long SYMBOL_NAME(sys_ni_syscall)                               /* old prof syscall holder */
                                                   >> 452         .long SYMBOL_NAME(sys_brk)              /* 45 */
                                                   >> 453         .long SYMBOL_NAME(sys_setgid16)
                                                   >> 454         .long SYMBOL_NAME(sys_getgid16)
                                                   >> 455         .long SYMBOL_NAME(sys_signal)
                                                   >> 456         .long SYMBOL_NAME(sys_geteuid16)
                                                   >> 457         .long SYMBOL_NAME(sys_getegid16)        /* 50 */
                                                   >> 458         .long SYMBOL_NAME(sys_acct)
                                                   >> 459         .long SYMBOL_NAME(sys_umount)                                   /* recycled never used phys() */
                                                   >> 460         .long SYMBOL_NAME(sys_ni_syscall)                               /* old lock syscall holder */
                                                   >> 461         .long SYMBOL_NAME(sys_ioctl)
                                                   >> 462         .long SYMBOL_NAME(sys_fcntl)            /* 55 */
                                                   >> 463         .long SYMBOL_NAME(sys_ni_syscall)                               /* old mpx syscall holder */
                                                   >> 464         .long SYMBOL_NAME(sys_setpgid)
                                                   >> 465         .long SYMBOL_NAME(sys_ni_syscall)                               /* old ulimit syscall holder */
                                                   >> 466         .long SYMBOL_NAME(sys_olduname)
                                                   >> 467         .long SYMBOL_NAME(sys_umask)            /* 60 */
                                                   >> 468         .long SYMBOL_NAME(sys_chroot)
                                                   >> 469         .long SYMBOL_NAME(sys_ustat)
                                                   >> 470         .long SYMBOL_NAME(sys_dup2)
                                                   >> 471         .long SYMBOL_NAME(sys_getppid)
                                                   >> 472         .long SYMBOL_NAME(sys_getpgrp)          /* 65 */
                                                   >> 473         .long SYMBOL_NAME(sys_setsid)
                                                   >> 474         .long SYMBOL_NAME(sys_sigaction)
                                                   >> 475         .long SYMBOL_NAME(sys_sgetmask)
                                                   >> 476         .long SYMBOL_NAME(sys_ssetmask)
                                                   >> 477         .long SYMBOL_NAME(sys_setreuid16)       /* 70 */
                                                   >> 478         .long SYMBOL_NAME(sys_setregid16)
                                                   >> 479         .long SYMBOL_NAME(sys_sigsuspend)
                                                   >> 480         .long SYMBOL_NAME(sys_sigpending)
                                                   >> 481         .long SYMBOL_NAME(sys_sethostname)
                                                   >> 482         .long SYMBOL_NAME(sys_setrlimit)        /* 75 */
                                                   >> 483         .long SYMBOL_NAME(sys_old_getrlimit)
                                                   >> 484         .long SYMBOL_NAME(sys_getrusage)
                                                   >> 485         .long SYMBOL_NAME(sys_gettimeofday)
                                                   >> 486         .long SYMBOL_NAME(sys_settimeofday)
                                                   >> 487         .long SYMBOL_NAME(sys_getgroups16)      /* 80 */
                                                   >> 488         .long SYMBOL_NAME(sys_setgroups16)
                                                   >> 489         .long SYMBOL_NAME(old_select)
                                                   >> 490         .long SYMBOL_NAME(sys_symlink)
                                                   >> 491         .long SYMBOL_NAME(sys_lstat)
                                                   >> 492         .long SYMBOL_NAME(sys_readlink)         /* 85 */
                                                   >> 493         .long SYMBOL_NAME(sys_uselib)
                                                   >> 494         .long SYMBOL_NAME(sys_swapon)
                                                   >> 495         .long SYMBOL_NAME(sys_reboot)
                                                   >> 496         .long SYMBOL_NAME(old_readdir)
                                                   >> 497         .long SYMBOL_NAME(old_mmap)             /* 90 */
                                                   >> 498         .long SYMBOL_NAME(sys_munmap)
                                                   >> 499         .long SYMBOL_NAME(sys_truncate)
                                                   >> 500         .long SYMBOL_NAME(sys_ftruncate)
                                                   >> 501         .long SYMBOL_NAME(sys_fchmod)
                                                   >> 502         .long SYMBOL_NAME(sys_fchown16)         /* 95 */
                                                   >> 503         .long SYMBOL_NAME(sys_getpriority)
                                                   >> 504         .long SYMBOL_NAME(sys_setpriority)
                                                   >> 505         .long SYMBOL_NAME(sys_ni_syscall)                               /* old profil syscall holder */
                                                   >> 506         .long SYMBOL_NAME(sys_statfs)
                                                   >> 507         .long SYMBOL_NAME(sys_fstatfs)          /* 100 */
                                                   >> 508         .long SYMBOL_NAME(sys_ioperm)
                                                   >> 509         .long SYMBOL_NAME(sys_socketcall)
                                                   >> 510         .long SYMBOL_NAME(sys_syslog)
                                                   >> 511         .long SYMBOL_NAME(sys_setitimer)
                                                   >> 512         .long SYMBOL_NAME(sys_getitimer)        /* 105 */
                                                   >> 513         .long SYMBOL_NAME(sys_newstat)
                                                   >> 514         .long SYMBOL_NAME(sys_newlstat)
                                                   >> 515         .long SYMBOL_NAME(sys_newfstat)
                                                   >> 516         .long SYMBOL_NAME(sys_uname)
                                                   >> 517         .long SYMBOL_NAME(sys_iopl)             /* 110 */
                                                   >> 518         .long SYMBOL_NAME(sys_vhangup)
                                                   >> 519         .long SYMBOL_NAME(sys_ni_syscall)       /* old "idle" system call */
                                                   >> 520         .long SYMBOL_NAME(sys_vm86old)
                                                   >> 521         .long SYMBOL_NAME(sys_wait4)
                                                   >> 522         .long SYMBOL_NAME(sys_swapoff)          /* 115 */
                                                   >> 523         .long SYMBOL_NAME(sys_sysinfo)
                                                   >> 524         .long SYMBOL_NAME(sys_ipc)
                                                   >> 525         .long SYMBOL_NAME(sys_fsync)
                                                   >> 526         .long SYMBOL_NAME(sys_sigreturn)
                                                   >> 527         .long SYMBOL_NAME(sys_clone)            /* 120 */
                                                   >> 528         .long SYMBOL_NAME(sys_setdomainname)
                                                   >> 529         .long SYMBOL_NAME(sys_newuname)
                                                   >> 530         .long SYMBOL_NAME(sys_modify_ldt)
                                                   >> 531         .long SYMBOL_NAME(sys_adjtimex)
                                                   >> 532         .long SYMBOL_NAME(sys_mprotect)         /* 125 */
                                                   >> 533         .long SYMBOL_NAME(sys_sigprocmask)
                                                   >> 534         .long SYMBOL_NAME(sys_create_module)
                                                   >> 535         .long SYMBOL_NAME(sys_init_module)
                                                   >> 536         .long SYMBOL_NAME(sys_delete_module)
                                                   >> 537         .long SYMBOL_NAME(sys_get_kernel_syms)  /* 130 */
                                                   >> 538         .long SYMBOL_NAME(sys_quotactl)
                                                   >> 539         .long SYMBOL_NAME(sys_getpgid)
                                                   >> 540         .long SYMBOL_NAME(sys_fchdir)
                                                   >> 541         .long SYMBOL_NAME(sys_bdflush)
                                                   >> 542         .long SYMBOL_NAME(sys_sysfs)            /* 135 */
                                                   >> 543         .long SYMBOL_NAME(sys_personality)
                                                   >> 544         .long SYMBOL_NAME(sys_ni_syscall)       /* for afs_syscall */
                                                   >> 545         .long SYMBOL_NAME(sys_setfsuid16)
                                                   >> 546         .long SYMBOL_NAME(sys_setfsgid16)
                                                   >> 547         .long SYMBOL_NAME(sys_llseek)           /* 140 */
                                                   >> 548         .long SYMBOL_NAME(sys_getdents)
                                                   >> 549         .long SYMBOL_NAME(sys_select)
                                                   >> 550         .long SYMBOL_NAME(sys_flock)
                                                   >> 551         .long SYMBOL_NAME(sys_msync)
                                                   >> 552         .long SYMBOL_NAME(sys_readv)            /* 145 */
                                                   >> 553         .long SYMBOL_NAME(sys_writev)
                                                   >> 554         .long SYMBOL_NAME(sys_getsid)
                                                   >> 555         .long SYMBOL_NAME(sys_fdatasync)
                                                   >> 556         .long SYMBOL_NAME(sys_sysctl)
                                                   >> 557         .long SYMBOL_NAME(sys_mlock)            /* 150 */
                                                   >> 558         .long SYMBOL_NAME(sys_munlock)
                                                   >> 559         .long SYMBOL_NAME(sys_mlockall)
                                                   >> 560         .long SYMBOL_NAME(sys_munlockall)
                                                   >> 561         .long SYMBOL_NAME(sys_sched_setparam)
                                                   >> 562         .long SYMBOL_NAME(sys_sched_getparam)   /* 155 */
                                                   >> 563         .long SYMBOL_NAME(sys_sched_setscheduler)
                                                   >> 564         .long SYMBOL_NAME(sys_sched_getscheduler)
                                                   >> 565         .long SYMBOL_NAME(sys_sched_yield)
                                                   >> 566         .long SYMBOL_NAME(sys_sched_get_priority_max)
                                                   >> 567         .long SYMBOL_NAME(sys_sched_get_priority_min)  /* 160 */
                                                   >> 568         .long SYMBOL_NAME(sys_sched_rr_get_interval)
                                                   >> 569         .long SYMBOL_NAME(sys_nanosleep)
                                                   >> 570         .long SYMBOL_NAME(sys_mremap)
                                                   >> 571         .long SYMBOL_NAME(sys_setresuid16)
                                                   >> 572         .long SYMBOL_NAME(sys_getresuid16)      /* 165 */
                                                   >> 573         .long SYMBOL_NAME(sys_vm86)
                                                   >> 574         .long SYMBOL_NAME(sys_query_module)
                                                   >> 575         .long SYMBOL_NAME(sys_poll)
                                                   >> 576         .long SYMBOL_NAME(sys_nfsservctl)
                                                   >> 577         .long SYMBOL_NAME(sys_setresgid16)      /* 170 */
                                                   >> 578         .long SYMBOL_NAME(sys_getresgid16)
                                                   >> 579         .long SYMBOL_NAME(sys_prctl)
                                                   >> 580         .long SYMBOL_NAME(sys_rt_sigreturn)
                                                   >> 581         .long SYMBOL_NAME(sys_rt_sigaction)
                                                   >> 582         .long SYMBOL_NAME(sys_rt_sigprocmask)   /* 175 */
                                                   >> 583         .long SYMBOL_NAME(sys_rt_sigpending)
                                                   >> 584         .long SYMBOL_NAME(sys_rt_sigtimedwait)
                                                   >> 585         .long SYMBOL_NAME(sys_rt_sigqueueinfo)
                                                   >> 586         .long SYMBOL_NAME(sys_rt_sigsuspend)
                                                   >> 587         .long SYMBOL_NAME(sys_pread)            /* 180 */
                                                   >> 588         .long SYMBOL_NAME(sys_pwrite)
                                                   >> 589         .long SYMBOL_NAME(sys_chown16)
                                                   >> 590         .long SYMBOL_NAME(sys_getcwd)
                                                   >> 591         .long SYMBOL_NAME(sys_capget)
                                                   >> 592         .long SYMBOL_NAME(sys_capset)           /* 185 */
                                                   >> 593         .long SYMBOL_NAME(sys_sigaltstack)
                                                   >> 594         .long SYMBOL_NAME(sys_sendfile)
                                                   >> 595         .long SYMBOL_NAME(sys_ni_syscall)               /* streams1 */
                                                   >> 596         .long SYMBOL_NAME(sys_ni_syscall)               /* streams2 */
                                                   >> 597         .long SYMBOL_NAME(sys_vfork)            /* 190 */
                                                   >> 598         .long SYMBOL_NAME(sys_getrlimit)
                                                   >> 599         .long SYMBOL_NAME(sys_mmap2)
                                                   >> 600         .long SYMBOL_NAME(sys_truncate64)
                                                   >> 601         .long SYMBOL_NAME(sys_ftruncate64)
                                                   >> 602         .long SYMBOL_NAME(sys_stat64)           /* 195 */
                                                   >> 603         .long SYMBOL_NAME(sys_lstat64)
                                                   >> 604         .long SYMBOL_NAME(sys_fstat64)
                                                   >> 605         .long SYMBOL_NAME(sys_lchown)
                                                   >> 606         .long SYMBOL_NAME(sys_getuid)
                                                   >> 607         .long SYMBOL_NAME(sys_getgid)           /* 200 */
                                                   >> 608         .long SYMBOL_NAME(sys_geteuid)
                                                   >> 609         .long SYMBOL_NAME(sys_getegid)
                                                   >> 610         .long SYMBOL_NAME(sys_setreuid)
                                                   >> 611         .long SYMBOL_NAME(sys_setregid)
                                                   >> 612         .long SYMBOL_NAME(sys_getgroups)        /* 205 */
                                                   >> 613         .long SYMBOL_NAME(sys_setgroups)
                                                   >> 614         .long SYMBOL_NAME(sys_fchown)
                                                   >> 615         .long SYMBOL_NAME(sys_setresuid)
                                                   >> 616         .long SYMBOL_NAME(sys_getresuid)
                                                   >> 617         .long SYMBOL_NAME(sys_setresgid)        /* 210 */
                                                   >> 618         .long SYMBOL_NAME(sys_getresgid)
                                                   >> 619         .long SYMBOL_NAME(sys_chown)
                                                   >> 620         .long SYMBOL_NAME(sys_setuid)
                                                   >> 621         .long SYMBOL_NAME(sys_setgid)
                                                   >> 622         .long SYMBOL_NAME(sys_setfsuid)         /* 215 */
                                                   >> 623         .long SYMBOL_NAME(sys_setfsgid)
                                                   >> 624         .long SYMBOL_NAME(sys_pivot_root)
                                                   >> 625         .long SYMBOL_NAME(sys_mincore)
                                                   >> 626         .long SYMBOL_NAME(sys_madvise)
                                                   >> 627         .long SYMBOL_NAME(sys_getdents64)       /* 220 */
                                                   >> 628         .long SYMBOL_NAME(sys_fcntl64)
                                                   >> 629         .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for TUX */
                                                   >> 630         .long SYMBOL_NAME(sys_ni_syscall)       /* Reserved for Security */
                                                   >> 631         .long SYMBOL_NAME(sys_gettid)
                                                   >> 632         .long SYMBOL_NAME(sys_readahead)        /* 225 */
                                                   >> 633         .long SYMBOL_NAME(sys_setxattr)
                                                   >> 634         .long SYMBOL_NAME(sys_lsetxattr)
                                                   >> 635         .long SYMBOL_NAME(sys_fsetxattr)
                                                   >> 636         .long SYMBOL_NAME(sys_getxattr)
                                                   >> 637         .long SYMBOL_NAME(sys_lgetxattr)        /* 230 */
                                                   >> 638         .long SYMBOL_NAME(sys_fgetxattr)
                                                   >> 639         .long SYMBOL_NAME(sys_listxattr)
                                                   >> 640         .long SYMBOL_NAME(sys_llistxattr)
                                                   >> 641         .long SYMBOL_NAME(sys_flistxattr)
                                                   >> 642         .long SYMBOL_NAME(sys_removexattr)      /* 235 */
                                                   >> 643         .long SYMBOL_NAME(sys_lremovexattr)
                                                   >> 644         .long SYMBOL_NAME(sys_fremovexattr)
                                                   >> 645         .long SYMBOL_NAME(sys_tkill)
                                                   >> 646         .long SYMBOL_NAME(sys_sendfile64)
                                                   >> 647         .long SYMBOL_NAME(sys_ni_syscall)       /* 240 reserved for futex */
                                                   >> 648         .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for sched_setaffinity */
                                                   >> 649         .long SYMBOL_NAME(sys_ni_syscall)       /* reserved for sched_getaffinity */
                                                   >> 650         .long SYMBOL_NAME(sys_ni_syscall)       /* sys_set_thread_area */
                                                   >> 651         .long SYMBOL_NAME(sys_ni_syscall)       /* sys_get_thread_area */
                                                   >> 652         .long SYMBOL_NAME(sys_ni_syscall)       /* 245 sys_io_setup */
                                                   >> 653         .long SYMBOL_NAME(sys_ni_syscall)       /* sys_io_destroy */
                                                   >> 654         .long SYMBOL_NAME(sys_ni_syscall)       /* sys_io_getevents */
                                                   >> 655         .long SYMBOL_NAME(sys_ni_syscall)       /* sys_io_submit */
                                                   >> 656         .long SYMBOL_NAME(sys_ni_syscall)       /* sys_io_cancel */
                                                   >> 657         .long SYMBOL_NAME(sys_ni_syscall)       /* 250 sys_alloc_hugepages */
                                                   >> 658         .long SYMBOL_NAME(sys_ni_syscall)       /* sys_free_hugepages */
                                                   >> 659         .long SYMBOL_NAME(sys_ni_syscall)       /* sys_exit_group */
                                                   >> 660         .long SYMBOL_NAME(sys_ni_syscall)       /* sys_lookup_dcookie */
                                                   >> 661         .long SYMBOL_NAME(sys_ni_syscall)       /* sys_epoll_create */
                                                   >> 662         .long SYMBOL_NAME(sys_ni_syscall)       /* sys_epoll_ctl 255 */
                                                   >> 663         .long SYMBOL_NAME(sys_ni_syscall)       /* sys_epoll_wait */
                                                   >> 664         .long SYMBOL_NAME(sys_ni_syscall)       /* sys_remap_file_pages */
                                                   >> 665         .long SYMBOL_NAME(sys_ni_syscall)       /* sys_set_tid_address */
                                                   >> 666 
                                                   >> 667         .rept NR_syscalls-(.-sys_call_table)/4
                                                   >> 668                 .long SYMBOL_NAME(sys_ni_syscall)
                                                   >> 669         .endr
                                                      

~ [ 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