MCPcopy Create free account
hub / github.com/beefytech/Beef / ReadReturnValue

Method ReadReturnValue

IDEHelper/WinDebugger.cpp:4386–4439  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4384}
4385
4386DbgTypedValue WinDebugger::ReadReturnValue(CPURegisters* registers, DbgType* type)
4387{
4388 DbgTypedValue retValue;
4389
4390 if (type->IsFloat())
4391 {
4392 retValue.mType = type;
4393#if BF_DBG_32
4394 retValue.mDouble = ConvertFloat80ToDouble(registers->mFpMmRegsArray[0].fp.fp80);
4395 if (type->mSize == 4)
4396 retValue.mSingle = (float)retValue.mDouble;
4397#else
4398 if (retValue.mType->mTypeCode == DbgType_Single)
4399 retValue.mSingle = registers->mXmmRegsArray[0].f[0];
4400 else
4401 retValue.mDouble = registers->mXmmDRegsArray[0].d[0];
4402#endif
4403 }
4404 else if (type->IsCompositeType())
4405 {
4406 retValue.mType = type;
4407 if (CheckNeedsSRetArgument(type))
4408 {
4409#ifdef BF_DBG_32
4410 retValue.mSrcAddress = mSavedContext.Esp - BF_ALIGN(type->GetByteCount(), 16);
4411#else
4412 retValue.mSrcAddress = mSavedContext.Rsp - BF_ALIGN(type->GetByteCount(), 16);
4413#endif
4414 }
4415 else
4416 {
4417#ifdef BF_DBG_32
4418 retValue.mInt32 = mSavedContext.Eax;
4419#else
4420 retValue.mInt64 = mSavedContext.Rax;
4421#endif
4422 }
4423 }
4424 else
4425 {
4426#ifdef BF_DBG_32
4427 retValue.mType = type;
4428 retValue.mInt32 = registers->mIntRegs.eax;
4429 if (type->mSize == 8)
4430 (&retValue.mInt32)[1] = registers->mIntRegs.edx;
4431#else
4432 retValue.mType = type;
4433 retValue.mInt64 = registers->mIntRegs.rax;
4434#endif
4435 return retValue;
4436 }
4437
4438 return retValue;
4439}
4440
4441bool WinDebugger::SetRegisters(CPURegisters* registers)
4442{

Callers 1

CreateCallMethod · 0.80

Calls 4

ConvertFloat80ToDoubleFunction · 0.85
IsCompositeTypeMethod · 0.80
GetByteCountMethod · 0.80
IsFloatMethod · 0.45

Tested by

no test coverage detected