Mercurial > vba-clojure
view src/prof/gmon.h @ 316:d263df762c59
greatly speed up scroll-text by using binary-search.
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Mon, 02 Apr 2012 21:20:54 -0500 |
parents | f9f4f1b99eed |
children |
line wrap: on
line source
1 /*2 * Copyright (c) 1983, 1991, 1993, 20013 * The Regents of the University of California. All rights reserved.4 *5 * Redistribution and use in source and binary forms, with or without6 * modification, are permitted provided that the following conditions7 * are met:8 * 1. Redistributions of source code must retain the above copyright9 * notice, this list of conditions and the following disclaimer.10 * 2. Redistributions in binary form must reproduce the above copyright11 * notice, this list of conditions and the following disclaimer in the12 * documentation and/or other materials provided with the distribution.13 * 3. Neither the name of the University nor the names of its contributors14 * may be used to endorse or promote products derived from this software15 * without specific prior written permission.16 *17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE20 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF27 * SUCH DAMAGE.28 */29 #ifndef gmon_h30 #define gmon_h32 #include <stdint.h>33 typedef uint32_t u32;35 /* Size of the 4.4BSD gmon header */36 #define GMON_HDRSIZE_BSD44_32 (4 + 4 + 4 + 4 + 4 + (3 * 4))37 #define GMON_HDRSIZE_BSD44_64 (8 + 8 + 4 + 4 + 4 + (3 * 4))39 #if 0 /* For documentation purposes only. */40 struct raw_phdr41 {42 char low_pc[sizeof(void *)]; /* base pc address of sample buffer */43 char high_pc[sizeof(void *)];/* max pc address of sampled buffer */44 char ncnt[4]; /* size of sample buffer (plus this45 header) */47 char version[4]; /* version number */48 char profrate[4]; /* profiling clock rate */49 char spare[3*4]; /* reserved */50 };51 #endif53 #define GMONVERSION 0x0005187955 /* Size of the old BSD gmon header */56 #define GMON_HDRSIZE_OLDBSD_32 (4 + 4 + 4)58 /* FIXME: Checking host compiler defines here means that we can't59 use a cross gprof alpha OSF. */60 #if defined(__alpha__) && defined (__osf__)61 #define GMON_HDRSIZE_OLDBSD_64 (8 + 8 + 4 + 4)62 #else63 #define GMON_HDRSIZE_OLDBSD_64 (8 + 8 + 4)64 #endif66 #if 0 /* For documentation purposes only. */67 struct old_raw_phdr68 {69 char low_pc[sizeof(void *)]; /* base pc address of sample buffer */70 char high_pc[sizeof(void *)];/* max pc address of sampled buffer */71 char ncnt[4]; /* size of sample buffer (plus this72 header) */73 #if defined (__alpha__) && defined (__osf__)74 /*75 * DEC's OSF v3.0 uses 4 bytes of padding to bring the header to76 * a size that is a multiple of 8.77 */78 char pad[4];79 #endif80 };81 #endif83 /*84 * Histogram counters are unsigned shorts:85 */86 #define HISTCOUNTER unsigned short88 /*89 * Fraction of text space to allocate for histogram counters here, 1/2:90 */91 #define HISTFRACTION 293 /*94 * Fraction of text space to allocate for from hash buckets. The95 * value of HASHFRACTION is based on the minimum number of bytes of96 * separation between two subroutine call points in the object code.97 * Given MIN_SUBR_SEPARATION bytes of separation the value of98 * HASHFRACTION is calculated as:99 *100 * HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1);101 *102 * For the VAX, the shortest two call sequence is:103 *104 * calls $0,(r0)105 * calls $0,(r0)106 *107 * which is separated by only three bytes, thus HASHFRACTION is108 * calculated as:109 *110 * HASHFRACTION = 3 / (2 * 2 - 1) = 1111 *112 * Note that the division above rounds down, thus if MIN_SUBR_FRACTION113 * is less than three, this algorithm will not work!114 */115 #define HASHFRACTION 1117 /*118 * Percent of text space to allocate for tostructs with a minimum:119 */120 #define ARCDENSITY 2121 #define MINARCS 50123 struct tostruct124 {125 u32 selfpc;126 int count;127 unsigned short link;128 };130 /*131 * A raw arc, with pointers to the calling site and the called site132 * and a count. Everything is defined in terms of characters so133 * as to get a packed representation (otherwise, different compilers134 * might introduce different padding):135 */136 #if 0 /* For documentation purposes only. */137 struct raw_arc138 {139 char from_pc[sizeof(void *)];140 char self_pc[sizeof(void *)];141 char count[sizeof(long)];142 };143 #endif145 /*146 * General rounding functions:147 */148 #define ROUNDDOWN(x,y) (((x)/(y))*(y))149 #define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y))151 #endif /* gmon_h */