formatting, typos, comments, details
Change-Id: Iae5f1acb653a694622e9ac2bad93efcfca588f3a
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
#ifndef __ABO_SIMPLE_ARM_EXPERIMENT_HPP__
|
||||
#define __ABO_SIMPLE_ARM_EXPERIMENT_HPP__
|
||||
|
||||
#define __ABO_SIMPLE_ARM_EXPERIMENT_HPP__
|
||||
|
||||
#include "efw/ExperimentFlow.hpp"
|
||||
#include "efw/JobClient.hpp"
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#ifndef __CHECKSUM_OOSTUBS_CAMPAIGN_HPP__
|
||||
#define __CHECKSUM_OOSTUBS_CAMPAIGN_HPP__
|
||||
#define __CHECKSUM_OOSTUBS_CAMPAIGN_HPP__
|
||||
|
||||
#include "cpn/Campaign.hpp"
|
||||
#include "comm/ExperimentData.hpp"
|
||||
|
||||
@ -36,7 +36,7 @@ bool ChecksumOOStuBSExperiment::run()
|
||||
char const *statename = "checksum-oostubs.state";
|
||||
Logger log("Checksum-OOStuBS", false);
|
||||
BPSingleListener bp;
|
||||
|
||||
|
||||
log << "startup" << endl;
|
||||
|
||||
#if 0
|
||||
@ -107,7 +107,7 @@ bool ChecksumOOStuBSExperiment::run()
|
||||
}
|
||||
|
||||
log << dec << "tracing finished after " << instr_counter << endl;
|
||||
|
||||
|
||||
uint32_t results[OOSTUBS_RESULTS_BYTES / sizeof(uint32_t)];
|
||||
simulator.getMemoryManager().getBytes(OOSTUBS_RESULTS_ADDR, sizeof(results), results);
|
||||
for (unsigned i = 0; i < sizeof(results) / sizeof(*results); ++i) {
|
||||
@ -124,7 +124,7 @@ bool ChecksumOOStuBSExperiment::run()
|
||||
}
|
||||
of.close();
|
||||
log << "trace written to " << tracefile << endl;
|
||||
|
||||
|
||||
#elif 1
|
||||
// STEP 3: The actual experiment.
|
||||
#if !LOCAL
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#ifndef __CHECKSUM_OOSTUBS_EXPERIMENT_HPP__
|
||||
#define __CHECKSUM_OOSTUBS_EXPERIMENT_HPP__
|
||||
|
||||
#define __CHECKSUM_OOSTUBS_EXPERIMENT_HPP__
|
||||
|
||||
#include "efw/ExperimentFlow.hpp"
|
||||
#include "efw/JobClient.hpp"
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#ifndef __EXPERIMENT_INFO_HPP__
|
||||
#define __EXPERIMENT_INFO_HPP__
|
||||
#define __EXPERIMENT_INFO_HPP__
|
||||
|
||||
// FIXME autogenerate this
|
||||
|
||||
|
||||
@ -52,7 +52,7 @@ bool CoolChecksumCampaign::run()
|
||||
CoolChecksumExperimentData *d = new CoolChecksumExperimentData;
|
||||
d->msg.set_instr_offset(instr_offset);
|
||||
d->msg.set_bit_offset(bit_offset);
|
||||
|
||||
|
||||
campaignmanager.addParam(d);
|
||||
++count;
|
||||
}
|
||||
@ -107,8 +107,8 @@ bool CoolChecksumCampaign::run()
|
||||
address_t instr_absolute = 0; // FIXME this one probably should also be recorded ...
|
||||
Trace_Event ev;
|
||||
ps.reset();
|
||||
|
||||
while(ps.getNext(&ev)) {
|
||||
|
||||
while (ps.getNext(&ev)) {
|
||||
// only count instruction events
|
||||
if (!ev.has_memaddr()) {
|
||||
// new instruction
|
||||
@ -131,7 +131,7 @@ bool CoolChecksumCampaign::run()
|
||||
// we now have an interval-terminating R/W
|
||||
// event to the memaddr we're currently looking
|
||||
// at:
|
||||
|
||||
|
||||
// complete the equivalence interval
|
||||
current_ec.instr2 = instr;
|
||||
current_ec.instr2_absolute = instr_absolute;
|
||||
@ -150,7 +150,7 @@ bool CoolChecksumCampaign::run()
|
||||
} else {
|
||||
log << "WAT" << endl;
|
||||
}
|
||||
|
||||
|
||||
// next interval must start at next
|
||||
// instruction; the aforementioned
|
||||
// skipping mechanism wouldn't work
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#ifndef __COOLCAMPAIGN_HPP__
|
||||
#define __COOLCAMPAIGN_HPP__
|
||||
#define __COOLCAMPAIGN_HPP__
|
||||
|
||||
#include "cpn/Campaign.hpp"
|
||||
#include "comm/ExperimentData.hpp"
|
||||
|
||||
@ -30,7 +30,7 @@ bool CoolChecksumExperiment::run()
|
||||
{
|
||||
Logger log("CoolChecksum", false);
|
||||
BPSingleListener bp;
|
||||
|
||||
|
||||
log << "startup" << endl;
|
||||
|
||||
#if 1
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#ifndef __COOLEXPERIMENT_HPP__
|
||||
#define __COOLEXPERIMENT_HPP__
|
||||
|
||||
#define __COOLEXPERIMENT_HPP__
|
||||
|
||||
#include "efw/ExperimentFlow.hpp"
|
||||
#include "efw/JobClient.hpp"
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#ifndef __EXPERIMENT_INFO_HPP__
|
||||
#define __EXPERIMENT_INFO_HPP__
|
||||
#define __EXPERIMENT_INFO_HPP__
|
||||
|
||||
#define COOL_FAULTSPACE_PRUNING 0
|
||||
|
||||
|
||||
@ -60,7 +60,7 @@ bool EcosKernelTestCampaign::readTraceInfo(unsigned &instr_counter, unsigned &ti
|
||||
|
||||
while (getline(file, buf)) {
|
||||
stringstream ss(buf, ios::in);
|
||||
switch(count) {
|
||||
switch (count) {
|
||||
case 0:
|
||||
ss >> instr_counter;
|
||||
break;
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
#define LOCAL 0
|
||||
|
||||
#ifndef PREREQUISITES
|
||||
#error Configure experimentInfo.hpp properly!
|
||||
#error Configure experimentInfo.hpp properly!
|
||||
#endif
|
||||
|
||||
// create/use multiple snapshots to speed up long experiments
|
||||
@ -113,7 +113,7 @@ bool EcosKernelTestExperiment::establishState(guest_address_t addr_entry, guest_
|
||||
|
||||
while (true) {
|
||||
simulator.addListenerAndResume(&g);
|
||||
if(g.getData() == 'Q') {
|
||||
if (g.getData() == 'Q') {
|
||||
log << "Guest system triggered: " << g.getData() << endl;
|
||||
break;
|
||||
}
|
||||
@ -203,15 +203,15 @@ bool EcosKernelTestExperiment::performTrace(guest_address_t addr_entry, guest_ad
|
||||
|
||||
// do the job, 'till the end
|
||||
BaseListener* ev = simulator.resume();
|
||||
while(ev != &bp) {
|
||||
if(ev == &ev_count) {
|
||||
if(instr_counter++ == 0xFFFFFFFFU) {
|
||||
while (ev != &bp) {
|
||||
if (ev == &ev_count) {
|
||||
if (instr_counter++ == 0xFFFFFFFFU) {
|
||||
log << "ERROR: instr_counter overflowed" << endl;
|
||||
return false;
|
||||
}
|
||||
simulator.addListener(&ev_count);
|
||||
}
|
||||
else if(ev == &ev_mem) {
|
||||
else if (ev == &ev_mem) {
|
||||
unsigned lo = ev_mem.getTriggerAddress();
|
||||
unsigned hi = lo + ev_mem.getTriggerWidth() - 1;
|
||||
|
||||
@ -259,7 +259,7 @@ bool EcosKernelTestExperiment::performTrace(guest_address_t addr_entry, guest_ad
|
||||
}
|
||||
of.close();
|
||||
log << "trace written to " << EcosKernelTestCampaign::filename_trace(m_variant, m_benchmark) << endl;
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -301,7 +301,7 @@ bool EcosKernelTestExperiment::faultInjection() {
|
||||
addr_data_start, addr_data_end;
|
||||
|
||||
BPSingleListener bp;
|
||||
|
||||
|
||||
int experiments = 0;
|
||||
#if !LOCAL
|
||||
for (experiments = 0;
|
||||
@ -511,7 +511,7 @@ bool EcosKernelTestExperiment::faultInjection() {
|
||||
//BPSingleListener ev_end(ANY_ADDR);
|
||||
//ev_end.setCounter(instr_counter - instr_offset + ECOS_RECOVERYINSTR);
|
||||
//simulator.addListener(&ev_end);
|
||||
|
||||
|
||||
// function called by ecc aspects, when an uncorrectable error is detected
|
||||
BPSingleListener func_ecc_panic(addr_panic);
|
||||
if (addr_panic != ADDR_INV) {
|
||||
@ -558,7 +558,7 @@ bool EcosKernelTestExperiment::faultInjection() {
|
||||
} else {
|
||||
result->set_error_corrected(0);
|
||||
}
|
||||
|
||||
|
||||
// record ecos_test_result
|
||||
if ( (ecos_test_passed == true) && (ecos_test_failed == false) ) {
|
||||
result->set_ecos_test_result(result->PASS);
|
||||
|
||||
@ -33,7 +33,7 @@ bool FaultCoverageExperiment::run()
|
||||
d) trap triggered
|
||||
---- restore previously saved simulator state
|
||||
*/
|
||||
|
||||
|
||||
// log the results on std::cout
|
||||
Logger log("FaultCoverageExperiment", false);
|
||||
|
||||
@ -55,7 +55,7 @@ bool FaultCoverageExperiment::run()
|
||||
|
||||
// Note: This heavily uses the save-restore feature which causes
|
||||
// causes a memory leak after several rounds (seg-fault).
|
||||
|
||||
|
||||
// iterate over all registers
|
||||
ConcreteCPU cpu = simulator.getCPU(0);
|
||||
for (ConcreteCPU::iterator it = cpu.begin(); it != cpu.end(); it++) {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#ifndef __FAULT_COVERAGE_EXPERIMENT_HPP__
|
||||
#define __FAULT_COVERAGE_EXPERIMENT_HPP__
|
||||
#define __FAULT_COVERAGE_EXPERIMENT_HPP__
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
@ -7,7 +7,7 @@
|
||||
#include "config/FailConfig.hpp"
|
||||
#include "efw/ExperimentFlow.hpp"
|
||||
|
||||
#define INST_ADDR_FUNC_START 0x4ae6
|
||||
#define INST_ADDR_FUNC_START 0x4ae6
|
||||
#define INST_ADDR_FUNC_END 0x4be6
|
||||
|
||||
// Check if configuration dependencies are satisfied:
|
||||
|
||||
@ -30,7 +30,7 @@ bool FireInterruptExperiment::run()
|
||||
log << "experiment start" << endl;
|
||||
|
||||
#if 1
|
||||
while (true) {
|
||||
while (true) {
|
||||
int j = 0;
|
||||
for (j = 0; j <= 100; j++) {
|
||||
BPSingleListener mainbp(0x1045f5);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#ifndef __FIREINTERRUPT_EXPERIMENT_HPP__
|
||||
#define __FIREINTERRUPT_EXPERIMENT_HPP__
|
||||
#define __FIREINTERRUPT_EXPERIMENT_HPP__
|
||||
|
||||
#include "efw/ExperimentFlow.hpp"
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@ using namespace fail;
|
||||
|
||||
void GenericTracing::parseOptions() {
|
||||
CommandLine &cmd = CommandLine::Inst();
|
||||
CommandLine::option_handle IGNORE = cmd.addOption("", "", Arg::None, "USAGE: fail-client -Wf,[option] -Wf,[option] ... <BochsOptions...>\n\n");
|
||||
cmd.addOption("", "", Arg::None, "USAGE: fail-client -Wf,[option] -Wf,[option] ... <BochsOptions...>\n\n");
|
||||
CommandLine::option_handle HELP = cmd.addOption("h", "help", Arg::None, "-h,--help \tPrint usage and exit");
|
||||
|
||||
|
||||
@ -35,18 +35,18 @@ void GenericTracing::parseOptions() {
|
||||
CommandLine::option_handle SAVE_SYMBOL = cmd.addOption("S", "save-symbol", Arg::Required,
|
||||
"-S,--save-symbol \tELF symbol to save the state of the machine (default: main)\n");
|
||||
CommandLine::option_handle STATE_FILE = cmd.addOption("f", "state-file", Arg::Required,
|
||||
"-f,--state-file \tFile/dir to save the state to (default state)");
|
||||
"-f,--state-file \tFile/dir to save the state to (default: state)");
|
||||
CommandLine::option_handle TRACE_FILE = cmd.addOption("t", "trace-file", Arg::Required,
|
||||
"-t,--trace-file \tFile to save the execution trace to\n");
|
||||
"-t,--trace-file \tFile to save the execution trace to (default: trace.pb)\n");
|
||||
|
||||
CommandLine::option_handle FULL_TRACE = cmd.addOption("", "full-trace", Arg::None, "--full-trace \tDo a full trace (more data, default: off)");
|
||||
CommandLine::option_handle MEM_SYMBOL = cmd.addOption("m", "memory-symbol", Arg::Required,
|
||||
"-m,--memory-symbol \tELF symbol(s) to trace accesses (default: all mem read/writes are traced)");
|
||||
CommandLine::option_handle MEM_REGION = cmd.addOption("M", "memory-region", Arg::Required,
|
||||
"-M,--memory-region \trestrict memory region which is traced"
|
||||
" Possible formats: 0x<address>, 0x<address>:0x<address>, 0x<address>:<length>");
|
||||
" (Possible formats: 0x<address>, 0x<address>:0x<address>, 0x<address>:<length>)");
|
||||
|
||||
if(!cmd.parse()) {
|
||||
if (!cmd.parse()) {
|
||||
cerr << "Error parsing arguments." << endl;
|
||||
exit(-1);
|
||||
}
|
||||
@ -60,7 +60,7 @@ void GenericTracing::parseOptions() {
|
||||
elf_file = cmd[ELF_FILE].first()->arg;
|
||||
else {
|
||||
char * elfpath = getenv("FAIL_ELF_PATH");
|
||||
if(elfpath == NULL){
|
||||
if (elfpath == NULL) {
|
||||
m_log << "FAIL_ELF_PATH not set :( (alternative: --elf-file) " << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
@ -102,7 +102,7 @@ void GenericTracing::parseOptions() {
|
||||
use_memory_map = true;
|
||||
option::Option *opt = cmd[MEM_SYMBOL].first();
|
||||
|
||||
while(opt != 0) {
|
||||
while (opt != 0) {
|
||||
const ElfSymbol &symbol = m_elf->getSymbol(opt->arg);
|
||||
assert(symbol.isValid());
|
||||
|
||||
@ -118,7 +118,7 @@ void GenericTracing::parseOptions() {
|
||||
use_memory_map = true;
|
||||
option::Option *opt = cmd[MEM_REGION].first();
|
||||
|
||||
while(opt != 0) {
|
||||
while (opt != 0) {
|
||||
char *endptr;
|
||||
guest_address_t begin = strtol(opt->arg, &endptr, 16);
|
||||
guest_address_t size;
|
||||
@ -130,14 +130,14 @@ void GenericTracing::parseOptions() {
|
||||
char delim = *endptr;
|
||||
if (delim == 0) {
|
||||
size = 1;
|
||||
} else if(delim == ':') {
|
||||
} else if (delim == ':') {
|
||||
char *p = endptr +1;
|
||||
size = strtol(p, &endptr, 16) - begin;
|
||||
if (p == endptr || *endptr != 0) {
|
||||
m_log << "Couldn't parse " << opt->arg << std::endl;
|
||||
exit(-1);
|
||||
}
|
||||
} else if(delim == '+') {
|
||||
} else if (delim == '+') {
|
||||
char *p = endptr +1;
|
||||
size = strtol(p, &endptr, 10);
|
||||
if (p == endptr || *endptr != 0) {
|
||||
|
||||
@ -22,13 +22,13 @@ bool HSCSimpleExperiment::run()
|
||||
|
||||
// do funny things here...
|
||||
#if 1
|
||||
// STEP 1
|
||||
// STEP 1
|
||||
BPSingleListener mainbp(0x00003c34);
|
||||
simulator.addListenerAndResume(&mainbp);
|
||||
log << "breakpoint reached, saving" << endl;
|
||||
simulator.save("hello.state");
|
||||
#elif 0
|
||||
// STEP 2
|
||||
// STEP 2
|
||||
log << "restoring ..." << endl;
|
||||
simulator.restore("hello.state");
|
||||
log << "restored!" << endl;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#ifndef __HSC_SIMPLE_EXPERIMENT_HPP__
|
||||
#define __HSC_SIMPLE_EXPERIMENT_HPP__
|
||||
#define __HSC_SIMPLE_EXPERIMENT_HPP__
|
||||
|
||||
#include "efw/ExperimentFlow.hpp"
|
||||
|
||||
|
||||
@ -132,7 +132,7 @@ bool KESOrefs::run()
|
||||
while (executed_jobs < 25 || m_jc.getNumberOfUndoneJobs() > 0) {
|
||||
m_log << "asking jobserver for parameters" << endl;
|
||||
KesoRefExperimentData param;
|
||||
if(!m_jc.getParam(param)){
|
||||
if (!m_jc.getParam(param)) {
|
||||
m_log << "Dying." << endl; // We were told to die.
|
||||
simulator.terminate(1);
|
||||
}
|
||||
@ -218,7 +218,7 @@ bool KESOrefs::run()
|
||||
m_log << "CDX has ended" << std::endl;
|
||||
|
||||
// Evaluate result
|
||||
if(l == &l_error) {
|
||||
if (l == &l_error) {
|
||||
handleEvent(*result, result->EXC_ERROR, "exc error");
|
||||
} else if ( l == &l_nullp ) {
|
||||
handleEvent(*result, result->EXC_NULLPOINTER, "exc nullpointer");
|
||||
@ -241,10 +241,10 @@ bool KESOrefs::run()
|
||||
sstr << "trap #" << l_trap.getTriggerNumber();
|
||||
handleEvent(*result, result->TRAP, sstr.str());
|
||||
|
||||
} else if (l == &l_mem_text){
|
||||
} else if (l == &l_mem_text) {
|
||||
handleMemoryAccessEvent(*result, l_mem_text);
|
||||
|
||||
} else if (l == &l_mem_outerspace){
|
||||
} else if (l == &l_mem_outerspace) {
|
||||
handleMemoryAccessEvent(*result, l_mem_outerspace);
|
||||
|
||||
} else {
|
||||
|
||||
@ -452,7 +452,7 @@ void L4SysExperiment::collectInstructionTrace(fail::BPSingleListener* bp)
|
||||
log << "mem accesses: " << mem << ", valid: " << mem_valid << std::endl;
|
||||
#else
|
||||
bp->setWatchInstructionPointer(ANY_ADDR);
|
||||
while(bp->getTriggerInstructionPointer() != L4SYS_FUNC_EXIT)
|
||||
while (bp->getTriggerInstructionPointer() != L4SYS_FUNC_EXIT)
|
||||
{
|
||||
fail::BaseListener *res = simulator.resume();
|
||||
address_t curr_addr = 0;
|
||||
|
||||
@ -36,7 +36,7 @@ using namespace fail;
|
||||
bool NanoJPEGExperiment::run()
|
||||
{
|
||||
Logger log("nJPEG", true);
|
||||
|
||||
|
||||
log << "startup" << endl;
|
||||
|
||||
#if PREPARATION == 1
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#ifndef __NANOJPEG_EXPERIMENT_HPP__
|
||||
#define __NANOJPEG_EXPERIMENT_HPP__
|
||||
|
||||
#define __NANOJPEG_EXPERIMENT_HPP__
|
||||
|
||||
#include "efw/ExperimentFlow.hpp"
|
||||
#include "efw/JobClient.hpp"
|
||||
|
||||
|
||||
@ -70,7 +70,7 @@ bool PSNR::load_refimage(char const *refimage_filename)
|
||||
|
||||
// one whitespace character
|
||||
fs.ignore();
|
||||
|
||||
|
||||
get_remaining_file_contents(fs, refimg);
|
||||
if (refimg.size() < refimg_width * refimg_height * 3) {
|
||||
std::cerr << "image too small" << std::endl;
|
||||
|
||||
@ -30,7 +30,7 @@ char const *
|
||||
Udis86Helper::mnemonicToString(unsigned mnemonic)
|
||||
{
|
||||
|
||||
switch(mnemonic) {
|
||||
switch (mnemonic) {
|
||||
CASE(UD_Iinvalid) CASE(UD_I3dnow) CASE(UD_Inone) CASE(UD_Idb) CASE(UD_Ipause) CASE(UD_Iaaa)
|
||||
CASE(UD_Iaad) CASE(UD_Iaam) CASE(UD_Iaas) CASE(UD_Iadc) CASE(UD_Iadd) CASE(UD_Iaddpd)
|
||||
CASE(UD_Iaddps) CASE(UD_Iaddsd) CASE(UD_Iaddss) CASE(UD_Iand) CASE(UD_Iandpd) CASE(UD_Iandps)
|
||||
@ -141,67 +141,67 @@ char const *
|
||||
Udis86Helper::typeToString(ud_type type)
|
||||
{
|
||||
switch (type) {
|
||||
CASE(UD_NONE)
|
||||
CASE(UD_NONE)
|
||||
|
||||
/* 8 bit GPRs */
|
||||
CASE(UD_R_AL) CASE(UD_R_CL) CASE(UD_R_DL) CASE(UD_R_BL)
|
||||
CASE(UD_R_AH) CASE(UD_R_CH) CASE(UD_R_DH) CASE(UD_R_BH)
|
||||
CASE(UD_R_SPL) CASE(UD_R_BPL) CASE(UD_R_SIL) CASE(UD_R_DIL)
|
||||
CASE(UD_R_R8B) CASE(UD_R_R9B) CASE(UD_R_R10B) CASE(UD_R_R11B)
|
||||
CASE(UD_R_R12B) CASE(UD_R_R13B) CASE(UD_R_R14B) CASE(UD_R_R15B)
|
||||
CASE(UD_R_AL) CASE(UD_R_CL) CASE(UD_R_DL) CASE(UD_R_BL)
|
||||
CASE(UD_R_AH) CASE(UD_R_CH) CASE(UD_R_DH) CASE(UD_R_BH)
|
||||
CASE(UD_R_SPL) CASE(UD_R_BPL) CASE(UD_R_SIL) CASE(UD_R_DIL)
|
||||
CASE(UD_R_R8B) CASE(UD_R_R9B) CASE(UD_R_R10B) CASE(UD_R_R11B)
|
||||
CASE(UD_R_R12B) CASE(UD_R_R13B) CASE(UD_R_R14B) CASE(UD_R_R15B)
|
||||
|
||||
/* 16 bit GPRs */
|
||||
CASE(UD_R_AX) CASE(UD_R_CX) CASE(UD_R_DX) CASE(UD_R_BX)
|
||||
CASE(UD_R_SP) CASE(UD_R_BP) CASE(UD_R_SI) CASE(UD_R_DI)
|
||||
CASE(UD_R_R8W) CASE(UD_R_R9W) CASE(UD_R_R10W) CASE(UD_R_R11W)
|
||||
CASE(UD_R_R12W) CASE(UD_R_R13W) CASE(UD_R_R14W) CASE(UD_R_R15W)
|
||||
|
||||
CASE(UD_R_AX) CASE(UD_R_CX) CASE(UD_R_DX) CASE(UD_R_BX)
|
||||
CASE(UD_R_SP) CASE(UD_R_BP) CASE(UD_R_SI) CASE(UD_R_DI)
|
||||
CASE(UD_R_R8W) CASE(UD_R_R9W) CASE(UD_R_R10W) CASE(UD_R_R11W)
|
||||
CASE(UD_R_R12W) CASE(UD_R_R13W) CASE(UD_R_R14W) CASE(UD_R_R15W)
|
||||
|
||||
/* 32 bit GPRs */
|
||||
CASE(UD_R_EAX) CASE(UD_R_ECX) CASE(UD_R_EDX) CASE(UD_R_EBX)
|
||||
CASE(UD_R_ESP) CASE(UD_R_EBP) CASE(UD_R_ESI) CASE(UD_R_EDI)
|
||||
CASE(UD_R_R8D) CASE(UD_R_R9D) CASE(UD_R_R10D) CASE(UD_R_R11D)
|
||||
CASE(UD_R_R12D) CASE(UD_R_R13D) CASE(UD_R_R14D) CASE(UD_R_R15D)
|
||||
|
||||
CASE(UD_R_EAX) CASE(UD_R_ECX) CASE(UD_R_EDX) CASE(UD_R_EBX)
|
||||
CASE(UD_R_ESP) CASE(UD_R_EBP) CASE(UD_R_ESI) CASE(UD_R_EDI)
|
||||
CASE(UD_R_R8D) CASE(UD_R_R9D) CASE(UD_R_R10D) CASE(UD_R_R11D)
|
||||
CASE(UD_R_R12D) CASE(UD_R_R13D) CASE(UD_R_R14D) CASE(UD_R_R15D)
|
||||
|
||||
/* 64 bit GPRs */
|
||||
CASE(UD_R_RAX) CASE(UD_R_RCX) CASE(UD_R_RDX) CASE(UD_R_RBX)
|
||||
CASE(UD_R_RSP) CASE(UD_R_RBP) CASE(UD_R_RSI) CASE(UD_R_RDI)
|
||||
CASE(UD_R_R8) CASE(UD_R_R9) CASE(UD_R_R10) CASE(UD_R_R11)
|
||||
CASE(UD_R_R12) CASE(UD_R_R13) CASE(UD_R_R14) CASE(UD_R_R15)
|
||||
CASE(UD_R_RAX) CASE(UD_R_RCX) CASE(UD_R_RDX) CASE(UD_R_RBX)
|
||||
CASE(UD_R_RSP) CASE(UD_R_RBP) CASE(UD_R_RSI) CASE(UD_R_RDI)
|
||||
CASE(UD_R_R8) CASE(UD_R_R9) CASE(UD_R_R10) CASE(UD_R_R11)
|
||||
CASE(UD_R_R12) CASE(UD_R_R13) CASE(UD_R_R14) CASE(UD_R_R15)
|
||||
|
||||
/* segment registers */
|
||||
CASE(UD_R_ES) CASE(UD_R_CS) CASE(UD_R_SS) CASE(UD_R_DS)
|
||||
CASE(UD_R_FS) CASE(UD_R_GS)
|
||||
CASE(UD_R_ES) CASE(UD_R_CS) CASE(UD_R_SS) CASE(UD_R_DS)
|
||||
CASE(UD_R_FS) CASE(UD_R_GS)
|
||||
|
||||
/* control registers*/
|
||||
CASE(UD_R_CR0) CASE(UD_R_CR1) CASE(UD_R_CR2) CASE(UD_R_CR3)
|
||||
CASE(UD_R_CR4) CASE(UD_R_CR5) CASE(UD_R_CR6) CASE(UD_R_CR7)
|
||||
CASE(UD_R_CR8) CASE(UD_R_CR9) CASE(UD_R_CR10) CASE(UD_R_CR11)
|
||||
CASE(UD_R_CR12) CASE(UD_R_CR13) CASE(UD_R_CR14) CASE(UD_R_CR15)
|
||||
|
||||
CASE(UD_R_CR0) CASE(UD_R_CR1) CASE(UD_R_CR2) CASE(UD_R_CR3)
|
||||
CASE(UD_R_CR4) CASE(UD_R_CR5) CASE(UD_R_CR6) CASE(UD_R_CR7)
|
||||
CASE(UD_R_CR8) CASE(UD_R_CR9) CASE(UD_R_CR10) CASE(UD_R_CR11)
|
||||
CASE(UD_R_CR12) CASE(UD_R_CR13) CASE(UD_R_CR14) CASE(UD_R_CR15)
|
||||
|
||||
/* debug registers */
|
||||
CASE(UD_R_DR0) CASE(UD_R_DR1) CASE(UD_R_DR2) CASE(UD_R_DR3)
|
||||
CASE(UD_R_DR4) CASE(UD_R_DR5) CASE(UD_R_DR6) CASE(UD_R_DR7)
|
||||
CASE(UD_R_DR8) CASE(UD_R_DR9) CASE(UD_R_DR10) CASE(UD_R_DR11)
|
||||
CASE(UD_R_DR12) CASE(UD_R_DR13) CASE(UD_R_DR14) CASE(UD_R_DR15)
|
||||
CASE(UD_R_DR0) CASE(UD_R_DR1) CASE(UD_R_DR2) CASE(UD_R_DR3)
|
||||
CASE(UD_R_DR4) CASE(UD_R_DR5) CASE(UD_R_DR6) CASE(UD_R_DR7)
|
||||
CASE(UD_R_DR8) CASE(UD_R_DR9) CASE(UD_R_DR10) CASE(UD_R_DR11)
|
||||
CASE(UD_R_DR12) CASE(UD_R_DR13) CASE(UD_R_DR14) CASE(UD_R_DR15)
|
||||
|
||||
/* mmx registers */
|
||||
CASE(UD_R_MM0) CASE(UD_R_MM1) CASE(UD_R_MM2) CASE(UD_R_MM3)
|
||||
CASE(UD_R_MM4) CASE(UD_R_MM5) CASE(UD_R_MM6) CASE(UD_R_MM7)
|
||||
CASE(UD_R_MM0) CASE(UD_R_MM1) CASE(UD_R_MM2) CASE(UD_R_MM3)
|
||||
CASE(UD_R_MM4) CASE(UD_R_MM5) CASE(UD_R_MM6) CASE(UD_R_MM7)
|
||||
|
||||
/* x87 registers */
|
||||
CASE(UD_R_ST0) CASE(UD_R_ST1) CASE(UD_R_ST2) CASE(UD_R_ST3)
|
||||
CASE(UD_R_ST4) CASE(UD_R_ST5) CASE(UD_R_ST6) CASE(UD_R_ST7)
|
||||
CASE(UD_R_ST0) CASE(UD_R_ST1) CASE(UD_R_ST2) CASE(UD_R_ST3)
|
||||
CASE(UD_R_ST4) CASE(UD_R_ST5) CASE(UD_R_ST6) CASE(UD_R_ST7)
|
||||
|
||||
/* extended multimedia registers */
|
||||
CASE(UD_R_XMM0) CASE(UD_R_XMM1) CASE(UD_R_XMM2) CASE(UD_R_XMM3)
|
||||
CASE(UD_R_XMM4) CASE(UD_R_XMM5) CASE(UD_R_XMM6) CASE(UD_R_XMM7)
|
||||
CASE(UD_R_XMM8) CASE(UD_R_XMM9) CASE(UD_R_XMM10) CASE(UD_R_XMM11)
|
||||
CASE(UD_R_XMM12) CASE(UD_R_XMM13) CASE(UD_R_XMM14) CASE(UD_R_XMM15)
|
||||
CASE(UD_R_XMM0) CASE(UD_R_XMM1) CASE(UD_R_XMM2) CASE(UD_R_XMM3)
|
||||
CASE(UD_R_XMM4) CASE(UD_R_XMM5) CASE(UD_R_XMM6) CASE(UD_R_XMM7)
|
||||
CASE(UD_R_XMM8) CASE(UD_R_XMM9) CASE(UD_R_XMM10) CASE(UD_R_XMM11)
|
||||
CASE(UD_R_XMM12) CASE(UD_R_XMM13) CASE(UD_R_XMM14) CASE(UD_R_XMM15)
|
||||
|
||||
CASE(UD_R_RIP)
|
||||
CASE(UD_R_RIP)
|
||||
|
||||
/* Operand Types */
|
||||
CASE(UD_OP_REG) CASE(UD_OP_MEM) CASE(UD_OP_PTR) CASE(UD_OP_IMM)
|
||||
CASE(UD_OP_REG) CASE(UD_OP_MEM) CASE(UD_OP_PTR) CASE(UD_OP_IMM)
|
||||
CASE(UD_OP_JIMM) CASE(UD_OP_CONST)
|
||||
default:
|
||||
return "???";
|
||||
|
||||
@ -48,7 +48,7 @@ bool PerfTestExperiment::run()
|
||||
#if 1
|
||||
log << "Activated: CASE A (Best-Case)..." << endl;
|
||||
// Case A): A lot of non-BP listeners a only one (or none) BPs:
|
||||
|
||||
|
||||
log << "Adding " << NON_BP_COUNT << " non-BP listeners..." << endl;
|
||||
MemReadListener mrl[NON_BP_COUNT];
|
||||
for (unsigned i = 0; i < NON_BP_COUNT; ++i) {
|
||||
|
||||
@ -112,7 +112,7 @@ uint64_t RAMpageCampaign::reverse_bits(uint64_t v)
|
||||
int s = sizeof(v) * CHAR_BIT - 1; // extra shift needed at end
|
||||
|
||||
for (v >>= 1; v; v >>= 1)
|
||||
{
|
||||
{
|
||||
r <<= 1;
|
||||
r |= v & 1;
|
||||
s--;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#ifndef __RAMPAGE_EXPERIMENT_HPP__
|
||||
#define __RAMPAGE_EXPERIMENT_HPP__
|
||||
|
||||
#define __RAMPAGE_EXPERIMENT_HPP__
|
||||
|
||||
#include <string>
|
||||
#include <ctime>
|
||||
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
|| !defined(CONFIG_EVENT_GUESTSYS) || !defined(CONFIG_EVENT_INTERRUPT) \
|
||||
|| !defined(CONFIG_EVENT_IOPORT) || !defined(CONFIG_EVENT_JUMP) || !defined(CONFIG_EVENT_MEMREAD) \
|
||||
|| !defined(CONFIG_EVENT_MEMWRITE) || !defined(CONFIG_EVENT_TRAP) || !defined(CONFIG_SR_REBOOT) \
|
||||
|| !defined(CONFIG_SR_SAVE) || !defined(CONFIG_SR_RESTORE) || !defined(CONFIG_SUPPRESS_INTERRUPTS)
|
||||
|| !defined(CONFIG_SR_SAVE) || !defined(CONFIG_SR_RESTORE) || !defined(CONFIG_SUPPRESS_INTERRUPTS)
|
||||
#error This experiment needs: all CONFIG_EVENT_*, all CONFIG_SR_* and the CONFIG_SUPPRESS_INTERRUPTS flag. Enable these in the configuration.
|
||||
#endif
|
||||
|
||||
@ -25,17 +25,17 @@ using namespace std;
|
||||
using namespace fail;
|
||||
|
||||
bool RegressionTest::run()
|
||||
{
|
||||
{
|
||||
unsigned instrAddr_at_save = 0;
|
||||
BaseListener *ev;
|
||||
|
||||
|
||||
//Result-File
|
||||
fstream file ("regression-test.results", ios::out | ios::trunc);
|
||||
file << "experiment start" << endl;
|
||||
|
||||
|
||||
//Wait for correct start point
|
||||
GuestListener g;
|
||||
|
||||
|
||||
while (simulator.addListenerAndResume(&g) == &g) {
|
||||
if (g.getData() == 'A') {
|
||||
file << "Found start-point with signal: " << g.getData() << endl;
|
||||
@ -43,25 +43,25 @@ bool RegressionTest::run()
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Watchdog-Timer
|
||||
TimerListener watchdog(100000);
|
||||
simulator.addListener(&watchdog);
|
||||
|
||||
|
||||
//Save state
|
||||
file << "Saving state." << endl;
|
||||
simulator.save("regression-save");
|
||||
instrAddr_at_save = simulator.getCPU(0).getInstructionPointer();
|
||||
|
||||
|
||||
//Start Plugins
|
||||
TracingPlugin tp;
|
||||
ofstream of("regression-trace.results");
|
||||
tp.setOstream(&of);
|
||||
simulator.addFlow(&tp);
|
||||
|
||||
|
||||
SerialOutput so(0x3F8);
|
||||
simulator.addFlow(&so);
|
||||
|
||||
|
||||
//BPListener
|
||||
BPSingleListener bp_test(REGRESSION_FUNC_BP);
|
||||
BPSingleListener mem_read_test(REGRESSION_FUNC_MEM_READ);
|
||||
@ -76,53 +76,53 @@ bool RegressionTest::run()
|
||||
simulator.addListener(&trap_test);
|
||||
simulator.addListener(&jump_test);
|
||||
simulator.addListener(&interrupt_test);
|
||||
|
||||
|
||||
while (true) {
|
||||
simulator.removeListener(&watchdog);
|
||||
simulator.addListener(&watchdog);
|
||||
ev = simulator.resume();
|
||||
|
||||
|
||||
if (ev == &bp_test) {
|
||||
file << "Breakpoint-Test start." << endl;
|
||||
|
||||
BPSingleListener mainbp(ANY_ADDR);
|
||||
|
||||
BPSingleListener mainbp(ANY_ADDR);
|
||||
mainbp.setCounter(1000);
|
||||
|
||||
|
||||
BPRangeListener bprange(REGRESSION_FUNC_LOOP_DONE, REGRESSION_FUNC_LOOP_DONE);
|
||||
BPSingleListener breakcounter(REGRESSION_FUNC_LOOP_DONE);
|
||||
simulator.addListener(&breakcounter);
|
||||
|
||||
int count = 0;
|
||||
|
||||
while(true){
|
||||
|
||||
while (true) {
|
||||
|
||||
BaseListener* ev = simulator.resume();
|
||||
|
||||
if(ev == &breakcounter || ev == &bprange) {
|
||||
|
||||
|
||||
if (ev == &breakcounter || ev == &bprange) {
|
||||
|
||||
count++;
|
||||
//First 5 times test BPSingleListener
|
||||
if(count < 5){
|
||||
if (count < 5) {
|
||||
simulator.addListener(&breakcounter);
|
||||
//Next 5 times test BPRangeListener
|
||||
}else if(count < 10){
|
||||
} else if (count < 10) {
|
||||
simulator.addListener(&bprange);
|
||||
//At 10 run of loop start BPSingleListener, BPRangeListener, mainListener
|
||||
//which waits 1000 instructions.
|
||||
}else if(count == 10){
|
||||
//At 10 run of loop start BPSingleListener, BPRangeListener, mainListener
|
||||
//which waits 1000 instructions.
|
||||
} else if (count == 10) {
|
||||
simulator.addListener(&breakcounter);
|
||||
simulator.addListener(&bprange);
|
||||
simulator.addListener(&mainbp);
|
||||
//If mainListener fires not first the test failes.
|
||||
}else if(count >= 10){
|
||||
}else if (count >= 10) {
|
||||
file << "Breakpoint-Test FAILED."<< endl;
|
||||
break;
|
||||
}
|
||||
//If mainListener fires first the test success.
|
||||
}else if(ev == &mainbp) {
|
||||
} else if (ev == &mainbp) {
|
||||
file << "Breakpoint-Test SUCCESSFUL." <<endl;
|
||||
break;
|
||||
}else if (ev == &watchdog) {
|
||||
} else if (ev == &watchdog) {
|
||||
file << "Breakpoint-Test FAILED --> Watchdog fired. Timeout!" << endl;
|
||||
}
|
||||
}
|
||||
@ -130,63 +130,63 @@ bool RegressionTest::run()
|
||||
simulator.removeListener(&breakcounter);
|
||||
simulator.removeListener(&bprange);
|
||||
simulator.removeListener(&mainbp);
|
||||
|
||||
|
||||
} else if (ev == &mem_read_test) {
|
||||
|
||||
file << "Memory-Read-Test start." << endl;
|
||||
|
||||
|
||||
MemReadListener memread(REGRESSION_VAR_MTEST_READ);
|
||||
simulator.addListener(&memread);
|
||||
simulator.resume();
|
||||
|
||||
|
||||
file << "Memaddr-Read: " << hex << memread.getTriggerAddress() << dec << endl;
|
||||
|
||||
if(memread.getTriggerAddress() == REGRESSION_VAR_MTEST_READ) {
|
||||
|
||||
if (memread.getTriggerAddress() == REGRESSION_VAR_MTEST_READ) {
|
||||
file << "Memory-Read-Test SUCCESSFUL." << endl;
|
||||
} else {
|
||||
file << "Memory-Read-Test FAILED." << endl;
|
||||
}
|
||||
|
||||
|
||||
file << "Memory-Read-Test end." << endl;
|
||||
simulator.removeListener(&memread);
|
||||
|
||||
} else if (ev == &mem_write_test) {
|
||||
|
||||
|
||||
file << "Memory-Write-Test start." << endl;
|
||||
|
||||
|
||||
MemWriteListener memwrite(REGRESSION_VAR_MTEST_WRITE);
|
||||
simulator.addListener(&memwrite);
|
||||
simulator.resume();
|
||||
|
||||
|
||||
file << "Memaddr-WRITE: " << hex << memwrite.getTriggerAddress() << dec << endl;
|
||||
|
||||
if(memwrite.getTriggerAddress() == REGRESSION_VAR_MTEST_WRITE) {
|
||||
if (memwrite.getTriggerAddress() == REGRESSION_VAR_MTEST_WRITE) {
|
||||
file << "Memory-Write-Test SUCCESSFUL." << endl;
|
||||
} else {
|
||||
file << "Memory-Write-Test FAILED." << endl;
|
||||
}
|
||||
|
||||
file << "Memory-Write-Test end." << endl;
|
||||
|
||||
|
||||
|
||||
|
||||
} else if (ev == &trap_test) {
|
||||
|
||||
|
||||
file << "Trap-Test start" << endl;
|
||||
|
||||
|
||||
TrapListener trap(ANY_TRAP);
|
||||
simulator.addListener(&trap);
|
||||
simulator.resume();
|
||||
file << "Trap found: " << trap.getTriggerNumber() << endl;
|
||||
|
||||
|
||||
file << "Trap-Test end" << endl;
|
||||
|
||||
|
||||
simulator.removeListener(&trap);
|
||||
|
||||
|
||||
//After a division-error trap ecos halts the cpu
|
||||
//Because of this a restore to start point is needed
|
||||
|
||||
|
||||
simulator.restore("regression-save");
|
||||
|
||||
|
||||
if (simulator.getCPU(0).getInstructionPointer() == instrAddr_at_save) {
|
||||
file << "Save-/Restore-Test SUCCESSFUL." << endl;
|
||||
} else {
|
||||
@ -196,44 +196,44 @@ bool RegressionTest::run()
|
||||
file << "Instructionpointer after restore: " << \
|
||||
simulator.getCPU(0).getInstructionPointer() << endl;
|
||||
}
|
||||
|
||||
|
||||
// Reboot test
|
||||
|
||||
file << "Reboot-Test start" << endl;
|
||||
|
||||
BPSingleListener bpReboot(ANY_ADDR);
|
||||
|
||||
|
||||
simulator.addListener(&bpReboot);
|
||||
simulator.resume();
|
||||
|
||||
long beforeReboot = bpReboot.getTriggerInstructionPointer();
|
||||
|
||||
|
||||
file << "Before Reboot-Addr: 0x" << hex << beforeReboot << dec << endl;
|
||||
|
||||
simulator.reboot();
|
||||
|
||||
|
||||
simulator.reboot();
|
||||
|
||||
bpReboot.setWatchInstructionPointer(beforeReboot);
|
||||
simulator.addListener(&bpReboot);
|
||||
simulator.resume();
|
||||
|
||||
|
||||
long afterReboot = bpReboot.getTriggerInstructionPointer();
|
||||
|
||||
|
||||
file << "After Reboot-Addr: 0x" << hex << afterReboot << dec << endl;
|
||||
|
||||
if (beforeReboot == afterReboot){
|
||||
|
||||
if (beforeReboot == afterReboot) {
|
||||
file << "Reboot-Test SUCCESSFUL." << endl;
|
||||
}else {
|
||||
} else {
|
||||
file << "Reboot-Test FAILED." << endl;
|
||||
}
|
||||
|
||||
file << "Reboot-Test end" << endl;
|
||||
simulator.removeListener(&bpReboot);
|
||||
|
||||
|
||||
file << "Serial-Output: " << so.getOutput() << endl;
|
||||
|
||||
|
||||
file.flush();
|
||||
of.flush();
|
||||
|
||||
|
||||
simulator.terminate();
|
||||
|
||||
} else if (ev == &jump_test) {
|
||||
@ -242,36 +242,36 @@ bool RegressionTest::run()
|
||||
JumpListener jump(ANY_INSTR);
|
||||
simulator.addListener(&jump);
|
||||
simulator.resume();
|
||||
|
||||
|
||||
file << "Jump-Instruction found: " << jump.getOpcode() << endl;
|
||||
file << "current Instruction-Pointer: 0x" << hex <<\
|
||||
simulator.getCPU(0).getInstructionPointer() << dec << endl;
|
||||
|
||||
|
||||
file << "Jump-Test end" << endl;
|
||||
|
||||
|
||||
simulator.removeListener(&jump);
|
||||
|
||||
|
||||
} else if (ev == &interrupt_test) {
|
||||
|
||||
|
||||
file << "Interrupt-Test start" << endl;
|
||||
|
||||
|
||||
InterruptListener interrupt(32);
|
||||
simulator.addListener(&interrupt);
|
||||
ev = simulator.resume();
|
||||
|
||||
|
||||
if (ev == &interrupt) {
|
||||
file << "Interrupt-Test SUCCESSFUL. Interruptnum: " << interrupt.getTriggerNumber() \
|
||||
<< endl;
|
||||
}
|
||||
|
||||
|
||||
file << "Interrupt-Test end" << endl;
|
||||
} else if (ev == &watchdog) {
|
||||
file << "Watchdog fired. Timeout!" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
file << "experiment end" << endl;
|
||||
|
||||
|
||||
return true;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -7,7 +7,7 @@ class RegressionTest : public fail::ExperimentFlow
|
||||
{
|
||||
public:
|
||||
RegressionTest() { }
|
||||
|
||||
|
||||
bool run();
|
||||
};
|
||||
|
||||
|
||||
@ -305,7 +305,7 @@ bool WeatherMonitorCampaign::run()
|
||||
// is not the case in this experiment, and with -1 we'll get a result
|
||||
// comparable to the non-pruned campaign.
|
||||
// XXX still true for weathermonitor?
|
||||
|
||||
|
||||
current_ec.instr2 = instr - 1;
|
||||
current_ec.instr2_absolute = 0; // unknown
|
||||
current_ec.data_address = data_address;
|
||||
|
||||
@ -36,7 +36,7 @@ bool WeatherMonitorExperiment::run()
|
||||
char const *statename = "bochs.state" WEATHER_SUFFIX;
|
||||
Logger log("Weathermonitor", false);
|
||||
BPSingleListener bp;
|
||||
|
||||
|
||||
log << "startup" << endl;
|
||||
|
||||
#if 1
|
||||
@ -160,11 +160,11 @@ bool WeatherMonitorExperiment::run()
|
||||
int id = param.getWorkloadID();
|
||||
int instr_offset = param.msg.instr_offset();
|
||||
int mem_addr = param.msg.mem_addr();
|
||||
// Choose the bit_offset for this gem5 build.
|
||||
// Choose the bit_offset for this gem5 build.
|
||||
// To test all 8 bits, 8 campaign runs are needed.
|
||||
int bit_offset = 0;
|
||||
|
||||
|
||||
|
||||
// 8 results in one job
|
||||
WeathermonitorProtoMsg_Result *result = param.msg.add_result();
|
||||
result->set_bit_offset(bit_offset);
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#ifndef __WEATHERMONITOR_EXPERIMENT_HPP__
|
||||
#define __WEATHERMONITOR_EXPERIMENT_HPP__
|
||||
|
||||
#define __WEATHERMONITOR_EXPERIMENT_HPP__
|
||||
|
||||
#include "efw/ExperimentFlow.hpp"
|
||||
#include "efw/JobClient.hpp"
|
||||
|
||||
|
||||
@ -37,7 +37,7 @@ bool WeatherMonitorExperiment::run()
|
||||
char const *statename = "bochs.state" WEATHER_SUFFIX;
|
||||
Logger log("Weathermonitor", false);
|
||||
BPSingleListener bp;
|
||||
|
||||
|
||||
log << "startup" << endl;
|
||||
|
||||
/*
|
||||
@ -179,7 +179,7 @@ bool WeatherMonitorExperiment::run()
|
||||
for (int bit_offset = 0; bit_offset < 8; ++bit_offset) {
|
||||
// 8 results in one job
|
||||
WeathermonitorProtoMsg_Result *result = param.msg.add_result();
|
||||
result->set_bitoffset(bit_offset);
|
||||
result->set_bitoffset(bit_offset);
|
||||
log << dec << "job " << id << " instr " << injection_instr
|
||||
<< " mem " << data_address << "+" << bit_offset << endl;
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#ifndef __WEATHERMONITOR_EXPERIMENT_HPP__
|
||||
#define __WEATHERMONITOR_EXPERIMENT_HPP__
|
||||
|
||||
#define __WEATHERMONITOR_EXPERIMENT_HPP__
|
||||
|
||||
#include "efw/ExperimentFlow.hpp"
|
||||
#include "efw/JobClient.hpp"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user