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