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

📄 mcount.s

📁 操作系统SunOS 4.1.3版本的源码
💻 S
字号:
	.seg	"data"	.asciz	"@(#)mcount.s 1.1 92/07/30 Copyr 1987 Sun Micro"	.align	4	.seg	"text"#include <machine/asm_linkage.h>!	Copyright (c) 1987 by Sun Microsystems, Inc.!!	Cast (in order of appearance)!#define	CELL_PP		%o0#define SCRATCH		%o1#define	PROF_P		%o5#define CELL_P		%o4#define CNTB_P		%o4#define CNTB		%o3#define CNTRS_P		%o2#define CNTRS		%o5	.seg	"data"	.align	4_profiling:	.word	3_countbase:	.word	0_numctrs:	.word	0_cntrs:	.word	0	.seg	"text"	.proc	0	.global mcountmcount:!	No save or restore.  We know that the previous routine just!	did that.  We just don't use any of the i-registers.!!	The address of the pointer to the struct cnt for the calling!	routine was left for us in %o0.!!	We have to be real careful with register usage.  Notice that!	several of the register definitions above overlap.!	sethi	%hi(_profiling),PROF_P	ld	[PROF_P+%lo(_profiling)],SCRATCH	tst	SCRATCH	bne	$1				!check for recursion	mov	1,SCRATCH	st	SCRATCH,[PROF_P+%lo(_profiling)]	!set profiling = 1	ld	[CELL_PP],CELL_P	tst	CELL_P				!indirect cell ptr initialized?	bne,a	$2	ld	[CELL_P],SCRATCH		!load cell if we branch!!	if we follow this path, we don't need the contents of!	CELL_P anymore.!	sethi	%hi(_countbase),CNTB_P		!cell ptr not initialized	ld	[CNTB_P+%lo(_countbase)],CNTB	tst	CNTB				!did we run monstartup?	be,a	$1				!exit	st	%g0,[PROF_P+%lo(_profiling)]	!reset profiling if we branch	sethi	%hi(_cntrs),CNTRS_P	ld	[CNTRS_P+%lo(_cntrs)],CNTRS	!get _cntrs!!	we've just trashed our pointer to _profiling.  But we only follow!	this path once per routine.!	sethi	%hi(_numctrs),SCRATCH		!get _numctrs	ld	[SCRATCH+%lo(_numctrs)],SCRATCH	inc	CNTRS				!increment _cntrs	cmp	CNTRS,SCRATCH			!do we have any more space	bg	$4	st	CNTRS,[CNTRS_P+%lo(_cntrs)]	!store whether or not we branch	st	%o7,[CNTB]			!store return address	inc	4,CNTB	st	CNTB,[CELL_PP]			!initalize cell pointer	mov	1,SCRATCH	st	SCRATCH,[CNTB]			!put 1 into cell	inc	4,CNTB	st	CNTB,[CNTB_P+%lo(_countbase)]	!increment countbase	sethi	%hi(_profiling),PROF_P	st	%g0,[PROF_P+%lo(_profiling)]	!reset profiling	retl	nop	$2:		inc	SCRATCH				!cell ptr was initialized	st	SCRATCH,[CELL_P]		!increment cell	st	%g0,[PROF_P+%lo(_profiling)]	!reset profiling	$1:	retl	nop$4:	.seg	"data1"$5:	.ascii	"mcount\72 counter overflow\12\0"	.seg	"text"	save	%sp,-SA(MINFRAME),%sp	set	$5,%o1	mov	26,%o2	call	_write,3	mov	2,%o0	ret	restore

⌨️ 快捷键说明

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