mirror of https://github.com/mgba-emu/mgba.git
Merge commit 'c07043cb5a8579fd398eecf2d74a686e51cb95cc' into translations
This commit is contained in:
commit
682ae2fb3b
|
@ -133,6 +133,7 @@ struct mBreakpoint {
|
|||
int segment;
|
||||
enum mBreakpointType type;
|
||||
struct ParseTree* condition;
|
||||
bool isTemporary;
|
||||
};
|
||||
|
||||
struct mWatchpoint {
|
||||
|
|
|
@ -218,6 +218,11 @@ static void ARMDebuggerCheckBreakpoints(struct mDebuggerPlatform* d) {
|
|||
.target = TableLookup(&d->p->pointOwner, breakpoint->d.id)
|
||||
};
|
||||
mDebuggerEnter(d->p, DEBUGGER_ENTER_BREAKPOINT, &info);
|
||||
if (breakpoint->d.isTemporary) {
|
||||
_destroyBreakpoint(debugger->d.p, breakpoint);
|
||||
ARMDebugBreakpointListShift(&debugger->breakpoints, i, 1);
|
||||
--i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -323,7 +328,10 @@ static void ARMDebuggerEnter(struct mDebuggerPlatform* platform, enum mDebuggerE
|
|||
|
||||
ARMRunFake(cpu, breakpoint->sw.opcode);
|
||||
|
||||
if (debugger->setSoftwareBreakpoint) {
|
||||
if (breakpoint->d.isTemporary) {
|
||||
_destroyBreakpoint(debugger->d.p, breakpoint);
|
||||
ARMDebugBreakpointListShift(&debugger->swBreakpoints, i, 1);
|
||||
} else if (debugger->setSoftwareBreakpoint) {
|
||||
debugger->setSoftwareBreakpoint(debugger, breakpoint->d.address, breakpoint->sw.mode, &breakpoint->sw.opcode);
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -255,7 +255,25 @@ static void _continue(struct GDBStub* stub, const char* message) {
|
|||
}
|
||||
|
||||
static void _step(struct GDBStub* stub, const char* message) {
|
||||
const struct ARMCore* cpu = stub->d.p->core->cpu;
|
||||
const int32_t pc = cpu->gprs[ARM_PC];
|
||||
|
||||
stub->d.p->core->step(stub->d.p->core);
|
||||
|
||||
if (pc >= GBA_SIZE_BIOS && cpu->gprs[ARM_PC] < GBA_SIZE_BIOS) {
|
||||
// GDB cannot cope with jumps into BIOS
|
||||
// skip over them by placing a temporary breakpoint at PC (instruction after the jump)
|
||||
// and then continue without sending a GDB SIGTRAP
|
||||
const struct mBreakpoint breakpoint = {
|
||||
.address = pc,
|
||||
.type = BREAKPOINT_HARDWARE,
|
||||
.isTemporary = true
|
||||
};
|
||||
stub->d.p->platform->setBreakpoint(stub->d.p->platform, &stub->d, &breakpoint);
|
||||
_continue(stub, message);
|
||||
return;
|
||||
}
|
||||
|
||||
snprintf(stub->outgoing, GDB_STUB_MAX_LINE - 4, "S%02x", SIGTRAP);
|
||||
_sendMessage(stub);
|
||||
// TODO: parse message
|
||||
|
|
|
@ -5417,7 +5417,7 @@ If it is set to OpenGL and you still see this, your graphics card or drivers may
|
|||
<message>
|
||||
<location filename="../SettingsView.ui" line="1851"/>
|
||||
<source>GBC compatible:</source>
|
||||
<translation>Compatibile BGC:</translation>
|
||||
<translation>Compatibile GBC:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../SettingsView.ui" line="1861"/>
|
||||
|
|
|
@ -53,6 +53,11 @@ static void SM83DebuggerCheckBreakpoints(struct mDebuggerPlatform* d) {
|
|||
.target = TableLookup(&d->p->pointOwner, breakpoint->id)
|
||||
};
|
||||
mDebuggerEnter(d->p, DEBUGGER_ENTER_BREAKPOINT, &info);
|
||||
if (breakpoint->isTemporary) {
|
||||
_destroyBreakpoint(debugger->d.p, breakpoint);
|
||||
mBreakpointListShift(&debugger->breakpoints, i, 1);
|
||||
--i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue