Skip to content

Commit

Permalink
backend/dynarmic: bug fix for context_restore
Browse files Browse the repository at this point in the history
  • Loading branch information
zhkl0228 committed Dec 17, 2021
1 parent 575ac20 commit d3afa16
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 0 deletions.
14 changes: 14 additions & 0 deletions backend/dynarmic/src/main/native/dynarmic/dynarmic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1290,13 +1290,20 @@ JNIEXPORT void JNICALL Java_com_github_unidbg_arm_backend_dynarmic_Dynarmic_cont
jit->SetFpcr(ctx->fpcr);
jit->SetFpsr(ctx->fpsr);
jit->SetPstate(ctx->pstate);

DynarmicCallbacks64 *cb = dynarmic->cb64;
cb->tpidr_el0 = ctx->tpidr_el0;
cb->tpidrro_el0 = ctx->tpidrro_el0;
} else {
Dynarmic::A32::Jit *jit = dynarmic->jit32;
t_context32 ctx = (t_context32) context;
jit->Regs() = ctx->regs;
jit->ExtRegs() = ctx->extRegs;
jit->SetCpsr(ctx->cpsr);
jit->SetFpscr(ctx->fpscr);

DynarmicCallbacks32 *cb = dynarmic->cb32;
cb->cp15.get()->uro = ctx->uro;
}
}

Expand All @@ -1318,13 +1325,20 @@ JNIEXPORT void JNICALL Java_com_github_unidbg_arm_backend_dynarmic_Dynarmic_cont
ctx->fpcr = jit->GetFpcr();
ctx->fpsr = jit->GetFpsr();
ctx->pstate = jit->GetPstate();

DynarmicCallbacks64 *cb = dynarmic->cb64;
ctx->tpidr_el0 = cb->tpidr_el0;
ctx->tpidrro_el0 = cb->tpidrro_el0;
} else {
Dynarmic::A32::Jit *jit = dynarmic->jit32;
t_context32 ctx = (t_context32) context;
ctx->regs = jit->Regs();
ctx->extRegs = jit->ExtRegs();
ctx->cpsr = jit->Cpsr();
ctx->fpscr = jit->Fpscr();

DynarmicCallbacks32 *cb = dynarmic->cb32;
ctx->uro = cb->cp15.get()->uro;
}
}

Expand Down
3 changes: 3 additions & 0 deletions backend/dynarmic/src/main/native/dynarmic/dynarmic.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,14 @@ typedef struct context64 {
std::uint32_t fpcr;
std::uint32_t fpsr;
std::uint32_t pstate;
std::uint64_t tpidr_el0;
std::uint64_t tpidrro_el0;
} *t_context64;

typedef struct context32 {
std::array<std::uint32_t, 16> regs;
std::array<std::uint32_t, 64> extRegs;
std::uint32_t cpsr;
std::uint32_t fpscr;
std::uint32_t uro;
} *t_context32;
Binary file not shown.

0 comments on commit d3afa16

Please sign in to comment.