Esempio n. 1
0
void get_mmap() {
    multiboot_info_t* multiboot_info = (multiboot_info_t*) (intptr_t) mboot_info;
    mmap_size = 0;

    //to check that mmap_length and mmap_addr are correct
    //we need them to be present
    if(!mmaps_present(multiboot_info->flags)) {
	    println("No mmap present!");
        return;
    }
    println("\nInitial mmap:");

    uint64_t end = (uint64_t) multiboot_info->mmap_addr + (uint64_t) multiboot_info->mmap_length;
    uint16_t in_kernel = 0;
    uint64_t i = 0;
    for(mboot_mmap_entry* mmap_ptr = (mboot_mmap_entry*) (uint64_t) multiboot_info->mmap_addr;
        (uint64_t) mmap_ptr < end;
        mmap_ptr = (mboot_mmap_entry*) ((uint64_t) mmap_ptr + mmap_ptr->size + sizeof (mmap_ptr->size))) {
        mboot_mmap[i] = *mmap_ptr;

        //information and debug
        print_mboot_mmap_entry(mboot_mmap + i);

        //we think about kernel <3
        process_mmap(mboot_mmap + i, &in_kernel);
        ++i;
    }
    correct_mmap();
}
Esempio n. 2
0
static void
process_event (Collector       *collector,
	       counter_t       *counter,
	       counter_event_t *event)
{
    char *name;
    
    switch (event->header.type)
    {
    case PERF_RECORD_MMAP: name = "mmap"; break;
    case PERF_RECORD_LOST: name = "lost"; break;
    case PERF_RECORD_COMM: name = "comm"; break;
    case PERF_RECORD_EXIT: name = "exit"; break;
    case PERF_RECORD_THROTTLE: name = "throttle"; break;
    case PERF_RECORD_UNTHROTTLE: name = "unthrottle"; break;
    case PERF_RECORD_FORK: name = "fork"; break;
    case PERF_RECORD_READ: name = "read"; break;
    case PERF_RECORD_SAMPLE: name = "samp"; break;
    default: name = "unknown"; break;
    }

    d_print ("cpu %d  ::  %s   :: ", counter->cpu, name);
    
    switch (event->header.type)
    {
    case PERF_RECORD_MMAP:
	process_mmap (collector, &event->mmap);
	break;
	
    case PERF_RECORD_LOST:
	g_print ("lost event\n");
	break;
	
    case PERF_RECORD_COMM:
	process_comm (collector, &event->comm);
	break;
	
    case PERF_RECORD_EXIT:
	process_exit (collector, &event->exit);
	break;
	
    case PERF_RECORD_THROTTLE:
	g_print ("throttle\n");
	break;
	
    case PERF_RECORD_UNTHROTTLE:
	g_print ("unthrottle\n");
	break;
	
    case PERF_RECORD_FORK:
	process_fork (collector, &event->fork);
	break;
	
    case PERF_RECORD_READ:
	break;
	
    case PERF_RECORD_SAMPLE:
	process_sample (collector, &event->sample);
	break;
	
    default:
	g_warning ("unknown event: %d (%d)\n",
		   event->header.type, event->header.size);
	break;
    }

    d_print ("\n");
}