xref: /freebsd-src/sys/riscv/include/profile.h (revision 2ff63af9b88c7413b7d71715b5532625752a248e)
18d7e7a98SRuslan Bukin /*-
2796df753SPedro F. Giffuni  * SPDX-License-Identifier: MIT-CMU
3796df753SPedro F. Giffuni  *
48d7e7a98SRuslan Bukin  * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
58d7e7a98SRuslan Bukin  * All rights reserved.
68d7e7a98SRuslan Bukin  *
78d7e7a98SRuslan Bukin  * Author: Chris G. Demetriou
88d7e7a98SRuslan Bukin  *
98d7e7a98SRuslan Bukin  * Permission to use, copy, modify and distribute this software and
108d7e7a98SRuslan Bukin  * its documentation is hereby granted, provided that both the copyright
118d7e7a98SRuslan Bukin  * notice and this permission notice appear in all copies of the
128d7e7a98SRuslan Bukin  * software, derivative works or modified versions, and any portions
138d7e7a98SRuslan Bukin  * thereof, and that both notices appear in supporting documentation.
148d7e7a98SRuslan Bukin  *
158d7e7a98SRuslan Bukin  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
168d7e7a98SRuslan Bukin  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
178d7e7a98SRuslan Bukin  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
188d7e7a98SRuslan Bukin  *
198d7e7a98SRuslan Bukin  * Carnegie Mellon requests users of this software to return to
208d7e7a98SRuslan Bukin  *
218d7e7a98SRuslan Bukin  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
228d7e7a98SRuslan Bukin  *  School of Computer Science
238d7e7a98SRuslan Bukin  *  Carnegie Mellon University
248d7e7a98SRuslan Bukin  *  Pittsburgh PA 15213-3890
258d7e7a98SRuslan Bukin  *
268d7e7a98SRuslan Bukin  * any improvements or extensions that they make and grant Carnegie the
278d7e7a98SRuslan Bukin  * rights to redistribute these changes.
288d7e7a98SRuslan Bukin  *
298d7e7a98SRuslan Bukin  *	from: NetBSD: profile.h,v 1.9 1997/04/06 08:47:37 cgd Exp
308d7e7a98SRuslan Bukin  *	from: FreeBSD: src/sys/alpha/include/profile.h,v 1.4 1999/12/29
318d7e7a98SRuslan Bukin  */
328d7e7a98SRuslan Bukin 
338d7e7a98SRuslan Bukin #ifndef _MACHINE_PROFILE_H_
348d7e7a98SRuslan Bukin #define	_MACHINE_PROFILE_H_
358d7e7a98SRuslan Bukin 
368d7e7a98SRuslan Bukin #define	FUNCTION_ALIGNMENT	32
378d7e7a98SRuslan Bukin 
388d7e7a98SRuslan Bukin typedef u_long	fptrdiff_t;
398d7e7a98SRuslan Bukin 
408d7e7a98SRuslan Bukin #ifdef _KERNEL
418d7e7a98SRuslan Bukin 
428d7e7a98SRuslan Bukin #include <machine/cpufunc.h>
438d7e7a98SRuslan Bukin 
448d7e7a98SRuslan Bukin #define	_MCOUNT_DECL	void mcount
458d7e7a98SRuslan Bukin #define	MCOUNT
468d7e7a98SRuslan Bukin 
478d7e7a98SRuslan Bukin #define	MCOUNT_DECL(s)	register_t s;
488d7e7a98SRuslan Bukin #define	MCOUNT_ENTER(s)	{s = intr_disable(); }
498d7e7a98SRuslan Bukin #define	MCOUNT_EXIT(s)	{intr_restore(s); }
508d7e7a98SRuslan Bukin 
518d7e7a98SRuslan Bukin void bintr(void);
528d7e7a98SRuslan Bukin void btrap(void);
538d7e7a98SRuslan Bukin void eintr(void);
548d7e7a98SRuslan Bukin void user(void);
558d7e7a98SRuslan Bukin 
568d7e7a98SRuslan Bukin #define	MCOUNT_FROMPC_USER(pc)					\
578d7e7a98SRuslan Bukin 	((pc < (uintfptr_t)VM_MAXUSER_ADDRESS) ? (uintfptr_t)user : pc)
588d7e7a98SRuslan Bukin 
598d7e7a98SRuslan Bukin #define	MCOUNT_FROMPC_INTR(pc)					\
608d7e7a98SRuslan Bukin 	((pc >= (uintfptr_t)btrap && pc < (uintfptr_t)eintr) ?	\
618d7e7a98SRuslan Bukin 	    ((pc >= (uintfptr_t)bintr) ? (uintfptr_t)bintr :	\
628d7e7a98SRuslan Bukin 		(uintfptr_t)btrap) : ~0UL)
638d7e7a98SRuslan Bukin 
648d7e7a98SRuslan Bukin void	mcount(uintfptr_t frompc, uintfptr_t selfpc);
658d7e7a98SRuslan Bukin 
668d7e7a98SRuslan Bukin #else /* !_KERNEL */
678d7e7a98SRuslan Bukin 
68*9ce4656aSMateusz Guzik typedef	__uintfptr_t	uintfptr_t;
698d7e7a98SRuslan Bukin 
708d7e7a98SRuslan Bukin #define	_MCOUNT_DECL	void mcount
718d7e7a98SRuslan Bukin #define	MCOUNT
728d7e7a98SRuslan Bukin 
738d7e7a98SRuslan Bukin #endif /* _KERNEL */
748d7e7a98SRuslan Bukin 
758d7e7a98SRuslan Bukin #endif /* !_MACHINE_PROFILE_H_ */
76