OpenCores
URL https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [linux-2.6/] [linux-2.6.24/] [arch/] [or32/] [kernel/] [entry.S] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 7 xianfeng
/*
2
 *  linux/arch/or32/kernel/entry.S
3
 *
4
 *  or32 version
5
 *    author(s): Matjaz Breskvar (phoenix@bsemi.com)
6
 *
7
 *  changes:
8
 *  18. 11. 2003: Matjaz Breskvar (phoenix@bsemi.com)
9
 *    initial port to or32 architecture
10
 *  06. 12. 2003: Matjaz Breskvar (phoenix@bsemi.com)
11
 *    major changes in handling exceptions
12
 *    physical addresses used only by code in head.S
13
 *    cleand exception handlers and moved them to entry.S
14
 *  31. 12. 2005: Gyorgy Jeney (nog@bsemi.com)
15
 *    Added syscall traceing code
16
 *
17
 * syscall table entries are based on ppc port, so they will probably
18
 * need some more cleaning.
19
 *
20
 * Stack layout in 'ret_from_system_call':
21
 *      ptrace needs to have all regs on the stack.
22
 *      if the order here is changed, it needs to be
23
 *      updated in fork.c:copy_process, signal.c:do_signal,
24
 *      ptrace.c and ptrace.h
25
 *
26
 * syscall table entries are based on ppc port, so it will probably need
27
 * some more cleaning.
28
 */
29
 
30
#include 
31
#include 
32
#include 
33
#include 
34
#include 
35
#include 
36
#include 
37
#include 
38
 
39
#include 
40
#include 
41
#include 
42
#include 
43
#include 
44
 
45
/* some defines to ease or32 assembly programming */
46
#include "or32_funcs.S"
47
 
48
#define GET_CURRENT_THREAD_INFO(reg,ksp)                        \
49
        l.srli  reg,ksp,PAGE_SHIFT                              ;\
50
        l.slli  reg,reg,PAGE_SHIFT
51
 
52
/* =========================================================[ macros ]=== */
53
 
54
#define PUSH_PT_REGS_NO_TRANS                                   \
55
        l.addi  r1,r1,-(INT_FRAME_SIZE)                         ;\
56
        l.sw    GPR3(r1),r3                                     ;\
57
        l.sw    ORIG_GPR3(r1),r3                                ;\
58
        l.mfspr r3,r0,SPR_EPCR_BASE                             ;\
59
        l.sw    PC(r1),r3                                       ;\
60
        l.mfspr r3,r0,SPR_ESR_BASE                              ;\
61
        l.sw    SR(r1),r3                                       ;\
62
        l.addi  r3,r1,+(INT_FRAME_SIZE)                         ;\
63
        l.sw    SP(r1),r3                                       ;\
64
        l.sw    GPR2(r1),r2                                     ;\
65
        l.lwz   r3,GPR3(r1)                                     ;\
66
        l.sw    GPR4(r1),r4                                     ;\
67
        l.sw    GPR5(r1),r5                                     ;\
68
        l.sw    GPR6(r1),r6                                     ;\
69
        l.sw    GPR7(r1),r7                                     ;\
70
        l.sw    GPR8(r1),r8                                     ;\
71
        l.sw    GPR9(r1),r9                                     ;\
72
        l.sw    GPR10(r1),r10                                   ;\
73
        l.sw    GPR11(r1),r11                                   ;\
74
        l.sw    GPR12(r1),r12                                   ;\
75
        l.sw    GPR13(r1),r13                                   ;\
76
        l.sw    GPR14(r1),r14                                   ;\
77
        l.sw    GPR15(r1),r15                                   ;\
78
        l.sw    GPR16(r1),r16                                   ;\
79
        l.sw    GPR17(r1),r17                                   ;\
80
        l.sw    GPR18(r1),r18                                   ;\
81
        l.sw    GPR19(r1),r19                                   ;\
82
        l.sw    GPR20(r1),r20                                   ;\
83
        l.sw    GPR21(r1),r21                                   ;\
84
        l.sw    GPR22(r1),r22                                   ;\
85
        l.sw    GPR23(r1),r23                                   ;\
86
        l.sw    GPR24(r1),r24                                   ;\
87
        l.sw    GPR25(r1),r25                                   ;\
88
        l.sw    GPR26(r1),r26                                   ;\
89
        l.sw    GPR27(r1),r27                                   ;\
90
        l.sw    GPR28(r1),r28                                   ;\
91
        l.sw    GPR29(r1),r29                                   ;\
92
        l.sw    GPR30(r1),r30                                   ;\
93
        l.sw    GPR31(r1),r31                                   ;\
94
        l.sw    RESULT(r1),r0
95
 
96
 
97
/*
98
 * We need to disable interrupts at beginning of RESTORE_ALL
99
 * since interrupt might come in after we've loaded EPC return address
100
 * and overwrite EPC with address somewhere in RESTORE_ALL
101
 * which is of course wrong!
102
 */
103
 
104
#define RESTORE_ALL                                             \
105
        DISABLE_INTERRUPTS(r3,r4)                               ;\
106
        l.lwz   r3,PC(r1)                                       ;\
107
        l.mtspr r0,r3,SPR_EPCR_BASE                             ;\
108
        l.lwz   r3,SR(r1)                                       ;\
109
        l.mtspr r0,r3,SPR_ESR_BASE                              ;\
110
        l.lwz   r2,GPR2(r1)                                     ;\
111
        l.lwz   r3,GPR3(r1)                                     ;\
112
        l.lwz   r4,GPR4(r1)                                     ;\
113
        l.lwz   r5,GPR5(r1)                                     ;\
114
        l.lwz   r6,GPR6(r1)                                     ;\
115
        l.lwz   r7,GPR7(r1)                                     ;\
116
        l.lwz   r8,GPR8(r1)                                     ;\
117
        l.lwz   r9,GPR9(r1)                                     ;\
118
        l.lwz   r10,GPR10(r1)                                   ;\
119
        l.lwz   r11,GPR11(r1)                                   ;\
120
        l.lwz   r12,GPR12(r1)                                   ;\
121
        l.lwz   r13,GPR13(r1)                                   ;\
122
        l.lwz   r14,GPR14(r1)                                   ;\
123
        l.lwz   r15,GPR15(r1)                                   ;\
124
        l.lwz   r16,GPR16(r1)                                   ;\
125
        l.lwz   r17,GPR17(r1)                                   ;\
126
        l.lwz   r18,GPR18(r1)                                   ;\
127
        l.lwz   r19,GPR19(r1)                                   ;\
