[BACK]Return to profile.h CVS log [TXT][DIR] Up to [local] / sys / arch / m88k / include

File: [local] / sys / arch / m88k / include / profile.h (download)

Revision 1.1, Tue Mar 4 16:07:09 2008 UTC (16 years, 2 months ago) by nbrk
Branch point for: MAIN

Initial revision

#ifndef __M88K_PROFILE_H__
#define __M88K_PROFILE_H__
/*	$OpenBSD: profile.h,v 1.3 2005/04/30 16:42:36 miod Exp $ */
/*
 * Copyright (c) 2004, Miodrag Vallat.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#define	_MCOUNT_DECL static inline void _mcount

/*
 * On OpenBSD, calls to the function profiler save r2-r9 on stack. The
 * monitor point is found in r1. The function's return address is taken
 * from the stack frame pointed to by r30.
 */
#define	MCOUNT \
extern void mcount(void) __asm__ ("mcount"); \
void \
mcount() \
{ \
	int	returnaddress, monpoint; \
	__asm__ __volatile__ ("or %0, r1, r0" : "=r"(returnaddress)); \
	__asm__ __volatile__ ("ld %0, r30, 4" : "=r"(monpoint)); \
	_mcount(monpoint, returnaddress); \
}

#ifdef _KERNEL
#define	MCOUNT_ENTER	disable_interrupt(s)
#define	MCOUNT_EXIT	set_psr(s)
#endif /* _KERNEL */

#endif /* __M88K_PROFILE_H__ */