Currently, MachineThreads instantiates MachineThreads::Thread (which is just a linked list node) that points to MachineThreads::ThreadData (a thread specific record that basically copies the content of WTFThreadData i.e. the stack bounds, and adds a few other things). In order to instantiate the MachineThreads::ThreadData, the code needs to consult (and thereby create) the WTFThreadData instance anyway.
If we can lower PlatformThread to the WTF layer (and unify it with whatever representation of a thread id we have there e.g. that which is returned by currentThread()), then we can add that to WTFThreadData. I think it is also fine to add the other platform specific MachineThreads::ThreadData fields to WTFThreadData as well.
Note: a side detail, we used to copy the stack bounds base and end. Instead, we can change MachineStackMarker.cpp to use StackBounds::contains() instead to check the stack bounds.
MachineThreads are converted to WTF::ThreadGroup.