cpn/database: include data_width in the fsppilot during prune step

During the prune step the data_width of the injected location was not
propagated before. It is now stored in fsppilot (database layout change!) and
sent in the fsppilot protobuf message.

Change-Id: I0562f6fc8957adea0f8a9fb63469ca5e3f4b7b2d
This commit is contained in:
Christian Dietrich
2013-09-10 14:54:33 +02:00
parent 60bf0bae69
commit d26fc28fa4
5 changed files with 16 additions and 10 deletions

View File

@ -11,6 +11,7 @@ message DatabaseCampaignMessage {
required int32 injection_instr = 4 [(sql_ignore) = true];
optional int32 injection_instr_absolute = 5 [(sql_ignore) = true];
required int32 data_address = 6 [(sql_ignore) = true];
required string variant = 7 [(sql_ignore) = true];
required string benchmark = 8 [(sql_ignore) = true];
required int32 data_width = 7 [(sql_ignore) = true];
required string variant = 8 [(sql_ignore) = true];
required string benchmark = 9 [(sql_ignore) = true];
}

View File

@ -112,7 +112,7 @@ void DatabaseCampaign::collect_result_thread() {
bool DatabaseCampaign::run_variant(Database::Variant variant) {
/* Gather all unfinished jobs */
int experiment_count;
std::string sql_select = "SELECT pilot_id, g.fspmethod_id, g.variant_id, p.injection_instr, p.injection_instr_absolute, g.data_address ";
std::string sql_select = "SELECT pilot_id, g.fspmethod_id, g.variant_id, p.injection_instr, p.injection_instr_absolute, g.data_address, p.data_width ";
std::stringstream ss;
ss << " FROM fspgroup g"
<< " INNER JOIN fsppilot p ON p.id = g.pilot_id "
@ -140,6 +140,7 @@ bool DatabaseCampaign::run_variant(Database::Variant variant) {
unsigned pilot_id = atoi(row[0]);
unsigned injection_instr = atoi(row[3]);
unsigned data_address = atoi(row[5]);
unsigned data_width = atoi(row[6]);
DatabaseCampaignMessage pilot;
@ -149,11 +150,14 @@ bool DatabaseCampaign::run_variant(Database::Variant variant) {
pilot.set_injection_instr(injection_instr);
pilot.set_variant(variant.variant);
pilot.set_benchmark(variant.benchmark);
if (row[4]) {
unsigned injection_instr_absolute = atoi(row[4]);
pilot.set_injection_instr_absolute(injection_instr_absolute);
}
pilot.set_data_address(data_address);
pilot.set_data_width(data_width);
this->cb_send_pilot(pilot);

View File

@ -30,11 +30,11 @@ public:
// <reg> | <offset>
return (id << 4) | (offset / 8);
}
// does not recreate width or mask
static reginfo_t fromDataAddress(int addr) {
static reginfo_t fromDataAddress(int addr, int width) {
int id = addr >> 4;
byte_t offset = (addr & 0xf) * 8;
return reginfo_t(id, 0, offset);
return reginfo_t(id, width * 8, offset);
}
reginfo_t(int id=-1, regwidth_t width = 32, byte_t offs = 0)