/*
 * @DEC_COPYRIGHT@
 */
/*
 * HISTORY
 * $Log:	gmon.h,v $
 * Revision 4.2  91/09/20  05:15:50  devbld
 * Adding ODE Headers
 * 
 * $EndLog$
 */
/*	
 *	@(#)$RCSfile: gmon.h,v $ $Revision: 4.2 $ (DEC) $Date: 91/09/20 05:15:50 $
 */ 
/*
 */
/*
 * (c) Copyright 1990, OPEN SOFTWARE FOUNDATION, INC.
 * ALL RIGHTS RESERVED
 */
/*
 * OSF/1 Release 1.0
 */
/*
 * RESTRICTED RIGHTS LEGEND
 * Use, Duplication or Disclosure by the Government is subject to
 * restrictions as set forth in paragraph (b)(3)(B) of the rights in
 * Technical Data and Computer Software clause in DAR 7-104.9(a).
 */ 

/*
 * COMPONENT_NAME: (LIBCGEN) Standard C Library General Functions
 *
 * FUNCTIONS: gmon.h
 *
 * ORIGINS: 26
 *
 * Copyright (c) 1980 Regents of the University of California.
 * All rights reserved.  The Berkeley software License Agreement
 * specifies the terms and conditions for redistribution.
 */

#ifndef _GMON_H_
#define _GMON_H_

/*

 */

struct phdr {
    char        *lpc;
    char        *hpc;
    int         ncnt;
    caddr_t     *monitor_load_address;
};

    /*
     *  histogram counters are unsigned shorts (according to the kernel).
     */
#define HISTCOUNTER     unsigned short

    /*
     *  fraction of text space to allocate for histogram counters
     *  here, 1/2
     */
#define HISTFRACTION    2

    /*
     *  Fraction of text space to allocate for from hash buckets.
     *  The value of HASHFRACTION is based on the minimum number of bytes
     *  of separation between two subroutine call points in the object code.
     *  Given MIN_SUBR_SEPARATION bytes of separation the value of
     *  HASHFRACTION is calculated as:
     *
     *          HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1);
     *
     *  For the VAX, the shortest two call sequence is:
     *
     *          calls   $0,(r0)
     *          calls   $0,(r0)
     *
     *  which is separated by only three bytes, thus HASHFRACTION is
     *  calculated as:
     *
     *          HASHFRACTION = 3 / (2 * 2 - 1) = 1
     *
     *  Note that the division above rounds down, thus if MIN_SUBR_FRACTION
     *  is less than three, this algorithm will not work!
     */
#define HASHFRACTION    1

    /*
     *  percent of text space to allocate for tostructs
     *  with a minimum.
     */
#define ARCDENSITY      2
#define MINARCS         50

struct tostruct {
    char                *selfpc;
    long                count;
    unsigned short      link;
};

    /*
     *  a raw arc,
     *      with pointers to the calling site and the called site
     *      and a count.
     */
struct rawarc {
    unsigned long       raw_frompc;
    unsigned long       raw_selfpc;
    long                raw_count;
};

    /*
     *  general rounding functions.
     */
#define ROUNDDOWN(x,y)  (((x)/(y))*(y))
#define ROUNDUP(x,y)    ((((x)+(y)-1)/(y))*(y))

#endif /* _GMON_H_ */
