Merge branch 'for-3.7' of git://linux-nfs.org/~bfields/linux
[deliverable/linux.git] / arch / frv / kernel / entry.S
1 /* entry.S: FR-V entry
2 *
3 * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version
9 * 2 of the License, or (at your option) any later version.
10 *
11 *
12 * Entry to the kernel is "interesting":
13 * (1) There are no stack pointers, not even for the kernel
14 * (2) General Registers should not be clobbered
15 * (3) There are no kernel-only data registers
16 * (4) Since all addressing modes are wrt to a General Register, no global
17 * variables can be reached
18 *
19 * We deal with this by declaring that we shall kill GR28 on entering the
20 * kernel from userspace
21 *
22 * However, since break interrupts can interrupt the CPU even when PSR.ET==0,
23 * they can't rely on GR28 to be anything useful, and so need to clobber a
24 * separate register (GR31). Break interrupts are managed in break.S
25 *
26 * GR29 _is_ saved, and holds the current task pointer globally
27 *
28 */
29
30 #include <linux/linkage.h>
31 #include <asm/thread_info.h>
32 #include <asm/setup.h>
33 #include <asm/segment.h>
34 #include <asm/ptrace.h>
35 #include <asm/errno.h>
36 #include <asm/cache.h>
37 #include <asm/spr-regs.h>
38
39 #define nr_syscalls ((syscall_table_size)/4)
40
41 .section .text..entry
42 .balign 4
43
44 .macro LEDS val
45 # sethi.p %hi(0xe1200004),gr30
46 # setlo %lo(0xe1200004),gr30
47 # setlos #~\val,gr31
48 # st gr31,@(gr30,gr0)
49 # sethi.p %hi(0xffc00100),gr30
50 # setlo %lo(0xffc00100),gr30
51 # sth gr0,@(gr30,gr0)
52 # membar
53 .endm
54
55 .macro LEDS32
56 # not gr31,gr31
57 # sethi.p %hi(0xe1200004),gr30
58 # setlo %lo(0xe1200004),gr30
59 # st.p gr31,@(gr30,gr0)
60 # srli gr31,#16,gr31
61 # sethi.p %hi(0xffc00100),gr30
62 # setlo %lo(0xffc00100),gr30
63 # sth gr31,@(gr30,gr0)
64 # membar
65 .endm
66
67 ###############################################################################
68 #
69 # entry point for External interrupts received whilst executing userspace code
70 #
71 ###############################################################################
72 .globl __entry_uspace_external_interrupt
73 .type __entry_uspace_external_interrupt,@function
74 __entry_uspace_external_interrupt:
75 LEDS 0x6200
76 sethi.p %hi(__kernel_frame0_ptr),gr28
77 setlo %lo(__kernel_frame0_ptr),gr28
78 ldi @(gr28,#0),gr28
79
80 # handle h/w single-step through exceptions
81 sti gr0,@(gr28,#REG__STATUS)
82
83 .globl __entry_uspace_external_interrupt_reentry
84 __entry_uspace_external_interrupt_reentry:
85 LEDS 0x6201
86
87 setlos #REG__END,gr30
88 dcpl gr28,gr30,#0
89
90 # finish building the exception frame
91 sti sp, @(gr28,#REG_SP)
92 stdi gr2, @(gr28,#REG_GR(2))
93 stdi gr4, @(gr28,#REG_GR(4))
94 stdi gr6, @(gr28,#REG_GR(6))
95 stdi gr8, @(gr28,#REG_GR(8))
96 stdi gr10,@(gr28,#REG_GR(10))
97 stdi gr12,@(gr28,#REG_GR(12))
98 stdi gr14,@(gr28,#REG_GR(14))
99 stdi gr16,@(gr28,#REG_GR(16))
100 stdi gr18,@(gr28,#REG_GR(18))
101 stdi gr20,@(gr28,#REG_GR(20))
102 stdi gr22,@(gr28,#REG_GR(22))
103 stdi gr24,@(gr28,#REG_GR(24))
104 stdi gr26,@(gr28,#REG_GR(26))
105 sti gr0, @(gr28,#REG_GR(28))
106 sti gr29,@(gr28,#REG_GR(29))
107 stdi.p gr30,@(gr28,#REG_GR(30))
108
109 # set up the kernel stack pointer
110 ori gr28,0,sp
111
112 movsg tbr ,gr20
113 movsg psr ,gr22
114 movsg pcsr,gr21
115 movsg isr ,gr23
116 movsg ccr ,gr24
117 movsg cccr,gr25
118 movsg lr ,gr26
119 movsg lcr ,gr27
120
121 setlos.p #-1,gr4
122 andi gr22,#PSR_PS,gr5 /* try to rebuild original PSR value */
123 andi.p gr22,#~(PSR_PS|PSR_S),gr6
124 slli gr5,#1,gr5
125 or gr6,gr5,gr5
126 andi gr5,#~PSR_ET,gr5
127
128 sti gr20,@(gr28,#REG_TBR)
129 sti gr21,@(gr28,#REG_PC)
130 sti gr5 ,@(gr28,#REG_PSR)
131 sti gr23,@(gr28,#REG_ISR)
132 stdi gr24,@(gr28,#REG_CCR)
133 stdi gr26,@(gr28,#REG_LR)
134 sti gr4 ,@(gr28,#REG_SYSCALLNO)
135
136 movsg iacc0h,gr4
137 movsg iacc0l,gr5
138 stdi gr4,@(gr28,#REG_IACC0)
139
140 movsg gner0,gr4
141 movsg gner1,gr5
142 stdi.p gr4,@(gr28,#REG_GNER0)
143
144 # interrupts start off fully disabled in the interrupt handler
145 subcc gr0,gr0,gr0,icc2 /* set Z and clear C */
146
147 # set up kernel global registers
148 sethi.p %hi(__kernel_current_task),gr5
149 setlo %lo(__kernel_current_task),gr5
150 sethi.p %hi(_gp),gr16
151 setlo %lo(_gp),gr16
152 ldi @(gr5,#0),gr29
153 ldi.p @(gr29,#4),gr15 ; __current_thread_info = current->thread_info
154
155 # make sure we (the kernel) get div-zero and misalignment exceptions
156 setlos #ISR_EDE|ISR_DTT_DIVBYZERO|ISR_EMAM_EXCEPTION,gr5
157 movgs gr5,isr
158
159 # switch to the kernel trap table
160 sethi.p %hi(__entry_kerneltrap_table),gr6
161 setlo %lo(__entry_kerneltrap_table),gr6
162 movgs gr6,tbr
163
164 # set the return address
165 sethi.p %hi(__entry_return_from_user_interrupt),gr4
166 setlo %lo(__entry_return_from_user_interrupt),gr4
167 movgs gr4,lr
168
169 # raise the minimum interrupt priority to 15 (NMI only) and enable exceptions
170 movsg psr,gr4
171
172 ori gr4,#PSR_PIL_14,gr4
173 movgs gr4,psr
174 ori gr4,#PSR_PIL_14|PSR_ET,gr4
175 movgs gr4,psr
176
177 LEDS 0x6202
178 bra do_IRQ
179
180 .size __entry_uspace_external_interrupt,.-__entry_uspace_external_interrupt
181
182 ###############################################################################
183 #
184 # entry point for External interrupts received whilst executing kernel code
185 # - on arriving here, the following registers should already be set up:
186 # GR15 - current thread_info struct pointer
187 # GR16 - kernel GP-REL pointer
188 # GR29 - current task struct pointer
189 # TBR - kernel trap vector table
190 # ISR - kernel's preferred integer controls
191 #
192 ###############################################################################
193 .globl __entry_kernel_external_interrupt
194 .type __entry_kernel_external_interrupt,@function
195 __entry_kernel_external_interrupt:
196 LEDS 0x6210
197 // sub sp,gr15,gr31
198 // LEDS32
199
200 # set up the stack pointer
201 or.p sp,gr0,gr30
202 subi sp,#REG__END,sp
203 sti gr30,@(sp,#REG_SP)
204
205 # handle h/w single-step through exceptions
206 sti gr0,@(sp,#REG__STATUS)
207
208 .globl __entry_kernel_external_interrupt_reentry
209 __entry_kernel_external_interrupt_reentry:
210 LEDS 0x6211
211
212 # set up the exception frame
213 setlos #REG__END,gr30
214 dcpl sp,gr30,#0
215
216 sti.p gr28,@(sp,#REG_GR(28))
217 ori sp,0,gr28
218
219 # finish building the exception frame
220 stdi gr2,@(gr28,#REG_GR(2))
221 stdi gr4,@(gr28,#REG_GR(4))
222 stdi gr6,@(gr28,#REG_GR(6))
223 stdi gr8,@(gr28,#REG_GR(8))
224 stdi gr10,@(gr28,#REG_GR(10))
225 stdi gr12,@(gr28,#REG_GR(12))
226 stdi gr14,@(gr28,#REG_GR(14))
227 stdi gr16,@(gr28,#REG_GR(16))
228 stdi gr18,@(gr28,#REG_GR(18))
229 stdi gr20,@(gr28,#REG_GR(20))
230 stdi gr22,@(gr28,#REG_GR(22))
231 stdi gr24,@(gr28,#REG_GR(24))
232 stdi gr26,@(gr28,#REG_GR(26))
233 sti gr29,@(gr28,#REG_GR(29))
234 stdi.p gr30,@(gr28,#REG_GR(30))
235
236 # note virtual interrupts will be fully enabled upon return
237 subicc gr0,#1,gr0,icc2 /* clear Z, set C */
238
239 movsg tbr ,gr20
240 movsg psr ,gr22
241 movsg pcsr,gr21
242 movsg isr ,gr23
243 movsg ccr ,gr24
244 movsg cccr,gr25
245 movsg lr ,gr26
246 movsg lcr ,gr27
247
248 setlos.p #-1,gr4
249 andi gr22,#PSR_PS,gr5 /* try to rebuild original PSR value */
250 andi.p gr22,#~(PSR_PS|PSR_S),gr6
251 slli gr5,#1,gr5
252 or gr6,gr5,gr5
253 andi.p gr5,#~PSR_ET,gr5
254
255 # set CCCR.CC3 to Undefined to abort atomic-modify completion inside the kernel
256 # - for an explanation of how it works, see: Documentation/frv/atomic-ops.txt
257 andi gr25,#~0xc0,gr25
258
259 sti gr20,@(gr28,#REG_TBR)
260 sti gr21,@(gr28,#REG_PC)
261 sti gr5 ,@(gr28,#REG_PSR)
262 sti gr23,@(gr28,#REG_ISR)
263 stdi gr24,@(gr28,#REG_CCR)
264 stdi gr26,@(gr28,#REG_LR)
265 sti gr4 ,@(gr28,#REG_SYSCALLNO)
266
267 movsg iacc0h,gr4
268 movsg iacc0l,gr5
269 stdi gr4,@(gr28,#REG_IACC0)
270
271 movsg gner0,gr4
272 movsg gner1,gr5
273 stdi.p gr4,@(gr28,#REG_GNER0)
274
275 # interrupts start off fully disabled in the interrupt handler
276 subcc gr0,gr0,gr0,icc2 /* set Z and clear C */
277
278 # set the return address
279 sethi.p %hi(__entry_return_from_kernel_interrupt),gr4
280 setlo %lo(__entry_return_from_kernel_interrupt),gr4
281 movgs gr4,lr
282
283 # clear power-saving mode flags
284 movsg hsr0,gr4
285 andi gr4,#~HSR0_PDM,gr4
286 movgs gr4,hsr0
287
288 # raise the minimum interrupt priority to 15 (NMI only) and enable exceptions
289 movsg psr,gr4
290 ori gr4,#PSR_PIL_14,gr4
291 movgs gr4,psr
292 ori gr4,#PSR_ET,gr4
293 movgs gr4,psr
294
295 LEDS 0x6212
296 bra do_IRQ
297
298 .size __entry_kernel_external_interrupt,.-__entry_kernel_external_interrupt
299
300 ###############################################################################
301 #
302 # deal with interrupts that were actually virtually disabled
303 # - we need to really disable them, flag the fact and return immediately
304 # - if you change this, you must alter break.S also
305 #
306 ###############################################################################
307 .balign L1_CACHE_BYTES
308 .globl __entry_kernel_external_interrupt_virtually_disabled
309 .type __entry_kernel_external_interrupt_virtually_disabled,@function
310 __entry_kernel_external_interrupt_virtually_disabled:
311 movsg psr,gr30
312 andi gr30,#~PSR_PIL,gr30
313 ori gr30,#PSR_PIL_14,gr30 ; debugging interrupts only
314 movgs gr30,psr
315 subcc gr0,gr0,gr0,icc2 ; leave Z set, clear C
316 rett #0
317
318 .size __entry_kernel_external_interrupt_virtually_disabled,.-__entry_kernel_external_interrupt_virtually_disabled
319
320 ###############################################################################
321 #
322 # deal with re-enablement of interrupts that were pending when virtually re-enabled
323 # - set ICC2.C, re-enable the real interrupts and return
324 # - we can clear ICC2.Z because we shouldn't be here if it's not 0 [due to TIHI]
325 # - if you change this, you must alter break.S also
326 #
327 ###############################################################################
328 .balign L1_CACHE_BYTES
329 .globl __entry_kernel_external_interrupt_virtual_reenable
330 .type __entry_kernel_external_interrupt_virtual_reenable,@function
331 __entry_kernel_external_interrupt_virtual_reenable:
332 movsg psr,gr30
333 andi gr30,#~PSR_PIL,gr30 ; re-enable interrupts
334 movgs gr30,psr
335 subicc gr0,#1,gr0,icc2 ; clear Z, set C
336 rett #0
337
338 .size __entry_kernel_external_interrupt_virtual_reenable,.-__entry_kernel_external_interrupt_virtual_reenable
339
340 ###############################################################################
341 #
342 # entry point for Software and Progam interrupts generated whilst executing userspace code
343 #
344 ###############################################################################
345 .globl __entry_uspace_softprog_interrupt
346 .type __entry_uspace_softprog_interrupt,@function
347 .globl __entry_uspace_handle_mmu_fault
348 __entry_uspace_softprog_interrupt:
349 LEDS 0x6000
350 #ifdef CONFIG_MMU
351 movsg ear0,gr28
352 __entry_uspace_handle_mmu_fault:
353 movgs gr28,scr2
354 #endif
355 sethi.p %hi(__kernel_frame0_ptr),gr28
356 setlo %lo(__kernel_frame0_ptr),gr28
357 ldi @(gr28,#0),gr28
358
359 # handle h/w single-step through exceptions
360 sti gr0,@(gr28,#REG__STATUS)
361
362 .globl __entry_uspace_softprog_interrupt_reentry
363 __entry_uspace_softprog_interrupt_reentry:
364 LEDS 0x6001
365
366 setlos #REG__END,gr30
367 dcpl gr28,gr30,#0
368
369 # set up the kernel stack pointer
370 sti.p sp,@(gr28,#REG_SP)
371 ori gr28,0,sp
372 sti gr0,@(gr28,#REG_GR(28))
373
374 stdi gr20,@(gr28,#REG_GR(20))
375 stdi gr22,@(gr28,#REG_GR(22))
376
377 movsg tbr,gr20
378 movsg pcsr,gr21
379 movsg psr,gr22
380
381 sethi.p %hi(__entry_return_from_user_exception),gr23
382 setlo %lo(__entry_return_from_user_exception),gr23
383
384 bra __entry_common
385
386 .size __entry_uspace_softprog_interrupt,.-__entry_uspace_softprog_interrupt
387
388 # single-stepping was disabled on entry to a TLB handler that then faulted
389 #ifdef CONFIG_MMU
390 .globl __entry_uspace_handle_mmu_fault_sstep
391 __entry_uspace_handle_mmu_fault_sstep:
392 movgs gr28,scr2
393 sethi.p %hi(__kernel_frame0_ptr),gr28
394 setlo %lo(__kernel_frame0_ptr),gr28
395 ldi @(gr28,#0),gr28
396
397 # flag single-step re-enablement
398 sti gr0,@(gr28,#REG__STATUS)
399 bra __entry_uspace_softprog_interrupt_reentry
400 #endif
401
402
403 ###############################################################################
404 #
405 # entry point for Software and Progam interrupts generated whilst executing kernel code
406 #
407 ###############################################################################
408 .globl __entry_kernel_softprog_interrupt
409 .type __entry_kernel_softprog_interrupt,@function
410 __entry_kernel_softprog_interrupt:
411 LEDS 0x6004
412
413 #ifdef CONFIG_MMU
414 movsg ear0,gr30
415 movgs gr30,scr2
416 #endif
417
418 .globl __entry_kernel_handle_mmu_fault
419 __entry_kernel_handle_mmu_fault:
420 # set up the stack pointer
421 subi sp,#REG__END,sp
422 sti sp,@(sp,#REG_SP)
423 sti sp,@(sp,#REG_SP-4)
424 andi sp,#~7,sp
425
426 # handle h/w single-step through exceptions
427 sti gr0,@(sp,#REG__STATUS)
428
429 .globl __entry_kernel_softprog_interrupt_reentry
430 __entry_kernel_softprog_interrupt_reentry:
431 LEDS 0x6005
432
433 setlos #REG__END,gr30
434 dcpl sp,gr30,#0
435
436 # set up the exception frame
437 sti.p gr28,@(sp,#REG_GR(28))
438 ori sp,0,gr28
439
440 stdi gr20,@(gr28,#REG_GR(20))
441 stdi gr22,@(gr28,#REG_GR(22))
442
443 ldi @(sp,#REG_SP),gr22 /* reconstruct the old SP */
444 addi gr22,#REG__END,gr22
445 sti gr22,@(sp,#REG_SP)
446
447 # set CCCR.CC3 to Undefined to abort atomic-modify completion inside the kernel
448 # - for an explanation of how it works, see: Documentation/frv/atomic-ops.txt
449 movsg cccr,gr20
450 andi gr20,#~0xc0,gr20
451 movgs gr20,cccr
452
453 movsg tbr,gr20
454 movsg pcsr,gr21
455 movsg psr,gr22
456
457 sethi.p %hi(__entry_return_from_kernel_exception),gr23
458 setlo %lo(__entry_return_from_kernel_exception),gr23
459 bra __entry_common
460
461 .size __entry_kernel_softprog_interrupt,.-__entry_kernel_softprog_interrupt
462
463 # single-stepping was disabled on entry to a TLB handler that then faulted
464 #ifdef CONFIG_MMU
465 .globl __entry_kernel_handle_mmu_fault_sstep
466 __entry_kernel_handle_mmu_fault_sstep:
467 # set up the stack pointer
468 subi sp,#REG__END,sp
469 sti sp,@(sp,#REG_SP)
470 sti sp,@(sp,#REG_SP-4)
471 andi sp,#~7,sp
472
473 # flag single-step re-enablement
474 sethi #REG__STATUS_STEP,gr30
475 sti gr30,@(sp,#REG__STATUS)
476 bra __entry_kernel_softprog_interrupt_reentry
477 #endif
478
479
480 ###############################################################################
481 #
482 # the rest of the kernel entry point code
483 # - on arriving here, the following registers should be set up:
484 # GR1 - kernel stack pointer
485 # GR7 - syscall number (trap 0 only)
486 # GR8-13 - syscall args (trap 0 only)
487 # GR20 - saved TBR
488 # GR21 - saved PC
489 # GR22 - saved PSR
490 # GR23 - return handler address
491 # GR28 - exception frame on stack
492 # SCR2 - saved EAR0 where applicable (clobbered by ICI & ICEF insns on FR451)
493 # PSR - PSR.S 1, PSR.ET 0
494 #
495 ###############################################################################
496 .globl __entry_common
497 .type __entry_common,@function
498 __entry_common:
499 LEDS 0x6008
500
501 # finish building the exception frame
502 stdi gr2,@(gr28,#REG_GR(2))
503 stdi gr4,@(gr28,#REG_GR(4))
504 stdi gr6,@(gr28,#REG_GR(6))
505 stdi gr8,@(gr28,#REG_GR(8))
506 stdi gr10,@(gr28,#REG_GR(10))
507 stdi gr12,@(gr28,#REG_GR(12))
508 stdi gr14,@(gr28,#REG_GR(14))
509 stdi gr16,@(gr28,#REG_GR(16))
510 stdi gr18,@(gr28,#REG_GR(18))
511 stdi gr24,@(gr28,#REG_GR(24))
512 stdi gr26,@(gr28,#REG_GR(26))
513 sti gr29,@(gr28,#REG_GR(29))
514 stdi gr30,@(gr28,#REG_GR(30))
515
516 movsg lcr ,gr27
517 movsg lr ,gr26
518 movgs gr23,lr
519 movsg cccr,gr25
520 movsg ccr ,gr24
521 movsg isr ,gr23
522
523 setlos.p #-1,gr4
524 andi gr22,#PSR_PS,gr5 /* try to rebuild original PSR value */
525 andi.p gr22,#~(PSR_PS|PSR_S),gr6
526 slli gr5,#1,gr5
527 or gr6,gr5,gr5
528 andi gr5,#~PSR_ET,gr5
529
530 sti gr20,@(gr28,#REG_TBR)
531 sti gr21,@(gr28,#REG_PC)
532 sti gr5 ,@(gr28,#REG_PSR)
533 sti gr23,@(gr28,#REG_ISR)
534 stdi gr24,@(gr28,#REG_CCR)
535 stdi gr26,@(gr28,#REG_LR)
536 sti gr4 ,@(gr28,#REG_SYSCALLNO)
537
538 movsg iacc0h,gr4
539 movsg iacc0l,gr5
540 stdi gr4,@(gr28,#REG_IACC0)
541
542 movsg gner0,gr4
543 movsg gner1,gr5
544 stdi.p gr4,@(gr28,#REG_GNER0)
545
546 # set up virtual interrupt disablement
547 subicc gr0,#1,gr0,icc2 /* clear Z flag, set C flag */
548
549 # set up kernel global registers
550 sethi.p %hi(__kernel_current_task),gr5
551 setlo %lo(__kernel_current_task),gr5
552 sethi.p %hi(_gp),gr16
553 setlo %lo(_gp),gr16
554 ldi @(gr5,#0),gr29
555 ldi @(gr29,#4),gr15 ; __current_thread_info = current->thread_info
556
557 # switch to the kernel trap table
558 sethi.p %hi(__entry_kerneltrap_table),gr6
559 setlo %lo(__entry_kerneltrap_table),gr6
560 movgs gr6,tbr
561
562 # make sure we (the kernel) get div-zero and misalignment exceptions
563 setlos #ISR_EDE|ISR_DTT_DIVBYZERO|ISR_EMAM_EXCEPTION,gr5
564 movgs gr5,isr
565
566 # clear power-saving mode flags
567 movsg hsr0,gr4
568 andi gr4,#~HSR0_PDM,gr4
569 movgs gr4,hsr0
570
571 # multiplex again using old TBR as a guide
572 setlos.p #TBR_TT,gr3
573 sethi %hi(__entry_vector_table),gr6
574 and.p gr20,gr3,gr5
575 setlo %lo(__entry_vector_table),gr6
576 srli gr5,#2,gr5
577 ld @(gr5,gr6),gr5
578
579 LEDS 0x6009
580 jmpl @(gr5,gr0)
581
582
583 .size __entry_common,.-__entry_common
584
585 ###############################################################################
586 #
587 # handle instruction MMU fault
588 #
589 ###############################################################################
590 #ifdef CONFIG_MMU
591 .globl __entry_insn_mmu_fault
592 __entry_insn_mmu_fault:
593 LEDS 0x6010
594 setlos #0,gr8
595 movsg esr0,gr9
596 movsg scr2,gr10
597
598 # now that we've accessed the exception regs, we can enable exceptions
599 movsg psr,gr4
600 ori gr4,#PSR_ET,gr4
601 movgs gr4,psr
602
603 sethi.p %hi(do_page_fault),gr5
604 setlo %lo(do_page_fault),gr5
605 jmpl @(gr5,gr0) ; call do_page_fault(0,esr0,ear0)
606 #endif
607
608
609 ###############################################################################
610 #
611 # handle instruction access error
612 #
613 ###############################################################################
614 .globl __entry_insn_access_error
615 __entry_insn_access_error:
616 LEDS 0x6011
617 sethi.p %hi(insn_access_error),gr5
618 setlo %lo(insn_access_error),gr5
619 movsg esfr1,gr8
620 movsg epcr0,gr9
621 movsg esr0,gr10
622
623 # now that we've accessed the exception regs, we can enable exceptions
624 movsg psr,gr4
625 ori gr4,#PSR_ET,gr4
626 movgs gr4,psr
627 jmpl @(gr5,gr0) ; call insn_access_error(esfr1,epcr0,esr0)
628
629 ###############################################################################
630 #
631 # handle various instructions of dubious legality
632 #
633 ###############################################################################
634 .globl __entry_unsupported_trap
635 .globl __entry_illegal_instruction
636 .globl __entry_privileged_instruction
637 .globl __entry_debug_exception
638 __entry_unsupported_trap:
639 subi gr21,#4,gr21
640 sti gr21,@(gr28,#REG_PC)
641 __entry_illegal_instruction:
642 __entry_privileged_instruction:
643 __entry_debug_exception:
644 LEDS 0x6012
645 sethi.p %hi(illegal_instruction),gr5
646 setlo %lo(illegal_instruction),gr5
647 movsg esfr1,gr8
648 movsg epcr0,gr9
649 movsg esr0,gr10
650
651 # now that we've accessed the exception regs, we can enable exceptions
652 movsg psr,gr4
653 ori gr4,#PSR_ET,gr4
654 movgs gr4,psr
655 jmpl @(gr5,gr0) ; call ill_insn(esfr1,epcr0,esr0)
656
657 ###############################################################################
658 #
659 # handle atomic operation emulation for userspace
660 #
661 ###############################################################################
662 .globl __entry_atomic_op
663 __entry_atomic_op:
664 LEDS 0x6012
665 sethi.p %hi(atomic_operation),gr5
666 setlo %lo(atomic_operation),gr5
667 movsg esfr1,gr8
668 movsg epcr0,gr9
669 movsg esr0,gr10
670
671 # now that we've accessed the exception regs, we can enable exceptions
672 movsg psr,gr4
673 ori gr4,#PSR_ET,gr4
674 movgs gr4,psr
675 jmpl @(gr5,gr0) ; call atomic_operation(esfr1,epcr0,esr0)
676
677 ###############################################################################
678 #
679 # handle media exception
680 #
681 ###############################################################################
682 .globl __entry_media_exception
683 __entry_media_exception:
684 LEDS 0x6013
685 sethi.p %hi(media_exception),gr5
686 setlo %lo(media_exception),gr5
687 movsg msr0,gr8
688 movsg msr1,gr9
689
690 # now that we've accessed the exception regs, we can enable exceptions
691 movsg psr,gr4
692 ori gr4,#PSR_ET,gr4
693 movgs gr4,psr
694 jmpl @(gr5,gr0) ; call media_excep(msr0,msr1)
695
696 ###############################################################################
697 #
698 # handle data MMU fault
699 # handle data DAT fault (write-protect exception)
700 #
701 ###############################################################################
702 #ifdef CONFIG_MMU
703 .globl __entry_data_mmu_fault
704 __entry_data_mmu_fault:
705 .globl __entry_data_dat_fault
706 __entry_data_dat_fault:
707 LEDS 0x6014
708 setlos #1,gr8
709 movsg esr0,gr9
710 movsg scr2,gr10 ; saved EAR0
711
712 # now that we've accessed the exception regs, we can enable exceptions
713 movsg psr,gr4
714 ori gr4,#PSR_ET,gr4
715 movgs gr4,psr
716
717 sethi.p %hi(do_page_fault),gr5
718 setlo %lo(do_page_fault),gr5
719 jmpl @(gr5,gr0) ; call do_page_fault(1,esr0,ear0)
720 #endif
721
722 ###############################################################################
723 #
724 # handle data and instruction access exceptions
725 #
726 ###############################################################################
727 .globl __entry_insn_access_exception
728 .globl __entry_data_access_exception
729 __entry_insn_access_exception:
730 __entry_data_access_exception:
731 LEDS 0x6016
732 sethi.p %hi(memory_access_exception),gr5
733 setlo %lo(memory_access_exception),gr5
734 movsg esr0,gr8
735 movsg scr2,gr9 ; saved EAR0
736 movsg epcr0,gr10
737
738 # now that we've accessed the exception regs, we can enable exceptions
739 movsg psr,gr4
740 ori gr4,#PSR_ET,gr4
741 movgs gr4,psr
742 jmpl @(gr5,gr0) ; call memory_access_error(esr0,ear0,epcr0)
743
744 ###############################################################################
745 #
746 # handle data access error
747 #
748 ###############################################################################
749 .globl __entry_data_access_error
750 __entry_data_access_error:
751 LEDS 0x6016
752 sethi.p %hi(data_access_error),gr5
753 setlo %lo(data_access_error),gr5
754 movsg esfr1,gr8
755 movsg esr15,gr9
756 movsg ear15,gr10
757
758 # now that we've accessed the exception regs, we can enable exceptions
759 movsg psr,gr4
760 ori gr4,#PSR_ET,gr4
761 movgs gr4,psr
762 jmpl @(gr5,gr0) ; call data_access_error(esfr1,esr15,ear15)
763
764 ###############################################################################
765 #
766 # handle data store error
767 #
768 ###############################################################################
769 .globl __entry_data_store_error
770 __entry_data_store_error:
771 LEDS 0x6017
772 sethi.p %hi(data_store_error),gr5
773 setlo %lo(data_store_error),gr5
774 movsg esfr1,gr8
775 movsg esr14,gr9
776
777 # now that we've accessed the exception regs, we can enable exceptions
778 movsg psr,gr4
779 ori gr4,#PSR_ET,gr4
780 movgs gr4,psr
781 jmpl @(gr5,gr0) ; call data_store_error(esfr1,esr14)
782
783 ###############################################################################
784 #
785 # handle division exception
786 #
787 ###############################################################################
788 .globl __entry_division_exception
789 __entry_division_exception:
790 LEDS 0x6018
791 sethi.p %hi(division_exception),gr5
792 setlo %lo(division_exception),gr5
793 movsg esfr1,gr8
794 movsg esr0,gr9
795 movsg isr,gr10
796
797 # now that we've accessed the exception regs, we can enable exceptions
798 movsg psr,gr4
799 ori gr4,#PSR_ET,gr4
800 movgs gr4,psr
801 jmpl @(gr5,gr0) ; call div_excep(esfr1,esr0,isr)
802
803 ###############################################################################
804 #
805 # handle compound exception
806 #
807 ###############################################################################
808 .globl __entry_compound_exception
809 __entry_compound_exception:
810 LEDS 0x6019
811 sethi.p %hi(compound_exception),gr5
812 setlo %lo(compound_exception),gr5
813 movsg esfr1,gr8
814 movsg esr0,gr9
815 movsg esr14,gr10
816 movsg esr15,gr11
817 movsg msr0,gr12
818 movsg msr1,gr13
819
820 # now that we've accessed the exception regs, we can enable exceptions
821 movsg psr,gr4
822 ori gr4,#PSR_ET,gr4
823 movgs gr4,psr
824 jmpl @(gr5,gr0) ; call comp_excep(esfr1,esr0,esr14,esr15,msr0,msr1)
825
826 ###############################################################################
827 #
828 # handle interrupts and NMIs
829 #
830 ###############################################################################
831 .globl __entry_do_IRQ
832 __entry_do_IRQ:
833 LEDS 0x6020
834
835 # we can enable exceptions
836 movsg psr,gr4
837 ori gr4,#PSR_ET,gr4
838 movgs gr4,psr
839 bra do_IRQ
840
841 .globl __entry_do_NMI
842 __entry_do_NMI:
843 LEDS 0x6021
844
845 # we can enable exceptions
846 movsg psr,gr4
847 ori gr4,#PSR_ET,gr4
848 movgs gr4,psr
849 bra do_NMI
850
851 ###############################################################################
852 #
853 # the return path for a newly forked child process
854 # - __switch_to() saved the old current pointer in GR8 for us
855 #
856 ###############################################################################
857 .globl ret_from_fork
858 ret_from_fork:
859 LEDS 0x6100
860 call schedule_tail
861
862 # fork & co. return 0 to child
863 setlos.p #0,gr8
864 bra __syscall_exit
865
866 .globl ret_from_kernel_thread
867 ret_from_kernel_thread:
868 lddi.p @(gr28,#REG_GR(8)),gr20
869 call schedule_tail
870 calll.p @(gr21,gr0)
871 or gr20,gr20,gr8
872 bra sys_exit
873
874 .globl ret_from_kernel_execve
875 ret_from_kernel_execve:
876 ori gr28,0,sp
877 bra __syscall_exit
878
879 ###################################################################################################
880 #
881 # Return to user mode is not as complex as all this looks,
882 # but we want the default path for a system call return to
883 # go as quickly as possible which is why some of this is
884 # less clear than it otherwise should be.
885 #
886 ###################################################################################################
887 .balign L1_CACHE_BYTES
888 .globl system_call
889 system_call:
890 LEDS 0x6101
891 movsg psr,gr4 ; enable exceptions
892 ori gr4,#PSR_ET,gr4
893 movgs gr4,psr
894
895 sti gr7,@(gr28,#REG_SYSCALLNO)
896 sti.p gr8,@(gr28,#REG_ORIG_GR8)
897
898 subicc gr7,#nr_syscalls,gr0,icc0
899 bnc icc0,#0,__syscall_badsys
900
901 ldi @(gr15,#TI_FLAGS),gr4
902 andicc gr4,#_TIF_SYSCALL_TRACE,gr0,icc0
903 bne icc0,#0,__syscall_trace_entry
904
905 __syscall_call:
906 slli.p gr7,#2,gr7
907 sethi %hi(sys_call_table),gr5
908 setlo %lo(sys_call_table),gr5
909 ld @(gr5,gr7),gr4
910 calll @(gr4,gr0)
911
912
913 ###############################################################################
914 #
915 # return to interrupted process
916 #
917 ###############################################################################
918 __syscall_exit:
919 LEDS 0x6300
920
921 # keep current PSR in GR23
922 movsg psr,gr23
923
924 ldi @(gr28,#REG_PSR),gr22
925
926 sti.p gr8,@(gr28,#REG_GR(8)) ; save return value
927
928 # rebuild saved psr - execve will change it for init/main.c
929 srli gr22,#1,gr5
930 andi.p gr22,#~PSR_PS,gr22
931 andi gr5,#PSR_PS,gr5
932 or gr5,gr22,gr22
933 ori.p gr22,#PSR_S,gr22
934
935 # make sure we don't miss an interrupt setting need_resched or sigpending between
936 # sampling and the RETT
937 ori gr23,#PSR_PIL_14,gr23
938 movgs gr23,psr
939
940 ldi @(gr15,#TI_FLAGS),gr4
941 andicc gr4,#_TIF_ALLWORK_MASK,gr0,icc0
942 bne icc0,#0,__syscall_exit_work
943
944 # restore all registers and return
945 __entry_return_direct:
946 LEDS 0x6301
947
948 andi gr22,#~PSR_ET,gr22
949 movgs gr22,psr
950
951 ldi @(gr28,#REG_ISR),gr23
952 lddi @(gr28,#REG_CCR),gr24
953 lddi @(gr28,#REG_LR) ,gr26
954 ldi @(gr28,#REG_PC) ,gr21
955 ldi @(gr28,#REG_TBR),gr20
956
957 movgs gr20,tbr
958 movgs gr21,pcsr
959 movgs gr23,isr
960 movgs gr24,ccr
961 movgs gr25,cccr
962 movgs gr26,lr
963 movgs gr27,lcr
964
965 lddi @(gr28,#REG_GNER0),gr4
966 movgs gr4,gner0
967 movgs gr5,gner1
968
969 lddi @(gr28,#REG_IACC0),gr4
970 movgs gr4,iacc0h
971 movgs gr5,iacc0l
972
973 lddi @(gr28,#REG_GR(4)) ,gr4
974 lddi @(gr28,#REG_GR(6)) ,gr6
975 lddi @(gr28,#REG_GR(8)) ,gr8
976 lddi @(gr28,#REG_GR(10)),gr10
977 lddi @(gr28,#REG_GR(12)),gr12
978 lddi @(gr28,#REG_GR(14)),gr14
979 lddi @(gr28,#REG_GR(16)),gr16
980 lddi @(gr28,#REG_GR(18)),gr18
981 lddi @(gr28,#REG_GR(20)),gr20
982 lddi @(gr28,#REG_GR(22)),gr22
983 lddi @(gr28,#REG_GR(24)),gr24
984 lddi @(gr28,#REG_GR(26)),gr26
985 ldi @(gr28,#REG_GR(29)),gr29
986 lddi @(gr28,#REG_GR(30)),gr30
987
988 # check to see if a debugging return is required
989 LEDS 0x67f0
990 movsg ccr,gr2
991 ldi @(gr28,#REG__STATUS),gr3
992 andicc gr3,#REG__STATUS_STEP,gr0,icc0
993 bne icc0,#0,__entry_return_singlestep
994 movgs gr2,ccr
995
996 ldi @(gr28,#REG_SP) ,sp
997 lddi @(gr28,#REG_GR(2)) ,gr2
998 ldi @(gr28,#REG_GR(28)),gr28
999
1000 LEDS 0x67fe
1001 // movsg pcsr,gr31
1002 // LEDS32
1003
1004 #if 0
1005 # store the current frame in the workram on the FR451
1006 movgs gr28,scr2
1007 sethi.p %hi(0xfe800000),gr28
1008 setlo %lo(0xfe800000),gr28
1009
1010 stdi gr2,@(gr28,#REG_GR(2))
1011 stdi gr4,@(gr28,#REG_GR(4))
1012 stdi gr6,@(gr28,#REG_GR(6))
1013 stdi gr8,@(gr28,#REG_GR(8))
1014 stdi gr10,@(gr28,#REG_GR(10))
1015 stdi gr12,@(gr28,#REG_GR(12))
1016 stdi gr14,@(gr28,#REG_GR(14))
1017 stdi gr16,@(gr28,#REG_GR(16))
1018 stdi gr18,@(gr28,#REG_GR(18))
1019 stdi gr24,@(gr28,#REG_GR(24))
1020 stdi gr26,@(gr28,#REG_GR(26))
1021 sti gr29,@(gr28,#REG_GR(29))
1022 stdi gr30,@(gr28,#REG_GR(30))
1023
1024 movsg tbr ,gr30
1025 sti gr30,@(gr28,#REG_TBR)
1026 movsg pcsr,gr30
1027 sti gr30,@(gr28,#REG_PC)
1028 movsg psr ,gr30
1029 sti gr30,@(gr28,#REG_PSR)
1030 movsg isr ,gr30
1031 sti gr30,@(gr28,#REG_ISR)
1032 movsg ccr ,gr30
1033 movsg cccr,gr31
1034 stdi gr30,@(gr28,#REG_CCR)
1035 movsg lr ,gr30
1036 movsg lcr ,gr31
1037 stdi gr30,@(gr28,#REG_LR)
1038 sti gr0 ,@(gr28,#REG_SYSCALLNO)
1039 movsg scr2,gr28
1040 #endif
1041
1042 rett #0
1043
1044 # return via break.S
1045 __entry_return_singlestep:
1046 movgs gr2,ccr
1047 lddi @(gr28,#REG_GR(2)) ,gr2
1048 ldi @(gr28,#REG_SP) ,sp
1049 ldi @(gr28,#REG_GR(28)),gr28
1050 LEDS 0x67ff
1051 break
1052 .globl __entry_return_singlestep_breaks_here
1053 __entry_return_singlestep_breaks_here:
1054 nop
1055
1056
1057 ###############################################################################
1058 #
1059 # return to a process interrupted in kernel space
1060 # - we need to consider preemption if that is enabled
1061 #
1062 ###############################################################################
1063 .balign L1_CACHE_BYTES
1064 __entry_return_from_kernel_exception:
1065 LEDS 0x6302
1066 movsg psr,gr23
1067 ori gr23,#PSR_PIL_14,gr23
1068 movgs gr23,psr
1069 bra __entry_return_direct
1070
1071 .balign L1_CACHE_BYTES
1072 __entry_return_from_kernel_interrupt:
1073 LEDS 0x6303
1074 movsg psr,gr23
1075 ori gr23,#PSR_PIL_14,gr23
1076 movgs gr23,psr
1077
1078 #ifdef CONFIG_PREEMPT
1079 ldi @(gr15,#TI_PRE_COUNT),gr5
1080 subicc gr5,#0,gr0,icc0
1081 beq icc0,#0,__entry_return_direct
1082
1083 __entry_preempt_need_resched:
1084 ldi @(gr15,#TI_FLAGS),gr4
1085 andicc gr4,#_TIF_NEED_RESCHED,gr0,icc0
1086 beq icc0,#1,__entry_return_direct
1087
1088 setlos #PREEMPT_ACTIVE,gr5
1089 sti gr5,@(gr15,#TI_FLAGS)
1090
1091 andi gr23,#~PSR_PIL,gr23
1092 movgs gr23,psr
1093
1094 call schedule
1095 sti gr0,@(gr15,#TI_PRE_COUNT)
1096
1097 movsg psr,gr23
1098 ori gr23,#PSR_PIL_14,gr23
1099 movgs gr23,psr
1100 bra __entry_preempt_need_resched
1101 #else
1102 bra __entry_return_direct
1103 #endif
1104
1105
1106 ###############################################################################
1107 #
1108 # perform work that needs to be done immediately before resumption
1109 #
1110 ###############################################################################
1111 .globl __entry_return_from_user_exception
1112 .balign L1_CACHE_BYTES
1113 __entry_return_from_user_exception:
1114 LEDS 0x6501
1115
1116 __entry_resume_userspace:
1117 # make sure we don't miss an interrupt setting need_resched or sigpending between
1118 # sampling and the RETT
1119 movsg psr,gr23
1120 ori gr23,#PSR_PIL_14,gr23
1121 movgs gr23,psr
1122
1123 __entry_return_from_user_interrupt:
1124 LEDS 0x6402
1125 ldi @(gr15,#TI_FLAGS),gr4
1126 andicc gr4,#_TIF_WORK_MASK,gr0,icc0
1127 beq icc0,#1,__entry_return_direct
1128
1129 __entry_work_pending:
1130 LEDS 0x6404
1131 andicc gr4,#_TIF_NEED_RESCHED,gr0,icc0
1132 beq icc0,#1,__entry_work_notifysig
1133
1134 __entry_work_resched:
1135 LEDS 0x6408
1136 movsg psr,gr23
1137 andi gr23,#~PSR_PIL,gr23
1138 movgs gr23,psr
1139 call schedule
1140 movsg psr,gr23
1141 ori gr23,#PSR_PIL_14,gr23
1142 movgs gr23,psr
1143
1144 LEDS 0x6401
1145 ldi @(gr15,#TI_FLAGS),gr4
1146 andicc gr4,#_TIF_WORK_MASK,gr0,icc0
1147 beq icc0,#1,__entry_return_direct
1148 andicc gr4,#_TIF_NEED_RESCHED,gr0,icc0
1149 bne icc0,#1,__entry_work_resched
1150
1151 __entry_work_notifysig:
1152 LEDS 0x6410
1153 ori.p gr4,#0,gr8
1154 call do_notify_resume
1155 bra __entry_resume_userspace
1156
1157 # perform syscall entry tracing
1158 __syscall_trace_entry:
1159 LEDS 0x6320
1160 call syscall_trace_entry
1161
1162 lddi.p @(gr28,#REG_GR(8)) ,gr8
1163 ori gr8,#0,gr7 ; syscall_trace_entry() returned new syscallno
1164 lddi @(gr28,#REG_GR(10)),gr10
1165 lddi.p @(gr28,#REG_GR(12)),gr12
1166
1167 subicc gr7,#nr_syscalls,gr0,icc0
1168 bnc icc0,#0,__syscall_badsys
1169 bra __syscall_call
1170
1171 # perform syscall exit tracing
1172 __syscall_exit_work:
1173 LEDS 0x6340
1174 andicc gr22,#PSR_PS,gr0,icc1 ; don't handle on return to kernel mode
1175 andicc.p gr4,#_TIF_SYSCALL_TRACE,gr0,icc0
1176 bne icc1,#0,__entry_return_direct
1177 beq icc0,#1,__entry_work_pending
1178
1179 movsg psr,gr23
1180 andi gr23,#~PSR_PIL,gr23 ; could let syscall_trace_exit() call schedule()
1181 movgs gr23,psr
1182
1183 call syscall_trace_exit
1184 bra __entry_resume_userspace
1185
1186 __syscall_badsys:
1187 LEDS 0x6380
1188 setlos #-ENOSYS,gr8
1189 sti gr8,@(gr28,#REG_GR(8)) ; save return value
1190 bra __entry_resume_userspace
1191
1192
1193 ###############################################################################
1194 #
1195 # syscall vector table
1196 #
1197 ###############################################################################
1198 .section .rodata
1199 ALIGN
1200 .globl sys_call_table
1201 sys_call_table:
1202 .long sys_restart_syscall /* 0 - old "setup()" system call, used for restarting */
1203 .long sys_exit
1204 .long sys_fork
1205 .long sys_read
1206 .long sys_write
1207 .long sys_open /* 5 */
1208 .long sys_close
1209 .long sys_waitpid
1210 .long sys_creat
1211 .long sys_link
1212 .long sys_unlink /* 10 */
1213 .long sys_execve
1214 .long sys_chdir
1215 .long sys_time
1216 .long sys_mknod
1217 .long sys_chmod /* 15 */
1218 .long sys_lchown16
1219 .long sys_ni_syscall /* old break syscall holder */
1220 .long sys_stat
1221 .long sys_lseek
1222 .long sys_getpid /* 20 */
1223 .long sys_mount
1224 .long sys_oldumount
1225 .long sys_setuid16
1226 .long sys_getuid16
1227 .long sys_ni_syscall // sys_stime /* 25 */
1228 .long sys_ptrace
1229 .long sys_alarm
1230 .long sys_fstat
1231 .long sys_pause
1232 .long sys_utime /* 30 */
1233 .long sys_ni_syscall /* old stty syscall holder */
1234 .long sys_ni_syscall /* old gtty syscall holder */
1235 .long sys_access
1236 .long sys_nice
1237 .long sys_ni_syscall /* 35 */ /* old ftime syscall holder */
1238 .long sys_sync
1239 .long sys_kill
1240 .long sys_rename
1241 .long sys_mkdir
1242 .long sys_rmdir /* 40 */
1243 .long sys_dup
1244 .long sys_pipe
1245 .long sys_times
1246 .long sys_ni_syscall /* old prof syscall holder */
1247 .long sys_brk /* 45 */
1248 .long sys_setgid16
1249 .long sys_getgid16
1250 .long sys_ni_syscall // sys_signal
1251 .long sys_geteuid16
1252 .long sys_getegid16 /* 50 */
1253 .long sys_acct
1254 .long sys_umount /* recycled never used phys( */
1255 .long sys_ni_syscall /* old lock syscall holder */
1256 .long sys_ioctl
1257 .long sys_fcntl /* 55 */
1258 .long sys_ni_syscall /* old mpx syscall holder */
1259 .long sys_setpgid
1260 .long sys_ni_syscall /* old ulimit syscall holder */
1261 .long sys_ni_syscall /* old old uname syscall */
1262 .long sys_umask /* 60 */
1263 .long sys_chroot
1264 .long sys_ustat
1265 .long sys_dup2
1266 .long sys_getppid
1267 .long sys_getpgrp /* 65 */
1268 .long sys_setsid
1269 .long sys_sigaction
1270 .long sys_ni_syscall // sys_sgetmask
1271 .long sys_ni_syscall // sys_ssetmask
1272 .long sys_setreuid16 /* 70 */
1273 .long sys_setregid16
1274 .long sys_sigsuspend
1275 .long sys_ni_syscall // sys_sigpending
1276 .long sys_sethostname
1277 .long sys_setrlimit /* 75 */
1278 .long sys_ni_syscall // sys_old_getrlimit
1279 .long sys_getrusage
1280 .long sys_gettimeofday
1281 .long sys_settimeofday
1282 .long sys_getgroups16 /* 80 */
1283 .long sys_setgroups16
1284 .long sys_ni_syscall /* old_select slot */
1285 .long sys_symlink
1286 .long sys_lstat
1287 .long sys_readlink /* 85 */
1288 .long sys_uselib
1289 .long sys_swapon
1290 .long sys_reboot
1291 .long sys_ni_syscall // old_readdir
1292 .long sys_ni_syscall /* 90 */ /* old_mmap slot */
1293 .long sys_munmap
1294 .long sys_truncate
1295 .long sys_ftruncate
1296 .long sys_fchmod
1297 .long sys_fchown16 /* 95 */
1298 .long sys_getpriority
1299 .long sys_setpriority
1300 .long sys_ni_syscall /* old profil syscall holder */
1301 .long sys_statfs
1302 .long sys_fstatfs /* 100 */
1303 .long sys_ni_syscall /* ioperm for i386 */
1304 .long sys_socketcall
1305 .long sys_syslog
1306 .long sys_setitimer
1307 .long sys_getitimer /* 105 */
1308 .long sys_newstat
1309 .long sys_newlstat
1310 .long sys_newfstat
1311 .long sys_ni_syscall /* obsolete olduname( syscall */
1312 .long sys_ni_syscall /* iopl for i386 */ /* 110 */
1313 .long sys_vhangup
1314 .long sys_ni_syscall /* obsolete idle( syscall */
1315 .long sys_ni_syscall /* vm86old for i386 */
1316 .long sys_wait4
1317 .long sys_swapoff /* 115 */
1318 .long sys_sysinfo
1319 .long sys_ipc
1320 .long sys_fsync
1321 .long sys_sigreturn
1322 .long sys_clone /* 120 */
1323 .long sys_setdomainname
1324 .long sys_newuname
1325 .long sys_ni_syscall /* old "cacheflush" */
1326 .long sys_adjtimex
1327 .long sys_mprotect /* 125 */
1328 .long sys_sigprocmask
1329 .long sys_ni_syscall /* old "create_module" */
1330 .long sys_init_module
1331 .long sys_delete_module
1332 .long sys_ni_syscall /* old "get_kernel_syms" */
1333 .long sys_quotactl
1334 .long sys_getpgid
1335 .long sys_fchdir
1336 .long sys_bdflush
1337 .long sys_sysfs /* 135 */
1338 .long sys_personality
1339 .long sys_ni_syscall /* for afs_syscall */
1340 .long sys_setfsuid16
1341 .long sys_setfsgid16
1342 .long sys_llseek /* 140 */
1343 .long sys_getdents
1344 .long sys_select
1345 .long sys_flock
1346 .long sys_msync
1347 .long sys_readv /* 145 */
1348 .long sys_writev
1349 .long sys_getsid
1350 .long sys_fdatasync
1351 .long sys_sysctl
1352 .long sys_mlock /* 150 */
1353 .long sys_munlock
1354 .long sys_mlockall
1355 .long sys_munlockall
1356 .long sys_sched_setparam
1357 .long sys_sched_getparam /* 155 */
1358 .long sys_sched_setscheduler
1359 .long sys_sched_getscheduler
1360 .long sys_sched_yield
1361 .long sys_sched_get_priority_max
1362 .long sys_sched_get_priority_min /* 160 */
1363 .long sys_sched_rr_get_interval
1364 .long sys_nanosleep
1365 .long sys_mremap
1366 .long sys_setresuid16
1367 .long sys_getresuid16 /* 165 */
1368 .long sys_ni_syscall /* for vm86 */
1369 .long sys_ni_syscall /* Old sys_query_module */
1370 .long sys_poll
1371 .long sys_ni_syscall /* Old nfsservctl */
1372 .long sys_setresgid16 /* 170 */
1373 .long sys_getresgid16
1374 .long sys_prctl
1375 .long sys_rt_sigreturn
1376 .long sys_rt_sigaction
1377 .long sys_rt_sigprocmask /* 175 */
1378 .long sys_rt_sigpending
1379 .long sys_rt_sigtimedwait
1380 .long sys_rt_sigqueueinfo
1381 .long sys_rt_sigsuspend
1382 .long sys_pread64 /* 180 */
1383 .long sys_pwrite64
1384 .long sys_chown16
1385 .long sys_getcwd
1386 .long sys_capget
1387 .long sys_capset /* 185 */
1388 .long sys_sigaltstack
1389 .long sys_sendfile
1390 .long sys_ni_syscall /* streams1 */
1391 .long sys_ni_syscall /* streams2 */
1392 .long sys_vfork /* 190 */
1393 .long sys_getrlimit
1394 .long sys_mmap2
1395 .long sys_truncate64
1396 .long sys_ftruncate64
1397 .long sys_stat64 /* 195 */
1398 .long sys_lstat64
1399 .long sys_fstat64
1400 .long sys_lchown
1401 .long sys_getuid
1402 .long sys_getgid /* 200 */
1403 .long sys_geteuid
1404 .long sys_getegid
1405 .long sys_setreuid
1406 .long sys_setregid
1407 .long sys_getgroups /* 205 */
1408 .long sys_setgroups
1409 .long sys_fchown
1410 .long sys_setresuid
1411 .long sys_getresuid
1412 .long sys_setresgid /* 210 */
1413 .long sys_getresgid
1414 .long sys_chown
1415 .long sys_setuid
1416 .long sys_setgid
1417 .long sys_setfsuid /* 215 */
1418 .long sys_setfsgid
1419 .long sys_pivot_root
1420 .long sys_mincore
1421 .long sys_madvise
1422 .long sys_getdents64 /* 220 */
1423 .long sys_fcntl64
1424 .long sys_ni_syscall /* reserved for TUX */
1425 .long sys_ni_syscall /* Reserved for Security */
1426 .long sys_gettid
1427 .long sys_readahead /* 225 */
1428 .long sys_setxattr
1429 .long sys_lsetxattr
1430 .long sys_fsetxattr
1431 .long sys_getxattr
1432 .long sys_lgetxattr /* 230 */
1433 .long sys_fgetxattr
1434 .long sys_listxattr
1435 .long sys_llistxattr
1436 .long sys_flistxattr
1437 .long sys_removexattr /* 235 */
1438 .long sys_lremovexattr
1439 .long sys_fremovexattr
1440 .long sys_tkill
1441 .long sys_sendfile64
1442 .long sys_futex /* 240 */
1443 .long sys_sched_setaffinity
1444 .long sys_sched_getaffinity
1445 .long sys_ni_syscall //sys_set_thread_area
1446 .long sys_ni_syscall //sys_get_thread_area
1447 .long sys_io_setup /* 245 */
1448 .long sys_io_destroy
1449 .long sys_io_getevents
1450 .long sys_io_submit
1451 .long sys_io_cancel
1452 .long sys_fadvise64 /* 250 */
1453 .long sys_ni_syscall
1454 .long sys_exit_group
1455 .long sys_lookup_dcookie
1456 .long sys_epoll_create
1457 .long sys_epoll_ctl /* 255 */
1458 .long sys_epoll_wait
1459 .long sys_remap_file_pages
1460 .long sys_set_tid_address
1461 .long sys_timer_create
1462 .long sys_timer_settime /* 260 */
1463 .long sys_timer_gettime
1464 .long sys_timer_getoverrun
1465 .long sys_timer_delete
1466 .long sys_clock_settime
1467 .long sys_clock_gettime /* 265 */
1468 .long sys_clock_getres
1469 .long sys_clock_nanosleep
1470 .long sys_statfs64
1471 .long sys_fstatfs64
1472 .long sys_tgkill /* 270 */
1473 .long sys_utimes
1474 .long sys_fadvise64_64
1475 .long sys_ni_syscall /* sys_vserver */
1476 .long sys_mbind
1477 .long sys_get_mempolicy
1478 .long sys_set_mempolicy
1479 .long sys_mq_open
1480 .long sys_mq_unlink
1481 .long sys_mq_timedsend
1482 .long sys_mq_timedreceive /* 280 */
1483 .long sys_mq_notify
1484 .long sys_mq_getsetattr
1485 .long sys_ni_syscall /* reserved for kexec */
1486 .long sys_waitid
1487 .long sys_ni_syscall /* 285 */ /* available */
1488 .long sys_add_key
1489 .long sys_request_key
1490 .long sys_keyctl
1491 .long sys_ioprio_set
1492 .long sys_ioprio_get /* 290 */
1493 .long sys_inotify_init
1494 .long sys_inotify_add_watch
1495 .long sys_inotify_rm_watch
1496 .long sys_migrate_pages
1497 .long sys_openat /* 295 */
1498 .long sys_mkdirat
1499 .long sys_mknodat
1500 .long sys_fchownat
1501 .long sys_futimesat
1502 .long sys_fstatat64 /* 300 */
1503 .long sys_unlinkat
1504 .long sys_renameat
1505 .long sys_linkat
1506 .long sys_symlinkat
1507 .long sys_readlinkat /* 305 */
1508 .long sys_fchmodat
1509 .long sys_faccessat
1510 .long sys_pselect6
1511 .long sys_ppoll
1512 .long sys_unshare /* 310 */
1513 .long sys_set_robust_list
1514 .long sys_get_robust_list
1515 .long sys_splice
1516 .long sys_sync_file_range
1517 .long sys_tee /* 315 */
1518 .long sys_vmsplice
1519 .long sys_move_pages
1520 .long sys_getcpu
1521 .long sys_epoll_pwait
1522 .long sys_utimensat /* 320 */
1523 .long sys_signalfd
1524 .long sys_timerfd_create
1525 .long sys_eventfd
1526 .long sys_fallocate
1527 .long sys_timerfd_settime /* 325 */
1528 .long sys_timerfd_gettime
1529 .long sys_signalfd4
1530 .long sys_eventfd2
1531 .long sys_epoll_create1
1532 .long sys_dup3 /* 330 */
1533 .long sys_pipe2
1534 .long sys_inotify_init1
1535 .long sys_preadv
1536 .long sys_pwritev
1537 .long sys_rt_tgsigqueueinfo /* 335 */
1538 .long sys_perf_event_open
1539 .long sys_setns
1540
1541 syscall_table_size = (. - sys_call_table)
This page took 0.096408 seconds and 5 git commands to generate.