128
        l.lwz   r20,GPR20(r1)                                   ;\
129
        l.lwz   r21,GPR21(r1)                                   ;\
130
        l.lwz   r22,GPR22(r1)                                   ;\
131
        l.lwz   r23,GPR23(r1)                                   ;\
132
        l.lwz   r24,GPR24(r1)                                   ;\
133
        l.lwz   r25,GPR25(r1)                                   ;\
134
        l.lwz   r26,GPR26(r1)                                   ;\
135
        l.lwz   r27,GPR27(r1)                                   ;\
136
        l.lwz   r28,GPR28(r1)                                   ;\
137
        l.lwz   r29,GPR29(r1)                                   ;\
138
        l.lwz   r30,GPR30(r1)                                   ;\
139
        l.lwz   r31,GPR31(r1)                                   ;\
140
        l.lwz   r1,SP(r1)                                       ;\
141
        l.rfe
142
 
143
#define RESTORE_ALL_NO_R11                                      \
144
        DISABLE_INTERRUPTS(r3,r4)                               ;\
145
        l.lwz   r3,PC(r1)                                       ;\
146
        l.mtspr r0,r3,SPR_EPCR_BASE                             ;\
147
        l.lwz   r3,SR(r1)                                       ;\
148
        l.mtspr r0,r3,SPR_ESR_BASE                              ;\
149
        l.lwz   r2,GPR2(r1)                                     ;\
150
        l.lwz   r3,GPR3(r1)                                     ;\
151
        l.lwz   r4,GPR4(r1)                                     ;\
152
        l.lwz   r5,GPR5(r1)                                     ;\
153
        l.lwz   r6,GPR6(r1)                                     ;\
154
        l.lwz   r7,GPR7(r1)                                     ;\
155
        l.lwz   r8,GPR8(r1)                                     ;\
156
        l.lwz   r9,GPR9(r1)                                     ;\
157
        l.lwz   r10,GPR10(r1)                                   ;\
158
        l.lwz   r12,GPR12(r1)                                   ;\
159
        l.lwz   r13,GPR13(r1)                                   ;\
160
        l.lwz   r14,GPR14(r1)                                   ;\
161
        l.lwz   r15,GPR15(r1)                                   ;\
162
        l.lwz   r16,GPR16(r1)                                   ;\
163
        l.lwz   r17,GPR17(r1)                                   ;\
164
        l.lwz   r18,GPR18(r1)                                   ;\
165
        l.lwz   r19,GPR19(r1)                                   ;\
166
        l.lwz   r20,GPR20(r1)                                   ;\
167
        l.lwz   r21,GPR21(r1)                                   ;\
168
        l.lwz   r22,GPR22(r1)                                   ;\
169
        l.lwz   r23,GPR23(r1)                                   ;\
170
        l.lwz   r24,GPR24(r1)                                   ;\
171
        l.lwz   r25,GPR25(r1)                                   ;\
172
        l.lwz   r26,GPR26(r1)                                   ;\
173
        l.lwz   r27,GPR27(r1)                                   ;\
174
        l.lwz   r28,GPR28(r1)                                   ;\
175
        l.lwz   r29,GPR29(r1)                                   ;\
176
        l.lwz   r30,GPR30(r1)                                   ;\
177
        l.lwz   r31,GPR31(r1)                                   ;\
178
        l.lwz   r1,SP(r1)                                       ;\
179
        l.rfe
180
 
181
 
182
#define EXCEPTION_ENTRY(handler)                                \
183
        .global handler                                         ;\
184
handler:                                                        ;\
185
        /* r1, EPCR, ESR a already saved */                     ;\
186
        l.sw    GPR2(r1),r2                                     ;\
187
        l.sw    GPR3(r1),r3                                     ;\
188
        l.sw    ORIG_GPR3(r1),r3                                ;\
189
        /* r4 already save */                                   ;\
190
        l.sw    GPR5(r1),r5                                     ;\
191
        l.sw    GPR6(r1),r6                                     ;\
192
        l.sw    GPR7(r1),r7                                     ;\
193
        l.sw    GPR8(r1),r8                                     ;\
194
        l.sw    GPR9(r1),r9                                     ;\
195
        /* r10 already saved */                                 ;\
196
        l.sw    GPR11(r1),r11                                   ;\
197
        /* r12,r13 already saved */                             ;\
198
        l.sw    GPR14(r1),r14                                   ;\
199
        l.sw    GPR15(r1),r15                                   ;\
200
        l.sw    GPR16(r1),r16                                   ;\
201
        l.sw    GPR17(r1),r17                                   ;\
202
        l.sw    GPR18(r1),r18                                   ;\
203
        l.sw    GPR19(r1),r19                                   ;\
204
        l.sw    GPR20(r1),r20                                   ;\
205
        l.sw    GPR21(r1),r21                                   ;\
206
        l.sw    GPR22(r1),r22                                   ;\
207
        l.sw    GPR23(r1),r23                                   ;\
208
        l.sw    GPR24(r1),r24                                   ;\
209
        l.sw    GPR25(r1),r25                                   ;\
210
        l.sw    GPR26(r1),r26                                   ;\
211
        l.sw    GPR27(r1),r27                                   ;\
212
        l.sw    GPR28(r1),r28                                   ;\
213
        l.sw    GPR29(r1),r29                                   ;\
214
        l.sw    GPR30(r1),r30                                   ;\
215
        /* r31 already save */                                  ;\
216
        l.sw    RESULT(r1),r0
217
 
218
#define UNHANDLED_EXCEPTION(handler,vector)                     \
219
        .global handler                                         ;\
220
handler:                                                        ;\
221
        /* r1, EPCR, ESR already saved */                       ;\
222
        l.sw    GPR2(r1),r2                                     ;\
223
        l.sw    GPR3(r1),r3                                     ;\
224
        l.sw    ORIG_GPR3(r1),r3                                ;\
225
        l.sw    GPR5(r1),r5                                     ;\
226
        l.sw    GPR6(r1),r6                                     ;\
227
        l.sw    GPR7(r1),r7                                     ;\
228
        l.sw    GPR8(r1),r8                                     ;\
229
        l.sw    GPR9(r1),r9                                     ;\
230
        /* r10 already saved */                                 ;\
231
        l.sw    GPR11(r1),r11                                   ;\
232
        /* r12,r13 already saved */                             ;\
233
        l.sw    GPR14(r1),r14                                   ;\
234
        l.sw    GPR15(r1),r15                                   ;\
235
        l.sw    GPR16(r1),r16                                   ;\
