| 7021 | } |
| 7022 | |
| 7023 | intptr DbgModule::EvaluateLocation(DbgSubprogram* dwSubprogram, const uint8* locData, int locDataLen, WdStackFrame* stackFrame, DbgAddrType* outAddrType, DbgEvalLocFlags flags) |
| 7024 | { |
| 7025 | BP_ZONE("DebugTarget::EvaluateLocation"); |
| 7026 | |
| 7027 | auto dbgModule = this; |
| 7028 | |
| 7029 | if (locDataLen == DbgLocationLenKind_SegPlusOffset) |
| 7030 | { |
| 7031 | BF_ASSERT(dbgModule->mDbgFlavor == DbgFlavor_MS); |
| 7032 | if (dbgModule->mDbgFlavor == DbgFlavor_MS) |
| 7033 | { |
| 7034 | COFF* coff = (COFF*)dbgModule; |
| 7035 | struct SegOfsData |
| 7036 | { |
| 7037 | uint32 mOfs; |
| 7038 | uint16 mSeg; |
| 7039 | }; |
| 7040 | SegOfsData* segOfsData = (SegOfsData*)locData; |
| 7041 | |
| 7042 | *outAddrType = DbgAddrType_Target; |
| 7043 | return coff->GetSectionAddr(segOfsData->mSeg, segOfsData->mOfs); |
| 7044 | } |
| 7045 | else |
| 7046 | { |
| 7047 | *outAddrType = DbgAddrType_Target; |
| 7048 | return 0; |
| 7049 | } |
| 7050 | } |
| 7051 | |
| 7052 | CPURegisters* registers = NULL; |
| 7053 | if (stackFrame != NULL) |
| 7054 | registers = &stackFrame->mRegisters; |
| 7055 | |
| 7056 | if (locDataLen < 0) |
| 7057 | { |
| 7058 | if (registers == NULL) |
| 7059 | return 0; |
| 7060 | int64 ipAddr = stackFrame->GetSourcePC(); |
| 7061 | |
| 7062 | const uint8* checkLocData = locData; |
| 7063 | int64 startLoc = (int64)GET_FROM(checkLocData, addr_target); |
| 7064 | int64 endLoc = startLoc + GET_FROM(checkLocData, uint16); |
| 7065 | |
| 7066 | BF_ASSERT(dwSubprogram != NULL); |
| 7067 | startLoc += dwSubprogram->mCompileUnit->mLowPC; |
| 7068 | endLoc += dwSubprogram->mCompileUnit->mLowPC; |
| 7069 | |
| 7070 | if ((ipAddr >= startLoc) && (ipAddr < endLoc)) |
| 7071 | { |
| 7072 | locDataLen = -locDataLen - sizeof(addr_target) - sizeof(uint16); |
| 7073 | locData = checkLocData; |
| 7074 | } |
| 7075 | else |
| 7076 | { |
| 7077 | *outAddrType = DbgAddrType_OptimizedOut; |
| 7078 | return 0; |
| 7079 | } |
| 7080 | } |
nothing calls this directly
no test coverage detected