📄 defs.h
字号:
/* * Copyright (c) 1990 The Regents of the University of California. * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that the above copyright notice and this paragraph are * duplicated in all such forms and that any documentation, * advertising materials, and other materials related to such * distribution and use acknowledge that the software was developed * by the University of California, Berkeley. The name of the * University may not be used to endorse or promote products derived * from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */#include "pcc_prefix.s"#define BLANK#define BANNER(str) BLANK .VERSION str#define ENTRY(Name) BLANK M_ENTRY (Name,PROF_/**/Name)#define ENTRYC(Name) BLANK M_ENTRYC(Name,PROF_/**/Name)#define EXIT(Name) BLANK M_EXIT (Name,PROF_/**/Name)#define EXITC(Name) BLANK M_EXITC (Name,PROF_/**/Name)#if 0#define TEXT_SEGMENT \ .SPACE $TEXT$ !\ .SUBSPA $CODE$#define RO_SEGMENT \ .SPACE $TEXT$ !\ .SUBSPA $lit$#define DATA_SEGMENT \ .SPACE $PRIVATE$ !\ .SUBSPA $data$#define BSS_SEGMENT \ .SPACE $PRIVATE$ !\ .SUBSPA $bss$#else#define TEXT_SEGMENT .text#define RO_SEGMENT .rodata#define DATA_SEGMENT .data#define BSS_SEGMENT .bss#endif#ifdef PROF;; All four argument registers are saved into caller save registers; and restored after the call to _mcount. This is possible because; the mcount routine does not modify them, so we can. Mcount takes; 3 arguments; the first argument is the incoming 'rp', the second; is the starting address of the profiled routine, and the third is; the address of the PROF label (which is where mcount stores the; profile data).;#define M_ENTRY(name,prof) \ TEXT_SEGMENT !\ .label name !\ .PROC !\ .CALLINFO CALLER,SAVE_RP !\ .ENTRY !\ stw rp,-20(sp) !\ ldo 48(sp),sp !\ or arg0,r0,r19 !\ or arg1,r0,r20 !\ or arg2,r0,r21 !\ or arg3,r0,r22 !\ or rp,r0,arg0 !\ ldil L%name,r1 !\ ldo R%name(r1),arg1 !\ addil L%prof-$global$,dp !\ bl _mcount,rp !\ ldo R%prof-$global$(r1),arg2 !\ ldw -68(sp),rp !\ ldo -48(sp),sp !\ or r19,r0,arg0 !\ or r20,r0,arg1 !\ or r21,r0,arg2 !\ or r22,r0,arg3 !\#define M_ENTRYC(name,prof) \ TEXT_SEGMENT !\ .label name !\ .PROC !\ .CALLINFO CALLER,SAVE_RP !\ .ENTRY !\ stw rp,-20(sp) !\ ldo 128(sp),sp !\ or arg0,r0,r19 !\ or arg1,r0,r20 !\ or arg2,r0,r21 !\ or arg3,r0,r22 !\ or rp,r0,arg0 !\ ldil L%name,r1 !\ ldo R%name(r1),arg1 !\ addil L%prof-$global$,dp !\ bl _mcount,rp !\ ldo R%prof-$global$(r1),arg2 !\ ldw -148(sp),rp !\ or r19,r0,arg0 !\ or r20,r0,arg1 !\ or r21,r0,arg2 !\ or r22,r0,arg3 !\;; The HPUX profiler uses a word for each entrypoint to store the profiling; information. The setup code passes the address to the _mcount routine.; The EXIT macro defines a label (PROF_foo), and a word of storage.;#define M_EXIT(name,prof) \ bv,n r0(rp) !\ .EXIT !\ .PROCEND !\ .EXPORT name,ENTRY !\ DATA_SEGMENT !\ .label prof !\ .WORD 0 !\ .IMPORT $global$,DATA !\ .IMPORT _mcount,CODE#define M_EXITC(name,prof) \ bv r0(rp) !\ ldo -128(sp),sp !\ .EXIT !\ .PROCEND !\ .EXPORT name,ENTRY !\ DATA_SEGMENT !\ .label prof !\ .WORD 0 !\ .IMPORT $global$,DATA !\ .IMPORT _mcount,CODE#else /* NOT profiling */#define M_ENTRY(name,prof) \ TEXT_SEGMENT !\ .label name !\ .PROC !\ .CALLINFO !\ .ENTRY#define M_ENTRYC(name,prof) \ TEXT_SEGMENT !\ .label name !\ .PROC !\ .CALLINFO CALLER,SAVE_RP !\ .ENTRY !\ stw rp,-20(sp) !\ ldo 128(sp),sp#define M_EXIT(name,prof) \ bv,n r0(rp) !\ .EXIT !\ .PROCEND !\ .EXPORT name,ENTRY#define M_EXITC(name,prof) \ ldw -148(sp),rp !\ bv r0(rp) !\ ldo -128(sp),sp !\ .EXIT !\ .PROCEND !\ .EXPORT name,ENTRY#define ENTRY(Name) BLANK M_ENTRY (Name,PROF_/**/Name)#define ENTRYC(Name) BLANK M_ENTRYC(Name,PROF_/**/Name)#define EXIT(Name) BLANK M_EXIT (Name,PROF_/**/Name)#define EXITC(Name) BLANK M_EXITC (Name,PROF_/**/Name)#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -