2 * This file is part of the Palacios Virtual Machine Monitor developed
3 * by the V3VEE Project with funding from the United States National
4 * Science Foundation and the Department of Energy.
6 * The V3VEE Project is a joint project between Northwestern University
7 * and the University of New Mexico. You can find out more at
10 * Copyright (c) 2008, Jack Lange <jarusl@cs.northwestern.edu>
11 * Copyright (c) 2008, The V3VEE Project <http://www.v3vee.org>
12 * All rights reserved.
14 * Author: Chang Bae <c.s.bae@u.northwestern.edu>
16 * This is free software. You are permitted to use,
17 * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
22 #include <palacios/svm_handler.h>
23 #include <palacios/vmm_instrument.h>
24 #include <palacios/vmm_ringbuffer.h>
26 void __attribute__((__no_instrument_function__)) v3_init_cyg_profiler (){
30 v3_Inst_RingBuff_init (&ring_buff, 2048); //dequeue at every 4095
36 static void inline __attribute__((__no_instrument_function__)) read_cyg_profiler (){
38 while( v3_Inst_RingBuff_data_size(ring_buff) > 0) {
40 v3_Inst_RingBuff_read (ring_buff, pack_data, 1);
41 PrintDebug("CYG_PROF: %d %8lu %08x %08x\n", pack_data->state, (unsigned long)pack_data->time, pack_data->cur_fn, pack_data->pre_fn);
46 void __attribute__((__no_instrument_function__))
47 __cyg_profile_func_enter( void *this, void *callsite )
50 if(instrument_start > 0) {
54 if((v3_Inst_RingBuff_data_size(ring_buff) % 500) == 0 || v3_Inst_RingBuff_data_size(ring_buff) == 4095) {
59 pack_data->time = now - last; //time spent previous
60 pack_data->state = 0; //enter to be 0
61 pack_data->cur_fn = (unsigned int)this; //this
62 pack_data->pre_fn = (unsigned int)callsite; //callsite
64 v3_Inst_RingBuff_write (ring_buff, pack_data, 1);
71 void __attribute__((__no_instrument_function__))
72 __cyg_profile_func_exit( void *this, void *callsite )
74 if(instrument_start > 0 ) {
77 if((v3_Inst_RingBuff_data_size(ring_buff) % 500) == 0 || v3_Inst_RingBuff_data_size(ring_buff) == 4095) {
81 pack_data->time = now - last; //time spent previous
82 pack_data->state = 1; //exit to be 0
83 pack_data->cur_fn = (unsigned int)this; //this
84 pack_data->pre_fn = (unsigned int)callsite; //callsite
86 v3_Inst_RingBuff_write (ring_buff, pack_data, 1);