236
        l.sw    GPR17(r1),r17                                   ;\
237
        l.sw    GPR18(r1),r18                                   ;\
238
        l.sw    GPR19(r1),r19                                   ;\
239
        l.sw    GPR20(r1),r20                                   ;\
240
        l.sw    GPR21(r1),r21                                   ;\
241
        l.sw    GPR22(r1),r22                                   ;\
242
        l.sw    GPR23(r1),r23                                   ;\
243
        l.sw    GPR24(r1),r24                                   ;\
244
        l.sw    GPR25(r1),r25                                   ;\
245
        l.sw    GPR26(r1),r26                                   ;\
246
        l.sw    GPR27(r1),r27                                   ;\
247
        l.sw    GPR28(r1),r28                                   ;\
248
        l.sw    GPR29(r1),r29                                   ;\
249
        l.sw    GPR30(r1),r30                                   ;\
250
        /* r31 already saved */                                 ;\
251
        l.sw    RESULT(r1),r0                                   ;\
252
        l.addi  r3,r1,0                                         ;\
253
        /* r4 is exception EA */                                ;\
254
        l.addi  r5,r0,vector                                    ;\
255
        l.jal   _unhandled_exception                            ;\
256
        l.nop                                                   ;\
257
        l.j     _ret_from_exception                             ;\
258
        l.nop   1
259
 
260
/*
261
 * NOTE: one should never assume that SPR_EPC, SPR_ESR, SPR_EEAR
262
 *       contain the same values as when exception we're handling
263
 *       occured. in fact they never do. if you need them use
264
 *       values saved on stack (for SPR_EPC, SPR_ESR) or content
265
 *       of r4 (for SPR_EEAR). for details look at EXCEPTION_HANDLE()
266
 *       in 'arch/or32/kernel/head.S'
267
 */
268
 
269
/* =====================================================[ exceptions] === */
270
 
271
/* ---[ 0x100: RESET exception ]----------------------------------------- */
272
 
273
EXCEPTION_ENTRY(_tng_kernel_start)
274
        l.jal   _start
275
        l.nop
276
 
277
/* ---[ 0x200: BUS exception ]------------------------------------------- */
278
 
279
UNHANDLED_EXCEPTION(_vector_0x200,0x200)
280
 
281
/* ---[ 0x300: Data Page Fault exception ]------------------------------- */
282
 
283
EXCEPTION_ENTRY(_data_page_fault_handler)
284
        /* set up parameters for do_page_fault */
285
        l.addi  r3,r1,0                    // pt_regs
286
        /* r4 set be EXCEPTION_HANDLE */   // effective address of fault
287
        l.ori   r5,r0,0x300                // exception vector
288
 
289
        /*
290
         * __PHX__: TODO
291
         *
292
         * all this can be written much simpler. look at
293
         * DTLB miss handler in the CONFIG_GUARD_PROTECTED_CORE part
294
         */
295
#ifdef CONFIG_OR32_NO_SPR_SR_DSX
296
        l.lwz   r6,PC(r3)                  // address of an offending insn
297
        l.lwz   r6,0(r6)                   // instruction that caused pf
298
 
299
        l.srli  r6,r6,26                   // check opcode for jump insn
300
        l.sfeqi r6,0                       // l.j
301
        l.bf    8f
302
        l.sfeqi r6,1                       // l.jal
303
        l.bf    8f
304
        l.sfeqi r6,3                       // l.bnf
305
        l.bf    8f
306
        l.sfeqi r6,4                       // l.bf
307
        l.bf    8f
308
        l.sfeqi r6,0x11                    // l.jr
309
        l.bf    8f
310
        l.sfeqi r6,0x12                    // l.jalr
311
        l.bf    8f
312
 
313
        l.nop
314
 
315
        l.j     9f
316
        l.nop
317
8:
318
 
319
        l.lwz   r6,PC(r3)                  // address of an offending insn
320
        l.addi  r6,r6,4
321
        l.lwz   r6,0(r6)                   // instruction that caused pf
322
        l.srli  r6,r6,26                   // get opcode
323
9:
324
 
325
#else
326
 
327
        l.mfspr r6,r0,SPR_SR               // SR
328
//      l.lwz   r6,SR(r3)                  // ESR
329
        l.andi  r6,r6,SPR_SR_DSX           // check for delay slot exception
330
        l.sfeqi r6,0x1                     // exception happened in delay slot
331
        l.bnf   7f
332
        l.lwz   r6,PC(r3)                  // address of an offending insn
333
 
334
        l.addi  r6,r6,4                    // offending insn is in delay slot
335
7:
336
        l.lwz   r6,0(r6)                   // instruction that caused pf
337
        l.srli  r6,r6,26                   // check opcode for write access
338
#endif
339
 
340
        l.sfgeui r6,0x34                   // check opcode for write access
341
        l.bnf   1f
342
        l.sfleui r6,0x37
343
        l.bnf   1f
344
        l.ori   r6,r0,0x1                  // write access
345
        l.j     2f
346
        l.nop
347
1:      l.ori   r6,r0,0x0                  // !write access
348
2:
349
 
350
        /* call fault.c handler in or32/mm/fault.c */
351
        l.jal   _do_page_fault
352
        l.nop
353
        l.j     _ret_from_exception
354
        l.nop
355
 
356
/* ---[ 0x400: Insn Page Fault exception ]------------------------------- */
357
 
358
EXCEPTION_ENTRY(_insn_page_fault_handler)
359
        /* set up parameters for do_page_fault */
360
        l.addi  r3,r1,0                    // pt_regs
361
        /* r4 set be EXCEPTION_HANDLE */   // effective address of fault
362
        l.ori   r5,r0,0x400                // exception vector
363
        l.ori   r6,r0,0x0                  // !write access
364
 
365
        /* call fault.c handler in or32/mm/fault.c */
366
        l.jal   _do_page_fault
367
        l.nop
368
        l.j     _ret_from_exception
369
        l.nop
370
 
371
 
372
/* ---[ 0x500: Timer exception ]----------------------------------------- */
373
 
374
EXCEPTION_ENTRY(_timer_handler)
375
#ifdef CONFIG_OR32_ESR_EXCEPTION_BUG_CHECK
376
 
377
        l.lwz   r4,SR(r1)               // were interrupts enabled ?
378
        l.andi  r4,r4,SPR_SR_TEE
379
        l.sfeqi r4,0
380
        l.bnf   1f                      // tick irq enabled, all ok.
381
        l.nop
382
 
383
        l.addi  r1,r1,-0x8
384
        LOAD_SYMBOL_2_GPR(r3,42f)
385
        l.sw    0x0(r1),r3
386
        l.jal   _printk
387
        l.sw    0x4(r1),r4
388
        l.addi  r1,r1,0x8
389
 
390
        .section .rodata, "a"
391
42:
392
                .string "\n\rESR interrupt bug: in _timer_handler (ESR %x)\n\r"
393
                .align 4
394
        .previous
395
 
396
        l.ori   r4,r4,SPR_SR_TEE        // fix the bug
397
//      l.sw    SR(r1),r4
398
1:
399
#endif
400
        l.addi r3,r1,0
401
        LOAD_SYMBOL_2_GPR(r8,_timer_interrupt)
402
        l.jalr r8
403
        l.nop
404
        l.j    _ret_from_intr
405
        l.nop
406
 
407
/* ---[ 0x600: Aligment exception ]-------------------------------------- */
408
 
409
#if 1
410
UNHANDLED_EXCEPTION(_vector_0x600,0x600)
411
#endif
412
 
413
#if 0
414
EXCEPTION_ENTRY(_aligment_handler)
415
//        l.mfspr r2,r0,SPR_EEAR_BASE     /* Load the efective addres */
416
        l.addi  r2,r4,0
417
//        l.mfspr r5,r0,SPR_EPCR_BASE     /* Load the insn address */
418
        l.lwz   r5,PC(r1)
419
 
420
        l.lwz   r3,0(r5)                /* Load insn */
421
        l.srli  r4,r3,26                /* Shift left to get the insn opcode */
422
 
423
        l.sfeqi r4,0x00                 /* Check if the load/store insn is in delay slot */
424
        l.bf    jmp
425
        l.sfeqi r4,0x01
426
        l.bf    jmp
427
        l.sfeqi r4,0x03
428
        l.bf    jmp
429
        l.sfeqi r4,0x04
430
        l.bf    jmp
431
        l.sfeqi r4,0x11
432
        l.bf    jr
433
        l.sfeqi r4,0x12
434
        l.bf    jr
435
        l.nop
436
        l.j     1f
437
        l.addi  r5,r5,4                 /* Increment PC to get return insn address */
438
 
439
jmp:
440
        l.slli  r4,r3,6                 /* Get the signed extended jump length */
441
        l.srai  r4,r4,4
442
 
443
        l.lwz   r3,4(r5)                /* Load the real load/store insn */
444
 
445
        l.add   r5,r5,r4                /* Calculate jump target address */
446
 
447
        l.j     1f
448
        l.srli  r4,r3,26                /* Shift left to get the insn opcode */
449
 
450
jr:
451
        l.slli  r4,r3,9                 /* Shift to get the reg nb */
452
        l.andi  r4,r4,0x7c
453
 
454
        l.lwz   r3,4(r5)                /* Load the real load/store insn */
455
 
456
        l.add   r4,r4,r1                /* Load the jump register value from the stack */
457
        l.lwz   r5,0(r4)
458
 
459
        l.srli  r4,r3,26                /* Shift left to get the insn opcode */
460
 
461
 
462
1:
463
//        l.mtspr r0,r5,SPR_EPCR_BASE
464
        l.sw    PC(r1),r5
465
 
466
        l.sfeqi r4,0x26
467
        l.bf    lhs
468
        l.sfeqi r4,0x25
469
        l.bf    lhz
470
        l.sfeqi r4,0x22
471
        l.bf    lws
472
        l.sfeqi r4,0x21
473
        l.bf    lwz
474
        l.sfeqi r4,0x37
475
        l.bf    sh
476
        l.sfeqi r4,0x35
477
        l.bf    sw
478
        l.nop
479
 
480
1:      l.j     1b                      /* I don't know what to do */
481
        l.nop
482
 
483
lhs:    l.lbs   r5,0(r2)
484
        l.slli  r5,r5,8
485
        l.lbz   r6,1(r2)
486
        l.or    r5,r5,r6
487
        l.srli  r4,r3,19
488
        l.andi  r4,r4,0x7c
489
        l.add   r4,r4,r1
490
        l.j     align_end
491
        l.sw    0(r4),r5
492
 
493
lhz:    l.lbz   r5,0(r2)
494
        l.slli  r5,r5,8
495
        l.lbz   r6,1(r2)
496
        l.or    r5,r5,r6
497
        l.srli  r4,r3,19
498
        l.andi  r4,r4,0x7c
499
        l.add   r4,r4,r1
500
        l.j     align_end
501
        l.sw    0(r4),r5
502
 
503
lws:    l.lbs   r5,0(r2)
504
        l.slli  r5,r5,24
505
        l.lbz   r6,1(r2)
506
        l.slli  r6,r6,16
507
        l.or    r5,r5,r6
508
        l.lbz   r6,2(r2)
509
        l.slli  r6,r6,8
510
        l.or    r5,r5,r6
511
        l.lbz   r6,3(r2)
512
        l.or    r5,r5,r6
513
        l.srli  r4,r3,19
514
        l.andi  r4,r4,0x7c
515
        l.add   r4,r4,r1
516
        l.j     align_end
517
        l.sw    0(r4),r5
518
 
519
lwz:    l.lbz   r5,0(r2)
520
        l.slli  r5,r5,24
521
        l.lbz   r6,1(r2)
522
        l.slli  r6,r6,16
523
        l.or    r5,r5,r6
524
        l.lbz   r6,2(r2)
525
        l.slli  r6,r6,8
526
        l.or    r5,r5,r6
527
        l.lbz   r6,3(r2)
528
        l.or    r5,r5,r6
529
        l.srli  r4,r3,19
530
        l.andi  r4,r4,0x7c
531
        l.add   r4,r4,r1
532
        l.j     align_end
533
        l.sw    0(r4),r5
534
 
535
sh:
536
        l.srli  r4,r3,9
537
        l.andi  r4,r4,0x7c
538
        l.add   r4,r4,r1
539
        l.lwz   r5,0(r4)
540
        l.sb    1(r2),r5
541
        l.srli  r5,r5,8
542
        l.j     align_end
543
        l.sb    0(r2),r5
544
 
545
sw:
546
        l.srli  r4,r3,9
547
        l.andi  r4,r4,0x7c
548
        l.add   r4,r4,r1
549
        l.lwz   r5,0(r4)
550
        l.sb    3(r2),r5
551
        l.srli  r5,r5,8
552
        l.sb    2(r2),r5
553
        l.srli  r5,r5,8
554
        l.sb    1(r2),r5
555
        l.srli  r5,r5,8
556
        l.j     align_end
