panda: non-returning openocd-loop at terminate
Previously for correct termination, the PandaController called the finish-function of the openocd wrapper, invoked a coroutine switch and waited for the openocd wrapper to finish up and switch coroutine again, so the PandaController could exit with correct exitStatus. Now the openocd-wrapper directly exits with chosen exit status. Change-Id: I8d318a4143c53340896ccee4d059a0d79fdcfe89
This commit is contained in:
@ -46,6 +46,7 @@ using std::dec;
|
|||||||
* Flag for finishing main loop execution.
|
* Flag for finishing main loop execution.
|
||||||
*/
|
*/
|
||||||
static bool oocdw_exection_finished = false;
|
static bool oocdw_exection_finished = false;
|
||||||
|
static int oocdw_exCode;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initially set target struct pointers for use in
|
* Initially set target struct pointers for use in
|
||||||
@ -334,12 +335,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
LOG << "finished" << endl;
|
LOG << "finished" << endl;
|
||||||
|
|
||||||
/*
|
exit(oocdw_exCode);
|
||||||
* Return to experiment flow to properly exit execution
|
|
||||||
*/
|
|
||||||
fail::simulator.resume();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -598,9 +594,10 @@ void oocdw_write_reg(uint32_t reg_num, enum arm_reg_group rg, uint32_t data)
|
|||||||
reg->type->set(reg, (uint8_t*)(&data));
|
reg->type->set(reg, (uint8_t*)(&data));
|
||||||
}
|
}
|
||||||
|
|
||||||
void oocdw_finish()
|
void oocdw_finish(int exCode)
|
||||||
{
|
{
|
||||||
oocdw_exection_finished = true;
|
oocdw_exection_finished = true;
|
||||||
|
oocdw_exCode = exCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void oocdw_read_from_memory(uint32_t address, uint32_t chunk_size,
|
void oocdw_read_from_memory(uint32_t address, uint32_t chunk_size,
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
#define __OOCD_WRAPPER_H_
|
#define __OOCD_WRAPPER_H_
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <cstdlib>
|
||||||
|
|
||||||
#define OOCD_CONF_FILE_PATH "@OOCD_CONF_FILE_PATH@"
|
#define OOCD_CONF_FILE_PATH "@OOCD_CONF_FILE_PATH@"
|
||||||
#define OOCD_CONF_FILES_PATH "@OOCD_CONF_FILES_PATH@"
|
#define OOCD_CONF_FILES_PATH "@OOCD_CONF_FILES_PATH@"
|
||||||
@ -81,7 +82,7 @@ void oocdw_reboot();
|
|||||||
* Before returning, another coroutine-switch is called, so the
|
* Before returning, another coroutine-switch is called, so the
|
||||||
* experiment is able to exit in desired state.
|
* experiment is able to exit in desired state.
|
||||||
*/
|
*/
|
||||||
void oocdw_finish();
|
void oocdw_finish(int exCode = EXIT_SUCCESS);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read data from pandaboard memory
|
* Read data from pandaboard memory
|
||||||
|
|||||||
@ -9,7 +9,6 @@ set(PROTOS
|
|||||||
FailControlMessage.proto
|
FailControlMessage.proto
|
||||||
DatabaseCampaignMessage.proto
|
DatabaseCampaignMessage.proto
|
||||||
TracePlugin.proto
|
TracePlugin.proto
|
||||||
HopChain.proto
|
|
||||||
)
|
)
|
||||||
|
|
||||||
#### PROTOBUFS ####
|
#### PROTOBUFS ####
|
||||||
|
|||||||
@ -89,12 +89,12 @@ void PandaController::reboot()
|
|||||||
|
|
||||||
void PandaController::terminate(int exCode)
|
void PandaController::terminate(int exCode)
|
||||||
{
|
{
|
||||||
oocdw_finish();
|
oocdw_finish(exCode);
|
||||||
/*
|
/*
|
||||||
* Resume to let OpenOCD terminate properly
|
* Resume to let OpenOCD terminate properly
|
||||||
|
* This call does not return!
|
||||||
*/
|
*/
|
||||||
m_Flows.resume();
|
m_Flows.resume();
|
||||||
SimulatorController::terminate(exCode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // end-of-namespace: fail
|
} // end-of-namespace: fail
|
||||||
|
|||||||
Reference in New Issue
Block a user