forked from eden-emu/eden
		
	Merge pull request #453 from Subv/thread_callstack
Qt/WaitTree: Display the callstack for each thread in the wait tree widget
This commit is contained in:
		
						commit
						3cad22b393
					
				
					 2 changed files with 37 additions and 0 deletions
				
			
		|  | @ -98,6 +98,30 @@ std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeMutexInfo::GetChildren() cons | |||
|     return list; | ||||
| } | ||||
| 
 | ||||
| WaitTreeCallstack::WaitTreeCallstack(const Kernel::Thread& thread) : thread(thread) {} | ||||
| 
 | ||||
| QString WaitTreeCallstack::GetText() const { | ||||
|     return tr("Call stack"); | ||||
| } | ||||
| 
 | ||||
| std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeCallstack::GetChildren() const { | ||||
|     std::vector<std::unique_ptr<WaitTreeItem>> list; | ||||
| 
 | ||||
|     constexpr size_t BaseRegister = 29; | ||||
|     u64 base_pointer = thread.context.cpu_registers[BaseRegister]; | ||||
| 
 | ||||
|     while (base_pointer != 0) { | ||||
|         u64 lr = Memory::Read64(base_pointer + sizeof(u64)); | ||||
|         if (lr == 0) | ||||
|             break; | ||||
|         list.push_back( | ||||
|             std::make_unique<WaitTreeText>(tr("0x%1").arg(lr - sizeof(u32), 16, 16, QChar('0')))); | ||||
|         base_pointer = Memory::Read64(base_pointer); | ||||
|     } | ||||
| 
 | ||||
|     return list; | ||||
| } | ||||
| 
 | ||||
| WaitTreeWaitObject::WaitTreeWaitObject(const Kernel::WaitObject& o) : object(o) {} | ||||
| 
 | ||||
| bool WaitTreeExpandableItem::IsExpandable() const { | ||||
|  | @ -269,6 +293,8 @@ std::vector<std::unique_ptr<WaitTreeItem>> WaitTreeThread::GetChildren() const { | |||
|                                                             thread.IsSleepingOnWaitAll())); | ||||
|     } | ||||
| 
 | ||||
|     list.push_back(std::make_unique<WaitTreeCallstack>(thread)); | ||||
| 
 | ||||
|     return list; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -73,6 +73,17 @@ private: | |||
|     Kernel::SharedPtr<Kernel::Thread> owner; | ||||
| }; | ||||
| 
 | ||||
| class WaitTreeCallstack : public WaitTreeExpandableItem { | ||||
|     Q_OBJECT | ||||
| public: | ||||
|     explicit WaitTreeCallstack(const Kernel::Thread& thread); | ||||
|     QString GetText() const override; | ||||
|     std::vector<std::unique_ptr<WaitTreeItem>> GetChildren() const override; | ||||
| 
 | ||||
| private: | ||||
|     const Kernel::Thread& thread; | ||||
| }; | ||||
| 
 | ||||
| class WaitTreeWaitObject : public WaitTreeExpandableItem { | ||||
|     Q_OBJECT | ||||
| public: | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Sebastian Valle
						Sebastian Valle