557
        l.sb    0(r2),r5
558
 
559
align_end:
560
        l.j    _ret_from_intr
561
        l.nop
562
#endif
563
 
564
/* ---[ 0x700: Illegal insn exception ]---------------------------------- */
565
 
566
UNHANDLED_EXCEPTION(_vector_0x700,0x700)
567
 
568
/* ---[ 0x800: External interrupt exception ]---------------------------- */
569
 
570
EXCEPTION_ENTRY(_external_irq_handler)
571
#ifdef CONFIG_OR32_ESR_EXCEPTION_BUG_CHECK
572
        l.lwz   r4,SR(r1)               // were interrupts enabled ?
573
        l.andi  r4,r4,SPR_SR_IEE
574
        l.sfeqi r4,0
575
        l.bnf   1f                      // ext irq enabled, all ok.
576
        l.nop
577
 
578
        l.addi  r1,r1,-0x8
579
        LOAD_SYMBOL_2_GPR(r3,42f)
580
        l.sw    0x0(r1),r3
581
        l.jal   _printk
582
        l.sw    0x4(r1),r4
583
        l.addi  r1,r1,0x8
584
 
585
        .section .rodata, "a"
586
42:
587
                .string "\n\rESR interrupt bug: in _external_irq_handler (ESR %x)\n\r"
588
                .align 4
589
        .previous
590
 
591
        l.ori   r4,r4,SPR_SR_IEE        // fix the bug
592
//      l.sw    SR(r1),r4
593
1:
594
#endif
595
        l.addi r3,r1,0
596
        LOAD_SYMBOL_2_GPR(r8,_do_IRQ)
597
        l.jalr r8
598
        l.nop
599
        l.j    _ret_from_intr
600
        l.nop
601
 
602
/* ---[ 0x900: DTLB miss exception ]------------------------------------- */
603
 
604
 
605
/* ---[ 0xa00: ITLB miss exception ]------------------------------------- */
606
 
607
 
608
/* ---[ 0xb00: Range exception ]----------------------------------------- */
609
 
610
UNHANDLED_EXCEPTION(_vector_0xb00,0xb00)
611
 
612
/* ---[ 0xc00: Syscall exception ]--------------------------------------- */
613
 
614
EXCEPTION_ENTRY(_sys_call_handler)
615
        /* r3 is not tainted by EXCEPTION_HANDLE() */
616
 
617
        /* r4 holds the EEAR address of the fault, load the original r4 */
618
        l.lwz   r4,GPR4(r1)
619
 
620
        l.lwz   r30,TI_FLAGS(r10)
621
        l.andi  r30,r30,_TIF_SYSCALL_TRACE
622
        l.sfne  r30,r0
623
        l.bf    _syscall_trace_entry
624
        l.nop
625
 
626
        /* check that userspace didn't try to fool us with
627
         * syscall number greater then __NR_syscall.
628
         */
629
        l.sfgeui r11,NR_syscalls
630
        l.bf    _syscall_badsys
631
        l.nop
632
 
633
        /* WTF: no other arch has this?? */
634
        ENABLE_INTERRUPTS(r9)           // enable interrupts, r9 is temp
635
 
636
_syscall_call:
637
        l.movhi r30,hi(_sys_call_table)
638
        l.ori   r30,r30,lo(_sys_call_table)
639
        l.slli  r11,r11,2
640
        l.add   r30,r30,r11
641
        l.lwz   r30,0(r30)
642
 
643
        l.jalr  r30
644
        l.addi  r8,r1,0                 // regs pointer
645
 
646
        l.sw    GPR11(r1),r11           // save return value
647
        l.sw    RESULT(r1),r11          // save result
648
 
649
_syscall_exit:
650
        DISABLE_INTERRUPTS(r3,r4)
651
        l.lwz   r30,TI_FLAGS(r10)
652
        l.andi  r3,r30,_TIF_ALLWORK_MASK
653
        l.sfne  r3,r0
654
        l.bf    _syscall_exit_work
655
        l.nop
656
 
657
        l.j     _restore_all
658
        l.nop
659
 
660
_syscall_trace_entry:
661
        l.sw    SYSCALLNO(r1),r11
662
        l.addi  r3,r1,0
663
        l.addi  r4,r0,0
664
        l.jal   _do_syscall_trace
665
        l.nop
666
 
667
        /* Restore arguments */
668
        l.lwz   r11,SYSCALLNO(r1)
669
        l.lwz   r3,GPR3(r1)
670
        l.lwz   r4,GPR4(r1)
671
        l.lwz   r5,GPR5(r1)
672
        l.lwz   r6,GPR6(r1)
673
        l.lwz   r7,GPR7(r1)
674
        l.sfgeui r11,NR_syscalls
675
        l.bnf   _syscall_call
676
        l.nop
677
 
678
        l.addi  r30,r0,-ENOSYS
679
        l.sw    GPR11(r1),r30
680
        l.sw    RESULT(r1),r30
681
 
682
        l.j     _syscall_exit
683
        l.nop
684
 
685
_syscall_badsys:
686
        /* Just return -ENOSYS */
687
        l.addi  r30,r0,-ENOSYS
688
        l.sw    RESULT(r1),r30
689
        l.sw    GPR11(r1),r30
690
        l.j     _resume_userspace
691
        l.nop
692
 
693
_syscall_exit_work:
694
        /* r30 holds TI_flags */
695
        l.andi  r3,r30,_TIF_SYSCALL_TRACE|_TIF_SINGLESTEP
696
        l.sfne  r3,r0
697
        l.bnf   _work_pending
698
        l.nop
699
 
700
        ENABLE_INTERRUPTS(r3)
701
 
702
        l.addi  r3,r1,0
703
        l.addi  r4,r0,1
704
        l.jal   _do_syscall_trace
705
        l.nop
706
 
707
        l.j     _resume_userspace
708
        l.nop
709
 
710
 
711
/* ---[ 0xd00: Trap exception ]------------------------------------------ */
712
 
713
UNHANDLED_EXCEPTION(_vector_0xd00,0xd00)
714
 
715
/* ---[ 0xe00: Trap exception ]------------------------------------------ */
716
 
717
UNHANDLED_EXCEPTION(_vector_0xe00,0xe00)
718
 
719
/* ---[ 0xf00: Reserved exception ]-------------------------------------- */
720
 
721
UNHANDLED_EXCEPTION(_vector_0xf00,0xf00)
722
 
723
/* ---[ 0x1000: Reserved exception ]------------------------------------- */
724
 
725
UNHANDLED_EXCEPTION(_vector_0x1000,0x1000)
726
 
