12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532 |
- /* entry.S: FR-V entry
- *
- * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved.
- * Written by David Howells (dhowells@redhat.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
- *
- *
- * Entry to the kernel is "interesting":
- * (1) There are no stack pointers, not even for the kernel
- * (2) General Registers should not be clobbered
- * (3) There are no kernel-only data registers
- * (4) Since all addressing modes are wrt to a General Register, no global
- * variables can be reached
- *
- * We deal with this by declaring that we shall kill GR28 on entering the
- * kernel from userspace
- *
- * However, since break interrupts can interrupt the CPU even when PSR.ET==0,
- * they can't rely on GR28 to be anything useful, and so need to clobber a
- * separate register (GR31). Break interrupts are managed in break.S
- *
- * GR29 _is_ saved, and holds the current task pointer globally
- *
- */
- #include <linux/linkage.h>
- #include <asm/thread_info.h>
- #include <asm/setup.h>
- #include <asm/segment.h>
- #include <asm/ptrace.h>
- #include <asm/errno.h>
- #include <asm/cache.h>
- #include <asm/spr-regs.h>
- #define nr_syscalls ((syscall_table_size)/4)
- .section .text..entry
- .balign 4
- .macro LEDS val
- # sethi.p %hi(0xe1200004),gr30
- # setlo %lo(0xe1200004),gr30
- # setlos #~\val,gr31
- # st gr31,@(gr30,gr0)
- # sethi.p %hi(0xffc00100),gr30
- # setlo %lo(0xffc00100),gr30
- # sth gr0,@(gr30,gr0)
- # membar
- .endm
- .macro LEDS32
- # not gr31,gr31
- # sethi.p %hi(0xe1200004),gr30
- # setlo %lo(0xe1200004),gr30
- # st.p gr31,@(gr30,gr0)
- # srli gr31,#16,gr31
- # sethi.p %hi(0xffc00100),gr30
- # setlo %lo(0xffc00100),gr30
- # sth gr31,@(gr30,gr0)
- # membar
- .endm
- ###############################################################################
- #
- # entry point for External interrupts received whilst executing userspace code
- #
- ###############################################################################
- .globl __entry_uspace_external_interrupt
- .type __entry_uspace_external_interrupt,@function
- __entry_uspace_external_interrupt:
- LEDS 0x6200
- sethi.p %hi(__kernel_frame0_ptr),gr28
- setlo %lo(__kernel_frame0_ptr),gr28
- ldi @(gr28,#0),gr28
- # handle h/w single-step through exceptions
- sti gr0,@(gr28,#REG__STATUS)
- .globl __entry_uspace_external_interrupt_reentry
- __entry_uspace_external_interrupt_reentry:
- LEDS 0x6201
- setlos #REG__END,gr30
- dcpl gr28,gr30,#0
- # finish building the exception frame
- sti sp, @(gr28,#REG_SP)
- stdi gr2, @(gr28,#REG_GR(2))
- stdi gr4, @(gr28,#REG_GR(4))
- stdi gr6, @(gr28,#REG_GR(6))
- stdi gr8, @(gr28,#REG_GR(8))
- stdi gr10,@(gr28,#REG_GR(10))
- stdi gr12,@(gr28,#REG_GR(12))
- stdi gr14,@(gr28,#REG_GR(14))
- stdi gr16,@(gr28,#REG_GR(16))
- stdi gr18,@(gr28,#REG_GR(18))
- stdi gr20,@(gr28,#REG_GR(20))
- stdi gr22,@(gr28,#REG_GR(22))
- stdi gr24,@(gr28,#REG_GR(24))
- stdi gr26,@(gr28,#REG_GR(26))
- sti gr0, @(gr28,#REG_GR(28))
- sti gr29,@(gr28,#REG_GR(29))
- stdi.p gr30,@(gr28,#REG_GR(30))
- # set up the kernel stack pointer
- ori gr28,0,sp
- movsg tbr ,gr20
- movsg psr ,gr22
- movsg pcsr,gr21
- movsg isr ,gr23
- movsg ccr ,gr24
- movsg cccr,gr25
- movsg lr ,gr26
- movsg lcr ,gr27
- setlos.p #-1,gr4
- andi gr22,#PSR_PS,gr5 /* try to rebuild original PSR value */
- andi.p gr22,#~(PSR_PS|PSR_S),gr6
- slli gr5,#1,gr5
- or gr6,gr5,gr5
- andi gr5,#~PSR_ET,gr5
- sti gr20,@(gr28,#REG_TBR)
- sti gr21,@(gr28,#REG_PC)
- sti gr5 ,@(gr28,#REG_PSR)
- sti gr23,@(gr28,#REG_ISR)
- stdi gr24,@(gr28,#REG_CCR)
- stdi gr26,@(gr28,#REG_LR)
- sti gr4 ,@(gr28,#REG_SYSCALLNO)
- movsg iacc0h,gr4
- movsg iacc0l,gr5
- stdi gr4,@(gr28,#REG_IACC0)
- movsg gner0,gr4
- movsg gner1,gr5
- stdi.p gr4,@(gr28,#REG_GNER0)
- # interrupts start off fully disabled in the interrupt handler
- subcc gr0,gr0,gr0,icc2 /* set Z and clear C */
- # set up kernel global registers
- sethi.p %hi(__kernel_current_task),gr5
- setlo %lo(__kernel_current_task),gr5
- sethi.p %hi(_gp),gr16
- setlo %lo(_gp),gr16
- ldi @(gr5,#0),gr29
- ldi.p @(gr29,#4),gr15 ; __current_thread_info = current->thread_info
- # make sure we (the kernel) get div-zero and misalignment exceptions
- setlos #ISR_EDE|ISR_DTT_DIVBYZERO|ISR_EMAM_EXCEPTION,gr5
- movgs gr5,isr
- # switch to the kernel trap table
- sethi.p %hi(__entry_kerneltrap_table),gr6
- setlo %lo(__entry_kerneltrap_table),gr6
- movgs gr6,tbr
- # set the return address
- sethi.p %hi(__entry_return_from_user_interrupt),gr4
- setlo %lo(__entry_return_from_user_interrupt),gr4
- movgs gr4,lr
- # raise the minimum interrupt priority to 15 (NMI only) and enable exceptions
- movsg psr,gr4
- ori gr4,#PSR_PIL_14,gr4
- movgs gr4,psr
- ori gr4,#PSR_PIL_14|PSR_ET,gr4
- movgs gr4,psr
- LEDS 0x6202
- bra do_IRQ
- .size __entry_uspace_external_interrupt,.-__entry_uspace_external_interrupt
- ###############################################################################
- #
- # entry point for External interrupts received whilst executing kernel code
- # - on arriving here, the following registers should already be set up:
- # GR15 - current thread_info struct pointer
- # GR16 - kernel GP-REL pointer
- # GR29 - current task struct pointer
- # TBR - kernel trap vector table
- # ISR - kernel's preferred integer controls
- #
- ###############################################################################
- .globl __entry_kernel_external_interrupt
- .type __entry_kernel_external_interrupt,@function
- __entry_kernel_external_interrupt:
- LEDS 0x6210
- // sub sp,gr15,gr31
- // LEDS32
- # set up the stack pointer
- or.p sp,gr0,gr30
- subi sp,#REG__END,sp
- sti gr30,@(sp,#REG_SP)
- # handle h/w single-step through exceptions
- sti gr0,@(sp,#REG__STATUS)
- .globl __entry_kernel_external_interrupt_reentry
- __entry_kernel_external_interrupt_reentry:
- LEDS 0x6211
- # set up the exception frame
- setlos #REG__END,gr30
- dcpl sp,gr30,#0
- sti.p gr28,@(sp,#REG_GR(28))
- ori sp,0,gr28
- # finish building the exception frame
- stdi gr2,@(gr28,#REG_GR(2))
- stdi gr4,@(gr28,#REG_GR(4))
- stdi gr6,@(gr28,#REG_GR(6))
- stdi gr8,@(gr28,#REG_GR(8))
- stdi gr10,@(gr28,#REG_GR(10))
- stdi gr12,@(gr28,#REG_GR(12))
- stdi gr14,@(gr28,#REG_GR(14))
- stdi gr16,@(gr28,#REG_GR(16))
- stdi gr18,@(gr28,#REG_GR(18))
- stdi gr20,@(gr28,#REG_GR(20))
- stdi gr22,@(gr28,#REG_GR(22))
- stdi gr24,@(gr28,#REG_GR(24))
- stdi gr26,@(gr28,#REG_GR(26))
- sti gr29,@(gr28,#REG_GR(29))
- stdi.p gr30,@(gr28,#REG_GR(30))
- # note virtual interrupts will be fully enabled upon return
- subicc gr0,#1,gr0,icc2 /* clear Z, set C */
- movsg tbr ,gr20
- movsg psr ,gr22
- movsg pcsr,gr21
- movsg isr ,gr23
- movsg ccr ,gr24
- movsg cccr,gr25
- movsg lr ,gr26
- movsg lcr ,gr27
- setlos.p #-1,gr4
- andi gr22,#PSR_PS,gr5 /* try to rebuild original PSR value */
- andi.p gr22,#~(PSR_PS|PSR_S),gr6
- slli gr5,#1,gr5
- or gr6,gr5,gr5
- andi.p gr5,#~PSR_ET,gr5
- # set CCCR.CC3 to Undefined to abort atomic-modify completion inside the kernel
- # - for an explanation of how it works, see: Documentation/frv/atomic-ops.txt
- andi gr25,#~0xc0,gr25
- sti gr20,@(gr28,#REG_TBR)
- sti gr21,@(gr28,#REG_PC)
- sti gr5 ,@(gr28,#REG_PSR)
- sti gr23,@(gr28,#REG_ISR)
- stdi gr24,@(gr28,#REG_CCR)
- stdi gr26,@(gr28,#REG_LR)
- sti gr4 ,@(gr28,#REG_SYSCALLNO)
- movsg iacc0h,gr4
- movsg iacc0l,gr5
- stdi gr4,@(gr28,#REG_IACC0)
- movsg gner0,gr4
- movsg gner1,gr5
- stdi.p gr4,@(gr28,#REG_GNER0)
- # interrupts start off fully disabled in the interrupt handler
- subcc gr0,gr0,gr0,icc2 /* set Z and clear C */
- # set the return address
- sethi.p %hi(__entry_return_from_kernel_interrupt),gr4
- setlo %lo(__entry_return_from_kernel_interrupt),gr4
- movgs gr4,lr
- # clear power-saving mode flags
- movsg hsr0,gr4
- andi gr4,#~HSR0_PDM,gr4
- movgs gr4,hsr0
- # raise the minimum interrupt priority to 15 (NMI only) and enable exceptions
- movsg psr,gr4
- ori gr4,#PSR_PIL_14,gr4
- movgs gr4,psr
- ori gr4,#PSR_ET,gr4
- movgs gr4,psr
- LEDS 0x6212
- bra do_IRQ
- .size __entry_kernel_external_interrupt,.-__entry_kernel_external_interrupt
- ###############################################################################
- #
- # deal with interrupts that were actually virtually disabled
- # - we need to really disable them, flag the fact and return immediately
- # - if you change this, you must alter break.S also
- #
- ###############################################################################
- .balign L1_CACHE_BYTES
- .globl __entry_kernel_external_interrupt_virtually_disabled
- .type __entry_kernel_external_interrupt_virtually_disabled,@function
- __entry_kernel_external_interrupt_virtually_disabled:
- movsg psr,gr30
- andi gr30,#~PSR_PIL,gr30
- ori gr30,#PSR_PIL_14,gr30 ; debugging interrupts only
- movgs gr30,psr
- subcc gr0,gr0,gr0,icc2 ; leave Z set, clear C
- rett #0
- .size __entry_kernel_external_interrupt_virtually_disabled,.-__entry_kernel_external_interrupt_virtually_disabled
- ###############################################################################
- #
- # deal with re-enablement of interrupts that were pending when virtually re-enabled
- # - set ICC2.C, re-enable the real interrupts and return
- # - we can clear ICC2.Z because we shouldn't be here if it's not 0 [due to TIHI]
- # - if you change this, you must alter break.S also
- #
- ###############################################################################
- .balign L1_CACHE_BYTES
- .globl __entry_kernel_external_interrupt_virtual_reenable
- .type __entry_kernel_external_interrupt_virtual_reenable,@function
- __entry_kernel_external_interrupt_virtual_reenable:
- movsg psr,gr30
- andi gr30,#~PSR_PIL,gr30 ; re-enable interrupts
- movgs gr30,psr
- subicc gr0,#1,gr0,icc2 ; clear Z, set C
- rett #0
- .size __entry_kernel_external_interrupt_virtual_reenable,.-__entry_kernel_external_interrupt_virtual_reenable
- ###############################################################################
- #
- # entry point for Software and Progam interrupts generated whilst executing userspace code
- #
- ###############################################################################
- .globl __entry_uspace_softprog_interrupt
- .type __entry_uspace_softprog_interrupt,@function
- .globl __entry_uspace_handle_mmu_fault
- __entry_uspace_softprog_interrupt:
- LEDS 0x6000
- #ifdef CONFIG_MMU
- movsg ear0,gr28
- __entry_uspace_handle_mmu_fault:
- movgs gr28,scr2
- #endif
- sethi.p %hi(__kernel_frame0_ptr),gr28
- setlo %lo(__kernel_frame0_ptr),gr28
- ldi @(gr28,#0),gr28
- # handle h/w single-step through exceptions
- sti gr0,@(gr28,#REG__STATUS)
- .globl __entry_uspace_softprog_interrupt_reentry
- __entry_uspace_softprog_interrupt_reentry:
- LEDS 0x6001
- setlos #REG__END,gr30
- dcpl gr28,gr30,#0
- # set up the kernel stack pointer
- sti.p sp,@(gr28,#REG_SP)
- ori gr28,0,sp
- sti gr0,@(gr28,#REG_GR(28))
- stdi gr20,@(gr28,#REG_GR(20))
- stdi gr22,@(gr28,#REG_GR(22))
- movsg tbr,gr20
- movsg pcsr,gr21
- movsg psr,gr22
- sethi.p %hi(__entry_return_from_user_exception),gr23
- setlo %lo(__entry_return_from_user_exception),gr23
- bra __entry_common
- .size __entry_uspace_softprog_interrupt,.-__entry_uspace_softprog_interrupt
- # single-stepping was disabled on entry to a TLB handler that then faulted
- #ifdef CONFIG_MMU
- .globl __entry_uspace_handle_mmu_fault_sstep
- __entry_uspace_handle_mmu_fault_sstep:
- movgs gr28,scr2
- sethi.p %hi(__kernel_frame0_ptr),gr28
- setlo %lo(__kernel_frame0_ptr),gr28
- ldi @(gr28,#0),gr28
- # flag single-step re-enablement
- sti gr0,@(gr28,#REG__STATUS)
- bra __entry_uspace_softprog_interrupt_reentry
- #endif
- ###############################################################################
- #
- # entry point for Software and Progam interrupts generated whilst executing kernel code
- #
- ###############################################################################
- .globl __entry_kernel_softprog_interrupt
- .type __entry_kernel_softprog_interrupt,@function
- __entry_kernel_softprog_interrupt:
- LEDS 0x6004
- #ifdef CONFIG_MMU
- movsg ear0,gr30
- movgs gr30,scr2
- #endif
- .globl __entry_kernel_handle_mmu_fault
- __entry_kernel_handle_mmu_fault:
- # set up the stack pointer
- subi sp,#REG__END,sp
- sti sp,@(sp,#REG_SP)
- sti sp,@(sp,#REG_SP-4)
- andi sp,#~7,sp
- # handle h/w single-step through exceptions
- sti gr0,@(sp,#REG__STATUS)
- .globl __entry_kernel_softprog_interrupt_reentry
- __entry_kernel_softprog_interrupt_reentry:
- LEDS 0x6005
- setlos #REG__END,gr30
- dcpl sp,gr30,#0
- # set up the exception frame
- sti.p gr28,@(sp,#REG_GR(28))
- ori sp,0,gr28
- stdi gr20,@(gr28,#REG_GR(20))
- stdi gr22,@(gr28,#REG_GR(22))
- ldi @(sp,#REG_SP),gr22 /* reconstruct the old SP */
- addi gr22,#REG__END,gr22
- sti gr22,@(sp,#REG_SP)
- # set CCCR.CC3 to Undefined to abort atomic-modify completion inside the kernel
- # - for an explanation of how it works, see: Documentation/frv/atomic-ops.txt
- movsg cccr,gr20
- andi gr20,#~0xc0,gr20
- movgs gr20,cccr
- movsg tbr,gr20
- movsg pcsr,gr21
- movsg psr,gr22
- sethi.p %hi(__entry_return_from_kernel_exception),gr23
- setlo %lo(__entry_return_from_kernel_exception),gr23
- bra __entry_common
- .size __entry_kernel_softprog_interrupt,.-__entry_kernel_softprog_interrupt
- # single-stepping was disabled on entry to a TLB handler that then faulted
- #ifdef CONFIG_MMU
- .globl __entry_kernel_handle_mmu_fault_sstep
- __entry_kernel_handle_mmu_fault_sstep:
- # set up the stack pointer
- subi sp,#REG__END,sp
- sti sp,@(sp,#REG_SP)
- sti sp,@(sp,#REG_SP-4)
- andi sp,#~7,sp
- # flag single-step re-enablement
- sethi #REG__STATUS_STEP,gr30
- sti gr30,@(sp,#REG__STATUS)
- bra __entry_kernel_softprog_interrupt_reentry
- #endif
- ###############################################################################
- #
- # the rest of the kernel entry point code
- # - on arriving here, the following registers should be set up:
- # GR1 - kernel stack pointer
- # GR7 - syscall number (trap 0 only)
- # GR8-13 - syscall args (trap 0 only)
- # GR20 - saved TBR
- # GR21 - saved PC
- # GR22 - saved PSR
- # GR23 - return handler address
- # GR28 - exception frame on stack
- # SCR2 - saved EAR0 where applicable (clobbered by ICI & ICEF insns on FR451)
- # PSR - PSR.S 1, PSR.ET 0
- #
- ###############################################################################
- .globl __entry_common
- .type __entry_common,@function
- __entry_common:
- LEDS 0x6008
- # finish building the exception frame
- stdi gr2,@(gr28,#REG_GR(2))
- stdi gr4,@(gr28,#REG_GR(4))
- stdi gr6,@(gr28,#REG_GR(6))
- stdi gr8,@(gr28,#REG_GR(8))
- stdi gr10,@(gr28,#REG_GR(10))
- stdi gr12,@(gr28,#REG_GR(12))
- stdi gr14,@(gr28,#REG_GR(14))
- stdi gr16,@(gr28,#REG_GR(16))
- stdi gr18,@(gr28,#REG_GR(18))
- stdi gr24,@(gr28,#REG_GR(24))
- stdi gr26,@(gr28,#REG_GR(26))
- sti gr29,@(gr28,#REG_GR(29))
- stdi gr30,@(gr28,#REG_GR(30))
- movsg lcr ,gr27
- movsg lr ,gr26
- movgs gr23,lr
- movsg cccr,gr25
- movsg ccr ,gr24
- movsg isr ,gr23
- setlos.p #-1,gr4
- andi gr22,#PSR_PS,gr5 /* try to rebuild original PSR value */
- andi.p gr22,#~(PSR_PS|PSR_S),gr6
- slli gr5,#1,gr5
- or gr6,gr5,gr5
- andi gr5,#~PSR_ET,gr5
- sti gr20,@(gr28,#REG_TBR)
- sti gr21,@(gr28,#REG_PC)
- sti gr5 ,@(gr28,#REG_PSR)
- sti gr23,@(gr28,#REG_ISR)
- stdi gr24,@(gr28,#REG_CCR)
- stdi gr26,@(gr28,#REG_LR)
- sti gr4 ,@(gr28,#REG_SYSCALLNO)
- movsg iacc0h,gr4
- movsg iacc0l,gr5
- stdi gr4,@(gr28,#REG_IACC0)
- movsg gner0,gr4
- movsg gner1,gr5
- stdi.p gr4,@(gr28,#REG_GNER0)
- # set up virtual interrupt disablement
- subicc gr0,#1,gr0,icc2 /* clear Z flag, set C flag */
- # set up kernel global registers
- sethi.p %hi(__kernel_current_task),gr5
- setlo %lo(__kernel_current_task),gr5
- sethi.p %hi(_gp),gr16
- setlo %lo(_gp),gr16
- ldi @(gr5,#0),gr29
- ldi @(gr29,#4),gr15 ; __current_thread_info = current->thread_info
- # switch to the kernel trap table
- sethi.p %hi(__entry_kerneltrap_table),gr6
- setlo %lo(__entry_kerneltrap_table),gr6
- movgs gr6,tbr
- # make sure we (the kernel) get div-zero and misalignment exceptions
- setlos #ISR_EDE|ISR_DTT_DIVBYZERO|ISR_EMAM_EXCEPTION,gr5
- movgs gr5,isr
- # clear power-saving mode flags
- movsg hsr0,gr4
- andi gr4,#~HSR0_PDM,gr4
- movgs gr4,hsr0
- # multiplex again using old TBR as a guide
- setlos.p #TBR_TT,gr3
- sethi %hi(__entry_vector_table),gr6
- and.p gr20,gr3,gr5
- setlo %lo(__entry_vector_table),gr6
- srli gr5,#2,gr5
- ld @(gr5,gr6),gr5
- LEDS 0x6009
- jmpl @(gr5,gr0)
- .size __entry_common,.-__entry_common
- ###############################################################################
- #
- # handle instruction MMU fault
- #
- ###############################################################################
- #ifdef CONFIG_MMU
- .globl __entry_insn_mmu_fault
- __entry_insn_mmu_fault:
- LEDS 0x6010
- setlos #0,gr8
- movsg esr0,gr9
- movsg scr2,gr10
- # now that we've accessed the exception regs, we can enable exceptions
- movsg psr,gr4
- ori gr4,#PSR_ET,gr4
- movgs gr4,psr
- sethi.p %hi(do_page_fault),gr5
- setlo %lo(do_page_fault),gr5
- jmpl @(gr5,gr0) ; call do_page_fault(0,esr0,ear0)
- #endif
- ###############################################################################
- #
- # handle instruction access error
- #
- ###############################################################################
- .globl __entry_insn_access_error
- __entry_insn_access_error:
- LEDS 0x6011
- sethi.p %hi(insn_access_error),gr5
- setlo %lo(insn_access_error),gr5
- movsg esfr1,gr8
- movsg epcr0,gr9
- movsg esr0,gr10
- # now that we've accessed the exception regs, we can enable exceptions
- movsg psr,gr4
- ori gr4,#PSR_ET,gr4
- movgs gr4,psr
- jmpl @(gr5,gr0) ; call insn_access_error(esfr1,epcr0,esr0)
- ###############################################################################
- #
- # handle various instructions of dubious legality
- #
- ###############################################################################
- .globl __entry_unsupported_trap
- .globl __entry_illegal_instruction
- .globl __entry_privileged_instruction
- .globl __entry_debug_exception
- __entry_unsupported_trap:
- subi gr21,#4,gr21
- sti gr21,@(gr28,#REG_PC)
- __entry_illegal_instruction:
- __entry_privileged_instruction:
- __entry_debug_exception:
- LEDS 0x6012
- sethi.p %hi(illegal_instruction),gr5
- setlo %lo(illegal_instruction),gr5
- movsg esfr1,gr8
- movsg epcr0,gr9
- movsg esr0,gr10
- # now that we've accessed the exception regs, we can enable exceptions
- movsg psr,gr4
- ori gr4,#PSR_ET,gr4
- movgs gr4,psr
- jmpl @(gr5,gr0) ; call ill_insn(esfr1,epcr0,esr0)
- ###############################################################################
- #
- # handle atomic operation emulation for userspace
- #
- ###############################################################################
- .globl __entry_atomic_op
- __entry_atomic_op:
- LEDS 0x6012
- sethi.p %hi(atomic_operation),gr5
- setlo %lo(atomic_operation),gr5
- movsg esfr1,gr8
- movsg epcr0,gr9
- movsg esr0,gr10
- # now that we've accessed the exception regs, we can enable exceptions
- movsg psr,gr4
- ori gr4,#PSR_ET,gr4
- movgs gr4,psr
- jmpl @(gr5,gr0) ; call atomic_operation(esfr1,epcr0,esr0)
- ###############################################################################
- #
- # handle media exception
- #
- ###############################################################################
- .globl __entry_media_exception
- __entry_media_exception:
- LEDS 0x6013
- sethi.p %hi(media_exception),gr5
- setlo %lo(media_exception),gr5
- movsg msr0,gr8
- movsg msr1,gr9
- # now that we've accessed the exception regs, we can enable exceptions
- movsg psr,gr4
- ori gr4,#PSR_ET,gr4
- movgs gr4,psr
- jmpl @(gr5,gr0) ; call media_excep(msr0,msr1)
- ###############################################################################
- #
- # handle data MMU fault
- # handle data DAT fault (write-protect exception)
- #
- ###############################################################################
- #ifdef CONFIG_MMU
- .globl __entry_data_mmu_fault
- __entry_data_mmu_fault:
- .globl __entry_data_dat_fault
- __entry_data_dat_fault:
- LEDS 0x6014
- setlos #1,gr8
- movsg esr0,gr9
- movsg scr2,gr10 ; saved EAR0
- # now that we've accessed the exception regs, we can enable exceptions
- movsg psr,gr4
- ori gr4,#PSR_ET,gr4
- movgs gr4,psr
- sethi.p %hi(do_page_fault),gr5
- setlo %lo(do_page_fault),gr5
- jmpl @(gr5,gr0) ; call do_page_fault(1,esr0,ear0)
- #endif
- ###############################################################################
- #
- # handle data and instruction access exceptions
- #
- ###############################################################################
- .globl __entry_insn_access_exception
- .globl __entry_data_access_exception
- __entry_insn_access_exception:
- __entry_data_access_exception:
- LEDS 0x6016
- sethi.p %hi(memory_access_exception),gr5
- setlo %lo(memory_access_exception),gr5
- movsg esr0,gr8
- movsg scr2,gr9 ; saved EAR0
- movsg epcr0,gr10
- # now that we've accessed the exception regs, we can enable exceptions
- movsg psr,gr4
- ori gr4,#PSR_ET,gr4
- movgs gr4,psr
- jmpl @(gr5,gr0) ; call memory_access_error(esr0,ear0,epcr0)
- ###############################################################################
- #
- # handle data access error
- #
- ###############################################################################
- .globl __entry_data_access_error
- __entry_data_access_error:
- LEDS 0x6016
- sethi.p %hi(data_access_error),gr5
- setlo %lo(data_access_error),gr5
- movsg esfr1,gr8
- movsg esr15,gr9
- movsg ear15,gr10
- # now that we've accessed the exception regs, we can enable exceptions
- movsg psr,gr4
- ori gr4,#PSR_ET,gr4
- movgs gr4,psr
- jmpl @(gr5,gr0) ; call data_access_error(esfr1,esr15,ear15)
- ###############################################################################
- #
- # handle data store error
- #
- ###############################################################################
- .globl __entry_data_store_error
- __entry_data_store_error:
- LEDS 0x6017
- sethi.p %hi(data_store_error),gr5
- setlo %lo(data_store_error),gr5
- movsg esfr1,gr8
- movsg esr14,gr9
- # now that we've accessed the exception regs, we can enable exceptions
- movsg psr,gr4
- ori gr4,#PSR_ET,gr4
- movgs gr4,psr
- jmpl @(gr5,gr0) ; call data_store_error(esfr1,esr14)
- ###############################################################################
- #
- # handle division exception
- #
- ###############################################################################
- .globl __entry_division_exception
- __entry_division_exception:
- LEDS 0x6018
- sethi.p %hi(division_exception),gr5
- setlo %lo(division_exception),gr5
- movsg esfr1,gr8
- movsg esr0,gr9
- movsg isr,gr10
- # now that we've accessed the exception regs, we can enable exceptions
- movsg psr,gr4
- ori gr4,#PSR_ET,gr4
- movgs gr4,psr
- jmpl @(gr5,gr0) ; call div_excep(esfr1,esr0,isr)
- ###############################################################################
- #
- # handle compound exception
- #
- ###############################################################################
- .globl __entry_compound_exception
- __entry_compound_exception:
- LEDS 0x6019
- sethi.p %hi(compound_exception),gr5
- setlo %lo(compound_exception),gr5
- movsg esfr1,gr8
- movsg esr0,gr9
- movsg esr14,gr10
- movsg esr15,gr11
- movsg msr0,gr12
- movsg msr1,gr13
- # now that we've accessed the exception regs, we can enable exceptions
- movsg psr,gr4
- ori gr4,#PSR_ET,gr4
- movgs gr4,psr
- jmpl @(gr5,gr0) ; call comp_excep(esfr1,esr0,esr14,esr15,msr0,msr1)
- ###############################################################################
- #
- # handle interrupts and NMIs
- #
- ###############################################################################
- .globl __entry_do_IRQ
- __entry_do_IRQ:
- LEDS 0x6020
- # we can enable exceptions
- movsg psr,gr4
- ori gr4,#PSR_ET,gr4
- movgs gr4,psr
- bra do_IRQ
- .globl __entry_do_NMI
- __entry_do_NMI:
- LEDS 0x6021
- # we can enable exceptions
- movsg psr,gr4
- ori gr4,#PSR_ET,gr4
- movgs gr4,psr
- bra do_NMI
- ###############################################################################
- #
- # the return path for a newly forked child process
- # - __switch_to() saved the old current pointer in GR8 for us
- #
- ###############################################################################
- .globl ret_from_fork
- ret_from_fork:
- LEDS 0x6100
- call schedule_tail
- # fork & co. return 0 to child
- setlos.p #0,gr8
- bra __syscall_exit
- ###################################################################################################
- #
- # Return to user mode is not as complex as all this looks,
- # but we want the default path for a system call return to
- # go as quickly as possible which is why some of this is
- # less clear than it otherwise should be.
- #
- ###################################################################################################
- .balign L1_CACHE_BYTES
- .globl system_call
- system_call:
- LEDS 0x6101
- movsg psr,gr4 ; enable exceptions
- ori gr4,#PSR_ET,gr4
- movgs gr4,psr
- sti gr7,@(gr28,#REG_SYSCALLNO)
- sti.p gr8,@(gr28,#REG_ORIG_GR8)
- subicc gr7,#nr_syscalls,gr0,icc0
- bnc icc0,#0,__syscall_badsys
- ldi @(gr15,#TI_FLAGS),gr4
- andicc gr4,#_TIF_SYSCALL_TRACE,gr0,icc0
- bne icc0,#0,__syscall_trace_entry
- __syscall_call:
- slli.p gr7,#2,gr7
- sethi %hi(sys_call_table),gr5
- setlo %lo(sys_call_table),gr5
- ld @(gr5,gr7),gr4
- calll @(gr4,gr0)
- ###############################################################################
- #
- # return to interrupted process
- #
- ###############################################################################
- __syscall_exit:
- LEDS 0x6300
- sti gr8,@(gr28,#REG_GR(8)) ; save return value
- # rebuild saved psr - execve will change it for init/main.c
- ldi @(gr28,#REG_PSR),gr22
- srli gr22,#1,gr5
- andi.p gr22,#~PSR_PS,gr22
- andi gr5,#PSR_PS,gr5
- or gr5,gr22,gr22
- ori gr22,#PSR_S,gr22
- # keep current PSR in GR23
- movsg psr,gr23
- # make sure we don't miss an interrupt setting need_resched or sigpending between
- # sampling and the RETT
- ori gr23,#PSR_PIL_14,gr23
- movgs gr23,psr
- ldi @(gr15,#TI_FLAGS),gr4
- sethi.p %hi(_TIF_ALLWORK_MASK),gr5
- setlo %lo(_TIF_ALLWORK_MASK),gr5
- andcc gr4,gr5,gr0,icc0
- bne icc0,#0,__syscall_exit_work
- # restore all registers and return
- __entry_return_direct:
- LEDS 0x6301
- andi gr22,#~PSR_ET,gr22
- movgs gr22,psr
- ldi @(gr28,#REG_ISR),gr23
- lddi @(gr28,#REG_CCR),gr24
- lddi @(gr28,#REG_LR) ,gr26
- ldi @(gr28,#REG_PC) ,gr21
- ldi @(gr28,#REG_TBR),gr20
- movgs gr20,tbr
- movgs gr21,pcsr
- movgs gr23,isr
- movgs gr24,ccr
- movgs gr25,cccr
- movgs gr26,lr
- movgs gr27,lcr
- lddi @(gr28,#REG_GNER0),gr4
- movgs gr4,gner0
- movgs gr5,gner1
- lddi @(gr28,#REG_IACC0),gr4
- movgs gr4,iacc0h
- movgs gr5,iacc0l
- lddi @(gr28,#REG_GR(4)) ,gr4
- lddi @(gr28,#REG_GR(6)) ,gr6
- lddi @(gr28,#REG_GR(8)) ,gr8
- lddi @(gr28,#REG_GR(10)),gr10
- lddi @(gr28,#REG_GR(12)),gr12
- lddi @(gr28,#REG_GR(14)),gr14
- lddi @(gr28,#REG_GR(16)),gr16
- lddi @(gr28,#REG_GR(18)),gr18
- lddi @(gr28,#REG_GR(20)),gr20
- lddi @(gr28,#REG_GR(22)),gr22
- lddi @(gr28,#REG_GR(24)),gr24
- lddi @(gr28,#REG_GR(26)),gr26
- ldi @(gr28,#REG_GR(29)),gr29
- lddi @(gr28,#REG_GR(30)),gr30
- # check to see if a debugging return is required
- LEDS 0x67f0
- movsg ccr,gr2
- ldi @(gr28,#REG__STATUS),gr3
- andicc gr3,#REG__STATUS_STEP,gr0,icc0
- bne icc0,#0,__entry_return_singlestep
- movgs gr2,ccr
- ldi @(gr28,#REG_SP) ,sp
- lddi @(gr28,#REG_GR(2)) ,gr2
- ldi @(gr28,#REG_GR(28)),gr28
- LEDS 0x67fe
- // movsg pcsr,gr31
- // LEDS32
- #if 0
- # store the current frame in the workram on the FR451
- movgs gr28,scr2
- sethi.p %hi(0xfe800000),gr28
- setlo %lo(0xfe800000),gr28
- stdi gr2,@(gr28,#REG_GR(2))
- stdi gr4,@(gr28,#REG_GR(4))
- stdi gr6,@(gr28,#REG_GR(6))
- stdi gr8,@(gr28,#REG_GR(8))
- stdi gr10,@(gr28,#REG_GR(10))
- stdi gr12,@(gr28,#REG_GR(12))
- stdi gr14,@(gr28,#REG_GR(14))
- stdi gr16,@(gr28,#REG_GR(16))
- stdi gr18,@(gr28,#REG_GR(18))
- stdi gr24,@(gr28,#REG_GR(24))
- stdi gr26,@(gr28,#REG_GR(26))
- sti gr29,@(gr28,#REG_GR(29))
- stdi gr30,@(gr28,#REG_GR(30))
- movsg tbr ,gr30
- sti gr30,@(gr28,#REG_TBR)
- movsg pcsr,gr30
- sti gr30,@(gr28,#REG_PC)
- movsg psr ,gr30
- sti gr30,@(gr28,#REG_PSR)
- movsg isr ,gr30
- sti gr30,@(gr28,#REG_ISR)
- movsg ccr ,gr30
- movsg cccr,gr31
- stdi gr30,@(gr28,#REG_CCR)
- movsg lr ,gr30
- movsg lcr ,gr31
- stdi gr30,@(gr28,#REG_LR)
- sti gr0 ,@(gr28,#REG_SYSCALLNO)
- movsg scr2,gr28
- #endif
- rett #0
- # return via break.S
- __entry_return_singlestep:
- movgs gr2,ccr
- lddi @(gr28,#REG_GR(2)) ,gr2
- ldi @(gr28,#REG_SP) ,sp
- ldi @(gr28,#REG_GR(28)),gr28
- LEDS 0x67ff
- break
- .globl __entry_return_singlestep_breaks_here
- __entry_return_singlestep_breaks_here:
- nop
- ###############################################################################
- #
- # return to a process interrupted in kernel space
- # - we need to consider preemption if that is enabled
- #
- ###############################################################################
- .balign L1_CACHE_BYTES
- __entry_return_from_kernel_exception:
- LEDS 0x6302
- movsg psr,gr23
- ori gr23,#PSR_PIL_14,gr23
- movgs gr23,psr
- bra __entry_return_direct
- .balign L1_CACHE_BYTES
- __entry_return_from_kernel_interrupt:
- LEDS 0x6303
- movsg psr,gr23
- ori gr23,#PSR_PIL_14,gr23
- movgs gr23,psr
- #ifdef CONFIG_PREEMPT
- ldi @(gr15,#TI_PRE_COUNT),gr5
- subicc gr5,#0,gr0,icc0
- beq icc0,#0,__entry_return_direct
- __entry_preempt_need_resched:
- ldi @(gr15,#TI_FLAGS),gr4
- andicc gr4,#_TIF_NEED_RESCHED,gr0,icc0
- beq icc0,#1,__entry_return_direct
- setlos #PREEMPT_ACTIVE,gr5
- sti gr5,@(gr15,#TI_FLAGS)
- andi gr23,#~PSR_PIL,gr23
- movgs gr23,psr
- call schedule
- sti gr0,@(gr15,#TI_PRE_COUNT)
- movsg psr,gr23
- ori gr23,#PSR_PIL_14,gr23
- movgs gr23,psr
- bra __entry_preempt_need_resched
- #else
- bra __entry_return_direct
- #endif
- ###############################################################################
- #
- # perform work that needs to be done immediately before resumption
- #
- ###############################################################################
- .globl __entry_return_from_user_exception
- .balign L1_CACHE_BYTES
- __entry_return_from_user_exception:
- LEDS 0x6501
- __entry_resume_userspace:
- # make sure we don't miss an interrupt setting need_resched or sigpending between
- # sampling and the RETT
- movsg psr,gr23
- ori gr23,#PSR_PIL_14,gr23
- movgs gr23,psr
- __entry_return_from_user_interrupt:
- LEDS 0x6402
- ldi @(gr15,#TI_FLAGS),gr4
- sethi.p %hi(_TIF_WORK_MASK),gr5
- setlo %lo(_TIF_WORK_MASK),gr5
- andcc gr4,gr5,gr0,icc0
- beq icc0,#1,__entry_return_direct
- __entry_work_pending:
- LEDS 0x6404
- andicc gr4,#_TIF_NEED_RESCHED,gr0,icc0
- beq icc0,#1,__entry_work_notifysig
- __entry_work_resched:
- LEDS 0x6408
- movsg psr,gr23
- andi gr23,#~PSR_PIL,gr23
- movgs gr23,psr
- call schedule
- movsg psr,gr23
- ori gr23,#PSR_PIL_14,gr23
- movgs gr23,psr
- LEDS 0x6401
- ldi @(gr15,#TI_FLAGS),gr4
- sethi.p %hi(_TIF_WORK_MASK),gr5
- setlo %lo(_TIF_WORK_MASK),gr5
- andcc gr4,gr5,gr0,icc0
- beq icc0,#1,__entry_return_direct
- andicc gr4,#_TIF_NEED_RESCHED,gr0,icc0
- bne icc0,#1,__entry_work_resched
- __entry_work_notifysig:
- LEDS 0x6410
- ori.p gr4,#0,gr8
- call do_notify_resume
- bra __entry_resume_userspace
- # perform syscall entry tracing
- __syscall_trace_entry:
- LEDS 0x6320
- call syscall_trace_entry
- lddi.p @(gr28,#REG_GR(8)) ,gr8
- ori gr8,#0,gr7 ; syscall_trace_entry() returned new syscallno
- lddi @(gr28,#REG_GR(10)),gr10
- lddi.p @(gr28,#REG_GR(12)),gr12
- subicc gr7,#nr_syscalls,gr0,icc0
- bnc icc0,#0,__syscall_badsys
- bra __syscall_call
- # perform syscall exit tracing
- __syscall_exit_work:
- LEDS 0x6340
- andicc gr4,#_TIF_SYSCALL_TRACE,gr0,icc0
- beq icc0,#1,__entry_work_pending
- movsg psr,gr23
- andi gr23,#~PSR_PIL,gr23 ; could let syscall_trace_exit() call schedule()
- movgs gr23,psr
- call syscall_trace_exit
- bra __entry_resume_userspace
- __syscall_badsys:
- LEDS 0x6380
- setlos #-ENOSYS,gr8
- sti gr8,@(gr28,#REG_GR(8)) ; save return value
- bra __entry_resume_userspace
- ###############################################################################
- #
- # syscall vector table
- #
- ###############################################################################
- .section .rodata
- ALIGN
- .globl sys_call_table
- sys_call_table:
- .long sys_restart_syscall /* 0 - old "setup()" system call, used for restarting */
- .long sys_exit
- .long sys_fork
- .long sys_read
- .long sys_write
- .long sys_open /* 5 */
- .long sys_close
- .long sys_waitpid
- .long sys_creat
- .long sys_link
- .long sys_unlink /* 10 */
- .long sys_execve
- .long sys_chdir
- .long sys_time
- .long sys_mknod
- .long sys_chmod /* 15 */
- .long sys_lchown16
- .long sys_ni_syscall /* old break syscall holder */
- .long sys_stat
- .long sys_lseek
- .long sys_getpid /* 20 */
- .long sys_mount
- .long sys_oldumount
- .long sys_setuid16
- .long sys_getuid16
- .long sys_ni_syscall // sys_stime /* 25 */
- .long sys_ptrace
- .long sys_alarm
- .long sys_fstat
- .long sys_pause
- .long sys_utime /* 30 */
- .long sys_ni_syscall /* old stty syscall holder */
- .long sys_ni_syscall /* old gtty syscall holder */
- .long sys_access
- .long sys_nice
- .long sys_ni_syscall /* 35 */ /* old ftime syscall holder */
- .long sys_sync
- .long sys_kill
- .long sys_rename
- .long sys_mkdir
- .long sys_rmdir /* 40 */
- .long sys_dup
- .long sys_pipe
- .long sys_times
- .long sys_ni_syscall /* old prof syscall holder */
- .long sys_brk /* 45 */
- .long sys_setgid16
- .long sys_getgid16
- .long sys_ni_syscall // sys_signal
- .long sys_geteuid16
- .long sys_getegid16 /* 50 */
- .long sys_acct
- .long sys_umount /* recycled never used phys( */
- .long sys_ni_syscall /* old lock syscall holder */
- .long sys_ioctl
- .long sys_fcntl /* 55 */
- .long sys_ni_syscall /* old mpx syscall holder */
- .long sys_setpgid
- .long sys_ni_syscall /* old ulimit syscall holder */
- .long sys_ni_syscall /* old old uname syscall */
- .long sys_umask /* 60 */
- .long sys_chroot
- .long sys_ustat
- .long sys_dup2
- .long sys_getppid
- .long sys_getpgrp /* 65 */
- .long sys_setsid
- .long sys_sigaction
- .long sys_ni_syscall // sys_sgetmask
- .long sys_ni_syscall // sys_ssetmask
- .long sys_setreuid16 /* 70 */
- .long sys_setregid16
- .long sys_sigsuspend
- .long sys_ni_syscall // sys_sigpending
- .long sys_sethostname
- .long sys_setrlimit /* 75 */
- .long sys_ni_syscall // sys_old_getrlimit
- .long sys_getrusage
- .long sys_gettimeofday
- .long sys_settimeofday
- .long sys_getgroups16 /* 80 */
- .long sys_setgroups16
- .long sys_ni_syscall /* old_select slot */
- .long sys_symlink
- .long sys_lstat
- .long sys_readlink /* 85 */
- .long sys_uselib
- .long sys_swapon
- .long sys_reboot
- .long sys_ni_syscall // old_readdir
- .long sys_ni_syscall /* 90 */ /* old_mmap slot */
- .long sys_munmap
- .long sys_truncate
- .long sys_ftruncate
- .long sys_fchmod
- .long sys_fchown16 /* 95 */
- .long sys_getpriority
- .long sys_setpriority
- .long sys_ni_syscall /* old profil syscall holder */
- .long sys_statfs
- .long sys_fstatfs /* 100 */
- .long sys_ni_syscall /* ioperm for i386 */
- .long sys_socketcall
- .long sys_syslog
- .long sys_setitimer
- .long sys_getitimer /* 105 */
- .long sys_newstat
- .long sys_newlstat
- .long sys_newfstat
- .long sys_ni_syscall /* obsolete olduname( syscall */
- .long sys_ni_syscall /* iopl for i386 */ /* 110 */
- .long sys_vhangup
- .long sys_ni_syscall /* obsolete idle( syscall */
- .long sys_ni_syscall /* vm86old for i386 */
- .long sys_wait4
- .long sys_swapoff /* 115 */
- .long sys_sysinfo
- .long sys_ipc
- .long sys_fsync
- .long sys_sigreturn
- .long sys_clone /* 120 */
- .long sys_setdomainname
- .long sys_newuname
- .long sys_ni_syscall /* old "cacheflush" */
- .long sys_adjtimex
- .long sys_mprotect /* 125 */
- .long sys_sigprocmask
- .long sys_ni_syscall /* old "create_module" */
- .long sys_init_module
- .long sys_delete_module
- .long sys_ni_syscall /* old "get_kernel_syms" */
- .long sys_quotactl
- .long sys_getpgid
- .long sys_fchdir
- .long sys_bdflush
- .long sys_sysfs /* 135 */
- .long sys_personality
- .long sys_ni_syscall /* for afs_syscall */
- .long sys_setfsuid16
- .long sys_setfsgid16
- .long sys_llseek /* 140 */
- .long sys_getdents
- .long sys_select
- .long sys_flock
- .long sys_msync
- .long sys_readv /* 145 */
- .long sys_writev
- .long sys_getsid
- .long sys_fdatasync
- .long sys_sysctl
- .long sys_mlock /* 150 */
- .long sys_munlock
- .long sys_mlockall
- .long sys_munlockall
- .long sys_sched_setparam
- .long sys_sched_getparam /* 155 */
- .long sys_sched_setscheduler
- .long sys_sched_getscheduler
- .long sys_sched_yield
- .long sys_sched_get_priority_max
- .long sys_sched_get_priority_min /* 160 */
- .long sys_sched_rr_get_interval
- .long sys_nanosleep
- .long sys_mremap
- .long sys_setresuid16
- .long sys_getresuid16 /* 165 */
- .long sys_ni_syscall /* for vm86 */
- .long sys_ni_syscall /* Old sys_query_module */
- .long sys_poll
- .long sys_nfsservctl
- .long sys_setresgid16 /* 170 */
- .long sys_getresgid16
- .long sys_prctl
- .long sys_rt_sigreturn
- .long sys_rt_sigaction
- .long sys_rt_sigprocmask /* 175 */
- .long sys_rt_sigpending
- .long sys_rt_sigtimedwait
- .long sys_rt_sigqueueinfo
- .long sys_rt_sigsuspend
- .long sys_pread64 /* 180 */
- .long sys_pwrite64
- .long sys_chown16
- .long sys_getcwd
- .long sys_capget
- .long sys_capset /* 185 */
- .long sys_sigaltstack
- .long sys_sendfile
- .long sys_ni_syscall /* streams1 */
- .long sys_ni_syscall /* streams2 */
- .long sys_vfork /* 190 */
- .long sys_getrlimit
- .long sys_mmap2
- .long sys_truncate64
- .long sys_ftruncate64
- .long sys_stat64 /* 195 */
- .long sys_lstat64
- .long sys_fstat64
- .long sys_lchown
- .long sys_getuid
- .long sys_getgid /* 200 */
- .long sys_geteuid
- .long sys_getegid
- .long sys_setreuid
- .long sys_setregid
- .long sys_getgroups /* 205 */
- .long sys_setgroups
- .long sys_fchown
- .long sys_setresuid
- .long sys_getresuid
- .long sys_setresgid /* 210 */
- .long sys_getresgid
- .long sys_chown
- .long sys_setuid
- .long sys_setgid
- .long sys_setfsuid /* 215 */
- .long sys_setfsgid
- .long sys_pivot_root
- .long sys_mincore
- .long sys_madvise
- .long sys_getdents64 /* 220 */
- .long sys_fcntl64
- .long sys_ni_syscall /* reserved for TUX */
- .long sys_ni_syscall /* Reserved for Security */
- .long sys_gettid
- .long sys_readahead /* 225 */
- .long sys_setxattr
- .long sys_lsetxattr
- .long sys_fsetxattr
- .long sys_getxattr
- .long sys_lgetxattr /* 230 */
- .long sys_fgetxattr
- .long sys_listxattr
- .long sys_llistxattr
- .long sys_flistxattr
- .long sys_removexattr /* 235 */
- .long sys_lremovexattr
- .long sys_fremovexattr
- .long sys_tkill
- .long sys_sendfile64
- .long sys_futex /* 240 */
- .long sys_sched_setaffinity
- .long sys_sched_getaffinity
- .long sys_ni_syscall //sys_set_thread_area
- .long sys_ni_syscall //sys_get_thread_area
- .long sys_io_setup /* 245 */
- .long sys_io_destroy
- .long sys_io_getevents
- .long sys_io_submit
- .long sys_io_cancel
- .long sys_fadvise64 /* 250 */
- .long sys_ni_syscall
- .long sys_exit_group
- .long sys_lookup_dcookie
- .long sys_epoll_create
- .long sys_epoll_ctl /* 255 */
- .long sys_epoll_wait
- .long sys_remap_file_pages
- .long sys_set_tid_address
- .long sys_timer_create
- .long sys_timer_settime /* 260 */
- .long sys_timer_gettime
- .long sys_timer_getoverrun
- .long sys_timer_delete
- .long sys_clock_settime
- .long sys_clock_gettime /* 265 */
- .long sys_clock_getres
- .long sys_clock_nanosleep
- .long sys_statfs64
- .long sys_fstatfs64
- .long sys_tgkill /* 270 */
- .long sys_utimes
- .long sys_fadvise64_64
- .long sys_ni_syscall /* sys_vserver */
- .long sys_mbind
- .long sys_get_mempolicy
- .long sys_set_mempolicy
- .long sys_mq_open
- .long sys_mq_unlink
- .long sys_mq_timedsend
- .long sys_mq_timedreceive /* 280 */
- .long sys_mq_notify
- .long sys_mq_getsetattr
- .long sys_ni_syscall /* reserved for kexec */
- .long sys_waitid
- .long sys_ni_syscall /* 285 */ /* available */
- .long sys_add_key
- .long sys_request_key
- .long sys_keyctl
- .long sys_ioprio_set
- .long sys_ioprio_get /* 290 */
- .long sys_inotify_init
- .long sys_inotify_add_watch
- .long sys_inotify_rm_watch
- .long sys_migrate_pages
- .long sys_openat /* 295 */
- .long sys_mkdirat
- .long sys_mknodat
- .long sys_fchownat
- .long sys_futimesat
- .long sys_fstatat64 /* 300 */
- .long sys_unlinkat
- .long sys_renameat
- .long sys_linkat
- .long sys_symlinkat
- .long sys_readlinkat /* 305 */
- .long sys_fchmodat
- .long sys_faccessat
- .long sys_pselect6
- .long sys_ppoll
- .long sys_unshare /* 310 */
- .long sys_set_robust_list
- .long sys_get_robust_list
- .long sys_splice
- .long sys_sync_file_range
- .long sys_tee /* 315 */
- .long sys_vmsplice
- .long sys_move_pages
- .long sys_getcpu
- .long sys_epoll_pwait
- .long sys_utimensat /* 320 */
- .long sys_signalfd
- .long sys_timerfd_create
- .long sys_eventfd
- .long sys_fallocate
- .long sys_timerfd_settime /* 325 */
- .long sys_timerfd_gettime
- .long sys_signalfd4
- .long sys_eventfd2
- .long sys_epoll_create1
- .long sys_dup3 /* 330 */
- .long sys_pipe2
- .long sys_inotify_init1
- .long sys_preadv
- .long sys_pwritev
- .long sys_rt_tgsigqueueinfo /* 335 */
- .long sys_perf_event_open
- .long sys_setns
- syscall_table_size = (. - sys_call_table)
|