1*0fd68240SSascha Wildner /*- 2*0fd68240SSascha Wildner * Copyright (c) 2020 The DragonFly Project. All rights reserved. 3*0fd68240SSascha Wildner * 4*0fd68240SSascha Wildner * Redistribution and use in source and binary forms, with or without 5*0fd68240SSascha Wildner * modification, are permitted provided that the following conditions 6*0fd68240SSascha Wildner * are met: 7*0fd68240SSascha Wildner * 8*0fd68240SSascha Wildner * 1. Redistributions of source code must retain the above copyright 9*0fd68240SSascha Wildner * notice, this list of conditions and the following disclaimer. 10*0fd68240SSascha Wildner * 2. Redistributions in binary form must reproduce the above copyright 11*0fd68240SSascha Wildner * notice, this list of conditions and the following disclaimer in 12*0fd68240SSascha Wildner * the documentation and/or other materials provided with the 13*0fd68240SSascha Wildner * distribution. 14*0fd68240SSascha Wildner * 3. Neither the name of The DragonFly Project nor the names of its 15*0fd68240SSascha Wildner * contributors may be used to endorse or promote products derived 16*0fd68240SSascha Wildner * from this software without specific, prior written permission. 17*0fd68240SSascha Wildner * 18*0fd68240SSascha Wildner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19*0fd68240SSascha Wildner * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20*0fd68240SSascha Wildner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 21*0fd68240SSascha Wildner * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 22*0fd68240SSascha Wildner * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 23*0fd68240SSascha Wildner * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 24*0fd68240SSascha Wildner * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25*0fd68240SSascha Wildner * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 26*0fd68240SSascha Wildner * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27*0fd68240SSascha Wildner * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 28*0fd68240SSascha Wildner * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29*0fd68240SSascha Wildner * SUCH DAMAGE. 30*0fd68240SSascha Wildner */ 31*0fd68240SSascha Wildner 3291dc43ddSMatthew Dillon /* 3391dc43ddSMatthew Dillon * SYS/FLAME_GRAPH.H 3491dc43ddSMatthew Dillon * 3591dc43ddSMatthew Dillon * Data structures for flame graph sampling 3691dc43ddSMatthew Dillon */ 37*0fd68240SSascha Wildner 3891dc43ddSMatthew Dillon #ifndef _SYS_FLAME_GRAPH_H_ 3991dc43ddSMatthew Dillon #define _SYS_FLAME_GRAPH_H_ 4091dc43ddSMatthew Dillon 41*0fd68240SSascha Wildner #include <sys/types.h> 42*0fd68240SSascha Wildner 4391dc43ddSMatthew Dillon #define FLAME_GRAPH_BASE_SYM "_flame_graph_ary" 4491dc43ddSMatthew Dillon 4591dc43ddSMatthew Dillon #define FLAME_GRAPH_FRAMES 32 4691dc43ddSMatthew Dillon #define FLAME_GRAPH_NENTRIES 256 4791dc43ddSMatthew Dillon 4891dc43ddSMatthew Dillon struct flame_graph_entry { 4991dc43ddSMatthew Dillon intptr_t rips[FLAME_GRAPH_FRAMES]; 5091dc43ddSMatthew Dillon }; 5191dc43ddSMatthew Dillon 5291dc43ddSMatthew Dillon struct flame_graph_pcpu { 5391dc43ddSMatthew Dillon uint32_t nentries; 5491dc43ddSMatthew Dillon uint32_t windex; 5591dc43ddSMatthew Dillon struct flame_graph_entry *fge; /* array of nentries */ 5691dc43ddSMatthew Dillon int dummy[12]; 5791dc43ddSMatthew Dillon } __cachealign; 5891dc43ddSMatthew Dillon 5991dc43ddSMatthew Dillon #endif 60