| 212 | } |
| 213 | |
| 214 | FEXCore::HLE::ExecutableRangeInfo InvalidationTracker::QueryExecutableRange(uint64_t Address) { |
| 215 | std::shared_lock Lock(IntervalsLock); |
| 216 | const auto XResult = XIntervals.Query(Address); |
| 217 | if (!XResult.Enclosed) { |
| 218 | return {}; |
| 219 | } |
| 220 | const auto RWXResult = RWXIntervals.Query(Address); |
| 221 | if (RWXResult.Enclosed) { |
| 222 | return {RWXResult.Interval.Offset, RWXResult.Interval.End - RWXResult.Interval.Offset, true}; |
| 223 | } else if (RWXResult.Size && RWXResult.Size < XResult.Size) { |
| 224 | return {XResult.Interval.Offset, RWXResult.Interval.Offset - XResult.Interval.Offset, false}; |
| 225 | } |
| 226 | return {XResult.Interval.Offset, XResult.Interval.End - XResult.Interval.Offset, false}; |
| 227 | } |
| 228 | |
| 229 | void InvalidationTracker::DetectMonoBackpatcherBlock(FEXCore::Core::InternalThreadState* Thread, uint64_t HostPc) { |
| 230 | if (!MonoBackpatcherDetectionPending) { |
no test coverage detected