xref: /netbsd-src/sys/arch/vax/include/profile.h (revision ce0bb6e8d2e560ecacbe865a848624f94498063b)
1 /*	$NetBSD: profile.h,v 1.2 1995/03/30 20:43:04 ragge Exp $ */
2 /*
3  * Copyright (c) 1995 Ludd, University of Lule}, Sweden.
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright
12  *    notice, this list of conditions and the following disclaimer in the
13  *    documentation and/or other materials provided with the distribution.
14  * 3. All advertising materials mentioning features or use of this software
15  *    must display the following acknowledgement:
16  *     This product includes software developed at Ludd, University of Lule}.
17  * 4. The name of the author may not be used to endorse or promote products
18  *    derived from this software without specific prior written permission
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32  /* All bugs are subject to removal without further notice */
33 
34 
35 #define _MCOUNT_DECL static inline void _mcount
36 
37 #define MCOUNT \
38 extern void mcount() asm("mcount");                                     \
39 void									\
40 mcount()                                                                \
41 {									\
42 	int selfpc, frompcindex;					\
43         /*                                                              \
44          * find the return address for mcount,                          \
45          * and the return address for mcount's caller.                  \
46          *                                                              \
47          * selfpc = pc pushed by mcount call                            \
48          */                                                             \
49 	asm("movl 0x10(fp),%0" : "=r" (selfpc));			\
50         /*                                                              \
51          * frompcindex = pc pushed by call into self.                   \
52          */                                                             \
53 	asm("movl 0xc(fp),%0;movl 0x10(%0),%0" : "=r" (frompcindex));	\
54         _mcount(frompcindex, selfpc);                                   \
55 }
56 
57 #ifdef KERNEL
58 /*
59  * Note that we assume splhigh() and splx() cannot call mcount()
60  * recursively.
61  */
62 #define MCOUNT_ENTER    s = splhigh()
63 #define MCOUNT_EXIT     splx(s)
64 #endif /* KERNEL */
65 
66