visualfail: high-level code mapping fixes and cleanups

Now high-level to low-level code mapping seems to be right for the first
time.

Change-Id: I3c6a7cfdf3f3e4da32420a74280ae4ae042acc09
This commit is contained in:
Horst Schirmeier
2015-01-08 12:06:23 +01:00
parent d536cc72aa
commit 957f9c9357

View File

@ -224,30 +224,26 @@ function getHighlevelCode()
$kleinsteAdresse = mysql_fetch_object($kleinsteAdresseErgebnis); $kleinsteAdresse = mysql_fetch_object($kleinsteAdresseErgebnis);
$highlevelCodeAbfrage = "SELECT linenumber, line FROM dbg_source WHERE variant_id = '" . $_GET['variant_id']. "' AND file_id = '" . $_GET['file_id']. "' ORDER BY linenumber;"; $highlevelCodeAbfrage = "SELECT linenumber, line FROM dbg_source WHERE variant_id = '" . $_GET['variant_id']. "' AND file_id = '" . $_GET['file_id']. "' ORDER BY linenumber;";
$mappingAbfrage = "SELECT instr_absolute, linenumber FROM dbg_mapping WHERE variant_id = '" . $_GET['variant_id']. "' AND file_id = '" . $_GET['file_id'] . "' AND instr_absolute >= '" . $kleinsteAdresse->instr_address . "' ORDER BY instr_absolute;"; $mappingAbfrage = "SELECT linenumber, instr_absolute, line_range_size FROM dbg_mapping WHERE variant_id = '" . $_GET['variant_id']. "' AND file_id = '" . $_GET['file_id'] . "' AND instr_absolute >= '" . $kleinsteAdresse->instr_address . "' ORDER BY instr_absolute;";
$highlevelCode = mysql_query($highlevelCodeAbfrage); $highlevelCode = mysql_query($highlevelCodeAbfrage);
$mappingInfo = mysql_query($mappingAbfrage); $mappingInfo = mysql_query($mappingAbfrage);
$fehlerdaten = resultsDB($_GET['variant_id'], $_GET['version'], $resulttypes); $fehlerdaten = resultsDB($_GET['variant_id'], $_GET['version'], $resulttypes);
// retrieve mapping of linenumber -> array of [start-address;end-address) ranges
$mappingRanges = array(); $mappingRanges = array();
$numEntrysMapping = mysql_num_rows($mappingInfo); while (($row = mysql_fetch_object($mappingInfo))) {
$row = mysql_fetch_object($mappingInfo);
// FIXME use values from DB instead
for ($i = 0; $i < $numEntrysMapping-1; $i++) {
if (!isset($mappingRanges[$row->linenumber])) { if (!isset($mappingRanges[$row->linenumber])) {
$mappingRanges[$row->linenumber] = array(); $mappingRanges[$row->linenumber] = array();
} }
$oldLineNumber = $row->linenumber; $mappingRanges[$row->linenumber][] =
$firstAddr = $row->instr_absolute; array(intval($row->instr_absolute),
$row = mysql_fetch_object($mappingInfo); $row->instr_absolute + $row->line_range_size);
array_push($mappingRanges[$oldLineNumber], array($firstAddr, $row->instr_absolute));
} }
$mapping = array(); $mapping = array();
// "maxFehler" should be "sumFehler" or alike
$maxFehlerMapping = array(); $maxFehlerMapping = array();
foreach ($mappingRanges as $lineNumber => $value) { foreach ($mappingRanges as $lineNumber => $value) {
@ -260,13 +256,13 @@ function getHighlevelCode()
$InstrMappingAbfrage = "SELECT instr_address, disassemble FROM objdump WHERE variant_id = '" . $_GET['variant_id']. "' AND instr_address >= '" . $ranges[0] . "' AND instr_address < '" . $ranges[1] . "' ORDER BY instr_address;"; $InstrMappingAbfrage = "SELECT instr_address, disassemble FROM objdump WHERE variant_id = '" . $_GET['variant_id']. "' AND instr_address >= '" . $ranges[0] . "' AND instr_address < '" . $ranges[1] . "' ORDER BY instr_address;";
$mappingErgebnis = mysql_query($InstrMappingAbfrage); $mappingErgebnis = mysql_query($InstrMappingAbfrage);
while ($row = mysql_fetch_object($mappingErgebnis)) { while ($row = mysql_fetch_object($mappingErgebnis)) {
if (array_key_exists($row->instr_address,$fehlerdaten['Daten'])) { if (array_key_exists($row->instr_address,$fehlerdaten['Daten'])) {
$newline .= '<span data-address="' . dechex($row->instr_address) . '" class="hasFehler" '; $newline = '<span data-address="' . dechex($row->instr_address) . '" class="hasFehler" ';
foreach ($resulttypes as $value) { foreach ($resulttypes as $value) {
// FIXME prefix with 'data-results-', adapt JS
$newline .= $value . '="' . $fehlerdaten['Daten'][$row->instr_address][$value] . '" '; $newline .= $value . '="' . $fehlerdaten['Daten'][$row->instr_address][$value] . '" ';
$maxFehler[$value] = $maxFehler[$value] + $fehlerdaten['Daten'][$row->instr_address][$value]; $maxFehler[$value] += $fehlerdaten['Daten'][$row->instr_address][$value];
} }
$newline .= ' style="cursor: pointer;">' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span>'; $newline .= ' style="cursor: pointer;">' . dechex($row->instr_address) . ' ' . htmlspecialchars($row->disassemble) . '</span>';