727
/* ---[ 0x1100: Reserved exception ]------------------------------------- */
728
 
729
UNHANDLED_EXCEPTION(_vector_0x1100,0x1100)
730
 
731
/* ---[ 0x1200: Reserved exception ]------------------------------------- */
732
 
733
UNHANDLED_EXCEPTION(_vector_0x1200,0x1200)
734
 
735
/* ---[ 0x1300: Reserved exception ]------------------------------------- */
736
 
737
UNHANDLED_EXCEPTION(_vector_0x1300,0x1300)
738
 
739
/* ---[ 0x1400: Reserved exception ]------------------------------------- */
740
 
741
UNHANDLED_EXCEPTION(_vector_0x1400,0x1400)
742
 
743
/* ---[ 0x1500: Reserved exception ]------------------------------------- */
744
 
745
UNHANDLED_EXCEPTION(_vector_0x1500,0x1500)
746
 
747
/* ---[ 0x1600: Reserved exception ]------------------------------------- */
748
 
749
UNHANDLED_EXCEPTION(_vector_0x1600,0x1600)
750
 
751
/* ---[ 0x1700: Reserved exception ]------------------------------------- */
752
 
753
UNHANDLED_EXCEPTION(_vector_0x1700,0x1700)
754
 
755
/* ---[ 0x1800: Reserved exception ]------------------------------------- */
756
 
757
UNHANDLED_EXCEPTION(_vector_0x1800,0x1800)
758
 
759
/* ---[ 0x1900: Reserved exception ]------------------------------------- */
760
 
761
UNHANDLED_EXCEPTION(_vector_0x1900,0x1900)
762
 
763
/* ---[ 0x1a00: Reserved exception ]------------------------------------- */
764
 
765
UNHANDLED_EXCEPTION(_vector_0x1a00,0x1a00)
766
 
767
/* ---[ 0x1b00: Reserved exception ]------------------------------------- */
768
 
769
UNHANDLED_EXCEPTION(_vector_0x1b00,0x1b00)
770
 
771
/* ---[ 0x1c00: Reserved exception ]------------------------------------- */
772
 
773
UNHANDLED_EXCEPTION(_vector_0x1c00,0x1c00)
774
 
775
/* ---[ 0x1d00: Reserved exception ]------------------------------------- */
776
 
777
UNHANDLED_EXCEPTION(_vector_0x1d00,0x1d00)
778
 
779
/* ---[ 0x1e00: Reserved exception ]------------------------------------- */
780
 
781
UNHANDLED_EXCEPTION(_vector_0x1e00,0x1e00)
782
 
783
/* ---[ 0x1f00: Reserved exception ]------------------------------------- */
784
 
785
UNHANDLED_EXCEPTION(_vector_0x1f00,0x1f00)
786
 
787
/* ========================================================[ return ] === */
788
 
789
_work_pending:
790
        /*
791
         * if (current_thread_info->flags & _TIF_NEED_RESCHED)
792
         *     schedule();
793
         */
794
        l.lwz   r3,TI_FLAGS(r10)
795
        l.andi  r3,r3,_TIF_NEED_RESCHED
796
        l.sfeqi r3,0
797
        l.bf    work_notifysig
798
        l.nop
799
 
800
work_resched:
801
        l.jal   _schedule
802
        l.nop
803
        DISABLE_INTERRUPTS(r3,r4)
804
 
805
        l.lwz   r3,TI_FLAGS(r10)
806
        l.andi  r30,r3,_TIF_WORK_MASK
807
        l.sfnei r30,0
808
        l.bnf   _restore_all
809
        l.nop
810
        l.andi  r30,r3,_TIF_NEED_RESCHED
811
        l.sfnei r30,0
812
        l.bf    work_resched
813
        l.nop
814
        /*
815
         * if (current_thread_info->flags & _TIF_SIGPENDING)
816
         *     do_signal(r3,r4);
817
         */
818
work_notifysig:
819
        l.lwz   r5,TI_FLAGS(r10)
820
        l.andi  r5,r5,_TIF_SIGPENDING
821
        l.sfeqi r5,0
822
        l.bf    _resume_userspace
823
        l.addi  r3,r0,1
824
        l.addi  r4,r0,0
825
        l.addi  r5,r1,0
826
        l.jal   _do_signal
827
        l.nop
828
        l.j     _resume_userspace
829
        l.nop
830
 
831
 
832
ENTRY(_ret_from_fork)
833
        l.jal   _schedule_tail
834
        l.nop
835
 
836
        l.j     _syscall_exit
837
        l.nop
838
 
839
 
840
ENTRY(_restore_all)
841
        // we need to save KSP here too
842
        // or else fork's 'eat' stack space
843
        l.addi  r4,r1,INT_FRAME_SIZE
844
        l.sw    (TI_KSP)(r10),r4
845
        RESTORE_ALL
846
 
847
ENTRY(_ret_from_intr)
848
        // i386 version:
849
        // GET_CURRENT(%ebx)
850
 
851
ENTRY(_ret_from_exception)
852
        l.lwz   r4,SR(r1)
853
        l.andi  r3,r4,SPR_SR_SM
854
        l.sfeqi r3,0
855
        l.bnf   _restore_all
856
        l.nop
857
        /*
858
         * return to usermode
859
         */
860
_resume_userspace:
861
        DISABLE_INTERRUPTS(r3,r4)
862
        l.lwz   r3,TI_FLAGS(r10)
863
        l.andi  r3,r3,_TIF_WORK_MASK
864
        l.sfeqi r3,0
865
        l.bnf   _work_pending
866
        l.nop
867
        l.j     _restore_all
868
        l.nop
869
 
870
/* ========================================================[ switch ] === */
871
 
872
/*
873
 * This routine switches between two different tasks.  The process
874
 * state of one is saved on its kernel stack.  Then the state
875
 * of the other is restored from its kernel stack.  The memory
876
 * management hardware is updated to the second process's state.
877
 * Finally, we can return to the second process, via the 'return'.
878
 *
879
 * Note: there are two ways to get to the "going out" portion
880
 * of this code; either by coming in via the entry (_switch)
881
 * or via "fork" which must set up an environment equivalent
882
 * to the "_switch" path.  If you change this (or in particular, the
883
 * SAVE_REGS macro), you'll have to change the fork code also.
884
 */
885
 
886
 
