| 5332 | } |
| 5333 | |
| 5334 | bool WinDebugger::PopulateRegisters(CPURegisters* registers, BF_CONTEXT& lcContext) |
| 5335 | { |
| 5336 | #ifdef BF_DBG_32 |
| 5337 | registers->mIntRegs.eax = lcContext.Eax; |
| 5338 | registers->mIntRegs.ecx = lcContext.Ecx; |
| 5339 | registers->mIntRegs.edx = lcContext.Edx; |
| 5340 | registers->mIntRegs.ebx = lcContext.Ebx; |
| 5341 | registers->mIntRegs.esp = lcContext.Esp; |
| 5342 | registers->mIntRegs.ebp = lcContext.Ebp; |
| 5343 | registers->mIntRegs.esi = lcContext.Esi; |
| 5344 | registers->mIntRegs.edi = lcContext.Edi; |
| 5345 | registers->mIntRegs.eip = lcContext.Eip; |
| 5346 | registers->mIntRegs.efl = lcContext.EFlags; |
| 5347 | |
| 5348 | BF_ASSERT(sizeof(lcContext.FloatSave.RegisterArea) == sizeof(registers->mFpMmRegsArray)); |
| 5349 | memcpy(registers->mFpMmRegsArray, lcContext.FloatSave.RegisterArea, sizeof(lcContext.FloatSave.RegisterArea)); |
| 5350 | |
| 5351 | BF_ASSERT(sizeof(registers->mXmmRegsArray) == 32 * sizeof(float)); |
| 5352 | memcpy(registers->mXmmRegsArray, &lcContext.ExtendedRegisters[160], sizeof(registers->mXmmRegsArray)); |
| 5353 | #else |
| 5354 | registers->mIntRegs.rax = lcContext.Rax; |
| 5355 | registers->mIntRegs.rcx = lcContext.Rcx; |
| 5356 | registers->mIntRegs.rdx = lcContext.Rdx; |
| 5357 | registers->mIntRegs.rbx = lcContext.Rbx; |
| 5358 | registers->mIntRegs.rsp = lcContext.Rsp; |
| 5359 | registers->mIntRegs.rbp = lcContext.Rbp; |
| 5360 | registers->mIntRegs.rsi = lcContext.Rsi; |
| 5361 | registers->mIntRegs.rdi = lcContext.Rdi; |
| 5362 | registers->mIntRegs.rip = lcContext.Rip; |
| 5363 | registers->mIntRegs.efl = lcContext.EFlags; |
| 5364 | |
| 5365 | registers->mIntRegs.r8 = lcContext.R8; |
| 5366 | registers->mIntRegs.r9 = lcContext.R9; |
| 5367 | registers->mIntRegs.r10 = lcContext.R10; |
| 5368 | registers->mIntRegs.r11 = lcContext.R11; |
| 5369 | registers->mIntRegs.r12 = lcContext.R12; |
| 5370 | registers->mIntRegs.r13 = lcContext.R13; |
| 5371 | registers->mIntRegs.r14 = lcContext.R14; |
| 5372 | registers->mIntRegs.r15 = lcContext.R15; |
| 5373 | |
| 5374 | registers->mIntRegs.gs = lcContext.SegGs; |
| 5375 | |
| 5376 | for (int i = 0; i < 8; i++) |
| 5377 | { |
| 5378 | memcpy(®isters->mFpMmRegsArray[i], &lcContext.FltSave.FloatRegisters[i], 10); |
| 5379 | } |
| 5380 | |
| 5381 | BF_ASSERT(sizeof(registers->mXmmRegsArray) == 64 * sizeof(float)); |
| 5382 | memcpy(registers->mXmmRegsArray, BF_CONTEXT_XMMDATA(lcContext), sizeof(registers->mXmmRegsArray)); |
| 5383 | #endif |
| 5384 | |
| 5385 | return (lcContext.ContextFlags & (BF_CONTEXT_EXCEPTION_ACTIVE | BF_CONTEXT_SERVICE_ACTIVE)) == 0; |
| 5386 | } |
| 5387 | |
| 5388 | bool WinDebugger::PopulateRegisters(CPURegisters* registers) |
| 5389 | { |
no outgoing calls
no test coverage detected