profile.h revision 2166
11543Srgrimes/* 21543Srgrimes * Copyright (c) 1992, 1993 31543Srgrimes * The Regents of the University of California. All rights reserved. 41543Srgrimes * 51543Srgrimes * Redistribution and use in source and binary forms, with or without 61543Srgrimes * modification, are permitted provided that the following conditions 71543Srgrimes * are met: 81543Srgrimes * 1. Redistributions of source code must retain the above copyright 91543Srgrimes * notice, this list of conditions and the following disclaimer. 101543Srgrimes * 2. Redistributions in binary form must reproduce the above copyright 111543Srgrimes * notice, this list of conditions and the following disclaimer in the 121543Srgrimes * documentation and/or other materials provided with the distribution. 131543Srgrimes * 3. All advertising materials mentioning features or use of this software 141543Srgrimes * must display the following acknowledgement: 151543Srgrimes * This product includes software developed by the University of 161543Srgrimes * California, Berkeley and its contributors. 171543Srgrimes * 4. Neither the name of the University nor the names of its contributors 181543Srgrimes * may be used to endorse or promote products derived from this software 191543Srgrimes * without specific prior written permission. 201543Srgrimes * 211543Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 221543Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 231543Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 241543Srgrimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 251543Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 261543Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 271543Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 281543Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 291543Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 301543Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 311543Srgrimes * SUCH DAMAGE. 321543Srgrimes * 331543Srgrimes * @(#)profile.h 8.1 (Berkeley) 6/11/93 342166Spaul * $Id: profile.h,v 1.2 1994/08/02 07:38:56 davidg Exp $ 351543Srgrimes */ 361543Srgrimes 372166Spaul#ifndef _I386_MACHINE_PROFILE_H_ 382166Spaul#define _I386_MACHINE_PROFILE_H_ 392166Spaul 401543Srgrimes#define _MCOUNT_DECL static inline void _mcount 411543Srgrimes 421543Srgrimes#define MCOUNT \ 431543Srgrimesextern void mcount() asm("mcount"); void mcount() { \ 441543Srgrimes int selfpc, frompcindex; \ 451543Srgrimes /* \ 461543Srgrimes * find the return address for mcount, \ 471543Srgrimes * and the return address for mcount's caller. \ 481543Srgrimes * \ 491543Srgrimes * selfpc = pc pushed by mcount call \ 501543Srgrimes */ \ 511543Srgrimes asm("movl 4(%%ebp),%0" : "=r" (selfpc)); \ 521543Srgrimes /* \ 531543Srgrimes * frompcindex = pc pushed by jsr into self. \ 541543Srgrimes * In GCC the caller's stack frame has already been built so we \ 551543Srgrimes * have to chase a6 to find caller's raddr. \ 561543Srgrimes */ \ 571543Srgrimes asm("movl (%%ebp),%0" : "=r" (frompcindex)); \ 581543Srgrimes frompcindex = ((int *)frompcindex)[1]; \ 591543Srgrimes _mcount(frompcindex, selfpc); \ 601543Srgrimes} 612166Spaul 622166Spaul#endif 63