887
/* __switch MUST never lay on page boundry, cause it runs from
888
 * effective addresses and beeing interrupted by iTLB miss would kill it.
889
 * dTLB miss seams to never accour in the bad place since data accesses
890
 * are from task structures which are always page aligned.
891
 *
892
 * The problem happens in RESTORE_ALL_NO_R11 where we first set the EPCR
893
 * register, then load the previous register values and only at the end call
894
 * the l.rfe instruction. If get TLB miss in beetwen the EPCR register gets
895
 * garbled and we end up calling l.rfe with the wrong EPCR. (same probably
896
 * holds for ESR)
897
 *
898
 * To avoid this problems it is sufficient to align __switch to
899
 * some nice round number smaller than it's size...
900
 */
901
 
902
        .align 0x400
903
ENTRY(__switch)
904
        l.sw    (GPR3-INT_FRAME_SIZE)(r1),r3
905
        l.mtspr r0,r9,SPR_EPCR_BASE             /* Link register to EPCR */
906
        l.mfspr r3,r0,SPR_SR                    /* From SR to ESR */
907
        l.mtspr r0,r3,SPR_ESR_BASE
908
        l.addi  r11,r10,0                       /* Save old 'current' to 'last' return value*/
909
        l.lwz   r3,(GPR3-INT_FRAME_SIZE)(r1)
910
        PUSH_PT_REGS_NO_TRANS
911
/* DEBUGING HELP */
912
        l.or    r21,r1,r0
913
        l.or    r22,r2,r0
914
        l.or    r23,r3,r0
915
        l.or    r24,r4,r0
916
/* END DEBUGGING HELP */
917
        l.sw    TI_KSP(r3),r1                   /* Save old stack pointer */
918
        l.lwz   r1,TI_KSP(r4)                   /* Load new stack pointer */
919
        l.addi  r10,r5,0                        /* set current (r10) to new */
920
        RESTORE_ALL_NO_R11
921
 
922
/* =================================================[ syscall table ] === */
923
 
924
        .data
925
        .align 4
926
ENTRY(_sys_call_table)
927
        .long _sys_ni_syscall   /* 0  -  old "setup()" system call */
928
        .long _sys_exit
929
        .long _sys_fork
930
        .long _sys_read
931
        .long _sys_write
932
        .long _sys_open         /* 5 */
933
        .long _sys_close
934
        .long _sys_waitpid
935
        .long _sys_creat
936
        .long _sys_link
937
        .long _sys_unlink       /* 10 */
938
        .long _sys_execve
939
        .long _sys_chdir
940
        .long _sys_time
941
        .long _sys_mknod
942
        .long _sys_chmod        /* 15 */
943
        .long _sys_lchown
944
        .long _sys_ni_syscall           /* old break syscall holder */
945
        .long _sys_stat
946
        .long _sys_lseek
947
        .long _sys_getpid       /* 20 */
948
        .long _sys_mount
949
        .long _sys_oldumount
950
        .long _sys_setuid
951
        .long _sys_getuid
952
        .long _sys_stime        /* 25 */
953
        .long _sys_ptrace
954
        .long _sys_alarm
955
        .long _sys_fstat
956
        .long _sys_pause
957
        .long _sys_utime        /* 30 */
958
        .long _sys_ni_syscall           /* old stty syscall holder */
959
        .long _sys_ni_syscall           /* old gtty syscall holder */
960
        .long _sys_access
961
        .long _sys_nice
962
        .long _sys_ni_syscall   /* 35:   old ftime syscall holder */
963
        .long _sys_sync
964
        .long _sys_kill
965
        .long _sys_rename
966
        .long _sys_mkdir
967
        .long _sys_rmdir        /* 40 */
968
        .long _sys_dup
969
        .long _sys_pipe
970
        .long _sys_times
971
        .long _sys_ni_syscall   /* old prof syscall holder */
972
        .long _sys_brk          /* 45 */
973
        .long _sys_setgid
974
        .long _sys_getgid
975
        .long _sys_signal
976
        .long _sys_geteuid
977
        .long _sys_getegid      /* 50 */
978
        .long _sys_acct
979
        .long _sys_umount               /* recycled never used phys() */
980
        .long _sys_ni_syscall           /* old lock syscall holder */
981
        .long _sys_ioctl
982
        .long _sys_fcntl        /* 55 */
983
        .long _sys_ni_syscall           /* old mpx syscall holder */
984
        .long _sys_setpgid
985
        .long _sys_ni_syscall           /* old ulimit syscall holder */
986
        .long _sys_ni_syscall           /* old _sys_olduname holder */
987
        .long _sys_umask        /* 60 */
988
        .long _sys_chroot
989
        .long _sys_ustat
990
        .long _sys_dup2
991
        .long _sys_getppid
992
        .long _sys_getpgrp      /* 65 */
993
        .long _sys_setsid
994
        .long _sys_sigaction
995
        .long _sys_sgetmask
996
        .long _sys_ssetmask
997
        .long _sys_setreuid     /* 70 */
998
        .long _sys_setregid
999
        .long _sys_sigsuspend
1000
        .long _sys_sigpending
1001
        .long _sys_sethostname
1002
        .long _sys_setrlimit    /* 75 */
1003
        .long _sys_old_getrlimit
1004
        .long _sys_getrusage
1005
        .long _sys_gettimeofday
1006
        .long _sys_settimeofday
1007
        .long _sys_getgroups    /* 80 */
1008
        .long _sys_setgroups
1009
        .long _sys_select               /* was old_select */
1010
        .long _sys_symlink
1011
        .long _sys_lstat
1012
        .long _sys_readlink     /* 85 */
1013
        .long _sys_uselib
1014
        .long _sys_swapon
1015
        .long _sys_reboot
1016
        .long _old_readdir
1017
        .long _old_mmap         /* 90 */
1018
        .long _sys_munmap
1019
        .long _sys_truncate
1020
        .long _sys_ftruncate
1021
        .long _sys_fchmod
1022
        .long _sys_fchown       /* 95 */
1023
        .long _sys_getpriority
1024
        .long _sys_setpriority
1025
        .long _sys_ni_syscall                   /* old profil syscall holder */
1026
        .long _sys_statfs
1027
        .long _sys_fstatfs      /* 100 */
1028
        .long _sys_ni_syscall                   /* _sys_ioperm in i386 */
1029
        .long _sys_socketcall
1030
        .long _sys_syslog
1031
        .long _sys_setitimer
1032
        .long _sys_getitimer    /* 105 */
1033
        .long _sys_newstat
1034
        .long _sys_newlstat
1035
        .long _sys_newfstat
1036
        .long _sys_ni_syscall                   /* old _sys_uname holder */
1037
        .long _sys_ni_syscall   /* 110 */       /* _sys_iopl in i386 */
