Skip to content

Commit

Permalink
Fix ModuleLoadUnloadTraceData.ModuleID cast to be unchecked since its…
Browse files Browse the repository at this point in the history
… really a ulong member. (#4354)

The ModuleLoadUnload events ModuleID is typed as a uint64 in the
EventPipe manifest and emitted as a uint64 in the event payload.
However, the parsing logic in ModuleLoadUnloadTraceDataevent in trace
event:


https://github.com/microsoft/perfview/blob/a6c87911fe1aef8f59c9ce54aa4e16a1be6db91e/src/TraceEvent/Parsers/ClrEtwAll.cs.base#L4963

handles it as a long. Android devices running arm64 can use pointer
tagging meaning that high bits can be set in 64-bit addresses and since
module id is a memory address, it will be returned as a negative long
from ModuleLoadUnload event and since all diagnostic tooling is build
with overflow checking enabled by default, casting it to a ulong will
trigger and overflow exception when high bit is set.

Fix is to do an unchecked cast in this case since the value should be
threated as a ulong in first place.

Fixes #4348.
  • Loading branch information
lateralusX committed Oct 23, 2023
1 parent 609ce19 commit 093a0ea
Showing 1 changed file with 4 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,13 @@ internal void SetupCallbacks(MemoryGraph memoryGraph, TraceEventDispatcher sourc
return;
}

if (!m_moduleID2Name.ContainsKey((ulong)data.ModuleID))
ulong moduleID = unchecked((ulong)data.ModuleID);
if (!m_moduleID2Name.ContainsKey(moduleID))
{
m_moduleID2Name[(ulong)data.ModuleID] = data.ModuleILPath;
m_moduleID2Name[moduleID] = data.ModuleILPath;
}

m_log.WriteLine("Found Module {0} ID 0x{1:x}", data.ModuleILFileName, (ulong)data.ModuleID);
m_log.WriteLine("Found Module {0} ID 0x{1:x}", data.ModuleILFileName, moduleID);
};
source.Clr.AddCallbackForEvents(moduleCallback); // Get module events for clr provider
// TODO should not be needed if we use CAPTURE_STATE when collecting.
Expand Down

0 comments on commit 093a0ea

Please sign in to comment.