ecos: baseline assessment integrated into main experiment
Change-Id: Iaf2a31c917b6ddd50568e5fb784ab8457193ee7d
This commit is contained in:
committed by
Gerrit Code Review
parent
403886e541
commit
091e8dcae0
@ -17,8 +17,13 @@
|
|||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace fail;
|
using namespace fail;
|
||||||
|
|
||||||
const std::string EcosKernelTestCampaign::dir_images("images");
|
#if BASELINE_ASSESSMENT
|
||||||
|
const std::string EcosKernelTestCampaign::dir_prerequisites("prerequisites-baseline");
|
||||||
|
const std::string EcosKernelTestCampaign::dir_images("images-baseline");
|
||||||
|
#else
|
||||||
const std::string EcosKernelTestCampaign::dir_prerequisites("prerequisites");
|
const std::string EcosKernelTestCampaign::dir_prerequisites("prerequisites");
|
||||||
|
const std::string EcosKernelTestCampaign::dir_images("images");
|
||||||
|
#endif
|
||||||
const std::string EcosKernelTestCampaign::dir_results("results");
|
const std::string EcosKernelTestCampaign::dir_results("results");
|
||||||
|
|
||||||
bool EcosKernelTestCampaign::writeTraceInfo(unsigned instr_counter, unsigned timeout,
|
bool EcosKernelTestCampaign::writeTraceInfo(unsigned instr_counter, unsigned timeout,
|
||||||
|
|||||||
@ -59,7 +59,13 @@ using namespace fail;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if PREREQUISITES
|
#if PREREQUISITES
|
||||||
bool EcosKernelTestExperiment::retrieveGuestAddresses(guest_address_t addr_finish) {
|
bool EcosKernelTestExperiment::retrieveGuestAddresses(guest_address_t addr_finish, guest_address_t addr_data_start, guest_address_t addr_data_end) {
|
||||||
|
#if BASELINE_ASSESSMENT
|
||||||
|
log << "STEP 0: creating memory map spanning all of DATA and BSS" << endl;
|
||||||
|
MemoryMap mm;
|
||||||
|
mm.add(addr_data_start, addr_data_end - addr_data_start);
|
||||||
|
mm.writeToFile(EcosKernelTestCampaign::filename_memorymap(m_variant, m_benchmark).c_str());
|
||||||
|
#else
|
||||||
log << "STEP 0: record memory map with addresses of 'interesting' objects" << endl;
|
log << "STEP 0: record memory map with addresses of 'interesting' objects" << endl;
|
||||||
|
|
||||||
// run until func_finish is reached
|
// run until func_finish is reached
|
||||||
@ -111,6 +117,7 @@ bool EcosKernelTestExperiment::retrieveGuestAddresses(guest_address_t addr_finis
|
|||||||
|
|
||||||
// close serialized mm
|
// close serialized mm
|
||||||
mm.close();
|
mm.close();
|
||||||
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -280,7 +287,8 @@ bool EcosKernelTestExperiment::faultInjection() {
|
|||||||
unsigned instr_counter, estimated_timeout, mem1_low, mem1_high, mem2_low, mem2_high;
|
unsigned instr_counter, estimated_timeout, mem1_low, mem1_high, mem2_low, mem2_high;
|
||||||
// ELF symbol addresses
|
// ELF symbol addresses
|
||||||
guest_address_t addr_entry, addr_finish, addr_test_output, addr_errors_corrected,
|
guest_address_t addr_entry, addr_finish, addr_test_output, addr_errors_corrected,
|
||||||
addr_panic, addr_text_start, addr_text_end;
|
addr_panic, addr_text_start, addr_text_end,
|
||||||
|
addr_data_start, addr_data_end;
|
||||||
|
|
||||||
BPSingleListener bp;
|
BPSingleListener bp;
|
||||||
|
|
||||||
@ -320,7 +328,8 @@ bool EcosKernelTestExperiment::faultInjection() {
|
|||||||
EcosKernelTestCampaign::readTraceInfo(instr_counter, estimated_timeout,
|
EcosKernelTestCampaign::readTraceInfo(instr_counter, estimated_timeout,
|
||||||
mem1_low, mem1_high, mem2_low, mem2_high, m_variant, m_benchmark);
|
mem1_low, mem1_high, mem2_low, mem2_high, m_variant, m_benchmark);
|
||||||
readELFSymbols(addr_entry, addr_finish, addr_test_output,
|
readELFSymbols(addr_entry, addr_finish, addr_test_output,
|
||||||
addr_errors_corrected, addr_panic, addr_text_start, addr_text_end);
|
addr_errors_corrected, addr_panic, addr_text_start, addr_text_end,
|
||||||
|
addr_data_start, addr_data_end);
|
||||||
|
|
||||||
int state_instr_offset = instr_offset - (instr_offset % MULTIPLE_SNAPSHOTS_DISTANCE);
|
int state_instr_offset = instr_offset - (instr_offset % MULTIPLE_SNAPSHOTS_DISTANCE);
|
||||||
string statename;
|
string statename;
|
||||||
@ -615,7 +624,9 @@ bool EcosKernelTestExperiment::readELFSymbols(
|
|||||||
fail::guest_address_t& errors_corrected,
|
fail::guest_address_t& errors_corrected,
|
||||||
fail::guest_address_t& panic,
|
fail::guest_address_t& panic,
|
||||||
fail::guest_address_t& text_start,
|
fail::guest_address_t& text_start,
|
||||||
fail::guest_address_t& text_end)
|
fail::guest_address_t& text_end,
|
||||||
|
fail::guest_address_t& data_start,
|
||||||
|
fail::guest_address_t& data_end)
|
||||||
{
|
{
|
||||||
ElfReader elfreader(EcosKernelTestCampaign::filename_elf(m_variant, m_benchmark).c_str());
|
ElfReader elfreader(EcosKernelTestCampaign::filename_elf(m_variant, m_benchmark).c_str());
|
||||||
entry = elfreader.getSymbol("cyg_start").getAddress();
|
entry = elfreader.getSymbol("cyg_start").getAddress();
|
||||||
@ -625,10 +636,13 @@ bool EcosKernelTestExperiment::readELFSymbols(
|
|||||||
panic = elfreader.getSymbol("_Z9ecc_panicv").getAddress();
|
panic = elfreader.getSymbol("_Z9ecc_panicv").getAddress();
|
||||||
text_start = elfreader.getSymbol("_stext").getAddress();
|
text_start = elfreader.getSymbol("_stext").getAddress();
|
||||||
text_end = elfreader.getSymbol("_etext").getAddress();
|
text_end = elfreader.getSymbol("_etext").getAddress();
|
||||||
|
data_start = elfreader.getSymbol("__ram_data_start").getAddress();
|
||||||
|
data_end = elfreader.getSymbol("__bss_end").getAddress();
|
||||||
|
|
||||||
// it's OK if errors_corrected or ecc_panic are missing
|
// it's OK if errors_corrected or ecc_panic are missing
|
||||||
if (entry == ADDR_INV || finish == ADDR_INV || test_output == ADDR_INV ||
|
if (entry == ADDR_INV || finish == ADDR_INV || test_output == ADDR_INV ||
|
||||||
text_start == ADDR_INV || text_end == ADDR_INV) {
|
text_start == ADDR_INV || text_end == ADDR_INV ||
|
||||||
|
data_start == ADDR_INV || data_end == ADDR_INV) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -673,15 +687,15 @@ bool EcosKernelTestExperiment::run()
|
|||||||
#if PREREQUISITES
|
#if PREREQUISITES
|
||||||
log << "retrieving ELF symbol addresses ..." << endl;
|
log << "retrieving ELF symbol addresses ..." << endl;
|
||||||
guest_address_t entry, finish, test_output, errors_corrected,
|
guest_address_t entry, finish, test_output, errors_corrected,
|
||||||
panic, text_start, text_end;
|
panic, text_start, text_end, data_start, data_end;
|
||||||
if (!readELFSymbols(entry, finish, test_output, errors_corrected,
|
if (!readELFSymbols(entry, finish, test_output, errors_corrected,
|
||||||
panic, text_start, text_end)) {
|
panic, text_start, text_end, data_start, data_end)) {
|
||||||
log << "failed, essential symbols are missing!" << endl;
|
log << "failed, essential symbols are missing!" << endl;
|
||||||
simulator.terminate(1);
|
simulator.terminate(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// step 0
|
// step 0
|
||||||
if(retrieveGuestAddresses(finish)) {
|
if (retrieveGuestAddresses(finish, data_start, data_end)) {
|
||||||
log << "STEP 0 finished: rebooting ..." << endl;
|
log << "STEP 0 finished: rebooting ..." << endl;
|
||||||
simulator.reboot();
|
simulator.reboot();
|
||||||
} else { return false; }
|
} else { return false; }
|
||||||
|
|||||||
@ -16,7 +16,7 @@ public:
|
|||||||
bool run();
|
bool run();
|
||||||
|
|
||||||
void parseOptions();
|
void parseOptions();
|
||||||
bool retrieveGuestAddresses(fail::guest_address_t addr_finish); // step 0
|
bool retrieveGuestAddresses(fail::guest_address_t addr_finish, fail::guest_address_t addr_data_start, fail::guest_address_t addr_data_end); // step 0
|
||||||
bool establishState(fail::guest_address_t addr_entry, fail::guest_address_t addr_finish, fail::guest_address_t addr_errors_corrected); // step 1
|
bool establishState(fail::guest_address_t addr_entry, fail::guest_address_t addr_finish, fail::guest_address_t addr_errors_corrected); // step 1
|
||||||
bool performTrace(fail::guest_address_t addr_entry, fail::guest_address_t addr_finish); // step 2
|
bool performTrace(fail::guest_address_t addr_entry, fail::guest_address_t addr_finish); // step 2
|
||||||
bool faultInjection(); // step 3
|
bool faultInjection(); // step 3
|
||||||
@ -28,5 +28,7 @@ public:
|
|||||||
fail::guest_address_t& errors_corrected,
|
fail::guest_address_t& errors_corrected,
|
||||||
fail::guest_address_t& panic,
|
fail::guest_address_t& panic,
|
||||||
fail::guest_address_t& text_start,
|
fail::guest_address_t& text_start,
|
||||||
fail::guest_address_t& text_end);
|
fail::guest_address_t& text_end,
|
||||||
|
fail::guest_address_t& data_start,
|
||||||
|
fail::guest_address_t& data_end);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#define BASELINE_ASSESSMENT 1
|
||||||
#define PREREQUISITES 0
|
#define PREREQUISITES 0
|
||||||
#define ECOS_FAULTMODEL_BURST 0
|
#define ECOS_FAULTMODEL_BURST 0
|
||||||
|
|||||||
Reference in New Issue
Block a user