/* entry.S: FR-V entry1*2* Copyright (C) 2003 Red Hat, Inc. All Rights Reserved.3* Written by David Howells ([email protected])4*5* This program is free software; you can redistribute it and/or6* modify it under the terms of the GNU General Public License7* as published by the Free Software Foundation; either version8* 2 of the License, or (at your option) any later version.9*10*11* Entry to the kernel is "interesting":12* (1) There are no stack pointers, not even for the kernel13* (2) General Registers should not be clobbered14* (3) There are no kernel-only data registers15* (4) Since all addressing modes are wrt to a General Register, no global16* variables can be reached17*18* We deal with this by declaring that we shall kill GR28 on entering the19* kernel from userspace20*21* However, since break interrupts can interrupt the CPU even when PSR.ET==0,22* they can't rely on GR28 to be anything useful, and so need to clobber a23* separate register (GR31). Break interrupts are managed in break.S24*25* GR29 _is_ saved, and holds the current task pointer globally26*27*/2829#include <linux/linkage.h>30#include <asm/thread_info.h>31#include <asm/setup.h>32#include <asm/segment.h>33#include <asm/ptrace.h>34#include <asm/errno.h>35#include <asm/cache.h>36#include <asm/spr-regs.h>3738#define nr_syscalls ((syscall_table_size)/4)3940.section .text..entry41.balign 44243.macro LEDS val44# sethi.p %hi(0xe1200004),gr3045# setlo %lo(0xe1200004),gr3046# setlos #~\val,gr3147# st gr31,@(gr30,gr0)48# sethi.p %hi(0xffc00100),gr3049# setlo %lo(0xffc00100),gr3050# sth gr0,@(gr30,gr0)51# membar52.endm5354.macro LEDS3255# not gr31,gr3156# sethi.p %hi(0xe1200004),gr3057# setlo %lo(0xe1200004),gr3058# st.p gr31,@(gr30,gr0)59# srli gr31,#16,gr3160# sethi.p %hi(0xffc00100),gr3061# setlo %lo(0xffc00100),gr3062# sth gr31,@(gr30,gr0)63# membar64.endm6566###############################################################################67#68# entry point for External interrupts received whilst executing userspace code69#70###############################################################################71.globl __entry_uspace_external_interrupt72.type __entry_uspace_external_interrupt,@function73__entry_uspace_external_interrupt:74LEDS 0x620075sethi.p %hi(__kernel_frame0_ptr),gr2876setlo %lo(__kernel_frame0_ptr),gr2877ldi @(gr28,#0),gr287879# handle h/w single-step through exceptions80sti gr0,@(gr28,#REG__STATUS)8182.globl __entry_uspace_external_interrupt_reentry83__entry_uspace_external_interrupt_reentry:84LEDS 0x62018586setlos #REG__END,gr3087dcpl gr28,gr30,#08889# finish building the exception frame90sti sp, @(gr28,#REG_SP)91stdi gr2, @(gr28,#REG_GR(2))92stdi gr4, @(gr28,#REG_GR(4))93stdi gr6, @(gr28,#REG_GR(6))94stdi gr8, @(gr28,#REG_GR(8))95stdi gr10,@(gr28,#REG_GR(10))96stdi gr12,@(gr28,#REG_GR(12))97stdi gr14,@(gr28,#REG_GR(14))98stdi gr16,@(gr28,#REG_GR(16))99stdi gr18,@(gr28,#REG_GR(18))100stdi gr20,@(gr28,#REG_GR(20))101stdi gr22,@(gr28,#REG_GR(22))102stdi gr24,@(gr28,#REG_GR(24))103stdi gr26,@(gr28,#REG_GR(26))104sti gr0, @(gr28,#REG_GR(28))105sti gr29,@(gr28,#REG_GR(29))106stdi.p gr30,@(gr28,#REG_GR(30))107108# set up the kernel stack pointer109ori gr28,0,sp110111movsg tbr ,gr20112movsg psr ,gr22113movsg pcsr,gr21114movsg isr ,gr23115movsg ccr ,gr24116movsg cccr,gr25117movsg lr ,gr26118movsg lcr ,gr27119120setlos.p #-1,gr4121andi gr22,#PSR_PS,gr5 /* try to rebuild original PSR value */122andi.p gr22,#~(PSR_PS|PSR_S),gr6123slli gr5,#1,gr5124or gr6,gr5,gr5125andi gr5,#~PSR_ET,gr5126127sti gr20,@(gr28,#REG_TBR)128sti gr21,@(gr28,#REG_PC)129sti gr5 ,@(gr28,#REG_PSR)130sti gr23,@(gr28,#REG_ISR)131stdi gr24,@(gr28,#REG_CCR)132stdi gr26,@(gr28,#REG_LR)133sti gr4 ,@(gr28,#REG_SYSCALLNO)134135movsg iacc0h,gr4136movsg iacc0l,gr5137stdi gr4,@(gr28,#REG_IACC0)138139movsg gner0,gr4140movsg gner1,gr5141stdi.p gr4,@(gr28,#REG_GNER0)142143# interrupts start off fully disabled in the interrupt handler144subcc gr0,gr0,gr0,icc2 /* set Z and clear C */145146# set up kernel global registers147sethi.p %hi(__kernel_current_task),gr5148setlo %lo(__kernel_current_task),gr5149sethi.p %hi(_gp),gr16150setlo %lo(_gp),gr16151ldi @(gr5,#0),gr29152ldi.p @(gr29,#4),gr15 ; __current_thread_info = current->thread_info153154# make sure we (the kernel) get div-zero and misalignment exceptions155setlos #ISR_EDE|ISR_DTT_DIVBYZERO|ISR_EMAM_EXCEPTION,gr5156movgs gr5,isr157158# switch to the kernel trap table159sethi.p %hi(__entry_kerneltrap_table),gr6160setlo %lo(__entry_kerneltrap_table),gr6161movgs gr6,tbr162163# set the return address164sethi.p %hi(__entry_return_from_user_interrupt),gr4165setlo %lo(__entry_return_from_user_interrupt),gr4166movgs gr4,lr167168# raise the minimum interrupt priority to 15 (NMI only) and enable exceptions169movsg psr,gr4170171ori gr4,#PSR_PIL_14,gr4172movgs gr4,psr173ori gr4,#PSR_PIL_14|PSR_ET,gr4174movgs gr4,psr175176LEDS 0x6202177bra do_IRQ178179.size __entry_uspace_external_interrupt,.-__entry_uspace_external_interrupt180181###############################################################################182#183# entry point for External interrupts received whilst executing kernel code184# - on arriving here, the following registers should already be set up:185# GR15 - current thread_info struct pointer186# GR16 - kernel GP-REL pointer187# GR29 - current task struct pointer188# TBR - kernel trap vector table189# ISR - kernel's preferred integer controls190#191###############################################################################192.globl __entry_kernel_external_interrupt193.type __entry_kernel_external_interrupt,@function194__entry_kernel_external_interrupt:195LEDS 0x6210196// sub sp,gr15,gr31197// LEDS32198199# set up the stack pointer200or.p sp,gr0,gr30201subi sp,#REG__END,sp202sti gr30,@(sp,#REG_SP)203204# handle h/w single-step through exceptions205sti gr0,@(sp,#REG__STATUS)206207.globl __entry_kernel_external_interrupt_reentry208__entry_kernel_external_interrupt_reentry:209LEDS 0x6211210211# set up the exception frame212setlos #REG__END,gr30213dcpl sp,gr30,#0214215sti.p gr28,@(sp,#REG_GR(28))216ori sp,0,gr28217218# finish building the exception frame219stdi gr2,@(gr28,#REG_GR(2))220stdi gr4,@(gr28,#REG_GR(4))221stdi gr6,@(gr28,#REG_GR(6))222stdi gr8,@(gr28,#REG_GR(8))223stdi gr10,@(gr28,#REG_GR(10))224stdi gr12,@(gr28,#REG_GR(12))225stdi gr14,@(gr28,#REG_GR(14))226stdi gr16,@(gr28,#REG_GR(16))227stdi gr18,@(gr28,#REG_GR(18))228stdi gr20,@(gr28,#REG_GR(20))229stdi gr22,@(gr28,#REG_GR(22))230stdi gr24,@(gr28,#REG_GR(24))231stdi gr26,@(gr28,#REG_GR(26))232sti gr29,@(gr28,#REG_GR(29))233stdi.p gr30,@(gr28,#REG_GR(30))234235# note virtual interrupts will be fully enabled upon return236subicc gr0,#1,gr0,icc2 /* clear Z, set C */237238movsg tbr ,gr20239movsg psr ,gr22240movsg pcsr,gr21241movsg isr ,gr23242movsg ccr ,gr24243movsg cccr,gr25244movsg lr ,gr26245movsg lcr ,gr27246247setlos.p #-1,gr4248andi gr22,#PSR_PS,gr5 /* try to rebuild original PSR value */249andi.p gr22,#~(PSR_PS|PSR_S),gr6250slli gr5,#1,gr5251or gr6,gr5,gr5252andi.p gr5,#~PSR_ET,gr5253254# set CCCR.CC3 to Undefined to abort atomic-modify completion inside the kernel255# - for an explanation of how it works, see: Documentation/frv/atomic-ops.txt256andi gr25,#~0xc0,gr25257258sti gr20,@(gr28,#REG_TBR)259sti gr21,@(gr28,#REG_PC)260sti gr5 ,@(gr28,#REG_PSR)261sti gr23,@(gr28,#REG_ISR)262stdi gr24,@(gr28,#REG_CCR)263stdi gr26,@(gr28,#REG_LR)264sti gr4 ,@(gr28,#REG_SYSCALLNO)265266movsg iacc0h,gr4267movsg iacc0l,gr5268stdi gr4,@(gr28,#REG_IACC0)269270movsg gner0,gr4271movsg gner1,gr5272stdi.p gr4,@(gr28,#REG_GNER0)273274# interrupts start off fully disabled in the interrupt handler275subcc gr0,gr0,gr0,icc2 /* set Z and clear C */276277# set the return address278sethi.p %hi(__entry_return_from_kernel_interrupt),gr4279setlo %lo(__entry_return_from_kernel_interrupt),gr4280movgs gr4,lr281282# clear power-saving mode flags283movsg hsr0,gr4284andi gr4,#~HSR0_PDM,gr4285movgs gr4,hsr0286287# raise the minimum interrupt priority to 15 (NMI only) and enable exceptions288movsg psr,gr4289ori gr4,#PSR_PIL_14,gr4290movgs gr4,psr291ori gr4,#PSR_ET,gr4292movgs gr4,psr293294LEDS 0x6212295bra do_IRQ296297.size __entry_kernel_external_interrupt,.-__entry_kernel_external_interrupt298299###############################################################################300#301# deal with interrupts that were actually virtually disabled302# - we need to really disable them, flag the fact and return immediately303# - if you change this, you must alter break.S also304#305###############################################################################306.balign L1_CACHE_BYTES307.globl __entry_kernel_external_interrupt_virtually_disabled308.type __entry_kernel_external_interrupt_virtually_disabled,@function309__entry_kernel_external_interrupt_virtually_disabled:310movsg psr,gr30311andi gr30,#~PSR_PIL,gr30312ori gr30,#PSR_PIL_14,gr30 ; debugging interrupts only313movgs gr30,psr314subcc gr0,gr0,gr0,icc2 ; leave Z set, clear C315rett #0316317.size __entry_kernel_external_interrupt_virtually_disabled,.-__entry_kernel_external_interrupt_virtually_disabled318319###############################################################################320#321# deal with re-enablement of interrupts that were pending when virtually re-enabled322# - set ICC2.C, re-enable the real interrupts and return323# - we can clear ICC2.Z because we shouldn't be here if it's not 0 [due to TIHI]324# - if you change this, you must alter break.S also325#326###############################################################################327.balign L1_CACHE_BYTES328.globl __entry_kernel_external_interrupt_virtual_reenable329.type __entry_kernel_external_interrupt_virtual_reenable,@function330__entry_kernel_external_interrupt_virtual_reenable:331movsg psr,gr30332andi gr30,#~PSR_PIL,gr30 ; re-enable interrupts333movgs gr30,psr334subicc gr0,#1,gr0,icc2 ; clear Z, set C335rett #0336337.size __entry_kernel_external_interrupt_virtual_reenable,.-__entry_kernel_external_interrupt_virtual_reenable338339###############################################################################340#341# entry point for Software and Progam interrupts generated whilst executing userspace code342#343###############################################################################344.globl __entry_uspace_softprog_interrupt345.type __entry_uspace_softprog_interrupt,@function346.globl __entry_uspace_handle_mmu_fault347__entry_uspace_softprog_interrupt:348LEDS 0x6000349#ifdef CONFIG_MMU350movsg ear0,gr28351__entry_uspace_handle_mmu_fault:352movgs gr28,scr2353#endif354sethi.p %hi(__kernel_frame0_ptr),gr28355setlo %lo(__kernel_frame0_ptr),gr28356ldi @(gr28,#0),gr28357358# handle h/w single-step through exceptions359sti gr0,@(gr28,#REG__STATUS)360361.globl __entry_uspace_softprog_interrupt_reentry362__entry_uspace_softprog_interrupt_reentry:363LEDS 0x6001364365setlos #REG__END,gr30366dcpl gr28,gr30,#0367368# set up the kernel stack pointer369sti.p sp,@(gr28,#REG_SP)370ori gr28,0,sp371sti gr0,@(gr28,#REG_GR(28))372373stdi gr20,@(gr28,#REG_GR(20))374stdi gr22,@(gr28,#REG_GR(22))375376movsg tbr,gr20377movsg pcsr,gr21378movsg psr,gr22379380sethi.p %hi(__entry_return_from_user_exception),gr23381setlo %lo(__entry_return_from_user_exception),gr23382383bra __entry_common384385.size __entry_uspace_softprog_interrupt,.-__entry_uspace_softprog_interrupt386387# single-stepping was disabled on entry to a TLB handler that then faulted388#ifdef CONFIG_MMU389.globl __entry_uspace_handle_mmu_fault_sstep390__entry_uspace_handle_mmu_fault_sstep:391movgs gr28,scr2392sethi.p %hi(__kernel_frame0_ptr),gr28393setlo %lo(__kernel_frame0_ptr),gr28394ldi @(gr28,#0),gr28395396# flag single-step re-enablement397sti gr0,@(gr28,#REG__STATUS)398bra __entry_uspace_softprog_interrupt_reentry399#endif400401402###############################################################################403#404# entry point for Software and Progam interrupts generated whilst executing kernel code405#406###############################################################################407.globl __entry_kernel_softprog_interrupt408.type __entry_kernel_softprog_interrupt,@function409__entry_kernel_softprog_interrupt:410LEDS 0x6004411412#ifdef CONFIG_MMU413movsg ear0,gr30414movgs gr30,scr2415#endif416417.globl __entry_kernel_handle_mmu_fault418__entry_kernel_handle_mmu_fault:419# set up the stack pointer420subi sp,#REG__END,sp421sti sp,@(sp,#REG_SP)422sti sp,@(sp,#REG_SP-4)423andi sp,#~7,sp424425# handle h/w single-step through exceptions426sti gr0,@(sp,#REG__STATUS)427428.globl __entry_kernel_softprog_interrupt_reentry429__entry_kernel_softprog_interrupt_reentry:430LEDS 0x6005431432setlos #REG__END,gr30433dcpl sp,gr30,#0434435# set up the exception frame436sti.p gr28,@(sp,#REG_GR(28))437ori sp,0,gr28438439stdi gr20,@(gr28,#REG_GR(20))440stdi gr22,@(gr28,#REG_GR(22))441442ldi @(sp,#REG_SP),gr22 /* reconstruct the old SP */443addi gr22,#REG__END,gr22444sti gr22,@(sp,#REG_SP)445446# set CCCR.CC3 to Undefined to abort atomic-modify completion inside the kernel447# - for an explanation of how it works, see: Documentation/frv/atomic-ops.txt448movsg cccr,gr20449andi gr20,#~0xc0,gr20450movgs gr20,cccr451452movsg tbr,gr20453movsg pcsr,gr21454movsg psr,gr22455456sethi.p %hi(__entry_return_from_kernel_exception),gr23457setlo %lo(__entry_return_from_kernel_exception),gr23458bra __entry_common459460.size __entry_kernel_softprog_interrupt,.-__entry_kernel_softprog_interrupt461462# single-stepping was disabled on entry to a TLB handler that then faulted463#ifdef CONFIG_MMU464.globl __entry_kernel_handle_mmu_fault_sstep465__entry_kernel_handle_mmu_fault_sstep:466# set up the stack pointer467subi sp,#REG__END,sp468sti sp,@(sp,#REG_SP)469sti sp,@(sp,#REG_SP-4)470andi sp,#~7,sp471472# flag single-step re-enablement473sethi #REG__STATUS_STEP,gr30474sti gr30,@(sp,#REG__STATUS)475bra __entry_kernel_softprog_interrupt_reentry476#endif477478479###############################################################################480#481# the rest of the kernel entry point code482# - on arriving here, the following registers should be set up:483# GR1 - kernel stack pointer484# GR7 - syscall number (trap 0 only)485# GR8-13 - syscall args (trap 0 only)486# GR20 - saved TBR487# GR21 - saved PC488# GR22 - saved PSR489# GR23 - return handler address490# GR28 - exception frame on stack491# SCR2 - saved EAR0 where applicable (clobbered by ICI & ICEF insns on FR451)492# PSR - PSR.S 1, PSR.ET 0493#494###############################################################################495.globl __entry_common496.type __entry_common,@function497__entry_common:498LEDS 0x6008499500# finish building the exception frame501stdi gr2,@(gr28,#REG_GR(2))502stdi gr4,@(gr28,#REG_GR(4))503stdi gr6,@(gr28,#REG_GR(6))504stdi gr8,@(gr28,#REG_GR(8))505stdi gr10,@(gr28,#REG_GR(10))506stdi gr12,@(gr28,#REG_GR(12))507stdi gr14,@(gr28,#REG_GR(14))508stdi gr16,@(gr28,#REG_GR(16))509stdi gr18,@(gr28,#REG_GR(18))510stdi gr24,@(gr28,#REG_GR(24))511stdi gr26,@(gr28,#REG_GR(26))512sti gr29,@(gr28,#REG_GR(29))513stdi gr30,@(gr28,#REG_GR(30))514515movsg lcr ,gr27516movsg lr ,gr26517movgs gr23,lr518movsg cccr,gr25519movsg ccr ,gr24520movsg isr ,gr23521522setlos.p #-1,gr4523andi gr22,#PSR_PS,gr5 /* try to rebuild original PSR value */524andi.p gr22,#~(PSR_PS|PSR_S),gr6525slli gr5,#1,gr5526or gr6,gr5,gr5527andi gr5,#~PSR_ET,gr5528529sti gr20,@(gr28,#REG_TBR)530sti gr21,@(gr28,#REG_PC)531sti gr5 ,@(gr28,#REG_PSR)532sti gr23,@(gr28,#REG_ISR)533stdi gr24,@(gr28,#REG_CCR)534stdi gr26,@(gr28,#REG_LR)535sti gr4 ,@(gr28,#REG_SYSCALLNO)536537movsg iacc0h,gr4538movsg iacc0l,gr5539stdi gr4,@(gr28,#REG_IACC0)540541movsg gner0,gr4542movsg gner1,gr5543stdi.p gr4,@(gr28,#REG_GNER0)544545# set up virtual interrupt disablement546subicc gr0,#1,gr0,icc2 /* clear Z flag, set C flag */547548# set up kernel global registers549sethi.p %hi(__kernel_current_task),gr5550setlo %lo(__kernel_current_task),gr5551sethi.p %hi(_gp),gr16552setlo %lo(_gp),gr16553ldi @(gr5,#0),gr29554ldi @(gr29,#4),gr15 ; __current_thread_info = current->thread_info555556# switch to the kernel trap table557sethi.p %hi(__entry_kerneltrap_table),gr6558setlo %lo(__entry_kerneltrap_table),gr6559movgs gr6,tbr560561# make sure we (the kernel) get div-zero and misalignment exceptions562setlos #ISR_EDE|ISR_DTT_DIVBYZERO|ISR_EMAM_EXCEPTION,gr5563movgs gr5,isr564565# clear power-saving mode flags566movsg hsr0,gr4567andi gr4,#~HSR0_PDM,gr4568movgs gr4,hsr0569570# multiplex again using old TBR as a guide571setlos.p #TBR_TT,gr3572sethi %hi(__entry_vector_table),gr6573and.p gr20,gr3,gr5574setlo %lo(__entry_vector_table),gr6575srli gr5,#2,gr5576ld @(gr5,gr6),gr5577578LEDS 0x6009579jmpl @(gr5,gr0)580581582.size __entry_common,.-__entry_common583584###############################################################################585#586# handle instruction MMU fault587#588###############################################################################589#ifdef CONFIG_MMU590.globl __entry_insn_mmu_fault591__entry_insn_mmu_fault:592LEDS 0x6010593setlos #0,gr8594movsg esr0,gr9595movsg scr2,gr10596597# now that we've accessed the exception regs, we can enable exceptions598movsg psr,gr4599ori gr4,#PSR_ET,gr4600movgs gr4,psr601602sethi.p %hi(do_page_fault),gr5603setlo %lo(do_page_fault),gr5604jmpl @(gr5,gr0) ; call do_page_fault(0,esr0,ear0)605#endif606607608###############################################################################609#610# handle instruction access error611#612###############################################################################613.globl __entry_insn_access_error614__entry_insn_access_error:615LEDS 0x6011616sethi.p %hi(insn_access_error),gr5617setlo %lo(insn_access_error),gr5618movsg esfr1,gr8619movsg epcr0,gr9620movsg esr0,gr10621622# now that we've accessed the exception regs, we can enable exceptions623movsg psr,gr4624ori gr4,#PSR_ET,gr4625movgs gr4,psr626jmpl @(gr5,gr0) ; call insn_access_error(esfr1,epcr0,esr0)627628###############################################################################629#630# handle various instructions of dubious legality631#632###############################################################################633.globl __entry_unsupported_trap634.globl __entry_illegal_instruction635.globl __entry_privileged_instruction636.globl __entry_debug_exception637__entry_unsupported_trap:638subi gr21,#4,gr21639sti gr21,@(gr28,#REG_PC)640__entry_illegal_instruction:641__entry_privileged_instruction:642__entry_debug_exception:643LEDS 0x6012644sethi.p %hi(illegal_instruction),gr5645setlo %lo(illegal_instruction),gr5646movsg esfr1,gr8647movsg epcr0,gr9648movsg esr0,gr10649650# now that we've accessed the exception regs, we can enable exceptions651movsg psr,gr4652ori gr4,#PSR_ET,gr4653movgs gr4,psr654jmpl @(gr5,gr0) ; call ill_insn(esfr1,epcr0,esr0)655656###############################################################################657#658# handle atomic operation emulation for userspace659#660###############################################################################661.globl __entry_atomic_op662__entry_atomic_op:663LEDS 0x6012664sethi.p %hi(atomic_operation),gr5665setlo %lo(atomic_operation),gr5666movsg esfr1,gr8667movsg epcr0,gr9668movsg esr0,gr10669670# now that we've accessed the exception regs, we can enable exceptions671movsg psr,gr4672ori gr4,#PSR_ET,gr4673movgs gr4,psr674jmpl @(gr5,gr0) ; call atomic_operation(esfr1,epcr0,esr0)675676###############################################################################677#678# handle media exception679#680###############################################################################681.globl __entry_media_exception682__entry_media_exception:683LEDS 0x6013684sethi.p %hi(media_exception),gr5685setlo %lo(media_exception),gr5686movsg msr0,gr8687movsg msr1,gr9688689# now that we've accessed the exception regs, we can enable exceptions690movsg psr,gr4691ori gr4,#PSR_ET,gr4692movgs gr4,psr693jmpl @(gr5,gr0) ; call media_excep(msr0,msr1)694695###############################################################################696#697# handle data MMU fault698# handle data DAT fault (write-protect exception)699#700###############################################################################701#ifdef CONFIG_MMU702.globl __entry_data_mmu_fault703__entry_data_mmu_fault:704.globl __entry_data_dat_fault705__entry_data_dat_fault:706LEDS 0x6014707setlos #1,gr8708movsg esr0,gr9709movsg scr2,gr10 ; saved EAR0710711# now that we've accessed the exception regs, we can enable exceptions712movsg psr,gr4713ori gr4,#PSR_ET,gr4714movgs gr4,psr715716sethi.p %hi(do_page_fault),gr5717setlo %lo(do_page_fault),gr5718jmpl @(gr5,gr0) ; call do_page_fault(1,esr0,ear0)719#endif720721###############################################################################722#723# handle data and instruction access exceptions724#725###############################################################################726.globl __entry_insn_access_exception727.globl __entry_data_access_exception728__entry_insn_access_exception:729__entry_data_access_exception:730LEDS 0x6016731sethi.p %hi(memory_access_exception),gr5732setlo %lo(memory_access_exception),gr5733movsg esr0,gr8734movsg scr2,gr9 ; saved EAR0735movsg epcr0,gr10736737# now that we've accessed the exception regs, we can enable exceptions738movsg psr,gr4739ori gr4,#PSR_ET,gr4740movgs gr4,psr741jmpl @(gr5,gr0) ; call memory_access_error(esr0,ear0,epcr0)742743###############################################################################744#745# handle data access error746#747###############################################################################748.globl __entry_data_access_error749__entry_data_access_error:750LEDS 0x6016751sethi.p %hi(data_access_error),gr5752setlo %lo(data_access_error),gr5753movsg esfr1,gr8754movsg esr15,gr9755movsg ear15,gr10756757# now that we've accessed the exception regs, we can enable exceptions758movsg psr,gr4759ori gr4,#PSR_ET,gr4760movgs gr4,psr761jmpl @(gr5,gr0) ; call data_access_error(esfr1,esr15,ear15)762763###############################################################################764#765# handle data store error766#767###############################################################################768.globl __entry_data_store_error769__entry_data_store_error:770LEDS 0x6017771sethi.p %hi(data_store_error),gr5772setlo %lo(data_store_error),gr5773movsg esfr1,gr8774movsg esr14,gr9775776# now that we've accessed the exception regs, we can enable exceptions777movsg psr,gr4778ori gr4,#PSR_ET,gr4779movgs gr4,psr780jmpl @(gr5,gr0) ; call data_store_error(esfr1,esr14)781782###############################################################################783#784# handle division exception785#786###############################################################################787.globl __entry_division_exception788__entry_division_exception:789LEDS 0x6018790sethi.p %hi(division_exception),gr5791setlo %lo(division_exception),gr5792movsg esfr1,gr8793movsg esr0,gr9794movsg isr,gr10795796# now that we've accessed the exception regs, we can enable exceptions797movsg psr,gr4798ori gr4,#PSR_ET,gr4799movgs gr4,psr800jmpl @(gr5,gr0) ; call div_excep(esfr1,esr0,isr)801802###############################################################################803#804# handle compound exception805#806###############################################################################807.globl __entry_compound_exception808__entry_compound_exception:809LEDS 0x6019810sethi.p %hi(compound_exception),gr5811setlo %lo(compound_exception),gr5812movsg esfr1,gr8813movsg esr0,gr9814movsg esr14,gr10815movsg esr15,gr11816movsg msr0,gr12817movsg msr1,gr13818819# now that we've accessed the exception regs, we can enable exceptions820movsg psr,gr4821ori gr4,#PSR_ET,gr4822movgs gr4,psr823jmpl @(gr5,gr0) ; call comp_excep(esfr1,esr0,esr14,esr15,msr0,msr1)824825###############################################################################826#827# handle interrupts and NMIs828#829###############################################################################830.globl __entry_do_IRQ831__entry_do_IRQ:832LEDS 0x6020833834# we can enable exceptions835movsg psr,gr4836ori gr4,#PSR_ET,gr4837movgs gr4,psr838bra do_IRQ839840.globl __entry_do_NMI841__entry_do_NMI:842LEDS 0x6021843844# we can enable exceptions845movsg psr,gr4846ori gr4,#PSR_ET,gr4847movgs gr4,psr848bra do_NMI849850###############################################################################851#852# the return path for a newly forked child process853# - __switch_to() saved the old current pointer in GR8 for us854#855###############################################################################856.globl ret_from_fork857ret_from_fork:858LEDS 0x6100859call schedule_tail860861# fork & co. return 0 to child862setlos.p #0,gr8863bra __syscall_exit864865###################################################################################################866#867# Return to user mode is not as complex as all this looks,868# but we want the default path for a system call return to869# go as quickly as possible which is why some of this is870# less clear than it otherwise should be.871#872###################################################################################################873.balign L1_CACHE_BYTES874.globl system_call875system_call:876LEDS 0x6101877movsg psr,gr4 ; enable exceptions878ori gr4,#PSR_ET,gr4879movgs gr4,psr880881sti gr7,@(gr28,#REG_SYSCALLNO)882sti.p gr8,@(gr28,#REG_ORIG_GR8)883884subicc gr7,#nr_syscalls,gr0,icc0885bnc icc0,#0,__syscall_badsys886887ldi @(gr15,#TI_FLAGS),gr4888andicc gr4,#_TIF_SYSCALL_TRACE,gr0,icc0889bne icc0,#0,__syscall_trace_entry890891__syscall_call:892slli.p gr7,#2,gr7893sethi %hi(sys_call_table),gr5894setlo %lo(sys_call_table),gr5895ld @(gr5,gr7),gr4896calll @(gr4,gr0)897898899###############################################################################900#901# return to interrupted process902#903###############################################################################904__syscall_exit:905LEDS 0x6300906907sti gr8,@(gr28,#REG_GR(8)) ; save return value908909# rebuild saved psr - execve will change it for init/main.c910ldi @(gr28,#REG_PSR),gr22911srli gr22,#1,gr5912andi.p gr22,#~PSR_PS,gr22913andi gr5,#PSR_PS,gr5914or gr5,gr22,gr22915ori gr22,#PSR_S,gr22916917# keep current PSR in GR23918movsg psr,gr23919920# make sure we don't miss an interrupt setting need_resched or sigpending between921# sampling and the RETT922ori gr23,#PSR_PIL_14,gr23923movgs gr23,psr924925ldi @(gr15,#TI_FLAGS),gr4926sethi.p %hi(_TIF_ALLWORK_MASK),gr5927setlo %lo(_TIF_ALLWORK_MASK),gr5928andcc gr4,gr5,gr0,icc0929bne icc0,#0,__syscall_exit_work930931# restore all registers and return932__entry_return_direct:933LEDS 0x6301934935andi gr22,#~PSR_ET,gr22936movgs gr22,psr937938ldi @(gr28,#REG_ISR),gr23939lddi @(gr28,#REG_CCR),gr24940lddi @(gr28,#REG_LR) ,gr26941ldi @(gr28,#REG_PC) ,gr21942ldi @(gr28,#REG_TBR),gr20943944movgs gr20,tbr945movgs gr21,pcsr946movgs gr23,isr947movgs gr24,ccr948movgs gr25,cccr949movgs gr26,lr950movgs gr27,lcr951952lddi @(gr28,#REG_GNER0),gr4953movgs gr4,gner0954movgs gr5,gner1955956lddi @(gr28,#REG_IACC0),gr4957movgs gr4,iacc0h958movgs gr5,iacc0l959960lddi @(gr28,#REG_GR(4)) ,gr4961lddi @(gr28,#REG_GR(6)) ,gr6962lddi @(gr28,#REG_GR(8)) ,gr8963lddi @(gr28,#REG_GR(10)),gr10964lddi @(gr28,#REG_GR(12)),gr12965lddi @(gr28,#REG_GR(14)),gr14966lddi @(gr28,#REG_GR(16)),gr16967lddi @(gr28,#REG_GR(18)),gr18968lddi @(gr28,#REG_GR(20)),gr20969lddi @(gr28,#REG_GR(22)),gr22970lddi @(gr28,#REG_GR(24)),gr24971lddi @(gr28,#REG_GR(26)),gr26972ldi @(gr28,#REG_GR(29)),gr29973lddi @(gr28,#REG_GR(30)),gr30974975# check to see if a debugging return is required976LEDS 0x67f0977movsg ccr,gr2978ldi @(gr28,#REG__STATUS),gr3979andicc gr3,#REG__STATUS_STEP,gr0,icc0980bne icc0,#0,__entry_return_singlestep981movgs gr2,ccr982983ldi @(gr28,#REG_SP) ,sp984lddi @(gr28,#REG_GR(2)) ,gr2985ldi @(gr28,#REG_GR(28)),gr28986987LEDS 0x67fe988// movsg pcsr,gr31989// LEDS32990991#if 0992# store the current frame in the workram on the FR451993movgs gr28,scr2994sethi.p %hi(0xfe800000),gr28995setlo %lo(0xfe800000),gr28996997stdi gr2,@(gr28,#REG_GR(2))998stdi gr4,@(gr28,#REG_GR(4))999stdi gr6,@(gr28,#REG_GR(6))1000stdi gr8,@(gr28,#REG_GR(8))1001stdi gr10,@(gr28,#REG_GR(10))1002stdi gr12,@(gr28,#REG_GR(12))1003stdi gr14,@(gr28,#REG_GR(14))1004stdi gr16,@(gr28,#REG_GR(16))1005stdi gr18,@(gr28,#REG_GR(18))1006stdi gr24,@(gr28,#REG_GR(24))1007stdi gr26,@(gr28,#REG_GR(26))1008sti gr29,@(gr28,#REG_GR(29))1009stdi gr30,@(gr28,#REG_GR(30))10101011movsg tbr ,gr301012sti gr30,@(gr28,#REG_TBR)1013movsg pcsr,gr301014sti gr30,@(gr28,#REG_PC)1015movsg psr ,gr301016sti gr30,@(gr28,#REG_PSR)1017movsg isr ,gr301018sti gr30,@(gr28,#REG_ISR)1019movsg ccr ,gr301020movsg cccr,gr311021stdi gr30,@(gr28,#REG_CCR)1022movsg lr ,gr301023movsg lcr ,gr311024stdi gr30,@(gr28,#REG_LR)1025sti gr0 ,@(gr28,#REG_SYSCALLNO)1026movsg scr2,gr281027#endif10281029rett #010301031# return via break.S1032__entry_return_singlestep:1033movgs gr2,ccr1034lddi @(gr28,#REG_GR(2)) ,gr21035ldi @(gr28,#REG_SP) ,sp1036ldi @(gr28,#REG_GR(28)),gr281037LEDS 0x67ff1038break1039.globl __entry_return_singlestep_breaks_here1040__entry_return_singlestep_breaks_here:1041nop104210431044###############################################################################1045#1046# return to a process interrupted in kernel space1047# - we need to consider preemption if that is enabled1048#1049###############################################################################1050.balign L1_CACHE_BYTES1051__entry_return_from_kernel_exception:1052LEDS 0x63021053movsg psr,gr231054ori gr23,#PSR_PIL_14,gr231055movgs gr23,psr1056bra __entry_return_direct10571058.balign L1_CACHE_BYTES1059__entry_return_from_kernel_interrupt:1060LEDS 0x63031061movsg psr,gr231062ori gr23,#PSR_PIL_14,gr231063movgs gr23,psr10641065#ifdef CONFIG_PREEMPT1066ldi @(gr15,#TI_PRE_COUNT),gr51067subicc gr5,#0,gr0,icc01068beq icc0,#0,__entry_return_direct10691070__entry_preempt_need_resched:1071ldi @(gr15,#TI_FLAGS),gr41072andicc gr4,#_TIF_NEED_RESCHED,gr0,icc01073beq icc0,#1,__entry_return_direct10741075setlos #PREEMPT_ACTIVE,gr51076sti gr5,@(gr15,#TI_FLAGS)10771078andi gr23,#~PSR_PIL,gr231079movgs gr23,psr10801081call schedule1082sti gr0,@(gr15,#TI_PRE_COUNT)10831084movsg psr,gr231085ori gr23,#PSR_PIL_14,gr231086movgs gr23,psr1087bra __entry_preempt_need_resched1088#else1089bra __entry_return_direct1090#endif109110921093###############################################################################1094#1095# perform work that needs to be done immediately before resumption1096#1097###############################################################################1098.globl __entry_return_from_user_exception1099.balign L1_CACHE_BYTES1100__entry_return_from_user_exception:1101LEDS 0x650111021103__entry_resume_userspace:1104# make sure we don't miss an interrupt setting need_resched or sigpending between1105# sampling and the RETT1106movsg psr,gr231107ori gr23,#PSR_PIL_14,gr231108movgs gr23,psr11091110__entry_return_from_user_interrupt:1111LEDS 0x64021112ldi @(gr15,#TI_FLAGS),gr41113sethi.p %hi(_TIF_WORK_MASK),gr51114setlo %lo(_TIF_WORK_MASK),gr51115andcc gr4,gr5,gr0,icc01116beq icc0,#1,__entry_return_direct11171118__entry_work_pending:1119LEDS 0x64041120andicc gr4,#_TIF_NEED_RESCHED,gr0,icc01121beq icc0,#1,__entry_work_notifysig11221123__entry_work_resched:1124LEDS 0x64081125movsg psr,gr231126andi gr23,#~PSR_PIL,gr231127movgs gr23,psr1128call schedule1129movsg psr,gr231130ori gr23,#PSR_PIL_14,gr231131movgs gr23,psr11321133LEDS 0x64011134ldi @(gr15,#TI_FLAGS),gr41135sethi.p %hi(_TIF_WORK_MASK),gr51136setlo %lo(_TIF_WORK_MASK),gr51137andcc gr4,gr5,gr0,icc01138beq icc0,#1,__entry_return_direct1139andicc gr4,#_TIF_NEED_RESCHED,gr0,icc01140bne icc0,#1,__entry_work_resched11411142__entry_work_notifysig:1143LEDS 0x64101144ori.p gr4,#0,gr81145call do_notify_resume1146bra __entry_resume_userspace11471148# perform syscall entry tracing1149__syscall_trace_entry:1150LEDS 0x63201151call syscall_trace_entry11521153lddi.p @(gr28,#REG_GR(8)) ,gr81154ori gr8,#0,gr7 ; syscall_trace_entry() returned new syscallno1155lddi @(gr28,#REG_GR(10)),gr101156lddi.p @(gr28,#REG_GR(12)),gr1211571158subicc gr7,#nr_syscalls,gr0,icc01159bnc icc0,#0,__syscall_badsys1160bra __syscall_call11611162# perform syscall exit tracing1163__syscall_exit_work:1164LEDS 0x63401165andicc gr4,#_TIF_SYSCALL_TRACE,gr0,icc01166beq icc0,#1,__entry_work_pending11671168movsg psr,gr231169andi gr23,#~PSR_PIL,gr23 ; could let syscall_trace_exit() call schedule()1170movgs gr23,psr11711172call syscall_trace_exit1173bra __entry_resume_userspace11741175__syscall_badsys:1176LEDS 0x63801177setlos #-ENOSYS,gr81178sti gr8,@(gr28,#REG_GR(8)) ; save return value1179bra __entry_resume_userspace118011811182###############################################################################1183#1184# syscall vector table1185#1186###############################################################################1187.section .rodata1188ALIGN1189.globl sys_call_table1190sys_call_table:1191.long sys_restart_syscall /* 0 - old "setup()" system call, used for restarting */1192.long sys_exit1193.long sys_fork1194.long sys_read1195.long sys_write1196.long sys_open /* 5 */1197.long sys_close1198.long sys_waitpid1199.long sys_creat1200.long sys_link1201.long sys_unlink /* 10 */1202.long sys_execve1203.long sys_chdir1204.long sys_time1205.long sys_mknod1206.long sys_chmod /* 15 */1207.long sys_lchown161208.long sys_ni_syscall /* old break syscall holder */1209.long sys_stat1210.long sys_lseek1211.long sys_getpid /* 20 */1212.long sys_mount1213.long sys_oldumount1214.long sys_setuid161215.long sys_getuid161216.long sys_ni_syscall // sys_stime /* 25 */1217.long sys_ptrace1218.long sys_alarm1219.long sys_fstat1220.long sys_pause1221.long sys_utime /* 30 */1222.long sys_ni_syscall /* old stty syscall holder */1223.long sys_ni_syscall /* old gtty syscall holder */1224.long sys_access1225.long sys_nice1226.long sys_ni_syscall /* 35 */ /* old ftime syscall holder */1227.long sys_sync1228.long sys_kill1229.long sys_rename1230.long sys_mkdir1231.long sys_rmdir /* 40 */1232.long sys_dup1233.long sys_pipe1234.long sys_times1235.long sys_ni_syscall /* old prof syscall holder */1236.long sys_brk /* 45 */1237.long sys_setgid161238.long sys_getgid161239.long sys_ni_syscall // sys_signal1240.long sys_geteuid161241.long sys_getegid16 /* 50 */1242.long sys_acct1243.long sys_umount /* recycled never used phys( */1244.long sys_ni_syscall /* old lock syscall holder */1245.long sys_ioctl1246.long sys_fcntl /* 55 */1247.long sys_ni_syscall /* old mpx syscall holder */1248.long sys_setpgid1249.long sys_ni_syscall /* old ulimit syscall holder */1250.long sys_ni_syscall /* old old uname syscall */1251.long sys_umask /* 60 */1252.long sys_chroot1253.long sys_ustat1254.long sys_dup21255.long sys_getppid1256.long sys_getpgrp /* 65 */1257.long sys_setsid1258.long sys_sigaction1259.long sys_ni_syscall // sys_sgetmask1260.long sys_ni_syscall // sys_ssetmask1261.long sys_setreuid16 /* 70 */1262.long sys_setregid161263.long sys_sigsuspend1264.long sys_ni_syscall // sys_sigpending1265.long sys_sethostname1266.long sys_setrlimit /* 75 */1267.long sys_ni_syscall // sys_old_getrlimit1268.long sys_getrusage1269.long sys_gettimeofday1270.long sys_settimeofday1271.long sys_getgroups16 /* 80 */1272.long sys_setgroups161273.long sys_ni_syscall /* old_select slot */1274.long sys_symlink1275.long sys_lstat1276.long sys_readlink /* 85 */1277.long sys_uselib1278.long sys_swapon1279.long sys_reboot1280.long sys_ni_syscall // old_readdir1281.long sys_ni_syscall /* 90 */ /* old_mmap slot */1282.long sys_munmap1283.long sys_truncate1284.long sys_ftruncate1285.long sys_fchmod1286.long sys_fchown16 /* 95 */1287.long sys_getpriority1288.long sys_setpriority1289.long sys_ni_syscall /* old profil syscall holder */1290.long sys_statfs1291.long sys_fstatfs /* 100 */1292.long sys_ni_syscall /* ioperm for i386 */1293.long sys_socketcall1294.long sys_syslog1295.long sys_setitimer1296.long sys_getitimer /* 105 */1297.long sys_newstat1298.long sys_newlstat1299.long sys_newfstat1300.long sys_ni_syscall /* obsolete olduname( syscall */1301.long sys_ni_syscall /* iopl for i386 */ /* 110 */1302.long sys_vhangup1303.long sys_ni_syscall /* obsolete idle( syscall */1304.long sys_ni_syscall /* vm86old for i386 */1305.long sys_wait41306.long sys_swapoff /* 115 */1307.long sys_sysinfo1308.long sys_ipc1309.long sys_fsync1310.long sys_sigreturn1311.long sys_clone /* 120 */1312.long sys_setdomainname1313.long sys_newuname1314.long sys_ni_syscall /* old "cacheflush" */1315.long sys_adjtimex1316.long sys_mprotect /* 125 */1317.long sys_sigprocmask1318.long sys_ni_syscall /* old "create_module" */1319.long sys_init_module1320.long sys_delete_module1321.long sys_ni_syscall /* old "get_kernel_syms" */1322.long sys_quotactl1323.long sys_getpgid1324.long sys_fchdir1325.long sys_bdflush1326.long sys_sysfs /* 135 */1327.long sys_personality1328.long sys_ni_syscall /* for afs_syscall */1329.long sys_setfsuid161330.long sys_setfsgid161331.long sys_llseek /* 140 */1332.long sys_getdents1333.long sys_select1334.long sys_flock1335.long sys_msync1336.long sys_readv /* 145 */1337.long sys_writev1338.long sys_getsid1339.long sys_fdatasync1340.long sys_sysctl1341.long sys_mlock /* 150 */1342.long sys_munlock1343.long sys_mlockall1344.long sys_munlockall1345.long sys_sched_setparam1346.long sys_sched_getparam /* 155 */1347.long sys_sched_setscheduler1348.long sys_sched_getscheduler1349.long sys_sched_yield1350.long sys_sched_get_priority_max1351.long sys_sched_get_priority_min /* 160 */1352.long sys_sched_rr_get_interval1353.long sys_nanosleep1354.long sys_mremap1355.long sys_setresuid161356.long sys_getresuid16 /* 165 */1357.long sys_ni_syscall /* for vm86 */1358.long sys_ni_syscall /* Old sys_query_module */1359.long sys_poll1360.long sys_nfsservctl1361.long sys_setresgid16 /* 170 */1362.long sys_getresgid161363.long sys_prctl1364.long sys_rt_sigreturn1365.long sys_rt_sigaction1366.long sys_rt_sigprocmask /* 175 */1367.long sys_rt_sigpending1368.long sys_rt_sigtimedwait1369.long sys_rt_sigqueueinfo1370.long sys_rt_sigsuspend1371.long sys_pread64 /* 180 */1372.long sys_pwrite641373.long sys_chown161374.long sys_getcwd1375.long sys_capget1376.long sys_capset /* 185 */1377.long sys_sigaltstack1378.long sys_sendfile1379.long sys_ni_syscall /* streams1 */1380.long sys_ni_syscall /* streams2 */1381.long sys_vfork /* 190 */1382.long sys_getrlimit1383.long sys_mmap21384.long sys_truncate641385.long sys_ftruncate641386.long sys_stat64 /* 195 */1387.long sys_lstat641388.long sys_fstat641389.long sys_lchown1390.long sys_getuid1391.long sys_getgid /* 200 */1392.long sys_geteuid1393.long sys_getegid1394.long sys_setreuid1395.long sys_setregid1396.long sys_getgroups /* 205 */1397.long sys_setgroups1398.long sys_fchown1399.long sys_setresuid1400.long sys_getresuid1401.long sys_setresgid /* 210 */1402.long sys_getresgid1403.long sys_chown1404.long sys_setuid1405.long sys_setgid1406.long sys_setfsuid /* 215 */1407.long sys_setfsgid1408.long sys_pivot_root1409.long sys_mincore1410.long sys_madvise1411.long sys_getdents64 /* 220 */1412.long sys_fcntl641413.long sys_ni_syscall /* reserved for TUX */1414.long sys_ni_syscall /* Reserved for Security */1415.long sys_gettid1416.long sys_readahead /* 225 */1417.long sys_setxattr1418.long sys_lsetxattr1419.long sys_fsetxattr1420.long sys_getxattr1421.long sys_lgetxattr /* 230 */1422.long sys_fgetxattr1423.long sys_listxattr1424.long sys_llistxattr1425.long sys_flistxattr1426.long sys_removexattr /* 235 */1427.long sys_lremovexattr1428.long sys_fremovexattr1429.long sys_tkill1430.long sys_sendfile641431.long sys_futex /* 240 */1432.long sys_sched_setaffinity1433.long sys_sched_getaffinity1434.long sys_ni_syscall //sys_set_thread_area1435.long sys_ni_syscall //sys_get_thread_area1436.long sys_io_setup /* 245 */1437.long sys_io_destroy1438.long sys_io_getevents1439.long sys_io_submit1440.long sys_io_cancel1441.long sys_fadvise64 /* 250 */1442.long sys_ni_syscall1443.long sys_exit_group1444.long sys_lookup_dcookie1445.long sys_epoll_create1446.long sys_epoll_ctl /* 255 */1447.long sys_epoll_wait1448.long sys_remap_file_pages1449.long sys_set_tid_address1450.long sys_timer_create1451.long sys_timer_settime /* 260 */1452.long sys_timer_gettime1453.long sys_timer_getoverrun1454.long sys_timer_delete1455.long sys_clock_settime1456.long sys_clock_gettime /* 265 */1457.long sys_clock_getres1458.long sys_clock_nanosleep1459.long sys_statfs641460.long sys_fstatfs641461.long sys_tgkill /* 270 */1462.long sys_utimes1463.long sys_fadvise64_641464.long sys_ni_syscall /* sys_vserver */1465.long sys_mbind1466.long sys_get_mempolicy1467.long sys_set_mempolicy1468.long sys_mq_open1469.long sys_mq_unlink1470.long sys_mq_timedsend1471.long sys_mq_timedreceive /* 280 */1472.long sys_mq_notify1473.long sys_mq_getsetattr1474.long sys_ni_syscall /* reserved for kexec */1475.long sys_waitid1476.long sys_ni_syscall /* 285 */ /* available */1477.long sys_add_key1478.long sys_request_key1479.long sys_keyctl1480.long sys_ioprio_set1481.long sys_ioprio_get /* 290 */1482.long sys_inotify_init1483.long sys_inotify_add_watch1484.long sys_inotify_rm_watch1485.long sys_migrate_pages1486.long sys_openat /* 295 */1487.long sys_mkdirat1488.long sys_mknodat1489.long sys_fchownat1490.long sys_futimesat1491.long sys_fstatat64 /* 300 */1492.long sys_unlinkat1493.long sys_renameat1494.long sys_linkat1495.long sys_symlinkat1496.long sys_readlinkat /* 305 */1497.long sys_fchmodat1498.long sys_faccessat1499.long sys_pselect61500.long sys_ppoll1501.long sys_unshare /* 310 */1502.long sys_set_robust_list1503.long sys_get_robust_list1504.long sys_splice1505.long sys_sync_file_range1506.long sys_tee /* 315 */1507.long sys_vmsplice1508.long sys_move_pages1509.long sys_getcpu1510.long sys_epoll_pwait1511.long sys_utimensat /* 320 */1512.long sys_signalfd1513.long sys_timerfd_create1514.long sys_eventfd1515.long sys_fallocate1516.long sys_timerfd_settime /* 325 */1517.long sys_timerfd_gettime1518.long sys_signalfd41519.long sys_eventfd21520.long sys_epoll_create11521.long sys_dup3 /* 330 */1522.long sys_pipe21523.long sys_inotify_init11524.long sys_preadv1525.long sys_pwritev1526.long sys_rt_tgsigqueueinfo /* 335 */1527.long sys_perf_event_open1528.long sys_setns15291530syscall_table_size = (. - sys_call_table)153115321533