コード例 #1
0
ファイル: flightrecorder.cpp プロジェクト: sjhill71/etna_viv
 /* check all monitored ranges, and log changes */
 void write_mem_range(size_t start, size_t end)
 {
     write_record_type(fd, RTYPE_RANGE_DATA);
     (void)write(fd, &start, sizeof(size_t));
     (void)write(fd, &end, sizeof(size_t));
     (void)write(fd, (void*)start, end - start);
 }
コード例 #2
0
ファイル: flightrecorder.cpp プロジェクト: sjhill71/etna_viv
 flightrec_status log_comment(const char *data, size_t size)
 {
     pthread_mutex_lock(&mutex);
     write_record_type(fd, RTYPE_COMMENT);
     (void)write(fd, &size, sizeof(size_t));
     (void)write(fd, data, size);
     pthread_mutex_unlock(&mutex);
     return FDR_OK;
 }
コード例 #3
0
ファイル: flightrecorder.cpp プロジェクト: CSRedRat/etna_viv
 flightrec_status add_monitored_range(size_t addr_start, size_t addr_end)
 {
     pthread_mutex_lock(&mutex);
     std::pair<MemIntervalSet::iterator, bool> rv = persistent.insert(MemInterval(addr_start, addr_end));
     if(rv.second)
     {
         write_record_type(fd, RTYPE_ADD_UPDATED_RANGE);
         write(fd, &addr_start, sizeof(size_t));
         write(fd, &addr_end, sizeof(size_t));
     }
     pthread_mutex_unlock(&mutex);
     return rv.second ? FDR_OK : FDR_OVERLAP;
 }
コード例 #4
0
ファイル: flightrecorder.cpp プロジェクト: sjhill71/etna_viv
 flightrec_status remove_monitored_range(size_t addr_start, size_t addr_end)
 {
     pthread_mutex_lock(&mutex);
     // XXX currently assumes a complete match, partial munmaps are not supported
     size_t ret = persistent.erase(MemInterval(addr_start, addr_end));
     if(ret)
     {
         write_record_type(fd, RTYPE_REMOVE_UPDATED_RANGE);
         (void)write(fd, &addr_start, sizeof(size_t));
         (void)write(fd, &addr_end, sizeof(size_t));
     }
     pthread_mutex_unlock(&mutex);
     return ret ? FDR_OK : FDR_NOT_FOUND;
 }
コード例 #5
0
ファイル: flightrecorder.cpp プロジェクト: sjhill71/etna_viv
    flightrec_status log_event(Event *context)
    {
        /* count parameters */
        uint32_t num_parameters = context->parameters.size();
        
        pthread_mutex_lock(&mutex);
        /* log updates to monitored ranges */
        check_monitored_ranges();

        /* log temp ranges */
        for(MemIntervalSet::const_iterator i=context->temp.begin(); i!=context->temp.end(); ++i)
        {
            write_record_type(fd, RTYPE_RANGE_TEMP_DATA);
            (void)write(fd, &i->start, sizeof(size_t));
            (void)write(fd, &i->end, sizeof(size_t));
            (void)write(fd, (void*)i->start, i->end - i->start);
        }

        write_record_type(fd, RTYPE_EVENT);
        uint8_t name_len = strlen(context->event_type);
        (void)write(fd, &name_len, sizeof(uint8_t));
        (void)write(fd, context->event_type, name_len);

        /* log parameters */
        (void)write(fd, &num_parameters, sizeof(uint32_t));
        for(size_t i=0; i<num_parameters; ++i)
        {
            uint8_t name_len = strlen(context->parameters[i].name);
            (void)write(fd, &name_len, sizeof(uint8_t));
            (void)write(fd, context->parameters[i].name, name_len);
            (void)write(fd, &context->parameters[i].value, sizeof(size_t));
        }
        delete context;
        pthread_mutex_unlock(&mutex);
        return FDR_OK;
    }