I have a deadlocked .NET Core process running on Linux. I've attached lldb and I can see that there are hundreds of threads stuck on Monitor.ReliableEnter, and they all seem to be trying to lock the same object, but I can't figure out which thread is holding it.
This is trivial on Windows with windbg via the !SyncBlk command, but as far as I can tell, there's no equivalent on Linux. The object's sync block contains the thread that has the lock held, and I can find the sync block index for the object being locked, but I don't know where the sync block table is located in memory.
How can I figure out which thread is holding the lock on this object?