Files
Arquivotheca.SunOS-4.1.4/sys/sun4m/debug/asm_linkage.h
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

85 lines
1.8 KiB
C

/* @(#)asm_linkage.h 1.1 94/10/31 SMI */
/*
* Copyright (c) 1987 by Sun Microsystems, Inc.
*/
#ifndef _REG_
#include "reg.h"
#endif
/*
* A stack frame looks like:
*
* %fp->| |
* |-------------------------------|
* | Locals, temps, saved floats |
* |-------------------------------|
* | outgoing parameters past 6 |
* |-------------------------------|-\
* | 6 words for callee to dump | |
* | register arguments | |
* |-------------------------------| > minimum stack frame
* | One word struct-ret address | |
* |-------------------------------| |
* | 16 words to save IN and | |
* %sp->| LOCAL register on overflow | |
* |-------------------------------|-/
*/
/*
* constants defining a stack frame.
*/
#define WINDOWSIZE (16*4)
#define ARGPUSHSIZE (6*4) /* size of arg dump area */
#define ARGPUSH (WINDOWSIZE+4) /* arg dump area offset */
#define MINFRAME (WINDOWSIZE+ARGPUSHSIZE+8) /* min frame */
/*
* Entry macros for assembler subroutines.
* NAME prefixes the underscore before a symbol.
* ENTRY provides a way to insert the calls to mcount for profiling.
* RTENTRY is similar to the above but provided for run-time routines
* whose names should not be prefixed with an underscore.
*/
#define NAME(x) _/**/x
#ifdef GPROF
#define ENTRY(x) \
.global NAME(x); \
NAME(x): \
mov %i7, %g1; \
call mcount; \
save %sp, -MINFRAME, %sp; \
restore ;
#define ENTRY2(x,y) \
.global NAME(x), NAME(y); \
NAME(x): ; \
NAME(y): \
mov %i7, %g1; \
call mcount; \
save %sp, -MINFRAME, %sp;
restore ;
#define RTENTRY(x) \
.global x; x: ; \
mov %i7, %g1; \
call mcount; \
save %sp, -MINFRAME, %sp; \
restore ;
#else GPROF
#define ENTRY(x) \
.global NAME(x); \
NAME(x):
#define ENTRY2(x,y) \
ENTRY(x) \
ENTRY(y)
#define RTENTRY(x) \
.global x; x:
#endif GPROF