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