1038
        .long _sys_vhangup
1039
        .long _sys_ni_syscall   /* old 'idle' syscall */
1040
        .long _sys_ni_syscall                   /* vm86 in i386 */
1041
        .long _sys_wait4
1042
        .long _sys_swapoff      /* 115 */
1043
        .long _sys_sysinfo
1044
        .long _sys_ipc
1045
        .long _sys_fsync
1046
        .long _sys_sigreturn
1047
        .long _sys_clone        /* 120 */
1048
        .long _sys_setdomainname
1049
        .long _sys_newuname
1050
        .long _sys_ni_syscall
1051
        .long _sys_adjtimex
1052
        .long _sys_mprotect     /* 125 */
1053
        .long _sys_sigprocmask
1054
        .long _sys_ni_syscall   /* old "create_module" */
1055
        .long _sys_init_module
1056
        .long _sys_delete_module
1057
        .long _sys_ni_syscall   /* 130: old "get_kernel_syms" */
1058
        .long _sys_quotactl
1059
        .long _sys_getpgid
1060
        .long _sys_fchdir
1061
        .long _sys_bdflush
1062
        .long _sys_sysfs        /* 135 */
1063
        .long _sys_personality
1064
        .long _sys_ni_syscall   /* reserved for afs_syscall */
1065
        .long _sys_setfsuid
1066
        .long _sys_setfsgid
1067
        .long _sys_llseek       /* 140 */
1068
        .long _sys_getdents
1069
        .long _sys_select
1070
        .long _sys_flock
1071
        .long _sys_msync
1072
        .long _sys_readv        /* 145 */
1073
        .long _sys_writev
1074
        .long _sys_getsid
1075
        .long _sys_fdatasync
1076
        .long _sys_sysctl
1077
        .long _sys_mlock        /* 150 */
1078
        .long _sys_munlock
1079
        .long _sys_mlockall
1080
        .long _sys_munlockall
1081
        .long _sys_sched_setparam
1082
        .long _sys_sched_getparam       /* 155 */
1083
        .long _sys_sched_setscheduler
1084
        .long _sys_sched_getscheduler
1085
        .long _sys_sched_yield
1086
        .long _sys_sched_get_priority_max
1087
        .long _sys_sched_get_priority_min       /* 160 */
1088
        .long _sys_sched_rr_get_interval
1089
        .long _sys_nanosleep
1090
        .long _sys_mremap
1091
        .long _sys_setresuid
1092
        .long _sys_getresuid    /* 165 */
1093
        .long _sys_ni_syscall           /* old sys_query_module */
1094
        .long _sys_poll
1095
        .long _sys_nfsservctl
1096
        .long _sys_setresgid
1097
        .long _sys_getresgid    /* 170 */
1098
        .long _sys_prctl
1099
        .long _sys_rt_sigreturn
1100
        .long _sys_rt_sigaction
1101
        .long _sys_rt_sigprocmask
1102
        .long _sys_rt_sigpending        /* 175 */
1103
        .long _sys_rt_sigtimedwait
1104
        .long _sys_rt_sigqueueinfo
1105
        .long _sys_rt_sigsuspend
1106
        .long _sys_pread64
1107
        .long _sys_pwrite64     /* 180 */
1108
        .long _sys_chown
1109
        .long _sys_getcwd
1110
        .long _sys_capget
1111
        .long _sys_capset
1112
        .long _sys_sigaltstack  /* 185 */
1113
        .long _sys_sendfile
1114
        .long _sys_ni_syscall   /* streams1 */
1115
        .long _sys_ni_syscall   /* streams2 */
1116
        .long _sys_vfork
1117
        .long _sys_getrlimit    /* 190 */
1118
        .long _sys_readahead
1119
        .long _sys_mmap2
1120
        .long _sys_truncate64
1121
        .long _sys_ftruncate64
1122
        .long _sys_stat64       /* 195 */
1123
        .long _sys_lstat64
1124
        .long _sys_fstat64
1125
        .long _sys_ni_syscall   /*      _sys_pciconfig_read */
1126
        .long _sys_ni_syscall   /*      _sys_pciconfig_write */
1127
        .long _sys_ni_syscall   /* 200  _sys_pciconfig_iobase */
1128
        .long _sys_ni_syscall   /* 201  - reserved - MacOnLinux */
1129
        .long _sys_getdents64
1130
        .long _sys_pivot_root
1131
        .long _sys_fcntl64
1132
        .long _sys_madvise      /* 205 */
1133
        .long _sys_mincore
1134
        .long _sys_gettid
1135
        .long _sys_tkill
1136
        .long _sys_setxattr
1137
        .long _sys_lsetxattr    /* 210 */
1138
        .long _sys_fsetxattr
1139
        .long _sys_getxattr
1140
        .long _sys_lgetxattr
1141
        .long _sys_fgetxattr
1142
        .long _sys_listxattr    /* 215 */
1143
        .long _sys_llistxattr
1144
        .long _sys_flistxattr
1145
        .long _sys_removexattr
1146
        .long _sys_lremovexattr
1147
        .long _sys_fremovexattr /* 220  */
1148
        .long _sys_ni_syscall   /*      reserved for sys_futex */
1149
        .long _sys_ni_syscall   /*      reserved for sys_sched_setaffinity */
1150
        .long _sys_ni_syscall   /*      reserved for sys_sched_getaffinity */
1151
        .long _sys_ni_syscall   /*      reserved for sys_security */
1152
        .long _sys_ni_syscall   /* 225  reserved for Tux */
1153
        .long _sys_ni_syscall   /*      reserved for sys_sendfile64 */
1154
        .long _sys_ni_syscall   /*      reserved for sys_io_setup */
1155
        .long _sys_ni_syscall   /*      reserved for sys_io_destroy */
1156
        .long _sys_ni_syscall   /*      reserved for sys_io_getevents */
1157
        .long _sys_ni_syscall   /* 230  reserved for sys_io_submit */
1158
        .long _sys_ni_syscall   /*      reserved for sys_io_cancel */
1159
 
1160
        /*
1161
         * NOTE!! This doesn't have to be exact - we just have
1162
         * to make sure we have _enough_ of the "sys_ni_syscall"
1163
         * entries. Don't panic if you notice that this hasn't
1164
         * been shrunk every time we add a new system call.
1165
         */
1166
 
1167
        .rept NR_syscalls-(.-_sys_call_table)/4
1168
                .long _sys_ni_syscall
1169
        .endr
1170
 
1171
/* ============================================================[ EOF ]=== */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.