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