Added non-debug ebreak intercept

This commit is contained in:
vhaudiquet 2023-10-08 20:16:10 +02:00
parent 21c85d0bec
commit cdf2ed883a

View File

@ -8,32 +8,52 @@ char* CURRENT_NAME;
int main(int argc, char** argv)
{
CURRENT_NAME = argc ? argv[0] : NAME;
parse_options(argc, argv);
CURRENT_NAME = argc ? argv[0] : NAME;
parse_options(argc, argv);
// Initialize the memory
mem_init();
// Initialize the memory
mem_init();
// Bootload the file passed as argument
uint32_t entry_point = bootload(file_path);
// Bootload the file passed as argument
uint32_t entry_point = bootload(file_path);
// Initialize the CPU
cpu_init();
cpu0->pc = entry_point;
// Initialize the CPU
cpu_init();
cpu0->pc = entry_point;
if(gdbstub)
{
gdbstub_start();
gdbstub_wait_for_connection();
}
if(gdbstub)
{
gdbstub_start();
gdbstub_wait_for_connection();
}
// CPU simulation : create cpu0 thread
if(!gdbstub) cpu0->sim_ticks_left = -1; // Simulate forever
pthread_t cpu0_thread;
pthread_create(&cpu0_thread, 0, (void*) cpu_loop, cpu0);
// CPU simulation : create cpu0 thread
if(!gdbstub) cpu0->sim_ticks_left = -1; // Simulate forever
pthread_t cpu0_thread;
pthread_create(&cpu0_thread, 0, (void*) cpu_loop, cpu0);
// Wait for the simulation to end
pthread_join(cpu0_thread, 0);
return 0;
// Wait for the simulation to end
if(gdbstub)
{
pthread_join(cpu0_thread, 0);
}
else
{
while(1)
{
pthread_mutex_lock(&cpu0_mutex);
pthread_cond_wait(&cpu0->sim_condition, &cpu0_mutex);
if(!cpu0->sim_ticks_left && cpu0->sim_ticks_done > 0)
{
// Simulation ended
break;
}
pthread_mutex_unlock(&cpu0_mutex);
}
fprintf(stderr, "Simulation ended in a non-debug environment\n");
return cpu0->regs.a0;
}
return 0;
}