亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? entry.s

?? 底層驅(qū)動開發(fā)
?? S
?? 第 1 頁 / 共 4 頁
字號:
/* * arch/xtensa/kernel/entry.S * * Low-level exception handling * * This file is subject to the terms and conditions of the GNU General Public * License.  See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 2004-2005 by Tensilica Inc. * * Chris Zankel <chris@zankel.net> * */#include <linux/linkage.h>#include <asm/asm-offsets.h>#include <asm/processor.h>#include <asm/thread_info.h>#include <asm/uaccess.h>#include <asm/unistd.h>#include <asm/ptrace.h>#include <asm/current.h>#include <asm/pgtable.h>#include <asm/page.h>#include <asm/signal.h>#include <xtensa/coreasm.h>/* Unimplemented features. */#undef SIGNAL_HANDLING_IN_DOUBLE_EXCEPTION#undef KERNEL_STACK_OVERFLOW_CHECK#undef PREEMPTIBLE_KERNEL#undef ALLOCA_EXCEPTION_IN_IRAM/* Not well tested. * * - fast_coprocessor *//* * Macro to find first bit set in WINDOWBASE from the left + 1 * * 100....0 -> 1 * 010....0 -> 2 * 000....1 -> WSBITS */	.macro ffs_ws bit mask#if XCHAL_HAVE_NSA	nsau    \bit, \mask			# 32-WSBITS ... 31 (32 iff 0)	addi    \bit, \bit, WSBITS - 32 + 1   	# uppest bit set -> return 1#else	movi    \bit, WSBITS#if WSBITS > 16	_bltui  \mask, 0x10000, 99f	addi    \bit, \bit, -16	extui   \mask, \mask, 16, 16#endif#if WSBITS > 899:	_bltui  \mask, 0x100, 99f	addi    \bit, \bit, -8	srli    \mask, \mask, 8#endif99:	_bltui  \mask, 0x10, 99f	addi    \bit, \bit, -4	srli    \mask, \mask, 499:	_bltui  \mask, 0x4, 99f	addi    \bit, \bit, -2	srli    \mask, \mask, 299:	_bltui  \mask, 0x2, 99f	addi    \bit, \bit, -199:#endif	.endm/* ----------------- DEFAULT FIRST LEVEL EXCEPTION HANDLERS ----------------- *//* * First-level exception handler for user exceptions. * Save some special registers, extra states and all registers in the AR * register file that were in use in the user task, and jump to the common * exception code. * We save SAR (used to calculate WMASK), and WB and WS (we don't have to * save them for kernel exceptions). * * Entry condition for user_exception: * *   a0:	trashed, original value saved on stack (PT_AREG0) *   a1:	a1 *   a2:	new stack pointer, original value in depc *   a3:	dispatch table *   depc:	a2, original value saved on stack (PT_DEPC) *   excsave1:	a3 * *   PT_DEPC >= VALID_DOUBLE_EXCEPTION_ADDRESS: double exception, DEPC *	     <  VALID_DOUBLE_EXCEPTION_ADDRESS: regular exception * * Entry condition for _user_exception: * *   a0-a3 and depc have been saved to PT_AREG0...PT_AREG3 and PT_DEPC *   excsave has been restored, and *   stack pointer (a1) has been set. * * Note: _user_exception might be at an odd adress. Don't use call0..call12 */ENTRY(user_exception)	/* Save a2, a3, and depc, restore excsave_1 and set SP. */	xsr	a3, EXCSAVE_1	rsr	a0, DEPC	s32i	a1, a2, PT_AREG1	s32i	a0, a2, PT_AREG2	s32i	a3, a2, PT_AREG3	mov	a1, a2	.globl _user_exception_user_exception:	/* Save SAR and turn off single stepping */	movi	a2, 0	rsr	a3, SAR	wsr	a2, ICOUNTLEVEL	s32i	a3, a1, PT_SAR	/* Rotate ws so that the current windowbase is at bit0. */	/* Assume ws = xxwww1yyyy. Rotate ws right, so that a2 = yyyyxxwww1 */	rsr	a2, WINDOWBASE	rsr	a3, WINDOWSTART	ssr	a2	s32i	a2, a1, PT_WINDOWBASE	s32i	a3, a1, PT_WINDOWSTART	slli	a2, a3, 32-WSBITS	src	a2, a3, a2	srli	a2, a2, 32-WSBITS	s32i	a2, a1, PT_WMASK	# needed for restoring registers	/* Save only live registers. */	_bbsi.l	a2, 1, 1f	s32i	a4, a1, PT_AREG4	s32i	a5, a1, PT_AREG5	s32i	a6, a1, PT_AREG6	s32i	a7, a1, PT_AREG7	_bbsi.l	a2, 2, 1f	s32i	a8, a1, PT_AREG8	s32i	a9, a1, PT_AREG9	s32i	a10, a1, PT_AREG10	s32i	a11, a1, PT_AREG11	_bbsi.l	a2, 3, 1f	s32i	a12, a1, PT_AREG12	s32i	a13, a1, PT_AREG13	s32i	a14, a1, PT_AREG14	s32i	a15, a1, PT_AREG15	_bnei	a2, 1, 1f		# only one valid frame?	/* Only one valid frame, skip saving regs. */	j	2f	/* Save the remaining registers.	 * We have to save all registers up to the first '1' from	 * the right, except the current frame (bit 0).	 * Assume a2 is:  001001000110001	 * All regiser frames starting from the top fiel to the marked '1'	 * must be saved.	 */1:	addi	a3, a2, -1		# eliminate '1' in bit 0: yyyyxxww0	neg	a3, a3			# yyyyxxww0 -> YYYYXXWW1+1	and	a3, a3, a2		# max. only one bit is set	/* Find number of frames to save */	ffs_ws	a0, a3			# number of frames to the '1' from left	/* Store information into WMASK:	 * bits 0..3: xxx1 masked lower 4 bits of the rotated windowstart,	 * bits 4...: number of valid 4-register frames	 */	slli	a3, a0, 4		# number of frames to save in bits 8..4	extui	a2, a2, 0, 4		# mask for the first 16 registers	or	a2, a3, a2	s32i	a2, a1, PT_WMASK	# needed when we restore the reg-file	/* Save 4 registers at a time */1:	rotw	-1	s32i	a0, a5, PT_AREG_END - 16	s32i	a1, a5, PT_AREG_END - 12	s32i	a2, a5, PT_AREG_END - 8	s32i	a3, a5, PT_AREG_END - 4	addi	a0, a4, -1	addi	a1, a5, -16	_bnez	a0, 1b	/* WINDOWBASE still in SAR! */	rsr	a2, SAR			# original WINDOWBASE	movi	a3, 1	ssl	a2	sll	a3, a3	wsr	a3, WINDOWSTART		# set corresponding WINDOWSTART bit	wsr	a2, WINDOWBASE		# and WINDOWSTART	rsync	/* We are back to the original stack pointer (a1) */2:#if XCHAL_EXTRA_SA_SIZE	/* For user exceptions, save the extra state into the user's TCB.	 * Note: We must assume that xchal_extra_store_funcbody destroys a2..a15	 */	GET_CURRENT(a2,a1)	addi	a2, a2, THREAD_CP_SAVE	xchal_extra_store_funcbody#endif	/* Now, jump to the common exception handler. */	j	common_exception/* * First-level exit handler for kernel exceptions * Save special registers and the live window frame. * Note: Even though we changes the stack pointer, we don't have to do a *	 MOVSP here, as we do that when we return from the exception. *	 (See comment in the kernel exception exit code) * * Entry condition for kernel_exception: * *   a0:	trashed, original value saved on stack (PT_AREG0) *   a1:	a1 *   a2:	new stack pointer, original in DEPC *   a3:	dispatch table *   depc:	a2, original value saved on stack (PT_DEPC) *   excsave_1:	a3 * *   PT_DEPC >= VALID_DOUBLE_EXCEPTION_ADDRESS: double exception, DEPC *	     <  VALID_DOUBLE_EXCEPTION_ADDRESS: regular exception * * Entry condition for _kernel_exception: * *   a0-a3 and depc have been saved to PT_AREG0...PT_AREG3 and PT_DEPC *   excsave has been restored, and *   stack pointer (a1) has been set. * * Note: _kernel_exception might be at an odd adress. Don't use call0..call12 */ENTRY(kernel_exception)	/* Save a0, a2, a3, DEPC and set SP. */	xsr	a3, EXCSAVE_1		# restore a3, excsave_1	rsr	a0, DEPC		# get a2	s32i	a1, a2, PT_AREG1	s32i	a0, a2, PT_AREG2	s32i	a3, a2, PT_AREG3	mov	a1, a2	.globl _kernel_exception_kernel_exception:	/* Save SAR and turn off single stepping */	movi	a2, 0	rsr	a3, SAR	wsr	a2, ICOUNTLEVEL	s32i	a3, a1, PT_SAR	/* Rotate ws so that the current windowbase is at bit0. */	/* Assume ws = xxwww1yyyy. Rotate ws right, so that a2 = yyyyxxwww1 */	rsr	a2, WINDOWBASE		# don't need to save these, we only	rsr	a3, WINDOWSTART		# need shifted windowstart: windowmask	ssr	a2	slli	a2, a3, 32-WSBITS	src	a2, a3, a2	srli	a2, a2, 32-WSBITS	s32i	a2, a1, PT_WMASK	# needed for kernel_exception_exit	/* Save only the live window-frame */	_bbsi.l	a2, 1, 1f	s32i	a4, a1, PT_AREG4	s32i	a5, a1, PT_AREG5	s32i	a6, a1, PT_AREG6	s32i	a7, a1, PT_AREG7	_bbsi.l	a2, 2, 1f	s32i	a8, a1, PT_AREG8	s32i	a9, a1, PT_AREG9	s32i	a10, a1, PT_AREG10	s32i	a11, a1, PT_AREG11	_bbsi.l	a2, 3, 1f	s32i	a12, a1, PT_AREG12	s32i	a13, a1, PT_AREG13	s32i	a14, a1, PT_AREG14	s32i	a15, a1, PT_AREG151:#ifdef KERNEL_STACK_OVERFLOW_CHECK	/*  Stack overflow check, for debugging  */	extui	a2, a1, TASK_SIZE_BITS,XX	movi	a3, SIZE??	_bge	a2, a3, out_of_stack_panic#endif/* * This is the common exception handler. * We get here from the user exception handler or simply by falling through * from the kernel exception handler. * Save the remaining special registers, switch to kernel mode, and jump * to the second-level exception handler. * */common_exception:	/* Save EXCVADDR, DEBUGCAUSE, and PC, and clear LCOUNT */	rsr	a2, DEBUGCAUSE	rsr	a3, EPC_1	s32i	a2, a1, PT_DEBUGCAUSE	s32i	a3, a1, PT_PC	rsr	a3, EXCVADDR	movi	a2, 0	s32i	a3, a1, PT_EXCVADDR	xsr	a2, LCOUNT	s32i	a2, a1, PT_LCOUNT	/* It is now save to restore the EXC_TABLE_FIXUP variable. */	rsr	a0, EXCCAUSE	movi	a3, 0	rsr	a2, EXCSAVE_1	s32i	a0, a1, PT_EXCCAUSE	s32i	a3, a2, EXC_TABLE_FIXUP	/* All unrecoverable states are saved on stack, now, and a1 is valid,	 * so we can allow exceptions and interrupts (*) again.	 * Set PS(EXCM = 0, UM = 0, RING = 0, OWB = 0, WOE = 1, INTLEVEL = X)	 *	 * (*) We only allow interrupts if PS.INTLEVEL was not set to 1 before	 *     (interrupts disabled) and if this exception is not an interrupt.	 */	rsr	a3, PS	addi	a0, a0, -4	movi	a2, 1	extui	a3, a3, 0, 1		# a3 = PS.INTLEVEL[0]	moveqz	a3, a2, a0		# a3 = 1 iff interrupt exception	movi	a2, PS_WOE_MASK	or	a3, a3, a2	rsr	a0, EXCCAUSE	xsr	a3, PS	s32i	a3, a1, PT_PS		# save ps	/* Save LBEG, LEND */	rsr	a2, LBEG	rsr	a3, LEND	s32i	a2, a1, PT_LBEG	s32i	a3, a1, PT_LEND	/* Go to second-level dispatcher. Set up parameters to pass to the	 * exception handler and call the exception handler.	 */	movi	a4, exc_table	mov	a6, a1			# pass stack frame	mov	a7, a0			# pass EXCCAUSE	addx4	a4, a0, a4	l32i	a4, a4, EXC_TABLE_DEFAULT		# load handler	/* Call the second-level handler */	callx4	a4	/* Jump here for exception exit */common_exception_return:	/* Jump if we are returning from kernel exceptions. */1:	l32i	a3, a1, PT_PS	_bbsi.l	a3, PS_UM_SHIFT, 2f	j	kernel_exception_exit	/* Specific to a user exception exit:	 * We need to check some flags for signal handling and rescheduling,	 * and have to restore WB and WS, extra states, and all registers	 * in the register file that were in use in the user task.	 */2:	wsr	a3, PS		/* disable interrupts */	/* Check for signals (keep interrupts disabled while we read TI_FLAGS)	 * Note: PS.INTLEVEL = 0, PS.EXCM = 1	 */	GET_THREAD_INFO(a2,a1)	l32i	a4, a2, TI_FLAGS	/* Enable interrupts again.	 * Note: When we get here, we certainly have handled any interrupts.	 *       (Hint: There is only one user exception frame on stack)	 */	movi	a3, PS_WOE_MASK	_bbsi.l	a4, TIF_NEED_RESCHED, 3f	_bbci.l	a4, TIF_SIGPENDING, 4f#ifndef SIGNAL_HANDLING_IN_DOUBLE_EXCEPTION	l32i	a4, a1, PT_DEPC	bgeui	a4, VALID_DOUBLE_EXCEPTION_ADDRESS, 4f#endif	/* Reenable interrupts and call do_signal() */	wsr	a3, PS	movi	a4, do_signal	# int do_signal(struct pt_regs*, sigset_t*)	mov	a6, a1	movi	a7, 0	callx4	a4	j	1b3:	/* Reenable interrupts and reschedule */	wsr	a3, PS	movi	a4, schedule	# void schedule (void)	callx4	a4	j	1b	/* Restore the state of the task and return from the exception. */	/* If we are returning from a user exception, and the process	 * to run next has PT_SINGLESTEP set, we want to setup	 * ICOUNT and ICOUNTLEVEL to step one instruction.	 * PT_SINGLESTEP is set by sys_ptrace (ptrace.c)	 */4:	/* a2 holds GET_CURRENT(a2,a1)  */	l32i	a3, a2, TI_TASK	l32i	a3, a3, TASK_PTRACE	bbci.l	a3, PT_SINGLESTEP_BIT, 1f # jump if single-step flag is not set	movi	a3, -2			# PT_SINGLESTEP flag is set,	movi	a4, 1			# icountlevel of 1 means it won't	wsr	a3, ICOUNT		# start counting until after rfe	wsr	a4, ICOUNTLEVEL		# so setup icount & icountlevel.	isync1:#if XCHAL_EXTRA_SA_SIZE	/* For user exceptions, restore the extra state from the user's TCB. */	/* Note: a2 still contains GET_CURRENT(a2,a1) */	addi	a2, a2, THREAD_CP_SAVE	xchal_extra_load_funcbody	/* We must assume that xchal_extra_store_funcbody destroys	 * registers a2..a15.  FIXME, this list can eventually be	 * reduced once real register requirements of the macro are	 * finalized. */#endif /* XCHAL_EXTRA_SA_SIZE */	/* Switch to the user thread WINDOWBASE. Save SP temporarily in DEPC */	l32i	a2, a1, PT_WINDOWBASE	l32i	a3, a1, PT_WINDOWSTART	wsr	a1, DEPC		# use DEPC as temp storage	wsr	a3, WINDOWSTART		# restore WINDOWSTART	ssr	a2			# preserve user's WB in the SAR	wsr	a2, WINDOWBASE		# switch to user's saved WB	rsync	rsr	a1, DEPC		# restore stack pointer	l32i	a2, a1, PT_WMASK	# register frames saved (in bits 4...9)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一级黄| 4438x成人网最大色成网站| 色婷婷综合五月| 91麻豆精品国产自产在线| 国产午夜久久久久| 五月开心婷婷久久| 99久久免费视频.com| 欧美肥大bbwbbw高潮| 成人免费在线观看入口| 免费成人av资源网| 欧美系列一区二区| 国产精品国产三级国产aⅴ中文| 日韩国产一二三区| 日本高清不卡视频| 国产精品情趣视频| 国产精品一区二区在线观看不卡 | 国产乱码精品一区二区三区忘忧草 | 欧美日韩国产小视频在线观看| 久久综合色之久久综合| 亚洲sss视频在线视频| 91网站在线播放| 国产日产欧美精品一区二区三区| 五月激情综合婷婷| 欧美乱妇15p| 日韩精品乱码免费| 欧美日韩一区二区电影| 亚洲一区国产视频| 欧洲国产伦久久久久久久| 亚洲天堂a在线| 99国产一区二区三精品乱码| 欧美国产日韩一二三区| 从欧美一区二区三区| 久久精品在线观看| 国产91精品久久久久久久网曝门| 精品av久久707| 国产一区二区三区国产| 久久久久一区二区三区四区| 国产九色sp调教91| 欧美激情在线一区二区| 成人免费电影视频| 亚洲人吸女人奶水| 欧美影院一区二区三区| 亚洲高清视频在线| 91精选在线观看| 九色porny丨国产精品| 欧美xxxx老人做受| 国产经典欧美精品| 国产精品久久久久aaaa樱花| 成人美女在线观看| 又紧又大又爽精品一区二区| 欧美在线观看一区二区| 琪琪久久久久日韩精品| 久久一区二区三区国产精品| 国产999精品久久| 亚洲欧美视频在线观看视频| 91国偷自产一区二区三区成为亚洲经典 | 欧美成人免费网站| 粉嫩一区二区三区在线看| 亚洲欧美偷拍卡通变态| 欧美精品777| 国产精品一区三区| 亚洲欧美乱综合| 日韩一级二级三级精品视频| 国产精品一区二区久激情瑜伽| 国产精品国产三级国产aⅴ中文| 欧美午夜一区二区三区 | av一区二区久久| 图片区日韩欧美亚洲| 亚洲精品在线免费观看视频| 成人免费av资源| 日韩vs国产vs欧美| 国产精品国产精品国产专区不片| 欧美日韩免费不卡视频一区二区三区| 蜜桃av一区二区三区电影| 国产精品伦理一区二区| 欧美久久一二区| 成人精品免费看| 日产国产欧美视频一区精品| 国产精品伦理在线| 欧美va日韩va| 欧美视频一区二区在线观看| 国产老妇另类xxxxx| 亚洲成人动漫一区| 日韩久久一区二区| 久久久一区二区三区捆绑**| 欧美日本韩国一区二区三区视频 | 91女人视频在线观看| 日本成人在线看| **性色生活片久久毛片| 日韩午夜精品电影| 欧洲一区在线观看| 成人激情av网| 国产曰批免费观看久久久| 亚洲蜜桃精久久久久久久| 久久综合久久综合久久| 欧美夫妻性生活| 欧美日韩五月天| 91麻豆蜜桃一区二区三区| 国产乱人伦精品一区二区在线观看 | 久久99九九99精品| 亚洲成人动漫精品| 夜夜嗨av一区二区三区四季av| 国产欧美精品一区| 久久久影院官网| 久久综合九色综合97_久久久| 欧美电影影音先锋| 欧美情侣在线播放| 欧美日韩亚洲丝袜制服| 欧美日韩一区二区三区不卡| 色丁香久综合在线久综合在线观看| 粉嫩av一区二区三区粉嫩| 国产在线不卡一区| 国产专区欧美精品| 国产精品99久久久久久宅男| 国产在线精品国自产拍免费| 国产一区在线观看视频| 国产又粗又猛又爽又黄91精品| 毛片一区二区三区| 久久99久久99精品免视看婷婷 | 久久久久久久久免费| 久久综合久久综合久久| 久久婷婷国产综合精品青草| 精品国产乱码久久| 精品国产乱子伦一区| 精品av综合导航| 国产精品久久久久久久久晋中| 国产精品视频免费| 亚洲男人的天堂在线观看| 一区二区三区四区不卡在线| 亚洲综合另类小说| 肉色丝袜一区二区| 免费视频最近日韩| 国产精品2024| 91视频国产资源| 欧美日韩在线直播| 精品成人一区二区| 国产精品美女久久久久久 | 国产精品丝袜一区| 亚洲精品午夜久久久| 午夜激情久久久| 精品一区二区三区免费观看| 国产高清在线观看免费不卡| 色综合久久中文字幕综合网| 欧美男人的天堂一二区| 26uuu亚洲| 亚洲激情综合网| 狠狠v欧美v日韩v亚洲ⅴ| www.欧美日韩国产在线| 精品视频在线免费看| 久久综合久久99| 亚洲愉拍自拍另类高清精品| 另类小说图片综合网| bt欧美亚洲午夜电影天堂| 欧美日韩国产免费一区二区| 久久久久久久久岛国免费| 一区二区三区欧美视频| 黄页视频在线91| 在线观看国产精品网站| 欧美极品另类videosde| 日日夜夜免费精品| 成人av资源在线观看| 91精品国产综合久久精品app | 欧美电影在线免费观看| 亚洲国产精品ⅴa在线观看| 亚洲愉拍自拍另类高清精品| 国产寡妇亲子伦一区二区| 91精品中文字幕一区二区三区| 国产日韩欧美麻豆| 秋霞影院一区二区| 一本大道av伊人久久综合| 26uuu国产一区二区三区| 亚洲一卡二卡三卡四卡五卡| 国产激情91久久精品导航| 制服.丝袜.亚洲.另类.中文| 成人免费在线视频| 国产成人免费在线观看| 欧美一区二区三区四区在线观看| **欧美大码日韩| 从欧美一区二区三区| 精品国产第一区二区三区观看体验| 一区二区三区欧美| av不卡一区二区三区| 久久久久久**毛片大全| 日一区二区三区| 欧美日韩不卡一区二区| 日韩一区在线免费观看| 成人午夜碰碰视频| 久久精品一区二区| 国产一区二区三区日韩| 日韩美女视频在线| 日韩在线a电影| 欧美日韩高清一区二区三区| 亚洲永久精品国产| 91麻豆国产精品久久| 国产精品成人免费在线| 国产成人高清视频| 国产三级一区二区| 国产精品中文欧美| 国产亚洲污的网站| 国产精品小仙女|