⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makecontext.s

📁 glibc 库, 不仅可以学习使用库函数,还可以学习函数的具体实现,是提高功力的好资料
💻 S
字号:
/* Create new context.   Copyright (C) 2005 Free Software Foundation, Inc.   This file is part of the GNU C Library.   The GNU C Library is free software; you can redistribute it and/or   modify it under the terms of the GNU Lesser General Public   License as published by the Free Software Foundation; either   version 2.1 of the License, or (at your option) any later version.   The GNU C Library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU   Lesser General Public License for more details.   You should have received a copy of the GNU Lesser General Public   License along with the GNU C Library; if not, write to the Free   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA   02111-1307 USA.  */#include <sysdep.h>#include "ucontext_i.h"/* void __makecontext (struct ucontext *ucp, void (*func)(), int argc, ...);  __makecontext sets up a stack and registers for context to run a given  function.  The registers are set up like this:    r4-r7: parameters 1 to 4    r8	 : uc_link from ucontext structure    pc	 : (*func) pointer    pr	 : address of exitcode    r15	 : stack pointer for func.  */	.text	.align	5ENTRY(__makecontext)	mov	#4, r3	mov.l	@(oSS_SP,r4), r1	mov.l	@(oSS_SIZE,r4), r2	add	r1, r2	cmp/gt	r6, r3	bf/s	1f	 shlr2	r2	sub	r6, r2	add	r3, r21:	shll2	r2	mov	#oR15, r0	mov.l	@(oLINK,r4), r1	mov.l	r2, @(r0,r4)	mov.l	r1, @(oR8,r4)	mov	#oPC, r0	mov.l	r5, @(r0,r4)	cmp/pl	r6	bf/s	.L1	 dt	r6	mov.l	r7, @(oR4,r4)	cmp/pl	r6	bf/s	.L1	 dt	r6	mov.l	@(0,r15), r1	mov.l	r1, @(oR5,r4)	cmp/pl	r6	bf/s	.L1	 dt	r6	mov.l	@(4,r15), r1	mov.l	r1, @(oR6,r4)	cmp/pl	r6	bf/s	.L1	 dt	r6	mov.l	@(8,r15), r1	mov.l	r1, @(oR7,r4)	mov	#12,r0.L0:	cmp/pl	r6	bf/s	.L1	 dt	r6	mov.l	@(r0,r15), r1	mov.l	r1, @r2	add	#4, r0	bra	.L0	 add	#4, r2.L1:#ifdef PIC	mova	.Lexitcode, r0#else	mov.l	.L2, r0#endif	add	#oPR, r4	rts	 mov.l	r0, @r4#ifndef PIC	.align	2.L2:	.long	.Lexitcode#endif	cfi_endproc	.align	5.Lexitcode:	tst	r8, r8	bt/s	2f	 mov	r8, r4#ifdef PIC	mova	.Lgot, r0	mov.l	.Lgot, r12	add	r0, r12	mov.l	.L3, r1	bsrf	r1.LPCS0:	 nop#else	mov.l	.L3, r1	jsr	@r1	 nop#endif2:	mov.l	.L4, r1#ifdef PIC	add	r12, r1#endif	jsr	@r1	 mov	r0, r40:	bra	0b	 nop	.align	2#ifdef PIC.Lgot:	.long	_GLOBAL_OFFSET_TABLE_.L3:	.long	__setcontext@PLT-(.LPCS0+2-(.)).L4:	.long	HIDDEN_JUMPTARGET(exit)@GOTOFF#else.L3:	.long	__setcontext.L4:	.long	HIDDEN_JUMPTARGET(exit)#endif	cfi_startprocPSEUDO_END(__makecontext)weak_alias (__makecontext, makecontext)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -