1/* $Id: entry.S,v 1.1.1.1.2.19 2003/11/26 21:28:28 kkojima Exp $ 2 * 3 * linux/arch/sh/entry.S 4 * 5 * Copyright (C) 1999, 2000 Niibe Yutaka 6 * 7 * Modified to support SH7300. Takashi Kusuda (Jun 2003). 8 * 9 * This file is subject to the terms and conditions of the GNU General Public 10 * License. See the file "COPYING" in the main directory of this archive 11 * for more details. 12 * 13 */ 14 15#include <linux/sys.h> 16#include <linux/linkage.h> 17#include <linux/config.h> 18 19 20! NOTE: 21! GNU as (as of 2.9.1) changes bf/s into bt/s and bra, when the address 22! to be jumped is too far, but it causes illegal slot exception. 23 24/* 25 * entry.S contains the system-call and fault low-level handling routines. 26 * This also contains the timer-interrupt handler, as well as all interrupts 27 * and faults that can result in a task-switch. 28 * 29 * NOTE: This code handles signal-recognition, which happens every time 30 * after a timer-interrupt and after each system call. 31 * 32 * NOTE: This code uses a convention that instructions in the delay slot 33 * of a transfer-control instruction are indented by an extra space, thus: 34 * 35 * jmp @k0 ! control-transfer instruction 36 * ldc k1, ssr ! delay slot 37 */ 38 39/* 40 * ABI at ret_from_syscall: 41 * r8: from_syscall (0 or 1) indicating it's from syscall or not 42 * r9: original r0 (to restart system call) 43 * 44 * Stack layout in 'ret_from_syscall': 45 * ptrace needs to have all regs on the stack. 46 * if the order here is changed, it needs to be 47 * updated in ptrace.c and ptrace.h 48 * 49 * r0 50 * ... 51 * r15 = stack pointer 52 * spc 53 * pr 54 * ssr 55 * gbr 56 * mach 57 * macl 58 * dummy 59 */ 60 61/* 62 * These are offsets into the task-struct. 63 */ 64flags = 4 65sigpending = 8 66need_resched = 20 67tsk_ptrace = 24 68 69PT_TRACESYS = 0x00000002 70 71ENOSYS = 38 72EINVAL = 22 73 74#if defined(__sh3__) 75TRA = 0xffffffd0 76EXPEVT = 0xffffffd4 77#if defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7707) || \ 78 defined(CONFIG_CPU_SUBTYPE_SH7709) 79INTEVT = 0xa4000000 ! INTEVTE2(0xa4000000) 80#else 81INTEVT = 0xffffffd8 82#endif 83MMU_TEA = 0xfffffffc ! TLB Exception Address Register 84#elif defined(__SH4__) 85TRA = 0xff000020 86EXPEVT = 0xff000024 87INTEVT = 0xff000028 88MMU_TEA = 0xff00000c ! TLB Exception Address Register 89#endif 90 91#if defined(CONFIG_KGDB_NMI) 92NMI_VEC = 0x1c0 ! Must catch early for debounce 93#endif 94 95/* Offsets to the stack */ 96OFF_R0 = 0 /* Return value. New ABI also arg4 */ 97OFF_R1 = 4 /* New ABI: arg5 */ 98OFF_R2 = 8 /* New ABI: arg6 */ 99OFF_R3 = 12 /* New ABI: syscall_nr */ 100OFF_R4 = 16 /* New ABI: arg0 */ 101OFF_R5 = 20 /* New ABI: arg1 */ 102OFF_R6 = 24 /* New ABI: arg2 */ 103OFF_R7 = 28 /* New ABI: arg3 */ 104OFF_SP = (15*4) 105OFF_PC = (16*4) 106OFF_SR = (16*4+8) 107 108#define k0 r0 109#define k1 r1 110#define k2 r2 111#define k3 r3 112#define k4 r4 113 114#define current r7 /* r7_bank1 */ 115#define g_imask r6 /* r6_bank1 */ 116#define k_current r7_bank /* r7_bank1 */ 117#define k_g_imask r6_bank /* r6_bank1 */ 118#define k_ex_code r2_bank /* r2_bank1 */ 119 120/* 121 * Kernel mode register usage: 122 * k0 scratch 123 * k1 scratch 124 * k2 scratch (Exception code) 125 * k3 scratch (Return address) 126 * k4 scratch 127 * k5 reserved 128 * k6 Global Interrupt Mask (0--15 << 4) 129 * k7 CURRENT (pointer to current task) 130 */ 131 132! 133! TLB Miss / Initial Page write exception handling 134! _and_ 135! TLB hits, but the access violate the protection. 136! It can be valid access, such as stack grow and/or C-O-W. 137! 138! 139! Find the pmd/pte entry and loadtlb 140! If it's not found, cause address error (SEGV) 141! 142! Although this could be written in assembly language (and it'd be faster), 143! this first version depends *much* on C implementation. 144! 145 146#define STI() \ 147 mov.l __INV_IMASK, r11; \ 148 stc sr, r10; \ 149 and r11, r10; \ 150 stc k_g_imask, r11; \ 151 or r11, r10; \ 152 ldc r10, sr 153 154 .align 2 155tlb_miss_load: 156 bra call_dpf 157 mov #0, r5 158 159 .align 2 160tlb_miss_store: 161 bra call_dpf 162 mov #1, r5 163 164 .align 2 165initial_page_write: 166 bra call_dpf 167 mov #1, r5 168 169 .align 2 170tlb_protection_violation_load: 171 bra call_dpf 172 mov #0, r5 173 174 .align 2 175tlb_protection_violation_store: 176 bra call_dpf 177 mov #1, r5 178 179call_dpf: 180 mov.l 1f, r0 181 mov r5, r8 182 mov.l @r0, r6 183 mov r6, r9 184 mov.l 2f, r0 185 sts pr, r10 186 jsr @r0 187 mov r15, r4 188 ! 189 tst r0, r0 190 bf/s 0f 191 lds r10, pr 192 rts 193 nop 1940: STI() 195 mov.l 3f, r0 196 mov r9, r6 197 mov r8, r5 198 jmp @r0 199 mov r15, r4 200 201 .align 2 2021: .long MMU_TEA 2032: .long SYMBOL_NAME(__do_page_fault) 2043: .long SYMBOL_NAME(do_page_fault) 205 206 .align 2 207address_error_load: 208 bra call_dae 209 mov #0,r5 ! writeaccess = 0 210 211 .align 2 212address_error_store: 213 bra call_dae 214 mov #1,r5 ! writeaccess = 1 215 216call_dae: 217 mov.l 1f, r0 218 mov.l @r0, r6 ! address 219 mov.l 2f, r0 220 jmp @r0 221 mov r15, r4 ! regs 222 223 .align 2 2241: .long MMU_TEA 2252: .long SYMBOL_NAME(do_address_error) 226 227 228#if defined(CONFIG_SH_STANDARD_BIOS) || defined(CONFIG_SH_KGDB) 229! Handle kernel debug if either kgdb (SW) or gdb-stub (FW) is present. 230! If both are configured, handle the debug traps (breakpoints) in SW, 231! but still allow BIOS traps to FW. 232 233 .align 2 234debug_kernel: 235#if defined(CONFIG_SH_STANDARD_BIOS) && defined(CONFIG_SH_KGDB) 236 /* Force BIOS call to FW (debug_trap put TRA in r8) */ 237 mov r8,r0 238 shlr2 r0 239 cmp/eq #0x3f,r0 240 bt debug_kernel_fw 241#endif /* CONFIG_SH_STANDARD_BIOS && CONFIG_SH_KGDB */ 242 243debug_enter: 244#if defined(CONFIG_SH_KGDB) 245 /* Jump to kgdb, pass stacked regs as arg */ 246debug_kernel_sw: 247 mov.l 3f, r0 248 jmp @r0 249 mov r15, r4 250 .align 2 2513: .long SYMBOL_NAME(kgdb_handle_exception) 252#endif /* CONFIG_SH_KGDB */ 253 254#if defined(CONFIG_SH_STANDARD_BIOS) 255 /* Unwind the stack and jmp to the debug entry */ 256debug_kernel_fw: 257 mov.l @r15+, r0 258 mov.l @r15+, r1 259 mov.l @r15+, r2 260 mov.l @r15+, r3 261 mov.l @r15+, r4 262 mov.l @r15+, r5 263 mov.l @r15+, r6 264 mov.l @r15+, r7 265 stc sr, r8 266 mov.l 1f, r9 ! BL =1, RB=1, IMASK=0x0F 267 or r9, r8 268 ldc r8, sr ! here, change the register bank 269 mov.l @r15+, r8 270 mov.l @r15+, r9 271 mov.l @r15+, r10 272 mov.l @r15+, r11 273 mov.l @r15+, r12 274 mov.l @r15+, r13 275 mov.l @r15+, r14 276 mov.l @r15+, k0 277 ldc.l @r15+, spc 278 lds.l @r15+, pr 279 mov.l @r15+, k1 280 ldc.l @r15+, gbr 281 lds.l @r15+, mach 282 lds.l @r15+, macl 283 mov k0, r15 284 ! 285 mov.l 2f, k0 286 mov.l @k0, k0 287 jmp @k0 288 ldc k1, ssr 289 .align 2 2901: .long 0x300000f0 2912: .long SYMBOL_NAME(gdb_vbr_vector) 292#endif /* CONFIG_SH_STANDARD_BIOS */ 293 294#endif /* CONFIG_SH_STANDARD_BIOS || CONFIG_SH_KGDB */ 295 296 297 .align 2 298debug_trap: 299#if defined(CONFIG_SH_STANDARD_BIOS) || defined(CONFIG_SH_KGDB) 300 mov #OFF_SR, r0 301 mov.l @(r0,r15), r0 ! get status register 302 shll r0 303 shll r0 ! kernel space? 304 bt/s debug_kernel 305#endif 306 mov.l @r15, r0 307 mov.l 1f, r8 308 jmp @r8 309 nop 310 311 .align 2 3121: .long SYMBOL_NAME(break_point_trap_software) 313 314 .align 2 315error: 316 ! 317 STI() 318 mov.l 1f, r0 319 jmp @r0 320 nop 321 .align 2 3221: .long SYMBOL_NAME(do_exception_error) 323 324 325! 326! 327! 328ENTRY(ret_from_fork) 329 mov.l @r15+,r0 330 ! Call schedule_tail 331 mov.l 1f, r1 332 jsr @r1 333 mov r0, r4 334 ! If we're being traced, return via syscall_ret_trace, otherwise 335 ! return directly to ret_from_syscall 336 stc k_current, r0 337 mov.l @(tsk_ptrace,r0), r0 ! Is current PTRACE_SYSCALL'd? 338 mov #PT_TRACESYS, r1 339 tst r1, r0 340 bt/s syscall_ret 341 mov #0, r0 342 bra syscall_ret_trace 343 nop 344 345 .align 2 3461: .long SYMBOL_NAME(schedule_tail) 347 348/* 349 * Old syscall interface: 350 * 351 * Syscall #: R0 352 * Arguments #0 to #3: R4--R7 353 * more arguments: On the stack 354 * TRA: (number of arguments on the stack) x 4 355 * 356 * New syscall interface: 357 * 358 * Syscall #: R3 359 * Arguments #0 to #3: R4--R7 360 * Arguments #4 to #6: R0, R1, R2 361 * TRA: (number of arguments + 0x10) x 4 362 * 363 * This code also handles delegating other traps to the BIOS/gdb stub 364 * according to: 365 * 366 * Trap number 367 * (TRA>>2) Purpose 368 * -------- ------- 369 * 0x0-0xf old syscall ABI 370 * 0x10-0x1f new syscall ABI 371 * 0x20-0xff delegated through debug_trap to BIOS/gdb stub. 372 * 373 * Note: When we're first called, the TRA value must be shifted 374 * right 2 bits in order to get the value that was used as the "trapa" 375 * argument. 376 */ 377 378system_call: 379 mov.l __TRA, r9 380 mov.l @r9, r8 381 ! 382 ! Is the trap argument >= 0x20? (TRA will be >= 0x80) 383 mov #0x7f, r9 384 cmp/hi r9, r8 385 bt debug_trap 386 ! 387 ! New Syscall ABI 388 STI() 389 ! 390 stc k_current, r11 391 mov.l @(tsk_ptrace,r11), r10 ! Is current PTRACE_SYSCALL'd? 392 mov #PT_TRACESYS, r11 393 tst r11, r10 394 bt 5f 395 ! Yes it is traced. 396 mov.l __syscall_trace, r11 ! Call syscall_trace() which notifies 397 jsr @r11 ! superior (will chomp R[0-7]) 398 nop 399 ! Reload R0-R4 from kernel stack, where the 400 ! parent may have modified them using 401 ! ptrace(POKEUSR). (Note that R0-R2 are 402 ! used by the system call handler directly 403 ! from the kernel stack anyway, so don't need 404 ! to be reloaded here.) This allows the parent 405 ! to rewrite system calls and args on the fly. 406 mov.l @(OFF_R4,r15), r4 ! arg0 407 mov.l @(OFF_R5,r15), r5 408 mov.l @(OFF_R6,r15), r6 409 mov.l @(OFF_R7,r15), r7 ! arg3 410 mov.l @(OFF_R3,r15), r3 ! syscall_nr 411 ! Arrange for syscall_trace() to be called 412 ! again as the system call returns. 413 mov.l __syscall_ret_trace, r10 414 bra 6f 415 lds r10, pr 416 ! No it isn't traced. 417 ! Arrange for normal system call return. 4185: mov.l __syscall_ret, r10 419 lds r10, pr 420 ! Call the system call handler through the table. 421 ! (both normal and ptrace'd) 422 ! First check for bad syscall number 4236: mov r3, r9 424 mov.l __n_sys, r10 425 cmp/hs r10, r9 426 bf 2f 427 ! Bad syscall number 428 rts ! go to syscall_ret or syscall_ret_trace 429 mov #-ENOSYS, r0 430 ! Good syscall number 4312: shll2 r9 ! x4 432 mov.l __sct, r11 433 add r11, r9 434 mov.l @r9, r11 435 ! Prepare args for do_signal on syscall return 436 mov #1, r8 ! indicate it's syscall return 437 mov.l @(OFF_R0,r15), r9 ! save original r0 (syscall arg4) 438 ! 439 jmp @r11 ! jump to specific syscall handler 440 nop 441 442 ! In case of trace 443syscall_ret_trace: 444 mov.l r0, @(OFF_R0,r15) ! save the return value 445 mov.l __syscall_trace, r1 446 mova SYMBOL_NAME(ret_from_syscall), r0 447 jmp @r1 ! Call syscall_trace() which notifies superior 448 lds r0, pr ! Then return to ret_from_syscall() 449 450 .align 2 451__TRA: .long TRA 452__syscall_trace: 453 .long SYMBOL_NAME(syscall_trace) 454__n_sys:.long NR_syscalls 455__sct: .long SYMBOL_NAME(sys_call_table) 456__syscall_ret_trace: 457 .long syscall_ret_trace 458__syscall_ret: 459 .long syscall_ret 460__INV_IMASK: 461 .long 0xffffff0f ! ~(IMASK) 462 463 464 .align 2 465reschedule: 466 ! gUSA handling 467 mov.l @(OFF_SP,r15), r0 ! get user space stack pointer 468 mov r0, r1 469 shll r0 470 bf/s 1f 471 shll r0 472 bf/s 1f 473 mov #OFF_PC, r0 474 ! SP >= 0xc0000000 : gUSA mark 475 mov.l @(r0,r15), r2 ! get user space PC (program counter) 476 mov.l @(OFF_R0,r15), r3 ! end point 477 cmp/hs r3, r2 ! r2 >= r3? 478 bt 1f 479 add r3, r1 ! rewind point #2 480 mov.l r1, @(r0,r15) ! reset PC to rewind point #2 481 ! 4821: mov.l 2f, r1 483 mova SYMBOL_NAME(ret_from_syscall), r0 484 jmp @r1 485 lds r0, pr 486 .align 2 4872: .long SYMBOL_NAME(schedule) 488 489ret_from_irq: 490ret_from_exception: 491 mov #OFF_SR, r0 492 mov.l @(r0,r15), r0 ! get status register 493 shll r0 494 shll r0 ! kernel space? 495 bt restore_all ! Yes, it's from kernel, go back soon 496 ! 497 bra ret_from_syscall 498 mov #0, r8 ! indicate it's *not* syscall return 499 500 .align 2 501syscall_ret: 502 mov.l r0, @(OFF_R0,r15) ! save the return value 503 /* fall through */ 504 505ENTRY(ret_from_syscall) 506 /* CLI */ 507 stc sr, r0 508 or #0xf0, r0 509 ldc r0, sr 510 ! 511 stc k_current, r1 512 mov.l @(need_resched,r1), r0 513 tst r0, r0 514 bf reschedule 515 mov.l @(sigpending,r1), r0 516 tst r0, r0 517 bt restore_all 518signal_return: 519 mov.l __do_signal, r1 520 mov r15, r4 521 mov #0, r5 522 mov r8, r6 523 mov r9, r7 524 mova restore_all, r0 525 jmp @r1 526 lds r0, pr 527 .align 2 528__do_signal: 529 .long SYMBOL_NAME(do_signal) 530__irq_stat: 531 .long SYMBOL_NAME(irq_stat) 532 533 .align 2 534restore_all: 535 mov.l @r15+, r0 536 mov.l @r15+, r1 537 mov.l @r15+, r2 538 mov.l @r15+, r3 539 mov.l @r15+, r4 540 mov.l @r15+, r5 541 mov.l @r15+, r6 542 mov.l @r15+, r7 543 ! 544 stc sr, r8 545 mov.l __blrb_flags, r9 ! BL =1, RB=1 546 or r9, r8 547 ldc r8, sr ! here, change the register bank 548 ! 549 mov.l @r15+, r8 550 mov.l @r15+, r9 551 mov.l @r15+, r10 552 mov.l @r15+, r11 553 mov.l @r15+, r12 554 mov.l @r15+, r13 555 mov.l @r15+, r14 556 mov.l @r15+, k4 ! original stack pointer 557 ldc.l @r15+, spc 558 lds.l @r15+, pr 559 mov.l @r15+, k3 ! original SR 560 ldc.l @r15+, gbr 561 lds.l @r15+, mach 562 lds.l @r15+, macl 563 564#ifdef CONFIG_SH_DSP 565 mov.l @r15+, k0 ! DSP mode marker 566 mov.l 5f, k1 567 cmp/eq k0, k1 ! Do we have a DSP stack frame? 568 bf skip_restore 569 570 stc sr, k0 ! Enable CPU DSP mode 571 or k1, k0 ! (within kernel it may be disabled) 572 ldc k0, sr 573 mov r2, k0 ! Backup r2 574 575 ! Restore DSP registers from stack 576 mov r15, r2 577 movs.l @r2+, a1 578 movs.l @r2+, a0g 579 movs.l @r2+, a1g 580 movs.l @r2+, m0 581 movs.l @r2+, m1 582 mov r2, r15 583 584 lds.l @r15+, a0 585 lds.l @r15+, x0 586 lds.l @r15+, x1 587 lds.l @r15+, y0 588 lds.l @r15+, y1 589 lds.l @r15+, dsr 590 ldc.l @r15+, rs 591 ldc.l @r15+, re 592 ldc.l @r15+, mod 593 594 mov k0, r2 ! Restore r2 595skip_restore: 596#endif 597 598 ! 599 ! 600 ! Calculate new SR value 601 mov k3, k2 ! original SR value 602 mov.l 1f, k1 603 stc sr, k0 604 and k1, k0 ! Get current FD-bit 605 mov.l 2f, k1 606 and k1, k2 ! Mask orignal SR value 607 or k0, k2 ! Inherit current FD-bit 608 ! 609 mov k3, k0 ! Calculate IMASK-bits 610 shlr2 k0 611 and #0x3c, k0 612 cmp/eq #0x3c, k0 613 bt/s 7f 614 shll2 k0 615 mov g_imask, k0 616 ! 6177: or k0, k2 ! Set the IMASK-bits 618 ldc k2, ssr 619 ! 620#if defined(CONFIG_KGDB_NMI) 621 ! Clear in_nmi 622 mov.l 4f, k0 623 mov #0, k1 624 mov.b k1, @k0 625#endif 626 mov.l @r15+, k2 ! restore EXPEVT 627 mov k4, r15 628 rte 629 nop 630 631 .align 2 632__blrb_flags: .long 0x30000000 6331: .long 0x00008000 ! FD 6342: .long 0xffff7f0f ! ~(IMASK+FD) 6353: .long 0x00080000 ! SZ=0, PR=1 636#if defined(CONFIG_KGDB_NMI) 6374: .long SYMBOL_NAME(in_nmi) 638#endif 6395: .long 0x00001000 ! DSP 640 641 642! Exception Vector Base 643! 644! Should be aligned page boundary. 645! 646 .balign 4096,0,4096 647ENTRY(vbr_base) 648 .long 0 649! 650 .balign 256,0,256 651general_exception: 652 mov.l 1f, k2 653 mov.l 2f, k3 654 bra handle_exception 655 mov.l @k2, k2 656 .align 2 6572: .long ret_from_exception 6581: .long EXPEVT 659! 660! 661 .balign 1024,0,1024 662tlb_miss: 663 mov.l 1f, k2 664 mov.l 4f, k3 665 bra handle_exception 666 mov.l @k2, k2 667! 668 .balign 512,0,512 669interrupt: 670 mov.l 2f, k2 671 mov.l 3f, k3 672#if defined(CONFIG_KGDB_NMI) 673 ! Debounce (filter nested NMI) 674 mov.l @k2, k0 675 mov.l 5f, k1 676 cmp/eq k1, k0 677 bf 0f 678 mov.l 6f, k1 679 tas.b @k1 680 bt 0f 681 rte 682 nop 683 .align 2 6845: .long NMI_VEC 6856: .long SYMBOL_NAME(in_nmi) 6860: 687#endif /* defined(CONFIG_KGDB_NMI) */ 688 bra handle_exception 689 mov.l @k2, k2 690 691 .align 2 6921: .long EXPEVT 6932: .long INTEVT 6943: .long ret_from_irq 6954: .long ret_from_exception 696 697! 698! 699handle_exception: 700 ! Using k0, k1 for scratch registers (r0_bank1, r1_bank), 701 ! save all registers onto stack. 702 ! 703 stc ssr, k0 ! Is it from kernel space? 704 shll k0 ! Check MD bit (bit30) by shifting it into... 705 shll k0 ! ...the T bit 706 bt/s 9f ! It's a kernel to kernel transition. 707 mov r15, k0 ! save original stack to k0 708 /* User space to kernel */ 709 mov #0x20, k1 710 shll8 k1 ! k1 <= 8192 == THREAD_SIZE 711 add current, k1 712 mov k1, r15 ! change to kernel stack 713 ! 7149: mov.l 3f, k1 715 ! 716#ifdef CONFIG_SH_DSP 717 mov.l r2, @-r15 ! Save r2, we need another reg 718 stc sr, k4 719 mov.l 4f, r2 720 tst r2, k4 ! Check if in DSP mode 721 mov.l @r15+, r2 ! Restore r2 now 722 bt/s skip_save 723 mov #0, k4 ! Set marker for no stack frame 724 725 mov r2, k4 ! Backup r2 (in k4) for later 726 727 ! Save DSP registers on stack 728 stc.l mod, @-r15 729 stc.l re, @-r15 730 stc.l rs, @-r15 731 sts.l dsr, @-r15 732 sts.l y1, @-r15 733 sts.l y0, @-r15 734 sts.l x1, @-r15 735 sts.l x0, @-r15 736 sts.l a0, @-r15 737 mov r15, r2 738 movs.l a1, @-r2 739 movs.l a0g, @-r2 740 movs.l a1g, @-r2 741 movs.l m0, @-r2 742 movs.l m1, @-r2 743 mov r2, r15 744 745 mov k4, r2 ! Restore r2 746 mov.l 4f, k4 ! Force DSP stack frame 747skip_save: 748 mov.l k4, @-r15 ! Push DSP mode marker onto stack 749#endif 750 751 ! Save the user registers on the stack. 752 mov.l k2, @-r15 ! EXPEVT 753 ! 754 sts.l macl, @-r15 755 sts.l mach, @-r15 756 stc.l gbr, @-r15 757 stc.l ssr, @-r15 758 sts.l pr, @-r15 759 stc.l spc, @-r15 760 ! 761 lds k3, pr ! Set the return address to pr 762 ! 763 mov.l k0, @-r15 ! save orignal stack 764 mov.l r14, @-r15 765 mov.l r13, @-r15 766 mov.l r12, @-r15 767 mov.l r11, @-r15 768 mov.l r10, @-r15 769 mov.l r9, @-r15 770 mov.l r8, @-r15 771 ! 772 stc sr, r8 ! Back to normal register bank, and 773 or k1, r8 ! Block all interrupts 774 mov.l 5f, k1 775 and k1, r8 ! ... 776 ldc r8, sr ! ...changed here. 777 ! 778 mov.l r7, @-r15 779 mov.l r6, @-r15 780 mov.l r5, @-r15 781 mov.l r4, @-r15 782 mov.l r3, @-r15 783 mov.l r2, @-r15 784 mov.l r1, @-r15 785 mov.l r0, @-r15 786 ! Then, dispatch to the handler, according to the exception code. 787 stc k_ex_code, r8 788 shlr2 r8 789 shlr r8 790 mov.l 1f, r9 791 add r8, r9 792 mov.l @r9, r9 793 jmp @r9 794 nop 795 .align 2 7961: .long SYMBOL_NAME(exception_handling_table) 7973: .long 0x000000f0 ! FD=0, IMASK=15 7984: .long 0x00001000 ! DSP bit set 7995: .long 0xcfffffff ! RB=0, BL=0 8006: .long 0x00080000 ! SZ=0, PR=1 801 802none: 803 rts 804 nop 805 806.data 807ENTRY(exception_handling_table) 808 .long error 809 .long error 810 .long tlb_miss_load 811 .long tlb_miss_store 812 .long initial_page_write 813 .long tlb_protection_violation_load 814 .long tlb_protection_violation_store 815 .long address_error_load 816 .long address_error_store 817#if defined(__SH4__) 818 .long SYMBOL_NAME(do_fpu_error) 819#else 820 .long error ! fpu_exception 821#endif 822 .long error 823 .long system_call ! Unconditional Trap 824 .long error ! reserved_instruction (filled by trap_init) 825 .long error ! illegal_slot_instruction (filled by trap_init) 826ENTRY(nmi_slot) 827#if defined (CONFIG_KGDB_NMI) 828 .long debug_enter ! Allow trap to debugger 829#else 830 .long none ! Not implemented yet 831#endif 832ENTRY(user_break_point_trap) 833 .long break_point_trap 834ENTRY(interrupt_table) 835 ! external hardware 836 .long SYMBOL_NAME(do_IRQ) ! 0000 837 .long SYMBOL_NAME(do_IRQ) ! 0001 838 .long SYMBOL_NAME(do_IRQ) ! 0010 839 .long SYMBOL_NAME(do_IRQ) ! 0011 840 .long SYMBOL_NAME(do_IRQ) ! 0100 841 .long SYMBOL_NAME(do_IRQ) ! 0101 842 .long SYMBOL_NAME(do_IRQ) ! 0110 843 .long SYMBOL_NAME(do_IRQ) ! 0111 844 .long SYMBOL_NAME(do_IRQ) ! 1000 845 .long SYMBOL_NAME(do_IRQ) ! 1001 846 .long SYMBOL_NAME(do_IRQ) ! 1010 847 .long SYMBOL_NAME(do_IRQ) ! 1011 848 .long SYMBOL_NAME(do_IRQ) ! 1100 849 .long SYMBOL_NAME(do_IRQ) ! 1101 850 .long SYMBOL_NAME(do_IRQ) ! 1110 851 .long error 852 ! Internal hardware 853 .long SYMBOL_NAME(do_IRQ) ! TMU0 tuni0 854 .long SYMBOL_NAME(do_IRQ) ! TMU1 tuni1 855 .long SYMBOL_NAME(do_IRQ) ! TMU2 tuni2 856 .long SYMBOL_NAME(do_IRQ) ! ticpi2 857 .long SYMBOL_NAME(do_IRQ) ! RTC ati 858 .long SYMBOL_NAME(do_IRQ) ! pri 859 .long SYMBOL_NAME(do_IRQ) ! cui 860 .long SYMBOL_NAME(do_IRQ) ! SCI eri 861 .long SYMBOL_NAME(do_IRQ) ! rxi 862 .long SYMBOL_NAME(do_IRQ) ! txi 863 .long SYMBOL_NAME(do_IRQ) ! tei 864 .long SYMBOL_NAME(do_IRQ) ! WDT iti 865 .long SYMBOL_NAME(do_IRQ) ! REF rcmi 866 .long SYMBOL_NAME(do_IRQ) ! rovi 867 .long SYMBOL_NAME(do_IRQ) 868 .long SYMBOL_NAME(do_IRQ) 869#if defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7707) || \ 870 defined(CONFIG_CPU_SUBTYPE_SH7709) 871 .long SYMBOL_NAME(do_IRQ) ! 32 IRQ irq0 872 .long SYMBOL_NAME(do_IRQ) ! 33 irq1 873 .long SYMBOL_NAME(do_IRQ) ! 34 irq2 874 .long SYMBOL_NAME(do_IRQ) ! 35 irq3 875 .long SYMBOL_NAME(do_IRQ) ! 36 irq4 876 .long SYMBOL_NAME(do_IRQ) ! 37 irq5 877 .long SYMBOL_NAME(do_IRQ) ! 38 878 .long SYMBOL_NAME(do_IRQ) ! 39 879 .long SYMBOL_NAME(do_IRQ) ! 40 PINT pint0-7 880 .long SYMBOL_NAME(do_IRQ) ! 41 pint8-15 881 .long SYMBOL_NAME(do_IRQ) ! 42 882 .long SYMBOL_NAME(do_IRQ) ! 43 883 .long SYMBOL_NAME(do_IRQ) ! 44 884 .long SYMBOL_NAME(do_IRQ) ! 45 885 .long SYMBOL_NAME(do_IRQ) ! 46 886 .long SYMBOL_NAME(do_IRQ) ! 47 887 .long SYMBOL_NAME(do_IRQ) ! 48 DMAC dei0 888 .long SYMBOL_NAME(do_IRQ) ! 49 dei1 889 .long SYMBOL_NAME(do_IRQ) ! 50 dei2 890 .long SYMBOL_NAME(do_IRQ) ! 51 dei3 891 .long SYMBOL_NAME(do_IRQ) ! 52 IrDA eri1 892 .long SYMBOL_NAME(do_IRQ) ! 53 rxi1 893 .long SYMBOL_NAME(do_IRQ) ! 54 bri1 894 .long SYMBOL_NAME(do_IRQ) ! 55 txi1 895 .long SYMBOL_NAME(do_IRQ) ! 56 SCIF eri2 896 .long SYMBOL_NAME(do_IRQ) ! 57 rxi2 897 .long SYMBOL_NAME(do_IRQ) ! 58 bri2 898 .long SYMBOL_NAME(do_IRQ) ! 59 txi2 899 .long SYMBOL_NAME(do_IRQ) ! 60 ADC adi 900#if defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7707) 901 .long SYMBOL_NAME(do_IRQ) ! 61 LCDC lcdi 902 .long SYMBOL_NAME(do_IRQ) ! 62 PCC pcc0i 903 .long SYMBOL_NAME(do_IRQ) ! 63 pcc1i 904#if defined(CONFIG_CPU_SUBTYPE_SH7300) 905 .long SYMBOL_NAME(do_IRQ) ! 64 906 .long SYMBOL_NAME(do_IRQ) ! 65 907 .long SYMBOL_NAME(do_IRQ) ! 66 908 .long SYMBOL_NAME(do_IRQ) ! 67 909 .long SYMBOL_NAME(do_IRQ) ! 68 910 .long SYMBOL_NAME(do_IRQ) ! 69 911 .long SYMBOL_NAME(do_IRQ) ! 70 912 .long SYMBOL_NAME(do_IRQ) ! 71 913 .long SYMBOL_NAME(do_IRQ) ! 72 914 .long SYMBOL_NAME(do_IRQ) ! 73 915 .long SYMBOL_NAME(do_IRQ) ! 74 916 .long SYMBOL_NAME(do_IRQ) ! 75 917 .long SYMBOL_NAME(do_IRQ) ! 76 918 .long SYMBOL_NAME(do_IRQ) ! 77 919 .long SYMBOL_NAME(do_IRQ) ! 78 920 .long SYMBOL_NAME(do_IRQ) ! 79 921 .long SYMBOL_NAME(do_IRQ) ! 80 SCIF0(SH7300) 922 .long SYMBOL_NAME(do_IRQ) ! 81 923 .long SYMBOL_NAME(do_IRQ) ! 82 924 .long SYMBOL_NAME(do_IRQ) ! 83 925 .long SYMBOL_NAME(do_IRQ) ! 84 926 .long SYMBOL_NAME(do_IRQ) ! 85 927 .long SYMBOL_NAME(do_IRQ) ! 86 928 .long SYMBOL_NAME(do_IRQ) ! 87 929 .long SYMBOL_NAME(do_IRQ) ! 88 930 .long SYMBOL_NAME(do_IRQ) ! 89 931 .long SYMBOL_NAME(do_IRQ) ! 90 932 .long SYMBOL_NAME(do_IRQ) ! 91 933 .long SYMBOL_NAME(do_IRQ) ! 92 934 .long SYMBOL_NAME(do_IRQ) ! 93 935 .long SYMBOL_NAME(do_IRQ) ! 94 936 .long SYMBOL_NAME(do_IRQ) ! 95 937 .long SYMBOL_NAME(do_IRQ) ! 96 938 .long SYMBOL_NAME(do_IRQ) ! 97 939 .long SYMBOL_NAME(do_IRQ) ! 98 940 .long SYMBOL_NAME(do_IRQ) ! 99 941 .long SYMBOL_NAME(do_IRQ) ! 100 942 .long SYMBOL_NAME(do_IRQ) ! 101 943 .long SYMBOL_NAME(do_IRQ) ! 102 944 .long SYMBOL_NAME(do_IRQ) ! 103 945 .long SYMBOL_NAME(do_IRQ) ! 104 946 .long SYMBOL_NAME(do_IRQ) ! 105 947 .long SYMBOL_NAME(do_IRQ) ! 106 948 .long SYMBOL_NAME(do_IRQ) ! 107 949 .long SYMBOL_NAME(do_IRQ) ! 108 950#endif 951#endif 952#elif defined(__SH4__) 953 .long SYMBOL_NAME(do_IRQ) ! 32 Hitachi UDI 954 .long SYMBOL_NAME(do_IRQ) ! 33 GPIO 955 .long SYMBOL_NAME(do_IRQ) ! 34 DMAC dmte0 956 .long SYMBOL_NAME(do_IRQ) ! 35 dmte1 957 .long SYMBOL_NAME(do_IRQ) ! 36 dmte2 958 .long SYMBOL_NAME(do_IRQ) ! 37 dmte3 959 .long SYMBOL_NAME(do_IRQ) ! 38 dmae 960 .long error ! 39 961 .long SYMBOL_NAME(do_IRQ) ! 40 SCIF eri 962 .long SYMBOL_NAME(do_IRQ) ! 41 rxi 963 .long SYMBOL_NAME(do_IRQ) ! 42 bri 964 .long SYMBOL_NAME(do_IRQ) ! 43 txi 965 .long error ! 44 966 .long error ! 45 967 .long error ! 46 968 .long error ! 47 969 .long SYMBOL_NAME(do_fpu_state_restore) ! 48 970 .long SYMBOL_NAME(do_fpu_state_restore) ! 49 971#endif 972#if defined(CONFIG_CPU_SUBTYPE_SH7751) 973 .long error 974 .long error 975 .long error 976 .long error 977 .long error 978 .long error 979 .long error 980 .long error 981 .long error 982 .long error 983 .long error 984 .long error 985 .long error 986 .long error 987 .long SYMBOL_NAME(do_IRQ) ! PCI serr 988 .long SYMBOL_NAME(do_IRQ) ! dma3 989 .long SYMBOL_NAME(do_IRQ) ! dma2 990 .long SYMBOL_NAME(do_IRQ) ! dma1 991 .long SYMBOL_NAME(do_IRQ) ! dma0 992 .long SYMBOL_NAME(do_IRQ) ! pwon 993 .long SYMBOL_NAME(do_IRQ) ! pwdwn 994 .long SYMBOL_NAME(do_IRQ) ! err 995#elif defined(CONFIG_CPU_SUBTYPE_ST40) 996 .long error ! 50 0x840 997 .long error ! 51 0x860 998 .long error ! 52 0x880 999 .long error ! 53 0x8a0 1000 .long error ! 54 0x8c0 1001 .long error ! 55 0x8e0 1002 .long error ! 56 0x900 1003 .long error ! 57 0x920 1004 .long error ! 58 0x940 1005 .long error ! 59 0x960 1006 .long error ! 60 0x980 1007 .long error ! 61 0x9a0 1008 .long error ! 62 0x9c0 1009 .long error ! 63 0x9e0 1010 .long SYMBOL_NAME(do_IRQ) ! 64 0xa00 PCI serr 1011 .long SYMBOL_NAME(do_IRQ) ! 65 0xa20 err 1012 .long SYMBOL_NAME(do_IRQ) ! 66 0xa40 ad 1013 .long SYMBOL_NAME(do_IRQ) ! 67 0xa60 pwr_dwn 1014 .long error ! 68 0xa80 1015 .long error ! 69 0xaa0 1016 .long error ! 70 0xac0 1017 .long error ! 71 0xae0 1018 .long SYMBOL_NAME(do_IRQ) ! 72 0xb00 DMA INT0 1019 .long SYMBOL_NAME(do_IRQ) ! 73 0xb20 INT1 1020 .long SYMBOL_NAME(do_IRQ) ! 74 0xb40 INT2 1021 .long SYMBOL_NAME(do_IRQ) ! 75 0xb60 INT3 1022 .long SYMBOL_NAME(do_IRQ) ! 76 0xb80 INT4 1023 .long error ! 77 0xba0 1024 .long SYMBOL_NAME(do_IRQ) ! 78 0xbc0 DMA ERR 1025 .long error ! 79 0xbe0 1026 .long SYMBOL_NAME(do_IRQ) ! 80 0xc00 PIO0 1027 .long error ! 81 0xc20 1028 .long error ! 82 0xc40 1029 .long error ! 83 0xc60 1030 .long SYMBOL_NAME(do_IRQ) ! 84 0xc80 PIO1 1031 .long error ! 85 0xca0 1032 .long error ! 86 0xcc0 1033 .long error ! 87 0xce0 1034 .long SYMBOL_NAME(do_IRQ) ! 88 0xd00 PIO2 1035 .long error ! 89 0xd20 1036 .long error ! 90 0xd40 1037 .long error ! 91 0xd60 1038 .long error ! 92 0xd80 1039 .long error ! 93 0xda0 1040 .long error ! 94 0xdc0 1041 .long error ! 95 0xde0 1042 .long error ! 96 0xe00 1043 .long error ! 97 0xe20 1044 .long error ! 98 0xe40 1045 .long error ! 99 0xe60 1046 .long error ! 100 0xe80 1047 .long error ! 101 0xea0 1048 .long error ! 102 0xec0 1049 .long error ! 103 0xee0 1050 .long error ! 104 0xf00 1051 .long error ! 105 0xf20 1052 .long error ! 106 0xf40 1053 .long error ! 107 0xf60 1054 .long error ! 108 0xf80 1055 .long error ! 109 0xfa0 1056 .long error ! 110 0xfc0 1057 .long error ! 111 0xfe0 1058# if defined(CONFIG_CPU_SUBTYPE_ST40STB1) 1059 .long SYMBOL_NAME(do_IRQ) ! 112 0x1000 Mailbox 1060 .long error ! 113 0x1020 1061 .long error ! 114 0x1040 1062 .long error ! 115 0x1060 1063 .long error ! 116 0x1080 1064 .long error ! 117 0x10a0 1065 .long error ! 118 0x10c0 1066 .long error ! 119 0x10e0 1067 .long error ! 120 0x1100 1068 .long error ! 121 0x1120 1069 .long error ! 122 0x1140 1070 .long error ! 123 0x1160 1071 .long error ! 124 0x1180 1072 .long error ! 125 0x11a0 1073 .long error ! 126 0x11c0 1074 .long error ! 127 0x11e0 1075 .long error ! 128 0x1200 1076 .long error ! 129 0x1220 1077 .long error ! 130 0x1240 1078 .long error ! 131 0x1260 1079 .long error ! 132 0x1280 1080 .long error ! 133 0x12a0 1081 .long error ! 134 0x12c0 1082 .long error ! 135 0x12e0 1083 .long error ! 136 0x1300 1084 .long error ! 137 0x1320 1085 .long error ! 138 0x1340 1086 .long error ! 139 0x1360 1087 .long SYMBOL_NAME(do_IRQ) ! 140 0x1380 EMPI INV_ADDR 1088 .long error ! 141 0x13a0 1089 .long error ! 142 0x13c0 1090 .long error ! 143 0x13e0 1091# elif defined(CONFIG_CPU_SUBTYPE_ST40GX1) 1092 .long SYMBOL_NAME(do_IRQ) ! 112 0x1000 Mailbox 1093 .long error ! 113 0x1020 1094 .long error ! 114 0x1040 1095 .long error ! 115 0x1060 1096 .long SYMBOL_NAME(do_IRQ) ! 116 0x1080 SSC0 1097 .long error ! 117 0x10a0 1098 .long error ! 118 0x10c0 1099 .long error ! 119 0x10e0 1100 .long SYMBOL_NAME(do_IRQ) ! 120 0x1100 IRBlaster IRB 1101 .long error ! 121 0x1120 1102 .long error ! 122 0x1140 1103 .long error ! 123 0x1160 1104 .long SYMBOL_NAME(do_IRQ) ! 124 0x1180 USB host 1105 .long error ! 125 0x11a0 1106 .long error ! 126 0x11c0 1107 .long error ! 127 0x11e0 1108 .long SYMBOL_NAME(do_IRQ) ! 128 0x1200 Video Processor BLITER 1109 .long error ! 129 0x1220 1110 .long error ! 130 0x1240 1111 .long error ! 131 0x1260 1112 .long SYMBOL_NAME(do_IRQ) ! 132 0x1280 UART0 UART0 1113 .long error ! 133 0x12a0 1114 .long SYMBOL_NAME(do_IRQ) ! 134 0x12c0 UART2 1115 .long error ! 135 0x12e0 1116 .long SYMBOL_NAME(do_IRQ) ! 136 0x1300 Additional PIO IO_PIO0 1117 .long error ! 137 0x1320 1118 .long error ! 138 0x1340 1119 .long error ! 139 0x1360 1120 .long SYMBOL_NAME(do_IRQ) ! 140 0x1380 EMPI INV_ADDR 1121 .long error ! 141 0x13a0 1122 .long error ! 142 0x13c0 1123 .long error ! 143 0x13e0 1124 .long SYMBOL_NAME(do_IRQ) ! 144 0x1400 MAFE 1125 .long error ! 145 0x1420 1126 .long error ! 146 0x1440 1127 .long error ! 147 0x1460 1128 .long SYMBOL_NAME(do_IRQ) ! 148 0x1480 PWM 1129 .long error ! 149 0x14a0 1130 .long error ! 150 0x14c0 1131 .long error ! 151 0x14e0 1132 .long SYMBOL_NAME(do_IRQ) ! 152 0x1500 SSC1 1133 .long error ! 153 0x1520 1134 .long error ! 154 0x1540 1135 .long error ! 155 0x1560 1136 .long SYMBOL_NAME(do_IRQ) ! 156 0x1580 Additional PIO IO_PIO1 1137 .long error ! 157 0x15a0 1138 .long error ! 158 0x15c0 1139 .long error ! 159 0x15e0 1140 .long SYMBOL_NAME(do_IRQ) ! 160 0x1600 USB target 1141 .long error ! 161 0x1620 1142 .long error ! 162 0x1640 1143 .long error ! 163 0x1660 1144 .long SYMBOL_NAME(do_IRQ) ! 164 0x1680 UART1 UART1 1145 .long error ! 165 0x16a0 1146 .long error ! 166 0x16c0 1147 .long error ! 167 0x16e0 1148 .long SYMBOL_NAME(do_IRQ) ! 168 0x1700 Teletext TTXT 1149 .long error ! 169 0x1720 1150 .long error ! 170 0x1740 1151 .long error ! 171 0x1760 1152 .long SYMBOL_NAME(do_IRQ) ! 172 0x1780 Video Sync VTG 1153 .long SYMBOL_NAME(do_IRQ) ! 173 0x17a0 DVP0 1154 .long SYMBOL_NAME(do_IRQ) ! 174 0x17c0 DVP1 1155 .long error ! 175 0x17e0 1156# else 1157# error Unknown ST40 type 1158# endif 1159#endif 1160 1161ENTRY(sys_call_table) 1162 .long SYMBOL_NAME(sys_ni_syscall) /* 0 - old "setup()" system call*/ 1163 .long SYMBOL_NAME(sys_exit) 1164 .long SYMBOL_NAME(sys_fork) 1165 .long SYMBOL_NAME(sys_read) 1166 .long SYMBOL_NAME(sys_write) 1167 .long SYMBOL_NAME(sys_open) /* 5 */ 1168 .long SYMBOL_NAME(sys_close) 1169 .long SYMBOL_NAME(sys_waitpid) 1170 .long SYMBOL_NAME(sys_creat) 1171 .long SYMBOL_NAME(sys_link) 1172 .long SYMBOL_NAME(sys_unlink) /* 10 */ 1173 .long SYMBOL_NAME(sys_execve) 1174 .long SYMBOL_NAME(sys_chdir) 1175 .long SYMBOL_NAME(sys_time) 1176 .long SYMBOL_NAME(sys_mknod) 1177 .long SYMBOL_NAME(sys_chmod) /* 15 */ 1178 .long SYMBOL_NAME(sys_lchown16) 1179 .long SYMBOL_NAME(sys_ni_syscall) /* old break syscall holder */ 1180 .long SYMBOL_NAME(sys_stat) 1181 .long SYMBOL_NAME(sys_lseek) 1182 .long SYMBOL_NAME(sys_getpid) /* 20 */ 1183 .long SYMBOL_NAME(sys_mount) 1184 .long SYMBOL_NAME(sys_oldumount) 1185 .long SYMBOL_NAME(sys_setuid16) 1186 .long SYMBOL_NAME(sys_getuid16) 1187 .long SYMBOL_NAME(sys_stime) /* 25 */ 1188 .long SYMBOL_NAME(sys_ptrace) 1189 .long SYMBOL_NAME(sys_alarm) 1190 .long SYMBOL_NAME(sys_fstat) 1191 .long SYMBOL_NAME(sys_pause) 1192 .long SYMBOL_NAME(sys_utime) /* 30 */ 1193 .long SYMBOL_NAME(sys_ni_syscall) /* old stty syscall holder */ 1194 .long SYMBOL_NAME(sys_ni_syscall) /* old gtty syscall holder */ 1195 .long SYMBOL_NAME(sys_access) 1196 .long SYMBOL_NAME(sys_nice) 1197 .long SYMBOL_NAME(sys_ni_syscall) /* 35 */ /* old ftime syscall holder */ 1198 .long SYMBOL_NAME(sys_sync) 1199 .long SYMBOL_NAME(sys_kill) 1200 .long SYMBOL_NAME(sys_rename) 1201 .long SYMBOL_NAME(sys_mkdir) 1202 .long SYMBOL_NAME(sys_rmdir) /* 40 */ 1203 .long SYMBOL_NAME(sys_dup) 1204 .long SYMBOL_NAME(sys_pipe) 1205 .long SYMBOL_NAME(sys_times) 1206 .long SYMBOL_NAME(sys_ni_syscall) /* old prof syscall holder */ 1207 .long SYMBOL_NAME(sys_brk) /* 45 */ 1208 .long SYMBOL_NAME(sys_setgid16) 1209 .long SYMBOL_NAME(sys_getgid16) 1210 .long SYMBOL_NAME(sys_signal) 1211 .long SYMBOL_NAME(sys_geteuid16) 1212 .long SYMBOL_NAME(sys_getegid16) /* 50 */ 1213 .long SYMBOL_NAME(sys_acct) 1214 .long SYMBOL_NAME(sys_umount) /* recycled never used phys() */ 1215 .long SYMBOL_NAME(sys_ni_syscall) /* old lock syscall holder */ 1216 .long SYMBOL_NAME(sys_ioctl) 1217 .long SYMBOL_NAME(sys_fcntl) /* 55 */ 1218 .long SYMBOL_NAME(sys_ni_syscall) /* old mpx syscall holder */ 1219 .long SYMBOL_NAME(sys_setpgid) 1220 .long SYMBOL_NAME(sys_ni_syscall) /* old ulimit syscall holder */ 1221 .long SYMBOL_NAME(sys_ni_syscall) /* sys_olduname */ 1222 .long SYMBOL_NAME(sys_umask) /* 60 */ 1223 .long SYMBOL_NAME(sys_chroot) 1224 .long SYMBOL_NAME(sys_ustat) 1225 .long SYMBOL_NAME(sys_dup2) 1226 .long SYMBOL_NAME(sys_getppid) 1227 .long SYMBOL_NAME(sys_getpgrp) /* 65 */ 1228 .long SYMBOL_NAME(sys_setsid) 1229 .long SYMBOL_NAME(sys_sigaction) 1230 .long SYMBOL_NAME(sys_sgetmask) 1231 .long SYMBOL_NAME(sys_ssetmask) 1232 .long SYMBOL_NAME(sys_setreuid16) /* 70 */ 1233 .long SYMBOL_NAME(sys_setregid16) 1234 .long SYMBOL_NAME(sys_sigsuspend) 1235 .long SYMBOL_NAME(sys_sigpending) 1236 .long SYMBOL_NAME(sys_sethostname) 1237 .long SYMBOL_NAME(sys_setrlimit) /* 75 */ 1238 .long SYMBOL_NAME(sys_old_getrlimit) 1239 .long SYMBOL_NAME(sys_getrusage) 1240 .long SYMBOL_NAME(sys_gettimeofday) 1241 .long SYMBOL_NAME(sys_settimeofday) 1242 .long SYMBOL_NAME(sys_getgroups16) /* 80 */ 1243 .long SYMBOL_NAME(sys_setgroups16) 1244 .long SYMBOL_NAME(sys_ni_syscall) /* sys_oldselect */ 1245 .long SYMBOL_NAME(sys_symlink) 1246 .long SYMBOL_NAME(sys_lstat) 1247 .long SYMBOL_NAME(sys_readlink) /* 85 */ 1248 .long SYMBOL_NAME(sys_uselib) 1249 .long SYMBOL_NAME(sys_swapon) 1250 .long SYMBOL_NAME(sys_reboot) 1251 .long SYMBOL_NAME(old_readdir) 1252 .long SYMBOL_NAME(old_mmap) /* 90 */ 1253 .long SYMBOL_NAME(sys_munmap) 1254 .long SYMBOL_NAME(sys_truncate) 1255 .long SYMBOL_NAME(sys_ftruncate) 1256 .long SYMBOL_NAME(sys_fchmod) 1257 .long SYMBOL_NAME(sys_fchown16) /* 95 */ 1258 .long SYMBOL_NAME(sys_getpriority) 1259 .long SYMBOL_NAME(sys_setpriority) 1260 .long SYMBOL_NAME(sys_ni_syscall) /* old profil syscall holder */ 1261 .long SYMBOL_NAME(sys_statfs) 1262 .long SYMBOL_NAME(sys_fstatfs) /* 100 */ 1263 .long SYMBOL_NAME(sys_ni_syscall) /* ioperm */ 1264 .long SYMBOL_NAME(sys_socketcall) 1265 .long SYMBOL_NAME(sys_syslog) 1266 .long SYMBOL_NAME(sys_setitimer) 1267 .long SYMBOL_NAME(sys_getitimer) /* 105 */ 1268 .long SYMBOL_NAME(sys_newstat) 1269 .long SYMBOL_NAME(sys_newlstat) 1270 .long SYMBOL_NAME(sys_newfstat) 1271 .long SYMBOL_NAME(sys_ni_syscall) /* old uname */ 1272 .long SYMBOL_NAME(sys_ni_syscall) /* 110 */ /* iopl */ 1273 .long SYMBOL_NAME(sys_vhangup) 1274 .long SYMBOL_NAME(sys_ni_syscall) /* idle */ 1275 .long SYMBOL_NAME(sys_ni_syscall) /* vm86old */ 1276 .long SYMBOL_NAME(sys_wait4) 1277 .long SYMBOL_NAME(sys_swapoff) /* 115 */ 1278 .long SYMBOL_NAME(sys_sysinfo) 1279 .long SYMBOL_NAME(sys_ipc) 1280 .long SYMBOL_NAME(sys_fsync) 1281 .long SYMBOL_NAME(sys_sigreturn) 1282 .long SYMBOL_NAME(sys_clone) /* 120 */ 1283 .long SYMBOL_NAME(sys_setdomainname) 1284 .long SYMBOL_NAME(sys_newuname) 1285 .long SYMBOL_NAME(sys_cacheflush) /* sys_modify_ldt for i386 */ 1286 .long SYMBOL_NAME(sys_adjtimex) 1287 .long SYMBOL_NAME(sys_mprotect) /* 125 */ 1288 .long SYMBOL_NAME(sys_sigprocmask) 1289 .long SYMBOL_NAME(sys_create_module) 1290 .long SYMBOL_NAME(sys_init_module) 1291 .long SYMBOL_NAME(sys_delete_module) 1292 .long SYMBOL_NAME(sys_get_kernel_syms) /* 130 */ 1293 .long SYMBOL_NAME(sys_quotactl) 1294 .long SYMBOL_NAME(sys_getpgid) 1295 .long SYMBOL_NAME(sys_fchdir) 1296 .long SYMBOL_NAME(sys_bdflush) 1297 .long SYMBOL_NAME(sys_sysfs) /* 135 */ 1298 .long SYMBOL_NAME(sys_personality) 1299 .long SYMBOL_NAME(sys_ni_syscall) /* for afs_syscall */ 1300 .long SYMBOL_NAME(sys_setfsuid16) 1301 .long SYMBOL_NAME(sys_setfsgid16) 1302 .long SYMBOL_NAME(sys_llseek) /* 140 */ 1303 .long SYMBOL_NAME(sys_getdents) 1304 .long SYMBOL_NAME(sys_select) 1305 .long SYMBOL_NAME(sys_flock) 1306 .long SYMBOL_NAME(sys_msync) 1307 .long SYMBOL_NAME(sys_readv) /* 145 */ 1308 .long SYMBOL_NAME(sys_writev) 1309 .long SYMBOL_NAME(sys_getsid) 1310 .long SYMBOL_NAME(sys_fdatasync) 1311 .long SYMBOL_NAME(sys_sysctl) 1312 .long SYMBOL_NAME(sys_mlock) /* 150 */ 1313 .long SYMBOL_NAME(sys_munlock) 1314 .long SYMBOL_NAME(sys_mlockall) 1315 .long SYMBOL_NAME(sys_munlockall) 1316 .long SYMBOL_NAME(sys_sched_setparam) 1317 .long SYMBOL_NAME(sys_sched_getparam) /* 155 */ 1318 .long SYMBOL_NAME(sys_sched_setscheduler) 1319 .long SYMBOL_NAME(sys_sched_getscheduler) 1320 .long SYMBOL_NAME(sys_sched_yield) 1321 .long SYMBOL_NAME(sys_sched_get_priority_max) 1322 .long SYMBOL_NAME(sys_sched_get_priority_min) /* 160 */ 1323 .long SYMBOL_NAME(sys_sched_rr_get_interval) 1324 .long SYMBOL_NAME(sys_nanosleep) 1325 .long SYMBOL_NAME(sys_mremap) 1326 .long SYMBOL_NAME(sys_setresuid16) 1327 .long SYMBOL_NAME(sys_getresuid16) /* 165 */ 1328 .long SYMBOL_NAME(sys_ni_syscall) /* vm86 */ 1329 .long SYMBOL_NAME(sys_query_module) 1330 .long SYMBOL_NAME(sys_poll) 1331 .long SYMBOL_NAME(sys_nfsservctl) 1332 .long SYMBOL_NAME(sys_setresgid16) /* 170 */ 1333 .long SYMBOL_NAME(sys_getresgid16) 1334 .long SYMBOL_NAME(sys_prctl) 1335 .long SYMBOL_NAME(sys_rt_sigreturn) 1336 .long SYMBOL_NAME(sys_rt_sigaction) 1337 .long SYMBOL_NAME(sys_rt_sigprocmask) /* 175 */ 1338 .long SYMBOL_NAME(sys_rt_sigpending) 1339 .long SYMBOL_NAME(sys_rt_sigtimedwait) 1340 .long SYMBOL_NAME(sys_rt_sigqueueinfo) 1341 .long SYMBOL_NAME(sys_rt_sigsuspend) 1342 .long SYMBOL_NAME(sys_pread_wrapper) /* 180 */ 1343 .long SYMBOL_NAME(sys_pwrite_wrapper) 1344 .long SYMBOL_NAME(sys_chown16) 1345 .long SYMBOL_NAME(sys_getcwd) 1346 .long SYMBOL_NAME(sys_capget) 1347 .long SYMBOL_NAME(sys_capset) /* 185 */ 1348 .long SYMBOL_NAME(sys_sigaltstack) 1349 .long SYMBOL_NAME(sys_sendfile) 1350 .long SYMBOL_NAME(sys_ni_syscall) /* streams1 */ 1351 .long SYMBOL_NAME(sys_ni_syscall) /* streams2 */ 1352 .long SYMBOL_NAME(sys_vfork) /* 190 */ 1353 .long SYMBOL_NAME(sys_getrlimit) 1354 .long SYMBOL_NAME(sys_mmap2) 1355 .long SYMBOL_NAME(sys_truncate64) 1356 .long SYMBOL_NAME(sys_ftruncate64) 1357 .long SYMBOL_NAME(sys_stat64) /* 195 */ 1358 .long SYMBOL_NAME(sys_lstat64) 1359 .long SYMBOL_NAME(sys_fstat64) 1360 .long SYMBOL_NAME(sys_lchown) 1361 .long SYMBOL_NAME(sys_getuid) 1362 .long SYMBOL_NAME(sys_getgid) /* 200 */ 1363 .long SYMBOL_NAME(sys_geteuid) 1364 .long SYMBOL_NAME(sys_getegid) 1365 .long SYMBOL_NAME(sys_setreuid) 1366 .long SYMBOL_NAME(sys_setregid) 1367 .long SYMBOL_NAME(sys_getgroups) /* 205 */ 1368 .long SYMBOL_NAME(sys_setgroups) 1369 .long SYMBOL_NAME(sys_fchown) 1370 .long SYMBOL_NAME(sys_setresuid) 1371 .long SYMBOL_NAME(sys_getresuid) 1372 .long SYMBOL_NAME(sys_setresgid) /* 210 */ 1373 .long SYMBOL_NAME(sys_getresgid) 1374 .long SYMBOL_NAME(sys_chown) 1375 .long SYMBOL_NAME(sys_setuid) 1376 .long SYMBOL_NAME(sys_setgid) 1377 .long SYMBOL_NAME(sys_setfsuid) /* 215 */ 1378 .long SYMBOL_NAME(sys_setfsgid) 1379 .long SYMBOL_NAME(sys_pivot_root) 1380 .long SYMBOL_NAME(sys_mincore) 1381 .long SYMBOL_NAME(sys_madvise) 1382 .long SYMBOL_NAME(sys_getdents64) /* 220 */ 1383 .long SYMBOL_NAME(sys_fcntl64) 1384 .long SYMBOL_NAME(sys_gettid) 1385 .long SYMBOL_NAME(sys_tkill) 1386 .long SYMBOL_NAME(sys_ni_syscall) 1387 .long SYMBOL_NAME(sys_readahead) /* 225 */ 1388 /* 1389 * NOTE!! This doesn't have to be exact - we just have 1390 * to make sure we have _enough_ of the "sys_ni_syscall" 1391 * entries. Don't panic if you notice that this hasn't 1392 * been shrunk every time we add a new system call. 1393 */ 1394 .rept NR_syscalls-(.-sys_call_table)/4 1395 .long SYMBOL_NAME(sys_ni_syscall) 1396 .endr 1397 1398/* End of entry.S */ 1399