MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / analyze

Method analyze

pcsx2/DebugTools/DisassemblyManager.cpp:129–217  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

127}
128
129void DisassemblyManager::analyze(u32 address, u32 size = 1024)
130{
131 if (!cpu->isAlive() || !cpu->isValidAddress(address))
132 return;
133
134 u32 end = address+size;
135
136 address &= ~3;
137 u32 start = address;
138
139 while (address < end && start <= address)
140 {
141 auto it = findDisassemblyEntry(entries,address,false);
142 if (it != entries.end())
143 {
144 DisassemblyEntry* entry = it->second;
145 entry->recheck();
146 address = entry->getLineAddress(0)+entry->getTotalSize();
147 continue;
148 }
149
150 SymbolInfo info = cpu->GetSymbolGuardian().SymbolOverlappingAddress(
151 address, ccc::FUNCTION | ccc::GLOBAL_VARIABLE | ccc::LOCAL_VARIABLE);
152
153 if (info.descriptor.has_value())
154 {
155 switch (*info.descriptor)
156 {
157 case ccc::SymbolDescriptor::FUNCTION:
158 {
159 DisassemblyFunction* function = new DisassemblyFunction(cpu,info.address.value,info.size);
160 entries[info.address.value] = function;
161 address = info.address.value + info.size;
162 break;
163 }
164 case ccc::SymbolDescriptor::GLOBAL_VARIABLE:
165 {
166 DisassemblyData* data = new DisassemblyData(cpu,info.address.value,info.size,DATATYPE_WORD);
167 entries[info.address.value] = data;
168 address = info.address.value+info.size;
169 break;
170 }
171 case ccc::SymbolDescriptor::LOCAL_VARIABLE:
172 {
173 DisassemblyData* data = new DisassemblyData(cpu,info.address.value,info.size,DATATYPE_WORD);
174 entries[info.address.value] = data;
175 address = info.address.value+info.size;
176 break;
177 }
178 default:
179 break;
180 }
181 } else {
182 if (address % 4)
183 {
184 u32 next = std::min<u32>((address+3) & ~3,cpu->GetSymbolGuardian().SymbolAfterAddress(
185 address, ccc::FUNCTION | ccc::GLOBAL_VARIABLE | ccc::LOCAL_VARIABLE).address.value);
186 DisassemblyData* data = new DisassemblyData(cpu,address,next-address,DATATYPE_BYTE);

Callers 1

paintEventMethod · 0.80

Calls 9

findDisassemblyEntryFunction · 0.85
isAliveMethod · 0.80
isValidAddressMethod · 0.80
recheckMethod · 0.80
SymbolAfterAddressMethod · 0.80
endMethod · 0.45
getLineAddressMethod · 0.45
getTotalSizeMethod · 0.45

Tested by

no test coverage detected